标准输入和输出
- 程序:指令+ 数据
- 读入数据:Input
- 输出数据:Output
- 打开的文件都有一个fd: file descriptor (文件描述符)
Linux 给程序提供三种I/O
标准输入(STDIN )-0 默认接受来自键盘的输入
标准输出(STDOUT )-1 默认输出到终端窗口
[root@centos6 ~]# ls
anaconda-ks.cfg Desktop Documents Downloads install.log install.log.syslog kk ll Music Pictures Public Templates Videos
- 标准错误(STDERR )-2 默认输出到终端窗口
[root@centos6 Packages]# lk
-bash: lk: command not found
- I/O重定向:改变默认位置
[root@centos6 ~]# ls > /dev/pts/1 重定向另一个窗口
[root@centos6 ~]# tty
/dev/pts/1
[root@centos6 ~]# anaconda-ks.cfg Desktop Documents Downloads ```
install.log install.log.syslog kk ll Music Pictures Public Templates Videos 输出值tty的窗口
与>> 的区别
- > 1.txt 表示如果1.txt存在就情况里面所有数据如果文件不存在就创建1.txt文件
- >>2.txt 表示如果文件2.txt 文件存在追加一个空格,如果不存在就创建
[root@centos6 ~]# ls > 1.txt ">" 标准重定向输出
[root@centos6 ~]# cat 1.txt
1.txt
anaconda-ks.cfg
Desktop
Documents
Downloads
install.log
install.log.syslog
kk
ll
Music
Pictures
Public
Templates
Videos
[root@centos6 ~]# hostname > 1.txt ">" 它会覆盖之前文件中的内容
[root@centos6 ~]# cat 1.txt
centos6.chenxi.com
[root@centos6 ~]# ls >> 1.txt >>与1>> 结果是一致的都是标准输出重定向追加的意思,不覆盖原文件的内容只是在后面追加
[root@centos6 ~]# cat 1.txt
centos6.chenxi.com
1.txt
anaconda-ks.cfg
Desktop
Documents
Downloads
install.log
install.log.syslog
kk
ll
Music
Pictures
Public
Templates
Videos
- [root@centos6 ~]#
- 标准错误重定向
[root@centos6 ~]# ls /d 2> h.txt 2表示标准错误 2> 标准错误重定向 2>> 标准错误重定向追加
[root@centos6 ~]#
[root@centos6 ~]# cat h.txt
ls: cannot access /d: No such file or directory
- 标准混合重定向
[root@centos6 ~]# ls /etc/ /tr > 3.txt 2>&1 与 [root@centos6 ~]# ls /etc/ /tr &> 4.txt 这个命令也可追加 &>> 和[root@centos6 ~]# ls /etc/ /tr >& 4.txt 功能都是一样的
[root@centos6 ~]# cat 3.txt
ls: cannot access /tr: No such file or directory
/etc/:
abrt
acpi
adjtime
akonadi
aliases
aliases.db
- set -C: 禁止将内容覆盖 已有文件, 但可追加;
- \>| file 强制覆盖 用法 >| 文件名
- set +C: 允许覆盖
- 标准输出与标准错误分别重定向至不同文件
[root@centos6 ~]# ls /etc/ /tr > 4.txt 2> 5.txt
- 同时多条命令执行结果重定向至一个文件
[root@centos6 ~]# (ls;pwd)>7.txt # 应加()把多条命令括起来,它会先执行()里的命令,如果不括起来的话它会先执行pwd>7.txt文件里
- 把标准输出改变成标准错误
[root@centos6 ~]# ( ls 1>&2 ) > 8.txt 命令表示ls 1>&2 命令 如果结果是标准输出 它会输出重定向至8.txt 如果标准错误就会在屏幕上打印 8.txt 系统也会创建出来 应为因为>号前面是空 ;空> 也会创建文件
1.txt 3.txt 4.txt 5.txt 7.txt 8.txt anaconda-ks.cfg Desktop Documents Downloads h.txt install.log install.log.syslog kk ll Music Pictures Public Templates Videos
- [root@centos6 ~]# ( ls 1>&2 ) 2> 8.txt 屏幕不会有输出了因为标准错误已被重定向至 8.txt 文件中
- cat命令的标准输出重定向
- [root@centos6 ~]# cat cat #命令需要标准输入也需要标准输出
rrr
rrr
fyl,
fyl,
\hftf
\hftf\
- [root@centos6 ~] # cat >c.txt 标准输出重定向单行重定向
yyy
ttt
ttt
^C
[root@centos6 ~]# cat c.txt
yyy
ttt
ttt
- [root@centos6 ~]# cat >t <<ed 多行重定向到t文件 << 指定结束符
dd
ff
ff
eed
cd'
ff
ed 结束符前面不能加空格
- [root@centos6 ~]# cat t
dd
ff
ff
eed
cd'
ff