web-dev-qa-db-ja.com

Sudo ulimitを使用するとコマンドが見つかりません

私はubuntu 12.04を使用していて、ulimit -nを実行して1024を表示しています。開いているファイルの制限を1024から65535に増やしたいので、次のコマンドを試しました。

Sudo ulimit -n 65535

しかし、私は次のエラーが表示されます:

Sudo: ulimit: command not found

ファイル制限を1024から65535に増やす方法は?任意の助けをいただければ幸いです。

47
sunpy

ulimitcdのようなシェル組み込みであり、別個のプログラムではありません。 Sudoは実行するバイナリを探しますが、ulimitバイナリがないため、エラーメッセージが表示されます。シェルで実行する必要があります。

ただし、制限を65535に上げるにはrootである必要がありますが、おそらくプログラムをrootとして実行したくないでしょう。そのため、制限を引き上げた後、現在のユーザーに切り替える必要があります。

これを行うには、次を実行します。

Sudo sh -c "ulimit -n 65535 && exec su $LOGNAME"

そして、ルート権限なしで、制限が引き上げられた新しいシェルを取得します。 execにより、新しいシェルはプロセスをSudo特権に置き換えます。そのため、シェルを終了した後、誤ってrootになってしまうことはありません。

101
andrewdotn

過去にこのような問題に対処しなければなりませんでした。シェルスクリプトにはsetuidメカニズムがないため(安全でないため)、setuidを使用して単純なCラッパーを作成するだけで十分であり、システムコールを使用して実行中のプロセスのulimitsを変更してから特権を削除してシェルを実行しますスクリプト。

0
Craig