[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

22. 修正されたコマンドの呼び出し

このセクションは,現在と異なる状況で他のコマンドを実行するコマンドを記 述します.異なるユーザとして環境を変更するなどです.


22.1 chroot: 異なるルートディレクトリでコマンドを実行

chrootは,指定されたルートディレクトリでコマンドを実行します. 多くのシステムでは,スーパーユーザのみこれが可能です.概要です.

 
chroot newroot [command [args]…]
chroot option

通常ファイル名は,ディレクトリ構造のルート,すなわち`/'を起点とし て調べられます.chrootは,ルートをnewrootディレクトリ (存在する必要があります)に変更し,オプションのargsを用いて commandを実行します.commandが指定されていない場合,デフォ ルトは,SHELL環境変数や,設定されていない場合は/bin/shの 値が,`-i'オプションで呼び出されます.

オプションは`--help'と`--version'だけです.See section 共通のオプション.

chrootの使用にあたり,一般的な問題を避ける手助けとなるヒント がいくつかあります.単純な例を始めるため,commandはスタティック リンクされているバイナリだと仮定します.ダイナミックリンクされている実 行形式を使用している場合,共有ライブラリを新しいルートディレクトリの正 しい位置に配置する必要があります.

例えば,スタティックリンクのlsの実行形式を作成し, `/tmp/empty'に配置した場合,以下のコマンドをrootで実行することが 可能です.

 
$ chroot /tmp/empty /ls -Rl /

出力は以下のようになります.

 
/:
total 1023
-rwxr-xr-x  1 0 0 1041745 Aug 16 11:17 ls

bashのような,ダイナミックリンクされている実行形式を使用した い場合,最初に必要な共有オブジェクトを見つけるため`ldd bash'を実 行してください.そして,実際のバイナリをコピーし,新しいルートディレク トリの要求される場所に,リストアップされているファイルもコピーして下さ い.最後に,実行形式が要求するすべてのファイルも(例えば,データ,ステー ト,デバイスファイル),必要な場所にコピーして下さい.

終了ステータスです.

 
1   chroot自身が失敗した場合.
126 commandは見つかったが,呼出しできない場合.
127 commandが見つからない場合.
それ以外はcommandの終了ステータスになります.

22.2 env: 変更された環境変数でコマンドを実行

envは,変更された環境変数でコマンドを実行します.概要です.

 
env [option]… [name=value]… [command [args]…]
env

`variable=value'の形式の引数は,環境変数 variableを値valueに設定します.valueは空にもできます (`variable=').変数を空の値に設定することは,アンセットする こととは異なります.

残りの最初の引数は,呼び出すプログラム名を指定します.それはPATH 環境変数で検索されます.あらゆる残りの引数は,引数としてそのプログラム に渡されます.

環境変数指定に続いてコマンド名が指定されていない場合,結果となる環境変 数が出力されます.これは,printenvのコマンド名を指定すること に似ています.

プログラムは以下のオプションも受け入れます.共通のオプションも参照 してください.

` -u name'
` --unset=name'

変数nameが環境変数の場合,それを環境変数から削除します.

` -'
` -i'
` --ignore-environment'

継承された環境変数を無視して,空の環境変数を用いて開始します.

終了ステータスです.

 
0    commandが指定されておらず,環境変数が出力される場合.
1   env自身が失敗した場合.
126 commandは見つかったが,呼出しできない場合.
127 commandが見つからない場合.
それ以外はcommandの終了ステータスになります.

22.3 nice: 変更されたスケジュール優先順位でコマンドを実行

niceは,ジョブのスケジュールの優先順位を出力または変更します. 概要です.

 
nice [option]… [command [arg]…]

引数が与えられていない場合,niceは現在のスケジュールの優先順 位を出力し,それは継承されます.それ以外の場合,niceは,与え られたコマンドをそのスケジュール優先順位を調整しながら実行します. adjustmentが与えられていない場合,コマンドの優先順位は10増加しま す.負の調整を指定するためには適切な特権が必要です.niceが調 整可能な優先順位は,-20(最優先)から19(最低)までです.

ほとんどのシェルには同じ名前のシェル組み込みコマンドがあるので,装飾な しのスクリプトのコマンド名や対話的に使用すると,ここで記述されていない 異なる機能となる可能性があります.

プログラムは以下のオプションも受け入れます.共通のオプションも参照 してください.

` -n adjustment'
` --adjustment=adjustment'

コマンドの優先順位に,10の代わりにadjustmentを加えます.

古いシステムでは,niceは時代遅れのオプション `-adjustment'をサポートしています.POSIX 1003.1-2001 (see section 標準への準拠)では,これを許可していませ ん.代わりに`-n adjustment'を使用してください.

終了ステータスです.

 
0    commandが指定されておらず,現在の優先順位が出力される場合.
1   nice自身が失敗した場合.
126 commandは見つかったが,呼出しできない場合.
127 commandが見つからない場合.
それ以外はcommandの終了ステータスになります.

優先順位を下げて対話的ではないプログラムを実行することが,役に立つ事も あります.

 
$ nice factor `echo '2^997 - 1'|bc`

niceは現在の優先順位を出力するので,動作状態を検証するために 呼び出すことも可能です.

デフォルトの動作では,優先順位を`10'下げます.

 
$ nice nice
10
 
$ nice -n 10 nice
10

adjustmentは,現在の優先順位に相対的なものになります.ここで,最 初のniceの呼び出しで,二番目のniceの優先順位を `10'下げて,最終的にその優先順位をさらに`3'下げるように実行 します.

 
$ nice nice -n 3 nice
13

優先順位を`19'以上に指定することは,`19'に指定することと同じ になります.

 
$ nice -n 30 nice
19

特権ユーザだけが,より高い優先順位でプロセスを実行することが可能です.

 
$ nice -n -1 nice
nice: cannot set priority: Permission denied
$ sudo nice -n -1 nice
-1

22.4 nohup: ハングアップを免除したコマンドの実行

nohupは,ログアウト後にバックグランドでコマンドを実行し続け ることを可能にするため,ハングアップシグナルを無視して,与えられたコマ ンドを実行します.概要です.

 
nohup command [arg]…

標準出力が端末の場合,ファイル`nohup.out'に追加するようにリダイレ クトされます.書き込み不可能な場合,それらはファイル `$HOME/nohup.out'に追加します.それも書き込み不可能な場合,コマン ドは実行されません.標準出力が端末の場合,commandの標準出力は nohupのものと同じになります.

nohupが`nohup.out'や`$HOME/nohup.out'を作成する場 合,"group"や"other"のアクセス許可を用いてそれを作成しません.出力 ファイルが既存の場合は,その許可を変更しません.

標準エラー出力が端末の場合,標準出力と同じファイルデスクリプタにリダイ レクトされます.

nohupは,バックグランドで実行するようにするコマンドを,自動 的に書き出しません.コマンド行の終りに`&'を用いて,明示する必要が あります.また,nohupcommandのスケジュールの優先順位 を変更しません.そうするためにniceコマンドを,例えば `nohup nice command'のように使用して下さい.

オプションは`--help'と`--version'のみです.See section 共通のオプション.

終了ステータスです.

 
126 commandは見つかるが,呼び出せなかった場合.
127 nohup自身が異常終了した,または,commandが見つからない.
それ以外は,commandの終了ステータスです.

22.5 su: 適切なユーザとグループidを用いてコマンドを実行

suは,あるユーザが一時的に他のユーザになることを可能にします. それは実際の実効ユーザidと,与えられたuserの追加グループでコマン ドを(しばしば対話的シェルで)実行します.概要です.

 
su [option]… [user [arg]…]

userが与えられない場合,デフォルトはrootのスーパーユーザ です.使用するシェルは,userpasswdの項目から得られたも の,または,そこで指定されていない場合は`/bin/sh'を使用します. userにパスワードがある場合,実行ユーザidがゼロ(スーパーユーザ) の実行でなければ,suはパスワードの入力を促します.

デフォルトで,suはカレントディレクトリを変更しません.それは 環境変数HOMESHELLuserのパスワード項目から設定し, userがスーパーユーザでない場合,USERLOGNAMEuserに設定します.デフォルトでシェルはログインシェルではありませ ん.

追加のargは,シェルへの追加の引数として与えられます.

GNU suは,`/bin/sh'や他の特殊なものを扱いません(例えば, argv[0]を`-su'に設定する,`-c'を特定のシェルに渡 す等です).

suは,suの試みに対する失敗と,追加で成功を報告する ために,syslogを使用するようにコンパイルすることが可能です.(シ ステムがsyslogをサポートしている場合です.)しかし,GNU suは,ユーザがwheelグループのメンバーかどうか調査しま せん.以下を参照してください.

プログラムは,以下のオプションを受け入れます.共通のオプションも参 照してください.

` -c command'
` --command=command'

単一のコマンドラインで実行するcommandを,対話的シェルを開始する 代わりに,`-c'オプションを用いて渡します.

` -f'
` --fast'

シェルに`-f'オプションを渡します.これはおそらく,シェルの実行 がcshtcshの場合にのみ意味があり,それらに対する `-f'オプションは,スタートアップファイル(`.cshrc')の読み込 みを妨げます.Bourneのようなシェルを用いた場合,`-f'オプション はファイル名のパターン拡張(glob)を利用不可能にし,それは役に立つとは思 えません.

` -'
` -l'
` --login'

