文件搜索之前发过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是唯一的。