ファイルの整理、シェル変数、環境変数

					2013年06月11日
情報科学類 コンピュータリテラシ

                                       筑波大学 システム情報系 情報工学域
                                       新城 靖
                                       <yas@cs.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~yas/coins/literacy-2013/2013-06-11
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~yas/
http://www.cs.tsukuba.ac.jp/~yas/

■連絡事項

■補足

「画面指向」からの脱却と「モデル」の構築へ

コンピュータを操作する時の態度:

コンピュータと人間

■Unixコマンドによるファイルの整理

The Unix Super Text 第9章 ファイルとディレクトリ 参照The Unix Super Text 第21章 ファイルとディレクトリの高度な操作 参照

ホーム・ディレクトリ、 Desktop や Documents(書類)に、多くのファイルを放置することはよくない。 ディレクトリを作成し、整理すべきである。 1つの目安は、ls コマンドで 1画面に入らない時には分割する。

◆ディレクトリの作成

mkdir (make directoryr)コマンドを使う。
$ mkdir dirname [←]
この結果、dirnameという名前のディレクトリが作らる。

◆ファイルの名前を変更

ファイル名を変更するには mv (move) コマンドを使う。
$ mv oldname newname [←]
この結果、ファイルoldfileのファイル名をnewnameに変更される。

ここで、newname のファイルが存在した場合、元の newname は消されてしまう。

◆ディレクトリ名の変更

mvコマンドは、ディレクトリの名前を変更するために使える。

$ mkdir dir1 [←]
$ ls  [←]
dir1
$ mv dir1 dir2 [←]
$ ls  [←]
dir2
$ []

◆ファイルのディレクトリへの移動

ファイル名を変更する mv (move) コマンドは、 同じディレクトリだけでなく、他のディレクトリに対しても使える。
$ mkdir ~/dir1 [←]
$ mv oldname ~/dir1/newname [←]
この結果、カレント・ワーキング・ディレクトリにある ファイルoldfileのファイル名は、 ~/dir1/newnameに変更される。

次のように、ディレクトリだけを指定することもできる。

$ mv name ~/dir1/ [←]
この場合、次のものと同じになる。
$ mv name ~/dir1/name [←]
また、変更先にディレクトリを指定する mv では、ファイル名は1個でなくて も複数でもよい。
$ mv file1 file2 file3 ~/dir1 [←]
シェルの ファイル名置換 を使うと便利。
$ ls file[1-3] [←]
(ファイル名の確認)
$ mv file[1-3] ~/dir1 [←]
$ ls file? [←]
(ファイル名の確認)
$ mv file? ~/dir1 [←]
$ ls file* [←]
(ファイル名の確認)
$ mv file* ~/dir1 [←]

◆ファイルを消す

意義

ファイルを消すには、rm (remove) コマンドを用いる。

$ rm file1 [←]
このファイル file1 が削除される。

rm コマンドで消してしまったファイルは、一般的には2度と戻らない。 消す前に、本当に不要かどうかを確認すること。

◆rm -i

rm コマンドには、-i オプションがあり、ファイルを消すかどうかを対話的 (interactive)に y/n で聞いてくる。消してもよい時には、y と答える。

コマンド名の置換え(alias)等て、rm を rm -i に変えることは、一般的には勧 められない。「rm -i [←] y」という操作が、一連の操作として身に付い てしまうので。

◆ディレクトリの削除

ディレクトリを削除するには、 rmdir (remove directory) コマンドを使う。
$ rmdir dirname [←]
この結果、 ディレクトリdirnameが削除される。

空でないディレクトリは、rmdir()コマンドでは 「Directory not empty」 というエラー・メッセージが表示され削除できない。 この場合は、子供のディレクトリやファイル を削除してからもう一度削除する。

◆ファイルサーバによる古いファイルの自動的な保存

手引き 10.3 参照

coins のファイルサーバには、過去のある瞬間の整合性がある状態(スナップ ショット)を自動的に保存する機能がある。過去2週間程度のファイルの状態が わかる。

$ ls /home/.snapshot/ [←]
hourly.0                        nightly.0                       nightly.4
hourly.1                        nightly.1                       nightly.5
hourly.2                        nightly.10                      nightly.6
hourly.3                        nightly.11                      nightly.7
hourly.4                        nightly.12                      nightly.8
hourly.5                        nightly.13                      nightly.9
hourly.6                        nightly.2
lilac-fss(0151728424)_vol1.296  nightly.3
$
nightly*
夜中(日単位)での過去の状態
hourly*
時間単位での過去の状態
たとえば、10日前の ~/.bashrc を次のようにして表示できる。
$ cat /home/.snapshot/nightly.9/prof/yas/.bashrc [←]
cp でコピーしたり、emacs で読むこともできる。

