RHCE课程-RH033Linux基础笔记五之常用文本处理命令、输入输出重定向、管道

RHCE课程-初级部分5


常用文本处理命令,输入输出重定向,管道

   今天主要以命令为主,虽然普通的命令没技术含量,但是有技术含量的都是以普通的命令为基础


   Cat 文件名

   cat是concatenate的缩写,所以它的作用其实是连接文件。但默认情况下它会将连接文件的结果送到标准输出。所以我们常用来 显示文件内容。类似于dos中的type。

image

   比如我要看install.log的内容就可以使用cat install.log

image

   这个文件是系统安装的时候,安装了哪些软件,都记录在这里面的,你们发现没有,我们使用cat的时候,只能看见最后,开始的部分看不见。所以我们要使用more


   More 文件名

   当一个文件的内容超过一屏后,我们可以用more这个指令来逐屏察看文件内容。
   使用方法,more 文件名,然后使用空格键,他会一页一页的往下翻,使用回车键,他会一行一行的往下翻.按b可以往上翻页.如果会vim 的会员可以使用v,他会在当前一页进入vi 编辑模式。

image


   Less 文件名

   less在more的基础上,更可以逐行察看,前后翻页。
   他相对与more来说,他的优势是可以一行一行的看。 而more 是一页一页的查看,个人感觉两个命令功能差不多。
   还有less这个命令都可以输入 /关键字进行搜索

image

image



下面我们学习最常用的文件处理命令
   拷贝, 移动,重新命名,和删除

   你们现在自己的家目录中建立 redhat文件,然后再在自己的家目录中建立51cto目录,使用cp命令 把redhat 拷贝到51cto里面


   cp

   cp是copy的缩写,可以用来将一个文件复制为另一个文件。所以cp的格式应该是cp[源文件][目标文件]。cp相当于dos中的copy。(-R递归)

image

   可以使用相对路径和绝对路径,这在以前的课程我们已经讲过了
   现在我们要把redhat文件备份,到当前目录,备份名字 redhat.bk

image

   下面大家把51cto 备份成 51cto.bk ,记住要使用 -r或者-R命令,在linux里面,严格区分大小写,这个命令对这两个参数都支持

image

   递归的拷贝是什么意思?
   递归就是如果那个目录里面还有目录,都会一层一层的全部拷贝
   记住 -r  参数很重要
   再提示一点,cp 的时候可以使用  cp *  目标地址,用* 表示本目录的所有文件


   mv

   mv是move的缩写,可以用来将一个文件移动到另一个位置。同时,移动的过程中可以改变文件的名字,当目标文件名与源文件名不一致时,mv就起到了rename的作用。mv相当于dos中的move和rename。
大家可以44这个命令 把redhat移动到/home 里,然后把51cto 也移动过去。

image


   rm

   rm是remove的缩写,可以用来删除一个文件。rm相当于dos中的delete。如果你是删除目录的话,也要使用 -r, 递归删除
   还可以使用 -i 交互式删除,也就是系统要提示你是否删除

image

   怎么删除目录没加-i参数,光-r参数也提示啊?
   我不是说了吗?如果是目录,需要递归删除。大家发现了吗?不使用 -i 他也会提示问你是否删除,这是我们上周的课程讲过,alias 别名,大家使用 alias 命令查看别名。

image

   能不能 让他不提示呢?
   可以啊,有两种方法
       1、你删除这条别名
       2、使用 -f 参数,强制删除
   


我上周讲过管道和重导向

   现在大家使用cat 和重导向 把 /etc/passwd  复制到用户主目录

image

   这个命令可以代替cp 使用,而且 通常使用这个命令比较多,要求大家掌握
   大家知道这个命令原理吧?
   先使用cat 显示这个文件,然后使用重定向符号 把显示的内容 定向到 passwd里面
   关于< ,> ,<<,>>使用,参考上周课程


   wc

   wc用来统计一个文件的行数(-l)、词数(-w)、字符数(-c)并送到标准输出。
   做统计的时候很方便

image


   grep

   grep用来从一个文件中找出匹配指定关键字的那一行,并送到标准输出,结合管道,我们通常用它来过滤搜索结果.
   例如:  
   ls  -a | grep bash
       .bash_history
       .bash_logout
       .bash_profile
       .bashrc  

image

   通常可以使用这种方法,查找PASSWD文件里和ROOT有关系的行。

image

   grep支持用扩展的正则表达式来进一步定义关键字,具体如下:
       .              替代任何一个单一字符
       .*             替代零个或任意个字符
       [abc]          替代a、b或c
       [^abc]         替代除了a、b、c以外的字符
       a*             替代空、a、aa、aaa、乃至更多个a
       a?            替代一个或零个单独的a
       a+             替代a、aa、aaa乃至更多个a
       a\{n\}         替代重复了n次的a
       ^a             替代以a为首的行
       a$             替代以a为尾的行


   head

   显示文件开头部分内容,默认显示十行参数 --lines或者 �Cn 指明显示行数

image

 

   tail

   tail显示文件结尾部分内容,参数 -f 显示文件的即时更新,用于监视日志文件
   这个命令很常用了
   打开两个终端
   第一个终端我们输入cat > redhat

image

   第二个终端我们输入tail -f redhat

image

   都是同一个redhat文件,在第一个终端输入几个字符,然后按回车

