Chapter 16 I/O重定向
进程使用文件描述符来管理打开的文件
file descriptors (FD, 文件描述符 或 Process I/O channels)
例如:查看当前bash的fd
[root@Cent-KVM ~]# ls -l /proc/$$/fd
total 0
lrwx------. 1 root root 64 0 -> /dev/pts/0
lrwx------. 1 root root 64 1 -> /dev/pts/0
lrwx------. 1 root root 64 2 -> /dev/pts/0
lrwx------. 1 root root 64 255 -> /dev/pts/0
Number | Channel name | Default connection | Usage |
---|---|---|---|
0 | stdin | Kbd | read only |
1 | stdout | Terminal | write only |
2 | stderr | Terminal | write only |
filename | read and/or write |
进程能打开的文件数是有限的, ulimit -a
16.1 输出重定向
>
覆盖 >>
追加
重定向stdout
date 1> date.txt
(1可省略)分别重定向
ls /home /abcdefg >list.txt 2> error.txt
混合重定向
ls /home /abcdefg &>list1.txt
ls /home /abcdefg >list2.txt 2>&1
(不常用)丢弃错误输出
ls /home /abcdefg >list.txt 2>/dev/null
丢弃所有输出
ls /home /abcdefg &>/dev/null
如果/dev/null
被删除,可以这样创建:
mknod -m 666 /dev/null c 1 3
后两位是主设备号(MAJOR)和从设备号(MINOR)
主设备号表示一类设备,可以认为kernel使用相同的驱动
从设备号只是在同类设备中的一个编号
16.2 输入重定向
yum -y install mailx
mail -s "hostname" alice </etc/hostname
以文件中的内容为正文发送邮件
导入数据库
mysql -uroot -p123 < bbs.sql
以文件中的命令创建定时任务
at now + 2 min <at.txt
dd
dd </dev/zero >/file1 bs=1M count=10
相当于
dd if=/dev/zero of=/file1 bs=1M count=10
写入文件
[root@Cent-KVM ~]# cat >file1.txt 111 222 333 444
按 Ctrl+D结束输入
或者:
[root@Cent-KVM ~]# cat >file2.txt <<-EOF > 1223 > 3422 > 1234 > EOF