■ファイルとディレクトリの木構造を扱うプログラム

標準では単一のファイルやディレクトリを扱うコマンドも、木構造を扱うこと ができるものもある。 木構造をうまく扱うには、「再帰的な(recursively)」処理が重要になる。 これは、自分と同じ処理を、木構造の子供の節にも行うことである。 くわしくは、2年生の「データ構造とアルゴリズム」で扱う。

例:

再帰的な処理を行わせるためには、大文字 -R (recursively) オプションを取 るコマンドも多いが、小文字 -r のものもある。例: scp -r。 大文字でも小文字でもどちらでも受付けるものもある。

何もしないと、自動的に再帰的な処理を行うプログラムもある。例: tar, tree, find 等。

ディレクトリに対しても mv コマンドは有効である。ディレクトリの名前を mv で変更すると、木構造で考えると、それ以下のファイルの名前を全て変更し たことと同じ効果がある。

ファイルのコピーでは、以下で述べるシンボリック・リンク等の問題があるため、 cp -r では不十分なことが多い。

■木構造の制約と問題点

大量の情報を保存するには、木構造を使うしかない。 しかし、木構造だけではうまくいかない。

◆こうもりの分類問題

図13 こうもりの分類(1)

図13 こうもりの分類(1)

図14 こうもりの分類(2)

図14 こうもりの分類(2)

◆シンボリック・リンク/エイリアス/ショートカット

木構造は、ファイルを整理するのに非常に強力な構造である。しかし、それだ けでは、ファイルを整理するには不都合が起きる。それを解消するために、次 のような名前で呼ばれる仕組みが用意されている。

2つの節に、「別名」をつけて、2つの道からたどり着けるようにする。 (木構造では、1つの節にたどり着く道は、ただ1つしかない。)

注意:bash, csh の alias とファイル名の alias (Macintosh) は、まったくの別物。

図15 こうもりの分類(別名つき)

図15 こうもりの分類(別名つき)

◆ハイパーテキストとハイパーメディア

木構造を補う方法として、 ハイパーテキスト を使うことがある。

■シンボリック・リンク

シンボリック・リンク(symbolic link)は、Unix で、ファイルに別名をつける ための機能。「リンク」とは、木構造の枝の意味で、つまり、ファイル名を意 味する。シンボル(symbol)は、(数ではなくて)文字列であることを意味する。 シンボリック・リンク(symbolic link)は、文字列の形で、ファイルの別名を保 持している。

例:java コマンド

$ ls -l /usr/bin/java [←]
lrwxr-xr-x  1 root  wheel  74  5 29 14:46 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
$ []
シンボリック・リンクは、ls -l で見ると、右端に l (小文字の L) と表示さ れる。 ファイル /usr/bin/java を参照すると、 /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/ にある java が使われる。

シンボリック・リンクを作成するには、ln -s コマンドを使う。

$ ln -s oldname newname [←]
この結果、newname でファイルを参照すると、 oldname というファイルが使われる。(このファイルは、 newnameoldname の2つの名前を持つ。)

◆cpコマンドとシンボリック・リンク

cp コマンドは、コピー元にシンボリック・リンクを指定しても、リンクの先の ファイルをコピーする。
$ cat file1-slink.text  [←]
file1
$ ln -s file1.text file1-slink.text  [←]
$ ls -l file1.text file1-slink.text  [←]
lrwxrwxrwx  1 yas  prof  10  6 13 12:13 file1-slink.text -> file1.text
-rw-r--r--  1 yas  prof   6  6 13 12:13 file1.text
$ cp file1-slink.text file2.text [←]
$ cat file2.text  [←]
file1
$ []

■MacOSX Finder によるファイルの整理

手引き 1.4.1 参照

MacOSX の Finder は、次のような役割を持つ。

◆MacOSX openコマンド

端末を開き、コマンドラインで操作をしている時、open コマンドを使うと ディレクトリを Finder で開くことができる。また、 アプリケーションを実行する(Finder でダブルクリックする) ことができる。

◆デスクトップ

ログインすると、何もウインドウを開いていない状態で「デスクトップ」と呼 ばれる特別の場所にあるファイルやディレクトリが画面に表示される。

デスクトップは、MacOSX では、ホーム・ディレクトリの下の 「~/Desktop」という名前のディレクトリに対応している。

