linux下查找文件的相关命令

linux下查找文件的相关命令

运行环境:centos7
参考来源:man、鸟哥入门书籍

一、脚本文件查找:which/type

1. which

man手册描述:
返回当前环境可以被执行的文件(或链接)的路径。搜索PATH变量匹配参数中的可执行文件,且不会规范化路径名称(?)

命令:
which [-a] 文件名
-a: 打印所有的匹配路径名

ygy@ubuntu:~$ which which
/usr/bin/which
## 只找出第一个ygy@ubuntu:~$ which -a which
/usr/bin/which
/bin/which
## /usr/bin 是 /bin 的符号链接ygy@ubuntu:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
ygy@ubuntu:~$ which history

history是bash内置命令,不在path变量指示的路径中,所以查找不到。

2. type

查询命令是Bash shell内置命令,还是外部非bash命令。
命令:type [-tpa] name

  • -t:此时输出结果会以下列关键词显示name的类型
    • builtin:bash内置命令
    • alias: 命令别名
    • file: 外部命令
    • keyword:shell保留字
    • function:shell函数
    • 空:没有找到该name
  • -p:如果name是外部命令,才会显示完整文件名。
  • -a:根据PATH中的路径,将所有符合name的命令列出,包括alias、builtin、function
  • 其他参数:-P、-f
ygy@ubuntu:~$ type ls
ls 是“ls --color=auto”的别名
ygy@ubuntu:~$ type -t ls
alias
ygy@ubuntu:~$ type -a ls
ls 是“ls --color=auto”的别名
ls 是 /usr/bin/ls
ls 是 /bin/lsygy@ubuntu:~$ 
ygy@ubuntu:~$ type cd
cd 是 shell 内建
ygy@ubuntu:~$ type -t cd
builtin
ygy@ubuntu:~$ type -a cd
cd 是 shell 内建
## 所以第一个which命令找不到cd

type找的是可执行文件名,如果不能以可执行文件的状态找到,不会有返回内容。因此 type 命令一般找的是 可执行文件, 而不是一般文件

二、查找一般文件:whereis/locate/find

1. whereis

whereis 用于搜索二进制文件、源文件、manual页面文件。man说明页面中提到,会去除所提供名称的前缀和后缀。并且默认是在linux标准空间(?)、PATH和MANPATH(此环境变量为什么是空的?)中定位要查询的程序。

whereis -[bmsu] name

  • -l:列出whereis去查询哪些目录。未指定-B/-M/-S时,会输出whereis能够在文件系统找到的所有硬编码路径。
  • -b:只找二进制文件
  • -m:只找在说明文件manual路径下的文件
  • -s:只找源文件
  • -u:查找有特殊条目的name。特殊是指:一个命令不知有一个明确请求类型的条目。如whereis -m -u *表示查找当前路径下没有文档文件或有多个文档文件的文件。

查找ls、tr的二进制文件和man页面,gcc的man页面

ygy@ubuntu:~$ whereis -bm ls tr -m gcc
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
tr: /usr/bin/tr /usr/share/man/man1/tr.1.gz
gcc: /usr/share/man/man1/gcc.1.gz

-B/-M/-S等选项,是限制将要搜索的name的搜索路径。如下实例中,在所有默认路径中寻找ls,在‘/usr/share/man/man1’中寻找cal

ygy@ubuntu:~$ whereis -m ls -M /usr/share/man/man1 -f cal
ls: /usr/share/man/man1/ls.1.gz
cal: /usr/share/man/man1/cal.1.gz## -f选项:配合-B/-M/-S使用,具体作用尚不清楚,man的描述:终止目录列表,发出文件名信号(猜想:对于上述示例,取消默认路径查找,转而在/usr/share/man/man1中查找-f参数后接的`cal`)

在/usr/bin中查找没有记录在/usr/man/man1,或者在/usr/src中没有源代码的所有文件:

ygy@ubuntu:~$ cd /usr/bin
ygy@ubuntu:/usr/bin$ whereis -u -ms -M /usr/man/man1 -S /usr/src -f *

