Linux 重定向

  • stdin 标准输入 0
  • stdout 标准输出 1
  • stderr 标准错误输出 2

一个命令的输入有三种来源:

  • 键盘 << END
  • 文件 < (一些命令直接提供文件名作为输入源,则不需要 < 重定向输入源,例如 cat hello.txt)
  • 其他命令的输出 |

一个命令的输出有三种去向:

  • 终端 (默认)
  • 文件 > >> 2> 2>> 2>&1
  • 其他命令的输入 |

输入重定向:< <<

< 将命令的输入重定向到文件内容,用于将输入源本应是键盘的命令的输入源重定向到文件内容

# 效果与 cat note.txt 相同
cat < note.txt

<< 将命令的输入重定向到键盘输入,用于将输入源本应是文件的命令的输入源重定向到键盘输入,也就是说用 << 结束符 替代文件名

# 以逐行模式进行输入,回车键换行
# 所有输入的行会在输入结束符 END 之后发送给 wc 命令
# << 后面的是结束符号,不一定是 END,可以是任何符号
[yumanli@punk web]$ wc -m << END
> abc
> END
4

标准输出重定向:> >>

将 stdout 的输出结果不显示到终端上,重定向到指定位置

> 覆盖

# 将输出结果重定向到指定文件,如果文件不存在则新建文件,如果文件存在则覆盖原有文件
cut -d , -f 1 note.csv > students.txt
# 既不想输出到屏幕,又不想输出到文件,则重定向到 /dev/null,又称黑洞文件
cut -d , -f 1 note.csv > /dev/null

>> 追加

# 将输出结果重定向到指定文件,如果文件不存在则新建文件,如果文件存在则追加到原有文件的末尾
cut -d , -f 1 note.csv >> students.txt

标准错误输出重定向:2> 2>>

将 stderr 的输出结果不显示到终端上,重定向到指定位置

2> 覆盖

# 如果 not_exist_file.csv 文件存在,则将文件内容重定向到 result.txt 文件中
# 如果 not_exist_file.csv 文件不存在,则将错误信息覆盖到 error.log 文件中
cat not_exist_file.csv > result.txt 2> error.log
# 以下结果与上面相同,2> 与 > 的顺序可以颠倒
cat not_exist_file.csv 2> error.log > result.txt

2>> 追加

# 如果 not_exist_file.csv 文件存在,则将文件内容重定向到 result.txt 文件中
# 如果 not_exist_file.csv 文件不存在,则将错误信息追加到 error.log 文件中
cat not_exist_file.csv > result.txt 2>> error.log

组合输出重定向:2>&1

将 stderr 的输出结果重定向到与 stdout 相同的地方

# 如果 not_exist_file.csv 文件存在,则将文件内容重定向到 result.txt 文件中
# 如果 not_exist_file.csv 文件不存在,则将错误信息覆盖到 result.txt 文件中
cat not_exist_file.csv > result.txt 2>&1
# 如果 not_exist_file.csv 文件存在,则将文件内容追加到 result.txt 文件中
# 如果 not_exist_file.csv 文件不存在,则将错误信息追加到 result.txt 文件中
cat not_exist_file.csv >> result.txt 2>&1

组合输入和输出重定向

[yumanli@punk web]$ sort -n << END > result.txt 2>&1
> 12
> 7
> 10
> 56
> 101
> 95
> 9
> END
[yumanli@punk web]$ cat result.txt
7
9
10
12
56
95
101

管道:|

将多个命令连接起来执行,一个命令的输出作为另一个命令的输入,命令从左向右依次执行

# du 命令的输出作为 sort -nr 命令的输入
# sort -nr 命令的输出作为 head 命令的输入
# head 命令的输出重定向到 result.txt 文件
du | sort -nr | head > result.txt

你可能感兴趣的:(Linux 重定向)