文章目录
ps
ps (Process Status)命令是一种在 Unix、Linux 和类 Unix 系统中广泛使用的实用工具,它用于显示关于运行中的进程的信息。使用 ps 命令,你可以查看系统上当前运行的进程列表,以及每个进程的状态、所用的内存、CPU 时间、用户 ID 以及其他信息。
基本用法
ps [选项]
常用选项
- 无选项:仅列出与当前终端关联的进程。
ps
- -e 或 -A:显示所有进程。
ps -e
ps -A # 等同于 -e
- -f: 完整格式显示。
ps -f
这个选项提供更详细的输出,包括 UID、PID、PPID(父进程 ID)、C(CPU 利用率)、STIME(启动时间)、TTY(终端)、TIME(CPU 时间)和 CMD(命令名/命令行)。
- -u 用户名: 显示指定用户的进程。
ps -u username
- -p: 按进程 ID 显示进程。
ps -p 1234 # 显示 PID 为 1234 的进程
- –forest:以树状图显示进程,这有助于查看进程间的父子关系。
ps -f --forest
- -o 格式:自定义输出列。
ps -o pid,userid,command # 只显示这三列
- -l 或者 l:长格式显示。
ps -l
显示更多信息,例如 F(标志位)、NI(nice 值)以及 WCHAN(休眠进程的内核函数)。
- -C 名称: 按进程名称查找进程。
ps -C nginx
- -L:显示线程。
ps -L
- –sort:对输出结果排序。
ps --sort=-%mem,-%cpu
这个例子按内存和 CPU 使用率的降序排列进程。
- -H 或 --forest: 以层次结构化的方式显示进程(使得可以看到父子关系)。
ps -H
ps --forest
示例
- 获取系统上所有进程的完整列表:
ps -ef
- 使用用户名列出该用户的所有进程:
ps -u [username]
- 查看特定进程的详细信息:
ps -fp [PID]
- 显示进程树,包括所有进程和它们的父进程:
ps -e --forest
- 对结果排序,比如按照内存消耗降序排列:
ps aux --sort=-%mem
使用 x 选项
当单独使用 x 选项时,通常会显示那些通常由内部服务启动的后台进程,而这些进程不会在没有任何参数时的 ps 输出中显示。
ps x
这将显示当前用户的所有进程,包括没有关联终端的那些进程。如果你是普通用户,你将只看到你自己的进程;如果你是 root 用户或者使用了 sudo,你将看到系统上所有用户的进程。
与其他选项结合
x 选项经常与 u 选项结合使用,来以用户友好的格式显示进程:
ps ux
通过以下命令,你可以看到系统上所有进程,包括没有控制终端的进程,并以用户友好的格式显示:
ps aux
或者,你可以使用 x 选项来查看特定用户(例如 username)的所有进程:
ps ux -U username
结合 -f 选项(全格式),x 选项可以提供更多的细节:
ps fx
这将显示基于树状结构的进程列表,便于用户快速识别进程间的父子关系。
x 选项的主要优势是它可以帮你查找那些没有终端的守护进程(daemons)或其他后台进程。这些信息对于系统管理员来说尤其重要,因为它们涉及到系统的安全性和稳定性。
ps 命令是 admins 和用户用于实时查看系统进程信息的常用工具,而且和其他命令配合使用时也非常有用;例如,通过 grep 来过滤进程,或者和 kill 命令结合来终止特定的进程。由于 ps 有多种格式和不同的参数选项,它可以按照用户需要的方式来自定义显示进程信息。因此,ps 算是系统监控和管理工具中非常灵活的一个。
top
top 命令是 Linux 及 Unix 系统中一种非常有用的实时监控工具,它能够显示系统的动态视图,包括进程信息、系统负载、CPU 使用率、内存使用情况等。这些信息有助于系统管理员和用户监控系统性能,并且在必要时进行优化或故障排查。
基本用法
启动 top 命令只需在终端输入 top:
top
当 top 运行时,它会显示一个实时更新的屏幕,显示系统中当前活动的进程和资源利用情况。
界面组成
top 界面主要分为两部分:
系统概览区:
在屏幕的顶部,显示了系统的整体状态,包括系统运行时间、登录用户数、系统负载均值、进程总数、CPU 使用情况以及内存和交换空间的使用情况等。
进程列表区:
显示各个进程的详细信息,如进程ID(PID)、所属用户(USER)、优先级(PRI)、虚拟内存大小(VIRT)、实际内存使用(RES)、共享内存大小(SHR)、进程状态(S)、CPU 使用率(%CPU)、内存使用率(%MEM)以及命令名称(COMMAND)。
常用命令
top 一旦启动,你还可以使用以下键盘命令进行交互:
h 或者 ?:显示帮助。
q:退出 top。
M:按内存使用量排序。
P:按 CPU 使用率排序。
T:按进程运行时间排序。
k:终止(kill)一个进程。之后会要求输入需要终止的进程 PID 和发送的信号类型(默认为 SIGTERM,15)。
r:重新设置(renice)一个进程的优先级。要求输入进程的 PID 和新的 nice 值。
f:进入字段管理界面,你可以选择显示或隐藏某些列。
t:开启或关闭顶部概览区的显示。
m:切换内存信息显示模式。
z:通过颜色加强显示。
c:切换命令行/程序名显示。
启动时的选项
top 还允许使用选项来启动,这些选项可以改变其显示或行为。以下是一些常用的选项:
-d <秒数>:设置屏幕刷新间隔。
-p :只监控特定的进程ID。
-n <次数>:更新屏幕的次数后退出。
-u <用户名>:只显示指定用户的进程。
例如,要每两秒更新一次屏幕,可以这样启动 top:
top -d 2
要监控 PID 为 1234 的进程,使用:
top -p 1234
注意事项
top 默认按 CPU 使用率高低排序,可以通过操作来改变排序依据。
若要长时间运行 top 命令而又不想占用过多终端空间,可以考虑使用 nohup 命令或将其在后台运行。
理解 top 中每列数据的含义对于准确地评估系统状态至关重要。
top 是 Linux/Unix 系统管理员不可或缺的工具之一,它提供的实时系统信息是监控和优化系统性能的宝贵资源。通过熟练使用 top 和了解其丰富的功能,可以有效地管理和调优系统。
kill
kill 命令是 Unix、Linux 及类 Unix 系统中用来终止进程的基本命令。其工作机制是向进程发送指定的信号。每种信号都有特定的含义,但人们最熟悉的是用来终止进程的 SIGKILL 和用来正常结束进程的 SIGTERM。
基本用法
kill [选项或信号] <进程ID或作业号>
- 选项或信号:可以指定一个信号发送给进程,要么以符号方式指出(例如 SIGKILL),要么以数字表示(例如 -9)。如果没有指定信号,默认使用 SIGTERM(15)。
- 进程ID或作业号:是你想要发送信号的目标进程的标识。进程ID(PID)是系统分配给各个进程的唯一编号。在Shell中,你也可以使用作业号,前面加上 % 来指代后台作业。
常见信号
SIGTERM(15):请求终止一个进程。系统默认信号,允许进程优雅地关闭。
SIGKILL(9):强制终止一个进程。不可被进程捕获或忽略,因此使用时要谨慎,因为它不给进程进行任何清理的机会。
SIGINT(2):通常由 Ctrl+C 发送,请求中断一个进程。
SIGHUP(1):通常会重启进程,例如,重新读取配置文件。
示例
- 终止一个 PID 为 1234 的进程(使用默认的 SIGTERM):
kill 1234
- 强制终止进程(使用 SIGKILL):
kill -SIGKILL 1234
kill -9 1234
- 中断一个进程(使用 SIGINT):
kill -SIGINT 1234
kill -2 1234
扩展使用
kill 命令的扩展使用主要涉及到发送信号给多个进程或根据特定条件选择进程。
使用 killall 命令按名字终止进程。例如,终止所有名为 nginx 的进程:
killall nginx
使用 pkill 命令以模式匹配的方式发送信号。例如,向所有名字中包含 httpd 的进程发送 SIGKILL:
pkill -9 httpd
注意事项
使用 kill 时,尽量先使用 SIGTERM,以给予进程优雅退出的机会。如果进程未能终止,再考虑使用 SIGKILL。
某些进程可能无法被 SIGKILL 终止,特别是处于“僵尸”状态的进程,因为它们已经结束,只在系统中保留了退出状态,等待父进程读取。
SIGKILL 和 SIGSTOP 是两个不能被进程捕获、阻塞或忽略的信号。
理解和使用 kill 命令及相关信号有助于有效地管理和控制系统进程,是 Linux/Unix 系统用户及管理员必备的技能之一。
systemctl
systemctl 是 systemd 系统和服务管理器的主命令,用于控制 systemd 系统和服务管理器。systemd 是一个系统和服务管理器,它已经成为许多 Linux 发行版的标准初始化系统和服务管理工具。
systemd 通过一个名为 unit 的概念来管理系统资源,这些 unit 涉及服务(.service 文件)、设备(.device 文件)、挂载点(.mount 文件)、socket 等等。使用 systemctl 命令,你可以启动、停止、重启、重新加载配置、查看服务的状态和管理系统。
基本用法
基本语法如下:
systemctl [命令] [单元]
常用命令
- 启动、停止、重启服务
启动一个服务:
systemctl start 名称.service
停止一个服务:
systemctl stop 名称.service
重启一个服务:
systemctl restart 名称.service
重新载入服务的配置:
systemctl reload 名称.service
- 查看服务状态
显示服务的状态:
systemctl status 名称.service
查看所有正在运行的服务:
systemctl list-units --type=service
查看已启动的服务的状态:
systemctl is-active 名称.service
- 启用、禁用服务
在启动时启用服务:
systemctl enable 名称.service
禁止服务在启动时启动:
systemctl disable 名称.service
检查服务是否被启用:
systemctl is-enabled 名称.service
- 管理系统状态
重新启动系统(重启电脑):
systemctl reboot
关闭系统并断电:
systemctl poweroff
挂起系统:
systemctl suspend
将系统进入休眠状态:
systemctl hibernate
混合挂起和休眠:
systemctl hybrid-sleep
高级功能
列出所有服务(无论状态)
systemctl list-unit-files --type=service
显示系统启动时的失败单元
systemctl --failed
控制 socket
systemctl start 名称.socket
设置系统时区
timedatectl set-timezone 时间区名称
systemctl 是控制 systemd 初始化系统的关键工具,它有助于管理服务的生命周期,使系统管理员能够执行日常的服务和系统管理任务。随着 systemd 在 Linux 发行版中的普及,熟练掌握 systemctl 的使用对于进行有效的系统管理变得越来越重要。使用 systemctl 可以确保系统服务以及系统资源被恰当配置和管理。
df
df(Disk Free)是 Unix 和类 Unix 系统中一个非常有用的命令行工具,它用于显示挂载点的文件系统的磁盘空间使用情况。通过 df 命令,用户和系统管理员可以获取关于已挂载的文件系统的使用量,剩余空间,已使用空间的百分比以及它们挂载的位置的信息。
基本用法
基础格式:
df [选项] [文件...]
无任何选项时,df 显示所有当前挂载的文件系统的磁盘使用情况。
常用选项
-h, --human-readable:以人类可读的格式(例如 MB、GB)显示大小。
-T, --print-type:显示每个文件系统的类型。
-a, --all:包含所有的文件系统,即使是那些大小为0的。
–total:在输出的最后一行显示所有文件系统的总计。
-i, --inodes:显示 inode 信息而不是块使用情况。
-t, --type=类型:列出指定类型的文件系统。
-x, --exclude-type=类型:不列出指定类型的文件系统。
示例
显示所有文件系统的磁盘使用情况,以人类可读的格式:
df -h
同时显示文件系统类型,再加上 -h 更明了:
df -hT
查看特定文件系统的使用情况,比如只查看 ext4 文件系统:
df -t ext4
排除特定类型的文件系统,如 tmpfs:
df -x tmpfs
显示所有文件系统,包括大小为0的,通常用来检查特殊的文件系统,如 procfs:
df -a
显示 inode 使用情况:
df -i
注意事项
df 输出的磁盘使用量并不总是等同于 du 命令的输出。df 显示未使用磁盘空间,而 du 显示文件占用的空间。由于文件系统的元数据和日志的存在,所以这两者会有不一致。
df 命令通常不包含对 NFS 文件系统的挂载延迟的处理。如果网络或服务器问题导致 NFS 挂载点无响应,df 命令可能会挂起或延迟显示结果。
使用 df 可以快速查看哪些文件系统接近满载,并可能需要清理或扩容。
df 是一个用于检查当前系统磁盘使用状况的不可或缺的工具,对于日常维护任务以及在磁盘空间有限的环境中非常实用。熟悉 df 的不同选项有助于更有效地监控和管理磁盘空间。
du
du(Disk Usage)命令是 Unix 和类 Unix 系统中用于估算文件或目录占用磁盘空间的大小的工具。它可以帮助用户和系统管理员找出占用了大量磁盘空间的文件或目录,从而进行清理和空间管理。du 通常被用于监控磁盘使用情况或进行磁盘配额的管理工作。
基本用法
基本语法格式为:
du [选项] [文件或目录...]
如果没有指定文件或目录,du 会从当前目录开始递归地查询并显示每个子目录的大小。
常用选项
-h 或 --human-readable:以人类可读的格式显示,例如自动选择 KB、MB、GB 作为单位。
-a 或 --all:显示所有文件和目录的大小,而不仅仅是目录。
-s 或 --summarize:仅显示总计,即当前目录的总大小而不列出子目录的大小。
-c 或 --total:除了显示各个目录或文件的大小之外,还在输出的最后一行显示总和。
–max-depth=N:显示目录树中的目录(不显示文件)到 N 级子目录的大小。
-k:以 Kilobytes(KB)为单位显示大小。
-m:以 Megabytes(MB)为单位显示大小。
示例
显示当前目录的磁盘使用情况,以人类可读的形式:
du -h
显示指定目录/path/to/dir的总大小,以人类可读的形式:
du -sh /path/to/dir
显示当前目录中各个文件和子目录的大小,以 MB 为单位:
du -am . | sort -nr | head -n 10
这个命令还将结果通过 sort 命令进行降序排序,并通过 head 命令只显示最大的 10 项结果,是一种查找最占空间的文件和目录的常用方法。
显示当前目录下一级目录的磁盘使用量:
du -h --max-depth=1
注意事项
du 命令显示的是磁盘使用量,它考虑的是被文件占据的磁盘块的大小。
与 df 命令不同,du 检查的是文件系统的使用情况,而 df 显示的是整个文件系统的可用空间。由于文件系统的元数据等因素,两者显示的磁盘使用情况有时候会有不一致。
大规模文件系统下运行 du 可能会比较慢,因为它需要遍历许多文件和目录。
使用 -a 选项时,du 会列出所有文件,这可能会产生大量输出,尤其是在包含大量文件的目录下。
du 是一个非常实用的工具,可以帮助用户和管理员监测和管理磁盘空间。通过有效使用 du 提供的选项,你可以获得关于文件和目录占用空间的详细信息,这对于维持系统的健康运行并确保足够的磁盘空间是非常重要的。
free
free 命令在 Unix 和类 Unix 系统中用于显示系统的空闲、已用和交换内存的信息,包括物理内存和交换空间使用情况。它能帮助用户快速了解系统的内存使用状况,并进行内存相关问题的诊断和分析。
基本用法
基本的 free 命令会显示当前的内存使用情况:
free
输出解释
free 命令的输出通常包含几行,主要是下面几个部分:
total: 系统上的总内存。
used: 已使用的内存总量。
free: 未被使用的内存总量。
shared: 多个进程共享的内存总量(仅在某些系统中有效)。
buff/cache: 由内核缓存或缓冲的内存量,这部分内存用于缓存文件系统的数据,可以被视为后备资源,当系统的应用程序需要更多内存时,这部分内存可以被释放给应用程序使用。
available: 大致可以给应用程序分配的可用内存量,没有考虑交换空间的影响。
常用选项
-b, --bytes: 以字节为单位显示内存使用情况。
-k, --kilo: 以 KB(千字节)为单位显示内存使用情况(默认单位)。
-m, --mega: 以 MB(兆字节)为单位显示内存使用情况。
-g, --giga: 以 GB(吉字节)为单位显示内存使用情况。
-h, --human: 以人类可读的格式显示内存使用情况。
示例
以人类可读的格式显示内存使用情况:
free -h
显示内存使用情况的 MB 单位:
free -m
注意事项
大部分现代的 Linux 系统使用缓存和缓冲区来优化内存的使用。因此,free 显示的 “used” 和 “free” 数值可能与实际应用程序可用的内存量并不匹配。“available” 字段提供了一个估计的可用内存量,这可能更符合用户的直觉。
free 命令所显示的 “buff/cache” 部分应该被视为可回收的内存空间,不应该被认为是已经“丢失”或“耗尽”的内存。
free 命令提供了一个快速方便的方式来查看系统的整体内存使用情况,对于诊断可能的内存问题或者评估系统的资源需求非常有用。一般来说,对于内存密集型的应用或服务,监控内存使用率是不可或缺的一部分系统管理工作。
参考资料
在线文档和手册
- Linux 用户管理手册
通过 man useradd, man usermod, man passwd, man groupadd 等命令来获取命令使用手册。 - Linux 权限管理手册
使用 man chmod, man chown, man chgrp 等命令对权限管理命令获取帮助手册。 - GNU Coreutils 文档
https://www.gnu.org/software/coreutils/manual/coreutils.html
包含了GNU 版本的权限和用户管理工具的详细信息。
图书
-
“UNIX and Linux System Administration Handbook” by Evi Nemeth, Garth Snyder, Trent R. Hein, and Ben Whaley
这本书被认为是 Unix 和 Linux 系统管理的经典著作,它详细讲解了包括用户管理和权限设置在内的众多主题。 -
“Linux Administration: A Beginner’s Guide” by Wale Soyinka
这本指南适用于初学者,并涉及了系统安装、配置、更新、监控和用户管理的基础内容。 -
“How Linux Works: What Every Superuser Should Know” by Brian Ward
此书提供了 Linux 系统的深入分析,包括文件系统管理、用户权限等关键主题。
在线教程和指南
-
DigitalOcean 社区教程
https://www.digitalocean.com/community
提供了一系列关于权限和用户管理的详细教程,适用于不同层次的用户。
Linuxize -
https://linuxize.com/
包含许多关于 Linux 用户和权限管理的教程和文章。 -
Tecmint
https://www.tecmint.com/
这个网站包含许多指南和教程,覆盖了 Linux 权限、用户账户创建和管理等方面。
论坛和社区
- Stack Overflow
在 Stack Overflow https://stackoverflow.com/ 上搜索和学习社区提供的关于用户和权限管理的答案和解决方案。 - Unix & Linux Stack Exchange
定位于 Unix 和 Linux 用户的问题和答案:https://unix.stackexchange.com/ - Reddit 的 Linux 社群
Reddit 上的 Linux 用户社区是交流经验和获取建议的好地方:https://www.reddit.com/r/linux/