对比where -l 和 PATH内容,发现没有找/bin和/sbin,其他的路径-l选项都有显示。原因未知,但是/usr/bin和/usr/sbin是与上述两个目录等价,所以应该没有影响。

2. locate/updatedb

locate:是用于查找数据库(/var/lib/mlocate/)中匹配到的文件,不是像find一样直接在硬盘中查找,因此速度更快。

updatedb:由于数据库更新是定期的(CentOS是一天一次),查询前可以手动更新数据库:sudo updatedb(ubuntu上普通用户无权限),此时会根据/etc/updatedb.conf的配置去查找硬盘文件,并更新到/var/lib/mlocate/

locate支持通配符,‘.’、‘/’不会特殊区分,也会包含在通配符内。

对于普通字符串的文件名,locate会显示数据库中所有匹配到该字符串的文件名。对于包含通配符,locate只会显示精准匹配到的文件名。man文档建议,在使用通配符时以*开始,从而尽可能匹配到多的内容。

关于默认数据库的文件名、数据库更新频率、包含目录条目见updatedb

locate结果输出到终端:输出中的不寻常字符

locate [OPTION]… PATTERN…

  • -i:–ignore-case,忽略大小写差异。
  • -r:–regexp REGEXP。若使用该选项,没有PATTERN。此选项可被指定多次。
  • -c:–count,输出匹配的条目个数,而不是输出匹配PATTERN的结果。
  • -S:–statistics,输出locate所使用的相关数据库信息。
  • -l:–limits,-n LIMIT。表示在找到LIMIT条匹配数据后成功退出该命令的执行。
[wkm@WkmCentosHost ~]$ locate -l 5 passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/home/wkm/文档/testpw/passwd.nex[wkm@WkmCentosHost ~]$ locate -S
数据库 /var/lib/mlocate/mlocate.db:15,232 文件夹169,300 文件8,709,199 文件名中的字节数3,922,880 字节用于存储数据库

3. find

find [path…] [expression]

其中表达式由:选项option、动作action组成。

第一个以 ‘-’ , ‘(’ , ‘)’ , ‘,’ 或 ‘!’ 这些字符起始的参数是表达式的开始;

在它之前的任何参数是要搜索的路径,在它之后的任何参数都是表达式的余下部分。如果没有路径参数,缺省用当前目录。

1. 与时间有关的选项

以mtime为例:

  • -mtime n:n天前的一天之内被修改过内容的文件。
  • -mtime +n:n天前(不包括n天本身)被修改过内容的文件。
  • -mtime -n:n天之内(包括n天)被修改过内容的文件。
[wkm@WkmCentosHost ~]$ find /home/wkm/ -mtime 3## 0代表当前时间,因此该命令的含义是:查找24小时内被修改过内容的文件
[wkm@WkmCentosHost ~]$ find /home/wkm/ -mtime 0
/home/wkm/
/home/wkm/.config/dconf
/home/wkm/.config/dconf/user
/home/wkm/.config/gtk-3.0

关于时间:

-atime:访问时间,文件最后一次被读取的时间。

-ctime:状态时间,文件的状态(权限、属性等)最近一次被修改的时间。

-mtime:修改时间,文件内容最后一次被修改的时间。

2. 与使用者/用户组名称有关的选项
  • -uid n:/etc/passwd中的UID
  • -gid n:/etc/group中的GID
  • -user name:name为使用者账号的名称。
  • -group name:用户组名称。
  • -nouser:查找文件的拥有者不在/etc/passwd中
  • -nogroup:查找文件的用户组不在/etc/group中
3. 与文件权限、名称有关的参数
  • -name filename:查找名为filename的文件。
  • -size [±]SIZE:查找比SIZE要大(+)/ 小(-)的文件。SIZE的单位:c,字节;k,kb。
  • -type TYPE。TYPE类型有:
    • f:正规文件
    • b,c:设备文件
    • d:目录
    • l:链接文件
    • s:socket
    • p:FIFO
  • -perm 权限:
    • mode:查找文件权限刚好等于mode的文件。如-rwsr-xr-x,应该使用-perm 4755。
    • -mode:大于等于mode的文件。
    • /mode:包含任一mode的权限的文件。

