管线命令

管线命令

1、截取指令
1.1 cut
<wiz_code_mirror>
 
 
 
 
 
x
13
 
 
 
 
 
1
# cut指的就是切块, 常用的有三个指令
2
# -d : 后面接分割字符
3
# -f : 根据-d的分隔符,将一句话分成数段,用 -f取出第几段
4
# -c : 以字符(characters)的单位取出固定字符区间
5
[dai@workPC ~]$ echo  $PATH
6
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dai/.local/bin:/home/dai/bin
7

8
# 比如上面的PATH如果,要取出第三个路径
9
[dai@workPC ~]$ echo  $PATH|cut -d: -f3
10
/usr/local/sbin
11
[dai@workPC ~]$ echo  $PATH|cut -d ':' -f 3
12
/usr/local/sbin
13

14
# 比如上面的PATH如果,要取出第三和第五个路径
15
[dai@workPC ~]$ echo  $PATH|cut -d ':' -f 3,5
16
/usr/local/sbin:/home/dai/.local/bin
17

18
# 比如export 取出每行12字符区间以后的所有内容,12-后面没有接东西,表示默认到无穷
19
[dai@workPC ~]$ export|cut -c 12-
20

21
# 比如export 取出每行12-40字符之间的东西
22
[dai@workPC ~]$ export|cut -c 12-40
23

24

25
[dai@workPC ~]$ last| cut -d ' ' -f 1
26
# 显示last命令的第一列
 
 
cut 主要的用途在于将『同一行里面的数据进行分解!』最常使用在分析一些数据或文字数据的时候!
这是因为有时候我们会以某些字符当作分区的参数,然后来将数据加以切割,以取得我们所需要的数
据。 鸟哥也很常使用这个功能呢!尤其是在分析 log 文件的时候!不过,cut 在处理多空格相连的
数据时,可能会比较吃力一点,所以某些时刻可能会使用下一章的 awk 来取代的!
1.2 grep
<wiz_code_mirror>
 
 
 
 
 
x
14
 
 
 
 
1
# grep 对于一行中有你需要的关键字,就打印出来
2
[dai@workPC ~]$ last|grep root
3
root     pts/0        112.44.72.198    Tue Sep 24 08:31 - 08:51  (00:19)
4
root     pts/0        112.44.72.198    Mon Sep 23 23:25 - 00:36  (01:11)
5
# grep -v 对于一行中有你需要的关键字,就不打印出来
6
[dai@workPC ~]$ last|grep -v dai
7
reboot   system boot  3.10.0-1062.1.1. Sun Oct 13 08:27 - 21:45 (80+13:18)
8
reboot   system boot  3.10.0-1062.1.1. Tue Sep 24 23:50 - 08:26 (18+08:35)
9
root     pts/0        112.44.72.198    Tue Sep 24 08:31 - 08:51  (00:19)
10
root     pts/0        112.44.72.198    Mon Sep 23 23:25 - 00:36  (01:11)
11

12
wtmp begins Mon Sep 23 23:25:13 2019
 
 
2、排序命令
2.1、sort
sort  [-fbMnrtuk] [file or stdin]
选项与参数:
-f :忽略大小写的差异,例如 A 与 a 视为编码相同;
-b :忽略最前面的空格符部分;
-M :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;
-n :使用『纯数字』进行排序(默认是以文字型态来排序的);
-r :反向排序;
-u :就是 uniq ,相同的数据中,仅出现一行代表;
-t :分隔符,预设是用 [tab] 键来分隔;
-k :以那个区间 (field) 来进行排序的意思
<wiz_code_mirror>
 
 
 
 
 
x
 
 
 
 
 
1
# 例子,cat密码这个是乱序的
2
[dai@workPC ~]$ cat /etc/passwd
3

4
# 管线后,接一下sort就会排序,默认是用文字形态排序
5
[dai@workPC ~]$ cat /etc/passwd|sort
6

7
# 以:分割,然后分割出来的第三栏,来排序
8
[dai@workPC ~]$ cat /etc/passwd|sort -t ':' -k 3
9

 
 
2.2 uniq
排序完了,可以将重复的资料仅列出一个显示
uniq [-ic]
选项与参数:
-i :忽略大小写字符的不同;
-c :进行计数
<wiz_code_mirror>
 
 
 
 
 
 
 
 
 
 
 
1
[dai@workPC ~]$ last |cut -d ' ' -f 1|sort |uniq -i
2

3
dai
4
reboot
5
root
6
wtmp
7

8
# 排序完了计数
9
[dai@workPC ~]$ last |cut -d ' ' -f 1|sort |uniq -c
10
      1
