I/O 重定向
I/O 是输入/输出的缩写,通过I/O重定向可将命令行的输入重定向为从文件中获取内容,也可以将命令行的输出结果重定向到文件中。
重定向标准输出
需要使用到的重定向符>
,但是这只能用于标准输出,标准错误信息仍会显示在屏幕上。
//将ls命令的输出保存到文件中
[zhy@ubuntu ~]$ ls -l /user/bin > ls-output.txt
//将输出结果追加在文件末尾
[zhy@ubuntu ~]$ ls -l /user/bin >> ls-output.txt
重定向标准错误
可以通过文件描述符来重定向标准错误
[zhy@ubuntu ~]$ ls -l /bin/user 2> ls-error.txt
将标准输出和标准错误重定向到同一个文件
第一种是传统方法
[zhy@ubuntu ~]$ ls -l /bin/user > ls-output.txt 2>&1
传统方法首先重定向标准输出到ls-output.txt
文件中,然后使用标记符2>&1
把文件描述符2(标准错误)重定向到文件描述符1(标准输出)中。
第二种是效率更高的方法
[zhy@ubuntu ~]$ ls -l /bin/user &> ls-output.txt
使用&>
将标准输出和标准错误都重定向到ls-output.txt
中
处理不想要的输出
当我们不希望得到输出时,可以将输出结果重定向到一个称为/dev/null
的特殊文件中,这个文件是一个称为位桶的系统设备。
[zhy@ubuntu ~]$ ls -l /bin/user 2> /dev/null
cat 合并文件
cat命令读取一个或多个文件,并把他们按顺序复制到标准输出文件中.
[zhy@ubuntu ~]$ cat file1 file2 ...
//会将输出内容显示到屏幕上(默认标准输出)
[zhy@ubuntu ~]$ cat file
//当使用cat未指明参数时,它将从标准输入读取内容(默认标准输入是键盘)
[zhy@ubuntu ~]$ cat
//将读取的文件重定向到文件中
[zhy@ubuntu ~]$ cat file1 > file2.txt
重定向标准输入
使用重定向符<
,可以将标准输入的源从键盘变成file.txt文件
//标准输入重定向
[zhy@ubuntu ~]$ cat < file.txt
管道
使用管道操作符|(竖线)
可以把一个命令的标准输出传送到另一个命令的标准输入中。
[zhy@ubuntu ~]$ Command1 | command2
//less命令可以分页显示任意命令的输入,下面这条命令将它的结果发送到标准输出
[zhy@ubuntu ~]$ ls -l /user/bin | less
管道通常用来对数据执行复杂的操作,也可以把多条命令合在一起构成一个管道。这种方式中用到的命令通常被称为过滤器。过滤器接收输入,按照某种方式对输入进行改变,然后再输出它。
//把/bin和/user/bin目录下的所有可执行程序合并成一个列表,并且按照顺序排列,最后再查看这个列表
[zhy@ubuntu ~]$ ls /bin /user/bin | sort | less
//在显示出来的列表中不包含重复的行可以使用uniq命令
[zhy@ubuntu ~]$ ls /bin /user/bin | sort | uniq | less
//如果你不合逻辑想要查看重复的行可在uniq后跟上参数-d
[zhy@ubuntu ~]$ ls /bin /user/bin | sort | uniq -d | less
//打印文件行数、字数、字节数
[zhy@ubuntu ~]$ wc file.txt
//打印匹配行。下面的命令从列出的程序中搜索出文件名中包含zip的所有文件
//grep存在一对方便的选项:-i,使得在搜索时忽略大小写。-v,使得只输出和模式不匹配的行。
[zhy@ubuntu ~]$ ls /bin /user/bin | grep zip
打印文件的开头/结尾部分
有时候我们打开一个文件并不想查看所有内容,于是可以使用head/tail
来选择性的输出指定的行数,默认情况下head
将输出文件的前10行,tail
则输出文件的最后10行。不过可以使用-n
选项来调整输出的行数。
//输出file的前10行
[zhy@ubuntu ~]$ head file.txt
//输出file的前3行
[zhy@ubuntu ~]$ head -n 3 file.txt
//列出程序的前5行
[zhy@ubuntu ~]$ ls /bin | head -n 5
扩展
echo命令
传递给echo的任何参数都将显示出来
[zhy@ubuntu ~]$ echo i love you
i love you
路径名扩展
[zhy@ubuntu ~]$ echo D*
Desktop Documents
[zhy@ubuntu ~]$ echo /user/*/share
/user/kerberos/share /user/local/share
花括号扩展
花括号扩展算是比较奇怪的扩展方式,有了它,可以按照花括号中的模式创建多种文本字符串。
[zhy@ubuntu ~]$ echo love_{you1,you2,you3}
love_you1 love_you2 love_you3
[zhy@ubuntu ~]$ echo Number_{1..5}
Number_1 Number_2 Number_3 Number_4 Number_5
[zhy@ubuntu ~]$ echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
[zhy@ubuntu ~]$ echo a{A{1,2},B{3,4}}b
aA1b aA2b aB3b aB4b
除此之外,花括号扩展还有一些比较实用的意义,比如创建一系列按年月格式命名的目录:
[zhy@ubuntu ~]$ mkdir {2009..2011}-0{1..9} {2009..2011}-{10..12}
[zhy@ubuntu ~]$ ls
2009-01 2009-05 2009-09 2010-01 2010-05 2010-09 2011-01 2011-05 2011-09
2009-02 2009-06 2009-10 2010-02 2010-06 2010-10 2011-02 2011-06 2011-10
2009-03 2009-07 2009-11 2010-03 2010-07 2010-11 2011-03 2011-07 2011-11
2009-04 2009-08 2009-12 2010-04 2010-08 2010-12 2011-04 2011-08 2011-12
看起来是不是相当奇妙喃!
参数扩展
参数扩展与系统存储小块数据以及给每个小块数据命名的性能有关。有很多的小块数据(或称为变量)可用于扩展。例如,命名为USER的变量就包含了你的用户名:
[zhy@ubuntu ~]$ echo $USER
zhy
通过以下命令可查看可用的变量列表
[zhy@ubuntu ~]$ printenv | less
命令替换
命令替换可以把一个命令的输出作为一个扩展模式使用。
[zhy@ubuntu ~]$ echo $(ls)
[zhy@ubuntu ~]$ ls -l $(which cp)
-rwxr-xr-x 1 root root 120708 11月 19 2012 /bin/cp
更多文章请关注我的个人博客:www.zhyocean.cn