Linuxがシステムコマンド(ls *; cp *; rm *; cat *; etc…)に渡すパラメータが多すぎると、 "引数リスト"が表示されます。長すぎるエラーこの記事では、複雑さに応じて低から高の順に並べた4つの解決策を紹介します。

方法1:コマンドラインパラメータを手動で小さい部分に分割する

例1mv [al] * ../directory2

mv [mz] * ../directory2

これは最も簡単な4つの方法ですが、理想にはほど遠い方法です。平均分割ファイル、および多数のファイルの場合は、Nパスコマンドを入力する必要があります。

方法2:findコマンドを使用する

例2方法2 findコマンドを使用してファイルリストをフィルタリングします。必要なファイルは一連のコマンドに渡されます。

利点は、findコマンドが非常に強力なフィルタリング機能を持ち、そしておそらく最も重要なことに、この方法は1行のコマンドしか必要としないことです。

欠点は、方法2ではファイルをトラバースする必要があるため、時間がかかることです。

方法3:関数の作成

例3

#!/bin /bash

#設定削除するフォルダRM_DIR = '/data /files'
`dorm -f $ Idone内のcd $ RM_DIR

方法4:Linuxカーネルを再コンパイルする
<最後の方法は2つの単語を必要とします:用心深い、この方法は非常に高度です、従って経験のないlinuxユーザーは試みるべきではありませんさらに、永久に使用する前に、システム環境で十分にテストしてください。 4手動でカーネルのコマンドラインパラメータに割り当てられるページ数を増やすだけでよいinclude /linux /binfmts.hファイルを開き、ファイルの先頭近くに次の行を追加します。

/*

* MAX_ARG_PAGESは、引数

*と新しいプログラム用の封筒に割り当てられるページ数を定義します32で十分です、これは

*に128kB(4KBページ)の最大env + argを与えます!

* /

#define MAX_ARG_PAGES 32

割り当て行のコマンドラインパラメータのメモリを増やすには、MAX_ARG_PAGESに大きな値を割り当てるだけでよく、保存、再コンパイル、インストール、再起動、取得

私のシステムでは、MAX_ARG_PAGESの値を64に増やし、すべての問題を解決しました。この値を変更しても、問題は発生しませんでした。 MAX_ARG_PAGESを64に変更した場合、最も長いパラメータ行は256 KBのシステムメモリのみを占有します - 現在のハードウェア標準には該当しません。

方法4の利点は明らかです。今度は通常通りコマンドを実行するだけです。コマンドラインに割り当てられたメモリが利用可能なシステムメモリよりも大きいと、システム自体にDoS攻撃を受け、システムをクラッシュさせる可能性があります。特にマルチユーザーシステムでは、各ユーザーに追加のメモリーが割り当てられるため、メモリー割り当てのわずかな増加でも大きな影響を与える可能性があります。システムが方法4を使用できるかどうか判断するために、徹底的にテストするのを確認します。

Copyright © Windowsの知識 All Rights Reserved