Linux学习[8]查找文件指令:which whereis locate find

news2024/10/6 6:43:32

文章目录

  • 前言
  • 1. which
  • 2. whereis
  • 3. locate
  • 4. find
  • 总结:

前言

之前在弄交叉编译的时候需要找到gcc,gdb什么的在哪里;涉及到了查找文件指令。
这里对linux中的查找指令进行总结


1. which

which指令一般用来寻找可执行文件的路径,比如我们使用的ifconfig,ls这种可执行文件指令所在的地方。

which 默认是找 PATH 内所规范的目录,所以如果我们的可执行文件的命令没有在PATH里面,那使用which无法查到。

这里举几个例子:

输入which ifconfig指令
输出/sbin/ifconfig

输入which history指令
提示/usr/bin/which: no history in (/usr/local/sbin:/usr/local/bin:/sbin:/bin: /usr/sbin:/usr/bin:/root/bin)
这里是因为history是bash内置的指令,并不在PATH中,这也侧面说明which默认是找PATH内所规范的目录。


2. whereis

whereis指令可谓好评如潮,因为相对于find指令,这个指令用起来并没有find那么太复杂,并且速度比find要快很多。
那为何搜寻的速度会比 find 快这么多? 是因为 whereis 只找几个特定的目录而已,并没有全系统去查询之故。所以说,whereis 主要是针对 /bin /sbin 下面的可执行文件, 以及 /usr/share/man 下面的 man page 文件,跟几个比较特定的目录来处理而已。所以速度当然快的多!

whereis的一般用法如下:
whereis option 文件或目录名
选项与参数option:
-l :可以列出 whereis 会去查询的几个主要目录而已
-b :只找 binary 格式的文件
-m :只找在说明文档 manual 路径下的文件
-s :只找 source 来源文件
-u :搜寻不在上述三个项目当中的其他特殊文件

举例:
whereis ifconfig

ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz


3. locate

locate也是查找的指令,只不过它需要根据系统的数据库进行查找,数据库内数据更新时间的新旧会影响到查找的结果。
因此这个东西还是有使用上的限制。你会发现使用 locate 来寻找数据的时候特别的快, 这是因为 locate 寻找的数据是由“已创建的数据库 /var/lib/mlocate/” 里面的数据所搜寻到的,所以不用直接在去硬盘当中存取数据,因此非常快。

因为他是经由数据库来搜寻的,而数据库的创建默认是在每天执行一次 ,所以当你新创建起来的文件, 却还在数据库更新之前搜寻该文件,那么 locate 会告诉你“找不到!”,所以必须要更新数据库呀。

手动更新数据库,直接输入“ updatedb ”就可以了。 updatedb 指令会去读取 /etc/updatedb.conf 这个配置文件的设置,然后再去硬盘里面进行搜寻文件名的动作, 最后就更新整个数据库文件啰!因为 updatedb 会去搜寻硬盘,所以当你执行 updatedb 时,可能会等待数分钟的时间。

指令说明:
updatedb:根据 /etc/updatedb.conf 的设置去搜寻系统硬盘内的文件名,并更新 /var/lib/mlocate 内的数据库文件;
locate:依据 /var/lib/mlocate 内的数据库记载,找出使用者输入的关键字文件名。

locate一般用法:locate option keyword
选项与参数:
-i :忽略大小写的差异;
-c :不输出文件名,仅计算找到的文件数量
-l :仅输出几行的意思,例如输出五行则是 -l 5
-S :输出 locate 所使用的数据库文件的相关信息,包括该数据库纪录的文件/目录数量等
-r :后面可接正则表达式的显示方式

举例:

找出系统中所有与 passwd 相关的文件名,且只列出 5 个
[root@ubuntu ~]# locate -l 5 passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/usr/bin/gpasswd


4. find

find的功能非常强大,但是速度比较慢,因为它涉及到了很多参数
find用法:find [PATH] [option] [action]

选项与参数:
时间有关的选项:共有 -atime, -ctime 与 -mtime ,以 -mtime 说明
-mtime n :n 为数字,意义为在 n 天之前的“一天之内”被更动过内容的文件;
-mtime +n :列出在 n 天之前(不含 n 天本身)被更动过内容的文件文件名;
-mtime -n :列出在 n 天之内(含 n 天本身)被更动过内容的文件文件名。
-newer file :file 为一个存在的文件,列出比 file 还要新的文件文件名

