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 ~]#
·保存不同阶段的输出
·复杂关东的故障排除
·同时查看和记录输出