◆ゴミ箱(trash)

Finder でファイルを削除する。この時、実際にファイルを削除するのではなく、 一度、「ゴミ箱」に入れる。 ゴミ箱に入れたファイルは、rm コマンドで削除したものと違って、(入れた直 後なら)元の状態にすることができる。Dock の「ゴミ箱」をクリックすると、 Finder でフォルダのように表示される。そこから、ドラッグで普通のフォルダ に移動させる。

注意事項

◆MacOSX alias

MacOSX には、Unix 系オペレーティング・システムで共通に使える シンボリック・リンクの他に、MacOSX 独自の(MacOS9以前から引き継いだ) 機能として、ファイル名に対するエイリアス(alias)の機能がある。

シンボリック・リンクとエイリアスの違い

■シェル変数と環境変数

■変数とは

変数(variable)
何かを覚えるためのもの。メモリを抽象化して名前をつけたもの。
変数名(variable name)
変数を区別するための名前
変数の値(value)
変数が覚えているもの
変数の値を参照(reference)
変数の値を取り出すこと
変数に値を代入(assignment)
変数名で変数を指定して、その値を変更する。変数に値をセットする。

◆シェル変数と環境変数の違い

シェルでは、2種類の変数を使える。
シェル変数
1つのシェル内でのみ有効。
環境変数
実行されるプログラム(子プロセス)に引き継がれる。

◆シェル変数の操作

シェル変数へ代入するには、「変数名=」を使う。
$ X=100 [←]
$ []
参照するには、「$変数名」とする。
$ X=100 [←]
$ echo $X [←]
100
$ []
他の変数と紛らわしい時には、 「"$変数名"」のようにダブルクォートで括るとよい。
$ echo x"$X"x [←]
x100x
$ []
(注意: $Xx と $X は別の変数なので区別できるようにする。) あるいは、${変数名}のように、 括弧で括る方法もある。
$ echo x${X}x [←]
x100x
$ []

シェル変数を削除するには、unset コマンドを使う。

$ unset X [←]
$ echo $X [←]

$ echo x"$X"x [←]
xx
$ []
設定されていないシェル変数を使おうとすると、空として扱われる。 注意:シェルのプロンプト($ ) と間違えないこと。シェルのプロンプ ト($ ) は、実際のコンピュータでは、cosmos38:~ i1012345$ のようになっている。

◆環境変数の代入

bash では、シェル変数の変数名を export コマンドに与えることで、 そのシェル変数を環境変数に変える。
$ X=100 [←]
...
$ export X [←]
$ []
あるいは、最初から export を付けて代入の操作をすることもできる。
$ export X=100 [←]
$ []
bash では、環境変数の参照方法と削除方法はシェル変数と同じ($とunset)である。

◆環境変数の利用方法

シェルがプログラムを実行する時、シェル変数は、プログラムへ引き渡されな いが、環境変数は、渡される。環境変数は、プログラムの動作を変更するため に用いる。 以下の例では、環境変数 TZ を設定して、date コマンドの動きを 変えている。
$ date [←]
2013年 6月 7日 金曜日 15時03分41秒 JST
$ echo $TZ [←]

$ TZ=EST [←]
$ export TZ [←]
$ echo $TZ [←]
EST
$ date [←]
2013年 6月 7日 金曜日 01時04分22秒 EST
$ []
マニュアルの ENVIRONMENT に記述されている。
% man date [←]
DATE(1)                   BSD General Commands Manual                  DATE(1)

NAME
     date -- display or set date and time

SYNOPSIS
     date [-ju] [-r seconds] [-v [+|-]val[ymwdHMS]] ... [+output_fmt]
     date [-jnu] [[[mm]dd]HH]MM[[cc]yy][.ss]
     date [-jnu] -f input_fmt new_date [+output_fmt]
     date [-d dst] [-t minutes_west]

DESCRIPTION
     When invoked without arguments, the date utility displays the current
     date and time.  Otherwise, depending on the options specified, date will
     set the date and time or print it in a user-defined way.
...
ENVIRONMENT
     The following environment variables affect the execution of date:

     TZ      The timezone to use when displaying dates.  The normal format is
             a pathname relative to /usr/share/zoneinfo.  For example, the
             command ``TZ=America/Los_Angeles date'' displays the current time
             in California.  See environ(7) for more information.

...

◆空白を含むシェル変数

