Linux 系统中查找文件的命令有 whichwhereislocatefind 等,本文对这四条命令进行简单的介绍、列举了一些简单的使用方式。

which

在 PATH 变量中定义的全部路径中查找可执行文件或脚本

which 命令有两个重要参数:

  • -all, -a 默认情况下,which 命令会在匹配到第一个结果后结束运行,添加该参数可以让其搜索所有路径。

  • -read-alias, -i 将输入视为别名搜索。Linux 系统中通常会使用 alias 设置诸多别名来简写命令,例如 Centos 中的 ll 实际是 ls -l ,而 whichalias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde

    # Centos
    # 以绝对路径调用 which,这样就不会受到 Centos 默认的几个参数影响
    # 返回结果说明找不到 ll 命令
    $ /usr/bin/which ll
    /usr/bin/which: no ll in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin) # 直接输入 which 时实际效果为带有“默认参数”的
    # 返回结果说明 ll 是 ls -l 的别名,
    $ which ll
    alias ll='ls -l --color=auto'
    /usr/bin/ls

    which ll 相当于 alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde ll,返回结果第一行是 alias 输出的 ll 别名设置情况,第二行则是 ls 的实际位置。

which 的其他几个参数如下:

  • --tty-only:尽在终端调用的情况下附带右侧添加的参数,其他情况下不接收右侧其他参数(此处的参数值 --show-dot--show-tilde 此类,输入的待查询命令仍然会接收),通过这个命令可以保证 Shell 脚本中的 which 命令正确执行。
  • --show-dot:输出以 "." 符号开头的目录。Linux 中 "." 符号开头的目录是约定的隐藏文件夹,没有该参数时会忽略这些目录。
  • --show-tilde:将用户家目录替换成 "~" 符号输出。Linux 中 "~" 符号是登录用户家目录的缩写,如果登录用户名为 cncsl,则 "~" 指 "/home/cncsl" 目录。当使用 root 账号登录时该参数无效。

whereis

查找指定命令的可执行文件、源代码和手册的位置。

$ whereis vim
vim: /usr/bin/vim /usr/share/vim /usr/share/man/man1/vim.1.gz

可以看出,vim 的可执行程序位于 /usr/bin/vim,手册位于 /usr/share/vim/share/man/man1/vim.1.gz 目录。

  • -b-m-s 分别用于指定仅查询可执行文件、手册和源代码。

  • -B-M-S 命令用于指定查询路径。

  • -u 参数的描述直译为 仅查询有异常情况的命令。所谓的异常情况是指,某个命令的相关类型文件不止恰好一份(一份都没有或多于一份)。例如:

    • ls 命令具有两份手册:

      $ whereis -m -u ls
      ls: /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
    • Linux 系统中有很多个与 python 相关的可执行文件:

      $ whereis -b -u python
      python: /usr/bin/python /usr/bin/python2.7 /usr/lib/python2.7 /usr/lib64/python2.7 /etc/python /usr/include/python2.7

locate

在文档和目录名称的数据库中查找指定文件。Linux 系统会定期自动扫描磁盘来维护一个记录磁盘数据的数据库,而 locate 命令使用的数据库是 /var/lib/mlocate/mlocate.db

$ ls -hl /var/lib/mlocate/mlocate.db
-rw-r-----. 1 root slocate 2.7M Feb 4 03:42 /var/lib/mlocate/mlocate.db

可以看出当前 mlocate.db 文件共记录了 2.7M 的数据。

  • --count, -c :不输出具体的文件路径信息,仅输出查询到的数量。
  • --ignore-case, -i:查询时忽略大小写
  • --limit, -l, -n LIMIT:限定输出的文件数量为 LIMIT
  • --regexp,-r REGEXP:使用 REGEXP 指定的正则表达式匹配。
# 统计有多少PNG格式的图像文件
$ locate -c png # 统计有多少 readme 文件(根据编写者的习惯,readme 文件可能名为 README、ReadMe等)
$ locate -c -i readme # 输出十个 .gz 归档文件的路径
$ locate -l 10 *.gz # 查看 tomcat 2021年1月的日志
$ locate -r tomcat.2021-01-[0-3][0-9].log

由于 locate 命令是从数据库查找文件,新创建的文件可能由于未被记录到数据库中而无法查询到,这种时候需要使用 updatedb 命令手动更新数据库。

find

在一个目录层级中查找文件。

find 命令功能强大,可根据多种条件查询文件,随后进行自定义的操作,格式如下:

find [path...] [expression]
  • 查询当前目录下所有的 markdown 文档:

    $ find . -name "*.log"
  • 查询用户视频文件夹中大于 100M 的文件:

    $ find ~/Videos/ -size +100M
  • 查询用户音乐文件夹中过去七天访问过的文件:

    $ find ~/Music/ -atime -7
  • 查询系统中、三个月之前创建的、一个月之内没有访问过、大于 30M 的日志文件,并删除:

    find / -ctime +90 -atime +30 -size +1M -name "*.log" -delete

