Linux 查找文件命令,which,whereis,locate,find

  • which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令

  • whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)

  • locate通过搜寻系统内建文档数据库达到快速找到档案,数据库由updatedb程序来更新

  • find 用于在文件树中查找文件,并作出相应的处理。

1. which命令

 which是在PATH就是指定的路径中,搜索某个系统命令的位置,并返回第一个搜索结果。使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令

常用参数:-n  指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。

 实例

(1)查看ls命令是否存在,执行哪个:which ls

(2)查看which:which which

(3)查看cd:which cd(显示不存在,因为cd是内建命令,而which查找显示是PATH中的命令)

 查看当前PATH配置:echo $PATH;或使用env查看所有环境变量及对应值。

简单说PATH就是一组路径的字符串变量,当你输入的命令不带任何路径时,LINUX会在PATH记录的路径中查找该命令。有的话则执行,不存在则提示命令找不到。比如在根目录/下可以输入命令ls,在/usr目录下也可以输入ls,但其实ls命令根本不在这个两个目录下,当你输入ls命令时LINUX会去/bin,/usr/bin,/sbin等目录寻找该命令。而PATH就是定义/bin:/sbin:/usr/bin等这些路劲的变量,其中冒号为目录间的分割符。

2.  whereis

 whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。whereis及locate都是基于系统内建的数据库进行搜索,因此效率很高,而find则是遍历硬盘查找文件。

         常用参数:

         -b   定位可执行文件。

         -m   定位帮助文件。

         -s   定位源代码文件。

         -u   搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件。

         实例:

         (1)查找locate程序相关文件: whereis locate

         (2)查找locate的源码文件: whereis -s locate

         (3)查找lcoate的帮助文件: whereis -m locate

3. locate

locate通过搜寻系统内建文档数据库达到快速找到档案,数据库由updatedb程序来更新,updatedb是由cron daemon周期性调用的。默认情况下locate命令在搜寻数据库时比由整个由硬盘资料来搜寻资料来得快,但较差劲的是locate所找到的档案若是最近才建立或 刚更名的,可能会找不到,在内定值中,updatedb每天会跑一次,可以由修改crontab来更新设定值。(etc/crontab)。

         locate与find命令相似,可以使用如*、?等进行正则匹配查找

         常用参数:

         -l num(要显示的行数)

         -f   将特定的档案系统排除在外,如将proc排除在外

         -r   使用正则运算式做为寻找条件

         实例:

         (1)查找和pwd相关的所有文件(文件名中包含pwd):locate pwd

         (2)搜索etc目录下所有以sh开头的文件: locate /etc/sh

         (3)查找/var目录下,以reason结尾的文件

         locate -r '^/var.*reason$'(其中.表示一个字符,*表示任务多个;.*表示任意多个字符)