シェル変数や環境変数で、空白を含んでいる(可能性がある)時には、ダブル クォート "" で括ると1単語として扱われる。
$ as="Application Support" [←]
$ echo $as [←]
Application Support
$ ls -ld ~/Library/$as [←]
ls: /home/prof/yas/Library/Application: No such file or directory
ls: Support: No such file or directory
$ ls -ld ~/Library/"$as" [←]
drwx------  14 yas  prof  4096  4 26 12:27 /home/prof/yas/Library/Application Support
$ []

◆メタキャラクタ

シェルが解釈し、コマンドには渡されない文字。 < > | $ { } ( ) [ ] & ; ^ " * ? ~ ' ` 空白 タブ など。

コマンドの引数として渡したい時には、解釈を避ける(エスケープ(escape))た めの特殊な形式を使う。
形式 エスケープ対象 エスケープしないメタキャラクタ
\x \」の直後の一文字 なし (行末の「\」は継続行の意味)
'str' 「'」でくくられた文字列 「'」自身は入れられない。「\'」も効かない。
"str" 「"」でくくられた文字列 「$」, 「`」(バッククォート),「"」(ダブルクォート), 「\」,「!」
\は、ASCII 5c(16進)の文字。表示は、「\」か「¥」。

ダブルクォート "" の内部では、$ は解釈され、シェル変数や 環境変数の置き換えられる。シングルクォート 「''」では、$ は解釈さない。

$ echo "$HOME" [←]
/home/prof/yas
$ echo '$HOME' [←]
$HOME
$ []

◆空白のエスケープ

ファイル名の一部に空白を含む場合、エスケープする必要がある。
$ ls -ld "/Applications/QuickTime Player.app" [←]
drwxr-xr-x  3 root  wheel  102  3 28 09:11 /Applications/QuickTime Player.app
$ open "/Applications/QuickTime Player.app" [←]
$ []
バックスラッシュを使ってもよい。
$ ls -ld /Applications/QuickTime\ Player.app [←]
drwxr-xr-x  3 root  wheel  102  3 28 09:11 /Applications/QuickTime Player.app
$ open /Applications/QuickTime\ Player.app [←]
$ []
bashのファイル名補完機能 では、空白を含むファイル名は、バックスラッシュで自動的に補完されることがある。
$ ls -ld /A[]
$ ls -ld /A[tab][]
$ ls -ld /Applications/[]
$ ls -ld /Applications/Q[tab][]
$ ls -ld /Applications/Q[tab][]
$ ls -ld /Applications/QuickTime\ []
$ ls -ld /Applications/QuickTime\ P[tab][]
$ ls -ld /Applications/QuickTime\ Player.app/[]
ファイル名の補完機能を使う時には、空白を打ち込むには、 「\ バックスラッシュ スペース」と打つ必要がある。

補完よりも、ファイル名の置き換え機能が簡単のこともある。
$ ls -ld /A*/Q*P* [←]
drwxr-xr-x  3 root  wheel  102  3 28 09:11 /Applications/QuickTime Player.app
$ []

◆環境変数PATH

環境変数PATHは、コマンドが存在するディレクトリを保持している環境変数である。
$ echo $PATH [←]
/home/prof/yas/bin:/usr/local3/coins/macosx/bin:/usr/local3/coins/common/bin:/De
veloper/Simulator/GTKwave/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/
local3/bin:/opt/local/bin:/usr/X11/bin
$ printenv PATH [←]
/home/prof/yas/bin:/usr/local3/coins/macosx/bin:/usr/local3/coins/common/bin:/De
veloper/Simulator/GTKwave/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/
local3/bin:/opt/local/bin:/usr/X11/bin
$ []
シェルは、打ち込まれたコマンドを環境変数 PATH の中から探して実行する。 たとえば、ls と打ち込まれると、/bin にある /bin/ls を実行する。

複数のコマンドがみつかれば、PATHの先に見つかったものを実行する。 どのコマンドが実行されるかを確認するには、which コマンドを使う。

$ which ls [←]
/bin/ls
$ []

■コマンド行の編集機能とヒストリ機能

◆historyコマンド

history コマンドは、過去に打ち込んだコマンドの一覧を表示するコマンドである。
$ history [←]
    1  saykotoeri2 
    2  saykotoeri2 
    3  fg
    4  dup
<中略>
  500  history
$ []
シェル変数 HISTFILESIZE の個数だけ記憶している。
$ echo $HISTFILESIZE [←]
500
$ []

◆bashのコマンド行の編集機能

bash には、Emacs に似せて、コマンド行の編集機能がある。

◆「!」と「^」

