美文网首页
标准输入输出(I/O)和管道

标准输入输出(I/O)和管道

作者: 一秃脚丫子 | 来源:发表于2020-04-20 10:14 被阅读0次

一、标准的输入输出:

(1)linux给程序提供三种I/O设备:
1、标准输入 STDIN:-0 默认接受来自终端接口的输入;
2、标准输出 STDOUT: -1 默认输出到终端接口;
3、 标准错误 STDERR: -2 默认输出到终端接口

二、输入、输出重定向 redirect:

...
(1)I/O重定向:将默认的输入输出或错误的终端接口进行更换,重新指定给新的目标;
(2)stdin、stdout、stderr重新定向格式 命令 —— 操作符号——文件名 ;
(3) 操作符号 > 可以把输出的面板内容输出到指定的文件夹中;
当需要创建空文件或者是用空文件覆盖原有文件的时候,可以使用 /dev/null > /data/f3.txt;
可用于清除不能停止却要进行清除内存的应用程序;eg: /dev/null > /data/bigfile;
(4) 操作符号 >> 可以对原始文件不破坏,在原始文件后面继续追加新文件;
eg: /data/1.txt >> /data/f3.txt;
(5) set -C禁止将内容覆盖原始文件,但是可以追加;
set +C 允许覆盖;
...

三、分离存放

举例:正确和错误的文件分离存放
...
[13:56:26 root@centos ~]#ls /data/ /xxxx > stdout.log 2>stdree.log
[18:43:33 root@centos ~]#cat stdout.log
/data/:
f31.txt.link
f3.txt
[18:43:45 root@centos ~]#cat stdree.log
ls: cannot access '/xxxx': No such file or directory
[18:44:02 root@centos ~]#
...

四、&符号

举例:,存放所有错的对的
...
[18:44:02 root@centos ~]#ls /data/ /xxxx/ &>all.log
[18:59:07 root@centos ~]#cat all.log
ls: cannot access '/xxxx/': No such file or directory
/data/:
f31.txt.link
f3.txt
多个命令重定向的话,可使用括号括起来;
eg: (ls,hostname)>>stdout.log
...

五、标准输入 <

举例: cat标准输入重定向
...
[16:44:41 root@centos ~]#nano mail.txt
[16:45:06 root@centos ~]#cat < mail.txt //输入cat,执行后显示到桌面;
hello
how are you
[16:45:23 root@centos ~]#cat <mail.txt >mail2.txt //输入到cat,并输出到
[16:45:43 root@centos ~]#cat mail2.txt
hello
how are you
...

六、多行输入重定向##

举例 : << 关键字
...
[09:48:51 root@centos ~]#cat<mail2.txt<<EOF
·> AAA
·> BBB
·> CCC
·> DDD
·> EEE
·> EOF
AAA
BBB
CCC
DDD
EEE
[09:49:46 root@centos ~]#
...

举例: tr 转换和删除字符;
...
[10:32:08 root@centos ~]#tr 1234 abc // 4对应最后一个字符;
1234
abcc
...

-t 将第一个字符集中的第一个字符,转换为第二个字符中对应的第一个字符;
...
[10:34:21 root@centos ~]#tr -t 1234 abc
1234
abc4
...
-d 删除所有属于第一个字符集的字符;
...
[16:39:56 root@centos ~]#tr -d abc
dsafbfcdwq
dsffdwq//删除第一个字符集的字符;
...

举例-dc: //删除第一个字符集中包含字符外的所有字符;
...
[16:42:28 root@centos ~]#tr -dc abc
dsdsadabc
回车之后不会执行,除了abc都会被删除
aabc[16:42:47 root@centos ~]#
...

举例:tr -s 去重
...
[14:34:47 root@centos ~]#df >mail.txt
[14:35:04 root@centos ~]#tr -s ' '<mail.txt \ 去除重复空格;
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 910180 0 910180 0% /dev
tmpfs 924732 0 924732 0% /dev/shm
tmpfs 924732 9564 915168 2% /run
tmpfs 924732 0 924732 0% /sys/fs/cgroup
/dev/sda2 104806400 5507780 99298620 6% /
/dev/sda1 999320 131508 799000 15% /boot
/dev/sda3 52403200 398576 52004624 1% /data
tmpfs 184944 16 184928 1% /run/user/42
tmpfs 184944 4 184940 1% /run/user/0

tr -s ' ' : <mail.txt
...

举例:安装拖拽工具,win文件拖拽linux
...
[14:51:25 root@centos ~]#dnf install lrzsz

利用管道进行重定向 |

...
举例: 利用管道符 | 来进行重定向
[15:48:39 root@centos ~]#df | tr -s ' ' : dr直接输出, 进行输入到tr
Filesystem:1K-blocks:Used:Available:Use%:Mounted:on
devtmpfs:910180:0:910180:0%:/dev
tmpfs:924732:0:924732:0%:/dev/shm
tmpfs:924732:9552:915180:2%:/run
tmpfs:924732:0:924732:0%:/sys/fs/cgroup
/dev/sda2:104806400:5510916:99295484:6%:/
/dev/sda1:999320:131508:799000:15%:/boot
/dev/sda3:52403200:398576:52004624:1%:/data
tmpfs:184944:16:184928:1%:/run/user/42
tmpfs:184944:4:184940:1%:/run/user/0
[15:48:48 root@centos ~]#
举例 使用管道符不经过文件进行重定向,并转换大小写
[16:01:04 root@centos ~]#ls /data /XXXX 2>&1 | tr 'a-z' 'A-Z'
LS: CANNOT ACCESS '/XXXX': NO SUCH FILE OR DIRECTORY
/DATA:
1.TXT

[16:05:16 root@centos ~]#ls /data /XXXX |& tr 'a-z' 'A-Z'
LS: CANNOT ACCESS '/XXXX': NO SUCH FILE OR DIRECTORY
/DATA:
1.TXT
[16:33:04 root@centos ~]#

相关文章

网友评论

      本文标题:标准输入输出(I/O)和管道

      本文链接:https://www.haomeiwen.com/subject/zdntvhtx.html