文件描述符(fd):文件描述符是一个非负整数,在打开现存文件或新建文件时,内核会返回一个文件描述符,读写文件也需要使用文件描述符来访问文件。
内核为每个进程维护该进程打开的文件记录表。文件描述符只适应Unix、linux操作系统。
6.1 标准输入、输出和错误
文件描述符
描述
映射关系
0 标准输入,键盘 /dev/stdin -> /proc/self/fd/0 1 标准输出,屏幕 /dev/stdout -> /proc/self/fd/1 2 标准错误,屏幕 /dev/stderr -> /proc/self/fd/26.2 重定向符号
符号
描述
> 符号左边输出作为右边输入 >> 符号左边输出追加右边输入 < 符号右边输出作为左边输入 << 符号右边输出追加左边输入 | 管道符,左边输出作为右边输入 & 与重定向符号一起使用6.3 输出重定向
使用方法
描述
示例
cmd1 | cmd2 cmd1标准输出作为cmd2的标准输入 ls列出当前所有目录或文件,将结果作为grep的输入:ls |grep a cmd > file 将cmd的标准输出重定向到file 打印结果写到文件:echo "test" > a.txt cmd >> file 将cmd的标准输出重定向追加到file 打印结果追加到文件:echo "test" >> a.txt cmd 2> file 将cmd的标准错误重定向到file当没有安装bc计算器时,错误输出结果写到文件:
echo "1 + 1" |bc 2> error.log
cmd 2>> file 将cmd的标准错误重定向追加到file当没有安装bc计算器时,错误输出结果追加文件:
echo "1 + 1" |bc 2> error.log
cmd &> file 将cmd标准错误和标准输出重定向到file当不确定执行对错时都写到文件:
echo "1 + 1" |bc &> error.log
cmd &>> file 将cmd标准错误和标准输出重定向追加file当不确定执行对错时都写到文件:
echo "1 + 1" |bc &>> error.log
cmd > file 2>&1 将标准错误重定向到标准输出,再重定向到file 与&>一样 cmd >> file 2>&1 将标准错误重定向到标准输出,再重定向追加到file 与&>>一样6.4 输入重定向
使用方法
描述
示例
cmd < file cmd以file作为标准输入a.txt内容作为grep输入:
# grep "test" --color < a.txt
cmd < file1 > file2 cmd命令以file1文件作为标准输入,并将标准输出重定向到file2把a.txt标准输出写到b.txt:
# cat < a.txt > b.txt
cmd << delimiter 读取标准输入,直到遇到delimiter终止,数字、字符串任意命名delimiter。# cat << EOF
> 123
> abc
> EOF
123
abc
将eof标准输入作为cat标准输出再写到a.txt:
# cat > a.txt << eof
> 123
> abc
> eof
6.5 绑定重定向
使用方法
描述
示例
cmd >&n 把标准输出重定向到文件描述符n将ls标准输出重定向标准错误,标准错误重定向到file:
ls >&1 1>file
cmd <&n 标准输入重定向到文件描述符n cmd <&- 关闭标准输入 cmd >&- 关闭标准输出 cmd n>&- 将文件描述符n标准输入关闭 cmd n<&- 将文件描述符n标准输出关闭6.6/dev/null
/dev/null是一个空设备,向它写入的数组都会丢弃,但返回状态是成功的。与其对应的还有一个/dev/zero设备,提供无限的0数据流。
在写Shell脚本时我们经常会用到/dev/null设备,将stdout、stderr输出给它,也就是我们不想要这些输出的数据。
通过重定向到/dev/null忽略输出,比如我们没有安装bc计算器,正常会抛出没有发现命令:
# echo "1 + 1" |bc >/dev/null 2>&1
这就让标准和错误输出到了空设备。
忽略标准输出: # echo "test" >/dev/null 忽略错误输出: # echo "1 + 1" |bc 2>/dev/null 博客地址:http://lizhenliang.blog.51cto.com QQ群:Shell/python运维开发群 3237796366.7 read
read命令从标准输入读取,并把输入的内容复制给变量。
命令格式: read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...] -e 在一个交互shel