bash には、過去に打ち込んだコマンドを記憶して再現する機能がある。 bash では、コマンド行の編集機能があるので使わなくてもよいが、次の ことは理解しておく必要がある。

◆利用

bash では、 コマンド行の編集機能 で、ヒストリをさかのぼって編集して利用できる。 その他に、次のような方法もある。bash では、ほとんど使われない。 編集機能がないシェルでは有効であった。
!!
直前のコマンドの再実行
!10
history で表示される 10番のコマンドの実行
!-2
現在からさかのぼって2個前のコマンドの実行。!-1 は、!! と同じ。
!str
先頭が str から始まるコマンドで、最も最新のもの。
!?str
文字列 str を含むコマンドで、最も最新のもの。
^old^new
直前のコマンドの old を new で置き換えたもの。打ち間違いの修正。
!*
直前のコマンドの引数(コマンド名以外)
利用例:
$ ls file.txt [←]
file.txt
         ここで -l を付けわすれたのに気がつく
$ ls -l !* [←]
ls -l file.txt
-rw-r--r--  1 yas  prof  9  4 29 21:23 file.txt
$ []

■Emacs

◆Emacsのディレクトリ・エディタ

Emacs には、ディレクトリを表示して、ファイルを削除したり、ファイル名を 変える機能がある。これを dired (directory editor) という。 The Unix Super Text 19.4.4 (2) dired 参照

◆英語チュートリアル

Emacs にはチュートリアル機能(自習)がある。Emacs のキー操作は、英語の単 語を元に作れている。このことは、英語でチュートリアルを実施するとよくわ かる。 手引き 3.3.1 参照

■実習

実習時間中には、 以下の課題をできるだけ多く行いなさい。全部を行う必要はない。

★練習問題(1601) ls -Rコマンド

ls コマンドには、-R (大文字 R, Recursive) というコマンドがあり、 引数で指定されたディレクトリに子供のディレクトリが含まれていたら、 その子供についても表示する(子供にも子供があればそれも表示する)。 この動きを確かめなさい。
$ cd ~ [←]
$ ls -R    . | lv [←]
$ ls -lR   . | lv [←]
$ ls -laR  . | lv [←]
-R オプションは、このようにしばしば-l オプションや -a オプションと一緒に使われる。また、-R オプションは、大 量の結果を表示することが多いので、パイプに出力してページャで表示するこ とが多い。 (これらのオプションを忘れた人は、man コマンドを見なさい。)

★練習問題(1602) treeコマンド

tree コマンドを利用して、ファイルを木構造が分かりやすいように表示しなさい。

tree コマンドに -N オプションをつけると、ファイル名に漢字を含むものも表 示できる。

$ tree -N ディレクトリ名 [←]
さらに、nkf を使えば、ファイル名を EUC で表示できる。
$ tree -N ディレクトリ名 | nkf -e [←]
詳しくは、man tree を見なさい。

★練習問題(1603) openコマンド

open コマンドは、Finder でダブルクリック(コンテキスト・メニューの開く) を行ったことと同じ効果がある。 ディレクトリ名を指定してopen コマンドを 実行すると、その内容を表示する Finder のウインドウが開く( .app のディレ クトリを除く)。 例: ディレクトリ名「.」を指定して、open コマンドを実行すると、カレント・ワー キング・ディレクトリの内容を表示する Finder のウインドウが開く。

★練習問題(1604) デスクトップ

次のようにすると、デスクトップをFinder で他のディレクトリと同じように表 示することができる。このことを確認しなさい。

★練習問題(1605) mkdir/rmdirコマンドによるディレクトリの作成と削除

Unix のコマンド mkdir コマンドと rmdir コマンドを使って、ディレクトリを 作成したり削除したりしなさ。

★練習問題(1606) ファイルが存在するディレクトリの削除

練習問題(1605) で、ファイルを削除しないで、rmdir コマンド実行すると、エラーになり、ディ レクトリを削除することができない。このことを確認しなさい。

ls コマンドは、「.」から始まるファイル名を表示しない。ls コマンドに -a オプションを付けると、表示する。

ディレクトリを削除しようとした時に、ls コマンドで表示されないが、「.」 で始まるファイルがあるために、削除できないことがある。このことを確認し なさい。

★練習問題(1607) mvコマンドによるディレクトリ間のファイルの移動

Unix のコマンド ls, mv を使って、ディレクトリ間のファイルを移動してみな さい。

★練習問題(1608) Finderによるディレクトリ間のファイルの移動

