第11章 重定向和文件的查找
第12章 磁盘介绍及管理
第13章 Linux文件系统结构
第14章 RAID的原理与搭建
第15章 LVM管理和SSM工具使用
Linux下一切皆文件,包括所有的程序和一些设备的访问入口都展示为文件。
Linux中的文件分为普通文件、目录文件、链接文件和设备文件四种类型。
文件描述符是内核为了高效管理已被打开的文件所创建的索引,用于指向被打开的文件,所有执行I/O操作的系统调用都通过文件描述符;文件描述符是一个简单的非负整数,用以标明每一个被进程所打开的文件,程序刚刚启动的时候,第一个打开的设备文件是0,第二个是1,依此类推。也可以理解为是文件的身份ID。
用户通过操作系统处理信息的过程中,使用的交互设备文件(键盘,鼠标,显示器)如图所示。
语法:ll /proc/PID/fd
, 该文件下专门存文件描述符。
[root@utahstu2 utah]# ps -ef | grep vim
root 34007 2994 0 11月01 pts/0 00:00:00 vim test.txt
root 78577 2994 0 19:11 pts/0 00:00:00 grep --color=auto vim
[root@utahstu2 utah]# ll /proc/34007/fd #查看vim进程打开的文件
总用量 0
lrwx------. 1 root root 64 11月 3 19:12 0 -> /dev/pts/0
lrwx------. 1 root root 64 11月 3 19:12 1 -> /dev/pts/0
lrwx------. 1 root root 64 11月 3 19:11 2 -> /dev/pts/0
lrwx------. 1 root root 64 11月 3 19:12 4 -> /home/utah/utah/.test.txt.swp
这些0、1、2、4就是文件的描述符。一个进程启动时,都会打开3个文件:标准输入、标准输出和标准错误输出。这3个文件分别对应的文件描述符为0、1和2,也就是宏替换STDIN_FILENO
、STDOUT_FILENO
和STDERR_FILENO
。
⚠️注意:对文件描述符的操作就是对文件本身的操作,可以直接通过操作文件描述符来修改文件。
例11.2:查看和临时设置一个进程最多可以打开几个文件,也就是说,一个进程可以打开的文件描述符的个数限制。
[utah@utahstu2 ~]$ ulimit -n #查看一个进程最多可以同时打开的文件数1024
[utah@utahstu2 ~]$ ulimit -n 2048 #修改一个进程最多可以同时打开的文件数2048.
[utah@utahstu2 ~]$ ulimit -n
2048
定义:输入重定向主要更改程序的数据输入方式。
11.2.1 输入重定向更改程序的数据输入方式。
定义:输出重定向是指将命令的正常输出结果保存到指定的文件中,而不是直接显示在显示器的屏幕上。输出重定向使用“>”“>>”操作符号。
语法:
> 文件名
,表示将标准输出的内容,写到后面的文件中,如果此文件名已经存在,将会覆盖原文件中的内容,若此文件不存在,则会以此文件名写新建文件。
>> 文件名
,表示将标准输出的内容,以追加形式写到后面的文件中。若此文件不存在,则会以此文件名新建该文件。
Eg. 查看当前主机的CPU的类型并保存到cpu.txt文件中(而不是直接显示到屏幕上)。
[utah@utahstu2 utah]$ cat /proc/cpuinfo > cpuinfo.txt
Eg. 清空一个文件
[utah@utahstu2 utah]$ > test.txt
EOF本意是End Of File,表明到了文件末尾。“EOF”通常与“<<”结合使用,“<
例11.8:以<
[utah@utahstu2 utah]$ cat > test.txt <<EOF
> qwer
> asdf
> EOF
[utah@utahstu2 utah]$ cat test.txt
qwer
asdf
例11.9:以ccc作为分界符(自定义一个结束符)。
[utah@utahstu2 utah]$ cat >test.txt <<ccc
> qwe
> sdf
> ccc
[utah@utahstu2 utah]$ cat test.txt
qwe
sdf
例11.10:在脚本中可以通过输入重定向来打印消息菜单。在使用的时候需要在“<<
”右边跟一对终止符。终止符是可以自定义的。
定义:将命令执行过程中出现的错误信息(选项或参数错误)保存到指定的文件中,而不是直接显示到显示器。
重定向操作符:
输入重定向:0<或简写为<。
输出重定向:1>或简写为>。
错误重定向:2>。
其中的2指的是标准错误输出的文件描述符(在使用标准输入和输出时省略了1、0编号)。
在实际应用中,错误重定向可以用来收集执行的错误信息,为排错提供依据。对于Shell脚本还可以将无关紧要的错误信息重定向到空文件/dev/null
中,以保持脚本输出的简洁。
例11.11:将错误显示的内容和正确显示的内容分开。
[utah@utahstu2 utah]$ ls /etc/passwd xxx #没有重定向时的正常显示
ls: 无法访问xxx: 没有那个文件或目录
/etc/passwd
[utah@