1. 程式人生 > >在Linux執行命令報錯”Arg list too long”的原因分析

在Linux執行命令報錯”Arg list too long”的原因分析

最近在SUSE LINUX作業系統中遇到個問題:在一個包含上萬個檔案的資料夾中執行rm *刪除所有檔案時報錯“Arg list too long”,最後導致刪除失敗。後來查了下資料,經過分析發現這裡有以下幾個技術點需要注意:

1. 在LINUX作業系統有限制單條命令列的長度是128KB,也就是131072位元組,同時rm *這個命令在刪除所有檔案時,這個*作為萬用字元最終會轉換成改檔案的全路徑,使得系統底層將rm *轉換成了一個超過128KB大小的命令列,從而命令執行失敗;

2. 查詢LINUX作業系統中單條命令列的長度限制:可在LINUX作業系統中執行getconf ARG_MAX,回顯資訊即為該限制的位元組數;

3. ARG_MAX引數在Solaris中是1048320位元組(1024KB),在LINUX中式131072位元組(128KB);

4. ARG_MAX引數定義是在LINUX/UNIX作業系統的核心中。

最後,對於前面提到的rm *的問題,其實可以通過以下方法解決,採用管道符和xargs的結合,確保每次rm的時候只刪除一個檔案,那麼就不可能出現單條命令超過128KB字元長度的問題了:
# ls | xargs rm