如:查找比1k小的文件

[wkm@WkmCentosHost ~]$ find ~ -size -1k
/home/wkm/.config/enchant/en_US.exc
/home/wkm/.config/enchant/en_US.dic
/home/wkm/.gnupg/secring.gpg
/home/wkm/.gnupg/pubring.gpg
....## 查找名为passwd的文件(默认是完整文件名) 
$ find / -name passwd
## 包含passwd的文件
$ find / -name "*passwd*"## 查找类型为socket的文件
$ find /run -type s## 查找包含SGID、SUID、SBIT的属性的文件
[wkm@WkmCentosHost ~]$ find / -perm /7000
4. 其他

-exec command:接额外的命令command来处理查找到的结果。

[wkm@WkmCentosHost ~]$ find /usr/bin /usr/sbin -perm /7000 -exec ls -l {} \;

{}:代表find查找到的内容,即将find找到的内容放在{}处

\; -exec一直到\;是关键字,表示find额外操作的开始(-exec)至结束(\;),因为bash中的;有特殊含义所以用反斜杠转义。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/147421.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【PostgreSQL】【存储管理】表和元组的组织方式

外存管理负责处理数据库与外存介质(PostgreSQL8.4.1版本中只支持磁盘的管理操作)的交互过程。在PostgreSQL中,外存管理由SMGR(主要代码在smgr.c中)提供了对外存的统一接口。SMGR负责统管各种介质管理器,会根据上层的请求选择一个具体的介质管理器进行操作…

十四天学会C++之第二天(函数和库)

1. 函数的定义和调用 在C中,函数是组织和结构化代码的关键工具之一。它们允许您将一段代码封装成一个可重复使用的模块,这有助于提高代码的可读性和维护性。 为什么使用函数? 函数在编程中的作用不可小觑。它们有以下几个重要用途&#xf…

WEB3 solidity 带着大家编写测试代码 操作订单 创建/取消/填充操作

好 在我们的不懈努力之下 交易所中的三种订单函数已经写出来了 但是 我们只是编译 确认了 代码没什么问题 但还没有实际的测试过 这个测试做起来 其实就比较的麻烦了 首先要有两个账号 且他们都要在交易所中有存入 我们还是先将 ganache 的虚拟环境启动起来 然后 我们在项目…

EasyX图形库note4,动画及键盘交互

大家好,这里是Dark Flame Master,专栏从这篇开始就会变得很有意思,我们可以利用今天所学的只是实现很多功能,同样为之后的更加好玩的内容打下基础,从这届开始将会利用所学的知识制作一些小游戏,废话不多说&…

第一百六十二回 PopupMenuButton组件

文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了Sliver综合示例相关的内容,本章回中将介绍 PopupMenuButton组件.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在本章回中介绍的PopupMenuButton组件位于AppBar右侧,通常显…

MacOS怎么安装Nacos(附带:Windows系统)

MacOS安装Nacos(一定要配置JDK的环境变量,后面告诉你为什么?) (1)进入Nacos官网,前往githubhomehomehttp://nacos.io/zh-cn/ (2)点击右下角的releases 然后点击Tags 选择…

Linux实用操作(固定IP、进程控制、监控、文件解压缩)

目录 一、快捷键 1、ctrl c强制停止 2、ctrl d退出或登出 3、历史命令搜索history 4、光标移动快捷键 5、清屏 二、软件安装 1、CentOS的yum命令 2、Ubantu的apt命令 三、systemctl命令 四、软连接 五、日期、时区 1、date命令 2、修改Linux时区为东八区 3、nt…

智慧公厕整体解决方案,厕所革命实施方案的范本

随着城市化进程的不断加快,智慧城市应用正成为未来城市发展的重要方向。其中,智慧公厕作为城市基础设施的重要组成部分,其建设范本已经成为各建设中的智慧城市不可或缺的重要内容。那么,如何打造智慧公厕整体解决方案?…

servlet 线程模型 异步

