此文档记录一些日常工作中能用到的linux命令

tr命令

tr命令可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符,经常用来编写优美的单行命令,作用很强大。

常用实例

  1. 将输入字符由大写转换为小写
1
2
echo "HELLO WORLD" | tr 'A-Z' 'a-z'
hello world
  1. 使用tr删除符字
1
2
echo "hello 123 world 456" | tr -d '0-9'
hello  world 
  1. 将制表符转换为空格
1
cat text | tr '\t' ' '
  1. 字符集补集,从输入文本中将不在补集中的所有字符删除
1
2
echo aa.,a 1 b#$bb 2 c*/cc 3 ddd 4 | tr -d -c '0-9 \n'
 1  2  3  4
  1. 用tr压缩字符,可以压缩输入中重复的字符
1
2
echo "thissss is      a text linnnnnnne." | tr -s ' sn'
this is a text line.

cut命令

cut命令用来显示行中的指定部分,删除文件中指定字段。cut经常用来显示文件的内容

常用实例

1
2
3
4
5
6
[root@localhost text]# cat test.txt 
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
  1. 打印第1个到第3个字符
1
2
3
4
5
6
[root@localhost text]# cut -c1-3 test.txt 
abc
abc
abc
abc
abc
  1. 打印前2个字符:
1
2
3
4
5
6
[root@localhost text]# cut -c-2 test.txt 
ab
ab
ab
ab
ab
  1. 打印从第5个字符开始到结尾
1
2
3
4
5
6
[root@localhost text]# cut -c5- test.txt 
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
  1. 使用 -f 选项提取指定字段:
1
2
3
4
5
6
7
8
[root@localhost text]# cat test.txt 
No Name Mark Percent
01 tom 69 91
02 jack 71 87
[root@localhost text]# cut -f 1 test.txt 
No
01
02

basename命令

basename命令用于打印目录或者文件的基本名称。basename和dirname命令通常用于shell脚本中的命令替换来指定和指定的输入文件名称有所差异的输出文件名称。

常用实例

  1. 显示出文件名称
1
2
[root@localhost ~]# basename /root/shell/test.txt
test.txt
  1. 显示出不带后缀的文件名称
1
2
[root@localhost ~]# basename /root/shell/test.txt .txt
test

dirname命令

dirname命令去除文件名中的非目录部分,仅显示与目录有关的内容。dirname命令读取指定路径名保留最后一个/及其后面的字符,删除其他部分,并写结果到标准输出。如果最后一个/后无字符,dirname 命令使用倒数第二个/,并忽略其后的所有字符。

常用实例

1
2
[root@localhost ~]#  dirname /root/shell/test.txt
/root/shell
1
2
[root@localhost ~]#  dirname /root/shell/
/root
1
2
[root@localhost shell]# dirname test.txt
.

wc命令

wc命令用来计算数字。利用wc指令我们可以计算文件的Byte数、字数或是列数,若不指定文件名称,或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据。

常用实例

  1. 统计文件信息
1
2
[root@localhost shell]# wc test.txt
 19  15 252 test.txt  #文件的行数为19、单词数15、字节数252
  1. 统计行数
1
2
[root@localhost shell]# wc -l test.txt
19 test.txt

tee命令

tee命令用于将数据重定向到文件,另一方面还可以提供一份重定向数据的副本作为后续命令的stdin。简单的说就是把数据重定向到给定文件和屏幕上

常用实例

  1. 输出的信息同时写入指定文件
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
[root@k8s-77-162 shell]# ping www.baidu.com |tee out.txt
PING www.a.shifen.com (61.135.169.121) 56(84) bytes of data.
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=1 ttl=54 time=12.6 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=2 ttl=54 time=12.6 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=3 ttl=54 time=12.6 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=4 ttl=54 time=12.6 ms
^C[root@k8s-77-162 shell]# cat out.txt
PING www.a.shifen.com (61.135.169.121) 56(84) bytes of data.
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=1 ttl=54 time=12.6 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=2 ttl=54 time=12.6 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=3 ttl=54 time=12.6 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=4 ttl=54 time=12.6 ms
[root@k8s-77-162 shell]#
  1. 输出的信息追加到指定文件 默认情况下,在同一个文件下再次使用 tee 命令会覆盖之前的信息 可以通过 -a 命令选项改变默认设置。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
