📜  bash: bin rm: 参数列表太长 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 14:59:30.297000             🧑  作者: Mango

Bash: ‘bin rm: 参数列表太长’ 介绍

当你在使用 rm 命令删除许多文件时,可能会遇到 "bash: bin rm: 参数列表太长" 的错误提示。这说明参数列表超出了系统允许的最大限制,因此无法删除这些文件。

为什么会出现这个错误?

当你在 shell 中执行 rm 命令时,它会将所有文件作为参数传递给 rm。如果你要删除非常多的文件,参数列表就会变得非常长,并且超出系统允许的最大限制。这个限制是由内核参数 ARG_MAX 决定的。而在Linux中缺省的szie是131072的。当文件数目很大时,一个4KB 的页框装不下那么多的inode信息,而显然不止一个页框。

如何解决这个问题?

有几种方法可以解决这个问题:

1. 使用 find 命令

find 命令可以用于查找和删除文件。通过使用 find + exec 模式,你可以轻松地删除文件,并避免遇到参数列表太长的问题。

find . -type f -iname '*.log' -delete

这个命令将会查找当前目录下的所有.log 文件并删除他们。

2. 使用 xargs 命令

xargs 命令可以将一个命令的参数列表分成多个小组,这样就可以避免参数列表太长的问题。

find . -type f -iname '*.log' | xargs rm -f

这个命令将会利用管道符将 find 的输出传递给 xargs,然后 xargs 将文件列表分成多个小组,并将每个小组作为 rm 的参数进行处理。

3. 修改 ARG_MAX

如果你仍然遇到参数列表太长的问题,你可以尝试增加内核参数 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权限才能修改。

尤其是修改内核参数需要格外小心,最好在有经验的人的指导下进行。