4. find命令

         用于在文件树中查找文件,并作出相应的处理。

         命令格式

         find pathname -options [-print -exec -ok ...]

         命令参数

         pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。

         -print: find命令将匹配的文件输出到标准输出。

         -exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' {  } \;,注意{   }和\;之间的空格。

         -ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

         命令选项:

         -name 按照文件名查找文件

         -perm 按文件权限查找文件

         -user 按文件属主查找文件

         -group  按照文件所属的组来查找文件。

         -type  查找某一类型的文件,诸如:

                   b - 块设备文件

                   d - 目录

                   c - 字符设备文件

                   l - 符号链接文件

                   p - 管道文件

                   f - 普通文件

         -size n :[c] 查找文件长度为n块文件,带有c时表文件字节大小

         -amin n   查找系统中最后N分钟访问的文件

         -atime n  查找系统中最后n*24小时访问的文件

         -cmin n   查找系统中最后N分钟被改变文件状态的文件

         -ctime n  查找系统中最后n*24小时被改变文件状态的文件

         -mmin n   查找系统中最后N分钟被改变文件数据的文件

         -mtime n  查找系统中最后n*24小时被改变文件数据的文件

         (用减号-来限定更改时间在距今n日以内的文件,而用加号+来限定更改时间在距今n日以前的文件。 )

         -maxdepth n 最大查找目录深度

         -prune选项来指出需要忽略的目录。在使用-prune选项时要当心,因为如果你同时使用了-depth选项,那么-prune选项就会被find命令忽略

         -newer 如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用-newer选项

         实例

         (1)查找48小时内修改过的文件

         find -atime -2

         (2)在当前目录查找 以.log结尾的文件。 ". "代表当前目录

         find ./ -name '*.log'

         (3)查找/opt目录下 权限为 777的文件

         find /opt -perm 777

         (4)查找大于1K的文件

         find -size +1000c

         find -size 1000c 查找等于1000字符的文件

         -exec         参数后面跟的是command命令,它的终止是以;为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。{}   花括号代表前面find查找出来的文件名。

         实例:

         (5)在当前目录中查找更改时间在10日以前的文件并删除它们(无提醒)

         find . -type f -mtime +10 -exec rm -f {} \;

         (6)当前目录中查找所有文件名以.log结尾、更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示。 按y键删除文件,按n键不删除

         find . -name '*.log' mtime +5 -ok -exec rm {} \;

         (7)当前目录下查找文件名以passwd开头,内容包含"pkg"字符的文件

         find . -f -name 'passwd*' -exec grep "pkg" {} \;

         (8)用exec选项执行cp命令 

         find . -name '*.log' -exec cp {} test3 \;

         -xargs find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。

         实例:

         (9)查找当前目录下每个普通文件,然后使用xargs来判断文件类型

         find . -type f -print | xargs file

         (10)查找当前目录下所有以js结尾的并且其中包含'editor'字符的普通文件

         find . -type f -name "*.js" -exec grep -lF 'ueditor' {} \;

         find -type f -name '*.js' | xargs grep -lF 'editor'

         (11)利用xargs执行mv命令

         find . -name "*.log" | xargs -i mv {} test4

         (12)用grep命令在当前目录下的所有普通文件中搜索hostnames这个词,并标出所在行

         find . -name \*(转义) -type f -print | xargs grep -n 'hostnames'

         (13)查找当前目录中以一个小写字母开头,最后是4到9加上.log结束的文件

         find . -name '[a-z]*[4-9].log' -print

         (14)在test目录查找不在test4子目录查找

         find test -path 'test/test4' -prune -o -print

         (15)实例1:查找更改时间比文件log2012.log新但比文件log2017.log旧的文件

         find -newer log2012.log ! -newer log2017.log

         使用depth选项:

         depth选项可以使find命令向磁带上备份文件系统时,希望首先备份所有的文件,其次再备份子目录中的文件。 

         实例:find命令从文件系统的根目录开始,查找一个名为CON.FILE的文件。 它将首先匹配所有的文件然后再进入子目录中查找

         find / -name "CON.FILE" -depth -print

5. 文件树

文件树这一小节内容摘自:https://blog.csdn.net/CSDNhuaong/article/details/77770868(已点赞)。

目录名功能和内容
/bin常用的程序,但/bin比较特殊。因为/bin放置的是在单人维护模式下还能够被操作的指令。在/bin底下的指令可以被root与一般帐号所使用,主要有:cat,chmod(修改权限), chown, date, mv, mkdir, cp, bash等等常用的指令。
/boot放置开机启动文件,包括Linux核心文件以及开机选单与开机所需设定文件等等。Linux kernel常用的档名为:vmlinuz ,如果使用的是grub这个开机管理程式,则还会存在/boot/grub/这个目录。
/dev设备文件 Linux上任何装置与周边设备都是以文件的型态存在于这个目录当中。 只要通过存取这个目录下的某个文件,就等于存取某个装置。比要重要的文件有/dev/null, /dev/zero, /dev/tty , /dev/lp*, / dev/hd*, /dev/sd*等等
/etc系统程序和大多数程序的配置文件,帐号密码文件、各种服务的启始文件等等。 一般来说,这个目录下的文件可以让一般使用者查阅的,但是只有root有权力修改。比较重要的文件有:/etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11/, /etc/fstab, /etc/sysconfig/等等。
/home系统预设的使用者家目录(home directory)。 在你新增一个一般使用者帐号时,这里都会新增一个用户名文件夹。家目录有两种代号:~ :代表当前使用者的家目录,而 ~guest:则代表用户名为guest的家目录。
/lib系统程序库文件 系统的函式库非常的多,而/lib放置的则是在开机时会用到的函式库,以及在/bin或/sbin底下的指令会呼叫的函式库而已 。 什么是函式库呢?你可以将他想成是外挂,某些指令必须要有这些外挂才能够顺利完成程式的执行之意。 尤其重要的是/lib/modules/这个目录,因为该目录会放置核心相关的模组(驱动程式)。
 
