【命令】管道及相关常用命令

高效率的使用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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容