[root@k8s-77-162 shell]# ping www.souhu.com |tee -a out.txt
PING cndm.com (103.232.215.131) 56(84) bytes of data.
64 bytes from 103.232.215.131 (103.232.215.131): icmp_seq=1 ttl=52 time=200 ms
64 bytes from 103.232.215.131 (103.232.215.131): icmp_seq=2 ttl=52 time=200 ms
64 bytes from 103.232.215.131 (103.232.215.131): icmp_seq=3 ttl=52 time=200 ms
64 bytes from 103.232.215.131 (103.232.215.131): icmp_seq=4 ttl=52 time=200 ms
^C[root@k8s-77-162 shell]# cat out.txt
PING www.a.shifen.com (61.135.169.121) 56(84) bytes of data.
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=1 ttl=54 time=12.6 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=2 ttl=54 time=12.7 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=3 ttl=54 time=12.7 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=4 ttl=54 time=12.6 ms
PING cndm.com (103.232.215.131) 56(84) bytes of data.
64 bytes from 103.232.215.131 (103.232.215.131): icmp_seq=1 ttl=52 time=200 ms
64 bytes from 103.232.215.131 (103.232.215.131): icmp_seq=2 ttl=52 time=200 ms
64 bytes from 103.232.215.131 (103.232.215.131): icmp_seq=3 ttl=52 time=200 ms
64 bytes from 103.232.215.131 (103.232.215.131): icmp_seq=4 ttl=52 time=200 ms
[root@k8s-77-162 shell]#
  1. 写入多个文件
1
[root@k8s-77-162 shell]# ping www.souhu.com |tee out.txt out1.txt out2.txt
  1. tee命令的输出内容直接作为另一个命令的输入内容
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[root@k8s-77-162 shell]# ll file* |tee output.txt |wc -l
6
[root@k8s-77-162 shell]# cat output.txt
-rw-r--r--. 1 root root    0 6月  11 09:22 file1
-rw-r--r--. 1 root root    0 6月  11 09:22 file2
-rw-r--r--. 1 root root 2110 5月  14 11:05 file.2019-05-14
-rw-r--r--. 1 root root    0 6月  11 09:22 file3
-rw-r--r--. 1 root root    0 6月  11 09:22 file4
-rw-r--r--. 1 root root    0 6月  11 09:22 file5
[root@k8s-77-162 shell]#

more命令

more命令是一个基于vi编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持vi中的关键字定位操作。more名单中内置了若干快捷键

常用快捷键使用方法:

  • 按Space键:显示文本的下一屏内容。
  • 按Enier键:只显示文本的下一行内容。
  • 按斜线符|:接着输入一个模式,可以在文本中寻找下一个相匹配的模式。
  • 按H键:显示帮助屏,该屏上有相关的帮助信息。
  • 按B键:显示上一屏内容。
  • 按Q键:退出rnore命令。

less命令

less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。

常用快捷键使用方法:

  • /字符串:向下搜索”字符串”的功能
  • ?字符串:向上搜索”字符串”的功能
  • n:重复前一个搜索(与 / 或 ? 有关)
  • N:反向重复前一个搜索(与 / 或 ? 有关)
  • b 向后翻一页
  • d 向后翻半页
  • h 显示帮助界面
  • Q 退出less 命令
  • u 向前滚动半页
  • y 向前滚动一行
  • 空格键 滚动一页
  • 回车键 滚动一行

常用实例

  1. 查看文件
1
[root@k8s-77-162 ~]# less /var/log/messages
  1. 查看进程信息并用less分页显示
1
[root@k8s-77-162 shell]# ps -ef |less

sort命令

sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。sort命令既可以从特定的文件,也可以从stdin中获取输入

