この文書は職場大学において情報関連の授業をしていたときに書いたものであり, 一部システムに依存した部分があるが, そのまま転記した. 主な注意事項/FAQ †
基本用語 †ファイル(file) †Unix においてはすべてはファイルとして扱われる. 画面もキーボードもファイルである. それらは特にデバイスファイル と言われ特殊なものだが, それでもファイルである. ファイルは通常1バイト単位の ディレクトリ(directory) †Windows でいうフォルダに相当する. 通常ファイルやディレクトリなどを おくことができる部屋の役割をする. UNIX では広義の意味でディレクトリも ファイルと考えるが, 単にファイルと言えば通常ファイルをさすと考えてよい. ディレクトリの中にあるファイルをそのディレクトリの配下にある, ディレクトリの下にある等と表現する. そのディレクトリ自身を .(ピリオド一つ) であらわす. したがって cd . はカレントディレクトリを移動しない(何も起こらない). また, カレントディレクトリにある abc.txt を表わすのに ./abc.txt などと記すこともある. 特に ./abc.sh はカレントディレクトリに ある abc.sh を実行するときなどに使用する. またディレクトリの相対指定では ./ は あってもなくても同じになる. つまり /home/./は /home/ 同じである. 親ディレクリ †ある directory の一つ上の階層の directory を 親ディレクトリと言い .. で表わす. 例えば /a/b/c/../ は /a/b/ と同じである. cd .. は一つ上の階層にあがる カレントディレクトリ †現在作業しているディレクトリ. 作業ディレクトリともいう. 一般に 各プロセス(プログラムが動いている状態)それぞれに対してその作業ディレクトリが 対応している. カレントディレクトリのパス名は '. ' であり, また, . = ./. = ././. =... である. IEC ではシェルのプロンプトにシェルのカレントディレクトリが表記されるように 設定されている. mozu100:~/work-report% は現在のカレントディレクトリが ~/work-report であることを示す. また, カレントディレクトリは pwd コマンドで見ることもできる. あるいは, 環境変数 PWD に 設定されているので echo $PWD としても 表示させることができる. なお, 移動すると直前の作業ディレクトリは OLDPWD という環境変数に保存される. カレントディレクリを変更するには % cd public_html/infosys/ あるいは % cd ~/public_html/infosys/ のように cd コマンドを使う(change directory の略である). カレントディレクトリが ~/public_html のときは上は % cd infosys あるいは % cd ./infosys でも同じである. ホームディレクトリ †ユーザ毎に与えられたそのユーザ用のディレクトリをホームディレクトリという. 通常ユーザがログインすると, カレントディレクトリはそのユーザのホーム ディレクトリになる. 自分のホームディレクトリは ~ であらわす. ユ〜ザ hanako のホームディレクトリが /home/student/hanako である場合には と /home/student/hanako は等価である. また, ホームディレクトリにカレント ディレクトリを移すのは cd ~ または cd ~/ であるが, cd とだけ入力した 場合も同じことにある(つまり cd コマンドの引数の default は ~/). また, ユーザ foo のホームディレクトリは ~foo で表わす. ホームディレクトリにあるファイル abc.txt は ~/abc.txt と表記される. が実際にどのようなディレクトリであるかは echo ~ としてみればわかる. % echo ~ /home/student/hanako したがってまた, ~ は絶対パスである. 相対パスと絶対パス †ファイルシステムの構造は, ディレクトリの下(中)にもディレクトリを 作ることができ, 結果 tree 構造になっている. 最も根っこにあるのが '/' であり root (ルート)ディレクトリと言われるのはそのためである. *2. ディレクトリも含め一般にファイルを表わす表記文字列を パス名(pathname)もしくは単にパスという. root directory のパスは '/' であり, すべてのパス名は '/' で 始まる文字列で表わされる. 例えば '/usr' や '/etc/passwd' , '/home/staff/' などのように表わされる. ディレクトリのパス名はディレクトリであることを表わすために末尾に '/' を つけることが多い. ディレクトリにあるファイルの一覧を得るには lsコマンドを使用する. / で始まるパス名を絶対パス, 現在いるディレクトリからの相対的な指定を相対パスという. (例) 絶対パス: /usr/local/bin/kpathsearch /usr/src/sys/sparc64 /home/staff/bunka/nichibun/lec/tanaka ~/my-data/ronbun.tex 相対パス: ./../../home/student/./rika/phys/../math/math-2005/math05999 /usr/local/lib/xemacs から /usr/src/sys/i386 への 相対パスは ../../../src/sys/i386 である. ./はいくら間にいれても同じである. 問題: FreeBSD の directory 構造を調べてみよ. また, pwd が /usr/X11R6のとき, ../local/share/././../lib/xemacs/ を絶対パスで記述してみよ. ただし最短になるように表記せよ. 主に使用するファイル関連コマンド. †マニュアル(ヘルプ)を見る †よく使い方がわからないという質問を受けるが, 授業の冒頭に 口をすっぱくしていうのが 「man を見ろ」という言葉である. とにかく基本はこの man コマンド. man コマンドの使い方が 知りたければ % man man とすればよいし, ls というコマンドの説明を見る場合は % man ls とすればよい. 使い方がわからないのは man を読んでないだけである. ただし, よほど複雑な使い方の場合や, 概念的に理解しにくいものを 扱うコマンドの場合は, 用語や概念の説明が要求されるので man だけではわからない場合もある. その場合も /usr/share/doc や /usr/local/share/doc の下などにドキュントがある場合があるので, それを参照してみよう. それでもわからなければ管理者か担当者に聞く. なお, (日本語のマニュアルが存在すれば) jman コマンドで日本語の説明が読める: % jman ls jman jman とすれば jman の日本語の説明を見ることができるわけである. 転記時補足: 女子大の応数の学生は英語が受験科目にないのを理由に入学して きたのが大半であるため, 英語が読めない, 書けないことが情報授業の 最大のネックとなっていると言える. たとえば public_html を pablic_html などと平気で書いていたりするのはその表われ. また, zsh の強力な補完機能を使用せず, のっそりとした手入力で しかもスペルミスを連発するので, "No such file or directory" を頻発するわけであるが, このメッセージの意味すらわからず, そのまま実行しつづけ, 結局パニックになるというのが日常のこと であった. このような学生相手に授業をするのは苦痛以外の 何ものでもなかった. ls : ファイルの一覧を表示する. †% ls ls コマンドは指定されたディレクトリにあるファイル(ディレクトリ を含む)の一覧を表示する. 通常はファイル名の順に表示する. '.' で始まるファイル(隠しファイル)は表示されない. 表示するには '-a' オプションを指定する. 現在の作業ディレクトリを表示する †% pwd (シェルの)カレントディレクトリを表示する. ただし, プロセスから シェル経由で実行すればそのプロセスのカレントディレクトリを得ることができる. #!/usr/local/bin/ruby pwd = `pwd` p pwd 現在の作業ディレクトリを変更する †% cd /home/user/public_html 絶対パス /home/user/public_html で指定される ディレクトリに移動する. % cd subdir1 現在の作業ディレクトリの下にある subdir1に移動する. subdir1 が存在 しなければ cd: no such file or directory: subdir1 と言われる. no such file or directory (日本語では そのようなファイルもディレクトリもありません) はよく あるエラーメッセージ. その言葉の通り, 存在しないファイルや ディレクトリを引数にしていると考えられる. 経験では多くの場合, スペルミスが多い. % cd ../abc2 は現在の作業ディレクトリの親ディレクトリ (ひとつ上のディレクトリ)の下にある 'abc2' directory に移動する. ディレクトリを作る/削除する. †dirname というディレクトリを作成するのは % mkdir dirname いつまでたっても"ファイルを作りなさい"というとこのコマンドを 使用するどうしようもない人がいるが, これはあくまでディレクトリを 作成するコマンドであって, ファイルを作るのではない. % mkdir report.txt としてしまうと, 通常ファイルである report.txt を作ろうとしても 名前が衝突するので作れないから当然ディレクトリ report.txt を 削除しなければならない. 作ったところではディレクトリは空である. 空のディレクトリ dirname を削除するには % rmdir dirname とする(remove directory). ただし, この directory の中に あやまってファイルを作ってしまったときは rmdir では削除できない. % rmdir public_html rmdir: public_html: Directory not empty とエラーになる. もし dirname 以下のファイルやディレクトリを 全て削除してもいいことがわかっているのならば % rm -rf dirname が最も早い方法である. しかし, 安全を来すならば dirname の下に あるファイルを 一旦, 上にあげる(移動する)などしてから rmdir を 使うべきであろう. % mv dirname/* . % rmdir dirname dirname/* は dirname の下にある全てのファイルを表わす. ワイルドカードと呼ばれ正規表現に近いが, 簡素化されていて またシェルによって若干使い方が異なる. たとえば zsh の場合 % ls **/*.c はカレントディレクトリ以下の全階層の .c で終わるファイルを 全て表示する. ファイルを作る(作成する) †((どうしてもファイルを作ることがすぐにできない人がいるので この節を設けることにした. orz)) 空のファイルを作るには % touch filename とする. touch はまさしく触れるだけで, 中身は何もない, つまり空ファイルである. サイズも 0 である. だが, 中身のあるファイルを最初から作りたいのであれば XEmacs, Emacs, vi (nvi, vim) などのエディタを使うのが 当然であろう. Windows のメモ帳でファイルを作るのと 同じである(そう言ってもいつまでも覚えられない学生が いたのは難儀である). (now writing...) ファイルをコピーする †% cp ~/abc.txt xyz ホームディレクトリ直下にある abc.txt というファイルを現在の 作業ディレクトリにある xyz というdirectory の下に abc.txt という名前でコピーする. ただし, もし xyz というディレクトリが 存在しなければ, カレントディレクトリの下の xyz という名前のファイルに コピーされることに 注意. ディレクトリの下に(同じファイル名で) コピーすることを強調したければ, % cp ~/abc.txt xyz/ と最後に '/' をつけて実行すればよい. もし, xyz というディレクトリがあければ cp: cannot create regular file `xyz/abc.txt': No such file or directory とエラーメッセージがでて実行されない. もちろん, xyz/ に def.txt と いう名前でコピーしたければ % cp ~/abc.txt xyz/def.txt である. なお, '-p' オプションは属性を保存する(preserve). また, '-u' オプションは更新があるときだけコピーする. つまり % cp -u abc.new abc.txt は abc.new が abc.txt より新しいときだけコピーする. (注: この cp は /bin/cp ではなく /usr/local/bin/cp である. /bin/cp にはこのようなオプションはない. mv : ファイルを移動する: †% mv abc.txt xyz カレントディレクトリにある abc.txt というファイルを ディレクトリ xyz の中に移動する ただし, xyz という ディレクトリが存在しなければ, xyzという名前のファイルになる. すなわち名前の変更になることに注意. また, % mv abc.txt xyz/def.txt は abc.txt というファイル(またはディレクトリ)を xyz という ディレクトリの下にある def.txt という名前のファイルに移動かつ 名前を変更する. このときもし def.txt というディレクトリが存在すればどうなるか 考えてみよう. ファイルを削除する: †% rm ../abc.txt 親ディレクトリにある abc.txt を削除する ただし, abc.txt がもし directory ならば 以下のように怒られることになる. rm: ../abc.txt: is a directory. また削除するときに確認したいときは % rm -i abc.txt と -i オプションをつければよい. 注: センターでは rc-config で alias によって -i をつけておくように することもできる. % rm -r dirname directory dirnameを削除するには '-r' オプションをつける. このとき dirname 以下にあるすべてのファイル(directory を含む)は 再帰的(Recursive)に削除される. これが directory をまるごと削除する方法である. さらに '-i' オプションや readonly 属性を無視して 強制的に削除する '-f' オプションなどもある. 注: UNIX(の通常のファイルシステム)では 削除されたファイルはバックアップなどから コピーするなどの方法をとらない限り復旧できないので注意する. ファイルの属性を変更する: †% chmod 755 abc.sh % chmod u+rwx,g=rx,o=rx abc.sh UNIX におけるファイルシステムは ファイルの所有者, グループ所有者, その他の三つの ユーザもしくはユーザグループに対しる 権限を指定する方法で属性が与えられる. ファイルの所有権は一般ユーザには変更できないので ここでは割愛するが, chownコマンドを 用いる. 一方, 属性は 読み取り/書きこみ/実行の各ビットを 立てることでそれぞれ可能になる. たとえば, ls -lF で見たときに以下のように 表示されたとする. drwxrwxrwx 2 yositomi wheel 512 5 11 2002 lock/ drwxrwxr-x 6 yositomi nagus 512 11 14 2001 jre1.3.1_02/ drwxr-xr-x 7 yositomi wheel 512 5 11 2002 mule-packages/ -rw-r--r-- 1 root wheel 101308 1 23 2002 libxmltok.a -r-x--x--x 1 yositomi nagus 23755 5 7 2002 test.sh* -rw------- 1 yositomi wheel 314886 10 25 02:56 xdice017.tar.gz このとき, lock/ というディレクトリは yositomi によっても group wheel に 属するいかなるユーザによっても その他のユーザによっても 読みとりも書き込みも実行も できる. ディレクトリの場合読み取りができるとは ls での一覧を表示できることを意味し, 書き込みができるとは ファイルの作成・削除ができることをさす. また, 実行可能とは cd(change directory)できることを意味する. jrel1.3.1_02 という directory は yositomi が所有し, yositomi と nagus に属するユーザは読込/書きこみ/実行可能で その他のユーザは 書きこみはできないことを意味する. xdice017.tar.gz は 所有者 yositomi のみによって読み書き できるが, 実行はできない. test.sh は yositomi, nagus, その他のユーザによって 実行できるが, 所有者しか読むことはできない. 読めないが実行できる, ということは実際あることに注意. これらの属性を変更するには % chmod u+x filename とすれば filename の所有者による実行権限が与えられ, % chmod go-w filename とすれば, group と その他のユーザによる書き込み権限が 剥奪される. r=4, w=2, x=1 として rwx は 7 というようにビット表記し % chmod 755 filename というような表現にすることもできる. この場合は filename は rwxr-xr-x ということになる. Emacs/XEmacs の利用 †html ファイルの編集には(Emacs でも可能だが) xemacs を利用する. そのため, xemacs を使えるようになっておく必要がある. XEmacs の使い方は TUTORIAL を参照する. ツールバーの HELP に Tutorial があり, Default で日本語のチュートリアルが表示されるはずである. Tutorial を読みながら使い方を覚えよう. ここでは, 基本的なキー操作をまとめておく. ときどき, リテラシー確認問題で チェックしてみるとよいだろう. 主なキー操作のまとめ C-x は Ctl キー(センターの X 環境では Caps Lock または Ctrl キー)と同時に 'x'キーを おすことを表わす. (左右の Ctrl キーを使ってもよいが, Caps Lock の位置にある方が使いやすい人も多く存在する). M-x は ESC キーを押した後に 'x' キーを押すかまたは Alt キーを押しながら 'x' を押すことを表わす. 歴史的な経緯から(Alt キーが使えない 端末があった) "ESC を押した後に" という方法が生まれた. キー操作 意味・説明 C-g キー操作を中止したいときや, おかしくなったときなど とにかくキャンセルするために用いる C-x C-f ファイルを開く(find file): アイコンの "Open" を使う 人が多いがトラブルがよく発生するのでキー操作で開こう. 新規ファイルを作成するのも既存ファイルを開くのも XEmacs では区別しないので注意 C-x C-s ファイルを保存する. Windows でいう上書き保存. 常に指がこの動作をしているくらい(くせになるくらい) 多用するのが安全(と思う). 保存し忘れて GUI で終了するときに保存し忘れたり, また, 保存していないのに気付かず 更新が反映されていないとさわぐ人が多いので注意. C-x C-w Write file. ファイルを名前をつけて保存する. このとき表示されるディレクトリがそのバッファに対する いわばカレントディレクトリなので, まちがったディレクトリ にファイルを作っていないか確認するために使うことも できる. C-x b バッファをきりかえる. デフォルトできりかえ先が ミニバッファに表示されるので, そのままでよければ リターン C-x C-b バッファのリストを出す. 目標のバッファに カーソルをあわせて f を押せば そのバッファにきりかわる. C-x o Other window. 分割されたWindow のもう一方に カーソルをうつす. X 上では マウスのクリックでもできるが, そのためだけに マウスというのも... C-x 1 2つにわかれた Window を一つにする. いつまでも分割されたままではせまくてやりづらい C-x 2 Window を2つに分割する. デフォルトでは 同じバッファが両方の Window に表示される. ちなみに X 環境では C-x 5 2 で フレームをさらに開く. フレームを閉じるには C-x 5 0 である. C-x 3 縦に2分割 C-s / C-r 前方 / 後方検索(インクリメンタルサーチ) C-v / M-v 次ページ / 前ページ |