Linux常用命令之文件搜索命令详解(find、locate、which、whereis、grep、wc)

Linux常用命令——文件搜索命令

1. find命令:在目录中查找指定文件

find 命令是直接在硬盘中进行搜索的,如果指定的搜索范围过大,find命令就会消耗较大的系统资源,导致服务器压力过大。所以,在使用 find 命令搜索时,尽量更精准的查找,这样消耗系统的资源少,查找的速度快。

find 命令的基本信息如下:

  • 命令名称:find。
  • 所在路径:/bin/find。
  • 格式:find  搜索路径  搜索内容
  • 执行权限:所有用户。
  • 功能描述:在目录中查找文件。

1.1> 按照文件名搜索

-name: 按照文件名搜索;在Windows搜索中,只要文件名包含init就会被搜索出来,但在Linux中,find 命令是完全匹配的,必须和搜索关键字一模一样才会列出,是一种精准搜索;

[root@redhat 桌面]# find /etc -name init
/etc/kdump-adv-conf/kdump_initscripts/init
/etc/sysconfig/init
/etc/init

通配符的使用:*表示匹配所有,?表示匹配单个字符;

[root@redhat 桌面]# find /etc -name *init*
/etc/kdump-adv-conf/kdump_initscripts
/etc/kdump-adv-conf/kdump_initscripts/kdumpinit.rootfs
/etc/kdump-adv-conf/kdump_initscripts/init
/etc/security/namespace.init
......
/etc/inittab
[root@redhat 桌面]# find /etc -name init???
/etc/inittab

在Linux中,严格区分大小写,如果想要不区分大小写,就可以使用-iname: 按照文件名搜索,但不区分文件名的大小写;

[root@redhat 桌面]# find /etc -name init???
/etc/inittab
[root@redhat 桌面]# touch /etc/INITTAB
[root@redhat 桌面]# find /etc -name init???
/etc/inittab
[root@redhat 桌面]# find /etc -iname init???
/etc/INITTAB
/etc/inittab

 1.2> 按照文件大小搜索:-size  大小:  +n大于    -n小于     n等于

1块=512k,2048块=10M;

[root@redhat 桌面]# find /etc -size +2048
/etc/gconf/gconf.xml.defaults/%gconf-tree.xml
/etc/selinux/targeted/policy/policy.24
/etc/selinux/targeted/modules/active/policy.kern

1.3> 根据所有者进行查找

[root@redhat 桌面]# find /home -user root
/home
/home/zhangsan/zhang
/home/vftpusers/guest

1.4> 根据所属者进行查找

[root@redhat 桌面]# find /home -group root
/home
/home/zhangsan/zhang
/home/vftpusers/guest

1.5> 根据时间属性来查找:

-amin:访问时间

-cmin:改变文件属性(使用ls -l 看到的信息)

-mmin:改变文件内容

[root@redhat 桌面]# find /etc -mmin -30
/etc
/etc/gshadow-
/etc/group-
/etc/shadow
/etc/vsftpd
/etc/vsftpd/vsftpd.conf
/etc/passwd
/etc/group
/etc/shadow-
/etc/passwd-

1.6> -a:两个条件同时满足;-o:两个条件满足任意一个即可;-type:文件类型;f——文件,d——目录,l——软链接文件

[root@redhat 桌面]# find /etc -name init* -a -type f
/etc/kdump-adv-conf/kdump_initscripts/init
/etc/sysconfig/network-scripts/init.ipv6-global
/etc/sysconfig/init
/etc/selinux/targeted/contexts/initrc_context
/etc/init/init-system-dbus.conf
/etc/inittab

1.7>-exec/-ok : 把 find 命令的结果交给由-exec/-ok调用的命令 2 来处理。"{}"就代表 find 命令的査找结果。

[root@redhat 桌面]# find /etc -name inittab
/etc/inittab
[root@redhat 桌面]# find /etc -name inittab -exec ls -l {} \;
-rw-r--r--. 1 root root 884 3月  11 18:43 /etc/inittab
[root@redhat 桌面]# find /etc -name inittab -ok ls -l {} \;
< ls ... /etc/inittab > ? y
-rw-r--r--. 1 root root 884 3月  11 18:43 /etc/inittab

2. locate命令:在文件资料库查找文件

locate 命令相比find命令而言,那就是搜索速度非常快,而且耗费系统资源非常小。这是因为 locate 命令不会直接搜索硬盘空间,而会先建立 locate 数据库,然后在数据库中按照文件名进行搜索,是快速查找的搜索命令。

locate 命令的基本信息如下:

  • 命令名称:locate。
  • 所在路径:/usr/bin/locate。
  • 执行权限:所有用户。
  • 功能描述:按照文件名搜索文件

2.1> locate 文件名;

[root@redhat 桌面]# locate inittab
/etc/inittab
/usr/share/man/man5/inittab.5.gz
/usr/share/vim/vim72/syntax/inittab.vim