練習問題(1607) と同様に Finder で複数のディレクトリを表示して、それらの間でドラッグすることで、 ディレクトリ間でファイルを移動させることができる(mv コマンド相当)。 この機能を確認しなさい。

  1. 練習問題(1607) と同様に、 練習用のディレクトリとファイルを作成する。
  2. Finder で 2 つのウィンドウを開く。 その他に、open コマンドを使う方法もある。
    $ open ~/from_dir [←]
    $ open ~/to_dir [←]
    
  3. 移動元のディレクトリから、移動したいファイルを選択し、 移動先のディレクトリにドラッグする。
1つのディレクトリしか表示しない状態でも移動することはできるが、 マウスの操作が難しいので、2つ開いた方が良い。

★練習問題(1609) Finderによるディレクトリのファイルのコピー

Finder で、ファイルを選択肢し、コピー&ペーストで「コピー」することがで きる。このことを確認しなさい。

option キーを押しながらドラッグすると、移動ではなく、コピーになる。 このことを確認しなさい。

なお、コピーを行った後、元のファイルを消せば実質的に移動(改名)になる。

★練習問題(1610) mvコマンドによるファイル名の付け替え

Unix のコマンド mv を使って、ファイル名を変更してみなさい。

★練習問題(1611) Finderによるファイル名の付け替え

練習問題(1610) と同様に Finder を使って、(1つのディレクトリ内で)ファイル名を変更することがで きる。このことを確認しなさい。

★練習問題(1612) Finderによるディレクトリの作成

Finder で、フォルダ(ディレクトリ)を作成することができる。 このことを確認しなさい。

★練習問題(1613) Finderによるファイルの削除

Finder で、ファイルを削除することができる。このことを確認しなさい。

★練習問題(1614) Finder によるエイリアスの作成

Finder で ファイルに対するエイリアスを作成してみなさい。

★練習問題(1615) Finder によるファイルの整理

Finder を利用して、ファイルを整理しなさい。

★練習問題(1616) シンボリック・リンクの調査

ls -l を使って、次のディレクトリにどのようなシンボリック・リンクがある かを調べなさい。 ls コマンドと grep コマンドを組み合わせて使うと便利である。
$ ls -l /Applications | grep '^l' [←]
ここで、'^l' は、行の先頭がl で始 まるという意味である。 The Unix Super Text 第32章 正規表現 参照

★練習問題(1617) iTermでのUTF-8の利用

iTerm の設定を変更して、文字コードとして UTF-8 を利用してみなさい。

端末の文字コードが EUC のものと、UTF-8 のもので、次のコマンドの実行結果 を比較しなさい。

$ locale [←]
$ echo $LANG [←]

漢字の名前をディレクトリを含むディレクトリで、次のコマンドの結果を比較 しなさい。

$ cd 漢字のディレクトリを含むディレクトリ [←]
$ ls [←]
$ ls -v [←]
$ ls | cat [←]
$ ls | nkf -e [←]
$ ls | nkf -w [←]
端末の中で Emacs を実行し、M-x set-keyboard-coding-system と M-x set-terminal-coding-system やで、端末の入出力の文字コードて適合させなさ い。

★練習問題(1618) lynx,w3m コマンドによるディレクトリ木の表示

lynx や w3m のように、端末で動作する Web ブラウザを利用してディレクトリ 木を表示しなさい。
$ lynx . [←]
$ lynx ~ [←]
$ w3m . [←]
$ w3m ~ [←]

★練習問題(1619) Emacs Dired によるディレクトリ木の表示

Emacs に含まれている Directory Editor を利用して ディレクトリ木を表示しなさい。 テキストファイルを開いたり、削除したり、改名したりしなさい。 The Unix Super Text 19.4.4項参照 参照

★練習問題(1620) Emacs英語チュートリアル

Emacs には チュートリアル機能 がある。 標準では、日本語の環境では日本語のチュートリアルが実行される。 次の手順で、英語のチュートリアルを実行しなさい。

★練習問題(1621) printenvコマンド

printenvtコマンドに引数付けないで実行すると、全ての環境変数の値が表示さ れる。これを確認しなさい。
$ printenv [←]

★練習問題(1622) 環境変数の確認

個々の環境変数の値がどうなっているか、echo コマンドや printenv コマンド で確認することができる。
$ echo $HOME [←]
/home/prof/yas
$ printenv HOME [←]
/home/prof/yas
$ []
注意: printenv の引数には、$ を付けない。

次のような環境変数の値を調べなさい。

