zoukankan      html  css  js  c++  java
  • 管线命令

    管线命令

    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.
  • 相关阅读:
    backtrace、backtrace_symbols、backtrace_symbols_fd-support for application self-debugging
    基于linux与busybox的reboot命令流程分析
    Ubuntu Linux 查看、编辑、比较二进制文件
    SecureCRT中的vim出现1H特殊字符
    单例模式和静态方法
    linux ls命令按时间显示文件
    Shallow Heap & Retained Heap
    jedis连接池的参数配置
    jvm参数设置和性能调优
    并发和并行的区别
  • 原文地址:https://www.cnblogs.com/dadaizi/p/13060386.html
Copyright © 2011-2022 走看看