📅  最后修改于: 2023-12-03 14:59:30.297000             🧑  作者: Mango
当你在使用 rm 命令删除许多文件时,可能会遇到 "bash: bin rm: 参数列表太长" 的错误提示。这说明参数列表超出了系统允许的最大限制,因此无法删除这些文件。
当你在 shell 中执行 rm 命令时,它会将所有文件作为参数传递给 rm。如果你要删除非常多的文件,参数列表就会变得非常长,并且超出系统允许的最大限制。这个限制是由内核参数 ARG_MAX 决定的。而在Linux中缺省的szie是131072的。当文件数目很大时,一个4KB 的页框装不下那么多的inode信息,而显然不止一个页框。
有几种方法可以解决这个问题:
find 命令可以用于查找和删除文件。通过使用 find + exec 模式,你可以轻松地删除文件,并避免遇到参数列表太长的问题。
find . -type f -iname '*.log' -delete
这个命令将会查找当前目录下的所有.log 文件并删除他们。
xargs 命令可以将一个命令的参数列表分成多个小组,这样就可以避免参数列表太长的问题。
find . -type f -iname '*.log' | xargs rm -f
这个命令将会利用管道符将 find 的输出传递给 xargs,然后 xargs 将文件列表分成多个小组,并将每个小组作为 rm 的参数进行处理。
如果你仍然遇到参数列表太长的问题,你可以尝试增加内核参数 ARG_MAX 的值。但是,在修改内核参数之前,请务必仔细了解其潜在风险和影响。并且,需要root权限。
打开终端后,输入以下命令:
sudo sysctl fs.file-max
然后通过以下命令修改 ARG_MAX 的值:
sudo sysctl -w fs.file-max=100000
请注意:arg_max有最大长度,超长是有意义的,可能会大大影响系统的性能,因此尽可能不要超过默认值。
当你遇到 "bash: bin rm: 参数列表太长" 的问题时,不要惊慌。可以使用 find 或 xargs 命令来避免这个错误,或使用修改内核参数方案,但是需要注意其风险并且需具有root权限才能修改。
尤其是修改内核参数需要格外小心,最好在有经验的人的指导下进行。