ホーム  ざれごと  ワシントン州  ツール  NT豆知識  Win32プログラミングノート  私的用語  ジョーク  いろいろ  ゲーム雑記  Favorites  掲示板   Mail

Unix にまつわる何か

Last modified: Sat Apr 05 04:42:08 2003 PDT

一つ上へ

DOS/Windows を使いこなしていても、最近身近になった UNIX のちょこっとした Tips をご存じない方もいる模様。

多分、市販の解説本にもいろいろと書いてあるんだろうけど、古い知識でよろしければちょっと基本的なこと(?)など書いておいてみようかな〜というところです。 Windows NT/XP のコンソールに似た機能があってよく知られていると思われるものは特に書いたりしません。
思いの向くまま、つれづれに。 記憶に頼って書くところもあるので、それなりの目で眺めてくださるよう。

仮想コンソールの切り替え

Alt + Fn (ファンクションキー) あたりで仮想コンソールが切り替わります。 インストールの最中など特に便利。

SCO UNIX や Linux でサポートされていました。 PC 用 BSD でもサポートされているらしい。

シェル

私は sh、ksh 使いでしたので…、そのおつもりで。

Poor man's ls

シングルユーザモードでブートしたりすると、ファイルシステムがまうんとされておらず普段使いのコマンドが使えなかったりします。 ls なんて復旧作業には欠かせませんが、使えないこともあるわけです。

さふいふときは、
echo *
のように、シェルにファイル名を展開してもらうことができます。

サスペンド

プロセスを起動するとき、末尾に "&" をつけるとバックグラウンドで動作するのはご存知として。

Ctrl+Z は DOS/Windows では EOF (End Of File) の意味になりますが、たいていの UNIX では、TTY から SIGSTOP を送るようにアサインされていると思います。 Ctrl+Z ではフォアグラウンドプロセスを一旦停止でき、シェルのプロンプトに戻ってきます。 ksh には jobs というコマンドがあって、サスペンド中・バックグラウンド実行中のプロセス一覧を表示します。 fg、bg というコマンドがあって、fg %1 のようにプロセスの番号を指定してフォラグラウンドに持ってくることができます。 バックグラウンドで実行を続けさせるには、bg の方を使います。

とまぁこんな風に、UNIX のシェルは CUI プロセスの管理が多彩です。

EOF

ログイン直後の状態で、EOF は Ctrl+D に割り当てられているのが普通だと思うのですが、(ログオンシェル以外の)シェルのプロンプトで Ctrl+D をたたくと、いきなりシェルが終了してしまいます。 これを防ぐには、ログオンシェルとおなじ扱いをさせればよかったような気もしますが、ksh / bash あたりでは環境変数で制御できた気がします。 うぅ、思い出せない。

あ、ここらへんのコントロール文字列は stty コマンドで確認したり変更したりできます。

環境変数

ksh の環境変数には、シェルローカルのものと外部にもエクスポートされるものの二種類があります。 明示的に export しないとシェルローカルだったと思いますが、シェルのコマンドラインオプションで変更できたかもしれない。

あ、プロンプトを設定するのは環境変数 PS です。

nice

プロセスのプライオリティを下げてプロセスを起動する nice というコマンドがあります。 マシンが暇なときにだけ CPU を使って計算してほしい、なんていうバックグラウンドな処理に使うといいかも。

蛇足ですが、nice はデフォルトではプライオリティを下げますが、オプションで上げることもできます。

nohup

これはちょっと問題になることもあるのですが、nohup からプロセスを起動すると、SIGHUP を無視して実行するようになります。 つまり、ログアウトした後でもプロセスの実行を続けさせることができます。

stty sane

何かの折に(バイナリファイルを cat してしまったとか)、tty/pty の表示がおかしくなることがあります。 そのときは、stty sane を試してください。 直ることがあります。

謎の記号

シェルスクリプトを見ていると、" やら ' やら ` やら記号が良く出て来ます。 なんだか違いが分からない? 実は結構違うのです。
さて、環境変数 foo に bar という値がセットされているとしましょう。

$foo is bar -> bar is bar
"$foo is bar " -> bar is bar (ひとかたまり、あるいは複数の引数に分割されずに扱われます)
'$foo is foo' -> $foo is foo

というように、シングルクオートとダブルクオートの違いは、特殊文字が展開されるかどうかなんですね。

バッククオートは少し違っていて、コマンドの実行結果を返します。 たとえば、

cat abc*.c
cat `echo abc*.c`

は同じような動きをします。

Since 1996

一つ上へ

ホーム  ざれごと  ワシントン州  ツール  NT豆知識  Win32プログラミングノート  私的用語  ジョーク  いろいろ  ゲーム雑記  Favorites  掲示板   Mail