Linux常用命令-io操作 Linux-io操作 标准输入和输出 I/O重定向 管道
标准输入和输出
- 标准输入 stdin 0 默认接受来自键盘的输入
- 标准输出 stdout 1 默认输出到终端窗口
- 标准错误 stderr 2 默认输出到终端窗口
I/O重定向
把输出和错误重新定向到文件
> 覆盖
- > 将stdout重定向到文件
- 2> 把stderr重定向到文件
- &> 把所有输出重定向到文件
禁止/允许覆盖
[root@centos ~]#set -C [root@centos ~]#> a.txt -bash: a.txt: 无法覆盖已存在的文件 [root@centos ~]#set +C [root@centos ~]#> a.txt
>> 追加
- >> 将stdout追加到文件
- 2>> 把stderr追加到文件
- &>> 把所有输出追加到文件
标准输出和错误输出各自定向到不同的文件
ls b bbbbb > info.log 2> error.log
合并所有输出
- &> 覆盖重定向
- &>> 追加重定向
- command > /path/to/file.out 2>&1
- command >> /path/to/file.out 2>&1
- ():合并多个程序的stdout
- /dev/null 无限接收的无底洞
tr 'a-z' 'A-Z' </etc/issue [root@localhost jiangyi]#tr ab 12 ab 12 [root@localhost jiangyi]#tr abc 12 如果后面的位数不足的话,则用最后一位补齐 abc 122 ab 12 tr -d abc < issue > issue2 从定向不能为原来的文件,如果说为原来的文件,则文件情况 -t 用来截断 [root@localhost jiangyi]#tr -t abcd 12 abcd 12cd cd cd -s 压缩 去重 [root@localhost jiangyi]#tr -s abc abc abc aaabbbccccccccccccccccccccccccccccc abc -c 取反 [root@localhost jiangyi]#tr -sc abc aaaaaaaaaaaaaabbbbbbbbbbbbbbbcccccccccccccc aaaaaaaaaaaaaabbbbbbbbbbbbbbbcccccccccccccc aaaaaaaaaaaaaaaaaabbbbbbbbbbbbbcccccccccccccccccdddddddddddddeeeeeeeeeeeeffffffffffffff aaaaaaaaaaaaaaaaaabbbbbbbbbbbbbcccccccccccccccccdef aaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccc1111111111111111222222222222333333333333 aaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccc123 [root@localhost jiangyi]#tr -dc abc aaaaaaaaaaaaabbbbbbbbbbbbccccccccccccccccccdddddddddddddddwqweqweqwqeqwqwqwq wqqqqqqqqqqqqqqqqqqqqqqqqq ctrl+d结束 [root@localhost jiangyi]#tr -dc "abc " adsada aaa sadasdcxzczx aacc asdadwq aa [root@localhost jiangyi]#seq 1 10 >f1 [root@localhost jiangyi]#tr -d " " <f1 [root@localhost jiangyi]tr " " " "<f1 [root@localhost jiangyi] tr " " " " <f2
[root@localhost jiangyi]#cat >f1 <<EOF > 1 > 2 > 3 > 4 > 5 > 6 > 7 > > 8 > 9 > EOF [root@localhost jiangyi]# cat > f4 asdas sad asd ctrl+d结束 ctrl+c也可以 两者区别 第一种方式输出结束,文件才会产生 第二方式,回车一次就会写入文件 EOF 约定俗成
(多行重定向 不结束不会生成文件
单行重定向 回车一次就会写入文件)
管道
管道使用“|”来连接命令
命令1|命令2|命令3|。。。
- 将命令1的stdout发给命令2的stdin,将命令2的stdout发给命令3的stdin
- stderr默认不能通过管道转发,可以使用|&实现
- [root@centos ~]#ls /daopda|& tr -s 'a-z' 'A-Z' LS: 无法访问/DAOPDA: 没有那个文件或目录
- 作用一般是用来组合多种工具
- ls |tr 'a-z' 'A-Z'
[root@localhost jiangyi]#ls /dadadasda|tr -s "a-z" "A-Z" ls: cannot access /dadadasda: No such file or directory [root@localhost jiangyi]#ls|tr "a-z" "A-Z"