1、RHCE 课程- 初级部分 5、常用文本处理命令,输入输出重定向,管道今天主要以命令为主,虽然普通的命令没技术含量,但是有技术含量的都是以普通的命令为基础Cat 文件名 cat 是 concatenate 的缩写,所以它的作用其实是连接文件。但默认情况下它会将连接文件的结果送到标准输出。所以我们常用来显示文件内容。类似于 dos 中的 type。 比如我要看 install.log 的内容就可以使用 cat install.log这个文件是系统安装的时候,安装了哪些软件,都记录在这里面的,你们发现没有,我们使用 cat 的时候,只能看见最后,开始的部分看不见。所以我们要使用 more More
2、 文件名 当一个文件的内容超过一屏后,我们可以用 more 这个指令来逐屏察看文件内容。 使用方法,more 文件名,然后使用空格键 ,他会一页一页的往下翻 ,使用回车键,他会一行一行的往下翻.按 b 可以往上翻页.如果会 vim 的会员可以使用 v,他会在当前一页进入 vi 编辑模式。Less 文件名 less 在 more 的基础上,更可以逐行察看,前后翻页。他相对与 more 来说,他的优势是可以一行一行的看。 而 more 是一页一页的查看,个人感觉两个命令功能差不多。还有 less 这个命令都可以输入 /关键字进行搜索下面我们学习最常用的文件处理命令 拷贝, 移动,重新命名,和删除
3、你们现在自己的家目录中建立 redhat 文件,然后再在自己的家目录中建立 51cto 目录,使用 cp命令 把 redhat 拷贝到 51cto 里面cp cp 是 copy 的缩写,可以用来将一个文件复制为另一个文件。所以 cp 的格式应该是 cp源文件目标文件。cp 相当于 dos 中的 copy。(-R 递归) 可以使用相对路径和绝对路径,这在以前的课程我们已经讲过了现在我们要把 redhat 文件备份,到当前目录,备份名字 redhat.bk 下面大家把 51cto 备份成 51cto.bk ,记住要使用 -r 或者-R 命令,在 linux 里面,严格区分大小写,这个命令对这两个参
4、数都支持递归的拷贝是什么意思? 递归就是如果那个目录里面还有目录,都会一层一层的全部拷贝记住 -r 参数很重要再提示一点,cp 的时候可以使用 cp * 目标地址,用* 表示本目录的所有文件mv mv 是 move 的缩写,可以用来将一个文件移动到另一个位置。同时,移动的过程中可以改变文件的名字,当目标文件名与源文件名不一致时,mv 就起到了 rename 的作用。mv 相当于dos 中的 move 和 rename。大家可以 44 这个命令 把 redhat 移动到/home 里,然后把 51cto 也移动过去。 rm rm 是 remove 的缩写,可以用来删除一个文件。rm 相当于 do
5、s 中的 delete。如果你是删除目录的话,也要使用 -r, 递归删除还可以使用 -i 交互式删除,也就是系统要提示你是否删除怎么删除目录没加-i 参数,光-r 参数也提示啊?我不是说了吗?如果是目录,需要递归删除。大家发现了吗?不使用 -i 他也会提示问你是否删除,这是我们上周的课程讲过,alias 别名,大家使用 alias 命令查看别名。能不能 让他不提示呢? 可以啊,有两种方法 1、你删除这条别名 2、使用 -f 参数,强制删除 使用 -f 一定要注意,这个是强制删除的意思我上周讲过管道和重导向现在大家使用 cat 和重导向 把 /etc/passwd 复制到用户主目录这个命令可以代
6、替 cp 使用,而且 通常使用这个命令比较多,要求大家掌握大家知道这个命令原理吧?先使用 cat 显示这个文件,然后使用重定向符号 把显示的内容 定向到 passwd 里面关于 ,使用,参考上周课程wc wc 用来统计一个文件的行数(-l)、词数(-w)、字符数(-c)并送到标准输出。做统计的时候很方便 grep grep 用来从一个文件中找出匹配指定关键字的那一行,并送到标准输出,结合管道,我们通常用它来过滤搜索结果. 例如: ls -a | grep bash .bash_history .bash_logout .bash_profile .bashrc 通常可以使用这种方法,查找 PA
7、SSWD 文件里和 ROOT 有关系的行。 grep 支持用扩展的正则表达式来进一步定义关键字,具体如下: . 替代任何一个单一字符 .* 替代零个或任意个字符 abc 替代 a、b 或 c abc 替代除了 a、b、c 以外的字符 a* 替代空、a、aa、aaa、乃至更多个 a a? 替代一个或零个单独的 a a+ 替代 a、aa、aaa 乃至更多个 a an 替代重复了 n 次的 a a 替代以 a 为首的行 a$ 替代以 a 为尾的行head 显示文件开头部分内容,默认显示十行参数 -lines 或者 n 指明显示行数 tail tail 显示文件结尾部分内容,参数 -f 显示文件的即时
8、更新,用于监视日志文件 这个命令很常用了 打开两个终端第一个终端我们输入 cat redhat第二个终端我们输入 tail -f redhat都是同一个 redhat 文件,在第一个终端输入几个字符,然后按回车效果出来了,这就是即时监控tail -f 命令一般用来监控日志文件sort sort 用来按各种需要重新排列文本,一般运用在一个管道之后。例如: LonnystationXX Lonny $ ls -a | grep bash | sort .bash_history .bash_logout .bash_profile .bashrc LonnystationXX Lonny $ ls
9、 -a | grep bash | sort -r .bashrc .bash_profile .bash_logout .bash_history 默认情况下 sort 按照字母顺序排列文本。 -n 按照数字排序 -r 反向排序 -u 将重复的行去除 diff 报告文本差异内容 uniq 去除文件中重复的行 cut 显示文件中的某一列 paste 将文本按列拼接 diff diff 用于比较两个文件之间的区别,并送到标准输出。输出时先报告两个文件的哪一行不同。 该命令告诉用户,为了使两个文件 file1 和 file2 一致,需要修改它们的哪些行。 #diff file1 file2 字母(
10、a、d 和 c)之前的行号(n1,n2 )是针对 file1 的,其后面的行号(n3,n4)是针对 file2 的。字母 a、d 和 c 分别表示附加、删除和修改操作。 uniq uniq 用于去除文本中重复的行。-u 参数可以只显示那些没有被重复过的行。-d 显示有被重复过的行。 cut cut 可以根据一个指定的标记(默认是 tab)来为文本划分列,然后将此列显示,例如: rootstationXX root $ cut f 1 d : /etc/passwd -d 表示以什么分隔符, -f 显示第几列 把 PASSWD 的第一列显示出来,导入到 file 文件里,自己操作一下,然后看下这
11、个文件内容这个命令在以后的服务器架设中很有用处的,一定要记住,-d 后面跟的是分割符号 -f 后面是第几行 然后重定向vim /etc/passwd我们查看 passwd 文件,看他的规律,都是用:分分隔的,所以 -d 后面是:,然后用户是第一列,所以我们用 -f 1,passwd 最后一个标签是该用户默认使用的 shell.那么我要把最后一列复制出来,放到 file2 中。怎么做?cut -f 7 -d : /etc/passwd file2paste paste 将几份文集那按照列的方式拼接。默认情况下,新文件的列分隔符是 tab,也可以用-d参数指定分隔符流编辑器 sed (Stream
12、 Editor) sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间” (pattern space),接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed 主要用来自动编辑一个或多个文件;sed n -n 关闭默认的输出而只输出那些带有 p 标志的行我们今天初步学习下,这个主要是编程使用的。我们介绍他的几个简单用法就行了。如果你要学编程可以自己下来深入研究建立这样一个文件例:查找/tmp/redhat 文件中包括文本 he
13、llo 的所有行。 sed n /hello/p /tmp/redhat 例:查找/tmp/redhat 文件中不包括 hello 的所有行 sed /hello/d /tmp/redhat d:从结果中删除匹配行 s:全部行 g:替换这一行的所有匹配的字符 例:查找/tmp/redhat 文件中“str1“的所有行,并将查找到的行的“str2“替换为“str3“ sed /str1/s/str2/str3/g /tmp/redhat 这些都是高级文本处理的时候用,如果你记不住也没关系,至少你要知道有这个工具,急到用的时候可以在查资料和参数sed 也可以将规则写成一个 sed 文件,使用 f
14、来指定使用的脚本文件。 最后一个参数 也要结合上周我们学习的重定向 先写规则文件: 查找带 h 的行,把 hello 改成 redking 查找带 w 的行,把 world 改成 michael 效果如下: mkdir 创立新目录 rmdir 删除空目录输入、输出、重定向 输入:过滤器的数据来源 标准输入 stdin(0 ):默认是键盘 输出:过滤器的数据去向 标准输出 stdout (1):默认是终端屏幕 错误输出 :报错讯息与标准输出走不同的 I/O 通道 标准错误输出 stderr(2):默认是终端屏幕 重定向:标准输入、输出与错误输出,都可以用特定符号改变数据来源或去向使用“以明确输入
15、源使用 让系统将一次键盘的全部输入,先送入虚拟的 当前文档 ,然后一次性输入 需要一对字母、符号或字符串作为起始终结标识符 可以选择任意符号作为起始终结标识符使用改变数据输出目标 范例: ls l listfile 将当前目录下的文件以长模式显示,然后写入 listfile 文件使用进行输出重定向,文件的原内容会被覆盖 使用可以将输出追加入文件 ll / listfile 错误重定向系统错误与标准输出使用的 I/O 管道不同 默认情况下,系统报错会显示到终端屏幕上 使用 2将报错讯息重定向入一个文件 ls /luoli 2 /dev/null 使用 2将报错讯息追加入一个文件 ls /luoli passwd 2 results使用 | 将前一个过滤器的输出直接送入后一个过滤器的输入 ls l | grep pass 允许多重管道 注意管道前过滤器的输出与管道后过滤器的输入数据类型要匹配ls l | more 分屏显示当前目录下的文件cat file1 file2 拷贝 file1 到 file2 cat file* file 将数个小文件合并成一个文件