Linux常用命令-io操作

Linux-io操作

  标准输入和输出

  • 标准输入 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 替换或者删除字符

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\n"
adsada
aaa
sadasdcxzczx
aacc
asdadwq
aa
[root@localhost jiangyi]#seq 1 10 >f1
[root@localhost jiangyi]#tr -d "\n" <f1
[root@localhost jiangyi]tr "\n" " "<f1
[root@localhost jiangyi] tr " " "\n" <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"

 

posted @ 2019-08-01 16:37  Xiao_Xu  阅读(2413)  评论(0编辑  收藏  举报