数据流重定向

指的是将屏幕上要出现的文字,传输到其他地方去,例如文件或设备(打印机)

数据流的分类:

standard output

  1. 简称stdout:代码为1,使用>或>>
    使用举例:ll / >~/rootfile意思是将root下的目录传输到~/rootfile中去,若文件不存在则自动创建该文件
    若该文件已存在,则覆盖原来的内容。若不想覆盖原来的内容则可以使用>>

    standard error output

  2. 简称stderr:代码为2,使用>2或>>2
    使用同stdout,只不过不是用>而是使用>2,并且该命令重定向的是错误输出信息

    standard input

  3. 使用<或<<
    将文件的内容重定向至键盘操作(相当于用某个文件内容来取代键盘敲击)
    cat > catfile <testfile该命令作用为将testfile的内容通过数据流重定向复制到catfile中
    <<的作用:当文件的内容遇到eof时,数据流重定向会自动停止,并且没有eof这一行

    数据垃圾桶和输出流特殊写法

  4. 数据垃圾桶:若有以下情境:已知有错误讯息产生,而我们选择忽视掉错误讯息既不存储也不显示,此时我们就可以将错误的讯息数据流重定向值dev/null

  5. 输出流特殊写法:若有以下情境:既要存储stdout又要存储stderr,则可以这样写:find /home &> list,使用&>将两股数据流写入同一个文件

    数据重定向的作用

  6. 当屏幕输出的内容很重要,需要保存时

  7. 背景执行的程序,当不希望它干扰屏幕正常输出结果时
  8. 执行一些已知错误讯息时,可以将它丢进2>dev/null
  9. 当错误讯息和正确讯息需要分开时

    命令执行的判断

  10. 当我们希望连续执行一些命令时可以通过:command;command用分号把这些命令隔开

  11. 通过$?(即上一个命令的回调)来判断下一个命令要不要执行,这里有两种方式

    1. cmd1&&cmd2:cmd1正确执行完毕($?=0),则开始执行cmd2。若cmd1执行完毕为错误,则不执行cmd2。
    2. cmd1||cmd2:cmd1正确执行完毕($?=0),则不执行cmd2.若cmd1执行完毕为错误,则开始执行cmd2.

      管线命令

  12. 管线命令:ls -al /etc | less将前一个命令的stdout数据流再用管线后的命令进行处理,此例为将ls的信息通过less进行再处理,这样就能进行翻页。注意:管线命令只能处理stdout的数据而不能处理stderr的数据

  13. 截取命令:cut、grepcut:
    1. cut -d'分隔字符' -f number该命令意思为将获得的数据流按指定的分隔字符分开,并返回第-f
    2. cut -c 字符区间以字符为单位取出固定的字符区间,例如:cut -c 12-代表取出第12个字符之后的所有字符串
  14. grep [-acinv] '需要搜索的字符串' filename:

    1. -a代表将binary文件以text文件进行搜索
    2. -c:count计数搜索到的次数
    3. i:ignoreCase
    4. -n顺便显示行号
    5. -v反向选择,显示没有搜索到字符串的那几行

      排序命令:sort、wc、uniq

  15. sort:sort [-fbMnrutk] [file or stdin]

    1. -f忽略大小写差异
    2. -b忽略前面的空格
    3. -M以月份进行排列
    4. -n以数字进行排列,默认是以文字来排序
    5. -r反向排序
    6. -u即unique,相同的行只出现一次
    7. -t分隔符,默认为tab
    8. -k以区间来排序,例:若 -k 3代表一行三个一行三个这样的排列
  16. uniq:uniq [-ic],将重复的行只显示一个,通常与[-c]搭配
    1. -i ignorecase
    2. -c进行计数
  17. wc:wc [-lwm],不加参数即显示这个文件的行数、字数、字符数

    1. -l显示这个文件的行数
    2. -w显示这个文件的字数
    3. -m显示这个文件的字符数

      双重数据流重定向:tee

      使用>只能将数据定向至文件,当我们需要数据既输出到屏幕并处理,又存储到文件时,就可以使用tee
      tee [-a] file,参数-a表示以累加的方式输入到文件

      字符转换命令:tr、col、join、paste、expand

  18. tr:tr [-ds] set1...,替换文件中的字符:tr '[a-z]' '[A-Z]',此例为将所有小写字符转换为大写字符

    1. 参数[-d]表示将查找的的字符删除
    2. 参数[-s]表示去除重复的字符
  19. col:col [-xb],-x参数将所有tab转换为空格
  20. paste:paste [-d] file1 file2,将两个文件的合并,行行间以tab隔开
    1. -d后接分隔符,以tab来分隔
    2. -如果用'-'代替file,表示stdin
  21. expand:将文件内的tab键转换为空格键

    分区命令split

    当有时文件或设备太大时,我们可以split将其分开
    split [-bl] file [指定命名:用于区分分开后的文件],例:split -b 300k /etc/services services

  22. -b参数表示区分的大小,可接单位,例如b,k,m

  23. -l以行数来区分

将分开的文件进行合并: 以上例举例,`cat services* >> servicesback