find 会实际的扫描磁盘,所以速度会明显小于前三个。

Linux 查找文件的正确方式的更多相关文章

  1. Linux - 删除文件的正确方式

    mv <file> /tmp/ cp <file> /opt/file.bak rm

  2. [转帖]Linux查找文件6个高效工具

    Linux查找文件6个高效工具 https://www.linuxrumen.com/rmxx/176.html 需要实操 -inname -type 等等. 1. 前言 我们使用Linux过程中,经 ...

  3. [转] Linux 查找文件内容

    Linux查找文件内容的常用命令方法. 从文件内容查找匹配指定字符串的行: $ grep "被查找的字符串" 文件名例子:在当前目录里第一级文件夹中寻找包含指定字符串的.in文件g ...

  4. Linux 查找文件

    find 查找目录 -name "文件名"find / -name "php.ini"locate 文件名locate php.ini 一:locate命令 l ...

  5. Linux 查找文件内容、替换

    有的时候我们经常性的需要在 linux 某一个目录下查找那些文件里包含我们需要查找的字符,那么这个时候就可以使用一些命令来查找,比如说 grep 1.grep 查询 1.1. 主要参数 [option ...

  6. windows与linux之间文件的传输方式总结(转)

    当然,windows与linux之间文件的传输的两种方式有很多,这里就仅仅列出工作中遇到的,作为笔记: 方法一:安装SSH Secure Shell Client客户端 安装即可登录直接拖拉到linu ...

  7. Linux 查找文件命令 find whereis locate

    Linux 有三个查找文件的命令:find, whereis, locate 其中find 不常用,whereis与locate经常使用,因为find命令速度较慢,因为whereis与locate是利 ...

  8. linux查找文件夹下的全部文件里是否含有某个字符串

    查找文件夹下的全部文件里是否含有某个字符串  find .|xargs grep -ri "IBM"  查找文件夹下的全部文件里是否含有某个字符串,而且仅仅打印出文件名称  fin ...

  9. Linux查找文件夹下包含某字符的所有文件

    Linux grep 命令用于查找文件里符合条件的字符串.grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示 ...

随机推荐

  1. [不止于代码]Unraid基本使用速记

    1.Unraid简介 Unraid是一个虚拟机系统,类似于VM.PVE,但又区别于前二者.通过Unraid的Dokcer可以快速构建类Nas及虚拟机环境,也可虚拟黑群晖使用,可以使用磁盘阵列,保护你的 ...

  2. ThreadX移植——STM32H7+MDK-AC6平台

    作者:zzssdd2 E-mail:zzssdd2@foxmail.com 一.前言 在uCOS全家桶宣布开源之后被微软收购的ThreadX也开源了,真是喜大普奔,对于我们这些嵌入式行业从业者来说,能 ...

  3. Appium 介绍及环境安装

    Appium是一个可用于测试iOS. Android操作系统和Windows桌面平台原生应用,移动网页应用和混合应用的自动化测试框架. 原生应用(Native App):用 android.iOS或者 ...

  4. Go 的定时任务模块 Cron 使用

    前言 新项目是Golang作为开发语言, 遇到了些新的坑, 也学到了新的知识, 收获颇丰 本章介绍在Go中使用Cron定时任务模块来实现逻辑 正文 在项目中, 我们往往需要定时执行一些逻辑, 举个例子 ...

  5. 【Java】一个简单的Java应用程序

    简单记录,Java 核心技术卷I 基础知识(原书第10 版) 一个简单的Java应用程序"Hello, World!" Hello, World! Goodbye,World! 一 ...

  6. QPainter 绘制图像接口

    阅读本文大概需要 3 分钟 我们在开发软件的过程中,绘制图像功能必不可少,使用 Qt 绘制图像时非常简单,只需要传递几个参数就可以实现功能,在 Qt 中绘制图像的 api有好几个 void drawI ...

  7. 【Python】用字母生成图像

    用字母生成图像会用到matplotlib.pyplot库 所以需要安装这个库 pip install matplotlib 等待安装完成即可 ps:由于网络原因,会出现多次的timeout,可以使用国 ...

  8. 【System】进程,线程和任务之间的区别是什么?

    任务(task)是最抽象的,是一个一般性的术语,指由软件完成的一个活动.一个任务既可以是一个进程,也可以是一个线程.简而言之,它指的是一系列共同达到某一目的的操作.例如,读取数据并将数据放入内存中.这 ...

  9. SDUST数据结构 - chap8 查找

    选择题: 函数题: 6-1 二分查找: 裁判测试程序样例: #include <stdio.h> #include <stdlib.h> #define MAXSIZE 10 ...

  10. ctfhub技能树—sql注入—时间盲注

    打开靶机 查看页面信息 测试时间盲注 可以看到在执行命令后会有一定时间的等待,确定为时间盲注 直接上脚本 1 #! /usr/bin/env python 2 # _*_ coding:utf-8 _ ...