举例:

寻找 /etc 下面的文件,如果文件日期比 /etc/passwd 新就列出
[root@ubuntu~]# find /etc -newer /etc/passwd
-newer 用在分辨两个文件之间的新旧关系


使用者或群组名称有关的参数:

-uid n :n 为数字,这个数字是使用者的帐号 ID,亦即 UID ,这个 UID 是记录在/etc/passwd 里面与帐号名称对应的数字。
-gid n :n 为数字,这个数字是群组名称的 ID,亦即 GID,这个 GID 记录在/etc/group,相关的介绍我们会第四篇说明~
-user name :name 为使用者帐号名称喔!例如 dmtsai
-group name:name 为群组名称喔,例如 users ;
-nouser :寻找文件的拥有者不存在 /etc/passwd 的人
-nogroup :寻找文件的拥有群组不存在于 /etc/group 的文件
当你自行安装软件时,很可能该软件的属性当中并没有文件拥有者,
这是可能的!在这个时候,就可以使用 -nouser 与 -nogroup 搜寻。

举例:

搜寻 /home 下面属于 pi的文件
[root@ubuntu~]# find /home -user pi
#这个东西也很有用的~当我们要找出任何一个使用者在系统当中的所有文件时,
#就可以利用这个指令将属于某个使用者的所有文件都找出来


文件权限及名称有关的参数:

name filename:搜寻文件名称为 filename 的文件;
-size [+-]SIZE:搜寻比 SIZE 还要大(+)或小(-)的文件。这个 SIZE 的规格有: c: 代表 Byte, k: 代表 1024Bytes。所以,要找比 50KB 还要大的文件,就是“ -size +50k ”
-type TYPE :搜寻文件的类型为 TYPE 的,类型主要有:一般正规文件 (f), 设备文件 (b, c), 目录 (d), 链接文件 (l), socket (s), 及 FIFO (p) 等属性。
-perm mode :搜寻文件权限“刚好等于” mode 的文件,这个 mode 为类似 chmod的属性值,举例来说, -rwsr-xr-x 的属性为 4755 !
-perm -mode :搜寻文件权限“必须要全部囊括 mode 的权限”的文件,举例来说,我们要搜寻 -rwxr–r-- ,亦即 0744 的文件,使用 -perm -0744,当一个文件的权限为 -rwsr-xr-x ,亦即 4755 时,也会被列出来,因为 -rwsr-xr-x 的属性已经囊括了 -rwxr–r-- 的属性了。
-perm /mode :搜寻文件权限“包含任一 mode 的权限”的文件,举例来说,我们搜寻 -rwxr-xr-x ,亦即 -perm /755 时,但一个文件属性为 -rw------- 也会被列出来,因为他有 -rw… 的属性存在!

举例:

找出文件名为 passwd 这个文件
[root@ubuntu~]# find / -name passwd

找出文件名包含了 passwd 这个关键字的文件
[root@ubuntu~]# find / -name “passwd
#利用这个 -name 可以搜寻文件名,默认是完整文件名,如果想要找关键字,
#可以使用类似 * 的任意字符来处理

找出 /run 目录下,文件类型为 Socket 的文件名有哪些?
[root@ubuntu~]# find /run -type s
#这个 -type 的属性也很有帮助喔!尤其是要找出那些怪异的文件,
#例如 socket 与 FIFO 文件,可以用 find /run -type p 或 -type s 来找!

搜寻文件当中含有 SGID 或 SUID 或 SBIT 的属性
[root@ubuntu~]# find / -perm /7000
#所谓的 7000 就是 —s–s–t ,那么只要含有 s 或 t 的就列出,所以当然要使用 /7000,
#使用 -7000 表示要同时含有 —s–s–t 的所有三个权限。而只需要任意一个,就是 /7000


额外可进行的动作:
-exec command :command 为其他指令,-exec 后面可再接额外的指令来处理搜寻到的结果。
-print :将结果打印到屏幕上,这个动作是默认动作!

举例说明:

