4、文本操作命令
4.1 touch
touch 已存在的文件,抹平各个时间
touch 不存在的文件,则创建文件
[root@node1 ~]# ll 总用量 4 -rw-------. 1 root root 1201 8月 17 01:33 anaconda-ks.cfg [root@node1 ~]# touch anaconda-ks.cfg [root@node1 ~]# ll 总用量 4 -rw-------. 1 root root 1201 8月 17 17:51 anaconda-ks.cfg [root@node1 ~]# touch names.txt [root@node1 ~]# ll 总用量 4 -rw-------. 1 root root 1201 8月 17 17:51 anaconda-ks.cfg -rw-r--r-- 1 root root 0 8月 17 17:51 names.txt [root@node1 ~]# rm -f names.txt
4.2 cat
直接查看一个文件的内容可以使用cat,tac,nl这几个指令 cat是concatenate的缩写,其功能时间一个文件的内容连续的输出。 该命令适合看行数较少的文件。另外,需要查看一般DOS文件时,可以 通过-A选项来显示换行符和[tab]。
[root@node1 ~]# cat /etc/issue \S Kernel \r on an \m
tac(反向输出):
[root@node1 ~]# tac /etc/issue Kernel \r on an \m \S
与上面的cat命令进行比较,是由最后一行先显示。
tac功能与cat类似,但是是由文件最后一行反向连续输出到屏幕上。
nl(添加行号打印):
nl可以将输出的文件内容自动的加上行号。
[root@node1 ~]# nl /etc/issue 1 \S 2 Kernel \r on an \m [root@node1 ~]# nl -b a /etc/issue 1 \S 2 Kernel \r on an \m 3 [root@node1 ~]# nl -b t /etc/issue 1 \S 2 Kernel \r on an \m [root@node1 ~]#
4.3 head
格式:head [-n number] 文件
默认获取前10行(省略 -n number)
number>0,取出前面number行。
number<0,除了最后number行外的所有行。
4.4 tail
命令格式:tail [ -n number] 文件
选项与参数:
-n:后面接数字,代表显示几行的意思
-f:表示持续侦测后面文件内容的改变,知道按下Ctrl+c才会结束tail 的侦测。
#默认情况下显示最后10行: [root@node1 ~]# tail /etc/profile #如果先要显示最后20行,就要如下: [root@node1 ~]# tail -n 20 profile #检测文件变化,一般用于边测试,边查看日志 [root@node1 ~]# tail -f profile
4.5 管道|
管道左侧的输出作为右侧的输入
[root@node1 ~]# ps aux |grep ssh [root@node1 ~]# yum list |grep mysql 如何显示文件中间的几行? [root@node1 ~]# head -n 20 profile |tail -n 10 可以省略为: [root@node1 ~]# head -20 profile |tail -10 #显示/etc/profile文件中包含if关键字的行 [root@node1 ~]# grep if /etc/profile
echo "/" | ls -l 显示内容错误(不是预期的结果),因为ls不需要输 入,只需要参数
4.6 xargs
将前面输出作为后面命令的参数
1 echo "/" | xargs ls -l
4.7 cut
cut:显示切割的行数据
- s:不显示没有分隔符的行
- d:指定分隔符对源文件的行进行分割
- -f 选定显示哪些列
m-n m列到n列
-n 第一列到n列
m- 第m列到最后一列
n 第n列
x,y,z获取第x,y,z列
案例实战:
#以:作为分隔符,切割passwd,输出从第3个字段到第5个字段 [root@node1 ~]# cut -d ":" -f 3-5 /etc/passwd 0:0:root 1:1:bin 2:2:daemon 3:4:adm 4:7:lp ...... #输出前两列内容: [root@node1 ~]# cp /etc/passwd ./ [root@node1 ~]# cut -d ":" -f -2 passwd root:x bin:x daemon:x adm:x ...... #输出字段3到最后一个字段 [root@node1 ~]# cut -d ":" -f 3- passwd 0:0:root:/root:/bin/bash 1:1:bin:/bin:/sbin/nologin 2:2:daemon:/sbin:/sbin/nologin 3:4:adm:/var/adm:/sbin/nologin ...... #指定输出的分隔符: [root@node1 ~]# cut -d ":" -f 3- --outputdelimiter=".." passwd 0..0..root../root../bin/bash 1..1..bin../bin../sbin/nologin 2..2..daemon../sbin../sbin/nologin ...... #输出第7个字段 [root@node1 ~]# cut -d ":" -f 7 passwd /bin/bash /sbin/nologin /sbin/nologin ...... #如果有的行没有分隔符,则输出会包含脏数据 [root@node1 ~]# echo helloworld 1>> passwd [root@node1 ~]# [root@node1 ~]# cut -d ":" -f1 passwd root bin ...... ntp helloworld #可以使用-s选项:不打印没有分隔符的行: [root@node1 ~]# cut -sd ":" -f1 passwd root bin daemon adm ...... #显示1,3,7列 [root@node1 ~]# cut -sd ":" -f 1,3,7 passwd #显示1,3,7列 -- output-delimiter指定输出的时候 的各字符分隔符 [root@node1 ~]# cut -sd ":" -f 1,3,7 -- output-delimiter="|" passwd root|0|/bin/bash bin|1|/sbin/nologin ......
4.8 sort
sort排序:字典序和数值序
- n:按数值排序
- r:倒序 reverse
- t:自定义分隔符
- k:选择排序列
- f:忽略大小写
sort.txt内容如下
a b 1 dfdsa fdsa 15 fds fds 6 fdsa fdsa 8 fda s 9 aa dd 10 h h 11
案例实战:
#1.默认字典序排序 [root@node1 ~]# sort sort.txt aa dd 10 a b 1 dfdsa fdsa 15 fda s 9 fdsa fdsa 8 fds fds 6 h h 11 #2指定字段分隔符,按照第2个字段的字典序排序 [root@node1 ~]# sort -t ' ' -k 2 sort.txt a b 1 aa dd 10 fds fds 6 dfdsa fdsa 15 fdsa fdsa 8 h h 11 fda s 9 #3.指定字段分隔符,按照第3个字段字典序排序 [root@node1 ~]# sort -t ' ' -k 3 sort.txt a b 1 aa dd 10 h h 11 dfdsa fdsa 15 fds fds 6 fdsa fdsa 8 fda s 9 #4.指定字段分隔符,按照第3个字段的数值序排序 [root@node1 ~]# sort -t ' ' -k 3 -n sort.txt a b 1 fds fds 6 fdsa fdsa 8 fda s 9 aa dd 10 h h 11 dfdsa fdsa 15 #可以简短 [root@node1 ~]# sort -t ' ' -nk 3 sort.txt a b 1 fds fds 6 fdsa fdsa 8 fda s 9 aa dd 10 h h 11 dfdsa fdsa 15 #指定字段分隔符,按照第3个字段的值数值倒序 [root@node1 ~]# sort -t ' ' -nrk 3 sort.txt dfdsa fdsa 15 h h 11 aa dd 10 fda s 9 fdsa fdsa 8 fds fds 6 a b 1
4.9 sed
sed:行编辑器
sed [选项] 'AddressCommand' file…
[选项]
-i:直接修改源文件
-r:表示使用扩展正则表达式
'AddressCommand'
d:删除符合条件的行
a\string:在指定的行后追加新行,内容为string
i\string:在指定行前添加新行,内容是string
s/string1/string2/:查找并替换,默认只替换每行第一次模式匹 配到的字符串
g:行内全局替换
i:忽略大小写 \1\2
4.10 awk
awk概述:
是一个强大的文本分析工具
相对于grep查找,sed编辑,awk在对数据分析并生成报告时更为强大
把文件逐行读入,以空格和制表符作为默认分隔符将每行切片,切开的部分再进行各种分析处理。
awk -F [':'] '{pattern + action}' filename
支持自定义分隔符
支持正则表达式匹配
支持自定义变量,数组 a[1] a[tom] map(key)
支持内置变量
NF 浏览记录的域的个数(列数)
NR 已读的记录数(行号)
支持函数
print、split、substr、sub、gsub
支持流程控制语句,类C语言
if、while、do/while、for、break、continue
4.11 wc
wc [选项列表]... [文件名列表]...
对每个文件输出行、单词、和字节统计数,如果指定了多于一个文 件则还有一个行数的总计。
选项:
-c, --bytes, --chars(字符) 输出字节统计数。
-l, --lines 输出换行符统计数。
-L, --max-line-length 输出最长的行的长度。
-w, --words 输出单词统计数。
--help 显示帮助并退出
--version 输出版本信息并退出
#1.默认字典序排序 [root@node1 ~]# sort sort.txt aa dd 10 a b 1 dfdsa fdsa 15 fda s 9 fdsa fdsa 8 fds fds 6 h h 11 #2指定字段分隔符,按照第2个字段的字典序排序 [root@node1 ~]# sort -t ' ' -k 2 sort.txt a b 1 aa dd 10 fds fds 6 dfdsa fdsa 15 fdsa fdsa 8 h h 11 fda s 9 #3.指定字段分隔符,按照第3个字段字典序排序 [root@node1 ~]# sort -t ' ' -k 3 sort.txt a b 1 aa dd 10 h h 11 dfdsa fdsa 15 fds fds 6 fdsa fdsa 8 fda s 9 #4.指定字段分隔符,按照第3个字段的数值序排序 [root@node1 ~]# sort -t ' ' -k 3 -n sort.txt a b 1 fds fds 6 fdsa fdsa 8 fda s 9 aa dd 10 h h 11 dfdsa fdsa 15 #可以简短 [root@node1 ~]# sort -t ' ' -nk 3 sort.txt a b 1 fds fds 6 fdsa fdsa 8 fda s 9 aa dd 10 h h 11 dfdsa fdsa 15 #指定字段分隔符,按照第3个字段的值数值倒序 [root@node1 ~]# sort -t ' ' -nrk 3 sort.txt dfdsa fdsa 15 h h 11 aa dd 10 fda s 9 fdsa fdsa 8 fds fds 6 a b 1
4.12 vi/vim编辑器的使用
模式切换相关
i 进入编辑模式
a 在选定字符后插入字符
o 在当前行下添加新行
O 在当前行上添加新行
I 在当前行首进入编辑模式
A 在当前行末进入编辑模式
ESC 退出编辑模式
: 末行模式
ESC,ESC 退出末行模式
ZZ 在命令模式保存并退出编辑器
:wq 保存并退出编辑器
:w 保存编辑器内容
:q! 不保存退出编辑器
移动光标
h左j下k上l右
w 移动到下一个单词的词首
e:跳至当前或下一个单词的词尾
b:跳至当前或下一个单词的词首
0:绝对行首
^:行首的第一个非空白字符
$:绝对行尾
G:文档末尾
3G:第三行
gg:文档开头
翻页
ctrl-f 向下翻页 forward
ctrl-b 向上翻页 backward
删除替换
x:删除光标位置字符
3x:删除光标开始3个字符
r:替换光标位置字符
dw 删除单词
dd 删除整行
D:删除光标所在位置到行尾
复制粘贴
yw 复制单词
yy 复制1行
nyy 复制n行,n是数字
p 粘贴 paste P
撤销与重做
u:撤销
undo ctrl+r:重做 操作结束后使用u退回到上次操作,则ctrl+r重做
. 重复上一步操作
set:设置
:set nu number 显示行号
:set nonu nunumber 取消行号的显示
:set readonly 设置只读
查找
:/after 向下查找 n 下一个,N 上一个
?向上查找
:! 执行命令
查找并替换
s/str1/str2/gi
/:临近s的第一个为边界字符:/ @ #(为了防止内容和边界字符重复,可以使用@和#做边 界字符)
g:一行内全部替换
i:忽略大小写
末行操作
.:当前光标行
+n:偏移n行
$:末尾行,$-3
%:全文 :%d 删除全文
:.,$-1d 从当前行删除到倒数第二行
:.,+3d 从当前行再往下数三行删除
:.,13d 从当前行到第13行删除
5、文件压缩与打包
压缩:指通过某些算法,将文件尺寸进行相应的缩小,同时不损失 文件的内容。 比如:zip、gzip、tar。
打包:指将多个文件(或目录)合并成一个文件,方便传递或部 署。比如:tar
5.1 zip与unzip
zip [选项] XXX.zip 将要压缩的内容 :压缩文件和目录的命令
选项说明 -r 压缩目录
unzip [选项] XXX.zip :解压缩文件
选项说明 -d 指定解压后文件的存放目录
注意:zip 压缩命令在window/linux都通用,可以压缩目录且保留 源文件。
5.2 gzip和gunzip
gzip 文件 :压缩文件,只能将文件压缩为*.gz文件
gunzip 文件.gz :解压缩文件命令
注意: (1)只能压缩文件不能压缩目录 (2)不保留原来的文件
5.3 tar
压缩文件或打包文件常见的扩展名: *.tar.gz, *.tar.bz2;linux系统 一般文件的扩展名用途不大,但是压缩或打包文件的扩展名是必须 的,因为linux支持的压缩命令较多,不同的压缩技术使用的压缩算 法区别较大,根据扩展名能够使用对应的解压算法。
常见文件扩展名:
*.tar.gz tar程序打包的文件,并且经过 gzip 的压缩
*.tar.bz2 tar程序打包的文件,并且经过 bzip2 的压缩
tar命令,选项与参数:
-c :建立打包文件
-t :查看打包文件的内容含有哪些文件
-x :解打包或解压缩的功能,可以搭配-C(大写)在特定到特定目录解开
-j :通过bzip2的支持进行压缩/解压缩:此时文件最好为 *.tar.bz2
-z :通过gzip的支持进行压缩/解压缩:此时文件最好为 *.tar.gz
-v :在压缩/解压缩的过程中,将正在处理的文件名显示出来
-f filename:-f 后面跟处理后文件的全名称(路径+文件名+后缀名)
-C 目录:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个 选项
-p :保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件
注意 -c, -t, -x 不可同时出现在一串指令列中
打包与压缩:
tar –zcvf [/路径/]filename.tar.gz 被压缩的文件或目录
tar –jcvf [/路径/] filename.tar.bz2 被压缩的文件或目录
查询:
tar –ztvf [/路径/] filename.tar.gz
tar –jtvf [/路径/] filename.tar.bz2
备份:
tar –zpcv –f [/路径/]filename.tar.gz 被备份文件或目录
tar –jpcv –f [/路径/]filename.tar.bz2 被备份文件或目录
解压到当前目录:
tar –jxv –f [/路径/] filename.tar.bz2
tar –zxv –f [/路径/] filename.tar.gz
解压到指定目录:
tar -jxv -f [/路径/] filename.tar.bz2 –C 指定目录
tar -zxv -f [/路径/] filename.tar.gz -C 指定目录
注意:filename前带路径表示该路径下的,反之表示当前目录下
案例实战:
#将/etc压缩到/tmp/下etc01.tar.gz #方式一:filename.tar.gz前不带路径 [root@node1 ~]# cd /tmp/ [root@node1 tmp]# tar -zcvf etc01.tar.gz /etc/ #方式二:filename.tar.gz前带路径 [root@node1 ~]# tar -zcvf /tmp/etc01.tar.gz /etc #将/tmp/下etc01.tar.gz解压到/tmp/目录下 [root@tedu ~]# cd /tmp/ #首先进入对应目录 [root@tedu tmp]# tar -zxvf etc01.tar.gz #将/tmp/下etc01.tar.gz解压到/usr/目录下 [root@node1 tmp]# tar -zxvf etc01.tar.gz -C /usr #或者 [root@node1 tmp]# tar -zxvC /usr -f etc01.tar.gz