検索
連載

【 ulimit 】コマンド――ユーザーが使用できるリソースを制限するLinux基本コマンドTips(326)

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、ユーザーが使用できるリソースを制限する「ulimit」コマンドです。

Share
Tweet
LINE
Hatena
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、ユーザーが使用できるリソースを制限する「ulimit」コマンドです。

ulimitコマンドとは?

 「ulimit」はユーザーが使用できるリソースを制限するコマンドです。ファイルの最大サイズや、使用できるメモリ、同時に実行できるプロセス数などを制限できます。

 なお、ulimitはbashの内部コマンド(ビルトインコマンド、シェルコマンド)であるため、「man」コマンドではなく、「help」コマンドで詳細を表示できます。



ulimitコマンドの書式

ulimit [オプション] [値]

※[ ]は省略可能な引数を示しています。





ulimitの主なオプション(全体)

短いオプション 意味
-a 現在設定されている値を全て表示する
-H 「強い制限(hard)」として設定する(制限を緩めるにはroot権限が必要になる、※1)
-S 「弱い制限(soft)」として設定する(強い制限の範囲内であれば、ユーザー自身が制限を緩めることが可能、※1)

※1 「-S」と「-H」のどちらも指定しなかった場合は、「-S」と「-H」を両方指定した扱いになる。



ulimitの主なオプション(個々の設定)

短いオプション 意味
-c 作成されるコアファイルの最大サイズ(512バイト単位のブロック数)
-d プロセスデータセグメントの最大サイズ(KB=1024バイト単位)
-e スケジュール優先度の最大値(nice値、※2)
-f シェルとシェルの子プロセスが書き込み可能なファイルサイズの最大値(ブロック数)
-i 保留できるシグナルの最大数
-l メモリにロックできるプロセスの最大サイズ(KB)
-m 利用できる最大のメモリサイズ(KB)
-n 同時にオープンできるファイル数
-p パイプのバッファーサイズ(512バイト単位のブロック数)
-q POSIXメッセージキューの最大バイト数
-r リアルタイムスケジュール優先度の最大値
-s スタックサイズの最大値(KB)
-t プロセスごとに利用できるCPU時間の最大値(秒数)
-u 実行可能なユーザープロセスの最大数
-v シェルとシェルの子プロセスが利用可能な仮想メモリの最大サイズ(KB)
-x ファイルロックの最大数

※2 「nice」コマンド(連載第134回)を参照。





現在の設定を確認する

 「ulimit -a」で現在の設定値をまとめて表示します(画面1)。個別の設定値を確認したい場合は「ulimit -u」(プロセス数)や「ulimit -f」(ファイルサイズ)など、知りたい値に対応したオプションを指定します。結果が「unlimited」となっている項目には上限が設定されていません。

 「ulimit」のみで実行すると、ユーザーが作成できるファイルの最大サイズを表示します(「ulimit -f」相当)。なお、これは1つのファイルに対する制限です。ディスク領域の利用制限ではありません。

コマンド実行例

ulimit -a

(現在の設定を表示する)(画面1


画面1
画面1 現在の設定値をまとめて表示したところ


現在の設定を変更する

 「ulimit オプション 値」で設定を変更できます。この設定は、現在実行中のシェルでのみ有効です(※3)。

※3 常に設定したい値はbashの設定ファイル(/etc/bashrcや~/.bashrcなど)か、/etc/security/limits.conf、/etc/security/limits.d/下のファイルに書き込むとよい。



 例えば、作成できるファイルのサイズを制限するならば「-f」オプションを使い、「ulimit -f 10」のように設定します。「-f」の場合、KB単位のブロック数で指定するので、この場合、1024×10=10240バイトより大きなファイルを作成できなくなります。

コマンド実行例

ulimit -f ブロック数

(作成できるファイルのサイズを制限する)

ulimit -f 10

(作成できるファイルのサイズを10(10240バイト)に制限する)(画面2


 画面2では、ファイルサイズを10ブロック(10240バイト)に制限しています。

 まず、「dd」コマンド(連載第163回)で1KB単位の10ブロック、つまり制限ギリギリのサイズのファイルを作成しました。その後、echoコマンドで「test」という文字列をファイルに追加しようとするとエラーが起こり、bashが終了します。

画面2
画面2 作成できるファイルのサイズに制限を加えた後、制限を超えたところ

 画面3では、エラーメッセージを確認するため、bashを別途実行してから画面2と同じ操作をしています。「ファイルサイズ制限を超過しました(コアダンプ)」というメッセージが出力されて、bashが終了している様子が分かります。

 なお、ulimitによりcoreファイルのサイズは「0」に設定されているため(画面1の「core file size」参照)、実際にはコアダンプファイルは作成されていません。

画面3
画面3 画面2で何が起こったのかを調べたところ


制限を一時的に緩める

 ulimitの制限には、「強い制限(hard)」と「弱い制限(soft)」という区別があります。通常の制限は「hard」で、制限を緩めるにはroot権限が必要です。

 弱い制限で設定するには「-S」オプションを使用します(画面4)。

コマンド実行例

ulimit -S -f 20

(「ulimit -f 20」を弱い制限で設定する)(画面4


画面4
画面4 強い制限と弱い制限の違いを確認したところ

 強い制限で設定されている制限を緩めたい場合は、設定ファイルを修正して、再度ログインするなどの操作が必要です(※4)。

※4 強い制限を緩める方法として、「sudo bash -c "ulimit オプション && exec su 元ユーザー名"」(「sudo」コマンドでulimitコマンドを実行し、「su」コマンドで元のユーザーに戻る)という方法が一般に紹介されている。しかし、筆者の環境では機能しなかった。





筆者紹介

西村 めぐみ(にしむら めぐみ)

元々はDOSユーザーで「DOS版UNIX-like tools」を愛用。ソフトハウスに勤務し生産管理のパッケージソフトウェアの開発およびサポート業務を担当、その後ライターになる。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。地方自治体の在宅就業支援事業にてMicrosoft Officeの教材作成およびeラーニング指導を担当。会社などの"PCヘルパー"やピンポイント研修なども行っている。


Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る