注意:環境変数が設定されていないことがある。

★練習問題(1623) 環境変数 TZ の動作

次のようなコマンドを打ち、環境変数 TZ の働きを調べなさい。
$ date [←]
$ echo $TZ [←]
$ export TZ=EST    [←]
$ date [←]
$ unset TZ [←]
$ date [←]
$ []
環境変数 TZ/usr/share/zoneinfo/ の下にあるファイル名 を設定して、その動作を確認しなさい。

★練習問題(1624) 環境変数 HOME

環境変数 HOME の値を調べなさい。
$ echo $HOME [←]
cd コマンドの引数に与えて、ホーム・ディレクトリや ホーム・ディレクトリ以下のディレクトリに移動してみなさい。
$ cd / [←]
$ cd $HOME [←]
$ cd / [←]
$ cd $HOME/Desktop [←]
$ []
ファイル名の置き換え機能「~/」を使う方法と環境変数 HOME を使う方法を比 較しなさい。

★練習問題(1625) 環境変数 PATH

環境変数 PATH の働きを次のようにして調べなさい。
$ echo $PATH [←]
(表示を確認する)
$ aaaa [←]
-bash: aaaa: command not found     (エラーの表示)
$ ls [←]
(普通に実行される)
$ which ls [←]
/bin/ls
$ PATH=/usr/bin [←]
$ ls [←]
-bash: ls: command not found     (エラーの表示)
$ exit [←]
この例ではPATH の内容がかなり限定され、普段は実行できるコマンドが実行で きなくなっている。それで、最後に exit コマンドでシェルを終了している。 シェルが必要ならば、もう一度 iTerm を実行するなどしてシェルを実行する。

★練習問題(1626) シェル変数 HISTFILESIZE

シェル変数 HISTFILESIZE の値を調べなさい。
$ echo $HISTFILESIZE [←]
history コマンドで表示されるコマンドの数を調べなさい。
$ history [←]
<表示>
$ history | wc [←]
$ []
wc は、word count の略で、行数、単語数、バイト数を表示する。一番左が行 数である。 シェル変数 HISTFILESIZE の値を変化させると、何が起きるか調べなさい。

★練習問題(1627) シェル変数 PS1

シェル変数 PS1 を表示しなさい。
cosmos38:~ yas$ echo "$PS1"
\h:\W \u\$ 
cosmos38:~ yas$ 
この時、ダブルクォート "" を付けないとうまく表示できないことがある。この理由を考えなさい。 シェル変数 PS1 は、シェルのプロンプトを保持している。これを変更してみな さい。
cosmos38:~ yas$ PS1="hi$ "[←]
hi$ []

マニュアル man bash で、PS1 変数(PROMPTING)の中で次のような表現がどのような意味を 持っているかを調べなさい。

man bash の中では、ページャ lv (less) の 「/」 による検索が便利である。

★練習問題(1628) シェル変数の確認

setコマンドに引数付けないで実行すると、全てのシェル変数(環境変数含む)の 値が表示される。
$ set [←]
どのようなシェル変数が設定されているか観察しなさい。

★練習問題(1629) シェル変数の操作

シェル変数を使って、長いファイル名やディレクトリ名を簡単に打ちなさい。
$ u=/Applications/Utilities [←]
$ echo $u [←]
/Applications/Utilities
$ ls $u [←]
Activity Monitor.app            Grapher.app
Adobe Utilities.localized       Java Preferences.app
AirPort Utility.app             Keychain Access.app
AppleScript Editor.app          Migration Assistant.app
Audio MIDI Setup.app            Network Utility.app
Bluetooth File Exchange.app     Podcast Capture.app
Boot Camp Assistant.app         RAID Utility.app
ColorSync Utility.app           Remote Install Mac OS X.app
Console.app                     Spaces.app
DigitalColor Meter.app          System Profiler.app
Disk Utility.app                Terminal.app
Expose.app                      VoiceOver Utility.app
Grab.app                        X11.app
$ []

★練習問題(1630) クォートの働き

bash で ダブルクォート「" "」 や シングルクォート 「' '」の働きを調べなさい。
$ echo "$HOME" [←]
(表示の確認)
$ echo '$HOME' [←]
(表示の確認)
ダブルクォート「" "」 や シングルクォート 「' '」は、中に改行を含めることができる。逆に言うと、必ず閉じる 必要がある。閉じられていない場合には、シェルのプロンプトが$ から > に変化する。このことを確認しなさい。
$ echo "a [←]
> b[←]
> c"[←]
(表示の確認)
$ echo 'a [←]
> b[←]
> c'[←]
(表示の確認)
$ []

