本文主要是介绍Linux下程序管理和文件处理(ps、top、kill、killalll、mount、df、du),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 0 背景
- 1 ps/top[【监控进程】
- 1.1 Intel Hyper-Threading Technology(超线程技术)【Simulate MultiThreading(SMT,同步多线程技术)】
- 2 kill/kill all【关闭进程】
- 3 监测磁盘空间
- 3.1 挂载
- 3.2 移除
- 3.3 df【查看磁盘空间】
- 3.4 du【以显示某个特定目录(默认情况下是当前目录)的磁盘使用情况】
0 背景
本文内容总结自《Linux命令行与shell脚本编程大全》。
1 ps/top[【监控进程】
ps -ef
显示信息:
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 500 3081 3080 0 80 0 - 1173 wait pts/0 00:00:00 bash
0 R 500 4463 3081 1 80 0 - 1116 - pts/0 00:00:00 ps
参数含义:
- UID:启动这些进程的用户。
- PID:进程的进程ID。
- PPID:父进程的进程号(如果该进程是由另一个进程启动的)。
- C:进程生命周期中的CPU利用率。
- STIME:进程启动时的系统时间。
- TTY:进程启动时的终端设备。
- TIME:运行进程需要的累计CPU时间。
- CMD:启动的程序名称。
缺点:ps命令虽然在收集运行在系统上的进程信息时非常有用,但也有不足之处:它只能显示某个特定时间点的信息。
top指令实时显示进程信息。
默认情况下,top命令在启动时会按照%CPU值对进程排序。可以在top运行时使用多种交互命令重新排序。
每个交互式命令都是单字符,在top命令运行时键入可改变top的行为:
- 键入f允许你选择对输出进行排序的字段,
- 键入d允许你修改轮询间隔。
- 键入q可以退出top。
用显示的信息如下【Linux下top查看的CPU也是逻辑CPU个数】:
[root@hdp-jiangxue ~]# top
top - 10:19:36 up 94 days, 20:09, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 209 total, 1 running, 208 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.4 us, 0.4 sy, 0.0 ni, 99.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 16378664 total, 343132 free, 14923576 used, 1111956 buff/cache
KiB Swap: 2097148 total, 123496 free, 1973652 used. 985392 avail MemPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND27241 root 20 0 2214808 364292 5464 S 1.0 2.2 748:41.35 java18381 root 20 0 3102436 207996 2528 S 0.7 1.3 842:56.06 java21171 root 20 0 2893492 352456 6956 S 0.7 2.2 1283:11 java517 root 20 0 0 0 0 S 0.3 0.0 56:58.31 xfsaild/dm-02314 root 20 0 4780608 259256 6612 S 0.3 1.6 87:29.34 java9856 root 20 0 3907688 93924 1872 S 0.3 0.6 219:10.73 java21321 root 20 0 2886176 561516 6852 S 0.3 3.4 966:31.66 java21828 root 20 0 2928204 257340 6484 S 0.3 1.6 237:24.95 java29601 root 20 0 2156112 149960 5004 S 0.3 0.9 145:42.31 java56051 root 20 0 6771692 71376 1632 S 0.3 0.4 118:23.42 java93840 root 20 0 0 0 0 S 0.3 0.0 0:00.23 kworker/0:294489 root 20 0 162112 2376 1596 R 0.3 0.0 0:02.43 top
115277 zabbix 20 0 79244 2128 1096 S 0.3 0.0 22:55.17 zabbix_agentd1 root 20 0 134760 3516 1396 S 0.0 0.0 41:39.13 systemd2 root 20 0 0 0 0 S 0.0 0.0 0:10.29 kthreadd4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H6 root 20 0 0 0 0 S 0.0 0.0 42:22.97 ksoftirqd/07 root rt 0 0 0 0 S 0.0 0.0 0:14.37 migration/08 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
详细解释如下:
top - 10:12:34 up 94 days, 20:02, 1 user, load average: 0.00, 0.01, 0.0
第一行显示了当前时间、系统的运行时间、登录的用户数以及系统的平均负载。【平均负载有3个值:最近1分钟的、最近5分钟的和最近15分钟的平均负载。】
⚠️:值越大说明系统的负载越高。由于进程短期的突发性活动,出现最近1分钟的高负载值也很常见,但如果近15分钟内的平均负载都很高,就说明系统可能有问题。【高负载,取决于系统的硬件配置以及系统上通常运行的程序。通常,如果系统的负载值超过了2,就说明系统比较繁忙了。】
Tasks: 210 total, 3 running, 207 sleeping, 0 stopped, 0 zombie
第二行显示了进程概要信息——top命令的输出中将进程叫作任务(task):有多少进程处在运行、休眠、停止或是僵化状态(僵化状态是指进程完成了,但父进程没有响应)。
%Cpu(s): 0.5 us, 0.4 sy, 0.0 ni, 99.1 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
第三行显示了CPU的概要信息。top根据进程的属主(用户还是系统)和进程的状态(运行、空闲还是等待)将CPU利用率分成几类输出。
KiB Mem : 16378664 total, 343180 free, 14923536 used, 1111948 buff/cache
KiB Swap: 2097148 total, 123496 free, 1973652 used. 985432 avail Mem
如果是多核计算,显示的是所有CPU的平均值,按数字“1”可监控每一个逻辑CPU的状况。
%Cpu0 : 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 0.7 us, 1.0 sy, 0.0 ni, 98.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu2 : 0.7 us, 0.7 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
第四、五两行说明了系统内存的状态。第一行说的是系统的物理内存:总共有多少内存,当前用了多少,还有多少空闲。后一行说的是同样的信息,不过是针对系统交换空间(如果分配了的话)的状态而言的。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND18381 root 20 0 3102436 207996 2528 S 1.0 1.3 842:57.20 java27241 root 20 0 2214808 364292 5464 S 1.0 2.2 748:42.71 java
后面的行数显示了当前运行中的进程的详细列表,有些列跟ps命令的输出类似。
- PID:进程的ID。
- USER:进程属主的名字。
- PR:进程的优先级。
- NI:进程的谦让度值。
- VIRT:进程占用的虚拟内存总量。
- RES:进程占用的物理内存总量。
- SHR:进程和其他进程共享的内存总量。
- S:进程的状态(D代表可中断的休眠状态,R代表在运行状态,S代表休眠状态,T代表
跟踪状态或停止状态,Z代表僵化状态)。 - %CPU:进程使用的CPU时间比例。
- %MEM:进程使用的内存占可用内存的比例。
- TIME+:自进程启动到目前为止的CPU时间总量。
- COMMAND:进程所对应的命令行名称,也就是启动的程序名。
1.1 Intel Hyper-Threading Technology(超线程技术)【Simulate MultiThreading(SMT,同步多线程技术)】
一块CPU上面能处理数据的芯片组的数量、比如现在的i5 760,是双核心四线程的CPU,一般来说,物理CPU个数×每颗核数就应该等于逻辑CPU的个数,如果不相等的话,则表示服务器的CPU支持超线程技术。【一颗cpu可以有多核,加上intel的超线程技术(HT), 可以在逻辑上再分一倍数量的cpu core出来逻辑CPU数量=物理cpu数量 x cpu cores 这个规格值 x 2(如果支持并开启ht)】
查看CPU信息:
【1】查看CPU型号:cpu型号是E7-4820
[root@node1 ~]# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c32 Intel(R) Xeon(R) CPU E7- 4820 @ 2.00GHz
【2】查看物理cpu个数:物理核心数是2核
[root@node1 ~]# cat /proc/cpuinfo | grep "physical id" | sort | uniq|wc -l
2
【3】查看逻辑cpu的个数:逻辑cpu个数是32个
[root@node1 ~]# cat /proc/cpuinfo | grep "processor" |wc -l
32
【4】查看cpu是几核:cpu是8核
[root@node1 ~]# cat /proc/cpuinfo | grep "cores"|uniq
cpu cores : 8
参考链接
Intel Hyper-Threading Technology(超线程技术)【Simulate MultiThreading(SMT,同步多线程技术)】:
超线程是英特尔开发出来的一项技术,使得单个处理器可以象两个逻辑处理器那样运行,这样单个处理器以并行执行线程。
一个线程在执行时会占用CPU资源,其他线程想要得到执行就必须等待该线程将CPU资源让出。
利用超线程技术,模拟出的两个逻辑内核共享同一个CPU资源,所以同一时刻可以有两个线程都占用CPU资源,因此这两个线程都可以得到执行,这就是实现同一时间执行两个线程的并行操作。
单一处理器核心来说来说,虽然也可以每秒钟处理成千上万条指令,但是在某一时刻,只能够对一条指令(单个线程)进行处理,超线程技术能够把一个物理处理器在软件层变成两个逻辑处理器,可以使处理器在某一时刻,同步并行处理更多指令和数据(多个线程)。超线程是一种可以将CPU内部暂时闲置处理资源充分“调动”起来的技术。
2 kill/kill all【关闭进程】
linux常见信号:
kill命令可通过进程ID(PID)给进程发信号。默认情况下,kill命令会向命令行中列出的全部PID发送一个TERM信号。
要发送进程信号,必须是进程的属主或登录为root用户。
$ kill 3940
killall命令支持通过进程名而不是PID来结束进程。killall命令也支持通配符。
killall http*
3 监测磁盘空间
Linux虚拟目录中比较复杂的部分是它如何协调管理各个存储设备。在Linux PC上安装的第一块硬盘称为根驱动器。根驱动器包含了虚拟目录的核心,其他目录都是从那里开始构建的。
通常系统文件会存储在根驱动器中,而用户文件则存储在另一驱动器中。
Linux会在根驱动器上创建一些特别的目录,我们称之为挂载点(mount point)。挂载点是虚拟目录中用于分配额外存储设备的目录。虚拟目录会让文件和目录出现在这些挂载点目录中,然而实际上它们却存储在另外一个驱动器中。
3.1 挂载
挂载(mounting):在使用新的存储媒体之前,需要把它放到虚拟目录下。
大多数Linux发行版都能自动挂载特定类型的可移动存储媒体。【可移动存储媒体指的是可从PC上轻易移除的媒体,比如CD-ROM、软盘和U盘。】如果不支持,则需要手动完成。
mount命令提供如下四部分信息:
- 媒体的设备文件名
- 媒体挂载到虚拟目录的挂载点
- 文件系统类型
- 已挂载媒体的访问状态
常见文件系统类型:
- vfat:Windows长文件系统。
- ntfs:Windows NT、XP、Vista以及Windows 7中广泛使用的高级文件系统。
- iso9660:标准CD-ROM文件系统。
注意:大多数U盘和软盘会被格式化成vfat文件系统。而数据CD则必须使用iso9660文件系统类型。
手动将U盘/dev/sdb1【存储设备的设备文件的位置】挂载到/media/disk【挂载点在虚拟目录中的位置】。
# mount -t type device directory
mount -t vfat /dev/sdb1 /media/disk
媒体设备挂载到了虚拟目录后,root用户就有了对该设备的所有访问权限,而其他用户的访问则会被限制。
3.2 移除
上移除一个可移动设备时,不能直接从系统上移除,而应该先卸载。
卸载设备的命令是umount,umount命令的格式:
umount [directory | device ]
示例:
umount /home/rich/mnt
注意:
- 如果有任何程序正在使用设备上的文件,系统就不会允许你卸载它。
- 如果在卸载设备时,系统提示设备繁忙,无法卸载设备,通常是有进程还在访问该设备或使用该设备上的文件。这时可用lsof命令获得使用它的进程信息,然后在应用中停止使用该设备或停止该进程。lsof命令的用法很简
单:lsof /path/to/device/node
3.3 df【查看磁盘空间】
查看某个设备上还有多少磁盘空间【df命令的输出值显示的是Linux系统认为的当前值。有可能系统上有运行的进程已经创建或删除了某个文件,但尚未释放文件。这个值是不会算进闲置空间的。】:
df
显示内容:
输出信息为:
- 设备的设备文件位置;
- 能容纳多少个1024字节大小的块;
- 已用了多少个1024字节大小的块;
- 还有多少个1024字节大小的块可用;
- 已用空间所占的比例;
- 设备挂载到了哪个挂载点上。
更简洁的显示【把输出中的磁盘空间按照用户易读的形式显示,通常用M来替代兆字节,用G替代吉字节】:
df -h
显示内容:
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/disk1s1s1 932Gi 21Gi 192Gi 10% 553781 9767424379 0% /
devfs 191Ki 191Ki 0Bi 100% 662 0 100% /dev
/dev/disk1s5 932Gi 7.0Gi 192Gi 4% 7 9767978153 0% /System/Volumes/VM
/dev/disk1s3 932Gi 439Mi 192Gi 1% 2015 9767976145 0% /System/Volumes/Preboot
/dev/disk1s6 932Gi 110Mi 192Gi 1% 453 9767977707 0% /System/Volumes/Update
/dev/disk1s2 932Gi 711Gi 192Gi 79% 4811713 9763166447 0% /System/Volumes/Data
map auto_home 0Bi 0Bi 0Bi 100% 0 0 100% /System/Volumes/Data/home
/dev/disk1s1 932Gi 21Gi 192Gi 10% 553790 9767424370 0% /System/Volumes/Update/mnt1
3.4 du【以显示某个特定目录(默认情况下是当前目录)的磁盘使用情况】
例如,降序显示文件大小:
du -sh * | sort -nr
输出:
270M jiangxue
79M fyk
39M 下载
19G airflow
12K nohup.out
8.0K index.html
7.0G anaconda3
4.0K cookie.txt
4.0K anaconda-ks.cfg
3.9M metastore_db
0 桌面
0 音乐
0 文档
0 图片
0 视频
0 模板
0 公共
0 thinclient_drives
- 将du命令的输出重定向到sort命令;
- sort:
- -n --numeric-sort 按字符串数值来排序(并不转换为浮点数)
- -r --reverse 反序排序(升序变成降序)
- du:
- -s:显示每个输出参数的总计。
- -h:按用户易读的格式输出大小,即用K替代千字节,用M替代兆字节,用G替代吉字节。
继续学习
这篇关于Linux下程序管理和文件处理(ps、top、kill、killalll、mount、df、du)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!