2.2> locate查找有一个缺点,就是如果我们新建立一个文件,那么 locate 命令找不到这个文件;因为locate不能实时更新资料库;但我们可以进行手动更新;

[root@redhat ~]# touch yangmi
[root@redhat ~]# locate yangmi
[root@redhat ~]# find /root -name yangmi
/root/yangmi
[root@redhat ~]# updatedb
[root@redhat ~]# locate yangmi
/root/yangmi

2.3> locate命令的文件资料库不收录/tmp这个临时文件的内容;

[root@redhat ~]# touch /tmp/zhaoliying
[root@redhat ~]# updatedb
[root@redhat ~]# locate zhaoliying
[root@redhat ~]# 

2.4> 使用locate命令查找文件时,如果想要不区分大小写,就可以加-i选项;

[root@redhat ~]# touch TangYan
[root@redhat ~]# updatedb
[root@redhat ~]# locate tangyan
[root@redhat ~]# locate -i tangyan
/root/TangYan

3. which命令:列出命令的所在路径

which 命令的基本信息如下:

  • 命令名称:which。
  • 所在路径:/usr/bin/which。
  • 执行权限:所有用户。
  • 功能描述:列出命令的所在路径。

which 命令在查找到二进制命令的同时,如果这个命令有别名,则还可以找到命令的别名;

[root@redhat 桌面]# which cp
alias cp='cp -i'
	/bin/cp
[root@redhat 桌面]# which useradd
/usr/sbin/useradd
[root@redhat 桌面]# which rm
alias rm='rm -i'
	/bin/rm
[root@redhat tmp]# which ifconfig
/sbin/ifconfig

alias字段后面就是命令的别名,例如:我们在执行rm命令时,本身是没有提示信息的,但是在Linux系统中,rm 是rm -i的别名,所以才会有提示信息,是否需要删除文件?

[root@redhat tmp]# touch tangyan
[root@redhat tmp]# rm tangyan
rm:是否删除普通空文件 "tangyan"?y

4. whereis命令:搜索命令所在的目录及帮助文档路径

whereis 是搜索系统命令的命令,也就是说,whereis 命令不能搜索普通文件,而只能搜索系统命令。whereis 命令的基本信息如下:

  • 命令名称:whereis。
  • 所在路径:/usr/bin/whereis.
  • 执行权限:所有用户。
  • 功能描述:査找二进制命令、源文件和帮助文档的命令。

whereis命令不仅搜索命令所在的目录,还可以搜索帮助文档的路径,针对搜索命令的路径而言,whereis命令和which命令没有什么本质区别;

[root@redhat tmp]# whereis useradd
useradd: /usr/sbin/useradd /usr/share/man/man8/useradd.8.gz
[root@redhat tmp]# whereis rm
rm: /bin/rm /usr/share/man/man1/rm.1.gz /usr/share/man/man1p/rm.1p.gz

5.  grep命令:在文件中搜寻匹配的行并输出

grep 命令的基本信息如下:

  • 命令名称:grep。
  • 所在路径:/bin/grep.
  • 执行权限:所有用户。
  • 功能描述:在文件中搜寻匹配的行并输出。

5.1> 选项:-i(忽略大、小写)     -v(反转查找)

[root@redhat tmp]# grep multiuser /etc/inittab
#   3 - Full multiuser mode
[root@redhat tmp]# grep -i multiuser /etc/inittab
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode

[root@redhat tmp]# grep -v "#" /etc/inittab
id:5:initdefault:

5.2> 查找条件:
查找以某字符串为开头: "^某字符串"      例如:grep  "^#"  /etc/inittab

[root@redhat tmp]# grep  "^#" /etc/inittab
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#.......

查找以某字符串为结尾: "某字符串$"    例如:grep  ")$"  /etc/inittab

[root@redhat tmp]# grep  ")$" /etc/inittab
#   0 - halt (Do NOT set initdefault to this)
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   6 - reboot (Do NOT set initdefault to this)

查找空行:    "^$"       例如:grep  "^$"  /etc/inittab

[root@redhat tmp]# grep  "^$" /etc/yum.conf 


[root@redhat tmp]# 

6. wc命令:统计命令

wc 命令的基本信息如下:

  • 命令名称:wc。
  • 所在路径:/usr/bin/wc.
  • 执行权限:所有用户。
  • 功能描述:统计文件中的信息。

wc 命令的参数如下:

  • -l:统计行数    例如:wc   -l   需要统计的文件
  • -w:统计单词数  例如:wc   -w   需要统计的文件
  • -c:统计字节数  例如:wc   -l   需要统计的文件
[root@redhat tmp]# wc -l /etc/services 
10774 /etc/services
[root@redhat tmp]# wc -w /etc/services 
58108 /etc/services
[root@redhat tmp]# wc -c /etc/services 
641020 /etc/services

 

你可能感兴趣的:(Linux)