管线命令
Posted dadaizi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了管线命令相关的知识,希望对你有一定的参考价值。
管线命令
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
以上是关于管线命令的主要内容,如果未能解决你的问题,请参考以下文章
我的OpenGL学习进阶之旅OpenGL ES 3.0实现了具有可编程着色功能的图形管线