1、find
作用
用来查找指定目录下文件。如果不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示
语法
find [路径][选项] [文件名或者文件表达式]
选项
选项 | 说明 |
---|---|
-name | 按照文件名搜索 |
-iname | 按照文件名搜索,不区分文件名大小,中文无效 |
-depth | 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找 |
-maxdepth | 表示至多查找到开始目录的第几层子目录。 |
-mindepth | 表示至少查找到开始目录的第几层子目录。 |
栗子
# 基本使用 在指定路径下 根据名字查询nginx
find /etc -name nginx
/etc/ufw/applications.d/nginx
/etc/nginx
/etc/logrotate.d/nginx
/etc/init.d/nginx
/etc/default/nginx
注意
find 命令是直接在硬盘中进行搜索的,如果指定的搜索范围过大,find命令就会消耗较大的系统资源,导致服务器压力过大。所以在使用 find 命令搜索时,不要指定过大的搜索范围。
补充说明
除了常用的根据名字来查找文件之外还有以下几种方式等:
- 按照所有者和所属组搜索
- 按照文件类型搜索
- 按照权限搜索
- 按照修改时间搜索
- 按照文件大小搜索
同时还支持简单的逻辑运算符 - -a:and逻辑与
- -o:or逻辑或
- -not:not逻辑非
其他选项
-exec选项与-ok选项
find [路径][选项] [文件名] [ -exec -ok command ] {} \;
稍微需要注意一下的是{}"和";"是标准格式,只要执行"-exec"选项,这两个符号必须完整输入
例如执行一条查询权限是756的的文件 并且列出该文件的详细信息
find.-perm 756 -exec ls -l {}\;
但当我们一些不安全的操作,比如删除的时候
find.-name *.log -ok rm -rf{}\;
会提示我们的是否删除文件,而-exec会直接删除不会给任何提示
2、grep
作用
在指定文件中搜索特定的内容,并将含有这些内容的行标准输出。grep全称是Global Regular Expression Print全局正则表达式。除了grep之外还有egrep、fgrep
语法
grep [参数]... 匹配表达式 [查找的文件]...
常用选项
参数 | 说明 |
---|---|
-n | 显示匹配内容的行号 |
-i | 不区分大小写 |
-o | 指数出匹配的内容 |
-c | 计算找到‘搜索字符串’的行数 |
-r | 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作 |
-v | 反向选择,即没有‘搜索字符串’内容的行 |
-l | 列出文件内容符合指定的范本样式的文件名称 |
-R | 查找所有文件包含子目录 |
-E | 扩展 grep,即 egrep,可以使用扩展正则表达式 |
-F | 扩展grep,即 fgrep,不支持正则表达式,只能使用普通字符 |
栗子(基本使用)
# 1.在passwd文件查询
➜ grep root /etc/passwd
root:x:0:0:root:/root:/usr/bin/zsh
# 2.显示所在文件的行号
➜ grep -n root /etc/passwd
1:root:x:0:0:root:/root:/usr/bin/zsh
# 3.查询忽略大小写并显示行号
➜ grep -in resolver /etc/passwd
21:systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false
# 4.查询时忽略大小写并显示统计行数
➜ grep -ic s /etc/passwd
31
# 5.查询文件夹中 含有backup的文件
➜ grep -r backup /etc
/etc/passwd-:backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
/etc/deluser.conf:# target directory for the backup file
/etc/deluser.conf:# ... of a user to backup
/etc/shadow:backup:*:17212:0:99999:7:::
/etc/nanorc:# set backup
...省略
# 6.找出内容中含有ssh的文件都有哪些
#
➜ pwd
/var/log
➜ grep -l ssh *.log
auth.log
cloud-init.log
# 如果不想包含ssh使用-L
# 配合其他命令使用
cat app.log | grep -c "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}"
正则表达式
世界上的正则表达式种类繁多且复杂,面对这样的状况,UNIX将正则表达式进行了标准化,并把实现方法分为了两大类:
- 基本正则表达式(BRE)
- 扩展正则表达式(ERE)
在基本正则表达式只支持^ $ . [ ] *
这些是元字符,所有其他的字符都被识别为普通字符。
而在扩展正则表达式中,增加了() {} ? 和 + |
等元字符。
正则元字符
| 字符集 | 说明 | 案例 |
| ------ | ---------------------------------------- | ------------------------------------------------------------ |
|^
| 行的开始 | 如:'^a' 匹配所有以 a 开头的行 |
| $ | 行的结束 | 如:'c' 匹配所有以 c 结尾的行 |
| . | 匹配一个非换行符的字符 | 如:'gr.p' 匹配 gr 后接一个任意字符,然后是 p |
| * | 匹配零个或多个先前字符 | 如:' grep' 匹配所有一个或多个空格后紧跟 grep 的行。 . 一起用代表任意字符 |
| [ ] | 匹配一个指定范围内的字符 | 如:[a-z0-9]匹配任意一个包含小写字母的a-z 数字0-9 |
| [^ ] | 匹配一个不在指定范围内的字符 | 如:'['^'A-C]rep匹配不包含 A-C 的一个字母开头,紧 |
| (..) | 标记匹配字符 | 如:'(love)',love 被标记为1 |
| < | 锚定单词的开始 | 如:'<grep' 匹配包含以grep开头的单词的行 |
| > | 锚定单词的结束 | 如:'grep>' 匹配包含以grep结尾的单词的行 |
| x{m} | 连续重复字符 x,m 次 | 如:'o{5}' 匹配包含连续5个o的行 |
| x{m,} | 连续重复字符 x,至少 m 次 | 如:'o{5,}' 匹配至少连续有5个 o 的行 |
| x{m,n} | 连续重复字符 x,至少 m 次,不多于 n 次 | 如:'o{5,10}' 匹配连续 5-10 个 o 的行 |
| \w | 匹配一个文字和数字字符也就是 [A-Za-z0-9] | 如:'G\wp' 匹配以 G 后跟零个或多个文字或数字字符,然后是p |
| \W | w 的反置形式,匹配一个非单词字符 | 如:点号句号等。\W 则可匹配多个 |
| \b | 单词锁定符 | 如: '\bgrep\b' 只匹配 grep,即只能是 grep 这个单词,两边均为空格 |
| + | 1次或多次 | s+能匹配 "s" 以及 ss和"ssh" |
| * | 0次或多次 | s+能匹配 "ss" 以及 "ssh" |
| ? | 0次或者一次 | sh?能匹配 "sh" 以及 "sha" |
栗子(正则)
# 1.查询已root开头的
➜ grep -c '^root' /etc/passwd
0
# 2. 包含以s开头a-z的
➜ egrep -c 's[a-z]' /var/log/auth.log
2519
# 3. 包含以s开头a-z的
➜ egrep -c 's[a-z]+' /var/log/auth.log
0
# 4. 包含以s开头a-z的
➜ egrep -c 's[a-z]*' /var/log/auth.log
2519
# 5. 包含以s开头a-z A-Z 0-9 _的信息
➜ egrep -c 's\w+' /var/log/auth.log
2521
grep egrep fgrep特点
命令 | 是否支持正则 | 支持的正则类型 |
---|---|---|
grep | 是 | 基本正则表达式 |
egrep | 是 | 扩展正则表达式 |
fgrep | 否 | 不支持 |
3、sed
作用
stream editor 的缩写,中文称之为“流编辑器”。主要包括添加,删除,替换,读等操作
语法
sed [选项] [脚本命令] 文件名
参数
选项 | 说明 |
---|---|
-e | 脚本命令,该选项会将其后跟的脚本命令添加到已有的命令中。 |
-f | 脚本命令文件,该选项会将其后文件中的脚本命令添加到已有的命令中。 |
-n | 默认情况下,sed 会在所有的脚本指定执行完毕后,会自动输出处理后的内容,而该选项会屏蔽启动输出,需使用 print 命令来完成输出。 |
-i | 此选项会直接修改源文件,要慎用。 |
命令参数
命令参数 | 说明 |
---|---|
a | 新增, a 的后面可以接字串,而这些字串会在新的一行 |
c | 取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行 |
d | 删除,因为是删除啊,所以 d 后面通常不接任何操作 |
i | 插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行) |
p | 打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起 |
s | 替换,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法 |
栗子
➜ command cat 1.txt
Don't talk to me about feelings,
feelings hurt money
Save water
Shower with your girlfriend
# 1. 追加字符串到末尾 但不会修改原文件
➜ sed -e 'a no zuo no die' 1.txt
Don't talk to me about feelings,
feelings hurt money
Save water
Shower with your girlfriend
# 这个是新追加的
no zuo no die
# 第1行换行到末尾 但不会修改原文件
sed -e '1a\no zuo no die' 1.txt
# 2. 删除第一行
sed '1d'
# 删除第1-2行
sed '1,2d'
# 删除第3行 到最后一行
sed '3,$d'
网友评论