9.1 文件描述符
Linux系统将每个对象当做文件处理,并使用文件描述符标识每个文件对象。文件描述符是一个非负整数,从0-8,每个进程最多9个打开文件描述符。其中
0表示标准输入默认键盘,1表示标准输出默认显示器,2表示标准错误输出默认显示器。
9.2 标准输入输出重定向
9.2.1 标准输入重定向
0 < filename
9.2.2 标准输出重定向
1 > filename
9.2.3 标准错误重定向
2 > filename
9.2.4标准输出和标准错误共同重定向到同一个输出文件
& > filename
9.3 在脚本中重定向
9.3.1 临时重定向
echo "content" > &2,将标准输出重定向到标准错误
./test.sh 2>filename,将标准错误重定向到文件
9.3.2 永久重定向
exec 1>filename,通过exec打开一个新的shell,并将标准输出重定向到filename文件
9.3.3 恢复重定向
恢复输出重定向
exec 3>&1
exec 1>filename
......
exec 1>&3
首先,将3重定向到1,然后将1重定向到filename,执行相关操作后,将1重定向到3,恢复重定向。
恢复输入重定向
exec 3<&0
exec 0<filename
......
exec 0<&3
9.4 关闭文件描述符
exec 3>&-,关闭文件描述符3,使之不再在脚本中使用。
9.5 创建读取/写入文件描述符
可以为输入和输出打开同一个文件描述符,可以使用同一个文件描述符从一个文件读取数据,同时向这个文件写入数据。shell维护一个内部指针,指示文件
内部的位置,读取和写入操作都发生在指针上次放置的地方。
9.6 列出开放文件描述符
lsof命令,列出整个Linux系统上所有的开放文件描述符。
/usr/sbin/lsof -a -p $$ -d 0,1,2
使用时要用全路径,-a表示全部,-p表示制定进程,$$表示当前进程,-d表示选择的文件描述符
9.7 禁止命令输出
如果不希望现实任何输出,则可以将输出重定向到/dev/null
9.8 使用临时文件
临时文件目录:/tmp,在Linux启动时自动删除该目录中的任何文件。任何账户都可以读写该目录中的文件。
9.8.1 创建本地临时文件
mktemp testing.xxxxxx,在本地目录创建文件,testing.xxxxxx是文件名模板,mktemp自动替换x为其他字符,并保证文件的唯一性。
9.8.2 在/tmp中创建临时文件
mktemp -t testing.xxxxxx,-t选项强制在/tmp中创建临时文件,该命令放回创建文件的全路径名。
9.8.3 创建临时目录
mktemp -d dir.xxxxxx,创建临时目录。
9.9 记录消息
tee filename,将输入或输出同时定向到两个目的地,一个是标准,一个是指定的。