在Linux执行命令报错”Arg list too long”的原因分析
http://www.yunweipai.com/archives/558.html
在Linux執(zhí)行命令報(bào)錯(cuò)”Arg list too long”的原因分析
于 3 年前2012-09-15 發(fā)表在 運(yùn)維經(jīng)驗(yàn)
最近在SUSE LINUX操作系統(tǒng)中遇到個(gè)問題:在一個(gè)包含上萬個(gè)文件的文件夾中執(zhí)行rm *刪除所有文件時(shí)報(bào)錯(cuò)“Arg list too long”,最后導(dǎo)致刪除失敗。后來查了下資料,經(jīng)過分析發(fā)現(xiàn)這里有以下幾個(gè)技術(shù)點(diǎn)需要注意:
1. 在LINUX操作系統(tǒng)有限制單條命令行的長(zhǎng)度是128KB,也就是131072字節(jié),同時(shí)rm *這個(gè)命令在刪除所有文件時(shí),這個(gè)*作為通配符最終會(huì)轉(zhuǎn)換成改文件的全路徑,使得系統(tǒng)底層將rm *轉(zhuǎn)換成了一個(gè)超過128KB大小的命令行,從而命令執(zhí)行失敗;
2. 查詢LINUX操作系統(tǒng)中單條命令行的長(zhǎng)度限制:可在LINUX操作系統(tǒng)中執(zhí)行g(shù)etconf ARG_MAX,回顯信息即為該限制的字節(jié)數(shù);
3. ARG_MAX參數(shù)在Solaris中是1048320字節(jié)(1024KB),在LINUX中式131072字節(jié)(128KB);
4. ARG_MAX參數(shù)定義是在LINUX/UNIX操作系統(tǒng)的內(nèi)核中。
最后,對(duì)于前面提到的rm *的問題,其實(shí)可以通過以下方法解決,采用管道符和xargs的結(jié)合,確保每次rm的時(shí)候只刪除一個(gè)文件,那么就不可能出現(xiàn)單條命令超過128KB字符長(zhǎng)度的問題了:
# ls | xargs rm
總結(jié)
以上是生活随笔為你收集整理的在Linux执行命令报错”Arg list too long”的原因分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bootstrap 起步
- 下一篇: linux 其他常用命令