Linux下程序管理和文件处理(ps、top、kill、killalll、mount、df、du)

2023-10-25 16:59

本文主要是介绍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)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/283958

相关文章

基于Linux的ffmpeg python的关键帧抽取

《基于Linux的ffmpegpython的关键帧抽取》本文主要介绍了基于Linux的ffmpegpython的关键帧抽取,实现以按帧或时间间隔抽取关键帧,文中通过示例代码介绍的非常详细,对大家的学... 目录1.FFmpeg的环境配置1) 创建一个虚拟环境envjavascript2) ffmpeg-py

电脑提示xlstat4.dll丢失怎么修复? xlstat4.dll文件丢失处理办法

《电脑提示xlstat4.dll丢失怎么修复?xlstat4.dll文件丢失处理办法》长时间使用电脑,大家多少都会遇到类似dll文件丢失的情况,不过,解决这一问题其实并不复杂,下面我们就来看看xls... 在Windows操作系统中,xlstat4.dll是一个重要的动态链接库文件,通常用于支持各种应用程序

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

详解Linux中常见环境变量的特点与设置

《详解Linux中常见环境变量的特点与设置》环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息,理解环境变量对于系统管理、软件开发都很重要,下面小编就为大家详细介绍一下吧... 目录前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变

Linux系统中的firewall-offline-cmd详解(收藏版)

《Linux系统中的firewall-offline-cmd详解(收藏版)》firewall-offline-cmd是firewalld的一个命令行工具,专门设计用于在没有运行firewalld服务的... 目录主要用途基本语法选项1. 状态管理2. 区域管理3. 服务管理4. 端口管理5. ICMP 阻断

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流

Golang 日志处理和正则处理的操作方法

《Golang日志处理和正则处理的操作方法》:本文主要介绍Golang日志处理和正则处理的操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录1、logx日志处理1.1、logx简介1.2、日志初始化与配置1.3、常用方法1.4、配合defer