Linux链接文件、管道、重定向讲解

--链接文件--

    硬链接:在inode表中记录一个条目,所有的元数据和原始文件元数据相同。

        ·相当于两个名字。

        ·删除原始文件,另一个条目也能够找数据本身。

        ·不能跨分区链接

           ~]#ln [原始文件] 链接文件

    软链接:在inode表中记录一个条目,指针指向原始文件条目,删除原始条目,符号连接找不到原始数据。

         ·新的inode号。

         ·可以跨分区链接,

         ·可以对目录进行链接

           ~]# ln -s [原始文件] 链接文件


标准I/O和管道

一、三种I/O设备

    linux中给程序提供三种I/O设备

     * 标准输入·······0--stdin····默认接收来自键盘的输入

    * 标准输出·······1--stdout····默认输出到终端窗口

    * 标准错误·······2--stderr····默认输出到终端窗口

    I/O重定向:改变默认位置

二、把I/O频道重定向入文件

--把输出和错误重定向到文件--

  格式为:

  #命令 操作符合 文件名

> 重定向标准输出到文件

         ·文件内容会被覆盖

        ~]# set -C:禁止蒋内容覆盖已有文件,但可追加

           强制覆盖:>|

        ~]# set +C:允许覆盖

>> 原有内容基础上,追加内容
       
~]# cat /etc/passwd >> ~/a.tx 

例:

[root@localhost ~]# cat a.txtbash: sdfadfa: command not found...[root@localhost ~]# cat /etc/passwd >> ~/a.txt [root@localhost ~]# cat a.txtbash: sdfadfa: command not found...root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologin

2>: 覆盖重定向错误输出数据流;

       ##abcdefg 2> ~/a.txt 

例:

[root@localhost ~]# abcdefg 2> ~/ab.txt[root@localhost ~]# cat ab.txt         bash: abcdefg: command not found...[root@localhost ~]#

2>>: 追加重定向错误输出数据流

       ##higklm 2>> ~/a.txt 

例:

root@localhost ~]# higklm 2>> ~/ab.txt[root@localhost ~]# cat ab.txt bash: abcdefg: command not found...bash: higklm: command not found...[root@localhost ~]#

&>覆盖输出重定向

      ##同上

&>> 追加输出重定向

      #同上

()合并多个程序的STDOUT

       ##(ls;cat /etc/passwd)> ~/a.txt

tr

    转换和删除字符

        tr [OPTION]... SET1 [SET2]

        -c:取字符集的补集

        -d:删除所有属于第一字符集的字符

        -s:把连续重复的字符以单独一个字符表示

        -t:将第一个字符集对应字符转化为第二字符集对应的字符

--从文件中导入STDIN--

    重定向标准输入

    ~]# tr [a-z] [A-Z] < /etc/issue

    ·该目录会把/etc/issue中小写字符转换成小写字符

例:

[root@localhost ~]# cat /etc/issue;tr [a-z] [A-Z] < /etc/issue \SKernel \r on an \mThe hostname \nlogin termiWelcome to beijing\SKERNEL \R ON AN \MTHE HOSTNAME \NLOGIN TERMIWELCOME TO BEIJING[root@localhost ~]# ^C

==把多行发送给STDIN==

    << 终止符:从键盘把多行重定向给STDIN,直到 终止符 位置的所有文本都发送给STDIN

例:

[root@localhost ~]# tr [a-z] [A-Z] <
>abc.txt            > hello,> how ,are you !> EFO[root@localhost ~]# cat abc.txt HELLO,HOW ,ARE YOU ![root@localhost ~]#

管道

    |连接命令

    COMMAND1 | COMMAND2 | COMMAND3 | ...

    释:·将命令1的输出发送给命令2的输入,命令2的输出发送给命令3的输入

      ·标准错误默认不能通过管道转发,可利用 2>&1 或 |& 实现

例:

[root@localhost ~]# cat /etc/issue | tacWelcome to beijinglogin termiThe hostname \nKernel \r on an \m\S[root@localhost ~]# ls sdadfad |& tr 'a-z' 'A-Z'LS: CANNOT ACCESS SDADFAD: NO SUCH FILE OR DIRECTORY[root@localhost ~]#

tee

    重定向到多个目标

    ~]# COMMAND1 | tee 文件名 | COMMAND2

    释:把命令1的STDOUT保存在文件名中,然后管道输入给命令2 

例:

[root@localhost ~]# who | tee c.txt |tr [a-z] [A-Z]ROOT     PTS/0        2016-07-30 15:52 (10.1.250.20)[root@localhost ~]# cat c.txt root     pts/0        2016-07-30 15:52 (10.1.250.20)[root@localhost ~]#

    ·保存不同阶段的输出

    ·复杂关东的故障排除

    ·同时查看和记录输出