*UNIXユーザの作法〜おさらい〜 [#b21060a5] #contents **はじめに [#w02c8dbb] この文書は,[[高橋>takataka]]が自分の授業の補助資料として使うために作成しました. UNIXユーザとして以下のことができるようになる,というあたりをゴールに想定しています. はじめてこれらのことを学ぶ人よりも復習しようとしている人向けです. -ls,cdなどのコマンドを「とりあえず」使えるようになる -Emacsを用いてファイルを作成できるようになる なんでこういうことができるようにしたいかというと... > GUIで簡単に操作できるのに,なんでファイルの一覧,ディレクトリの移動に面倒なコマンドを使うの? これは,これらのUNIXコマンドの使用を通じてディレクトリ(あるいはフォルダ)の階層構造の概念を理解することが非常に重要だと思われるからです. > emacsはなんか面倒臭そう.なんで emacs 使うの? これは,上記と同じ理由に加えて,emacsのような高機能なエディタを用いることがプログラミングの学習のために有効だと思われるからです.(ソースに勝手に色がついたり,自動インデントできたり...) **ファイルの一覧,ディレクトリの作成,カレントディレクトリの移動 [#p05a2f63] 以下の説明をよく読んで実際に操作してみなさい.&color(#ff0000){この文書は,上から順に読んでもらえること,指示されていることを自分で実際にやってみてもらえること,を期待して書いてあります.}; ***プロンプト [#prompt] +コンソールウィンドウを開く +ウィンドウ内に次のようなプロンプト(人間に文字入力をうながす表示)が現れていることを確認する #pre{{ [takataka@s1542f160 takataka]$ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ これがプロンプト キー入力するとここに文字が現れる }} +その状態でコマンド ls を実行するとファイルの一覧が表示されることを確認する #pre{{ [takataka@s1542f160 takataka]$ ls ← キー入力は,ls[ENTER] a.out* prog2/ kazuate.c ← 出力例 }} +今後説明の際には,プロンプトを簡単に'$'として,次のように書きます. #pre{{ $ ls }} この例では,"ls[ENTER]" とキー入力する操作を表しています.'$'は自分が入力する文字ではないことに注意. ***ファイルの一覧 ls [#ls] ls コマンドを実行すると例えば次のようになります. #pre{{ $ ls a.out* prog2/ kazuate.c }} この例では,今いる場所(カレントディレクトリ,詳しくは後で)に,ファイルが二つ(a.outという名前のものと,kazuate.cという名前のもの)があり,ディレクトリが一つ(prog2という名前)あることがわかります.このように,lsコマンドを用いるとファイルを一覧することができます. ディレクトリの後ろには,上記のように'/'(スラッシュ)がついて表示されているかもしれません.それは,lsコマンドがファイルとディレクトリの区別をつけやすいようにつけてくれたものです.また,a.outのように実行できるファイルには'*'がついているかもしれません. "ls"は,"list"に由来するようです. ***ディレクトリの作成 mkdir /削除 rmdir [#mkdir_rmdir] たくさんのファイルを扱うようになってくると,ファイルをいくつかの置き場所に分けて整理したくなってきます. そういうときは,ディレクトリを作ってそこにファイルを置くようにします. +ためしに,piyo というディレクトリを作成しましょう.mkdirコマンドを実行するとディレクトリを作成できます. #pre{{ $ mkdir piyo }} +上記の実行後に ls を実行して,piyoディレクトリができたことを確認しなさい. +中身が空のディレクトリは rmdir コマンドで削除できます.実際に削除してみましょう. #pre{{ $ rmdir piyo }} 空じゃないディレクトリの削除法はここでは説明しません. +lsコマンドを実行してpiyoディレクトリがなくなったことを確認し,再度 mkdir で作成しなさい. "mkdir" は "make directory","rmdir" は "remove directory" に由来するようです. ***カレントディレクトリの表示 pwd /別のディレクトリへの移動 cd [#pwd_cd] コンソールを使って作業をする際は,(1)自分が今どのディレクトリにいるかを把握して,(2)適切なディレクトリに移動する,ことが必要になります.自分が今いるディレクトリすなわち現在地のことを,「カレントディレクトリ」といいます.(1)のためには pwd コマンドを用い,(2)には cd コマンドを用います. +コマンド pwd を実行すると,カレントディレクトリを表示させることができます.コンソールを開いてからディレクトリを移動してなければ,pwd の実行結果は次のようになるでしょう. #pre{{ $ pwd /home/t010000 ← t010000 のところは,実際には自分のID }} +この表示のちゃんとした意味は今はおいときます.ここから別のディレクトリに移動してみましょう. まずは,lsコマンドを実行するとさっき作ったpiyoディレクトリが見えることを確認しなさい. 確認できたら,次のようにします. #pre{{ $ cd piyo }} cdコマンドは,現在地から別のディレクトリに移動するコマンドです.この場合,piyoディレクトリに移動します. +この状態でlsコマンドを実行して結果を確認しなさい.piyo は作ったばかりなので中身は空のはず. +この状態でpwdコマンドを実行して結果を確認しなさい. #pre{{ $ pwd /home/t010000/piyo }} このように,カレントディレクトリは piyo になっています. +この状態で次のようにするとどこにいくでしょう? 実行後に pwd して確認しなさい. #pre{{ $ cd .. ← スペース空けてピリオド二つ }} 元いた場所(より正確にはカレントディレクトリの一つ上のディレクトリ)に戻っているはずです. カレントディレクトリは,より詳しく "current working directory" (現在の作業ディレクトリ)ということがあります.currentのかわりにpresent(現在の)を使って "present working directory" ということもあります."pwd" はここから来ているようです.一方,"cd" は "change directory" に由来するようです. ***ホームディレクトリ [#y35cd81c] ホームディレクトリというのは,ホーム(home)という言葉から類推されるように,ユーザの作業の起点となるディレクトリのことです. 実習室のLinux環境では,コンソールを開いてすぐの状態では #pre{{ $ pwd /home/t010000 }} のようになりますが,この /home/t010000 という場所が,ホームディレクトリです. 多くの場合,ユーザはホームディレクトリの下にファイルやディレクトリを置いていくことになります. 自分のホームディレクトリのことを,"~/" という記号で表すことがあります.たとえば,「ホームディレクトリの下のpiyoというディレクトリ」のことを, ~/piyo/ と書いたり,「ホームディレクトリの下のpiyoの下のfunyaの下のhogeratta.txtというファイル」のことを ~/piyo/funya/hogeratta.txt と書いたりします.この"~"は,cd,cpなどのコマンドでディレクトリやファイル名を指定する際にも使えます. カレントディレクトリがどこであろうとホームディレクトリにはすぐ移動できるように,cdコマンドを引数なしで(ディレクトリを指定しないで)実行すると,ホームディレクトリに移動するようになっています. #pre{{ $ cd piyo $ pwd /home/t010000/piyo $ cd $ pwd /home/t010000 }} ***やってみよう [#iab8a9d1] ●その1 +上記の piyo ディレクトリの中に funya というディレクトリを作り,その中に移動しなさい. 移動後に pwd すると次のようになっているはず. #pre{{ $ pwd /home/t010000/piyo/funya }} +つづけて cd コマンドでホームディレクトリに移動してみなさい. 移動後にpwdして居場所を確認しなさい. +ホームディレクトリにいる状態で以下のようにしてみなさい. 移動後にpwdして居場所を確認しなさい. #pre{{ $ cd piyo/funya }} +上記につづけて以下のようにしてみなさい.移動後に...(以下同文). #pre{{ $ cd ../.. }} ●その2 ↓のリンク先のファイル hogeratta.txt を ~/piyo/funya の中に保存してみよう. 一般的なブラウザでは,下記のリンクにマウスカーソルを置いて「右」クリックして「リンク先を別名で保存」というような操作をすれば,GUIで保存先を指定することができます. 保存先が ~/piyo/funya になるようにすれば,その中に hogeratta.txt を保存できるでしょう. funyaの中まで移動してから ls して,正しく保存できたことを確認すること. [[hogeratta.txt>http://tortoise1.math.ryukoku.ac.jp/~takataka/Docs/hogeratta.txt]] (このファイルの日本語コードはEUCです) ***ファイルの削除 rm [#ha31150f] ファイルの削除には rm コマンドを使います. +hogeratta.txt を保存したディレクトリで,次のようにしてみなさい. $ rm hogeratta.txt +ls して,削除できたことを確認しなさい. &color(#ff0000){注意:実習室の環境では,rmコマンドを実行すると本当に削除するかどうか確認されるようになっています(rm -i になってる).しかし,rm の本当のデフォルトの動作は,確認したりせずいきなり削除,です.確認されると期待して rm コマンドを使っていると,いつか痛い目を見るかもしれませんので気をつけましょう.}; "rm" は "remove" に由来するようです. ***ファイルのコピー cp / ファイルの移動 mv [#sf692505] ファイルのコピーには cp コマンドを,移動には mv コマンドを使います. ファイルのコピーには cp コマンドを,移動&名前の変更には mv コマンドを使います. +hogeratta.txt を保存したディレクトリで,次のようにしてみなさい. $ cp hogeratta.txt hogehoge +ls して,hogehoge というファイルができたことを確認しなさい. +つづけて,次のようにしてみなさい. $ mv hogehoge henahena +lsして,hogehoge というファイルがなくなってかわりに henahena というファイルができたことを確認しなさい. 上記のように mv コマンドを用いると,ファイルの名前をかえることができます. cp や mv でファイル名をどういう順番に指定するのかがわかりにくいと感じるかもしれませんが, 「古い方を先に(左側に)指定する」と考えるとよいかも. cpコマンドを使うとディレクトリ間でファイルをコピーすることもできますが,その方法についての解説はここでは省略します. mvコマンドを使うとあるディレクトリ中のファイルを別のディレクトリに移動させることができますが,その方法についての解説はここでは省略します. "cp" は "copy" に,"mv" は "move" に由来するようです. **エディタ emacs を使ってファイルを作ろう [#pb34d893] emacs というのは,プログラムのソースファイルを作成したり文書を書いたりするのに使われるテキストエディタとしてよく知られたものです. ***とりあえず emacs を起動してみる [#y7cdb316] +コンソールで次のようにすると emacs が起動します. #pre{{ $ emacs }} +上記のように emacs を起動すると,起動したコンソールは使えなくなっています.コンソールで ls などを実行しようとしてみるとどうなるか観察しなさい. +emacsのウィンドウ上部のメニューで #pre{{ 「FILE」→「Exit Emacs」 }} (「FILE」にマウスポインタを重ねて左ボタンを押したままにしてメニューを出し,そこから「Exit Emacs」を選択する)と終了します. +emacsを終了すると,またコンソールが使えるようになります. +では,次は以下のように後ろに '&'(アンパサンド)をつけてコマンドを実行してみましょう. #pre{{ $ emacs & }} +こうすると,emacs が起動しても,元のコンソールはそのまま使えます(lsやpwdしてみましょう).emacsもコンソールも同時に使えるので便利です.emacsでプログラムを書いて保存したらそのまま(いちいちemacsを終了しないで)コンソールでコンパイルできるし. &color(#a00000){上記のようにファイル名を指定しないで emacs を起動した場合でも,適当に文字を入力した後でファイル名を指定して保存すれば,新規にファイルを作成することができます.しかし,ここでは説明を省略します.次のようにファイル名を指定して emacs を起動すれば,新しいファイルを作ることも,既存のファイルを編集することも,どちらもできます.}; ***ファイル名を指定して emacs を起動する [#sf832d6b] +&color(#a00000){cdコマンドでディレクトリ ~/piyo/ に移動してから,}; 次のようにファイル名を指定して emacs を起動してみましょう.hoge がファイル名です. #pre{{ $ emacs hoge & }} +カレントディレクトリ(今の場合 ~/piyo/ )に hoge という名前のファイルが存在していなかった場合,新規に hoge というファイルを作成することになります. 適当に文字を入力して(日本語も入力できます)から保存しましょう.保存は, #pre{{ 「FILE」→「Save (current buffer)」 }} です.フロッピーのアイコン(ペンのない方)をクリックしても保存できます. +コンソールで ls コマンドを実行すると hoge というファイルができていることを確認しなさい. +emacsを一度終了し,再度次のように起動して,ファイル hoge の編集を続けてみます. #pre{{ $ emacs hoge & }} 適当にファイルをいじった後,保存せずに終了しようとするとどうなるか観察しなさい.保存してないけどどうする?って聞かれるはずです. +また emacs を終了し,その後次のようにするとどうなるか観察しなさい. #pre{{ $ cd funya $ emacs hoge & }} こうすると,cdコマンドで異なるディレクトリへ移動してからemacsを起動することになります. そのディレクトリには hoge というファイルはない(過去に作ったことがあれば別ですが)ので,また新規作成しようとすることになります.先ほどとは別の文字を適当に入力し,保存してから終了しましょう. &color(#a00000){上記の例では,ファイルを一度編集するたびに emacs を終了しています.しかし,例えばCのソースを書いている場合に,emacsを起動→プログラムを書く→emacsを終了→コンパイル→エラーが出た!→emacsを起動→プログラムを修正→emacsを終了→…,というようなことをするのは効率が悪いです.emacsは起動したままにして,保存→コンパイル→修正して保存→コンパイルというように作業することをおすすめします.}; ***やってみよう [#vf6b3cd6] 上でダウンロードした ~/piyo/funya/hogeratta.txt を編集して保存してみよう.