听起来好像您是递归搜索整个文件系统层次结构。这在大多数系统上无法按预期工作。
在Linux上至少有/proc
和/sys
是虚拟文件系统 - 它们不对应磁盘上的实际文件。 /dev
中的特殊文件也不是实际文件 - 它们对应于系统中的某些设备,例如硬盘,输入设备e.t.c。修改 - 有时甚至是读 - 这些目录下的文件不应以不受控制的方式进行修改,因为您可能会崩溃内核,破坏文件系统甚至永久损坏硬件。
由于您使用find
进行搜索,您需要限制其搜索的范围:
使用明确否定-path
选项:
find/-maxdepth 2 -type f ! -path '/proc/*' ! -path '/sys/*'
使用-prune
选项:
find/-maxdepth 2 -path '/proc' -prune -o -path '/sys' -prune -o -type f -print
使用-xdev
选项,以避免下降到其它文件系统完全:
find/-maxdepth 2 -xdev -type f
,因为你需要微调的find
输出可以使用尽可能多的-path
和/或-prune
选项。不过,我建议你先检查它的输出,然后再将它传递到管道中的任何后期阶段。
编辑:
这里有以不受控制的方式访问特定的文件时造成的损害的一些例子 - 通常为root
:
旧版内核used to crash如果/proc/kcore
被读为root
。我认为这不再发生,但是我自从/proc/kcore
被引入到2.4.x内核系列和它的occasionally pops up again之后,所以我没有心情去实际测试它...
读取块设备通过其设备节点/dev/
可能会严重减慢该设备上的其他任何操作,因为它会绕过VFS和各种缓存。想象一下,例如,直接读取6TB RAID-5部分,而其他进程则尝试通过已安装的文件系统正确使用它。使用-type f
在find
应该防止发生这种情况。
由于您提到的修改,您可以通过破坏其固件,通过/dev/mtd*
可以轻松地制作嵌入式设备。在某些情况下,如果没有一些非常极端的措施,就无法从这种腐败中恢复过来
所以使用'find $ whatever! -wholename“/ proc/sysrq-trigger”'? – 2012-02-26 11:21:54
*为什么*你在'/ proc'中递归读取文件?如果您以更广泛的方式告诉我们您想要做什么,我们可能会帮助您更多。 – thkala 2012-02-26 18:45:23
@thkala试图搜索具有特定字符串的文件,然后删除该文件的全部内容。 – user1166981 2012-02-29 21:33:32