本文列举了查看系统信息、查看发行版信息、进程管理等方面的一些常用命令
一、查看系统信息
1. uname
uname,英文全称为“unix name”,用于输出一组系统信息。
语法:uname [选项]
有关选项
-a, --all 以如下次序输出所有信息。其中若 -p 和 -i 的探测结果不可知则被省略:
-s, --kernel-name 输出内核名称(默认)
-n, --nodename 输出网络节点上的主机名
-r, --kernel-release 输出内核发行号
-v, --kernel-version 输出内核版本
-m, --machine 输出主机的硬件架构名称
-p, --processor 输出处理器类型(不可移植)
-i, --hardware-platform 输出硬件平台或(不可移植)
-o, --operating-system 输出操作系统名称
--help 显示此帮助信息并退出
--version 显示版本信息并退出
实例:
$ uname -a
Linux hollowman 6.1.0-28-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.119-1 (2024-11-22) x86_64 GNU/Linux
2. cat /proc/version
/proc/version
文件中存储着系统版本有关信息。
$ cat /proc/version
Linux version 6.1.0-28-amd64 (debian-kernel@lists.debian.org) (gcc-12 (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #1 SMP PREEMPT_DYNAMIC Debian 6.1.119-1 (2024-11-22)
二、查看发行版信息
3. lsb_release -a
有些发行版提供命令查看当前系统版本的详细信息,如Debian、ubuntu等发行版可通过lsb_release -a
来查看
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 12 (bookworm)
Release: 12
Codename: bookworm
4. cat /etc/redhat-release
redhat,centos的当前系统版本详细信息存储在/etc/redhat-release
文件中
cat /etc/redhat-release
5. cat /etc/os-release
ubuntu、debian以及华为的openEuler的当前系统版本详细信息存储在 /etc/os-release
文件中
$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
三、查看用户信息
6. whoami
whoami,who am i? 显示与当前的有效用户ID 相关联的用户名。
$ whoami
hy
7. who
显示当前已登录的用户信息。
$ who
hy tty7 2024-12-12 17:40 (:0)
hy pts/0 2024-12-12 17:40 (:0)
hy pts/4 2024-12-12 17:53 (:0)
8. w
比who更详细,能显示用户登录名、终端标志、星期几登录和具体登录时间、闲置时间、用户正在执行的程序、占用CPU时间、系统的运行时间和平均负载等。
$ w
23:00:43 up 5:32, 3 users, load average: 0.21, 0.22, 0.21
USER TTY 来自 LOGIN@ IDLE JCPU PCPU WHAT
hy tty7 :0 17:40 5:32m 2:23 0.08s /usr/bin/startplasma-x11
hy pts/0 :0 17:40 5:20m 0.00s 6.45s /usr/bin/kded5
hy pts/4 :0 17:53 3.00s 0.09s 0.01s w
四、进程管理
1. ps
process,查看瞬间进程状态(查看实时进程用top命令)
$ ps
PID TTY TIME CMD
40964 pts/3 00:00:00 bash
40970 pts/3 00:00:00 ps
默认情况下,ps
命令只显示与当前用户和当前控制端相关联的进程。 它显示进程 ID(PID),与进程相关联的终端(tname = TTY),进程占用 CPU 时长([DD-] hh:mm:ss格式)和产生进程的命令(CMD)。
linux系统中的ps命令支持3种不同类型的命令行参数:
1) Unix风格,选项以-开头。
2) BSD风格,选项不能以-开头。
3) GNU长选项,选项以--开头。
3种格式的命令可以混用,但可能会出现冲突。灵活使用各选项可以显示自己想要的输出。
常用选项梳理
# Unix风格选项
-A, -e 显示所有进程
-a 显示所有TTY值存在的进程,除去bash和TTY终端等进程
-u 显示有效的用户,当后面跟<UID>时含义同-U。
-d 显示所有进程,除去bash和TTY终端等进程
-f 完整输出,包含命令行参数(在默认字段基础上,显示UID,PPID,C,STIME字段)
-F 更为完整的输出 (在 -f 显示字段基础上,增加SZ,RSS,PSR字段)
# BSD风格选项
a 显示所有TTY值存在的进程,包括其他用户
u 面向用户的格式,其输出会包含用户名字段
# 含义相同的选项
-x, x 显示没有控制终端的进程,默认一般不显示没有控制终端的进程
-t, t/T, --tty <tty> 显示与指定终端关联的进程
-p, p, --pid <PID> 显示指定进程编号的进程
-r, r 显示运行进程
-w, w 不限制输出宽度,默认不显示超出设备宽度以外的输出。
-U, U, --user <UID> 显示指定用户的进程
# 含义相近的选项
-l, l 显示长格式/BSD长格式
-j, j 显示工作格式/BSD工作格式
显示字段
字段名 | 含义 |
---|---|
UID | 用户名 |
PID | 进程 ID |
PPID | 父进程 ID |
C | CPU 使用的资源占比 |
STIME | 进程开始执行时间 |
TTY | 与进程相关联的终端(进程在哪个终端运行) |
TIME | 进程占用 CPU 时长([DD-] hh:mm:ss格式) |
CMD | 产生进程的命令 |
SZ | |
RSS | 进程所占用的内存量 |
PSR |
进程状态:
状态名 | 含义 |
---|---|
- R(运行): | 进程正在运行或在运行队列中等待。 |
- S(中断): | 进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该 状态。 |
- D(不可中断): | 进程不响应系统异步信号,即便用kill命令也不能将其中断。 |
- Z(僵死): | 进程已经终止,但进程描述符依然存在, 直到父进程调用wait4()系统函数后将进程释放。 |
- T(停止): | 进程收到停止信号后停止运行 |
- N: | 低优先级 |
- <: | 高优先级 |
- L: | 被锁进内存 |
- s: | 包含子进程 |
- l: | 多线程 |
ps
命令选项实在太多,以下是一些常用组合:
1. 打印所有进程信息
$ ps -ef
$ ps aux # ps aux 和 ps –e u 输出效果相同
2. 打印进程树
$ ps -ejH
$ ps axjf
3. 打印线程信息
$ ps -eLf
$ ps axms
2. top
动态显示进程
top命令前5行动态显示系统运行总体参数:
- 第1行:系统时间、运行时间、登录终端数、系统负载(3个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低)。
- 第2行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。
- 第3行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比、...。
- 第4行:物理内存总量、内存空闲量、内存使用量、作为内核缓存的内存量。
- 第5行:虚拟内存总量、虚拟内存空闲量、虚拟内存使用量、已被提前加载的内存量。
$ top
top - 23:11:18 up 5:42, 3 users, load average: 0.30, 0.33, 0.25
任务: 261 total, 1 running, 260 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.9 us, 1.1 sy, 0.0 ni, 97.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 15934.1 total, 5570.8 free, 6348.7 used, 4520.4 buff/cache
MiB Swap: 30518.0 total, 30518.0 free, 0.0 used. 9585.4 avail Mem
进程号 USER PR NI VIRT RES SHR %CPU %MEM TIME+ COMMAND
648 root -51 0 0 0 0 S 2.7 0.0 4:06.37 irq/42-nvidia
47206 hy 20 0 1693276 252964 156564 S 2.3 1.6 3:49.48 kwin_x11
810 root 20 0 24.4g 221768 69208 S 1.7 1.4 2:45.29 Xorg
47276 hy 20 0 2559956 546492 236588 S 1.0 3.3 2:03.31 plasmashell
50430 hy 20 0 1131.2g 177480 107136 S 1.0 1.1 1:55.02 WeChatAppEx
53114 hy 20 0 1173912 151260 115664 S 1.0 0.9 0:05.39 konsole
.......
关于 top
的几个使用技巧:
1.排序
默认是以占用 cpu 大小进行排序的,按 N 键则以进程号排序,按 M 键则以占用内存大小排序,按 P 键回到以占用 cpu 大小排序
2.指定显示
按u键,输入某个用户名,可以选择只动态显示指定用户的进程
按n键,输入数量,可以控制每次只显示n条记录
按k键,输入进程id及信号(如9),可以发送进程信号(9表示杀死进程)
3. pstree
process tree,显示进程树。
几个常用选项
-s, --show-parents 显示所选进程的父进程
-t, --thread-names 显示完整的线程名称,默认不显示线程名称(只显示线程数量)
-c, --compact-not 不对完全相同的子树进行压缩
-p, --show-pids 显示 PID;隐含启用 -c 选项
-a, --arguments 显示命令行参数
-V, --version 显示版本信息
实例:
$ pstree #显示进程树,默认从pid为1的进程开始,也就是systemd进程
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager───2*[{NetworkManager}]
├─accounts-daemon───2*[{accounts-daemon}]
├─apache2───5*[apache2]
├─avahi-daemon───avahi-daemon
├─cron
├─cups-browsed───2*[{cups-browsed}]
├─cupsd
├─dbus-daemon
├─fcitx5───2*[{fcitx5}]
... 省略...
$ pstree -p # -p 参数显示进程的 PID
systemd(1)─┬─ModemManager(767)─┬─{ModemManager}(772)
│ └─{ModemManager}(778)
├─NetworkManager(751)─┬─{NetworkManager}(770)
│ └─{NetworkManager}(771)
├─accounts-daemon(629)─┬─{accounts-daemon}(662)
│ └─{accounts-daemon}(672)
├─apache2(811)─┬─apache2(813)
│ ├─apache2(814)
│ ├─apache2(815)
│ ├─apache2(816)
│ └─apache2(818)
├─avahi-daemon(632)───avahi-daemon(642)
├─cron(633)
├─cups-browsed(911)─┬─{cups-browsed}(972)
│ └─{cups-browsed}(973)
├─cupsd(776)
├─dbus-daemon(634)
├─fcitx5(47149)─┬─{fcitx5}(47150)
│ └─{fcitx5}(47299)
... 省略...
$ pstree 811 # 显示pid 为811 的进程树,默认会将相同名字的子树压缩,前面用数量加上星号(*) 链接,也就是乘的意思
apache2───5*[apache2]
$ pstree 811 -c # 可以用 -c 参数取消这个压缩
apache2─┬─apache2
├─apache2
├─apache2
├─apache2
└─apache2
$ pstree 811 -p #我们用 -p 参数显示进程 PID后,因名字多了个进程PID,也就是说名字不同了,这时也会取消压缩
apache2(811)─┬─apache2(813)
├─apache2(814)
├─apache2(815)
├─apache2(816)
└─apache2(818)
$ pstree 811 -s # -s 参数可以显示父进程
systemd───apache2───5*[apache2]
$ pstree 811 -a # -a 参数可以显示命令行参数
apache2 -k start
├─apache2 -k start
├─apache2 -k start
├─apache2 -k start
├─apache2 -k start
└─apache2 -k start
$ pstree www-data -p # 显示 www-data 用户(apache2 服务用户)的进程树
apache2(813)
apache2(814)
apache2(815)
apache2(816)
apache2(818)
$ pstree 640 -p -t #显示 PID 为640进程树,并显示线程名称(如果有的话)
udisksd(640)─┬─{cleanup}(713)
├─{gdbus}(671)
├─{gmain}(660)
└─{probing-thread}(687)
$ pstree 640 -p # 看这个显示就没有显示线程名称,用 {} 包裹的表示这是一个线程,不是线程则不会用 {} 包裹
udisksd(640)─┬─{udisksd}(660)
├─{udisksd}(671)
├─{udisksd}(687)
└─{udisksd}(713)
4.pidof
查询某个指定服务的全部进程的pid值,一个服务对应1至多个进程,但每个进程都只有唯一pid值。
命令语法:pidof [选项] [服务名]
$ pidof apache2 # 还是用 apache2 做测试,对比上面的实例,看是否一致
818 816 815 814 813 811
5. kill 终止对应pid值的服务进程
命令语法:
kill [-s 信号声明 | -n 信号编号 | -信号声明] 进程ID
kill -l [信号声明 | 信号编号]
使用 kill 命令前,先说说信号声明、信号编号的对应关系:
$ kill -l # 打印所有信号名称,这里数字表示信号编号,SIGHUP是信号名称,而SIGHUP中的HUP则表示信号声明
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
2) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
1) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
2) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
3) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
4) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
5) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
6) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
7) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
8) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
9) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
10) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
11) SIGRTMAX-1 64) SIGRTMAX
$ kill -l 1 #打印信号编号(1)对应的信号声明
HUP
$ kill -l HUP #打印信号声明HUP对应的信号编号
1
部分信号代表的含义:
1 HUP 挂起
2 INT 中断
3 QUIT 结束运行
9 KILL 无条件终止
11 SEGV 段错误
15 TERM 尽可能终止
17 STOP 无条件停止运行,但不终止
18 TSTP 停止或暂停,但继续在后台运行
19 CONT 在STOP或TSTP之后恢复执行
kill
命令实际上是向进程发送一个信号,这个信号就是上面提到的信号编号或者信号声明,并根据这个信号进行处理。
$ kill 61425
kill
命令默认发送的是 TERM 信号(编号 15 ),也就是也就是尽可能终止的意思(因此经常会碰到终止失败的现象),而要想强制终止可用 -s KILL
选项来实现,如下:
$ kill -s KILL 4832 #或者 kill -KILL 4832,亦或 kill -n 9 4832
kill
命令停止某个进程,必须是指定进程的属主或者 root 用户kill
命令的参数是进程的 PID,因此有时候会因为难以找到 PID 而犯愁。
6. killall
终止指定服务/程序所对应的所有进程
kill
只能杀死 1 个进程,包含多个进程的服务需要多次使用 kill
,而 killall
则可以一次性杀死服务对应的所有进程
命令语法:killall [选项] [服务/程序名]
,
$ killall wpsoffice # 关闭 wpsoffice 程序
killall
命令支持通配符
就用过ps、top、kill命令,其他几个好陌生啊
当我们所了解的命令不能满足要求时,新的命令总会接踵而来🙂
也是没用过linux作为主力机用,服务器常用到的命令也就那些,更多的时候是用到了再查😃