常用命令

bash

查找文件

比如查找当前目录下以.pid为后缀的文件:find ./ -name *.pid

监听文件

比如监听最新的日志:tail -f xxx.log

移动光标

跳到本行的行首:ctrl+a

跳到行尾:ctrl+e

查进程

[root@localhost ~]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0 125768  3804 ?        Ss   5月19  19:20 /usr/lib/systemd
root         2  0.0  0.0      0     0 ?        S    5月19   0:02 [kthreadd]
root         4  0.0  0.0      0     0 ?        S<   5月19   0:00 [kworker/0:0H]
root         6  0.0  0.0      0     0 ?        S    5月19  28:41 [ksoftirqd/0]
root         7  0.0  0.0      0     0 ?        S    5月19  53:27 [migration/0]
root         8  0.0  0.0      0     0 ?        S    5月19   0:00 [rcu_bh]
root         9  0.1  0.0      0     0 ?        S    5月19 336:15 [rcu_sched]
root        10  0.0  0.0      0     0 ?        S<   5月19   0:00 [lru-add-drain]
root        11  0.0  0.0      0     0 ?        S    5月19   1:19 [watchdog/0]
root        12  0.0  0.0      0     0 ?        S    5月19   1:10 [watchdog/1]
...
  • a:显示当前终端下的所有进程信息,包括其他用户的进程。

  • u:使用以用户为主的格式输出进程信息。

  • x:显示当前用户在所有终端下的进程。

  • USER:启动该进程的用户账号名称

  • PID:该进程的ID号,在当前系统中是唯一的

  • %CPU:CPU占用的百分比

  • %MEM:内存占用的百分比

  • VSZ:占用虚拟内存(swap空间)的大小

  • RSS:占用常驻内存(物理内存)的大小

  • TTY:该进程在哪个终端上运行。“?”表未知或不需要终端

  • STAT:显示了进程当前的状态,如S(休眠)、R(运行)、Z(僵死)、<(高优先级)、N(低优先级)、s(父进程)、+(前台进程)。对处于僵死状态的进程应予以手动终止。

  • START:启动该进程的时间

  • TIME:该进程占用CPU时间

  • COMMAND:启动该进程的命令的名称

[root@localhost ~]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 5月19 ?       00:19:20 /usr/lib/systemd/systemd --switche
root         2     0  0 5月19 ?       00:00:02 [kthreadd]
root         4     2  0 5月19 ?       00:00:00 [kworker/0:0H]
root         6     2  0 5月19 ?       00:28:41 [ksoftirqd/0]
root         7     2  0 5月19 ?       00:53:27 [migration/0]
root         8     2  0 5月19 ?       00:00:00 [rcu_bh]
root         9     2  0 5月19 ?       05:36:15 [rcu_sched]
root        10     2  0 5月19 ?       00:00:00 [lru-add-drain]
root        11     2  0 5月19 ?       00:01:19 [watchdog/0]
root        12     2  0 5月19 ?       00:01:10 [watchdog/1]
...

大部分跟第一种一样,PPID为父进程的PID。

pstree -aup以树状图的方式展现进程之间的派生关系,显示效果比较直观。

  • -a:显示每个程序的完整指令,包含路径,参数或是常驻服务的标示;

  • -c:不使用精简标示法;

  • -G:使用VT100终端机的列绘图字符;

  • -h:列出树状图时,特别标明现在执行的程序;

  • -H<程序识别码>:此参数的效果和指定”-h”参数类似,但特别标明指定的程序;

  • -l:采用长列格式显示树状图;

  • -n:用程序识别码排序。预设是以程序名称来排序;

  • -p:显示程序识别码;

  • -u:显示用户名称;

[root@localhost ~]# top
top - 12:26:46 up 1 day, 13:32, 2 users, load average: 0.00, 0.00, 0.00
Tasks: 95 total, 1 running, 94 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.1%us, 0.1%sy, 0.0%ni, 99.7%id, 0.1%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 625344k total, 571504k used, 53840k free, 65800k buffers
Swap: 524280k total, 0k used, 524280k free, 409280k cached
PID   USER PR NI VIRT  RES  SHR S %CPU %MEM   TIME+ COMMAND
19002 root 20  0 2656 1068  856 R  0.3  0.2 0:01.87 top
1     root 20  0 2872 1416 1200 S  0.0  0.2 0:02.55 init
2     root 20  0    0    0    0 S  0.0  0.0 0:00.03 kthreadd
3     root RT  0    0    0    0 S  0.0  0.0 0:00.00 migration/0
4     root 20  0    0    0    0 S  0.0  0.0 0:00.15 ksoftirqd/0
5     root RT  0    0    0    0 S  0.0  0.0 0:00.00 migration/0
6     root RT  0    0    0    0 S  0.0  0.0 0:10.01 watchdog/0
7     root 20  0    0    0    0 S  0.0  0.0 0:05.01 events/0
8     root 20  0    0    0    0 S  0.0  0.0 0:00.00 cgroup
9     root 20  0    0    0    0 S  0.0  0.0 0:00.00 khelper
10    root 20  0    0    0    0 S  0.0  0.0 0:00.00 netns
11    root 20  0    0    0    0 S  0.0  0.0 0:00.00 async/mgr
12    root 20  0    0    0    0 S  0.0  0.0 0:00.00 pm
13    root 20  0    0    0    0 S  0.0  0.0 0:01.70 sync_supers
14    root 20  0    0    0    0 S  0.0  0.0 0:00.63 bdi-default
15    root 20  0    0    0    0 S  0.0  0.0 0:00.00 kintegrityd/0
16    root 20  0    0    0    0 S  0.0  0.0 0:02.52 kblockd/0
17    root 20  0    0    0    0 S  0.0  0.0 0:00.00 kacpid
18    root 20  0    0    0    0 S  0.0  0.0 0:00.00 kacpi_notify
...

