数据流重定向
指的是将屏幕上要出现的文字,传输到其他地方去,例如文件或设备(打印机)
数据流的分类:
standard output
简称stdout:代码为1,使用
>或>>
使用举例:ll / >~/rootfile
意思是将root下的目录传输到~/rootfile
中去,若文件不存在则自动创建该文件
若该文件已存在,则覆盖原来的内容。若不想覆盖原来的内容则可以使用>>
standard error output
简称stderr:代码为2,使用
>2或>>2
使用同stdout,只不过不是用>
而是使用>2
,并且该命令重定向的是错误输出信息
standard input
使用
<或<<
将文件的内容重定向至键盘操作(相当于用某个文件内容来取代键盘敲击)cat > catfile <testfile
该命令作用为将testfile的内容通过数据流重定向复制到catfile中<<
的作用:当文件的内容遇到eof
时,数据流重定向会自动停止,并且没有eof这一行
数据垃圾桶和输出流特殊写法
数据垃圾桶:若有以下情境:已知有错误讯息产生,而我们选择忽视掉错误讯息既不存储也不显示,此时我们就可以将错误的讯息数据流重定向值
dev/null
输出流特殊写法:若有以下情境:既要存储stdout又要存储stderr,则可以这样写:
find /home &> list
,使用&>
将两股数据流写入同一个文件数据重定向的作用
当屏幕输出的内容很重要,需要保存时
- 背景执行的程序,当不希望它干扰屏幕正常输出结果时
- 执行一些已知错误讯息时,可以将它丢进
2>dev/null
-
命令执行的判断
当我们希望连续执行一些命令时可以通过:
command;command
用分号把这些命令隔开通过
$?
(即上一个命令的回调)来判断下一个命令要不要执行,这里有两种方式管线命令:
ls -al /etc | less
将前一个命令的stdout数据流再用管线后的命令进行处理,此例为将ls的信息通过less进行再处理,这样就能进行翻页。注意:管线命令只能处理stdout的数据而不能处理stderr的数据- 截取命令:cut、grepcut:
cut -d'分隔字符' -f number
该命令意思为将获得的数据流按指定的分隔字符分开,并返回第-f
个cut -c 字符区间
以字符为单位取出固定的字符区间,例如:cut -c 12-
代表取出第12个字符之后的所有字符串
grep [-acinv] '需要搜索的字符串' filename
:sort:
sort [-fbMnrutk] [file or stdin]
-f
忽略大小写差异-b
忽略前面的空格-M
以月份进行排列-n
以数字进行排列,默认是以文字来排序-r
反向排序-u
即unique,相同的行只出现一次-t
分隔符,默认为tab-k
以区间来排序,例:若-k 3
代表一行三个一行三个这样的排列
- uniq:
uniq [-ic]
,将重复的行只显示一个,通常与[-c]
搭配-i
ignorecase-c
进行计数
wc:
wc [-lwm]
,不加参数即显示这个文件的行数、字数、字符数tr:
tr [-ds] set1...
,替换文件中的字符:tr '[a-z]' '[A-Z]'
,此例为将所有小写字符转换为大写字符- 参数
[-d]
表示将查找的的字符删除 - 参数
[-s]
表示去除重复的字符
- 参数
- col:
col [-xb]
,-x参数将所有tab转换为空格 - paste:
paste [-d] file1 file2
,将两个文件的合并,行行间以tab隔开-d
后接分隔符,以tab来分隔-
如果用'-'
代替file,表示stdin
-
分区命令split
当有时文件或设备太大时,我们可以split将其分开
split [-bl] file [指定命名:用于区分分开后的文件]
,例:split -b 300k /etc/services services -b
参数表示区分的大小,可接单位,例如b,k,m-l
以行数来区分
将分开的文件进行合并: 以上例举例,`cat services* >> servicesback