常用实例

  1. 文件内容排序

默认的比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[root@k8s-77-162 shell]# cat sort.txt
aaa:10:1.1
ccc:30:3.3
ddd:40:4.4
bbb:20:2.2
eee:50:5.5
eee:50:5.5
[root@k8s-77-162 shell]# sort sort.txt
aaa:10:1.1
bbb:20:2.2
ccc:30:3.3
ddd:40:4.4
eee:50:5.5
eee:50:5.5
  1. 使用-u或uniq忽略相同行
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
[root@k8s-77-162 shell]# cat sort.txt
aaa:10:1.1
ccc:30:3.3
ddd:40:4.4
bbb:20:2.2
eee:50:5.5
eee:50:5.5
[root@k8s-77-162 shell]# sort -u sort.txt
aaa:10:1.1
bbb:20:2.2
ccc:30:3.3
ddd:40:4.4
eee:50:5.5

uniq

uniq命令用于报告或忽略文件中的重复行,一般与sort命令结合使用。

常用实例

  1. 删除重复行
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
[root@k8s-77-162 shell]# cat sort.txt
aaa:10:1.1
ccc:30:3.3
ddd:40:4.4
bbb:20:2.2
eee:50:5.5
eee:50:5.5
[root@k8s-77-162 shell]# uniq sort.txt
aaa:10:1.1
ccc:30:3.3
ddd:40:4.4
bbb:20:2.2
eee:50:5.5
  1. 只显示出单一行
1
2
3
4
5
[root@k8s-77-162 shell]# uniq -u sort.txt
aaa:10:1.1
ccc:30:3.3
ddd:40:4.4
bbb:20:2.2
  1. 统计各行在文件中出现的次数
1
2
3
4
5
6
[root@k8s-77-162 shell]# uniq -c sort.txt
      1 aaa:10:1.1
      1 ccc:30:3.3
      1 ddd:40:4.4
      1 bbb:20:2.2
      2 eee:50:5.5
  1. 在文件中找出重复的行
1
2
[root@k8s-77-162 shell]# uniq -d sort.txt
eee:50:5.5

jobs命令

jobs命令用于显示Linux中的任务列表及任务状态,包括后台运行的任务。该命令可以显示任务号及其对应的进程号。其中,任务号是以普通用户的角度进行的,而进程号则是从系统管理员的角度来看的。一个任务可以对应于一个或者多个进程号。 这一序列的操作将会使用到 jobs、bg、和 fg 三个命令以及两个快捷键来完成。

常用实例

  1. 显示当前系统任务列表
1
2
3
4
[root@k8s-77-162 shell]# sleep 3000 &
[1] 11015
[root@k8s-77-162 shell]# jobs
[1]+  运行中               sleep 3000 &
  1. 显示对应任务的进程号
1
2
[root@k8s-77-162 shell]# jobs -l
[1]+ 11015 运行中               sleep 3000 &
  • 使用kill %job_ID杀死后台进程
1
2
3
4
5
6
[root@k8s-77-162 shell]# jobs
[1]+  运行中               sleep 3000 &
[root@k8s-77-162 shell]# kill %1
[1]+  已终止               sleep 3000
[root@k8s-77-162 shell]# jobs
[root@k8s-77-162 shell]#

fg命令

fg命令用于将后台作业(在后台运行的或者在后台挂起的作业)放到前台终端运行。与bg命令一样,若后台任务中只有一个,则使用该命令时,可以省略任务号。

使用实例

  1. 将任务号为1的任务从后台转为前台执行
1
2
3
4
5
6
[root@k8s-77-162 shell]# sleep 3000 &
[1] 10208
[root@k8s-77-162 shell]# jobs
[1]+  运行中               sleep 3000 &
[root@k8s-77-162 shell]# fg 1
sleep 3000

使用ctrl+z会让任务再次回到后台 不过是停止状态

bg命令

bg命令用于将作业放到后台运行,使前台可以执行其他任务。该命令的运行效果与在指令后面添加符号&的效果是相同的,都是将其放到系统后台执行。

