# 输入设备 input device 鼠标/键盘# 输出设备 output device 显示器$# 计算机信息输入(只要输入,计算机都认为是正确的) stdin - standard input device
计算机信息输出
1. 正确输出 stdout - standard output device 标准正确输出设备
2. 错误输出 stderr - standard error device 标准错误输出设备
# [zy@localhost ~]$ ls# 输入正确1234.txt Documents Music Public zt.txt zy.cpp zy.mp3 # 输出正确
Desktop Downloads Pictures Videos zy.c zy.html zy.txt # 输出正确[zy@localhost ~]$
[zy@localhost ~]$ LS # 计算机认为输入正确
bash: LS: command not found... # 输出错误
Similar command is: 'ls'# 输出错误[zy@localhost ~]$
在linux中,一切皆文件。 (输入设备 | 输出设备)[zy@localhost ~]$ ls /dev/
0 stdin - standard input device
1 stdout - standard output device
2 stderr - standard error device
如果信息输出到了stdout/stderr设备,信息会从屏幕中显示出来
[zy@localhost ~]$ ls
Desktop Documents Downloads Music Pictures Public Videos
[zy@localhost ~]$ ls> /dev/stdout # 默认输出
Desktop Documents Downloads Music Pictures Public Videos
[zy@localhost ~]$ ls>/dev/stderr
Desktop Documents Downloads Music Pictures Public Videos
[zy@localhost ~]$ ls> /dev/null
[zy@localhost ~]$
# 在某些场景下不想让别人看到输出信息[root@localhost zy]# echo "Epotywbo" | passwd --stdin zy (默认输出到/dev/stdout)
Changing password for user zy.
passwd: all authentication tokens updated successfully.
[root@localhost zy]# [root@localhost zy]# echo "Epotywbo" | passwd --stdin zy > /dev/null[root@localhost zy]# # & 将所有结果 [zy@localhost ~]$ date&> output01
[zy@localhost ~]$ more output01
Tue Jan 3123:37:14 CST 2023[zy@localhost ~]$ Date &> output01
[zy@localhost ~]$ more output01
bash: Date: command not found...
Similar command is: 'date'[zy@localhost ~]$
# null(黑洞设备)不输出正确或者错误信息[zy@localhost ~]$ ls
Desktop Documents Downloads Music output01 Pictures Public Videos
[zy@localhost ~]$ LS > /dev/null
bash: LS: command not found...
Similar command is: 'ls'[zy@localhost ~]$ LS 2> /dev/null
[zy@localhost ~]$ more /dev/null
[zy@localhost ~]$
12.1 输出重定向
$# 将标准正确输出重定向输出到文件
[zy@localhost ~]$ ls> output01
[zy@localhost ~]$ more output01
Desktop
Documents
Downloads
Music
output01
Pictures
Public
Videos
[zy@localhost ~]$
# > (正确输出)覆盖重定向[zy@localhost ~]$ date
Tue Jan 3123:27:09 CST 2023[zy@localhost ~]$ date> /dev/stdout
Tue Jan 3123:27:30 CST 2023[zy@localhost ~]$ date> output01
[zy@localhost ~]$ more output01
Tue Jan 3123:27:39 CST 2023[zy@localhost ~]$ date> output01 # 覆盖了[zy@localhost ~]$ more output01
Tue Jan 3123:27:59 CST 2023[zy@localhost ~]$
# >> (正确输出)追加重定向[zy@localhost ~]$ more output01
Tue Jan 3123:27:59 CST 2023[zy@localhost ~]$ date>> output01
[zy@localhost ~]$ more output01
Tue Jan 3123:27:59 CST 2023
Tue Jan 3123:30:10 CST 2023[zy@localhost ~]$
#*************************************************************************************>(错误输出)覆盖重定向
>>(错误输出)追加重定向
[zy@localhost ~]$ Date > output01
bash: Date: command not found...
Similar command is: 'date'[zy@localhost ~]$ more output01
[zy@localhost ~]$
[zy@localhost ~]$ Date 2> output01
[zy@localhost ~]$ more output01
bash: Date: command not found...
Similar command is: 'date'[zy@localhost ~]$
# 结果转换重定向(正确转换)[zy@localhost ~]$ LS
bash: LS: command not found...
Similar command is: 'ls'[zy@localhost ~]$
[zy@localhost ~]$ LS >> output02
bash: LS: command not found...
Similar command is: 'ls'[zy@localhost ~]$ LS >> output02 2>&1[zy@localhost ~]$ more output02
bash: LS: command not found...
Similar command is: 'ls'[zy@localhost ~]$
# 结果转换重定向(错误转换)[zy@localhost ~]$ ls2> output03
[zy@localhost ~]$ more output03
[zy@localhost ~]$ ls2> output03 1>&2[zy@localhost ~]$ more output03
Desktop
Documents
Downloads
Music
output01
output02
output03
Pictures
Public
Videos
[zy@localhost ~]$
# 实战[zy@localhost ~]$ find / -name"useradd"2> /dev/null
/etc/default/useradd
/usr/sbin/useradd
/usr/share/bash-completion/completions/useradd
[zy@localhost ~]$
[zy@localhost ~]$ find / -nameuseradd2> ~/find01_false >~/find01_true
[zy@localhost ~]$ ls
Desktop Downloads find01_true Public
Documents find01_false Music Pictures Videos
[zy@localhost ~]$
12.2 输入重定向
linux 内部邮件
[zy@localhost ~]$ mail -s"zy_varning_01" root
I am zy
.
EOT
[zy@localhost ~]$
[root@localhost ~]#
You have mail in /var/spool/mail/root
[root@localhost ~]# mail
Heirloom Mail version 12.57/5/10. Type ? for help.
"/var/spool/mail/root":1 message 1 new
>N 1 zy Wed Feb 1 00:18 19/611 "zy_varning_01"&1
Message 1:
From zy@localhost.localdomain Wed Feb 1 00:18:00 2023
Return-Path: <zy@localhost.localdomain>
X-Original-To: root
Delivered-To: root@localhost.localdomain
Date: Wed, 01 Feb 2023 00:18:00 +0800
To: root@localhost.localdomain
Subject: zy_varning_01
User-Agent: Heirloom mailx 12.57/5/10
Content-Type: text/plain;charset=us-ascii
From: zy@localhost.localdomain (zy)
Status: R
I am zy
& q
Held 1 message in /var/spool/mail/root
You have mail in /var/spool/mail/root
[root@localhost ~]# [root@localhost ~]# &1# 查看第一封邮件& header # 查看邮件简要信息& delete 123456# 删除邮件信息# ctrl + delete[root@localhost ~]# ^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H#*************************************************************************************$# 将find01_true文件作为输入,给邮件,发给root账户
[zy@localhost ~]$ mail -s"zy_varning_02" root < ~/find01_true
[zy@localhost ~]$
[zy@localhost ~]$ mail -s"zy_varning_03" root <<END # 以END作为结束字符> Hello
> I am zy
>... # (.不能退出了)> END
[zy@localhost ~]$
12.3 管道
$#
主要作用: 衔接 / 两个命令之间的衔接
将命令1的标准输出(stdout)作为命令2的标准输入(stdin)[zy@localhost ~]$ grep"zy" /etc/passwd # grep拿到的内容是一个文件作为输入的
zy:x:1000:1000:zy:/home/zy:/bin/bash
[zy@localhost ~]$
[zy@localhost ~]$ cat /etc/passwd |grep"zy"
zy:x:1000:1000:zy:/home/zy:/bin/bash
[zy@localhost ~]$
[zy@localhost ~]$ locatepasswd|wc-l126[zy@localhost ~]$
# -E(正则表达式)[zy@localhost ~]$ ls|grep-E"output.*"
output01
output02
output03
[zy@localhost ~]$
# 查看本地路径目录数量[zy@localhost ~]$ ls-lh|grep-E"^d"|wc-l7[zy@localhost ~]$
# 查看本地路径文件/文件夹数量[zy@localhost ~]$ ls-lh|wc-l13[zy@localhost ~]$
[zy@localhost ~]$ echo"I am zy,varning"| mail -s"zy_sent_root" root
[zy@localhost ~]$
[root@localhost ~]#
You have new mail in /var/spool/mail/root
[root@localhost ~]#