1.标准输入、标准输出、标准错误
FD:file descriptors (文件描述符)
进程使用文件描述符来管理打开的文件
打开的文件都有一个fd
标准输入(STDIN) 标准输出(STDOUT) 标准错误(STDERR)
FD是访问文件的标识是链接文件
0 默认接受来自键盘的输入,即键盘只读
1,2默认输出到终端窗口,可以理解为终端是屏幕
3+ 默认为文件,可读可写
2.重定向案例
输出重定向分为正确输出,错误输出
> 把STDOUT重定向到文件
2> 把STDERR重定向到文件
&> 把所有输出重定向到文件
> 文件内容会被覆盖
>> 原有内容基础上,追加内容
使用 > 将标准输出的内容指定到某个文件,不直接在屏幕上显示,但是指定的文件内容会被覆盖
正确输出重定向
[root@localhost ~]# date
2020年 07月 30日 星期四 19:38:57 CST
[root@localhost ~]# date 1> file1.txt
[root@localhost ~]# cat file1.txt
2020年 07月 30日 星期四 19:39:25 CST
[root@localhost ~]#
[root@localhost ~]# ls /aaaaaaaa
ls: 无法访问/aaaaaaaa: 没有那个文件或目录
[root@localhost ~]# ls /aaaaaaaa 2> file2.txt
[root@localhost ~]# cat file2.txt
ls: 无法访问/aaaaaaaa: 没有那个文件或目录
[root@localhost ~]#
正确、错误 输出重定向
[root@localhost ~]# ls /home/ /aaaaaa &> file3.txt
[root@localhost ~]# cat file3.txt
ls: 无法访问/aaaaaa: 没有那个文件或目录
/home/:
ll
user1
user2
[root@localhost ~]#
使用 >> 将标准输出的内容指定到某个文件,不直接在屏幕上显示,原有内容不会被覆盖,追加指定内容。
[root@localhost ~]# date
2020年 07月 30日 星期四 19:38:57 CST
[root@localhost ~]# date 1> file1.txt
[root@localhost ~]# cat file1.txt
2020年 07月 30日 星期四 19:39:25 CST
[root@localhost ~]# date 1>> file1.txt
[root@localhost ~]# cat file1.txt
2020年 07月 30日 星期四 19:39:25 CST
2020年 07月 30日 星期四 19:40:34 CST
[root@localhost ~]# mail -s "sss" user1
123123
123123
. 点代表邮件编辑完成
EOT
[root@localhost ~]# su - user1
[user1@localhost ~]$ mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/user1": 1 message 1 new
>N 1 root Thu Jul 30 19:56 19/614 "sss"
& 1
Message 1:
From root@localhost.localdomain Thu Jul 30 19:56:52 2020
Return-Path: .localdomain>
X-Original-To: user1
Delivered-To: user1@localhost.localdomain
Date: Thu, 30 Jul 2020 19:56:52 +0800
To: user1@localhost.localdomain
Subject: sss
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: text/plain; charset=us-ascii
From: root@localhost.localdomain (root)
Status: R
123123
123123
按邮件编号:1.即可看邮件。
按q 退出。
& q
Held 1 message in /var/spool/mail/user1
[user1@localhost ~]$
输入重定向编辑邮件
[root@localhost ~]# vim file4.txt
[root@localhost ~]# mail -s "ssss" user1 < file4.txt
[root@localhost ~]# su - user1
上一次登录:四 7月 30 19:57:04 CST 2020pts/2 上
[user1@localhost ~]$ mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/user1": 2 messages 1 new
1 root Thu Jul 30 19:56 20/625 "sss"
>N 2 root Thu Jul 30 20:02 23/622 "ssss"
& 2
Message 2:
From root@localhost.localdomain Thu Jul 30 20:02:59 2020
Return-Path: .localdomain>
X-Original-To: user1
Delivered-To: user1@localhost.localdomain
Date: Thu, 30 Jul 2020 20:02:59 +0800
To: user1@localhost.localdomain
Subject: ssss
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: text/plain; charset=us-ascii
From: root@localhost.localdomain (root)
Status: R
123
123
123
123
123
& q
Held 2 messages in /var/spool/mail/user1
[user1@localhost ~]$
1.管道 " | "
[user1@localhost ~]$ cat /etc/passwd | tail -3
ll:x:1000:1000:ll:/home/ll:/bin/bash
user1:x:1001:1001::/home/user1:/bin/bash
user2:x:1005:1005::/home/user2:/bin/bash
您在 /var/spool/mail/user1 中有邮件
[user1@localhost ~]$ ps aux | grep sshd
root 1204 0.0 0.2 112920 2024 ? Ss 19:08 0:00 /usr/sbin/sshd -D
user1 3695 0.0 0.0 112732 972 pts/2 R+ 20:06 0:00 grep --color=auto sshd
三通管道,即交给另一个程序处理。又保存一份副本
tee命令主要被用来向standout(标准输出流,通常是命令执行窗口)输出的同时也将内容输出到文件,下面是tee的示例
[root@localhost ~]# cat /etc/passwd |tee 55.txt |tail -1
user2:x:1005:1005::/home/user2:/bin/bash
[root@localhost ~]# cat 55.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:998:996:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
colord:x:997:995:User for colord:/var/lib/colord:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
setroubleshoot:x:995:992::/var/lib/setroubleshoot:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
gluster:x:994:991:GlusterFS daemons:/run/gluster:/sbin/nologin
chrony:x:993:990::/var/lib/chrony:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
unbound:x:992:989:Unbound DNS resolver:/etc/unbound:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
geoclue:x:991:987:User for geoclue:/var/lib/geoclue:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
saned:x:990:984:SANE scanner daemon user:/usr/share/sane:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
gnome-initial-setup:x:989:983::/run/gnome-initial-setup/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
ll:x:1000:1000:ll:/home/ll:/bin/bash
user1:x:1001:1001::/home/user1:/bin/bash
user2:x:1005:1005::/home/user2:/bin/bash
tee把cat /etc/passwd输出的同时也将内容输出到文件55.txt
55.txt中包含了 cat /etc/passwd 的所有行
[root@localhost ~]# touch /home/file{1..5} 准备文件
[root@localhost ~]# ls /home
file1 file2 file3 file4 file5 ll user1 user2
[root@localhost ~]# vim files.txt 部分删除
[root@localhost ~]# cat files.txt |rm -rvf
[root@localhost ~]# cat files.txt
/home/file1 发现失败
/home/file3
/home/file5
[root@localhost ~]# cat files.txt |xargs rm -rvf
已删除"/home/file1" 通过xargs成功连接rm命令
已删除"/home/file3"
已删除"/home/file5"
[root@localhost ~]# ls /home
file2 file4 ll user1 user2
[root@localhost ~]#