常用实例

  1. 将任务号为1的任务放在后台继续执行
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
[root@k8s-77-162 shell]# jobs
[1]+  运行中               sleep 3000 &
[root@k8s-77-162 shell]# fg 1   #转到前台
sleep 3000
^Z                             #ctrl+z回到后台停止
[1]+  已停止               sleep 3000
[root@k8s-77-162 shell]# jobs
[1]+  已停止               sleep 3000
[root@k8s-77-162 shell]# bg 1  #继续执行
[1]+ sleep 3000 &
[root@k8s-77-162 shell]# jobs
[1]+  运行中               sleep 3000 &
[root@k8s-77-162 shell]#

split命令

split命令可以将一个大文件分割成很多个小文件,有时需要将文件分割成更小的片段,比如为提高可读性,生成日志等。

使用实例

  1. 分割文件

默认为1000切割成一个小文件

1
2
3
4
5
6
7
[root@k8s-77-162 test]# split messages
[root@k8s-77-162 test]# ls
messages  xae  xaj  xao  xat  xay  xbd  xbi  xbn  xbs  xbx  xcc  xch  xcm  xcr  xcw  xdb  xdg  xdl  xdq  xdv  xea  xef  xek  xep  xeu  xez
xaa       xaf  xak  xap  xau  xaz  xbe  xbj  xbo  xbt  xby  xcd  xci  xcn  xcs  xcx  xdc  xdh  xdm  xdr  xdw  xeb  xeg  xel  xeq  xev
xab       xag  xal  xaq  xav  xba  xbf  xbk  xbp  xbu  xbz  xce  xcj  xco  xct  xcy  xdd  xdi  xdn  xds  xdx  xec  xeh  xem  xer  xew
xac       xah  xam  xar  xaw  xbb  xbg  xbl  xbq  xbv  xca  xcf  xck  xcp  xcu  xcz  xde  xdj  xdo  xdt  xdy  xed  xei  xen  xes  xex
xad       xai  xan  xas  xax  xbc  xbh  xbm  xbr  xbw  xcb  xcg  xcl  xcq  xcv  xda  xdf  xdk  xdp  xdu  xdz  xee  xej  xeo  xet  xey
  1. 指定xx行切割成一个小文件
1
2
3
[root@k8s-77-162 test]# split -10000 messages
[root@k8s-77-162 test]# ls
messages  xaa  xab  xac  xad  xae  xaf  xag  xah  xai  xaj  xak  xal  xam
  1. 使用数字做后缀

用-d参数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
[root@k8s-77-162 test]# split -10000  messages test.txt -d
[root@k8s-77-162 test]# ll
总用量 28264
-rw-------. 1 root root 14456185 6月  11 16:54 messages
-rw-r--r--. 1 root root  1117830 6月  11 17:26 test.txt00
-rw-r--r--. 1 root root  1092575 6月  11 17:26 test.txt01
-rw-r--r--. 1 root root  1086841 6月  11 17:26 test.txt02
-rw-r--r--. 1 root root  1124741 6月  11 17:26 test.txt03
-rw-r--r--. 1 root root  1114635 6月  11 17:26 test.txt04
-rw-r--r--. 1 root root  1103796 6月  11 17:26 test.txt05
-rw-r--r--. 1 root root  1139606 6月  11 17:26 test.txt06
-rw-r--r--. 1 root root  1156384 6月  11 17:26 test.txt07
-rw-r--r--. 1 root root  1120804 6月  11 17:26 test.txt08
-rw-r--r--. 1 root root  1081161 6月  11 17:26 test.txt09
-rw-r--r--. 1 root root  1086159 6月  11 17:26 test.txt10
-rw-r--r--. 1 root root  1112624 6月  11 17:26 test.txt11
-rw-r--r--. 1 root root  1119029 6月  11 17:26 test.txt12
[root@k8s-77-162 test]#

uptime命令

uptime命令能够打印系统总共运行了多长时间和系统的平均负载。uptime命令可以显示的信息显示依次为:

