一、标准I/O
标准输入:也可以叫STDIN,用0来标识,通常是键盘
标准输出:也可以叫STDOUT,用1来标识,通常是显示器
标准错误输出:STDERR,用2来标识,通常是显示器
二、I/0重定向
I/O重定向是指改变数据的输入或输出来源。
1、输入重定向:<
[root@hao ~]# tr 'a-z' 'A-Z' < /etc/fstab # # /ETC/FSTAB # CREATED BY ANACONDA ON SAT JUL 26 20:12:53 2014 # ...
2、在此处生成文档:<< 通常和EOF或END一起使用
[root@hao ~]# cat << END > the first line > second > end > END the first line second end
[root@hao ~]# cat >> /tmp/myfile.txt << EOF > the first line > second > EOF [root@hao ~]# cat /tmp/myfile.txt the first line second
3、输出重定向:> 覆盖输出。
会覆盖目标文件中的内容,容易发生错误。可以使用set -C禁止覆盖已经存在的文件。同理set +C则可以关闭上述功能。默认情况下是可以覆盖,当然在set -C 关闭覆盖输出功能情况下,如果要强制覆盖输出,则可以使用>|来强制覆盖输出。
set -C
4、输出重定向:>>追加输出
[root@hao tmp]# ls /var account crash db games lib lock mail opt run tmp yp cache cvs empty gdm local log nis preserve spool www [root@hao tmp]# ls /var >/tmp/var.out [root@hao tmp]# cat /tmp/var.out account cache ...
5、重定向错误输出:2>,如果不是错误输出,则2>相当于>
6、追加方式重定向错误输出:2>>
[root@hao ~]# ls /varr > /tmp/var2.out ls: cannot access /varr: No such file or directory [root@hao ~]# ls /varr 2> /tmp/var2.out [root@hao ~]# cat /tmp/var2.out ls: cannot access /varr: No such file or directory [root@hao ~]# ls /var 2> /tmp/var2.out account crash db games lib lock mail opt run tmp yp cache cvs empty gdm local log nis preserve spool www
7、若为标准输出,则输出到某一个文件,若为错误输出,则重定向到另一个文件
[root@hao ~]# ls /var > /tmp/var2.out 2>/tmp/err.out [root@hao ~]# cat /tmp/var2.out account cache crash ... [root@hao ~]# cat /tmp/err.out
8、重定向标准输出和错误输出至同一个文件:&>
[root@hao ~]# ls /var# &> /tmp/var3.out [root@hao ~]# cat /tmp/var3.out ls: cannot access /var#: No such file or directory [root@hao ~]# ls /var &> /tmp/var3.out [root@hao ~]# cat /tmp/var3.out account cache ...
三、管道
管道:把前一个命令的输出,作为后一个命令的输入,以此类推至多个命令。
[root@hao ~]# echo 'hello world' | tr 'a-z' 'A-Z' HELLO WORLD [root@hao ~]# cut -d: -f1 /etc/passwd |sort abrt adm apache ... [root@hao ~]# cut -d: -f3 /etc/passwd |sort -n 0 1 2 3 4 5 6 7 8 ... [root@hao ~]# cut -d: -f1 /etc/passwd |sort|tr 'a-z' 'A-Z' ABRT ADM APACHE AVAHI-AUTOIPD BIN ...
四、tee命令,输出到文件中,且输出到屏幕上
[root@hao ~]# echo 'hello world' | tee /tmp/hello.out hello world [root@hao ~]# cat /tmp/hello.out hello world
五、练习
1、统计/usr/bin/目录下的文件个数
[root@hao ~]# ls /usr/bin | wc -l 1479
2、取出当前系统上所有用户的shell,要求每种shell只显示以此,并且按顺序显示
[root@hao ~]# cut -d: -f7 /etc/passwd|sort -u /bin/bash /bin/sync /bin/tcsh /sbin/halt /sbin/nologin /sbin/shutdown
3、显示/var/log目录下每个文件的内容类型
[root@hao ~]# file /var/log/* /var/log/anaconda.ifcfg.log: ASCII text /var/log/anaconda.log: UTF-8 Unicode English text /var/log/anaconda.program.log: ASCII English text, with very long lines, with overstriking /var/log/anaconda.storage.log: UTF-8 Unicode C++ program text, with very long lines
...
4、取出/etc/inittab文件的第六行
[root@hao log]# head -6 /etc/inittab |tail -1 #
5、取出/etc/passwd文件中倒数第9个用户的用户名和shell,显示到屏幕上并将其保存至/tmp/users文件中
[root@hao log]# tail -9 /etc/passwd |head -1|cut -d: -f1,7|tee /tmp/users tcpdump:/sbin/nologin
6、显示/etc目录下所有一pa开头的文件,并统计其个数
[root@hao log]# ls -d /etc/pa*|wc -l 5
7、不使用文本编辑器,将alias cls=clear 一行内容添加至当前用户的.bashrc文件中。
[root@hao log]# echo "alias cls=clear" >> ~/.bashrc