Linux文件描述符
可以理解为linux跟踪打开文件,而分配的一个数字,这个数字类似C语言操作文件时候的句柄,通过句柄就可以实现文件的读写操作。用户可以自定义文件描述符范围:3-num (ulimit -n)
Linux启动后,会默认打开3个文件描述符,分别是:
- 标准输入standard input 0
- 正确输出standard output 1
- 错误输出error output 2
以后打开文件,新增文件绑定描述符可以一次增加
一条shell命令执行,都会继承父进程的文件描述符。因此,所有运行的shell命令,都会有默认3个文件描述符。
对于任何一条Linux命令执行的过程: file(key board) --standard input --> Command --standard output--> file/device
--standard error--> file/device
Linux shell下常用输入输出操作符
- 标准输入(stdin): 代码为0, 使用< 或 <<(双数为追加操作符 ; /dev/stdin -> /proc/self/fd/0 0代表/dev/stdin
- 标准出入(stdout): 代码为1, 使用>或>> ; /dev/stdout -> /proc/self/fd/1
- 标准错误输出(stderr): 代码为2,使用2>或2>>; /dev/stderr -> /proc/self/fd/2
输出重定向:
command-line1 [1-n] > file或文件操作符或设备 -> 将一条命令执行结果(stdout,stderrr本来要打印到屏幕上面的)重定向到其它输出设备
ls test.sh test1.sh ----ls:test1.sh: 没有这个文件和目录
ls test.sh test1.sh 1>suc.txt 2>err.txt
ls test.sh test1.sh 2>&- test.sh ---&[n]代表已经存在的文件描述符,&1代表输出,&2代表错误输出,&-代表关闭与它绑定的描述符
ls test.sh test1.sh 2>/dev/null test.sh ---- /dev/null 即为空,黑洞:吞噬一切信息
ls test.sh test1.sh 2>/dev/null 1>/dev/null
ls test.sh test1.sh /dev/null 2>&1 ---将错误输出2绑定给正确输出1,然后将正确输出发送给 /dev/null设备 *******
ls test.sh test1.sh &>/dev/null ----&代表所有输出
# shell遇到'>'操作符,会先判断右边文件是否存在,如果存在先删除,并创建新文件
# ">>"操作符,判断右边文件,如果不存在则创建。如存在则以添加方式打开文件
# 一条命令在执行前,会先检查设备输出是否正确,如果输出设备错误,将不会进行命令执行
shell: ret=$?
if [ $ret -eq 0 ] ; then
...
-> $?是shell变量,表示最后一次执行命令的退出状态,0为成功,非0为失败
'' : 单引号中嵌套单引号可使用变量 'echo '$var' is ...'