今日の演習
まず、教科書などを参考にしながら次の事項について理解しなさい。
ただし、教科書(第6章)の記述は、TC Shell [tcsh] についてのものであるので、注意すること。
ファイル名の展開について (教科書 4.4.5)
shell では、ファイル名の指定が簡単に行えるように「ファイル名の展開」という機能を提供している。コマンド行でファイル名を指定するとき、あるパターンを指定するとshell がその部分をパターンに一致する全てのファイル名に置き換えてくれる機能である。
UNIX のプロセス・ジョブ管理について (教科書 6.4.1)
シェル変数・環境変数について (教科書 6.4.2)
どういう環境でコマンドを実行させるかを決定するのがシェル変数と環境変数である。
・シェル変数:シェルの実行環境の設定
・環境変数 :プロセスの実行環境の設定
すなわち、環境変数は大域的な環境を規定する変数で、シェル変数は局所的な環境を規定する変数と考えてよい。
註:「変数」とは、値の容れ物と考えると理解しやすいでしょう。
コマンドのエイリアス機能について (教科書 6.4.3)
特定のオプション付のコマンド、連続実行する複数のコマンド、パイプやリダイレクションを利用して一行のコマンドラインで書ける一連のコマンドを、別のコマンド名で登録して利用する機能をエイリアス機能と呼ぶ。
シェルスクリプトについて (教科書 6.4.5)
shell
は通常インタラクティブ(対話的)に使われるが、ある決まった一連のコマンドを繰り返す必要のある時、これらのコマンドをあらかじめファイルに記述して、これを自動的に実行することができる。このファイルをシェルスクリプトあるいはシェルプログラムと呼ぶ。
また、コマンドとして使用できるシェルスクリプトをシェルコマンドと呼ぶ。
これだと受信した添付ファイルでデスクトップがいっぱいになるので、ファイルを整理します。
GNOME 端末を開いて、
mkdir mypic | (新しいディレクトリを作成。) |
ls Desktop | (ファイル名を確認。ディレクトリ名は大文字小文字が区別されることに注意。) |
mv ~/Desktop/filename.JPG mypic | (拡張子の大文字小文字も区別するので注意。移動が成功すればデスクトップのアイコンが消える。) |
(一休み)このファイルをデスクトップの背景に指定してみよう。
背景でファイルを指定しないようにして右クリックすると、背景の変更をするプルアップメニューが表示される。
一番下の部分を選択して、ファイルを追加してみよう。
今日の実習
以下の実習の説明では、コンピュータにキーボードから入力するコマンド部分を青字で表示している。
(また、青字のコマンドは、ウェブページ上で2行以上にわたって表示されていても1行で入力しなさい。)
前回同様、コマンドヒストリーをファイル出力し、それを Emacs で編集したものを本日の提出課題とするので、コマンドヒストリーが200個以上保存される設定になっているか確認しなさい。
すなわち、
と入力し、シェル変数HISTSIZEが、
と表示されるのを確認する。
200以上の数字でない場合は、TAに申し出て下さい。
以下のコマンドを実行しなさい。
教科書はtschについての解説であり、このページの内容(bash)とは詳細な点で必ずしも一致しないので、注意して下さい。
<ファイル名の展開>
cd /usr/bin | (多くのファイルが保存されているディレクトリーに移動) |
ls | (ファイルをリスト表示する) |
ls w* | (w ではじまる全てのファイルを表示) |
ls wh* | (wh ではじまる全てのファイルを表示) |
ls wh? | (wh ではじまり、3文字のファイルを全て表示) |
ls [w-y]* | (w, x, y ではじまるファイルを全て表示) |
cd | (元のディレクトリーに戻る) |
<プロセス・ジョブ管理>
xclock | (フォアグラウンドで起動。[C-c]で停止・終了) |
xclock & | (バックグラウンドで起動) |
ps | (プロセスの確認) |
ps -f | (プロセス詳細の表示) |
ps -f -u a0zzzzz | (user a0zzzzz のプロセス詳細の表示) |
kill xxxx | (xxxx:プロセス番号(PID)。xload のプロセス番号を指定して、プロセスの強制終了) |
xclock & | (バックグラウンドで起動。) |
xload & | (バックグラウンドで起動。字体に関するエラーが出るが無視する。) |
jobs -l | (ジョブ番号の確認) |
kill %x | (x:ジョブ番号(はじめの[x])。xload のジョブ番号を指定して、ジョブの強制終了) |
ps -f | (プロセスの確認) |
jobs -l | (ジョブが終了しているか確認) |
fg | (フォアグラウンドジョブに変更。[C-z]で中断され、プロンプトへ入力できる) |
xclock & | (もう一つ時計を起動。こちらは動いているはずです。) |
jobs -l | (ジョブの状態を確認) |
bg %y | (y: ジョブ番号。止まっている方の時計をバックグラウンドジョブとして復活) |
<シェル変数の確認と変更>
-bash- 3.00 $ set | (シェル変数の表示、確認) |
-bash- 3.00 $ echo $USER | (個別のシェル変数の表示) |
-bash- 3.00 $ ps -f -u $USER | (シェル変数USER の利用例) |
-bash- 3.00 $ echo $PS1 | (変数PS1が、表示されるプロンプトの内容を保存している。) |
-bash- 3.00 $ PS1="I love you! \$ " | (変数を変更するには、変数名を直接=で結ぶ。) |
I love you! $ | (表示されるプロンプトが変わっていますか?もう一つGNOME 端末を開いて下さい。こちらのプロンプトはどうなっていますか?) |
-bash- 3.00 $ echo $PS1 | (両方の端末で試して下さい。) |
I love you! $ PS1="\u:\t \w \$ " | (元の端末に戻って、もう少し実用的なプロンプトに変えてみます。) |
a0xxxxxx:11:00:00 ~ $ cd /usr/bin | (カレントディレクトリーを移動してみます。) |
a0xxxxxx:11:00:05 /usr/bin $ | (プロンプトにカレントディレクトリーが表示されていることを確認) |
a0xxxxxx:11:00:15 /usr/bin $ PS1="\s-\v\$ " | (プロンプトを元の設定に戻す) |
-bash- 3.00 $ cd | (元のディレクトリに戻っておきましょう。) |
-bash- 3.00 $ echo $ZZZ | (シェル変数ZZZ を表示。何もないはずです。) |
-bash- 3.00 $ ZZZ="I LOVE YOU" | (シェル変数ZZZ を定義する。) |
-bash- 3.00 $ echo $ZZZ | (シェル変数ZZZ を表示。) |
-bash- 3.00 $ set | (シェル変数の表示、確認。一番最後にあるはず。) |
-bash- 3.00 $ unset ZZZ | (シェル変数ZZZ を消去。) |
-bash- 3.00 $ set | (シェル変数の表示、確認) |
-bash- 3.00 $ env | (環境変数の表示、確認) |
プロンプトが消えたとき、キーを受け付けているようなら、PS1="\s-\v\$ " と入力して、再度変数を設定してみる。
それでもダメな場合は、GNOME 端末を強制終了させる。
<エイリアス機能>
la | (la (エルエー)というコマンドがないか確認) |
alias la='ls -alF' | (la エイリアスを設定。laと=、=と'の間にスペースはいれてはいけない。) |
la | (la エイリアスを実行。実際に行われるかどうか確認) |
unalias la | (la エイリアスを解除) |
la | (la エイリアスが解除されたか確認) |
alias | (alias だけを入力すると現在設定されているエイリアスが表示される。) |
<シェルスクリプト>
emacs sc1 & | (ファイルsc1 の作成。作成後保存[C-x C-s] する。Emacs は終了しなくてもよい。) |
下記内容のファイルを作成する。
echo ""
echo "Hello, how
are YOU ?"
echo ""
echo "number of files = "
ls -al | wc -l
echo
""
echo "Current time is"
date
echo "Good Luck !"
echo ""
bash sc1 | (シェルスクリプトの実行) |
(emacs sc1 &) | (←emacsを閉じていれば再実行。ファイルsc1 の編集。再保存。) |
下記の1行をsc1 ファイルの1行目に追加する。
#!/bin/bash
-f
もちろん忘れずに編集した内容を保存[C-x C-s] して下さい。
ls -lF | (ファイルモードの確認) |
chmod +x sc1 | (ファイルを実行可能にする) |
ls -lF | (ファイルモードの確認。実行ファイルにはファイル名の後ろに「*」が付いている。) |
~/sc1 | (シェルコマンドsc1 を実行) |
ファイルの削除には rm コマンド (ReMove) を使います。
UNIX
では一旦消したファイルは絶対に戻せません。
設定によっては rm: remove 通常ファイル 'test.log: ? と聞いてくる。y か n かで答える。(エイリアスで、rm='rm -i'となっているからです。)
とすると、途中が任意の文字で ~ で終わるファイルすべてが消去される。便利だが危険なので注意すること。
ls するとファイルが削除されていることがわかる。
2.1 ファイルを整理するためのディレクトリを作る。
まず、Emacs の課題で作成したファイルを入れるためのディレクトリ emacsfile を作る(ディレクトリ名は何でもよい)。
ls コマンドで新しいディレクトリができていることを確認。
2.2 ファイルをディレクトリに移動する。
Emacs の課題で作成したファイル (ここでは、kadai0426.txt と987654321.txt とする)をディレクトリ Emacs に移動するには、
2.3 確認する。
ls
emacsfile
ホームディレクトリからファイルがなくなっていること、ディレクトリ emacsfile にファイルが移動していることを確認する。
mkdir latexfile mv latex1.tex latex2.tex latexfileaux, log, dvi で終わるファイル:LaTeX が作業用に作ったファイル。使わないので消してよい。
mkdir gnuplotfile mv gnuplot1.ps gnuplot2.ps gnuplotfile (gnuplot1.ps などはgnuplotの課題で作成したファイル名に対応)課題のデータや設定ファイルなどを入れておく。
上で行った実習のコマンドヒストリー(本日分)をファイルに保存し、それをプリントアウトして提出しなさい。
ただし、以下の例のようにヒストリーは1行につき2つずつ、コラムを揃うように編集すること。
また、ファイルの1行目に学生番号(必ず半角数字)、氏名をこの順に記入すること。
(例)
9999999 地球太郎
20 13:16 set 21 13:16 pwd 22 13:16 ls 23 13:16 ls / ・ ・ ・ |
46 13:22 ls -F 47 13:22 cd text/ 48 13:22 ls 49 13:22 ls -F ・ ・ ・ |
(例終わり)
ヒント