命令列表:
| command > file | 输出重定向到file |
|---|---|
| command < file | 输入重定向到file |
| command >> file | 输出以追加方式重定向到file |
| n > file | 文件描述符为n输出重定向到file |
| n >> file | |
| n >& m | 将输出文件m和n合并 |
| n <& m | 将输入文件m和n合并 |
| <<tag | 将开始标记tag和结束标记tag之间的内容作为输入 |
| command &> file | 将执行command的标准和错误都输出到file |
一般n文件描述符用的多的为 0 ,1 , 2, 分别表示标准输入、标准输出和错误输出
探讨重定向时首先要了解文件描述符, shell中通过文件描述符来标识特定的位置; 了解文件描述符之后再探讨具体的操作, 如重定向错误, 脚本中进行重定向输入/输出; 考虑到需要暂时保存某些数据, 使用临时性文件来创建日志将是一个不错的选择; 当然,一些特殊的操作如将输出同时重定向到显示器和日志文件也会讲述; 最后再会举一些实例.
- 文件描述符
- 重定向操作
- 临时性文件
- 记录消息
- 实例
文件描述符
Linux将一切视作文件, Linux使用文件描述符来标识每个文件对象. 每个进程可以用9个文件描述符, 特殊的文件描述符有以下3个:
| 0 | STDIN | 标准输入 |
|---|---|---|
| 1 | STDOUT | 标准输出 |
| 2 | STDERR | 标准错误 |
三者的用途一看就懂:
cat # 从STDIN中接收数据ls -l > file # 将STDOUT输出到file中ls -l >> file # STDOUT追加到filels -al badfile > test3 # STDERR默认和STDOUT都指向终端
重定向操作
重定向错误:
ls -al badfile 2>file #将错误重定向到file
ls -al file1 badfile &>file #将错误和输出重定向到file
脚本中进行重定向
临时重定向:
echo "This is an error message" > &2 #将输出重定向到STDERR
永久重定向:
exec 1>file # STDOUT 永久重定向到file
echo "message1"
echo "message2" # 输出到file
重定向输入:
exec 0<file
while read line
do
echo $line
done
其余重定向:
可以使用3-8文件描述符进行重定向
exec 3>file
echo "message" >&3
可以使用这些文件描述符来恢复已重定向的文件描述符:
exec 3>&1
exec 1>file
do...
exec 1>&3
exec 6<&0
exec 0<file
do...
exec 0<&6
关闭文件描述符:
exec 3>&-
阻止命令输出可以重定向到/dev/null
临时性文件
在Linux有个/tmp目录, 该目录存放不需要永久保存的文件, 系统在启动会自动删除该目录下的文件; 当然, 用户自己也可以创建临时文件.
创建临时性文件:
mktemp # 默认在/tmp下创建temp.XXXXXX问价
mktemp test.XXXXXX # test.XXXXXX为文件名模板, 在当前目录下创建该文件名, X会被替换保障文件名唯一, 该命令会返回文件名
mktemp -t test.XXXXXX # 在/tmp目录下创建临时文件, 返回全路径名
创建临时目录:
mktemp -d dir.XXXXXX
脚本中使用临时性文件:
tempfile=$(mktemp test1.XXXXXX)
exec 3>$tempfile
记录消息
记录消息实质上就是将输出同时发送到显示器和日志文件, 使用tee命令即可
tee filename
date | tee testfile #接收管道重定向输入
date | tee -a testfile # 数据追加到文件
实例
outfile='member.sql'
IFS=',' #for循环读取的分割符
while read -r lname fname address city state zip || [[ -n $zip ]]
do
cat >> $outfile << EOF
INERT INTO members (lname, fname, address, city, state, zip) values("$lname", "$fname", "$address", "$city", "$state", "$zip");
EOF
done < "$1"
从.csv文件读取信息并保存到sql文件中
输出重定向
举例:
cat file1 > file2 #file1输出到file2
cat file1 >> file2 #file1追加到file2
输入重定向
举例:
wc -l file1 #会打印文件名
wc -l < file1 #不会打印文件名,wc从标准输入获取数据
重定向重点
0,1,2分别代表标准输入、标准输出和错误输出
command 2>>file
command > file 2>&1 #标准输出、错误输出重定向到file
Here Document
将输入重定向到一个交互式脚本和命令
语法:
command << delimiter
document
delimiter
示例:
wc -l << EOF
第一行
第二行
EOF
/dev/null
黑洞文件,丢失所有输入的内容。用于禁止输出
示例:
cat >/dev/null 2>&1
