Linux~输入输出重定向

输入重定向

  • stdin,文件描述符是0, <
  • 默认的输入就是你的键盘输入
  • 输入重定向的意思就是把默认从键盘的输入数据,改为从文件中,或从其它命令中获得。

来看例子:

tr a-z A-Z   // 此时你回车后,tr命令等待你的输入,你可以输入小写字母,会转换为大写的

// 那么如果我们想要把一个文件中的小写字母都转为大写的呢? 此时输入重定向的作用就来了
tr a-z A-Z < a.txt
[root@rhel8-mytest ~]# tr a-z A-Z <<EOF  // 用于多行,一般用EOF作为结束符
> aa
> bb
> cc
> EOF

[root@rhel8-mytest ~]# tr a-z A-Z < a.txt > a2.txt 
[root@rhel8-mytest ~]# 
[root@rhel8-mytest ~]# 
[root@rhel8-mytest ~]# cat a2.txt 
AAA

AAA

BBB
BBB

CCC

练习:把 /etc/passwd 数据输入给 wc 命令,统计文件中的内容行数?

wc -l < /etc/passwd

// 注意:对比一下上面的结果,和下面的结果,有什么不同?
wc -l /etc/passwd

可以发现,上面的输入重定向,是没有打印文件名称的,为什么?

因为你输入重定向相当于把文件的内容作为数据流传给了wc命令,此时你的数据流只是数据本身,并没有文件数据。

输出重定向

  • 又分为 标准输出(stdout,文件描述符1,>, >> ),标准错误输出(stderr,文件描述符2,2>, 2>>)
  • 同时,写入到文件又分为覆盖式,或追加式。
  • 默认输出到终端。
  • 把要输出到终端的数据写入到指定文件中。
touch file
ls -l file  // 会输出文件信息

ls -l file2  // 文件不存在,会输出错误信息
ls: cannot access xxxxxx: No such file or directory   // 这种其实就是错误输出了

练习:将 man bash 命令打印到终端的内容,写入到文件 readme.txt 中 ?

man bash > readme.txt

覆盖式写入

echo 123 > readme.txt
echo 456 > readme.txt  // 猜猜readme.txt文件内容是什么?

追加式写入

echo 789 >> readme.txt  // 再猜猜readme.txt文件的内容是什么?

标准输出和标准错误输出区别:

ll a.txt > /tmp/stderr.txt   // a.txt是存在的,因此这行命令执行,是没有输出的,因为输出被重定向到了 stderr.txt 文件中

ll a.txt 2> /tmp/stderr.txt  // 终端输出了正常的文件信息,然后将输出到终端的错误重定向到 stderr.txt 文件中,但是因为此时是没有错误输出的,所以可以猜猜此时 stderr.txt 的内容是什么? 

ll a2.txt 2> /tmp/stderr.txt   // a2.txt文件不存在,此时会报错,此时会把错误信息重定向到 stderr.txt 文件中

如果我们想把正常输出 和 错误输出,追加式的写入同一个文件呢?

ls -l a.txt &>> readme.txt
ls -l a2.txt &>> readme.txt  // 猜猜看,最终的内容是什么?

如果我们想在一个命令的执行中,将正常输入和错误输出分别覆盖式写入不同文件呢?

ll a.txt a3.txt >> log.txt 2>> err.txt

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