/mediamedia是媒体的英文,顾名思义,这个/media底下放置的就是可移除的装置。 包括软碟、光碟、DVD等等装置都暂时挂载于此。 常见的文件有:/media/floppy, /media/cdrom等等。
/mnt常用挂载点,如果妳想要暂时挂载某些额外的装置,一般建议妳可以放置到这个目录中。这个目录的用途与/media相同啦。 只是有了/media之后,这个目录就用来暂时挂载用了。
/opt第三方软件安装位置 什么是第三方软件啊?举例来说,KDE这个桌面管理系统是一个独立的计画,不过他可以安装到Linux系统中,因此KDE的软体就建议放置到此目录下了。 另外,如果你想要自行安装额外的软件(非原本的distribution提供的),那么也能够将你的软体安装到这里来。 不过,以前的Linux系统中,我们还是习惯放置在/usr/local目录下
/rootroot的家目录。 之所以放在这里,是因为如果进入单人维护模式而仅挂载根目录时,该目录就能够拥有root的家目录,所以我们会希望root的家目录与根目录放置在同一个分区中
/sbin管理员专用程序 Linux有非常多指令是用来设定系统环境的,这些指令只有root才能够利用来设定系统,其他使用者最多只能用来查询而已。放在/sbin底下的为开机过程中所需要的,里面包括了开机、修复、还原系统所需要的指令。至于某些伺服器软体程式,一般则放置到/usr/sbin/当中。至于本机自行安装的软体所产生的系统执行文档(system binary),则放置到/usr/local/sbin/当中了。常见的指令包括:fdisk, fsck, ifconfig, init, mkfs等等。
/srvsrv可以视为service的缩写,是一些网路服务启动之后,这些服务所需要取用的资料目录。 常见的服务例如WWW, FTP等等。 举例来说,WWW伺服器需要的网页资料就可以放置在/srv/www/里面。呵呵,看来平时我们编写的代码应该放到这里了。
/tmp缓存文件夹这个目录是任何人都能够存取的,所以你需要定期的清理一下。当然,重要资料不可放置在此目录啊。 因为FHS甚至建议在开机时,应该要将/tmp下的资料都删除。
/proc这个目录本身是一个虚拟文件系统(virtual filesystem)喔。 他放置的资料都是在内存当中,例如系统核心、行程资讯(process)(是进程吗?)、周边装置的状态及网络状态等等。因为这个目录下的资料都是在记忆体(内存)当中,所以本身不占任何硬盘空间。比较重要的档案(目录)例如: /proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net/*等.
/sys这个目录其实跟/proc非常类似,也是一个虚拟的档案系统,主要也是记录与核心相关的资讯。 包括目前已载入的核心模组与核心侦测到的硬体装置资讯等等。 这个目录同样不占硬盘容量。
usr

/usr 不是user的缩写,其实usr是Unix Software Resource的缩写,也就是Unix操作系统软件资源所放置的目录,而不是用户的数据啦。这点要注意。 FHS建议所有软件开发者,应该将他们的数据合理的分别放置到这个目录下的次目录,而不要自行建立该软件自己独立的目录。

  因为是所有系统默认的软件(distribution发布者提供的软件)都会放置到/usr底下,因此这个目录有点类似Windows 系统的C:\Windows\ Program files\这两个目录的综合体,系统刚安装完毕时,这个目录会占用最多的硬盘容量。 一般来说,/usr的次目录建议有底下这些: 

  • /usr/bin: 绝大部分的用户可使用指令都放在这里。请注意到他与/bin的不同之处。(是否与开机过程有关)
  • /usr/include:c/c++等程序的头文件(header)与包含档(include)放置处,当我们以tarball方式 (*.tar.gz 的方式安装软件)安装某些数据时,会使用到里头的许多包含档。
  • /usr/local: 管理自己安装的软件,该目录下也有bin, etc, include, lib…的次目录
  • /usr/sbin :非系统正常运行所需的指令,最常见的就是某些网络服务器软件的服务指令(daemon)
  • /user/share :放置共享文件的地方,在这个目录下放置的数据几乎是不分硬件架构均可读取的数据, 因为几乎都是文本文件嘛。在此目录下常见的还有这些次目录:/usr/share/man:联机帮助文档 /usr/share/doc:软件杂项的文件说明 /usr/share/zoneinfo:与时区有关的时区文件。
  • /usr/src: 一般原始码建议放置到这里,src有source的意思。至于核心原始码则建议放置到/usr/src/linux/目录下
/var 如果/usr是安装时会占用较大硬盘容量的目录,那么/var就是在系统运作后才会渐渐占用硬盘容量的目录因为/var目录主要针对常态性变动的文件,包括缓存(cache)、登录档(log file)以及某些软件运作所产生的文件, 包括程序文件(lock file, run file),或者例如MySQL数据库的文件等等。

参考文献:

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:C马雯娟 返回首页