将上个范例找到的文件使用 ls -l 列出来~
[root@ubuntu~]# find /usr/bin /usr/sbin -perm /7000 -exec ls -l {} ;
#注意到,那个 -exec 后面的 ls -l 就是额外的指令,指令不支持命令别名,
#所以仅能使用 ls -l 不可以使用 ll

在这里插入图片描述

找出系统中,大于 1MB 的文件
[root@ubuntu~]# find / -size +1M

{} 代表的是“由 find 找到的内容”,如上图所示,find 的结果会被放置到 {} 位置中;
-exec 一直到 ; 是关键字,代表 find 额外动作的开始 (-exec) 到结束 (;) ,在这中间的就是 find 指令内的额外动作。 在本例中就是“ ls -l {} ”
因为“ ; ”在 bash 环境下是有特殊意义的,因此利用反斜线来跳脱。


总结:

这篇文章大体都是以书上为主,个人见解较少,因为实际运用中find暂时用的还不多,都是用whereis来替代,或者使用图形化界面来查找。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenCV实战(20)——图像投影关系

OpenCV实战(20)——图像投影关系 0. 前言1. 相机成像原理2. 图像对的基本矩阵3. 完整代码小结系列链接 0. 前言 数码相机通过将光线通过镜头投射到图像传感器上来捕捉场景产生图像。由于通过将 3D 场景投影到 2D 平面上形成图像,因此场景与其…

时序预测 | MATLAB实现BO-CNN-GRU贝叶斯优化卷积门控循环单元时间序列预测

