I/O重定向详解

一、I/O重定向基本概念

I/O重定向有三种定义打开文件:stdin (the keyboard), stdout (the screen), and stderr (error messages output to the screen)。每个打开的文件都是通过文件描述符(File Descriptor)来标识的,内核为每个进程维护了一个文件描述符表,这个表以FD为索引,再进一步指向文件的详细信息。在进程创建时,内核为进程默认创建了0、1、2三个特殊的FD,这就是stdin、stdout和stderr。

二、stdout和stderr

查看文件File Descriptor

    [root@localhost/dev/fd]#ll /dev/fd/
    total 0
    lrwx------ 1 root root 64 Jul 16 07:18 0 -> /dev/pts/2
    lrwx------ 1 root root 64 Jul 16 07:18 1 -> /dev/pts/2
    lrwx------ 1 root root 64 Jul 16 07:18 2 -> /dev/pts/2
    lr-x------ 1 root root 64 Jul 16 07:18 3 -> /proc/5696/fd

支持的操作符号包括:

  • 1>或 > 把stdout重定向到文件中,并覆盖文件中的内容
示例1  
    [root@localhost~]#touch a.txt
    [root@localhost~]#ls > a.txt
    [root@localhost~]#cat a.txt
    a
    anaconda-ks.cfg
    Desktop
    Documents
    Downloads
    ...
 示例2 
    [root@localhost~]#touch b.txt
    [root@localhost~]#cat /etc/passwd b.txt
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    ...
  • 2> 把stderr重定向到文件中并覆盖文件中的内容
示例1  
    [root@localhost~]#lss 2> c.txt
    [root@localhost~]#cat c.txt
    bash: lss: command not found...
    Similar command is: 'ls'
示例2  
    [root@localhost~]#ls /ett 2> c.txt
    [root@localhost~]#cat c.txt
    ls: cannot access /ett: No such file or directory
  • &> 把所有输出重定向到文件中并覆盖文件中的内容
示例1 
    [root@localhost~]#touch d.txt
    [root@localhost~]#ls /etc  /err &> d.txt
    [root@localhost~]#cat d.txt
    ls: cannot access /err: No such file or directory
    /etc:
    abrt
    adjtime
    aliases
    aliases.db
    ...

追加重定向(>>),不会覆盖文件内容

示例1   
    [root@localhost~]#cat a.txt
     /etc/drirc
    [root@localhost~]#ls /etc/issue >> a.txt
    [root@localhost~]#cat a.txt
    /etc/drirc
    /etc/issue
示例2
    [root@localhost~]#cat b.txt
    /etc/dnsmasq.conf
    [root@localhost~]#ls /ett 2>>b.txt
    [root@localhost~]#cat b.txt
    /etc/dnsmasq.conf
ls: cannot access /ett: No such file or directory
示例3
    [root@localhost~]#cat c.txt
    ls: cannot access /ett: No such file or directory
    [root@localhost~]#ls /etc/d
    dbus-1/                     dnsmasq.conf
    dconf/                      dnsmasq.d/
    default/                    dracut.conf
    depmod.d/                   dracut.conf.d/
    dhcp/                       drirc
    dleyna-server-service.conf  
    [root@localhost~]#ls /etc/drirc /ett &> c.txt
    [root@localhost~]#cat c.txt
    ls: cannot access /ett: No such file or directory
    /etc/drirc
  • 2>&1 将错误和正确的信息放到同一个文件中,与>&和1>&2等价
    [root@localhost~]#ls /etc/issue /stt > d.txt 2>&1
    [root@localhost~]#cat d.txt
    ls: cannot access /stt: No such file or directory
/etc/issue

set -C :禁止将内容覆盖已有文件,但可追加强制覆盖:“>|”
set +C :允许覆盖

示例1
    [root@localhost~]#set -C
    [root@localhost~]#ls /etc/issue > a.txt
    -bash: a.txt: cannot overwrite existing file
    [root@localhost~]#ls /ett 2> a.txt
    -bash: a.txt: cannot overwrite existing file

()合并多个程序的stdout

    [root@localhost~]#(ls /etc/issue ; cat a.txt) > c.txt
    [root@localhost~]#cat c.txt
    /etc/issue
    /etc/drirc
    /etc/issue
    /etc/issue

三、标准输入

示例1
    [root@localhost~]#cat </etc/issue
    \S
    Kernel \r on an \m
示例2
    [root@localhost~]#cat >f1 <<eof
    > aaa
    > bbb
    > ccc
    > eof
<<终止词必须相等,最后一个输入相同即退出;

四、其他

管道:
COMMAND1 | COMMAND2
将错误和正确标准输出

    ls /boot /err 2>&1 |tr 'a-z' 'A-Z'
    ls /boot /err  |& tr 'a-z' 'A-Z'

less 命令可以上下翻 直接退出
more 命令不可以上翻 退出按q

‘- ’符号
示例
将/home里面的文件打包,但打包的数据不是记录到文件,而是传递到stdout,经过管道后,将tar - CVF - /home传递给后面的tar -xvg -,后面的这个 - 则是天谴一个命令的stdout,因此,就不需要使用临时file了

    tar -cvf - /home |tar -xvf -

tee命令
-a append 附加 ;不覆盖原文件
示例

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

推荐阅读更多精彩内容