搜索命令
whereis命令
是搜索系统命令的命令,也就是说whereis不能搜索普通文件,而只能搜索系统命令,其基本信息如下:
- 命令名称:whereis
- 英文原意:locate the binary, source, and manual page files for a command
- 所在路径:/usr/bin/whereis
- 执行权限:所有用户
- 功能描述:查找二进制命令,源文件和帮助文档的命令
[root@localhost~]# where [选项] 命令 选项: -b:只查找二进制命令 -m:只查找帮助文档
which命令
which也是搜索系统命令的命令,和whereis命令的区别在于:
- whereis命令可以在查找到二进制命令的同时,查找到帮助文档的位置;
- 而which命令在查找到二进制命令的同时,如果这个命令有别名,则还可以找到别名命令
- 命令名称:which
- 英文原意:shows the full path of (shell) commands
- 所在路径:/usr/bin/which
- 执行权限:所有用户
- 功能描述:列出命令的所在路径
[root@localhost~]# which ls alias ls='ls --color=auto' /bin/ls
locate命令
locate命令才是可以按照文件名搜索普通文件的命令,其基本信息如下:
- 命令名称:locate
- 英文原意:find files by name
- 所在路径:/usr/bin/locate
- 执行权限:所有用户
- 功能描述:按照文件名搜索文件
[root@localhost~]# locate [选项] 文件名 选项: -i:忽略大小写
- 优点:按照数据库搜索,搜索速度快,消耗资源小。数据库位置/var/lib/mlocate/mlocate.db,可以使用updatedb命令强制更新数据库。
- 缺点:只能按照文件名来搜索文件,而不能执行更复杂的搜索,比如按照权限、大小、修改时间等搜索文件。
在locate查找文件时,一些新建的文件有可能查找不到,因为locate命令只在数据库中查找,所以要更新数据库updatedb。
在linux中,locate命令默认没有必要搜索一些类似网盘、光盘、临时目录的目录。
find命令
find是linux中十分强大的命令,可以通过各种方式在硬盘中搜索文件,其基本信息如下:
- 命令名称:find
- 英文原意:search for files in a directory hierarchy
- 所在路径:/usr/bin/find
- 执行权限:所有用户
- 功能描述:在目录中搜索文件
按照文件名搜索
[root@localhost ~]# find 搜索路径 [选项] 搜索内容 选项: -name: 按照文件名搜索 -iname: 按照文件名搜索,不区分文件名大小写 -inum: 按照 inode 号搜索
按照文件大小搜索
[root@localhost ~]# find 搜索路径 [选项] 搜索内容 选项: -size [+|-]大小: 按照指定大小搜索文件 这里的“+”的意思是搜索比指定大小还要大的文件,“-”的意思是搜索比指定大小还要小的文件。 find 命令的单位: [root@localhost ~]# man find -size n[cwbkMG] File uses n units of space. The following suffixes can be used: 'b' for 512-byte blocks (this is the default if no suffix is used) #这是默认单位,如果单位为 b 或不写单位,则按照 512 Byte 搜索 'c' for bytes #搜索单位是 c,按照字节搜索 'w' for two-byte words #搜索单位是 w,按照双字节(中文)搜索 'k' for Kilobytes (units of 1024 bytes) #按照 KB 单位搜索,必须是小写的 k 'M' for Megabytes (units of 1048576 bytes) #按照 MB 单位搜索,必须是大写的 M 'G' for Gigabytes (units of 1073741824 bytes) #按照 GB 单位搜索,必须是大写的 G
按照修改时间搜索
[root@localhost ~]# find 搜索路径 [选项] 搜索内容 选项: -atime [+|-]时间: 按照文件访问时间搜索 -mtime [+|-]时间: 按照文件数据修改时间搜索 -ctime [+|-]时间: 按照文件状态修改时间搜索 这三个时间的区别我们在 stat 命令中已经解释过了, 这里用 mtime 数据修改时间来举例,重点说说“[+-]”时间的含义。 -5: 代表 5 天内修改的文件。 5: 代表前 5~6 天那一天修改的文件。 +5: 代表 6 天前修改的文件。
按照权限搜索
[root@localhost ~]# find 搜索路径 [选项] 搜索内容 选项: -perm 权限模式: 查找文件权限刚好等于“权限模式”的文件 -perm -权限模式: 查找文件权限全部包含“权限模式”的文件 -perm +权限模式: 查找文件权限包含“权限模式”的任意一个权限的文件
按照所有者和所属组搜索
[root@localhost ~]# find 搜索路径 [选项] 搜索内容 选项: -uid 用户 ID: 按照用户 ID 查找所有者是指定 ID 的文件 -gid 组 ID: 按照用户组 ID 查找所属组是指定 ID 的文件 -user 用户名: 按照用户名查找所有者是指定用户的文件 -group 组名: 按照组名查找所属组是指定用户组的文件 -nouser: 查找没有所有者的文件
🤡 按照所有者和所属组搜索时,“-nouser”选项比较常用,主要用于查找垃圾文件。只有一种情况例外,那就是外来文件。比如光盘和 U 盘中的文件如果是由 Windows 复制的,在Linux中查看就是没有所有者的文件;再比如手工源码包安装的文件,也有可能没有所有者
按照文件类型搜索
[root@localhost ~]# find 搜索路径 [选项] 搜索内容 选项: -type d: 查找目录 -type f: 查找普通文件 -type l: 查找软链接文件
逻辑运算符搜索
[root@localhost ~]# find 搜索路径 [选项] 搜索内容 选项: -a: and 逻辑与 -o: or 逻辑或 -not: not 逻辑非 1)-a:and 逻辑与 find 命令也支持逻辑运算符选项,其中-a 代表逻辑与运算,也就是-a 的两个条件都成立,find 搜 索的结果才成立。举个例子: [root@localhost ~]# find . -size +2k -a -type f #在当前目录下搜索大于 2KB,并且文件类型是普通文件的文件 2)-o:or 逻辑或 -o 选项代表逻辑或运算,也就是-o 的两个条件只要其中一个成立,find 命令就可以找到结果。例 如: [root@localhost ~]# find . -name cangls -o -name bols ./cangls ./bols #在当前目录下搜索文件名要么是 cangls 的文件,要么是 bols 的文件 3)-not:not 逻辑非 -not 是逻辑非,也就是取反的意思。举个例子: [root@localhost ~]# find . -not -name cangls #在当前目录下搜索文件名不是 cangls 的文件
-exec和-ok选项
1)-exec 选项 这里我们主要讲解两个选项“-exec”和“-ok”,这两个选项的基本作用非常相似。我们先来看 看“-exec”选项的格式。 [root@localhost ~]# find 搜索路径 [选项] 搜索内容 -exec 命令 2 {} \; 其次,这个选项的作用其实是把 find 命令的结果交给由“-exec”调用的命令 2 来处理。“{}”就 代表 find 命令的查找结果。 2)-ok 选项 “-ok”选项和“-exec”选项的作用基本一致,区别在于:“-exec”的命令 2 会直接处理,而不询 问;“-ok”的命令 2 在处理前会先询问用户是否这样处理,在得到确认命令后,才会执行。
grep命令
在文件中提取和匹配符合条件的字符串行,其基本信息如下:
- 命令名称:grep
- 英文原意:Globally search a Regular Expression and Print
- 所在路径:/usr/bin/grep
- 执行权限:所有用户
- 功能描述:文件中提取和匹配符合条件的字符串行
[root@localhost ~]# grep [选项] "搜索内容" 文件名 选项: -i: 忽略大小写 -n: 输出行号 -v: 反向查找 --color=auto: 搜索出的关键字用颜色显示
find和grep的区别
- find命令
find命令用于在系统中搜索符合条件的文件名,如果需要模糊查询,则使用通配符进行匹配。搜索时文件名是完全匹配的(find命令可以通过-regex选项,把匹配规则转为正则表达式规则,但是不建议如此)。 - grep命令
grep命令用于在文件中搜索匹配符合要求的字符串,如果需要模糊查询,则使用正则表达式进行匹配,搜索是字符串是包含匹配的。
通配符和正则表达式的区别
通配符:用于匹配文件名,完全匹配
通配符 | 作用 |
? | 匹配一个任意字符 |
* | 匹配0个或任意多个任意字符,也就是可以匹配任何内容 |
[] | 匹配中括号中任意一个字符,例如,[abc]就是匹配abc中的任意一个字符 |
[-] | 匹配中括号中任意一个字符,-代表一个范围,例如,[a-z]表示匹配a-z中的任意一个字符 |
[^] | 逻辑非,表示匹配不是中括号中的一个字符 |
正则表达式:用于匹配字符串,包含匹配
正则符 | 作用 |
? | 匹配一个字符重复0次,或1次 |
* | 匹配前一个字符重复0次,或任意多次 |
[] | 匹配中括号中任意一个字符,例如,[abc]就是匹配abc中的任意一个字符 |
[-] | 匹配中括号中任意一个字符,-代表一个范围,例如,[a-z]表示匹配a-z中的任意一个字符 |
[^] | 逻辑非,表示匹配不是中括号内的一个字符 |
^ | 匹配行首 |
$ | 匹配行尾 |