1、whereis
whereis 是搜索系统命令的命令,也就是说 whereis 不能搜索普通文件,只能搜索系统命令
2、which
which 也是搜索系统命令的命令,和 whereis 命令区别在于,如果这个命令有别名,则还可以找到别名
3、locate
可以按照文件名搜索文件
- 优点:按照数据库搜索,搜索速度快,消耗资源小。数据库位置:
/var/lib/mlocate/mlocate.db
- 缺点:只能按照文件名来搜索文件,而不能执行更复杂的搜索,比如按照 权限、大小、修改时间等搜索文件
说明1:
关于执行locate时报错“locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory”的处理
答:
locate是通过生成一个文件和文件夹的索引数据库,当用户在执行loacte命令查找文件时,它会直接在索引数据库里查找,若该数据库太久没更新或不存在,此时执行 updatedb ,更新下数据库即可
说明2:
你在 /tmp 下建一个文件,你用 locate 命令是搜不到的,原因是它在配置文件里面配置了禁止搜索 /tmp 目录下的文件
vim /etc/updatedb.conf
PRUNE_BIND_MOUNTS="yes" #开启搜索限制,也就是让这个配置文件生效
PRUNEFS="......" # 在 locate 执行搜索时,禁止搜索这些文件系统类型
PRUNENAMES="......" # 在 locate 执行搜索时,禁止搜索带这些扩展名的文件
PRUNEPATHES="......" # 在 locate 执行搜索时,禁止搜索这些系统目录
4、find
① 按照文件名搜索
find 搜索路径 [选项] 搜索内容
选项:
-name
:按照文件名搜索
-iname
:按照文件名搜索,不区分文件名大小写
-inum
:按照 inode 号搜索
对于使用 inode 号搜索,这里说一下:
[hepingfly@hepingfly ~]$ touch abc.txt
[hepingfly@hepingfly ~]$ ll
总用量 0
-rw-rw-r--. 1 hepingfly hepingfly 0 2月 20 23:25 abc.txt
[hepingfly@hepingfly ~]$ ls -i abc.txt # 使用这个命令可以根据文件名搜出这个文件名对应的 inode 号
131081 abc.txt
[hepingfly@hepingfly ~]$ find /home -inum 131081
find: “/home/lost+found”: 权限不够
/home/hepingfly/abc.txt
#有了 inode 号,就可以使用 find 命令查找文件的位置了
② 按照文件大小搜索
find 搜索路径 [选项] 搜索内容
选项:
-size [+|-]大小
:按照指定大小搜索文件
"+" 的意思是搜索比指定大小还要大的文件,"-" 的意思是搜索比指定文件还要小的文件
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 字节搜索
‘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 bytesM # 按照 GB 单位搜索,必须是大写 G
例子:
# 下面这条命令的意思是在 /home 目录下搜索 5 * 512 字节的文件
[root@hepingfly hepingfly]# find /home/ -size 5
#下面这条命令的意思是在 /home 目录下搜索大于 10M 的文件
[root@hepingfly hepingfly]# find /home/ -size +10M
③ 按照修改时间搜索
Linux 中的文件有访问时间(atime)、数据修改时间(mtime)、状态修改时间(ctime)这三个时间,我们也可以按照时间来搜索文件
find 搜索路径 [选项] 搜索内容
选项:
-atime [+|-]时间
:按照文件访问时间搜索
-mtime [+|-]时间
:按照文件数据修改时间搜索
-ctime [+|-]时间
:按照文件状态修改时间搜索
注:time 的单位是 “天”,min 单位是分钟
重点说一下 「+|-」的含义:
-5
:代表 5 天内修改的文件5
:代表前 5 ~ 6 天那一天修改的文件+5
:代表 6 天前修改的文件
# 在 /home 目录下搜索 5 天内修改过的文件
[root@hepingfly hepingfly]# find /home -mtime -5
/home
/home/lost+found
/home/hepingfly
/home/hepingfly/.lesshst
/home/hepingfly/abc.txt
/home/hepingfly/.mozilla
④ 按照权限搜索
find 搜索路径 [选项] 搜索内容
选项:
-perm 权限模式
:查找文件权限刚好等于 "权限模式" 的文件
-perm -权限模式
:查找文件权限全部包含 "权限模式" 的文件
-perm +权限模式
:查找文件权限全部包含 "权限模式" 的任意一个权限的文件
# 查找 /home 目录下权限是 644 的文件
[root@hepingfly hepingfly]# find /home -perm 644
[root@hepingfly hepingfly]# ll
总用量 0
-rw-rw-r--. 1 hepingfly hepingfly 0 2月 20 23:25 abc.txt # 权限是 664
-rw-------. 1 hepingfly hepingfly 0 2月 21 00:37 bcd.txt # 权限是 600
# "+" 表示 600 三组权限只要有一组比 444 三组权限中的一组大,就会搜索出来
[root@hepingfly hepingfly]# find /home -perm +444
/home/hepingfly/bcd.txt
/home/hepingfly/abc.txt
# "-" 表示 600 三组权限都要比 444 三组权限大或者等于,才会搜索出来
[root@hepingfly hepingfly]# find /home -perm +444
/home/hepingfly/abc.txt
⑤ 按照所有者和所属组搜索
find 搜索路径 [选项] 搜索内容
选项:
-uid 用户ID
:按照用户 ID 查找所有者是指定 ID 的文件
-gid 组ID
: 按照用户组 ID 查找所属组是指定 ID 的文件
-user 用户名
:按照用户名查找所有者是指定用户的文件
-group 组名
:按照组名查找所属组是指定用户组的文件
-nouser
:查找没有所有者的文件
按照所有者和所属组搜索时,"-nouser" 选项比较常用,主要用于查找垃圾文件。只有一种情况例外,那就是外来文件。比如,光盘和 U盘中的文件如果是由 Windows 复制的,在 Linux 查看就是没有所有者的文件,再比如手工源码包安装的文件,也有可能没有所有者
# 在 /home 目录下搜索用户名是 hepingfly 的文件
[root@hepingfly hepingfly]# find /home -user hepingfly
⑥ 按照文件类型搜索
find 搜索路径 [选项] 搜索内容
选项:
-type d
:查找目录
-type f
:查找普通文件
-type l
:查找软链接文件
⑦ 逻辑运算符
find 搜索路径 [选项] 搜索内容
选项:
-a
:and 逻辑与
-o
:or 逻辑或
-not
:not 逻辑非
1、逻辑与
find 命令也支持逻辑运算符选项,其中 -a 代表逻辑与运算,也就是 -a 的两个条件都成立,find 搜索的结果才成立
[root@hepingfly 桌面]# find /home/ -size -20M -a -type d
# 上面这条命令的意思就是:在 /home 目录下搜索小于 20M ,并且文件类型是目录
2、逻辑或
-o 代表逻辑或运算,也就是 -o 的两个条件只要其中一个成立,find 命令就可以找到结果
# 在 /home 目录下搜索名称是 abc.txt 的或者名称是 bcd.txt 的
[root@hepingfly hepingfly]# find /home -name abc.txt -o -name bcd.txt
/home/hepingfly/bcd.txt
/home/hepingfly/abc.txt
3、逻辑非
-not 是逻辑非,也就是取反的意思
# 在 /home/hepingfly 目录下搜索名称不是 abc.txt 的文件
[root@hepingfly hepingfly]# find /home/hepingfly/ -not -name abc.txt
#或者上面的命令你这么写也可以:
find /home/hepingfly/ ! -name abc.txt # 注意 ! 左右两侧一定要有空格
⑧ 其他选项
1、-exec 选项
find 搜索路径 [选项] 搜索内容 -exec 命令2 {} ;
注:
只要你写了 exec 命令,这个;
就是必须要写的,这是格式
上面命令的作用就是把 find 命令查出来的结果放到大括号里面,交给由 -exec 调用的命令2 来处理。"{}" 就代表 find 命令的查找结果
# 这条命令的意思就是,把 /home 目录下小于 20M 的文件查出来的结果放到大括号里,然后交给 ls -l 命令去执行
find /home -size -20M -exec ls -l {} ;
2、-ok 选项
-ok 选项和 -exec 选项的作用基本一致,区别在于:-exec 的命令2 会直接处理,而不询问。-ok 的命令2 在处理前会先询问用户是否这样处理,在得到确认命令后,才会执行
5、grep
grep 的作用是在文件中提取和匹配符合条件的字符串行grep [选项] "搜索内容" 文件名
选项:
-i
:忽略大小写
-n
:输出行号
-v
:反向查找(找不包含搜索内容的)
--color=auto
:搜出的关键字用颜色显示
# 这条命令会把 abc.txt 文件中有关 heping 的行搜索出来
[root@hepingfly hepingfly]# grep --color=auto heping abc.txt
hepingfly
heping hello
下面说下 find 命令和 grep 命令的区别:
1)、find 命令
find 命令用于在系统中搜索符合条件的文件名,如果需要模糊查询,则使用通配符进行匹配。搜索时文件名是完全匹配的。
2)、grep 命令
grep 命令用于在文件中搜索符合条件的字符串,如果需要模糊查询,则使用正则表达式进行匹配。搜索时字符串时包含匹配的。
通配符和正则表达式的区别:
通配符:用于匹配文件名,完全匹配
7、管道符
命令格式:命令1|命令2
命令1 的输出作为命令2 的输入
# 将 ll 命令的结果,作为 more 命令的输入
[root@hepingfly 桌面]# ll /etc/ |more
你会发现管道符的作用和前面说的 find 中 exec 命令很像,都是把一个命令的输出作为另一个命令的输入。(可以看前面 find 命令)
其实可以说管道符和 exec 命令基本作用一致,可以为什么基本作用一样还要弄两个命令呢?
我们把含有管道符的操作叫做文本流操作,但是 find 命令不支持文本流操作,但是管道符又很有用,所以在 find 命令中使用 exec 选项来模拟管道符
# 管道符的操作时文本流操作,不论前一个命令的结果是什么,最终都是以字符串形式呈现,grep 是搜索符合条件的字符串(相当于我把前一个命令的结果保存在一个临时文件中,然后后一个命令去操作它)
[root@hepingfly 桌面]# ll /etc/ | grep yum
8、netstat
netstat
在 CentOS7 中,需要安装 net-snmp.x86_64
,net-tools.x86_64
两个包才有此命令。7.5 系统中已经自动安装
netstat [选项]
选项:
-a
:列出所有网络状态,包括 Socket 程序
-c 秒数
:指定每隔几秒刷新一次网络状态
-n
:使用 IP 地址和端口号显示,不使用域名和服务名
-p
:显示 PID 和程序名
-t
:显示使用 TCP 协议端口的连接状况
-u
:显示使用 UDP 协议端口的连接状况
-l
:仅显示监听状态的连接
-r
:显示路由表
# 这条命令的意思就是查询系统中所有开启的端口
[root@hepingfly 桌面]# netstat -tuln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:38238 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
[root@hepingfly 桌面]# netstat -anp |more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:38238 0.0.0.0:* LISTEN 2139/rpc.statd
tcp 0 0 192.168.31.240:22 192.168.31.90:50135 ESTABLISHED 7199/sshd
# ESTABLISHED 这个状态表示有人正在远程登录我的服务器,可以通过 Foreign Address 来看是谁在登录
# 那么想一下我可不可以判断,当前系统到底有多少在正在访问?
[root@hepingfly 桌面]# netstat -anp | grep ESTABLISHED | wc -l
2
# 通过上面这个命令我就可以知道具体的网络连接数量
[root@hepingfly 桌面]# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.31.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
0.0.0.0 192.168.31.1 0.0.0.0 UG 0 0 0 eth0
# 最后一个就是网关,可以使用 netstat -rn 去查看网关