11
     83 dai
12
      2 reboot
13
      2 root
14
      1 wtmp
15
[dai@workPC ~]$
16

 
 
2.3 wc
wc [-lwm]
选项与参数:
-l :仅列出行;
-w :仅列出多少字(英文单字);
-m :多少字符;
<wiz_code_mirror>
 
 
 
 
 
 
 
 
 
 
 
1
[dai@workPC ~]$ cat /etc/man_db.conf |wc
2
    131     723    5171
3
# 输出的三个数字,分别表示 行,字数,字符数
4

5
[root@workPC ~]# last |grep [a-zA-Z]|grep -v 'wtmp'|grep -v 'reboot'|
6
> grep -v 'unknown'|wc -l
7
85
8

 
 
3、双向重定向:tee
tee -[a] file
选项与参数:
-a :以累加 (append) 的方式,将数据加入 file 当中!
<wiz_code_mirror>
 
 
 
 
 
 
 
 
 
 
 
1
[root@workPC ~]# last |tee last.list |cut -d ' ' -f 1
2
dai
3
dai
4
...
5
[root@workPC ~]# ls
6
dump.rdb  last.list  minikube  mysql.ymal  redis.log  test.py  vim  weather_report
7
[root@workPC ~]#
8

9
# last 的信息会受到cut的截取,打印在屏幕上,也会被重定向导入到last.list文件中
 
 
4、字符转换命令
4.1 tr
tr -[ds] SET1
选项与参数:
-d :删除讯息当中的 SET1 这个字符串;
-s :取代掉重复的字符!
<wiz_code_mirror>
 
 
 
 
 
x
 
 
 
 
 
1
# 例子1,直接大小写替换
2
[root@workPC ~]# last |tr '[a-z]' '[A-Z]'
3
DAI      PTS/0        110.184.204.7    WED JAN  1 21:26   STILL LOGGED IN
4

5
# 例子2,删除指定字符串
6
[root@workPC ~]# cat /etc/passwd|tr -d ':'
7
rootx00root/root/bin/bash
8

 
 
5、分区命令:split
如果你有文件太大,导致一些携带式装置无法复制的问题,嘿嘿!找 split 就对了! 他可以帮你将
一个大文件,依据文件大小或行数来分区,就可以将大文件分区成为小文件了
 
split [-bl] file PREFIX
选项与参数:
-b :后面可接欲分区成的文件大小,可加单位,例如 b, k, m 等;
-l :以行数来进行分区。
PREFIX :代表前导符的意思,可作为分区文件的前导文字。
<wiz_code_mirror>
 
 
 
 
 
x
 
 
 
 
1
# 将mysql.ymal.bak 文件分为100b大小的文件,前缀文字为mysql.ymal.bak --
2
[root@workPC ~]# split -b 100 mysql.ymal.bak mysql.ymal.bak
3
[root@workPC ~]# ll
4
total 52
5
-rw-r--r--  1 root root  107 Dec 11 23:55 dump.rdb
6
-rw-r--r--  1 root root 6737 Jan  1 22:03 last.list
7
-rw-r--r--  1 root root  399 Dec 29 19:10 mysql.ymal
8
-rw-r--r--  1 root root  399 Jan  1 22:19 mysql.ymal.bak
9
-rw-r--r--  1 root root  100 Jan  1 22:20 mysql.ymal.bakaa
10
-rw-r--r--  1 root root  100 Jan  1 22:20 mysql.ymal.bakab
11
-rw-r--r--  1 root root  100 Jan  1 22:20 mysql.ymal.bakac
12
-rw-r--r--  1 root root   99 Jan  1 22:20 mysql.ymal.bakad
13
-rw-r--r--  1 root root 1370 Dec 11 23:58 redis.log
14
-rw-r--r--  1 root root 1026 Oct 27 22:47 test.py
15
drwxr-xr-x 11 root root 4096 Nov 14 00:40 vim
16
drwxr-xr-x  3 root root 4096 Jan  1 12:05 weather_report
17

