关闭

linux IO重定向应用

标签: linux IO重定向详解linux文件覆盖 linux 文件追
39人阅读 评论(0) 收藏 举报
分类:

IO重定向

程序:指令+数据
    程序:IO

    可用于输入的设备: 文件
        键盘设备, 文件系统上的常规文件,网卡等
    可用于输出的设备: 文件
        显示器, 文件系统上的常规文件,网卡等

    程序的数据流有三种
        输入的数据流: <-- 标准输入(stdin), 如键盘
        输出的数据流: --> 标准输出(stdout), 如显示器
        错误输出流:   --> 错误输出(stderr), 显示器

    fd: file descriptor, 文件描述符
        标准输入:0
        标准输出:1
        错误输出:2

IO重定向:
    输出重定向: >
        特性: 覆盖输出
    例如:

image_1b5fssh191mf51f9r1stp1ifq1bn79.png-11.5kB 
输出重定向: >> 
例如: 
image_1b5fsu535pd014c1beh1vel18kem.png-13.3kB 
特性: 追加输出

    # set -C (大写C)
        禁止覆盖输出重定向至已存在的文件
        此时可使用强制覆盖重定向: >|
    例如:开启此功能后,>已经不能覆盖已经存在的文件了,file1覆盖file2文件时提示错误,不过我们可以用>|强制覆盖, >>输出重定向不受影响,同时file1覆盖file3也不受影响,因为file3文件是不存在,此命令只针对已存在文件

image_1b5ft3fdc1r2qu2kcsc13q21rno1g.png-8.6kB 
# set+C 
关闭上述特性 
例如:关闭后,file1文件覆盖file2文件就不会报错了 
image_1b5ftakbpaob1hc31f104k4g3q1t.png-3.5kB

    错误输出重定向: 2>, 2>>
    例如:file4文件不存在,我们用>把file4覆盖file2时出现错误,我们用2>输出时,就正常了,我们再看file2文件内容,错误提示的内容已经存在file2文件里了,意思就是把错误的信息也输出到file2文件里,2>>就是就是追加的意思,错误输出重定向,我们2>>file4在追加一次,file2文件就有两个错误信息了

image_1b5ftg2sv130db4r1ucf1a1418ke2a.png-14.7kB

    合并正常输出流和错误输出流
        &>, &>>
    例如:意思是把不管正确的还是错误的输出都输入到文件里,file1是存在的,覆盖到file2没有问题,file4文件不存在的,也可以覆盖到file2文件里,同时错误信息也报存在file2文件里了.

image_1b5ftqgbdogmt0a1cq71m6r11up2n.png-15.3kB 
&>> 就是追加的意思了,不删除原来的数据,不管正常的输出还是错误的输出都追加到文件里 
image_1b5fu2p2arn0241kto13sgigu34.png-14kB

    cat file1 > file2 2>&1  与&>同义 

image_1b5fu91god5f107h18jpjv57op3h.png-11.6kB 
cat file1 >> file2 2>&1 与&>>同义 
特殊设备: /dev/null 
例如: /dev/null是一个黑洞,不管什么数据输入到里面都会消失,如果写脚本有什么数据不需要的都可以丢到这里面,我们把file1文件复制到/dev/null里,cat看的时候什么数据都没有 
image_1b5fucjll1pka7m8aatf3e5l53u.png-6.5kB

    输入重定向: <
    例如: 把文件内容输出到屏幕,cat就算不加< 也是有这个功能的

image_1b5fukptj1vojbt91tma16im66p4o.png-6.5kB 
tr命令: 
命令格式:tr [OPTION]... SET1 [SET2] 
把输入的数据当中的字符,凡是在SET1定义范围内出现的,通通对位转换为SET2出现的字符 
例如:意思把[a-z]都输出为[A-Z]也就是变成大写,第一行和第三行都是我输入的小写字母,第二行和第四行都是按enter键就会自动转换成大写字母,对本身是大写字母的字符不做转换 
image_1b5fuprmg1usiqhoea61nacd6n55.png-4kB

        用法1:
            列: tr [a-z] [A-Z] < file1 
            意思是把file1所有小写改成大写字母并输出到屏幕

image_1b5fv4jtl1pu0poaggekit1p115i.png-6.4kB 
用法2: 
列: tr -d [if] < file1 
意思是把file1显示出来包含if的全部删除掉,不会删除源文件数据 
image_1b5fv9khg10unvc51duotu51jd76c.png-6.1kB

         << 这个就不是追加的意思了
            cat << EOF         可以持续在屏幕输入数据,直到输入EOF就会自动退出来,同时把你刚才输入的数据一次性打印出来,这里的EOF是直接随意定义,可以是随意的单词.退出就是自己定义的这个单词

image_1b5fvhiim1l81uhg1q718fgt9i6p.png-6.8kB 
cat > file1 << EOP 
例如: 也可以把在屏幕上打好的字符输入到指定的文件中 
image_1b5g02pr41mbvk401kmmcgo15lv76.png-13.8kB

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:209次
    • 积分:30
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档