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

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n

[Linux]:进程(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 进程终止 1.1 进程退出的场景 进程退出只有以下三种情况: 代码运行完毕,结果正确。代码运行完毕,结果不正确。代码异常终止(进程崩溃)。 1.2 进程退出码 在编程中,我们通常认为main函数是代码的入口,但实际上它只是用户级