- 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
网友评论