今日の演習
まず,教科書などを参考にしながら次の事項について理解しなさい。
UNIX のファイルシステムについて (教科書 3.3.1)
UNIX コマンドについて
shell の機能について (教科書 4.4.1)
history 機能について (教科書 4.4.4)
ユーザーが過去にキーボードから入力したコマンドなどを記憶しておき,必要なときに呼び出す機能がhistory 機能である。
入出力リダイレクションについて (教科書 4.4.6)
通常,プロセスには入出力を行うための標準的な機器が定義されている。それらは,標準入力(stdin),標準出力(stdout),標準エラー出力(stderr)と呼ばれ,各々キーボード,コンソール,コンソールに割り当てられている。(したがって,「キーボード」からコマンドを入力して実行すると,その実行結果(もしくはエラー)はコンソールに表示(出力)される。)
シェルはコマンドの入力や出力を切り換える機能を持っており,この機能を入出力リダイレクションと呼ぶ。
オンラインマニュアルについて (教科書 3.3.7)
UNIX
システムには非常に多くのコマンドがあり,複雑なオプションを備えている場合も多い。また,プログラムを作成する場合には,UNIX
で用意されている関数を利用する必要がある。これらのコマンドや関数などを利用するには説明書が必要となるが,この説明書のことを「マニュアル」という。
印刷して本にすると,手元に分厚い本を置きながら作業をすることになり不便なので,内容をUNIX
内部に保存し,必要に応じて画面に表示して読むことができるようにしたマニュアルを「オンラインマニュアル」と呼ぶ。
今日の実習
以下の実習の説明では,コンピュータにキーボードから入力するコマンド部分を青字で表示している。
(また,青字のコマンドは,ウェブページ上で2行以上にわたって表示されていても1行で入力しなさい。)
作業を開始する前にコマンドヒストリーが200個以上保存されることを確認しなさい。
set
と入力すると,色々表示されるが,はじめのほうに,
HISTSIZE=1000 (後ろの数字が200以上)
という項目が表示されているのを確認しなさい。
これは,今回の演習のコマンドヒストリーをファイルに出力し,それを Emacs
で編集してプリントアウトしたものを本日の課題の1つとするためです。 演習ができたかどうか確認されますので,最後まできちんと実習して下さい。
また,演習終了時間15分前になっても,演習が終わりそうにない場合は,その時点で最後の「今日の提出課題(2)」を実行しなさい。
準備ができれば,実際にファイルを扱うコマンドを実行しなさい。
教科書3.3.4 などを参考にしながら,以下のコマンドを順に実行しなさい。教科書と画面の表示が若干異なる場合もあるが,教科書の注釈とこのページの注釈を確認しながら実習を進めなさい。
<ディレクトリーのリスト> −−− ls (list)
pwd | => print working directory (カレントディレクトリーの表示) |
ls | (カレントディレクトリーのリスト) |
ls / | (ルートディレクトリーのリスト) |
ls -F | (カレントディレクトリーのファイルとディレクトリーを区別したリスト) |
ls -a | (カレントディレクトリーの隠しファイル(ドットファイル)も含めたリスト) |
ls -al | (カレントディレクトリーの隠しファイル(ドットファイル)も含めた詳細リスト) |
ls -alF | (カレントディレクトリーのファイルとディレクトリーを区別し,隠しファイルも含めた詳細リスト・・・教科書ではFが抜けている) |
<パーミッションの変更>−−− chmod (change mode)
ls -alF > list | (ls -alF の出力結果を list というファイルに保存。リダイレクションを使用。教科書に無い) |
cat list | (ファイル内容の確認。cat の詳細は後述する。) |
ls -lF | (list ファイルのパーミッションの確認) |
chmod go-r list | (作成した list に対して group と other の読み出しを禁止) |
ls -lF | (list ファイルのパーミッションの確認) |
chmod g+rw list | (list に対して group の読み出し,書き込みを許可) |
ls -lF | (list ファイルのパーミッションの確認) |
<ディレクトリーの作成とカレントディレクトリーの変更> −−− mkdir (make directory), cd (change directory)
mkdir ensyu | (ensyu ディレクトリを作成) |
ls -F | (ensyu ディレクトリの作成を確認) |
pwd | (カレントディレクトリーの確認) |
cd ensyu | (ensyu ディレクトリーに移動) |
pwd | (カレントディレクトリーの確認。ensyu/ に移動した) |
ls -alF | (ファイルが存在しないことを確認) |
cd .. | (親ディレクトリーに戻る) |
pwd | (親ディレクトリーに戻ったことを確認) |
<ファイル名の変更とファイルの移動> −−− mv (move)
ls -F | (ファイル名の確認) |
mv list filelist.txt | (list を filelist.txt に改名) |
ls -F | (改名の確認) |
mv filelist.txt ensyu/ | (filelist.txt を ensyu ディレクトリーに移動) |
ls -F | (移動の確認,filelist.txt がカレントディレクトリーから無くなっている) |
cd ensyu/ | (カレントディレクトリーを ensyu に移動。最後の/は無くても良い) |
ls -F | (filelist.txt の移動を確認。filelist が存在する) |
mv コマンドはディレクトリーに対してもファイルと同様に名前を変更したり移動したりすることができる。
<入出力リダイレクション>
cat filelist.txt | (ファイル内容の確認) |
ps | (プロセスps の確認。) |
ps >> filelist.txt | (filelist.txt にps の内容を追加して書き込む) |
cat filelist.txt | (追加された内容の確認) |
wc < filelist.txt | (ファイルfilelist.txt の行数,ワード数,文字数を出力) |
ls -alF | (ファイルfilelist.txt などの最終更新時間を確認) |
<ひと休み>
日本語入力は C-space もしくは C-\
<ファイル,ディレクトリーの複写> −−− cp (copy)
cd | (ホームディレクトリー(ログインディレクトリー)に戻る) |
man date > date.man | (日付を表示する date コマンドのマニュアルページを date.man に保存。教科書に無い) |
ls -F | (ファイルが作成されたことを確認) |
cp date.man date.txt | (date.man のコピーを date.txt として作成) |
ls -F | (date.man の他に date.txt がコピーとして作成されている) |
head -30 date.man | (ファイルdate.man の先頭から30行を表示) |
head -30 date.txt | (date.txt が date.man のコピーであることを確認) |
tail -10 date.man | (ファイルdate.man の末尾から10行を表示) |
tail -10 date.txt | (date.txt が date.man のコピーであることを確認) |
cp -r ensyu doc | (ディレクトリー ensyu をディレクトリー doc にコピー。docは新たに作成される) |
ls -F | (ディレクトリー doc が作成されている) |
ls doc | (ディレクトリー doc のリスト。ensyu 内の filelist.txt もコピーされている) |
ls ensyu | (ディレクトリー ensyu には元の filelist.txt が残っている) |
<ファイル,ディレクトリーの消去> −−− rm (remove)
ls -F | (ファイルの確認) |
rm date.man | (date.man ファイルの消去。下の行も参照する) |
rm -i date.txt | (date.txt ファイルの消去。-i のオプションを指定すると対話的になる) |
(remove 通常ファイル 'date.txt'? と聞かれたら ・・・yと入力する) | |
ls -F | (消去されているか確認) |
rm enayu | (ensyu ディレクトリーを消去しようとして間違えて enayu と入力した・・・) |
rm ensyu | (今度こそ ensyu ディレクトリーを消去・・・。cannot remove directory 'ensyu': ensyu はディレクトリーです とのメッセージが表示され消去できない) |
rm -r ensyu | (ディレクトリーを消去する場合は -r オプションをつける) |
(descend into directory 'ensyu'? と聞かれたら ・・・ yと入力する。その後も,全てyと回答するとファイルが消去される) | |
ls -F | (ensyu ディレクトリーの消去を確認) |
UNIX
では,一般に消去したファイルは絶対に復活できません。注意して下さい。
<指定したファイルの内容を見る> −−− cat (concatenate)
cat /etc/termcap | (/etc/hosts の内容を見てみよう。・・・長いファイルで表示が流れて最初の表示が確認できない) |
less /etc/termcap | (ページスクロール(f, bキー),行スクロール(j, kキー)で内容をみることができる。qキーで終了) |
<コマンド履歴を利用する> −−− history
history | (コマンドの履歴が表示される) |
!! | (直前のコマンドの再実行。history が実行されるので,history が一つ増えているはず) |
!1 | (表示結果を利用してコマンドを実行する。数字1を入力すると1番目のコマンドの再実行。数字(番号)はls コマンドが書いてある適当な番号を入力して下さい。間違って,何かをrm (消去)してしまうと大変です。) |
<オンラインマニュアル>
man ls | (ls のマニュアルを表示。よく読んでおくこと) |
man rm | (rm のマニュアルを表示。よく読んでおくこと) |
man man | (man というコマンドのマニュアルを表示) |
ページスクロール(f, bキー),行スクロール(j, kキー)で内容をみることができる。qキーで終了する。
実習を行ったコマンドヒストリーをファイルに保存し,それを Emacs で編集し,プリントアウトして提出しなさい。
編集内容
1. ファイルの最初(1行目)に,漢字氏名,学生番号を記入すること。
2.
それぞれのコマンドの実習内容を,適当な方法で区別しなさい。
(例)
地球太郎 9999999
----- ヒストリーの確認
20 13:16 set
----- ディレクトリーのリスト
21 13:16 pwd
22 13:16
ls
23 13:16 ls /
24 13:16 ls -F
・
・
-----
パーミッションの変更
28 13:20 ls -al > list
・
・
・
・
-----
レポートの終わり
(例終わり)
作成したファイル(この例だとhistory1.txt)は消去せずに保存しておいて下さい。
おまけ
課題が終わった人は,今まで演習中で利用したコマンドについて,オンラインマニュアルを読んで確認しておきなさい。
また,教科書4.4.4
の「history 機能」の残り部分と4.4.7 の「特殊文字のエスケープ(クオート)」の部分を試してみなさい。