共计 3838 个字符,预计需要花费 10 分钟才能阅读完成。
目的
掌握错误输出、标准输出、标准输入使用;重定向和管道的使用方法。
前提
linu 系统中的三种 I / O 设备所代表的编号分别是:标准输入(STDIN),文件描述符为 0,默认从键盘获取输入;标准输出(STDOUT),文件描述符为 1,默认输出到显示屏;标准错误(STDERR),文件描述符为 2,默认输出到显示屏。
I/ O 重定向就是为了改变默认输入、输出的位置:
:表示标准输出覆盖重定向;
:表示标准输出追加重定向;
2>:表示错误输出覆盖重定向;
2>>:表示错误输出追加重定向;
&>:表示合并标准输出和错误输出覆盖重定向;
&>>:表示合并标准输出和错误输出追加重定向;
2>&1:表示意义同 &> 即合并标准输出和错误输出覆盖重定向;
<:输入重定向;
<<:多行输入;
set - C 命令:禁止覆盖重定向;
|:强制覆盖重定向(与 set - C 相反);
set + C 命令:解除禁止覆盖重定向的设置;
管道符(|)作用是把前一个命令的执行结果当做后一个命令的输入。
使用方式
1、重定向
【例 1】把 /etc/fstab 文件内容重定向到 /tmp 目录下文件名为 fstab.out
[root@Magedu ~]# cat /etc/fstab > /tmp/fstab.out
【例 2】把 hello world 追加到 /tmp/fstab.out 文件尾部
[root@Magedu ~]# echo "hello world" >>/tmp/fstab.out
【例 3】禁止覆盖重定向和强制重定向
[root@Magedu ~]# set -C
[root@Magedu ~]# echo "hello magedu" >/tmp/fstab.out
-bash: /tmp/fstab.out: cannot overwrite existing file
设置禁止覆盖重定向后,可强制覆盖重定向
[root@Magedu ~]# echo "hello magedu" >| /tmp/fstab.out
[root@Magedu ~]# cat /tmp/fstab.out
hello magedu
【例 4】解除禁止覆盖重定向设置
[root@Magedu ~]# set +C
[root@Magedu ~]# echo "www.magedu.com" > /tmp/fstab.out
【例 5】把标准错误覆盖重定向到 which.out 文件
先看下只重定向标准输出的情况:
[root@Magedu ~]# whch cat > /tmp/which.out
bash: whch: command not found...
[root@Magedu ~]# cat /tmp/which.out
再看把标准错误重定向的情况:
[root@Magedu ~]# whch cat 2> /tmp/which.out
[root@Magedu ~]# cat /tmp/which.out
bash: whch: command not found...
【例 6】把标准错误和标准输出分别重覆盖定向到不同的文件里,即标准错误重定向到 falt.txt 文件,标准输出重定向到 correct.txt
[root@Magedu ~]# which cat 2> falt.txt > correct.txt
[root@Magedu ~]# cat correct.txt
/usr/bin/cat
[root@Magedu ~]# cat falt.txt
[root@Magedu ~]# wih cat 2> falt.txt > correct.txt
[root@Magedu ~]# cat falt.txt
bash: wih: command not found...
[root@Magedu ~]# cat correct.txt
【例 7】合并标准输出和标准错误覆盖重定向到 out.txt 文件里
[root@Magedu ~]# which cat &> out.txt
[root@Magedu ~]# cat out.txt
/usr/bin/cat
[root@Magedu ~]# hich cat &>> out.txt
[root@Magedu ~]# cat out.txt
/usr/bin/cat
bash: hich: command not found...
【例 8】&> 等价于 2 &>1,功能同上例
[root@Magedu ~]# which cat > out.txt 2>&1
[root@Magedu ~]# cat out.txt
/usr/bin/cat
[root@Magedu ~]# wich cat >> out.txt 2>&1
[root@Magedu ~]# cat out.txt
/usr/bin/cat
bash: wich: command not found...
2、输入重定向和 tr 命令
tr 命令是把字符集 1 转换为字符集 2
【例 9】用输入重定向的方式,把所有小写字母转换为大写
[root@Magedu ~]# cat /etc/issue
\S
Kernel \r on an \m
[root@Magedu ~]# tr a-z A-Z </etc/issue
\S
KERNEL \R ON AN \M
从文件导入标准输入
【例 10】把 out.txt 文件里的内容,写到 file.txt 文件里
[root@Magedu ~]# cat >file.txt <out.txt
[root@Magedu ~]# cat file.txt
/usr/bin/cat
bash: wich: command not found...
多行输入:<< 终止词
【例 11】屏幕随便输入几行内容,遇到 END 字样结尾后,屏幕内容自动保存在 f1.txt 里
[root@Magedu ~]# cat > f1.txt <<END
> first
> scond
> third
> END
[root@Magedu ~]# cat f1.txt
first
scond
third
【例 12】使用 mail 命令 root 给 lsj 普通用户发邮件,要求邮件标题为”help”,邮件正文如下:
Hello, I am 用户名,The system version is here,please help me to check it thanks!
操作系统版本信息
[root@Magedu ~]# mail -s "help" lsj <<EOF
> Hello, I am `who`,The system version is here,please help me to check it thanks!
> `cat /etc/redhat-release`
> EOF
[root@Magedu ~]# su - lsj
Last login: Thu May 31 00:29:49 EDT 2018 on pts/0
[lsj@Magedu ~]$ mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/lsj": 7 messages 1 new 2 unread
1 root Mon May 21 06:37 20/598 "ha"
2 root Mon May 21 06:39 19/591 "ha"
3 root Mon May 21 06:39 19/592 "ha"
4 root Mon May 21 07:41 22/810 "he"
U 5 root Tue May 22 05:24 23/654 "he"
6 root Tue May 22 05:25 22/648 "he"
>N 7 root Thu May 31 02:47 20/798 "he"
& 7
Message 7:
From root@Magedu.localdomain Thu May 31 02:47:53 2018
Return-Path: <root@Magedu.localdomain>
X-Original-To: lsj
Delivered-To: lsj@Magedu.localdomain
Date: Thu, 31 May 2018 02:47:53 -0400
To: lsj@Magedu.localdomain
Subject: help
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: text/plain; charset=us-ascii
From: root@Magedu.localdomain (root)
Status: R
Hello, I am root pts/0 2018-05-30 21:20 (172.18.116.232)
root pts/1 2018-05-31 00:25 (172.18.116.232),The system version is here,please help me to check it thanks!
CentOS Linux release 7.5.1804 (Core)
& q
Held 7 messages in /var/spool/mail/lsj
[lsj@Magedu ~]$
3、管道符:|
【例 13】把 echo 输出的内容,传递给 tr 命令,实现小写字母转换为大写字母
[root@Magedu ~]# echo "this is test line" | tr a-z A-Z
THIS IS TEST LINE
【例 14】一页一页的查看输入
[root@Magedu ~]# ls -l /etc |less
total 1560
drwxr-xr-x. 3 root root 101 May 14 11:29 abrt
-rw-r--r--. 1 root root 16 May 14 11:44 adjtime
-rw-r--r--. 1 root root 1518 Jun 7 2013 aliases
-rw-r--r--. 1 root root 12288 May 14 11:46 aliases.db
...(省略)
-rw-r--r--. 1 root root 524 Apr 12 15:23 auto.misc
:
文章来源于网络,侵删!