find命令的-size +-n[bcwkMB]不包括精确n大小的文件、以及对! -user的一个疑问

本文探讨了文件系统中如何使用与-后缀来筛选特定大小范围内的文件,以及在进行文件查找时如何排除特定用户拥有的文件。通过实例说明了在Linux环境下,即使指定了查找目录,仍可能因递归查找而遇到指定用户所拥有的目录。

+与-后缀分别表示大于小于,不匹配大小精确等于n个单位的文件。-size -1M不是等价于-size -1048576c。向前匹配空文件,向后匹配0到1048575字节的文件。

 

下面例题查找拥有者不是haypin的文件,第一项将找到/home/haypin目录,这是为什么?

指定查找文件则只会找到文件,用户均不是haypin的:

指定查找目录,仍会找到用户为haypin的目录,这是为什么?

<think>我们被要求解释find命令-size参数的用法以及查找大文件的方法,特别是用户提到的在/etc目录下查找大小超过204800 blocks的文件。 首先,我们需要理解find命令-size参数-size参数用于指定文件大小,其参数格式为:-size n[bcwkMG] 其中: n是数字 b: 512字节块(默认单位,如果未指定单位,则默认是b) c: 字节 w: 双字节(2字节) k: 千字节(1024字节) M: 兆字节(1024*1024字节) G: 吉字节(1024*1024*1024字节) 注意:用户提到的是“blocks”,在find命令中,默认的单位是512字节的块(即b)。因此,204800 blocks 表示 204800 * 512 字节。 用户要求:查找/etc目录下大小大于204800 blocks的文件。 因此,我们可以这样写命令find /etc -type f -size +204800 解释: - /etc:要查找的目录 - -type f:只查找普通文件(排除目录等) - -size +204800:大小大于204800个512字节块(注意:+表示大于) 但是,需要注意的是,find命令默认的单位是512字节块,所以这里直接使用数字204800,单位省略(即b)。 另外,我们也可以使用其他单位,但用户要求的是blocks,所以使用默认单位即可。 关于查找大文件的一般方法: 1. 使用find命令,通过-size参数指定大小,并配合+表示大于,-表示小于。 2. 可以使用同的单位,例如: -size +100M # 大于100MB的文件 -size -1G # 小于1GB的文件 -size +1024k # 大于1024KB的文件 3. 为了更直观地查看文件大小,可以结合ls命令或du命令,例如: find /etc -type f -size +204800 -exec ls -lh {} \; 这样会以易读的格式(如K、M、G)显示每个文件大小。 4. 也可以使用du命令来查看总大小,但find本身计算总和,所以需要借助其他命令。 因此,针对用户的具体问题,我们给出以下步骤: 步骤1:打开终端 步骤2:运行命令:sudo find /etc -type f -size +204800 注意:因为/etc目录下的文件可能有些需要root权限才能访问,所以加上sudo避免权限错误。 步骤3:如果需要查看这些文件的详细信息(如大小、权限等),可以运行: sudo find /etc -type f -size +204800 -exec ls -lh {} \; 步骤4:如果只想列出文件名,可以去掉-exec部分,或者使用-print(默认就是打印路径)。 另外,关于blocks的单位,用户需要知道: 1 block = 512 bytes 所以204800 blocks = 204800 * 512 bytes = 104857600 bytes = 100MB 因此,这个查找等价于查找大于100MB的文件。 最后,我们生成一些相关问题。 注意:回答中引用的段落末尾自然地添加引用标识(这里没有具体引用来源,所以我们可以添加,或者如果引用了某个手册页,可以标注[^1])。但根据要求,我们尽量在引用时添加。 由于用户提到的是/etc目录,而/etc通常是配置文件,一般会有非常大的文件,所以如果找到也是正常的。 现在,我们按照要求组织回答。</think>### `find` 命令中 `-size` 参数的用法详解 #### 1. **`-size` 参数基础语法** ```bash find [路径] -size [+|-]n[单位] ``` - **`+n`**: 查找**大于** `n` 个单位的文件(如 `+100M` 表示 >100MB) - **`-n`**: 查找**小于** `n` 个单位的文件(如 `-1G` 表示 <1GB) - **`n`**: 查找**等于** `n` 个单位的文件(如 `204800` 表示精确等于 204800 blocks) #### 2. **单位说明** | 单位 | 含义 | 示例 | |------|------|------| | (默认) | **512字节块** | `-size 204800` = 204800 blocks | | `c` | 字节 | `-size +1024c` = >1024 字节 | | `k` | 千字节 (1024字节) | `-size +200k` = >200KB | | `M` | 兆字节 (1024²字节) | `-size +10M` = >10MB | | `G` | 吉字节 (1024³字节) | `-size -2G` = <2GB | > **关键点**:未指定单位时默认使用 **512字节块**(传统UNIX文件系统分配单位)[^1] --- ### 针对您的问题:查找 `/etc` 中大于 204800 blocks 的文件 #### 命令实现 ```bash find /etc -type f -size +204800 ``` - **`/etc`**: 搜索目录 - **`-type f`**: 仅搜索**普通文件**(排除目录等) - **`-size +204800`**: 文件大小 > 204800 blocks #### 计算实际大小 $$ 204800 \text{ blocks} \times 512 \text{ bytes/block} = 104857600 \text{ bytes} \approx 100 \text{ MB} $$ --- ### 查找大文件的进阶技巧 #### 1. 组合使用单位(推荐) ```bash # 查找大于100MB的文件(等价于204800 blocks) find /etc -type f -size +100M ``` #### 2. 显示文件详细信息 ```bash find /etc -type f -size +100M -exec ls -lh {} \; ``` 输出示例: ``` -rw------- 1 root root 150M Mar 10 10:23 /etc/large_logfile.log ``` #### 3. 按大小排序结果 ```bash find /etc -type f -size +50M -exec du -h {} + | sort -rh ``` 输出示例: ``` 150M /etc/large_logfile.log 80M /etc/backup.tar.gz ``` #### 4. 删除查找到的大文件(谨慎!) ```bash find /etc -type f -size +100M -delete ``` --- ### 技术原理图 ```mermaid graph TD A[find /etc -size +204800] --> B[遍历文件系统] B --> C{检查每个文件} C -->|读取stat结构| D[获取st_blocks] D --> E{st_blocks > 204800?} E -->|是| F[输出文件路径] E -->|否| G[跳过] ``` > **文件系统底层**: > `st_blocks` 来自文件系统的 inode 结构,表示文件实际占用的 **512字节磁盘块数量**(非逻辑大小)[^1] --- ### 常见问题解答 **Q1: 为什么 `-size +100M` 和 `-size +204800` 结果可能同?** > 因 `-size +204800` 统计**物理磁盘块占用**,而 `-size +100M` 基于**文件逻辑大小**(稀疏文件可能同) **Q2: 如何查找所有目录中的大文件?** > 移除 `-type f` 限制: > ```bash > find / -size +1G # 搜索整个系统 > ``` **Q3: `-size` 参数支持小数吗?** > 支持,但可用字节单位: > ```bash > find /etc -size +$((100*1024*1024))c # 精确100MB > ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值