美文网首页
管道及相关常用命令

管道及相关常用命令

作者: EldonZhao | 来源:发表于2016-12-27 17:24 被阅读25次

高效率的使用Linux通常都需要结合命令的顺序控制以及管道一起实现。这里主要总结一下Linux命令的执行顺序控制和管道的使用方法。

命令执行顺序控制

1.顺序执行多个命令

通过;把多个命令放在一起,可以达到顺序执行这几个命令的效果。

顺序执行多个命令

2.有选择执行命令

顺序执行命令存在的弊端显而易见,如果我们需要在前面命令执行成功(或者满足一定条件时)才执行后续的命令,我们就需要学会控制命令执行与否。

&&符号表示左侧命令执行返回0时,执行右侧命令;||表示左侧命令执行返回1时,执行右侧命令(注意:与java等代码中对应符号逻辑相反)。

shiyanlou:~/ $ which cowsay  [17:35:25]
cowsay not found
shiyanlou:~/ $ echo $?[17:51:13]
1
shiyanlou:~/ $ which cowsay && echo 2[17:51:26]
cowsay not found
shiyanlou:~/ $ which cowsay>/dev/null&& echo 2  [17:51:57]
shiyanlou:~/ $ sudo apt-get update;sudo apt-get install cowsay
shiyanlou:~/ $ which cowsay  [17:57:06]
/usr/games/cowsay
shiyanlou:~/ $ echo $?[17:57:21]
0
shiyanlou:~/ $ which cowsay && echo 2[17:57:29]
/usr/games/cowsay
2
shiyanlou:~/ $ which cowsay>/dev/null && echo 2[17:57:35]
2

由上述代码知,

  • 命令执行返回和命令执行的打印内容不是一个概念;
  • echo $?表示打印前一个命令执行的返回值;
  • >\dev\null表示把命令执行中打印的内容抛进‘地狱’(/dev/null就是个地狱一般的无底洞);

下图可以形象的描述这个过程:


命令控制流程图

管道的使用

管道是一种通信机制,通常用于进程间的通信。它表现出来的形式就是把前面进程的输出(stdout)直接作为下个进程的输入(stdin)。
管道通常分为匿名管道和具名管道。我们在使用一些过滤程序时,经常会用到匿名管道,在命令行中由|分隔符表示。具名管道简单说就是有名字的管道,通常只会在源程序中用到具名管道。这里我们主要介绍匿名管道的常见用法。

  • less命令

shiyanlou:~/ $ ll /etc | less                                           [19:04:33]
total 816K
drwxr-xr-x  2 root root   4.0K Aug 17 12:41 ImageMagick
drwxr-xr-x  2 root root   4.0K Aug 17 12:44 R
drwxr-xr-x 10 root root   4.0K Aug 17 12:44 X11
-rw-r--r--  1 root root   3.0K May 29  2015 adduser.conf
drwxr-xr-x  2 root root    12K Aug 18 18:04 alternatives
drwxr-xr-x  8 root root   4.0K Aug 17 12:43 apache2
drwxr-xr-x  3 root root   4.0K May 29  2015 apparmor
drwxr-xr-x  6 root root   4.0K Aug 17 12:44 apparmor.d
drwxr-xr-x  4 root root   4.0K Aug 17 12:39 apport
drwxr-xr-x  6 root root   4.0K Aug 18 17:52 apt
drwxr-xr-x  3 root root   4.0K Aug 17 12:44 authbind
-rw-r--r--  1 root root   2.2K Apr  9  2014 bash.bashrc
-rw-r--r--  1 root root     45 Mar 23  2014 bash_completion
drwxr-xr-x  2 root root   4.0K Aug 17 12:44 bash_completion.d
-rw-r--r--  1 root root    356 Jan  2  2012 bindresvport.blacklist
-rw-r--r--  1 root root    321 Apr 17  2014 blkid.conf
lrwxrwxrwx  1 root root     15 Sep  3  2015 blkid.tab -> /dev/.blkid.tab
drwxr-xr-x  3 root root   4.0K Aug 17 12:37 ca-certificates
-rw-r--r--  1 root root   7.7K Aug 17 12:42 ca-certificates.conf
drwxr-xr-x  2 root root   4.0K Aug 17 12:41 calendar
drwxr-xr-x  2 root root   4.0K May 29  2015 console-setup
drwxr-xr-x  2 root root   4.0K Aug 17 12:44 cron.d
drwxr-xr-x  2 root root   4.0K Aug 17 12:44 cron.daily
drwxr-xr-x  2 root root   4.0K May 29  2015 cron.hourly
drwxr-xr-x  2 root root   4.0K May 29  2015 cron.monthly
drwxr-xr-x  2 root root   4.0K Aug 17 12:41 cron.weekly
-rw-r--r--  1 root root    722 Feb  9  2013 crontab
:
  • cut命令

/etc/passwd文件中字段之间由:隔离,每个字段代表不同的意思(具体参见Linux中/etc/passwd文件详解),如果我们只要查看用户名和用户的home目录,则可以用cut命令实现:

shiyanlou:~/ $ grep "shiyanlou" /etc/passwd | cut -d ':' -f 1,6       [19:25:24]
shiyanlou:/home/shiyanlou

cut更多用法如下:

shiyanlou:~/ $ grep "shiyanlou" /etc/passwd | cut -c -5 #取前5个字符(包含第5个)
shiyanlou:~/ $ grep "shiyanlou" /etc/passwd | cut -c 2-5 #取2~5个字符(包含第5个)
shiyanlou:~/ $ grep "shiyanlou" /etc/passwd | cut -c 5- #取后5个字符(包含第5个)
shiyanlou:~/ $ grep "shiyanlou" /etc/passwd | cut -c 5 #取前第五个字符
  • grep命令

grep是个很强大的命令, 主要完成从文本或stdin中查找匹配字符串,它还可以结合正则表达式实现很复杂却很高效的匹配和查找。
grep格式一般为:

grep -rnI "eldonzhao" ~
其中-r表示递归查找,-n表示显示行号,-I表示忽略大小写

shiyanlou:~/ $ export | grep -nI "shiyan$"                     [19:28:34]
shiyanlou:~/ $ export | grep -nI "yanlou$"   [19:52:25]
1:HOME=/home/shiyanlou
5:LOGNAME=shiyanlou
8:MAIL=/var/mail/shiyanlou
17:USER=shiyanlou
  • wc命令

wc是个非常简单小巧的计数工具。

shiyanlou:~/ $ wc /etc/passwd           [19:56:34]
  28   35 1370 /etc/passwd
shiyanlou:~/ $ wc -l /etc/passwd        [19:59:02]
28 /etc/passwd #行数
shiyanlou:~/ $ wc -w /etc/passwd        [19:59:07]
35 /etc/passwd #单词书
shiyanlou:~/ $ wc -c /etc/passwd        [19:59:12]
1370 /etc/passwd #字节数
shiyanlou:~/ $ wc -m /etc/passwd        [19:59:21]
1370 /etc/passwd #字符数
shiyanlou:~/ $ wc -L /etc/passwd        [19:59:27]
81 /etc/passwd #最长行字节数
shiyanlou:~/ $ ls -d /etc/*/ | wc -l[20:02:20]
103 #etc下所有目录数
  • sort命令

该命令的功能就是将输入按照一定方式排序,然后再输出。它支持的排序方式有:字典排序、数字排序、按月份排序、随机排序、反转排序、指定字符串排序等。

  • 默认排序(字典排序)
shiyanlou:~/ $ cat /etc/passwd | sort      [16:33:30]
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
games:x:5:60:games:/usr/games:/usr/sbin/nologin
  • 反转排序
shiyanlou:~/ $ cat /etc/passwd | sort -r      [16:33:34]
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
tomcat7:x:108:112::/usr/share/tomcat7:/bin/false
syslog:x:101:104::/home/syslog:/bin/false
  • 按特定字段排序
shiyanlou:~/ $ cat /etc/passwd | sort -t ":" -k 3 -n      [16:41:56]
root:x:0:0:root:/root:/bin/bash
libuuid:x:100:101::/var/lib/libuuid:

上述命令表示要排序/etc/passwd中内容,排序字段为每行按:分割后的第三个字段。-t ':'表示按:分割,-k 3表示按照第三个字段排序,-n表示按照数字顺序排序。

  • uniq命令

uniq命令是用于去除连续重复行的。

shiyanlou:~/ $ history | cut -c 8- | cut -d ' ' -f 1 | sort | uniq #去掉重复的行
cat
history
history|
sort
uniq
shiyanlou:~/ $ history | cut -c 8- | cut -d ' ' -f 1 | sort | uniq -D #打印所有重复的行
cat
cat
cat
cat
cat
cat
history
history
shiyanlou:~/ $ history | cut -c 8- | cut -d ' ' -f 1 | sort | uniq -d #打印重复的行
cat
history
history|
sort
shiyanlou:~/ $ history | cut -c 8- | cut -d ' ' -f 1 | sort | uniq -dc #打印重复的行和重复次数
      6 cat
      7 history
      4 history|
      2 sort

相关文章

  • 管道及相关常用命令

    高效率的使用Linux通常都需要结合命令的顺序控制以及管道一起实现。这里主要总结一下Linux命令的执行顺序控制和...

  • RabbitMQ相关文章

    RabbitMQ相关文章 运维 RabbitMQ常用命令 RabbitMQ的安装及集群搭建方法 RabbitMQ单...

  • ffmpeg相关常用命令及可选参数

    ffmpeg相关常用命令及可选参数, 包括ffmpeg.exe、 ffplay.exe、 ffprobe.exe,...

  • 编程基础练习

    相关技术 Git 基础:Git 安装及常用命令介绍TDD:深度解读 - TDD(测试驱动开发)—— Seaborn...

  • linux命令-01

    今天介绍下linux常用命令及相关知识。 1.linux文件系统: / :根目录,所有的文件都在‘/’目录下。 /...

  • linux 常用命令

    Linux简介及Ubuntu安装 常见指令 系统管理命令 打包压缩相关命令 关机/重启机器 Linux管道 Lin...

  • 雨水管道和污水管道清淤的施工方法

    【问题】雨水管道及污水管道清理管道内淤泥的施工方法? 【解答】市政雨水及污水管道清淤:是利用高压清洗车,或者...

  • 进程间通信方式

    管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字...

  • linux常用操作指令命令

    常用指令 系统管理命令 打包压缩相关命令 关机/重启机器 Linux管道 Linux软件包管理 vim使用 用户及...

  • 【mongoDB查询进阶】聚合管道(三) -- 表达式操作符

    回顾 相关文章回顾 mongoDB查询进阶--聚合管道(一)回顾mongoDB查询进阶--聚合管道(二)回顾 管道...

网友评论

      本文标题:管道及相关常用命令

      本文链接:https://www.haomeiwen.com/subject/lcmkvttx.html