18
# 合并文件
19
[root@workPC ~]# cat mysql.ymal.baka* >>mysql.ymal.bak1
20
[root@workPC ~]# ll
21
total 56
22
-rw-r--r--  1 root root  107 Dec 11 23:55 dump.rdb
23
-rw-r--r--  1 root root 6737 Jan  1 22:03 last.list
24
-rw-r--r--  1 root root  399 Dec 29 19:10 mysql.ymal
25
-rw-r--r--  1 root root  399 Jan  1 22:19 mysql.ymal.bak
26
-rw-r--r--  1 root root  399 Jan  1 22:23 mysql.ymal.bak1
27
-rw-r--r--  1 root root  100 Jan  1 22:20 mysql.ymal.bakaa
28
-rw-r--r--  1 root root  100 Jan  1 22:20 mysql.ymal.bakab
29
-rw-r--r--  1 root root  100 Jan  1 22:20 mysql.ymal.bakac
30
-rw-r--r--  1 root root   99 Jan  1 22:20 mysql.ymal.bakad
31
-rw-r--r--  1 root root 1370 Dec 11 23:58 redis.log
32
-rw-r--r--  1 root root 1026 Oct 27 22:47 test.py
33
drwxr-xr-x 11 root root 4096 Nov 14 00:40 vim
34
drwxr-xr-x  3 root root 4096 Jan  1 12:05 weather_report
35

36
# 以行分割文件
37
[root@workPC ~]# ls -al /  |split -l 10 - lsroot
38
[root@workPC ~]# wc -l lsroot*
39
  10 lsrootaa
40
  10 lsrootab
41
   4 lsrootac
42
  24 total
 
 
6、参数代换:xargs
xargs [-Oepn] command
选项与参数:
-0 :如果输入的 stdin 含有特殊字符,例如 `, \, 空格键等等字符时,这个 -0 参数
可以将他还原成一般字符。这个参数可以用于特殊状态喔!
-e :这个是 EOF (end of file) 的意思。后面可以接一个字符串,当 xargs 分析到这个字符串时,
就会停止继续工作!
-p :在执行每个指令的 argument 时,都会询问使用者的意思;
-n :后面接次数,每次 command 指令执行时,要使用几个参数的意思。
当 xargs 后面没有接任何的指令时,默认是以 echo 来进行输出喔!
 
<wiz_code_mirror>
 
 
 
 
 
x
 
 
 
1
[root@workPC ~]# id root
2
uid=0(root) gid=0(root) groups=0(root)
3
[root@workPC ~]# id $(cut -d ' ' -f 1 /etc/passwd|head -n 3)
4
id: extra operand ‘bin:x:1:1:bin:/bin:/sbin/nologin’
5
Try 'id --help' for more information.
6
[root@workPC ~]#
7
# 没有产生id
8

9
[root@workPC ~]# cut -d ' ' -f 1 /etc/passwd|head -n 3|id
10
uid=0(root) gid=0(root) groups=0(root)
11
# 由于id不是管线命令,上面这个指令执行之后,前面的东西统统不见,之后执行id
12

13
[root@workPC ~]# cut -d ' ' -f 1 /etc/passwd|head -n 3|xargs id
14
id: extra operand ‘bin:x:1:1:bin:/bin:/sbin/nologin’
15
Try 'id --help' for more information.
16
# 不了解xargs的用法,依旧出错了
17

18
[root@workPC ~]# cut -d ':' -f 1 /etc/passwd|head -n 3|xargs -p -n 1 id
19
id root ?...y
20
uid=0(root) gid=0(root) groups=0(root)
21
id bin ?...y
22
uid=1(bin) gid=1(bin) groups=1(bin)
23
id daemon ?...y
24
uid=2(daemon) gid=2(daemon) groups=2(daemon)
25

26
# -p 选项让用户的使用过程中,被询问到每个指令是否执行
27

28

29
# 找出/usr/sbin 底下具有特殊权限的文件名,并使用ls -l 列出详细属性
30
[root@workPC ~]# find /usr/sbin/ -perm /7000 |xargs ls -l
31
-rwsr-xr-x  1 root root     117432 Aug  9 09:17 /usr/sbin/mount.nfs
32
-rwxr-sr-x  1 root root      11224 Aug  9 07:52 /usr/sbin/netreport
33
-rwsr-xr-x. 1 root root      11216 Apr 11  2018 /usr/sbin/pam_timestamp_check
34
-rwxr-sr-x. 1 root postdrop 218632 Oct 31  2018 /usr/sbin/postdrop
35
-rwxr-sr-x. 1 root postdrop 260112 Oct 31  2018 /usr/sbin/postqueue
36
-rwsr-xr-x. 1 root root      36280 Apr 11  2018 /usr/sbin/unix_chkpwd
37
-rws--x--x  1 root root      40328 Aug  9 11:09 /usr/sbin/userhelper
38
-rwsr-xr-x  1 root root      11296 Aug  9 07:52 /usr/sbin/usernetctl
39
[root@workPC ~]#
 
 
40

41

 
 
 
 
 
Nobody knows it better than me.
原文地址:https://www.cnblogs.com/dadaizi/p/13060386.html