在 servlet 3.0 之前,请求与线程的对应关系是1:1,对应jvm与操作系统的线程的关系。 servlet 3.0 https://jcp.org/en/jsr/detail?id315 从 servlet 3.0 开始,开始有了异步相关功能,作为 Java EE 6 的新功能。 容器线程池与业务线…

王杰国庆作业day6

服务器 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <my_head.h> #define PORT 2324 //端口号 #define IP "192.168.10.107" //本机IP int main(int argc, const char *argv[]) {sqlite3* d…

宠物医院必备,介绍一款宠物疫苗接种管理软件

在当今社会&#xff0c;养宠物已经成为越来越多人的生活方式&#xff0c;宠物疫苗接种已是宠物医院的重要工作&#xff0c;但是目前绝大多数的宠物医院对疫苗接种的管理&#xff0c;还是采取人工登记方式&#xff0c;不仅效率低下&#xff0c;而且无法做到疫苗接种到期自动提醒…

【Vim 插件管理器】Vim-plug和Vim-vbundle的区别

- vundle是一款老款的插件管理工具 - vim-plug相对较新&#xff0c;特点是支持异步加载&#xff0c;相比vundle而言 Vim-plug 是一个自由、开源、速度非常快的、极简的 vim 插件管理器。它可以并行地安装或更新插件。你还可以回滚更新。它创建浅层克隆shallow clone最小化磁盘…

【算法训练-二分查找 一】二分查找、在排序数组中查找元素的第一个和最后一个位置

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是螺旋矩阵&#xff0c;使用【二维数组】这个基本的数据结构来实现 二分查找【EASY】 从最简单的二分查找入手&#xff0c;进而开始解决一系列其变体…

BASH shell脚本篇3——字符串处理

这篇文章介绍下BASH shell中的字符串处理的相关命令。之前有介绍过shell的其它命令&#xff0c;请参考&#xff1a; BASH shell脚本篇1——基本命令 BASH shell脚本篇2——条件命令 Bash字符串也是一种数据类型&#xff0c;它用于表示文本而不是数字&#xff0c;它是一组可能…

哈哈,我保研985了,之后会出一期保研经验分享

哈哈&#xff0c;我保研了&#xff0c;之后会出一期保研经验分享 个人背景 学校&#xff1a;河南某四非&#xff0c;计算机科学与技术专业英语成绩&#xff1a;四级439&#xff0c;六级438&#xff08;夏令营无六级&#xff09;科研经历&#xff1a;一个软著、国家级大创&…

软件测试教程 自动化测试selenium篇(二)

掌握Selenium常用的API的使用 一、webdriver API public class Main {public static void main(String[] args) {ChromeOptions options=new ChromeOptions();//参数表示允许所有请求options.addArguments("--remote-allow-origins=*");WebDriver webDriver=new Chr…

基于被囊群优化的BP神经网络(分类应用) - 附代码

基于被囊群优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于被囊群优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.被囊群优化BP神经网络3.1 BP神经网络参数设置3.2 被囊群算法应用 4.测试结果&#x…

【C语言】青蛙跳台阶 —— 详解

一、问题描述 跳台阶_牛客题霸_牛客网 (nowcoder.com) LCR 127. 跳跃训练 - 力扣&#xff08;LeetCode&#xff09; 二、解题思路 1、当 n 1 时&#xff0c;一共只有一级台阶&#xff0c;那么显然青蛙这时就只有一种跳法 2、当 n 2 时&#xff0c;一共有两级台阶&#xff…

Python操作自动化

迷途小书童 读完需要 3分钟 速读仅需 1 分钟 当我们需要自动化进行一些重复性的任务时&#xff0c;Python 中的 pyautogui 库就可以派上用场了&#xff0c;这个库可以模拟鼠标和键盘的操作&#xff0c;让我们的程序可以像人一样与计算机进行交互。 首先&#xff0c;我们需要安装…

Kafka收发消息核心参数详解

文章目录 1、从基础的客户端说起1.1、消息发送者主流程1.2、消息消费者主流程 2、从客户端属性来梳理客户端工作机制2.1、消费者分组消费机制 1、从基础的客户端说起 Kafka提供了非常简单的客户端API。只需要引入一个Maven依赖即可&#xff1a; <dependency><groupId…