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

來源:互聯網
上載者:User

http://www.yunweipai.com/archives/558.html

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

吞拿魚手卷 於 3 年前2012-09-15 發表在 營運經驗

最近在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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.