7. その他 |
前節までで述べることができなかった機能はまだまだ山ほどあるが, ここでは それらの中でも比較的利用頻度が高い と考えられるものについて紹介しておく. | ||
<-- 「6. コマンドラインオプションと定義済み変数」へ戻る | ↑ 目次へ戻る |
7.1 echo
7.2 eval
7.3 umask
7.4 ulimit
echo は単にその引数を標準出力へ書き出すものであるが, そこにエスケープシーケンスを用いる場合について捕捉しておく.echo はバックスラッシュで始まるエスケープシーケンスを受け付けることができる:
echo エスケープシーケンス シーケンス 書き出される記号 \a ALERT あるいは CTRL-G(ベル) \b BACKSPACE あるいは CTRL-H \c 最期の NEWLINE の省略 \f FORMFEED あるいは CTRL-L \n NEWLINE(コマンドの終りではなく) あるいは CTRL-J \r RETURN(ENTER) あるいは CTRL-M \t TAB あるいは CTRL-I \v VERTICAL TAB あるいは CTRL-K \0n 8 進数 n の ASCII 文字.n は 3 桁まで \\ バックスラッシュ 1 つ これらのエスケープシーケンスを実際に echo で書き出すには
という具合いに -e オプションを付け, ダブルクォーテーションで囲む. (この場合はベル(ビープ音)が鳴る)
echo -e "\a"
いま,次のスクリプトを考える:言うまでもなく,変数 aaa には "ls | more" という文字列が設定される. そこで $aaa としてこれを実行しようとしている. しかしながら,この結果は
aaa="ls | more" $aaaとなる. これは | と more を ls の引数として処理しようとしたためである. つまり,| をコマンドのパイプとして処理していない. このように文字列をコマンドとして実行する場合は eval コマンドを利用する.
ls: |: No such file or directory ls: more: No such file or directory
aaa="ls | more" eval $aaa
ユーザがファイルを新規作成した際の ファイルパーミッションを設定するコマンドである.
これには 8 進 3 桁の数値を引数として渡す. ただし,その値は chmod で利用するものとは違いがある.
例えば,umask で 022 という値をマスクとして設定すると, その否定と 666 との論理積 ファイルのパーミッションになる.(666 というのは固定)なお,ディレクトリのパーミッションについては umask 値の 否定と 777 との論理積 になる.
666 = 110 110 110 not 022 = 111 101 101 ------------------- AND) 110 100 100 = 644 <--- デフォルトのパーミッション 644
ユーザに対するいろいろな制限を設定するためのコマンドである. 現在の設定を確認するには -a オプションを付けて実行する:これらを設定するためそれぞれに対応したオプションが用意されている:
$ ulimit -a core file size (blocks) 1000000 data seg size (kbytes) unlimited file size (blocks) unlimited max memory size (kbytes) unlimited stack size (kbytes) 8192 cpu time (seconds) unlimited max user processes 256 pipe size (512 bytes) 8 open files 256 virtual memory (kbytes) 2105343例えば,core ファイルの大きさを 0 Kバイトに制限したい場合は
オプション リソースの制限 -a 全ての制限を表示 -c core ファイルのサイズ (1Kバイトブロック) -d プロセスのデータセグメント(Kバイト) -f ファイルサイズ(1Kバイトブロック) -m プロセスのために確保される最大の実メモリサイズ -n ファイルディスクリプタ -p パイプサイズ(512バイトブロック) -s プロセスのスタックセグメント(Kバイト) -t プロセスの CPU タイム(秒) -u ユーザが利用できる最大プロセス数 -v 仮想メモリ(Kバイト) とする. 逆に制限を設けない場合は unlimited を数字の代わりに用いる.
$ ulimit -c 0