现在时间、系统已经运行了多长时间、目前有多少登录用户、系统在过去的一分钟、5分钟和15分钟内的凭据负载

常用实例

  • 查看系统负载
1
2
[root@k8s-77-162 ~]# uptime
 15:14:14 up 56 days,  9:23,  2 users,  load average: 0.24, 0.22, 0.19

显示内容说明:

1
2
3
4
15:14:14  #系统当前时间
up 56 days,  9:23 # 主机运行时间,时间越长 说明主机越稳定
2 users #用户连接数  是总连接数 不是用户数
load average: 0.24, 0.22, 0.19 #系统平均负载 统计1、5、15分钟的系统平均负载

ps命令

ps命令用于报告当前系统的进程状态

常用实例

  1. 显示进程信息
1
2
3
4
5
6
[root@k8s-77-162 ~]# ps -A
  PID TTY          TIME CMD
    1 ?        00:29:40 systemd
    2 ?        00:00:07 kthreadd
    3 ?        00:04:18 ksoftirqd/0
    ...
  1. 显示指定用户信息
1
2
3
4
5
6
7
[root@k8s-77-162 ~]# ps -u root #显示root用户的进程信息
  PID TTY          TIME CMD
    1 ?        00:29:40 systemd
    2 ?        00:00:07 kthreadd
    3 ?        00:04:18 ksoftirqd/0
    5 ?        00:00:00 kworker/0:0H
    ...
  1. 显示所有进程信息,连同命令行 及查找特定进程
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
[root@k8s-77-162 ~]# ps -ef 
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 4月19 ?       00:29:40 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root         2     0  0 4月19 ?       00:00:07 [kthreadd]
root         3     2  0 4月19 ?       00:04:18 [ksoftirqd/0]
...
[root@k8s-77-162 ~]# ps -ef |grep ssh #查找ssh进程
root      6298     1  0 4月19 ?       00:00:01 /usr/sbin/sshd -D
root     11202  6298  0 14:18 ?        00:00:00 sshd: root@pts/0
root     11795 11791  0 6月03 ?       00:00:00 runsv sshd
root     11796 11795  0 6月03 ?       00:00:00 svlogd -tt /var/log/gitlab/sshd
...
  1. 列出当前所有正在内存中的进程
1
2
3
4
5
6
7
[root@k8s-77-162 ~]# ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0 194376  5296 ?        Ss   4月19  29:41 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root         2  0.0  0.0      0     0 ?        S    4月19   0:07 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    4月19   4:18 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   4月19   0:00 [kworker/0:0H]
...

netstat命令

netstat命令用来打印linux中网络系统的状态信息,可让你得知整个linux系统的网络情况。

常用实例

  1. 列出所有端口(包括监听和未监听的)
1
2
3
netstat -a    #列出所有端口
netstat -at   #列出所有tcp端口
netstat -au   #列出所有udp端口
  1. 列出处于监听状态下的sockets
1
2
3
4
netstat -l        #只显示监听端口
netstat -lt       #只列出所有监听tcp端口
netstat -lu       #只列出所有监听udp端口
netstat -lx       #只列出所有监听unix端口
  1. 显示每个协议的统计信息
1
2
3
netstat -s    #显示所有端口的统计信息
netstat -st   #显示tcp端口的统计信息
netstat -su   #显示udp端口的统计信息
  1. 在netstat输出中显示PID和进程名称
1
2
3
4
5
[root@k8s-77-162 ~]# netstat -pt 
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 k8s-77-162:36698        172.16.77.:sun-sr-https ESTABLISHED 30174/kubelet
tcp        0      0 k8s-77-162:55140        172.16.77.:sun-sr-https ESTABLISHED 7235/kube-proxy
  1. 在netstat输出中不显示主机,端口和用户名(host,prot,user)
1
2
3
4
5
6
[root@k8s-77-162 ~]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 127.0.0.1:33639         0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:10248         0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:10249         0.0.0.0:*               LISTEN