输入输出
什么是重定向?
- 将原本要输出到屏幕上的内容,重新输入到其他设备中
为什么要学重定向?
# 1.输出的内容,比较重要的时候,我们想把它保存到文件中
# 2.在后台执行的程序,我不想让它输出的内容,干扰到屏幕
# 3.将定时任务的结果保存下来(备份,是否成功)
# 4.一些执行的命令,知道它有可能会有错误输出,但是不想看错误输出
# 5.执行一个命令,可能报错和正确的输出并存,类似错误日志与标准正确日志需要分别输出至不同的文件。
命令返回值(扩展)
如何判断一个命令是否执行成功?????
$? 命令的返回值
返回值是0,则代表上一条命令执行成功
返回值非0,则代表上一条命令执行不成功
#举例:
# 执行成功:
0 ✓ 21:43:52 root@leidage,10.0.0.100:<sub> # ll /opt
total 4
-rwxrwxrwx. 1 root root 3901 Mar 25 02:43 dzp
drwxrwxrwx. 2 root root 6 Mar 22 00:45 mi
0 ✓ 21:44:00 root@leidage,10.0.0.100:</sub> # echo $?
0
#执行失败:
0 ✓ 21:44:17 root@leidage,10.0.0.100:<sub> # ll adasvzx
ls: cannot access adasvzx: No such file or directory
2 ✗ 21:44:25 root@leidage,10.0.0.100:</sub> # echo $?
2
输入输出
文件描述符:
名称 | 文件描述符 | 作用 |
stdin | 0 | 标准输入 |
stdout | 1 | 标准输出 |
stderr | 2 | 错误输出 |
文件名 | 3+ |
#输入输出过程检测:
#持续追踪查看文件内容:
0 ✓ 22:14:51 root@leidage,10.0.0.100:<sub> # tail -f /etc/passwd
#查看运行的进程:
0 ✓ 22:16:37 root@leidage,10.0.0.100:</sub> # ps
PID TTY TIME CMD
1159 pts/0 00:00:00 bash
1556 pts/0 00:00:00 tail
1598 pts/0 00:00:00 ps
#查看1556进程下的文件描述符:
0 ✓ 22:15:49 root@leidage,10.0.0.100:<sub> # ll /proc/1556/fd
total 0
lrwx------ 1 root root 64 Apr 13 22:16 0 -> /dev/pts/0
lrwx------ 1 root root 64 Apr 13 22:16 1 -> /dev/pts/0
lrwx------ 1 root root 64 Apr 13 22:15 2 -> /dev/pts/0
lr-x------ 1 root root 64 Apr 13 22:16 3 -> /etc/passwd
lr-x------ 1 root root 64 Apr 13 22:16 4 -> anon_inode:inotify
#Linux查看标准输入输出设备:
0 ✓ 22:18:52 root@leidage,10.0.0.100:</sub> # ls -l /dev/std*
lrwxrwxrwx 1 root root 15 Apr 13 16:28 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 Apr 13 16:28 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 Apr 13 16:28 /dev/stdout -> /proc/self/fd/1
#举例:普通用户只将标准输出和错误输出到一个文件中
[lilei@leidage ~]$ find / -type d -name '*xxx*' 1>/tmp/a.log 2>/tmp/b.log
输入输出符号
名称 | 符号 | 作用 |
标准输入重定向 | < 或者 0< | 将符号右边的内容交给符号左边的命令 |
标准输入重定向 | << 或者 0<< | |
标准输出覆盖重定向 | > 或者 1> | 将原本要输出在屏幕上的正确内容,覆盖到重定向的文件中 |
标准输出追加重定向 | >> 或者1>> | 将原本要输出在屏幕上的正确内容,追加到重定向的文件中 |
错误输出覆盖重定向 | 2> | 将原本要输出在屏幕上的错误内容,覆盖到重定向的文件中 |
错误输出追加重定向 | 2>> | 将原本要输出在屏幕上的错误内容,追加到重定向的文件中 |
输出重定向
输出重定向:
- 改变标准输入、标准输出的方向的就是重定向
###举例:
#.标准输出(覆盖)
0 ✓ 22:38:29 root@leidage,10.0.0.100:<sub> # cat 1.txt
qwe
asd
zxc
123
0 ✓ 22:38:35 root@leidage,10.0.0.100:</sub> # echo 8888 > 1.txt
0 ✓ 22:39:07 root@leidage,10.0.0.100:~ # cat 1.txt
8888
# 标准输出(追加)
0 ✓ 22:39:07 root@leidage,10.0.0.100:<sub> # cat 1.txt
8888
0 ✓ 22:39:12 root@leidage,10.0.0.100:</sub> # echo 6666 >> 1.txt
0 ✓ 22:45:58 root@leidage,10.0.0.100:~ # cat 1.txt
8888
6666
# 错误输出重定向
[lo123@leidage <sub>]$ find / -type d -name '*xxx*' 2>b.txt
将错误输出重定向到文件中,标准输出显示在屏幕上
[lo123@leidage </sub>]$ find / -type d -name '*xxx*' > a.txt 2>b.txt
将标准输出,错误输出重定向不同文件,标准输出到a.txt,错误输出到b.txt
# 正确和错误都输出到同一个设备中
[lo123@leidage <sub>]$ find / -type d -name '*xxx*' &> a.txt
[lo123@leidage </sub>]$ find / -type d -name '*xxx*' > a.txt 2>&1
输入重定向
输入重定向
- 即原本从键盘等设备上获得的输入信息,重定向由命令的输出作为输入
###举列
#没有改变输入的方向,默认键盘,此时等待输入
0 ✓ 23:03:05 root@leidage,10.0.0.100:<sub> # cat
1
1
2
2
3
3
#将输入信息重定向由命令输出
0 ✓ 23:03:49 root@leidage,10.0.0.100:</sub> # cat < 1.txt
8888
6666
#在黑洞取信息到一个文件中,20M大小
dd </dev/zero >/file2.txt bs=1M count=20
# 利用重定向建立多行的文件
0 ✓ 23:20:44 root@leidage,10.0.0.100:<sub> # cat > q.txt
123
456
0 ✓ 23:23:22 root@leidage,10.0.0.100:</sub> # cat >> q.txt
aaa
bbb
0 ✓ 23:24:34 root@leidage,10.0.0.100:~ # cat q.txt
123
456
aaa
bbb
知识点
#.文件描述符
#.标准输入
#.标准输出
#.重定向