OS第1次实验:熟练使用Linux命令并剖析ps命令
0.个人信息
- 姓名:王璐璐
- 学号:201821121037
- 班级:计算1812
1.实验环境介绍
- 操作系统:Ubuntu 16.04.6 LTS
- 平台:虚拟
命令行的窗口如下:
2.常用命令使用
1.mkdir +文件夹名:创建一个新的文件夹
wanglulu@wanglulu-VirtualBox:~$ ls examples.desktop 公共的 模板 视频 图片 文档 下载 音乐 桌面 wanglulu@wanglulu-VirtualBox:~$ mkdir test wanglulu@wanglulu-VirtualBox:~$ ls examples.desktop test 公共的 模板 视频 图片 文档 下载 音乐 桌面
2.rmdir +文件夹名:删除一个文件夹
wanglulu@wanglulu-VirtualBox:~$ ls examples.desktop test 公共的 模板 视频 图片 文档 下载 音乐 桌面 wanglulu@wanglulu-VirtualBox:~$ rmdir test wanglulu@wanglulu-VirtualBox:~$ ls examples.desktop 公共的 模板 视频 图片 文档 下载 音乐 桌面
3.touch +文件名:创建一个文件,这个文件可以是C文件,也可以是python文件,也可以是普通文件
wanglulu@wanglulu-VirtualBox:~/test$ touch hello.c wanglulu@wanglulu-VirtualBox:~/test$ ls hello.c wanglulu@wanglulu-VirtualBox:~/test$ touch hello.py wanglulu@wanglulu-VirtualBox:~/test$ ls hello.c hello.py wanglulu@wanglulu-VirtualBox:~/test$ touch hello wanglulu@wanglulu-VirtualBox:~/test$ ls hello hello.c hello.py
4.mv 文件路径1 文件路径2:将文件路径1指定的文件移动到文件路径2下,还可以用于重命名
wanglulu@wanglulu-VirtualBox:~/test$ ls hello hello.c hello.py wanglulu@wanglulu-VirtualBox:~/test$ mv hello ../test2 wanglulu@wanglulu-VirtualBox:~/test$ ls hello.c hello.py wanglulu@wanglulu-VirtualBox:~/test$ cd ../test2 wanglulu@wanglulu-VirtualBox:~/test2$ ls hello
wanglulu@wanglulu-VirtualBox:~/test2$ ls
hello.txt
wanglulu@wanglulu-VirtualBox:~/test2$ mv hello.txt world.txt
wanglulu@wanglulu-VirtualBox:~/test2$ ls
world.txt
5.cat +文件名:读取文件中的内容
more +文件名:与cat功能相类似
less +文件名:将进入一个终端显示中显示文件内容
wanglulu@wanglulu-VirtualBox:~/test2$ cat world.txt hello world !!!
wanglulu@wanglulu-VirtualBox:~/test2$ more world.txt
hello world !!!
6.pwd:显示当前目录的完整路径
wanglulu@wanglulu-VirtualBox:~/test2$ pwd /home/wanglulu/test2
3.剖析ps命令
(1)运行 man ps,得到以下结果(部分):
NAME ps - report a snapshot of the current processes. SYNOPSIS ps [options]
EXAMPLES To see every process on the system using standard syntax: ps -e ps -ef ps -eF ps -ely To see every process on the system using BSD syntax: ps ax ps axu To print a process tree: ps -ejH ps axjf To get info about threads: ps -eLf ps axms To get security info: ps -eo euser,ruser,suser,fuser,f,comm,label ps axZ ps -eM To see every process running as root (real & effective ID) in user format: ps -U root -u root u To see every process with a user-defined format: ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm ps -Ao pid,tt,user,fname,tmout,f,wchan Print only the process IDs of syslogd: ps -C syslogd -o pid= Print only the name of PID 42: ps -q 42 -o comm=
(2)运行ps的各个参数,查看结果:
- ps -ef:使用标准语法来查看每个进程(较常用)
wanglulu@wanglulu-VirtualBox:~$ ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 20:35 ? 00:00:01 /sbin/init splash root 2 0 0 20:35 ? 00:00:00 [kthreadd]
ps -e:显示所有程序,使用-e选项的效果与指定“A”选项一样;在-e后加一个f,则会多显示UID,PPIP,C与STIME这4项栏位
wanglulu@wanglulu-VirtualBox:~$ ps -e PID TTY TIME CMD 1 ? 00:00:01 systemd 2 ? 00:00:00 kthreadd
ps -eF:显示的栏目比 ps -ef要多出SZ,RSS,PSR这3栏
wanglulu@wanglulu-VirtualBox:~$ ps -eF UID PID PPID C SZ RSS PSR STIME TTY TIME CMD root 1 0 0 5995 1600 0 20:35 ? 00:00:01 /sbin/init splas root 2 0 0 0 0 0 20:35 ? 00:00:00 [kthreadd]
ps -ely:对比以上几种参数,罗列的栏目更多
wanglulu@wanglulu-VirtualBox:~$ ps -ely S UID PID PPID C PRI NI RSS SZ WCHAN TTY TIME CMD S 0 1 0 0 80 0 1600 5995 - ? 00:00:01 systemd S 0 2 0 0 80 0 0 0 - ? 00:00:00 kthreadd
- ps -axu:使用BSD语法来查看每个进程(较常用)
wanglulu@wanglulu-VirtualBox:~$ ps -axu USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 23980 1600 ? Ss 20:35 0:01 /sbin/init spla root 2 0.0 0.0 0 0 ? S 20:35 0:00 [kthreadd]
ps -ax:在-ax后增加一个u得到的信息更详细
wanglulu@wanglulu-VirtualBox:~$ ps -ax PID TTY STAT TIME COMMAND 1 ? Ss 0:01 /sbin/init splash 2 ? S 0:00 [kthreadd]
- ps axjf:打印出进程树 ;可以查看进程之前的管理,更加清晰
wanglulu@wanglulu-VirtualBox:~$ ps axjf PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND 0 2 0 0 ? -1 S 0 0:00 [kthreadd] 2 3 0 0 ? -1 I 0 0:00 \_ [kworker/0:0] 2 4 0 0 ? -1 I< 0 0:00 \_ [kworker/0:0H] 2 6 0 0 ? -1 I< 0 0:00 \_ [mm_percpu_wq]
ps -ejH:通过空格来显示进程之前的管理
wanglulu@wanglulu-VirtualBox:~$ ps -ejH PID PGID SID TTY TIME CMD 2 0 0 ? 00:00:00 kthreadd 3 0 0 ? 00:00:00 kworker/0:0 4 0 0 ? 00:00:00 kworker/0:0H 1 1 1 ? 00:00:01 systemd 225 225 225 ? 00:00:00 systemd-journal 248 248 248 ? 00:00:00 systemd-udevd 582 582 582 ? 00:00:00 rsyslogd 583 583 583 ? 00:00:00 systemd-logind 590 590 590 ? 00:00:00 acpid 595 595 595 ? 00:00:00 accounts-daemon 608 608 608 ? 00:00:00 avahi-daemon 650 608 608 ? 00:00:00 avahi-daemon 627 627 627 ? 00:00:00 snapd
- ps -eLf:获取进程的相关信息
wanglulu@wanglulu-VirtualBox:~$ ps -eLf UID PID PPID LWP C NLWP STIME TTY TIME CMD root 1 0 1 0 1 20:35 ? 00:00:01 /sbin/init splash root 2 0 2 0 1 20:35 ? 00:00:00 [kthreadd] root 225 1 225 0 1 20:35 ? 00:00:00 /lib/systemd/systemd- root 248 1 248 0 1 20:35 ? 00:00:00 /lib/systemd/systemd- root 369 2 369 0 1 20:35 ? 00:00:00 [iprt-VBoxWQueue] syslog 582 1 582 0 4 20:36 ? 00:00:00 /usr/sbin/rsyslogd -n syslog 582 1 651 0 4 20:36 ? 00:00:00 /usr/sbin/rsyslogd -n
ps axms:
wanglulu@wanglulu-VirtualBox:~$ ps axms UID PID PENDING BLOCKED IGNORED CAUGHT STAT TTY TIME COMMAND 0 1 00000000 - - - - ? 0:01 /sbin/i 0 - 00000000 <28014a03 00001000 <800004ec Ss - 0:01 - 104 582 00000000 - - - - ? 0:00 /usr/sb 104 - 00000000 00000000 01001206 <80114801 Ssl - 0:00 - 104 - 00000000 <7febfeff 01001206 <80114801 Ssl - 0:00 - 104 - 00000000 <7febfeff 01001206 <80114801 Ssl - 0:00 - 104 - 00000000 <7febfeff 01001206 <80114801 Ssl - 0:00 - 0 583 00000000 - - - - ? 0:00 /lib/sy 0 - 00000000 <00000000 <00001000 <80000000 Ss - 0:00 - 0 590 00000000 - - - - ? 0:00 /usr/sb 0 - 00000000 00000000 00001000 00004007 Ss - 0:00 - 0 595 00000000 - - - - ? 0:00 /usr/li 0 - 00000000 00000000 00001000 <80004002 Ssl - 0:00 - 0 - 00000000 <7ffbfeff 00001000 <80004002 Ssl - 0:00 - 0 - 00000000 00000000 00001000 <80004002 Ssl - 0:00 -
除了以上这4种参数,还有其他的几种参数,在这里不一一展开了。
(3)解释命令中每个参数的含义,如-e,-f等,具体如下:
-a:显示所有终端机下执行的程序,除了阶段作业领导者之外。 a:显示现行终端机下的所有程序,包括其他用户的程序。 -A:显示所有程序。 -c:显示CLS和PRI栏位。 c:列出程序时,显示每个程序真正的指令名称,而不包含路径,选项或常驻服务的标示。 -C<指令名称>:指定执行指令的名称,并列出该指令的程序的状况。 -d:显示所有程序,但不包括阶段作业领导者的程序。 -e:此选项的效果和指定"A"选项相同。 e:列出程序时,显示每个程序所使用的环境变量。 -f:显示UID,PPIP,C与STIME栏位。 f:用ASCII字符显示树状结构,表达程序间的相互关系。 -g<群组名称>:此选项的效果和指定"-G"选项相同,当亦能使用阶段作业领导者的名称来指定。 g:显示现行终端机下的所有程序,包括群组领导者的程序。 -G<群组识别码>:列出属于该群组的程序的状况,也可使用群组名称来指定。 h:不显示标题列。 -H:显示树状结构,表示程序间的相互关系。 -j或j:采用工作控制的格式显示程序状况。 -l或l:采用详细的格式来显示程序状况。 L:列出栏位的相关信息。 -m或m:显示所有的执行绪。 n:以数字来表示USER和WCHAN栏位。 -N:显示所有的程序,除了执行ps指令终端机下的程序之外。 -p<程序识别码>:指定程序识别码,并列出该程序的状况。 p<程序识别码>:此选项的效果和指定"-p"选项相同,只在列表格式方面稍有差异。 r:只列出现行终端机正在执行中的程序。 -s<阶段作业>:指定阶段作业的程序识别码,并列出隶属该阶段作业的程序的状况。 s:采用程序信号的格式显示程序状况。 S:列出程序时,包括已中断的子程序资料。 -t<终端机编号>:指定终端机编号,并列出属于该终端机的程序的状况。 t<终端机编号>:此选项的效果和指定"-t"选项相同,只在列表格式方面稍有差异。 -T:显示现行终端机下的所有程序。 -u<用户识别码>:此选项的效果和指定"-U"选项相同。 u:以用户为主的格式来显示程序状况。 -U<用户识别码>:列出属于该用户的程序的状况,也可使用用户名称来指定。 U<用户名称>:列出属于该用户的程序的状况。 v:采用虚拟内存的格式显示程序状况。 -V或V:显示版本信息。 -w或w:采用宽阔的格式来显示程序状况。 x:显示所有程序,不以终端机来区分。 X:采用旧式的Linux i386登陆格式显示程序状况。 -y:配合选项"-l"使用时,不显示F(flag)栏位,并以RSS栏位取代ADDR栏位 。 -<程序识别码>:此选项的效果和指定"p"选项相同。 --cols<每列字符数>:设置每列的最大字符数。 --columns<每列字符数>:此选项的效果和指定"--cols"选项相同。 --cumulative:此选项的效果和指定"S"选项相同。 --deselect:此选项的效果和指定"-N"选项相同。 --forest:此选项的效果和指定"f"选项相同。 --headers:重复显示标题列。 --help:在线帮助。 --info:显示排错信息。 --lines<显示列数>:设置显示画面的列数。 --no-headers:此选项的效果和指定"h"选项相同,只在列表格式方面稍有差异。 --group<群组名称>:此选项的效果和指定"-G"选项相同。 --Group<群组识别码>:此选项的效果和指定"-G"选项相同。 --pid<程序识别码>:此选项的效果和指定"-p"选项相同。 --rows<显示列数>:此选项的效果和指定"--lines"选项相同。 --sid<阶段作业>:此选项的效果和指定"-s"选项相同。 --tty<终端机编号>:此选项的效果和指定"-t"选项相同。 --user<用户名称>:此选项的效果和指定"-U"选项相同。 --User<用户识别码>:此选项的效果和指定"-U"选项相同。 --version:此选项的效果和指定"-V"选项相同。 --widty<每列字符数>:此选项的效果和指定"-cols"选项相同。
(4)解释运行 ps -axu命令后,出现的每个字段的含义
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
- USER:该进程对应的使用者帐号
- PID:该进程的进程ID号
- %CPU:该进程使用掉的 CPU 资源百分比
- %MEM:该进程所占用的物理内存百分比
- VSZ:该进程使用掉的虚拟内存量 (Kbytes)
- RSS:该进程占用的固定的内存量 (Kbytes)
- TTY:该进程是在哪个终端机上面运作,若与终端机无关,则显示“?” ;另外,“tty1-tty7”是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序
- STAT:该程序目前的状态。其中,它的值有R,S,T,Z这4种。R :该程序目前正在运作,或者是可被运作; S :该程序目前正在睡眠当中 (可说是 idle 状态啦!),但可被某些讯号(signal) 唤醒;T :该程序目前正在侦测或者是停止了; Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
- START:该进程被触发启动的时间
- TIME:该进程实际使用 CPU 运作的时间
- COMMAND:该程序的实际指令是什么
(5)解释运行 ps -ef命令后,出现的每个字段的含义
UID PID PPID C STIME TTY TIME CMD
- UID:表示执行者身份,用户ID
- PID:进程的ID号
- PPID:父进程的ID号
- C:CPU使用的资源百分比
- STIME:程序启动时间
- TTY:进程与控制终端的关联值
- TIME:进程使用的总CPU时间,即进程已经执行的时间
- CMD:所下达的指令名称
(6)执行ps命令后还会有其他的几种字段,其中有些字段的含义是:
- SID:会话ID
- NI:优先级
- PRI:进程优先级编号
- WCHAN:目前这个程序是否在正在运行,- 表示正在运行
- FLAGS:与进程相关的数字标识
除了这些,还有更多的字段含义。
4.遇到的问题
(1)在参数中,“-”该符号的含义是什么,为什么有无该符号的参数所代表的含义不一样?
5.参考链接
查看操作系统版本:https://www.linuxidc.com/Linux/2014-05/101121.htm
ps命令参数的详细解析:https://blog.csdn.net/l1394049664/article/details/81836184
ps命令常用选项参数详解:https://blog.51cto.com/wangzhihao/1945713
ps指令详解:http://www.360doc.com/content/19/0219/16/13328254_816120717.shtml