6、常用操作命令
文本处理是每一个系统管理员都会频繁接触的任务,其核心内容是相关工具的使用,关键要点在于灵活地结合多个工具去完成任务。
以下所列的文本处理工具中,有些工具比如sed 和 awk 很复杂很强大,有些工具像cat, head, tail 就很单纯,在日常使用中,应侧重于多个工具的配合使用,而不是用一个工具>做完所有的事情。不同的工具有重复的功能,使用哪个工具不是重点,重点是高效地完成任务。 。
cat <-- 显示文件的全部内容,连接多个文件
head <-- 获取文件头部的内容
tail <-- 获取文件尾部的内容
grep <-- 在文件中查找特定的内容
sed <-- 强大的流编辑器,能对文件和行中的内容做增加、删除、改动等操作
awk <-- 模式扫描和处理工具,是一门语言
cut <-- 从行中抽取部分内容
wc <-- 计算数据的字节数,字符数,单词数,行数
sort <-- 排序工具
uniq <-- 去除重复工具
tr <-- 对字符做转换,删除,缩减操作
tac <-- 把文件中的内容按行号反序打印。
rev <-- 把文件中的行左右反转
常用操作命令 - grep
从文件中抽取符合某种格式的行
常用选项:
#-i <-- 忽略大小写
#-l <-- 输出符合条件的文件名
#-n <-- 显示匹配记录的行号
#-c <-- 输出匹配的记录的总数
#-o <-- 输出匹配的那部分,而不是整行
#-w <-- 匹配单词的边界
#-E <-- 使用扩展的正则表达式
#-A <-- 输出下文(after)
#-B <-- 输出上文(before)
#-C <-- 输出上下文(context)
#-R <-- 递归,用于搜索目录下的文件
#-q <-- 不输出结果,常用于条件测试
#-v <-- 显示不符合条件的结果
常用操作命令 - find
文件查找工具find
find 可以按照各种条件查找文件,可以把结果输出到标准输出,或者输出到文件中,也可以直接对找到的文件做更进一步的操作。
常用测试:
1. 文件名/路径名
-name <-- 测试文件的名字,支持shell glob 的表达方式: *, ?, []
-iname <-- 与-name 相似,不分大小写
2. 文件大小
-empty <-- 匹配空文件,或者空目录
-size <-- 测试文件的大小
3. uid/gid (ownership)
-uid <-- 测试文件的uid
-gid <-- 测试文件的gid
-user <-- 测试文件的uid 所对应的用户名
-group <-- 测试文件的gid 所对应的组名
-nouser <-- 匹配不属于任何用户的文件
-nogroup <-- 匹配不属于任何组的文件
4. 文件类型
-type <-- 测试文件的类型
有 7 种类型:
f (regular file)
d (directory)
l (symbolic link)
b (block special)
c (character special)
s (socket)
p (named pipe)
5. 时间标签
分为相对时间和绝对时间
-amin, -mmin, -cmin, -atime, -mtime, -ctime 表达的都是相对时间
-newerat, -newermt, -newerct 表达的是绝对时间
-amin <-- 测试文件的访问时间,单位是分钟
-mmin <-- 测试文件的修改时间,单位是分钟
-cmin <-- 测试文件的inode 修改时间,单位是分钟
-atime (可与 -daystart 配合) <-- 测试文件的访问时间,单位是24小时
-mtime (可与 -daystart 配合) <-- 测试文件的修改时间,单位是24小时
-ctime (可与 -daystart 配合) <-- 测试文件的inode 修改时间,单位是24小时
-newerat <-- 测试文件的访问时间
-newermt <-- 测试文件的修改时间
-newerct <-- 测试文件的inode 修改时间
常用操作命令 - sed
流编辑器,常常用于脚本中
基本格式包含以下部分:
1. 指定范围,不明确指定的话,默认是所有的行,可以是行号,或者正则表达式
2. 指定动作,常用的有d, s, p, i, a
d: delete, 删除
s: substitute, 替换
p: print, 打印
i: insert, 在前面插入
a: append, 在后面添加
===删除某些行
3,$ 代表对第3至最后一行进行操作 <-- 指定范围
d 代表进行删除(delete)操作 <-- 指定动作
[czl@mob tmp]$ cat /etc/passwd | sed '3,$d'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
# cat /etc/passwd | sed '3d' <-- 删除第3行
# cat /etc/passwd | sed '10,20d' <-- 删除第10至第20行
===替换某些字符
# echo hello | sed 's/l/L/' <-- 把小写l 换成大写的L
heLlo <-- 只有第一个l被替换
# echo hello | sed 's/l/L/g' <-- 把小写l 换成大写的L
heLLo <-- 加了g,替换所有的l
# echo "good morning" | sed 's/morning/afternoon/'
good afternoon
常用操作命令 - awk
比较常用的功能就是按照某个分割符分割一行数据,并输出某些字段(列)
===常用的选项:
-F <--- 字段分割符,可以是一个字符,也可以是多个字符
# echo hello world, good morning | awk -F, '{print $1}'
hello world
# echo hello world, good morning | awk -F "good" '{print $2}'
morning
===字段的表示方法:
$0 <--- 整条记录
$1 <--- 第1列(字段)
$2 <--- 第2列(字段)
$n <--- 第n列(字段)
$NF <--- 最后一个列,NF 是number of fields 的意思,就是所有字段的总数
# head -n1 /etc/passwd | awk -F: '{print $1}'
root
# head -n1 /etc/passwd | awk -F: '{print $0}'
root:x:0:0:root:/root:/bin/bash
# head -n1 /etc/passwd | awk -F: '{print $NF}'
/bin/bash
常用操作命令 - crontab
当需要周期性地重复执行任务,或者需要在将来某个时间点执行某个任务时,可以使用定时任务系统中。
在Linux下,定时任务用cron来实现。cron能按照精确到分钟的时间去执行命令,此外,通常还可以设定cron按照每小时,每天,每周,每月,每年的频率去执行任务。cron的定时>任务,如果因为电脑关闭而无法在指定时间执行,开机之后是否会执行,取决于该任务定义在哪个配置文件中,如果是定义在/etc/anacrontab 中,则会执行,否则就不执行。
Linux下定时任务的实现,是依靠一个后台运行的系统服务crond (就是一个后台进程而已),该服务每分钟检查一次,并执行符合条件的任务。
service crond status
/etc/init.d/crond status
===> 设定用户级别的定时任务
格式:
特别注意,用户级别的任务定义当中,没有用户名那一栏,如果像定义系统级别的命令那样,输入用户名,crontab编辑器不会提示格式错误,但是任务不会得到正确的执行。
.---------------- 分钟 (0 - 59)
| .------------- 小时 (0 - 23)
| | .---------- 一个月中的某一天 (1 - 31)
| | | .------- 月份 (1 - 12)
| | | | .---- 一周中的某一天 (0 - 6) (0和7都表示周日)
| | | | |
•* * * * command to be executed
•
普通用户编辑自己的定时任务
crontab -e <--- 编辑当前用户自己的定时任务(使用环境变量EDITOR指定的默认编辑器)
crontab -l <--- 列出当前用户自己所有的定时任务
crontab -r <--- 删除当前用户自己所有的定时任务
作为管理员,root可以设定/调整所有用户的定时任务,命令和上面类似,只是增加了一个-u <username> 的参数
crontab -e -u czl <--- 编辑指定用户的定时任务(使用环境变量EDITOR指定的默认编辑器)
crontab -l -u czl <--- 列出指定用户所有的定时任务
crontab -r -u czl <--- 删除指定用户所有的定时任务