★練習問題(1631) historyコマンド

history コマンドで、どのようなコマンドを打ち込んできたかを調べなさい。
$ history [←]
$ history | tail -5 [←]
(過去の5行だけ表示)
$ history | grep cd [←]
(cd を含む行だけ表示)
$ history | lv [←]
(ページャ lv でページ単位で表示。)

★練習問題(1632) historyを使ったコマンドの実行

history の結果を用いて、過去のコマンドを再実行してみないさい。

■課題16 ファイルの整理、シェル変数、環境変数

以下の問題について、問題、および、回答をテキスト・ファイルに記述し、 レポート提出ページから提出しなさい。端末の表示 (コマンドの実行結果)は、コピー&ペースト等の機能を使って提出するファイ ルに含めなさい。課題が達成されたことを示す程度には見やすいように編集し なさい。ただし、過度の編集は避けなさい。編集した部分は必要に応じて省略 記号を入れなさい。

テキスト・ファイルで、右揃えをするには、パラグラフの区切りを、空行にし た上で、M-q (Esc q, M-x fill-paragraph) の機 能を利用するとよい。

(1) mkdir, rm, ln -s 等のコマンドや Finder を用いて、ファイルを整理しなさい。 レポートには次の項目を含めなさい。

シンボリック・リンクは使っても使わなくてもよい。

ディレクトリ構成の説明には、tree コマンドの結果を利用してもよい。ただし、 今回整理した部分だけを含めること。~/Library/ など、自分では整理しなかっ たファイルについては、含めないこと。 「tree -N」 でファイル名に漢字を含むものも表示できる。 「tree -N | nkf -e 」で、さらにファイル名が EUC に変換される。

課題が出される前に既にディレクトリを作成して既に既に整った状況であった 場合には、問題点の代わりに整理の考え方について説明しなさい。またディレ クトリを新たに作成する代わりに既存のディレクトリについて報告してもよい。

(2) 次のファイル名(ディレクトリ名も含めたすべて)を、適当なシェル変数を 設定して短く表現しなさい。

    /Applications/Firefox.app
    /Applications/Thunderbird.app
    /Applications/QuickTime Player.app
短く表現したものを、ls -ld コマンドの引数に与えて実行しなさい。
$ シェル変数の代入1 [←]
$ シェル変数の代入2 [←]
$ シェル変数の代入3 [←]
...
$ シェル変数の代入n [←]
$ ls -ld シェル変数の参照を利用短い表現 [←]
drwxr-xr-x@ 3 mac-admin  admin  102  1 16 09:29 /Applications/Firefox.app
$ ls -ld シェル変数の参照を利用短い表現 [←]
drwxr-xr-x@ 3 mac-admin  admin  102  1 12 11:10 /Applications/Thunderbird.app
$ ls -ld シェル変数の参照を利用短い表現 [←]
drwxr-xr-x  3 root  wheel  102  5 21  2009 /Applications/QuickTime Player.app
$ []
ヒント1: シェル変数への代入は、1回でもよい。

ヒント2: シェル変数の値に空白が含まれている(可能性がある)ものを参照する 時には、ダブルクォートでくくる("$name")とよい。

ヒント3: 補完機能と組み合わせてもよい。その場合にはどのようなキー操作を したのかをレポートに書きなさい。

(3) echo コマンドを使って、次の文字列を画面に表示しなさい。

たとえば、次のように回答しなさい。
$ echo 回答内容 [←]
Lib*
$ []
注意:これは、メタキャラクタをエスケープする課題である。単に echo コマ ンドに対してこのような文字列を与えればよいということでない。

(4) [加点] 以下のコマンドは、環境変数によって動作が変わる。どのような環 境変数でどのように動作が変わるかを man コマンドや The Unix Super Text (30.4.2 節、その他各コマンドの説明) で調べなさい。そして 練習問題(1625) と同様に実際に実行し、動作の 変化を確かめなさい。 全体として、コマンドと環境変数の組で、3 個以上の例を示しなさい。ただし、 環境変数としては PATH, TZ 以外のものを使いなさい。同じ環境変数で、複数 のコマンドの動作が変化するものを含めてもよい。

(5) [加点] Emacs で、英語でチュートリアルを実施しなさい。開始日時と終了 日時を報告しなさい。


Last updated: 2013/06/11 21:14:55
Yasushi Shinjo / <yas@cs.tsukuba.ac.jp>