标准I/O与管道

1. Linux一共三种I/O设备:

标准输入---0(默认接收键盘)
标准输出---1(默认输出到终端)
标准错误---2(默认输出到终端)

  • 标准输出
[root@centos6 ~]# ls ./
anaconda-ks.cfg  Documents  install.log  
  • 标准错误
[root@centos6 ~]# aubin
-bash: aubin: command not found
[root@centos6 ~]# ls ./aubin
ls: cannot access ./aubin: No such file or directory

2. I/O重定向

I/O重定向即改变默认位置
标准输出与标准错误可以重定向到文件
COMMOND 操作符 FILE

  • SHELL重定向的执行顺序
shell单条命令,重定向部分的执行顺序:先<,然后command,最后<和<<
  • > 把标准输出重定向到文件
[root@centos6 app]# cal > cal.log
  • 2> 把标准错误重定向到文件
#错误信息重定向到文件后,屏幕上不在输出错误提示
#
[root@centos6 app]# aubin                      #错误信息
-bash: aubin: command not found
[root@centos6 app]# aubin 2> erroor.log        #错误信息重定向到error.log
[root@centos6 app]# cat erroor.log             #输出error.log
-bash: aubin: command not found
  • &> 把所有输出重定向到文件
    当执行一个命令有标准输出又有错误输出时使用&>
[root@centos6 app]# ls /root/ /ccc >test.log 2>&   #旧写法,2<&只能在最后
[root@centos6 app]# ls -l /root/ /ccc >& f1        #旧写法
[root@centos6 app]# ls -l /root/ /ccc &> f1        #将所有信息重定向到f1文件
[root@centos6 app]# cat f1                         #查看f1文件,有标准输出有错误输出
ls: cannot access /ccc: No such file or directory
-rw-------. 1 root root  1479 Jul 14 11:18 anaconda-ks.cfg
drwxr-xr-x. 2 root root  4096 Jul 14 11:26 Desktop
[root@centos6 app]# ls /root 2>file.log >/dev/file.log     
  • 标准输出与标准错误的转换
#"ls /root"为标准输出,2>file为标准错误重定向。标准输出使用标准错误重定向应报错
# 1>&2将标准输出转为标准错误后,命令不报错
[root@centos6 app]# ls /root 2>file 1>&2
#
#
#"ls /aubin"为标准错误,>file为标准输出重定向。标准错误使用标准输出重定向应报错
# 1>&2将标准错误转为标准输出后,命令不报错
[root@centos6 app]# ls /aubin >file 2>&1
  • 覆盖与追加
    >为覆盖,文件不存在则创建,存在则覆盖
    >>为追加,文件不存在则创建,存在则追加
[root@centos6 app]# ls /boot/  &>> file.log 
[root@centos6 app]# ls /boot/  2>> file.log
  • 禁止覆盖set -C取消进制覆盖set +C
[root@centos6 app]# set -C                           #禁止覆盖
[root@centos6 app]# ls /boot/ > file.log             #文件不存在则创建
[root@centos6 app]# ls /boot/ > file.log             #文件存在不允许覆盖
-bash: file.log: cannot overwrite existing file
[root@centos6 app]# set +C                           #取消禁止
  • 手动强行覆盖
[root@centos6 app]# ls /root/ >| file.log 
  • 重定向优先级
    pwd不会重定向>的优先级高于;
[root@centos6 app]# pwd;whoami >file

调整优先级

[root@centos6 app]# (pwd;whoami) >file
  • 将文件重定向到标准输入
    mila文件重定向到mail的标准输入
[root@centos6 app]# mail -s hello li < mail 
  • 黑洞常用语隐藏全部输出
#忽略标准输出信息
[root@centos6 app]# ls /root/ >/dev/null      
#将标准输出定向到test.lg,错误信息定向到黑洞                   
[root@centos6 app]# ls /root /aubin 2>/dev/null >test.log   
#清空日志文件
[root@centos6 app]# cat /dev/null > file.log 
#修改密码不提示任何信息
[root@centos6 app]# echo 123 | passwd --stdin aubin &> /dev/null

3. I/O字符的删除、替换、缩减

  • 字符的删除、缩减
[root@centos6 app]# tr -d 'A-Z' < issue          #删除A-Z的字符
[root@centos6 app]# tr -dc 'A-Z' < issue         #除A-Z的字符都删除
[root@centos6 app]# tr -s 'ac' < issue           #将连续的a和连续的c压缩成一个
  • 对应转化
tr -t '12345' 'abc'                              #只将一一对应的转换
  • 原字符与替换符对称
[root@centos6 app]# tr '123' 'ABC'               #只要标准输入123替换为ABC
123456
ABC456
  • 原字符多于替换符
[root@centos6 app]# tr '123456' 'ABC'            #没有对应的替换符,按最后一个替换
12345678
ABCCCC78
  • 替换符多于原字符
[root@centos6 app]# tr '123' 'ABCEFG'            #无对应原字符的不替换
123456789
ABC456789
  • 替换文本的重定向
[root@centos6 app]# tr 'a-z' 'A-Z' <issue        #issue重定向到tr中然后替换
CENTOS RELEASE 6.9 (FINAL)
KERNEL \R ON AN \M
  • 转换字符并重定向到新的文件
[root@centos6 /]# tr 'a-z' 'A-Z' < issue > issue2     
[root@centos6 /]# cat issue2
CENTOS RELEASE 6.9 (FINAL)
KERNEL \R ON AN \M
[root@centos6 /]# tr ' ' '\n' < issue > issue2 #空格替换成回车
[root@centos6 /]# tr -d 'm-n' < issue > issue2 #删除m-n
[root@centos6 /]# tr -dc 'm-n' < issue > issue2 #除m-n外都删除

3. 重定向到同名文件夹

  • 追加文件不会清空
[root@centos6 app]# tr 'a-z' 'A-z' < issue >>issue
[root@centos6 app]# cat issue 
CentOS release 6.9 (Final)
Kernel \r on an \m
CENTOS RELEASE 6.9 (FINAL)
KERNEL \R ON AN \
  • 重定向会清空
????http://www.cnblogs.com/chengmo/archive/2010/10/20/1855805.html
[root@centos6 app]# tr 'A-Z' 'a-z' <issue>issue 
[root@centos6 app]# cat issue
#此时tr命令没有输入所以输出为空,直接空重定向到issue
[root@centos6 app]# tr 'A-Z' 'a-z' >issue
[root@centos6 app]# cat issue

4. 文件重定向到标准输入 <

  • 文件重定向到标准输入
[root@centos6 /]# tr 'a-z' 'A-Z' < issue         #文件重定向到命令
  • 终止词
    终止词单独一行,有且仅有终止词才生效。
[root@centos6 app]# bc << end
> 1+1+2+3+4*100
> end
407
[root@centos6 app]# cat <<end
> hello
> word end                                       #终止词无效
> end                                            #只要未输入终止符
#                                                 之前操作暂未写到文件中
hello
word end

传送门
Linux练习题-重定向与管道
Linux日常练习题
Linux学习笔记

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

推荐阅读更多精彩内容