find
在指定目录下查找文件和目录
基本语法:find [路径] [ 参数] [查找条件]
常用参数
-name 根据文件或目录的名称查找
find /path -name test.txt
-iname 与name类似,但忽略大小写
-size 根据文件大小查找
find /path -size 10M
-user 根据文件所有者查找
find /path -user root //查找root用户下的所有文件
-type 根据文件类型查找
find /path -type d
f:普通文件
d:目录
l:符号链接
p:命名管道
b:块设备文件
c:字符设备文件
与正则表达式结合
find /path -regex '.*test.*\.txt'
查找以test开头,.txt结尾的文件
与其他命令结合
统计特定文件数量
返回文件的总数
find /path -name '*.txt' | wc -l
whereis
查找可执行文件、源代码和手册页的位置,适用于寻找安装路径
whereis [选项] 文件名
eg:查找ls位置的命令
表示ls的可执行文件在/usr/bin/ls
手册页在/usr/share/man/man1/ls.1.gz
[root@localhost ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
-b:只查找可执行文件的位置
-m:只查找手册页文件的位置
-s:只查找源代码文件的位置
locate
根据预构建的数据库快速查找文件,与find比较,他不会实时更新文件系统,而是根据已经建立的数据库进行查找。查找速度更快。
locate [选项] 文件名
-i:忽略大小写查找文件
-r:使用正则表达式查找文件
-c:只显示文件的数量,不列出具体文件
更新locate的数据库
sudo updatedb
这个命令会遍历本地系统文件,将这些信息存储到本地数据库。
是不需要联网的,只是在本地系统中收集文件路径信息
不分大小写查找带有name字段的文件
统计数量
使用正则表达式
高级查询(grepawk、sed)
grep:擅长查找匹配行
awk:擅长处理数据的列
sed:擅长逐行编辑文件
grep
用于文本搜索,根据正则表达式或文本模式查找文件或标准输入中的匹配行
grep [选项] "要查找的关键字或正则表达式" 文件名(在这个文件里搜索)
常用:
- -A:在输出中显示匹配的行,并显示匹配行后面的n行
- -B:在输出中显示匹配的行,并显示匹配行前面的n行
- -C:在输出中显示匹配的行,并显示匹配行前后的n行
grep -A n "error" file.txt n为行数
grep -B n "error" file.txt
grep -C n "error" file.txt
- -i:忽略大小写
- -n:显示匹配的行号,直接定位
- -l:只显示包含字段的文件名
- -w:精确匹配到单词
- -x:匹配整行
- -c:计算匹配的行数
- -r:递归查找
grep -r "error" /var/log/
在/var/log/目录及其子目录下递归查找error
- -F:使用固定字符串搜索
awk
awk '/关键字/{print $n}' 文件名
/关键字/:表示只在关键字所在行执行操作,不加,则对所有行执行操作
{print $n}:$n表示要输出的第n列,列的分隔符默认为空格或tab
$1:表示第一列
$0:表示每行的所有内容
常用选项
- -F:定义分隔符
awk -F, '{print $1}' file.csv
指定分隔符为,
输出每行第一列
- -v:定义外部变量
awk -v var="value" '{print var, $1}' file.txt
-v var="value":将外部变量var移到awk中并赋值为“value”
{print var, $1}:输出var的值和文件中的每行的第一列
- -f:从脚本文件中读取awk脚本
eg:输出unname -r中的3.10.0
[root@localhost ~]# uname -r
3.10.0-957.el7.x86_64
1.将‘-’作为分隔符,输出第一列
[root@localhost ~]# uname -r | awk -F'-' '{print $1}'
3.10.0
2.将‘-’转换为空格,将空格作为分隔符,输出第一列
[root@localhost ~]# uname -r | tr '-' ' '
3.10.0 957.el7.x86_64
[root@localhost ~]# uname -r | tr '-' ' ' | awk '{print $1}'
3.10.0
sed
用于处理文件配置、安全策略修改和批量修改系统漏洞时非常有效
可以防止命令注入,过滤用户输入中的危险字符,防止命令注入攻击
sed [选项] '操作命令' 文件
常用选项
- -e:允许在一条命令中指定多个sed操作
- -n:禁止自动输出每一行,只有通过显式p命令才会输出
- -i:在文件中直接进行修改
- -r:启用扩展正则表达式
- -f:从文件中读取sed脚本
常用命令
- 替换(s命令)
s/old/new/:将匹配的文本old替换为new
默认值替换每行的第一个匹配项
- 全局替换
使用g选项
sed 's/old/new/g' file.txt
- 替换并直接修改文件
sed -i 's/old/new/g' file.txt
-i 将替换的内容写入文件,修改原文件
- 只替换某些行
sed '2s/old/new/g' file.txt
只替换文件中的第二行
sed '2,8s/old/new/g' file.txt
替换文件中的2-8行
- 删除
删除特定行
sed '2d' file.txt //删除第二行
删除多行
sed '2,4d' file.txt //删除2到4行
删除空行
sed '/^$/d' file.txt //^$表示空行
- 插入与追加
i:在指定行前插入内容
a:在指定行前追加内容
sed '3i\new line' file.txt //插入
sed '3a\new line' file.txt //追加
- 查找和显示
p:打印匹配的行
sed会默认打印出所有行,使用-n可以抑制默认打印的输出
sed -n '/root/p' /etc/passwd
打印包含root的行
- 替换命令中的其他标志
g:全局替换
p:打印被替换的行
i:忽略大小写
sed 's/old/new/i' file.txt
sed 's/old/new/p' file.txt
- 使用多个sed
sed -e 's/old/new/' -e 's/kkk/lll/' file.txt
同时将old变为new,将kkk变为lll