linux查询文件_Linux第8课:Redirection的4类7种方法实现文件的呼叫转移

f69870e5fae2aea4c5fa020b63b7b74e.png

0.引言

在Linux系统中,我们在Terminal中能够第一时间看到某条命令的即时反馈,

$ ls -Ss  /total 15280 tmp          0 dev     4 home    4 opt    4 srv   0 run      0 lib64   0 lib16 lost+found   4 boot    4 media   4 root   4 usr   0 libx32   0 sbin    0 proc12 etc          4 cdrom   4 mnt     4 snap   4 var   0 lib32    0 bin     0 sys

这是系统默认将执行结果输出到屏幕上。Linux万物皆为文件,屏幕也不例外,系统将其定义为stdout。与之对应,定义键盘为stdin,同时捕捉到的错误接入stderr文件。当然,这三个文件绝非虚无缥缈的抽象概念,而是可触可摸的具象存在。

$ ls -l /dev/std*lrwxrwxrwx 1 root root 15 Jul  2 15:02 /dev/stderr -> /proc/self/fd/2lrwxrwxrwx 1 root root 15 Jul  2 15:02 /dev/stdin -> /proc/self/fd/0lrwxrwxrwx 1 root root 15 Jul  2 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 乘风破浪的姐姐.mkv  2>&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 Documents

Redirection最教人拍案叫绝的是应用于 Here Documents

$ cat < foo> bar> baz> EOFbarbaz$ cat b.txtbarbaz

内嵌入代码中要加hypen(-)链接符号

if true; then    cat <

5.收尾总结

Linux系统指定stdin,stdout, stderr 为从0到2的3个file descriptor。

最高频的应用是:

mpv 乘风破浪的姐姐.mkv &> /dev/null &

作为基础的四个方法:

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 < foo> bar> baz> EOF

6.附录

Linux起手第一课:一切皆是文件,万物都为接口

Linux第二课:万物皆可循可查,透彻解析Linux的find命令

Linux第三课:计算机是如何被唤醒的?Linux开机引导和启动过程

Linux第四课:linux文件目录树结构,史上结满最多知识的智慧树

Linux第5课:ls list命令的5类查询,在平凡岗位上的出色工作

Linux第六课:man的7个命令选项,查询手册的9章4类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值