8、Linux-常用命令-搜索

2019-09-24  本文已影响0人  唯老

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 命令搜索时,不要指定过大的搜索范围

补充说明

除了常用的根据名字来查找文件之外还有以下几种方式等:

其他选项

-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之外还有egrepfgrep

语法

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将正则表达式进行了标准化,并把实现方法分为了两大类:

栗子(正则)

#  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'
上一篇 下一篇

猜你喜欢

热点阅读