シェルをログインシェルにします.これは以下のことを意味します. TERMHOME,そしてSHELL(上記で記述されるように設定さ れている),そしてUSERLOGNAME(スーパーユーザでも,上記で 記述されるように設定されている)以外の,すべての環境変数をアンセットし, PATHを組み込まれているデフォルト値に設定します.userのホー ムディレクトリに変更します.ログインスタートアップファイルを読み込ませ るために,`-'をシェルの名前の前に前置してください.

` -m'
` -p'
` --preserve-environment'

環境変数HOMEUSERLOGNAME,またはSHELLを変更 しません.suを実行しているユーザがスーパーユーザで, userのシェルが制限されていない場合は,userのパスワード項目 から得られるシェルの代わりに,環境変数SHELLで与えられたシェルを 実行します.制限されているシェル(restricted shell)とは,ファイル `/etc/shells'や,そのファイルが存在しない場合は組み込みリストにリ ストアップされていないものです.このオプションが行うことの一部は, `--login'と`--shell'で優先することが可能です.

` -s shell'
` --shell=shell'

suを実行しているユーザがスーパーユーザで,userのシェル が限定されていない(真上の`-m'を参照してください)場合は, userのパスワード項目から得られるシェルの代わりに,shellを 実行します.

終了ステータスです.

 
1   su自身が失敗した場合.
126 サブシェルは見つかったが,呼出しできない場合.
127 サブシェルが見つからない場合.
それ以外では,サブシェルの終了ステータスになります.

22.5.1 GNU suが`wheel'グループをサポートしない理由

(このセクションは,Richard Stallmanが作成しました.)

数人のユーザが,残り全員以上の総合的な権力を持ちたいと思うときもありま す.例えば,1984年に,MIT AI labの数人のユーザが,Twenexシステムのオペ レータパスワードを変更し,他の全員に秘密にし続けることで,権力を占有し ようとしました.(私は,このクーデターを妨害し,カーネルにパッチを行い ユーザに力を取り戻させようとしましたが,Unixでそうする方法を知りません でした.)

しかし,支配者がだれかに告げることもあります.通常のsuメカニ ズムでは,一旦,普通のユーザに同情する誰かが,ルートのパスワードを知る と,彼または彼女は残りを伝えることができます."wheel group"の特徴は, これを不可能にし,そのため支配者の権力は固まります.

私は多数の味方で支配者の味方ではありません.ボスとシスアドのあらゆる作 業をサポートすることに慣れている場合,最初にこの考えが奇妙だと分かるこ とでしょう.


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Akihiro Sagawa on June, 8 2005 using texi2html 1.70.