- 来自Linux命令行与shell脚本编程大全,如有侵权,请联系删除
- 检测程序
ps
探查 某个时间点的进程
# ps 命令默认只显示 运行在当前终端中 属于当前用户的进程
# 分别显示:
# 进程ID 进程运行终端 占用cpu的时间
$ ps
PID TTY TIME CMD
23663 pts/108 00:00:00 ps
24953 pts/108 00:00:00 bash
## --forest 选项 用层级结构 显示父进程与子进程之间的关系
$ ps --forest
PID TTY TIME CMD
24953 pts/108 00:00:00 bash
16586 pts/108 00:00:00 \_ ps
ps -ef
查看系统中运行的所有进程
# 这里仅列出了部分 ps -ef 的结果
$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Feb25 ? 01:08:27 /usr/lib/systemd/systemd --switched
root 2 0 0 Feb25 ? 00:00:26 [kthreadd]
root 3 2 0 Feb25 ? 00:05:33 [ksoftirqd/0]
root 8 2 0 Feb25 ? 00:00:16 [migration/0]
root 9 2 0 Feb25 ? 00:00:00 [rcu_bh]
root 10 2 0 Feb25 ? 08:20:04 [rcu_sched]
...
g09 32637 32528 0 Oct16 ? 00:00:00 sshd: g09@pts/55
g09 32641 32637 0 Oct16 pts/55 00:00:00 -bash
m03 32693 31820 0 14:22 pts/47 00:00:03 ssh oldcomput1
t07 32711 27362 0 16:15 ? 00:00:00 sleep 180
top
实时监测进程
top命令运行时的输出:
top - 16:28:31 up 236 days, 2:11, 172 users, load average: 2.03, 2.47, 1.98
Tasks: 1419 total, 1 running, 1416 sleeping, 1 stopped, 1 zombie
%Cpu(s): 3.0 us, 3.1 sy, 0.0 ni, 93.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 13151032+total, 2121588 free, 6989532 used, 12239920+buff/cache
KiB Swap: 16838652 total, 16838652 free, 0 used. 11942480+avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
15122 root 20 0 1514384 333688 2656 S 3.0 0.3 5175:34 python3
16421 root 20 0 748860 539848 1188 S 2.6 0.4 1360:00 snmpd
24109 r01 20 0 167584 3768 1684 R 1.6 0.0 0:00.12 top
31662 root 20 0 44048 440 52 S 1.0 0.0 2825:50 rshim
10 root 20 0 0 0 0 S 0.3 0.0 500:05.51 rcu_sched
35 root 20 0 0 0 0 S 0.3 0.0 66:55.30 ksoftirqd/5
7254 t11 20 0 86796 3124 2300 S 0.3 0.0 0:01.21 sftp-server
7854 root 20 0 0 0 0 S 0.3 0.0 0:00.07 kworker/15:1
8190 root 20 0 0 0 0 S 0.3 0.0 0:00.16 kworker/13:1
11344 m00 20 0 187528 5416 4036 S 0.3 0.0 0:05.54 ssh
21884 m14 20 0 109996 6860 3332 S 0.3 0.0 0:00.09 ossutil64
28030 t07 20 0 1000032 142260 20712 S 0.3 0.1 1:15.55 node
32555 t11 20 0 185768 3024 1308 S 0.3 0.0 1:46.49 sshd
1 root 20 0 192796 4948 1772 S 0.0 0.0 68:27.29 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:26.30 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 5:33.96 ksoftirqd/0
8 root rt 0 0 0 0 S 0.0 0.0 0:16.00 migration/0
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
11 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain
12 root rt 0 0 0 0 S 0.0 0.0 0:56.01 watchdog/0
kill
结束进程
Linux进程信号
信号 | 名称 | 描述 |
---|---|---|
1 | HUP | 挂起 |
2 | INT | 中断 |
3 | QUIT | 结束运行 |
9 | KILL | 无条件终止 |
11 | SEGV | 段错误 |
15 | TERM | 尽可能终止 |
17 | STOP | 无条件停止运行,但不zhongzhi |
18 | TSTP | 停止或者暂停,但继续在后台运行 |
19 | CONT | 在STOP或者TSTP之后恢复执行 |
- 监测磁盘空间
mount
用于挂载存储设备
umount
卸载设备
有时候,需要知道某台设备上还有多少磁盘空间。
df
命令,可以方便地查看所有已挂载磁盘的使用情况
# 文件设备位置 包含多少个块(以1024字节为单位) 使用了多少的块 还有多少的块可用 已用空间所占百分比 设备挂载点
$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 558598464 189484628 340715500 36% /
devtmpfs 65737936 0 65737936 0% /dev
tmpfs 65755160 1280 65753880 1% /dev/shm
tmpfs 65755160 4181288 61573872 7% /run
tmpfs 65755160 0 65755160 0% /sys/fs/cgroup
/dev/sda1 1003340 148228 786096 16% /boot
...
# -h 选项 以人类易读的形式显示磁盘空间
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 533G 181G 325G 36% /
devtmpfs 63G 0 63G 0% /dev
tmpfs 63G 1.3M 63G 1% /dev/shm
tmpfs 63G 4.0G 59G 7% /run
tmpfs 63G 0 63G 0% /sys/fs/cgroup
/dev/sda1 980M 145M 768M 16% /boot
...
du
命令,显示某个特定目录的磁盘使用情况。
# 显示目录下的 文件 目录和子目录的磁盘使用情况,
# 并以磁盘块为单位表明每个文件或目录占用了多大存储空间。
$ du Work/test/
449189 Work/test/tmp_ko/6457859455858405939
449193 Work/test/tmp_ko
449203 Work/test/
## -c 选项, 显示所有已列出文件的总大小
$ du Work/test/ -c
449189 Work/test/tmp_ko/6457859455858405939
449193 Work/test/tmp_ko
449203 Work/test/
449203 total
## -h 选项 以人类易读的格式输出大小
$ du Work/test/ -h
439M Work/test/tmp_ko/6457859455858405939
439M Work/test/tmp_ko
439M Work/test/
# -s 选项 显示文件夹的总大小
$ du Work/test/ -s
449203 Work/test/
- 处理数据文件
sort
依据指定语言的排序规则 对文本文件中的数据进行排序。
## test file
$ cat file1
one
two
three
four
five
# 默认按照首字母顺序排序
$ sort file1
five
four
one
three
two
## test file
$ cat file2
1
2
100
45
3
10
145
75
# 默认按照字符排序, 这显然不是我们想要的结果
$ sort file2
1
10
100
145
2
3
45
75
## -n 选项 按照数值排序
$ sort file2 -n
1
2
3
10
45
75
100
145
一些例子
## 按照第三个字段,对 /etc/passwd 排序
# -t 选项 指定字段分隔符
# -k 选项 指定排序的字段
# -n 选项 表示对-k指定的字段 按照数值排序(默认升序)
$ sort -t ':' -k3 -n /etc/passwd | head -n5
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
## 查看Work文件夹下占用空间最大的几个子文件夹
# du -h 显示文件夹及其子文件夹的大小
# -r 选项 逆序排序
# -h 选项 按照易读数值显示(如 1k 2G)
$ du -h Work/ | sort -rh | head
736G Work/
325G Work/MbPL202206261
272G Work/MbPL202205150
131G Work/MbPL202206261/2.1_quality_control/2.1.3_Contaminate_RM
131G Work/MbPL202206261/2.1_quality_control
89G Work/MbPL202205150/2.1_quality_control/2.1.3_Contaminate_RM
89G Work/MbPL202205150/2.1_quality_control
77G Work/MbPL202206261/1_rawdata
75G Work/MbPL202206261/2.6_gene_abundance
63G Work/MbPL202205798
grep
数据搜索
grep
命令 会在输入或指定文件中 逐行 搜索匹配 指定模式 的文本。输出 包含了匹配模式的行。
## 在file1文件中查找 three | thr | t
$ grep three file1
three
$ grep thr file1
three
$ grep t file1
two
three
## 筛选不包含 t 的行
# -v 选项 反向搜索
$ grep -v t file1
one
four
five
# -n 显示匹配到的行的行号
## 1,4,5 行没有匹配到 t
$ grep -v t file1 -n
1:one
4:four
5:five
## 2,3行匹配到了 t
$ grep -n t file1
2:two
3:three
# -c 选项 count 显示匹配到了多少行
## 有2行匹配到了 t
$ grep -c t file1
2
## 有3行没有匹配到 t
$ grep -c -v t file1
3
# -e 选项 可以指定多个匹配模式 (相当于 or)
## 输出 包含字符串 t 或者 包含字符串 f 的所有行
$ grep -e t -e f file1
two
three
four
five
grep 结合 正则表达式
$ grep [tf] file1
two
three
four
five
gzip
数据压缩
gzip是linux中最流行的压缩工具
gzip包是GNU项目的产物
-
gzip
用于文件压缩 , 文件扩展名.gz
-
gunzip
gz文件解压 -
gzcat
查看 gz文件 (zcat也可以)
$ gzip file1
$ ll file1*
-rw-r--r-- 1 r01 research 50 Oct 20 09:27 file1.gz
## 这里没有安装 gzcat
$ gzcat file1.gz
bash: gzcat: command not found...
Similar command is: 'zcat'
## zcat 直接查看压缩文件
[r01@comput1 ~]$ zcat file1.gz
one
two
three
four
five
## gunzip 解压缩
$ gunzip file1.gz
$ ll file1*
-rw-r--r-- 1 r01 research 24 Oct 20 09:27 file1
tar
数据归档
虽然 zip
命令能够很好地将数据压缩并归档为单个文件,但它并不是Unix和Linux中的标准归档工具。目前,Unix和Linux中最流行的归档工具是 tar
命令。
# 常见用法
## 创建一个 test.tar 的归档文件,包含目录 New_Dir/ 和 Docu/ 的内容
$ tar -cvf test.tar New_Dir/ Docu/
New_Dir/
New_Dir/SubDir/
New_Dir/SubDir/UnderDir/
Docu/
Docu/test_one
Docu/test_two
$ ll test.tar
-rw-r--r-- 1 r01 research 10240 Oct 20 10:49 test.tar
## 列出(但不提取)tar文件test.tar的内容
$ tar -tf test.tar
New_Dir/
New_Dir/SubDir/
New_Dir/SubDir/UnderDir/
Docu/
Docu/test_one
Docu/test_two
# 提取 test.tar 文件的内容
$ tar -xvf test.tar
New_Dir/
New_Dir/SubDir/
New_Dir/SubDir/UnderDir/
Docu/
Docu/test_one
Docu/test_two
tar -zxvf file.tgz
用来提取 以.tgz
结尾的压缩文件。这是经gzip压缩过的tar文件。