image

   效果出来了,这就是即时监控
   tail -f  命令一般用来监控日志文件


   sort

   sort用来按各种需要重新排列文本,一般运用在一个管道之后。例如:
   [Lonny@stationXX Lonny] $ ls  -a | grep bash | sort
       .bash_history
       .bash_logout
       .bash_profile
       .bashrc

image


       .bashrc
       .bash_profile
       .bash_logout
       .bash_history

image

   默认情况下sort按照字母顺序排列文本。
       -n      按照数字排序
       -r      反向排序

       -u      将重复的行去除



   diff  - 报告文本差异内容
   uniq  - 去除文件中重复的行
   cut   - 显示文件中的某一列
   paste - 将文本按列拼接

   diff

   diff用于比较两个文件之间的区别,并送到标准输出。输出时先报告两个文件的哪一行不同。
该命令告诉用户,为了使两个文件 file1 和 file2 一致,需要修改它们的哪些行。
   #diff  file1 file2
   字母(a、d和c)之前的行号(n1,n2)是针对file1 的,其后面的行号(n3,n4)是针对 file2 的。字母 a、d 和 c 分别表示附加、删除和修改操作。

image


   uniq

   uniq用于去除文本中重复行。

       -u参数可以只显示那些没有被重复过的行。

       -d显示有被重复过的行。


   cut

   cut可以根据一个指定的标记(默认是tab)来为文本划分列,然后将此列显示。

       例如:

       [root@stationXX root] $ cut �Cf 1 �Cd : /etc/passwd

   

   -d表示以什么分隔符

   -f显示第几列


image

   把PASSWD的第一列显示出来,导入到file文件里,自己操作一下,然后看下这个文件内容

image

   这个命令在以后的服务器架设中很有用处的,一定要记住,-d 后面跟的是分割符号  -f 后面是第几行 然后重定向


   vim /etc/passwd

image

   我们查看 passwd文件,看他的规律,都是用:分分隔的,所以 -d 后面是:,然后用户是第一列,所以我们用 -f 1,passwd最后一个标签是该用户默认使用的shell.
   那么我要把最后一列复制出来,放到file2 中。怎么做?
   cut -f 7 -d : /etc/passwd > file2

image


   paste

   paste将几份文集那按照列的方式拼接。默认情况下,新文件的列分隔符是tab,

       -d参数指定分隔符



   流编辑器sed (Stream Editor)
   sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;sed �Cn

   

   -n 关闭默认的输出而只输出那些带有p标志的行

   

   我们今天初步学习下,这个主要是编程使用的。我们介绍他的几个简单用法就行了。如果你要学编程可以自己下来深入研究

   建立这样一个文件

image

   例:查找/tmp/redhat文件中包括文本hello的所有行。
   sed �Cn ‘/hello/p’ /tmp/redhat

image


   sed ‘/hello/d’ /tmp/redhat

image


    -s:全部行
   -g:替换这一行的所有匹配的字符

   

   例:查找/tmp/redhat文件中"str1"的所有行,并将查找到的行的"str2"替换为"str3"    

   sed ‘/str1/s/str2/str3/g’ /tmp/redhat

image

   这些都是高级文本处理的时候用,如果你记不住也没关系,至少你要知道有这个工具,急到用的时候可以在查资料和参数
   sed也可以将规则写成一个sed文件,使用'�Cf '来指定使用的脚本文件。
最后一个参数 也要结合上周我们学习的重定向  
   先写规则文件:
       查找带h的行,把hello改成redking  
       查找带w的行,把world改成michael

image


image



   mkdir- 创立新目录

image

   rmdir- 删除空目录

image



   输入、输出、重定向

       

       输入:过滤器的数据来源

        标准输入stdin(0):默认是键盘

       

       输出:过滤器的数据去向

      标准输出stdout (1):默认是终端屏幕
      错误输出 :报错讯息与标准输出走不同的I/O通道
      标准错误输出stderr(2):默认是终端屏幕

       

       重定向:标准输入、输出与错误输出,都可以用特定符号改变数据来源或去向

           使用“<”来重定向输入源
           大多数工具都会以其后的文件名为输入源
           有一些过滤器一定需要添加 >以明确输入源
           使用 >>让系统将一次键盘的全部输入,先送入虚拟的‘当前文档’,然后一次性输入
           需要一对字母、符号或字符串作为起始终结标识符
           可以选择任意符号作为起始终结标识符
           使用>改变数据输出目标
       范例:
           ls �Cl > listfile
           将当前目录下的文件以长模式显示,然后写入listfile文件

image

       使用>进行输出重定向,文件的原内容会被 覆盖
       使用>>可以将输出 追加入文件  

   

       ll / >> listfile

image

       错误重定向
           系统错误与标准输出使用的I/O管道不同
           默认情况下,系统报错会显示到终端屏幕上
           使用2>将报错讯息重定向入一个文件

     

        ls /luoli 2> /dev/null

image


        ls /luoli passwd 2>> results

image


       使用 | 将前一个过滤器的输出直接送入后一个过滤器的输入

           ls �Cl | grep pass

image


       注意管道前过滤器的输出与管道后过滤器的输入数据类型要匹配

 

            ls �Cl | more

       分屏显示当前目录下的文件

image


       拷贝file1到file2
           cat file* > file
       将数个小文件合并成一个文件

image


你可能感兴趣的:(rhce)