时序预测 | MATLAB实现BO-CNN-GRU贝叶斯优化卷积门控循环单元时间序列预测 目录 时序预测 | MATLAB实现BO-CNN-GRU贝叶斯优化卷积门控循环单元时间序列预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 基于贝叶斯(bayes)优化卷积神经网络-门控循环单元(CNN-GR…

2023年人工智能GPT-4时代,最新13个ChatGPT商业市场AIGC应用正在掀起革命性变革!

目录 前言ChatGPT商业应用——LLM是星辰大海1. 研究背景1.1 研究背景1.2 研究方法 2. 商业应用和案例分析2.1 工具层ChatGPT搜索ChatGPT办公ChatGPT教育 2.2 行业层ChatGPT游戏ChatGPT音乐ChatGPT零售电商ChatGPT广告营销ChatGPT媒体新闻ChatGPT金融ChatGPT医疗ChatGPT设计Chat…

AI绘画能力的起源:通俗理解VAE、扩散模型DDPM、ViT/Swin transformer

前言 2018年我写过一篇博客,叫:《一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD》,该文相当于梳理了2019年之前CV领域的典型视觉模型,比如 2014 R-CNN2015 Fast R-CNN、Faster R-CNN2016 YOLO、SSD2…

Linux命令集(Linux网络连接管理命令--ifconfig指令篇)

Linux命令集(Linux网络连接管理命令--ifconfig指令篇) Linux网络连接管理命令集(ifconfig指令篇)1. ifconfig(interface configuration)1. 信息显示2. 接口配置 Linux网络连接管理命令集(ifconfig指令篇) 如…

C++Primer第五版【阅读笔记】

CPrimer第五版 阅读笔记 第1章开始1.1 编写一个简单的C程序1.1.1 编译、运行程序 1.2 初识输入输出1.3 注释简介1.4 控制流1.4.1 while语句1.4.2 for语句1.4.3 读取数量不定的输入数据1.4.4 if语句 1.5 类简介1.5.1 Sales_item 类1.5.2 初识成员函数 1.6 书店程序第一章小结 第…

【Linux入门】linux指令(1)

【Linux入门】linux指令(1) 目录 【Linux入门】linux指令(1)操作系统登录服务器Linux下的基本指令ls指令pwd指令Linux路径分割符 /cd指令touch指令mkdir指令(重要)rmdir指令&&rm指令(重…

4.30下周美联储携非农来袭黄金多空该如何布局?

近期有哪些消息面影响黄金走势?下周黄金多空该如何研判? ​黄金消息面解析:周五(4月28日)当周金价维持震荡交投,金价基本持稳于2000美元下方。支撑和打压金价的因素参半。经济衰退的担忧,以及避险情绪支持金价&#x…

Fabric.js 讲解官方demo:Stickman

theme: smartblue 本文简介 戴尬猴,我是德育处主任 Fabric.js 官网有很多有趣的Demo,不仅可以帮助我们了解其功能,还可以为我们提供创意灵感。其中,Stickman是一个非常有趣的例子。 先看看效果图 从上图可以看出,在拖拽…

【SpringBoot2】二:基础入门---自动配置原理(SpringBoot特点+容器功能)

文章目录 1.SpringBoot特点1.1 依赖管理1.2 自动配置 2.容器功能2.1 组件添加2.1.1Configuration2.1.2 Bean、Component、Controller、Service、Repository2.1.3 ComponentScan、Import2.1.4 Conditional 2.2 原生配置引入ImportResource2.3 配置绑定2.3.1 Component Configur…

如何保障网络安全

网络安全是一个涵盖范围广、深入浅出的话题。随着互联网在现代社会中扮演的重要角色日益突出,网络安全问题成为各个领域所关注的焦点。在此,我们将从以下几个方面来阐述网络安全的重要性,并讨论几种保障网络安全的方式。 一、网络安全的重要性…

K8s(1.20.15版本)部署(3master+2node)

1.准备工作 准备五台centos 7的虚拟机(每台虚拟机分配2核2G,存储使用20G硬盘,必须2核不然报错):如下图机器的分配情况: IP节点名称节点类型10.10.10.11k8s-master11master10.10.10.12k8s-master12master1…

解决centos8下域名raw.githubusercontent.com解析错误

在win10环境下执行命令 D:\test>ping raw.githubusercontent.com Ping 请求找不到主机 raw.githubusercontent.com。请检查该名称,然后重试。 解决很简单,把ipv6的DNS服务器设为240c::6666就行了,改完后执行命令 D:\test>ping raw.g…

C语言函数大全-- s 开头的函数(2)

C语言函数大全 本篇介绍C语言函数大全-- s 开头的函数(2) 1. setlinestyle 1.1 函数说明 函数声明函数功能void setlinestyle( int linestyle, unsigned upattern, int thickness );设置当前绘图窗口的线条样式、线型模式和线条宽度 参数&#xff1a…

SQL中去除重复数据的几种方法,我一次性都告你​

使用SQL对数据进行提取和分析时,我们经常会遇到数据重复的场景,需要我们对数据进行去重后分析。 以某电商公司的销售报表为例,常见的去重方法我们用到distinct 或者group by 语句, 今天介绍一种新的方法,利用窗口函数…

不得不说的行为型模式-命令模式

目录 命令模式: 代码实例: 下面是面试中可能遇到的问题: 命令模式: 命令模式(Command Pattern)是一种行为型设计模式,它允许将请求封装成对象,从而让你能够用不同的请求对客户端进行参数化,对…

Guitar Pro8苹果mac最新版本下载安装教程

Guitar Pro是一款专业的吉他制谱软件,现在已更新至Guitar Pro8,新增了支持添加音频轨道、支持嵌套连音符、直观的效果器视图、让指法一目了然的音阶示意图等实用新功能。下面我们来看Guitar Pro8 Mac如何安装。 guitar pro是一款专业的吉他学习软件&…

Linux内核(十四)Input 子系统详解 I —— 子系统介绍以及相关结构体解析

文章目录 概述input 子系统框架input 子系统相关结构体介绍input_dev结构体input_handler结构体input_handle结构体Evdev事件相关结构体input_event结构体(标准按键编码信息)设备相关信息结构体 概述 input子系统就是管理输入的子系统,和Lin…

HTML中的常用标签

HTML中的常用标签 🔎注释标签🔎标题标签🔎段落标签🔎换行标签🔎格式化标签🔎图片标签🔎超链接标签🔎表格标签合并单元格 🔎列表标签无序列表有序列表自定义列表 &#x1…

新手如何快速学会Python?

在本文中,我们将介绍如何有效地学习 Python 。你应该知道「数据科学」是用于解决、探究问题并从数据中提取有价值信息的科学。 为了有效地做到这一点,你需要整理数据集、训练机器学习模型、可视化结果等等。 这是学习 Python 的最佳时机。 事实上&#x…