Linux 文件描述符与重定向

689 阅读1分钟

文件描述符与重定向

文件描述符

文件描述符:决定从哪里读输入,向哪里写输出错误

$ ls -l /dev/std* 可见:

  • 0 :stdin
  • 1 :stdout
  • 2 :stderr

输出重定向

  • cmd [1|2]> file :覆盖源文件,无则建
  • cmd [1|2]>> file :追加,无则建
  1. 不会自动递归补全路径
  2. [1|2],文件描述符(stdin|stderr),缺省为 1,与 > 之间无空格

两个常见的用法:

  • $ ls > outfile 2>&1 将 stdout、stderr 一同重定向到 outfile

1 省略,2 重定向到 1 指向的文件

  • cmd &> file :把0,1,2都重定向至file。(& 代表 0&1&2

&>可能会在文文件中产生一些无用的信息,一般不这么用

输入重定向(<):

$ tr 'A-Z' 'a-z' < w.txt > u.txt        # 将w中的大写->小写,放入u中
                # 0 -> w.txt

管道操作

|:管道

$ cmd1 | cmd2 :将cmd1的输出 重定向 为cmd2的输入。

ink-image

使用管道符号将两个命令组合起来就相当于使用水管接头将水龙头与高压水枪接在一起,还可以先将水龙头来的水送到热水炉加温后再送到高压水枪,使用水管接头将3个现有的正常工作器系统组合成一个新的功能更强的系统。

IMG_1047

$ who | wc -l
        显示工作用户数
$ cat /etc/passwd | wc -l
        显示注册用户数
$ ls -lF /bin | more
        用more显示ls的大量信息(可翻页)

| xargs:将管道导入的数据转换成后面命令的输入参数

$ cat bd.txt
a.txt
b.txt
c.txt
$ cat bd.txt | xargs rm -f        # 删除a.txt,b.txt,c.txt

|tee:命令分流输出:(T型管道)

将前一个命令的输出结果直接输入给后一个命令,同时还要将前面命令的结果存入一个文件。

tee命令的功能就是将标准输入复制给每一个指定的文件和标准输出。

ink-image

T型管道的概念来自生活中的自来水管的T型接头。在一个公厕的水管阀门上接了一个T型接头将“免费”的水进行了分流,同时接入了洗车的高压水枪和抽水马桶。

IMG_1048

e.g.

$ cut -f1 -d: /etc/passwd | tee passwd.cut | sort -r | tee passwd.sort | more

这个命令需要好好解释一下:

/etc/passwd 中剪出注册用户名列表,通过在 sort -r 命令之前和之后加入管道符和 tee 命令,将排序之前和之后的数据,分别存入 passwd.cutpasswd.sort 文件。

  • tee passwd.cut 命令将由管道送过来的数据存入 passwd.cut 文件,同时还通过管道将这些数据送给下一个命令进行处理:sort -r 命令进行反向排序。

  • tee passwd.sort 命令将由管道送过来的数据(反向排序后的用户名)存入 passwd.sort 文件,同时还通过管道将这些数据送给下一个命令进行处理:more 命令进行分页显示。