文件搜索find命令(附两个重要拓展和一个补充)

文件搜索之前发过ls通配符的方法,相当于一个模糊搜索查找,ls的主要作用还是罗列文件,只不过可以通过该方法进行一个模糊的查找,具体代码如下:

 2.有一个更好的方法,find可以指定搜索范围,比如在该目录下不止搜索出该文件夹,还搜索子目录。可以精确也可以模糊,且不仅仅通过文件名搜索,还可以通过大小类型进行搜索。命令格式为:find+目录+条件。

(1)通过文件名精确搜索:比如搜索名字为123的文件,则可通过find / -name 123进行搜索,其中,/代表根目录,里面文件很多,我们在运用时尽量将范围缩小,-name代表我们后面的是文件的名字。

我们发现,输出了很多个输出结果,停止程序我们可以通过ctrl+c进行停止。 其中很多文件显示权限不足(permission denied),这是因为根目录中有很多文件是需要更高级的权限的,我们无法访问,但在搜索时又必须进行查找,所以会显示权限不够,不代表查找到了东西。所以我们查找对象时要至少在home中查找,目录越详细查找的越快。

 (2)模糊搜索文件名关键字:加入之前学过的通配符,如find /home -name 12*

当我们输入如下命令时,出现错误,即name后面的引用格式不对,这是因为后面带了通配符,相当于一个语句,我们需要将语句整体“框”起来,告诉系统这是一个整体,否则系统无法进行识别,同理,当文件名中有空格时也需要用单引号框起来。

正确如下: 

      上图中,限定12后面只有五个字符,因为复印件后面多了(复印)这四个字符,所以不会被搜索到。注意,Linux区分大小写,所以输入find /home -name abc,只会搜索到abc而不会搜索到ABC。若不想区分大小写,则需要输入,find /home -iname 'abc'。注意根据报错添加单引号,很容易忘记!

(3)按大小搜索:后面的那个数字是一个数据块,1block=512byte。设H.txt大小为2.4k。+的意搜索比后面数据块还要大的文件, -的意思是搜索比数据块大小还要小的文件 。

拓展:W是一个文件夹,它是空的,但是被搜索出来了,为什么?(参考于claude-3-5-sonnet)

1. 目录大小的计算:
   在 Unix/Linux 系统中,目录的"大小"并不反映其内容的总大小,而是反映存储目录结构本身所需的空间。

2. 最小分配单元:
   文件系统通常有一个最小分配单元(通常是 4KB 或 4096 字节)。即使一个目录是空的,它也会占用这个最小单元的空间。

3. find 命令的行为:
   当你使用 find 命令搜索特定大小的文件时,它会检查文件系统报告的每个文件和目录的大小。对于目录,这个大小就是存储目录结构所需的空间,而不是其内容的大小。

4. 大小比较:
   如果你的 find 命令搜索的是大于 0 字节的文件(例如 -size +0c),那么所有目录都会被包含在结果中,因为它们都至少有 4KB 的大小。

  例子:假设你运行了这样的命令:

find /path -size +0

这会列出所有大于 0 字节的文件和目录,包括所有空目录,因为它们都至少有 4KB 大小。

 解决方法:
如果你只想搜索文件而不包括目录,可以使用 -type f 选项:

find /path -type f -size +0

这样就只会搜索普通文件,而不包括目录。

如下,当大小为3.5k时可以搜索到文件夹,大于4k时便搜索不到了。

—————————————————————————————————————————

接拓展前:

若想要查找正好等于7的文件,把+或-号去掉即可。

·发现直接输入大小也可以搜索得到。(-type f中f代表普通文档,d代表目录)

(4)按照文件的所属人和文件时间搜索

通过ls -l查看文件的信息。快捷方式,ll直接输入即可。

    第一个suki的意思就是文件的所属人(suki是我给系统起的名字,类似于用户名) 

    在使用时如果进入到suki文件夹后,所属人并不一定都是suki,因为有可能发生权限变更、复制或移动文件、sudo或root操作等特殊情况。

文件时间上有文件的内容修改时间、文件访问时间、文件属性修改时间。