第一行:

内 容
说 明

12:26:46

系统当前时间

up 1 day, 13:32

系统的运行时间.本机己经运行 1 天 13 小时 32 分钟

2 users

当前登录了两个用户

load average: 0.00,0.00,0.00

系统在之前 1 分钟、5 分钟、15 分钟的平均负载。如果 CPU 是单核的,则这个数值超过 1 就是高负载:如果 CPU 是四核的,则这个数值超过 4 就是高负载 (这个平均负载完全是依据个人经验来进行判断的,一般认为不应该超过服务器 CPU 的核数)

第二行:

内 容
说 明

Tasks: 95 total

系统中的进程总数

1 running

正在运行的进程数

94 sleeping

睡眠的进程数

0 stopped

正在停止的进程数

0 zombie

僵尸进程数。如果不是 0,则需要手工检查僵尸进程

第三行:

内 容
说 明

Cpu(s): 0.1 %us

用户模式占用的 CPU 百分比

0.1%sy

系统模式占用的 CPU 百分比

0.0%ni

改变过优先级的用户进程占用的 CPU 百分比

99.7%id

空闲 CPU 占用的 CPU 百分比

0.1%wa

等待输入/输出的进程占用的 CPU 百分比

0.0%hi

硬中断请求服务占用的 CPU 百分比

0.1%si

软中断请求服务占用的 CPU 百分比

0.0%st

st(steal time)意为虚拟时间百分比,就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比

第四行:

内 容
说 明

Mem: 625344k total

物理内存的总量,单位为KB

571504k used

己经使用的物理内存数量

53840k&ee

空闲的物理内存数量。我们使用的是虚拟机,共分配了 628MB内存,所以只有53MB的空闲内存

65800k buffers

作为缓冲的内存数量

第五行:

内 容
说 明

Swap: 524280k total

交换分区(虚拟内存)的总大小

Ok used

已经使用的交换分区的大小

524280k free

空闲交换分区的大小

409280k cached

作为缓存的交换分区的大小

缓冲(buffer)和缓存(cache)的区别:

  • 缓存(cache)是在读取硬盘中的数据时,把最常用的数据保存在内存的缓存区中,再次读取该数据时,就不去硬盘中读取了,而在缓存中读取。

  • 缓冲(buffer)是在向硬盘写入数据时,先把数据放入缓冲区,然后再一起向硬盘写入,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。

简单来说,缓存(cache)是用来加速数据从硬盘中"读取"的,而缓冲(buffer)是用来加速数据"写入"硬盘的。

  • PID:进程的 ID。

  • USER:该进程所属的用户。

  • PR:优先级,数值越小优先级越高。

  • NI:优先级,数值越小、优先级越高。

  • VIRT:该进程使用的虚拟内存的大小,单位为 KB。

  • RES:该进程使用的物理内存的大小,单位为 KB。

  • SHR:共享内存大小,单位为 KB。

  • S:进程状态。

  • %CPU:该进程占用 CPU 的百分比。

  • %MEM:该进程占用内存的百分比。

  • TIME+:该进程共占用的 CPU 时间。

  • COMMAND:进程的命令名。

其他

查端口占用:lsof -i:端口号

查指定程序名占用了哪几个端口: netstat -tlnp | grep {process_name}

查 TCP 连接:netstat -an | grep tcp

切换到 root 用户:sudo -u root -H bash

vim操作

搜索

往后搜,比如搜ERROR日志:/ERROR

往前搜,比如搜ERROR日志:?ERROR

再输入n可以定位到下一个,N定位到上一个

跳转

跳到文件最后::$

跳到文件开头::0

移动光标

移动到行首:Shift+6

移动到行尾:Shift+4

其他

删除当前行:dd

shell脚本的调用

sh -x file_name.sh 可以展示调用该脚本的详细过程,起到 debug 脚本的作用。

Last updated

Was this helpful?