文章插图
0.引言在Linux系统中,我们在Terminal中能够第一时间看到某条命令的即时反馈,
$ ls -Ss/total 15280 tmp0 dev4 home4 opt4 srv0 run0 lib640 lib16 lost+found4 boot4 media4 root4 usr0 libx320 sbin0 proc12 etc4 cdrom4 mnt4 snap4 var0 lib320 bin0 sys
这是系统默认将执行结果输出到屏幕上 。Linux万物皆为文件,屏幕也不例外,系统将其定义为stdout 。与之对应,定义键盘为stdin,同时捕捉到的错误接入stderr文件 。当然,这三个文件绝非虚无缥缈的抽象概念,而是可触可摸的具象存在 。$ ls -l /dev/std*lrwxrwxrwx 1 root root 15 Jul2 15:02 /dev/stderr -> /proc/self/fd/2lrwxrwxrwx 1 root root 15 Jul2 15:02 /dev/stdin -> /proc/self/fd/0lrwxrwxrwx 1 root root 15 Jul2 15:02 /dev/stdout -> /proc/self/fd/1
读到上面的输出结果,真忍不住要为Linux欢呼,一切皆为文件!我们同时也能看到 stdin,stdout,stderr 分别分配到了三个 fd(file-descriptor) 。
$ ls -l /dev/std*/dev/stdin -> /proc/self/fd/0/dev/stdout -> /proc/self/fd/1/dev/stderr -> /proc/self/fd/2
正是如此精妙的设计,我们得以直接使用fd所指示的数字索引具体的文件 。1.最高频的用法每天必用的操作是
mpv 乘风破浪的姐姐.mkv &> /dev/null &
这段命令指示mpv播放器播放#乘风破浪的姐姐#并将结果和错误报告导入进/dev/null文件 。遗憾的是,虽然很便捷,但我们从中看不到任何 file-descriptior 。我们将其完整性写下来:mpv 乘风破浪的姐姐.mkv2>&1 >/dev/null &
此时便一目了然,stderr(2)先合并进stdout(1),之后共同输入到 /dev/null 文件中,最后面的 & 指示程序并列运行 。2.基础用法Redirection的基础用法总结如下:
ps -ef > ps.txt# 重定向输出到 ps.txt文件,同时完全覆盖原内容ps -ef >> ps.txt# 双>表示Append(追加),不覆盖原先的内容ps ef 2> ps-err.txt # 重新定向错误报告到指定文件ps -ef 2>&1 > ps.txt # 合并stdout stderr到指定文件
以上四项为redirection的地基 。3.高阶用法前面两节,Redirection处理的只有stdin(键盘)和stdout(屏幕) 。使我们错觉,重定向的功能仅限于刻板的键盘和屏幕 。linux中,万物皆为文件,因此只要Redirection能处理文件,它就能处理万物 。真相也正是如此,如我们在引言中所探讨,键盘与屏幕只是文件的一种 。
下面我们探讨完全以文件作为输入和输出,先查看province.txt文件:
$ cat provinces.txt beijing shangdong shanghai guangzhou jiangsu
将文件内的‘空格’分割符替换为‘逗号’分隔符$ tr " " "," < provinces.txtbeijing,shangdong,shanghai,guangzhou,jiangsu
还可以更进一步,将修改的结果写进新的文件:$ tr " " "," < provinces.txt > provinces-new.txt$ cat provinces-new.txt beijing,shangdong,shanghai,guangzhou,jiangsu
4.拍案叫绝的 Here DocumentsRedirection最教人拍案叫绝的是应用于 Here Documents$ cat <<EOF | grep 'b' | tee b.txt> foo> bar> baz> EOFbarbaz$ cat b.txtbarbaz
内嵌入代码中要加hypen(-)链接符号if true; thencat <<-HEREaHEREfi
5.收尾总结Linux系统指定stdin,stdout, stderr 为从0到2的3个file descriptor 。最高频的应用是:
mpv 乘风破浪的姐姐.mkv &> /dev/null &
【Linux第8课:Redirection的4类7种方法,实现文件的呼叫转移】作为基础的四个方法:ps -ef > ps.txt# 重定向输出到 ps.txt文件,同时完全覆盖原内容ps -ef >> ps.txt# 双>表示append(追加),不覆盖原先的内容ps ef 2> ps-err.txt # 重新定向错误报告到指定文件ps -ef 2>&1 > ps.txt # 合并stdout stderr到指定文件
高阶用法:$ tr " " "," < provinces.txt > provinces-new.txt
Here Documents$ cat <<EOF | grep 'b' | tee b.txt> foo> bar> baz> EOF
推荐阅读
- 学习 Shell 脚本编程的免费资源 | Linux 中国
- 第二届茶通超人大赛,第二届泰山茶展示会暨第三届泰山茶炒茶技能大赛落幕
- 昌泰普洱的历史,走进中国贡茶第镇
- 如何临时或永久地禁用SELinux
- Win 10系统盘突然满了,不下载第三方软件,应该怎么清理?
- 第泡茶为什么不能喝,柚子皮晒干可以泡茶喝吗
- 普洱茶饼起源之谜,普洱茶饼的第一饼电子身份认证
- linux下制作deb的方法总结
- Linux系统如何查看服务的运行状态
- Linux下文件服务器搭建及原理讲解