使用命令ll后,第一列就是文件的权限,属于属性。属性包括文件名、文件大小、文件创作者等。

补充:

第一列那些字母到底是什么意思,上图中的第一列代表什么?

这部分由10个字符组成,分为四组,分别表示文件类型、文件所有者的权限、文件所属组的权限以及其他用户的权限。下面是这些权限字符的含义:

1. 文件类型:
   - `-` 表示普通文件。
   - `d` 表示目录。
   - `l` 表示符号链接(类似Windows的快捷方式)。
   - `b`, `c` 表示块设备和字符设备文件。
   - `p` 表示命名管道(FIFO)。
   - `s` 表示套接字文件。
   - `D` 在某些系统上表示 doors (Solaris)。

2. 权限位:
   接下来的9个字符分为三组,每组三个字符,分别对应上面提到的三种用户类型(所有者、所属组、其他用户)。每个组内的三个字符分别代表:
   - `r` (read):读权限,允许查看文件内容或列出目录内容。
   - `w` (write):写权限,允许修改文件内容或在目录中创建、删除文件。
   - `x` (execute):执行权限,允许执行文件(对于目录,表示可以cd进入该目录)。
   - `-` 表示没有相应的权限。

以上面出现的权限字符作为例子:

- `drwxr-xr-x`:
  - `d` 表示这是一个目录。
  - 接下来的`rwx`表示所有者有读、写、执行权限。
  - 中间的`r-x`表示所属组有读和执行权限,但没有写权限。
  - 最后的`r-x`表示其他用户也有读和执行权限,但没有写权限。

- `-rw-r--r--`:
  - `-` 表示这是一个普通文件。
  - 接下来的`rw-`表示所有者有读和写权限,但没有执行权限。
  - 中间的`r--`表示所属组只有读权限,没有写和执行权限。
  - 最后的`r--`表示其他用户也只有读权限,没有写和执行权限。

拓展:

上述提到的用户类型含义如下:

1. 所有者(Owner):
   - 这是指创建文件或目录的用户。每个文件或目录都会有一个明确的所有者。
   - 所有者通常对该文件或目录拥有最广泛的权限,包括读取(read)、写入(write)和执行(execute)的权限。
   - 通过`chown`命令可以更改文件的所有者。

2. 所属组(Group):
   - 用户可以属于一个或多个用户组。当一个用户创建文件时,该文件的所属组默认被设置为该用户的主要用户组。
   - 属于同一组的用户共享一组权限,通常用于协作,使得组内成员可以有相似的访问权限,如共同编辑文档。
   - 通过`chgrp`命令可以更改文件的所属组。
   - 如果需要精细控制,可以通过`setgid`位(在目录上设置,让在此目录下创建的文件自动继承该目录的组所有权)来实现组内权限传递。

3. 其他用户(Others):
   - 这指的是既不是文件所有者,也不属于文件所属组的任何系统用户。
   - 对于大多数文件,其他用户的权限较为受限,通常只给予读权限或没有任何权限,以保护文件内容的安全性。
   - 其他用户的权限体现了文件或目录对系统中其他所有人的开放程度。

———————————————————————————————————————

书接上文:

比如电脑被黑客攻击,我们需要通过修改时间来判断哪个文件被篡改了,那么如何通过时间查找文件?

其中,mmin中第一个m意思是modify即修改,-5代表修改时间在五分钟以内,+5则代表以外。 

mmin还可以换成:amin是文件被访问的时间,cmin是文件属性(权限)被修改的时间。最常用的还是mmin,文件内容修改时间。

(5)按文件类型搜索

文件有三种,分为正常的文件(文本文件、二进制文件  file)、文件夹(目录  directory)、软链接(link)类型(相当于Windows下面的快捷方式)

 (6)对上述条件可以进行组合搜索使用

但是我们最好把两个命令之间加一个-a(and)进行连接,因为这是一个逻辑关系词,不加默认是-a。

逻辑关系除了and还有or

 (7)通过id搜索

可以通过命令ls -i查看id,下图中第一列就是id(ls -li就是以列表的形式展示,可类比)

inum也就是id number。这个搜索方法很精确,因为每个文件的id是唯一的。 

  • 30
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值