講義ノート集

KUT経・マネ/プログラミング系授業

数理セミナーI (第1回)

ディレクトリツリーを理解しよう

ディレクトリ

Linuxの基本構成要素は、ディレクトリです。ディレクトリはデータの入れ物であり、中にディレクトリやファイルを格納できます。Windowsの内部構造がフォルダの入れ子になっているのと同様、Linuxの内部構造もまた、ディレクトリの入れ子になっています。この入れ子構造を、ディレクトリツリーと呼びます。

ディレクトリは入れ物であると同時に、実際には特殊な機能をもったファイルです。従って、「全てのファイル」という場合、文脈によってはディレクトリを含みますので注意しましょう。

カレントディレクトリ

Linuxを操作するときは、ディレクトリツリーの中をコマンドで移動しながら様々な作業を行ないます。現在自分がいるディレクトリのことをカレントディレクトリと呼びます。currentは、「現在の」を意味します。

ルートディレクトリ

一番上のディレクトリをルートディレクトリと呼び、記号/で表します。ルートディレクトリの直下には、様々なディレクトリがあり、その中にはLinuxを動かすのに重要な無数のファイルが収められています。

絶対パス

ディレクトリやファイルの位置を表す文字列をパスと呼びます。パスには絶対パス相対パスがあります。

絶対パスを書くときは、ルート/から始めて、目的のディレクトリにたどり着くまでに通るディレクトリの名前を全て/記号で区切って列挙します。例えば、ルートディレクトリの直下にあるusrディレクトリの絶対パスは/usrとなり、さらにその直下にあるlocalディレクトリの絶対パスは/usr/localとなります。さらにその直下にあるbinディレクトリの絶対パスは/usr/local/binになります。

相対パス

一方、相対パスは、カレントディレクトリから始めて、目的のディレクトリにたどり着くまでに通るディレクトリの名前を、やはり/で区切って列挙します。たとえばカレントディレクトリが/usrのとき、/usr/local/binの相対パスは、local/binとなります。

一つ上のディレクトリ、カレントディレクトリ

相対パスを表す際に便利な記号として、「一つ上のディレクトリ」を表す..という記号があります。たとえばカレントディレクトリが/usr/local/binのときに、/usr/local/libディレクトリを相対パスで表すと../libとなります。ちなみに、カレントディレクトリを表す.という記号もあり、時々使うことがあります。

ホームディレクトリ

ログイン時には、必ずホームディレクトリと呼ばれるディレクトリにいます。ホームディレクトリは、/homeディレクトリの下の、自分のユーザー名と同じ名前のディレクトリです。例えばユーザー名がyutakaならば、/home/yutakaとなります。/homeディレクトリはホームディレクトリではないので、注意しましょう。

ホームディレクトリは記号~によって表すことができます。この表記はホームディレクトリからの相対パスを表すのに便利です。たとえば、~/..は、ホームディレクトリの一つ上のディレクトリ、すなわち/homeを表します。

ホームディレクトリの下には、自由にディレクトリやファイルを作成できますが、それ以外の場所については、一般ユーザーには変更を加える権限がありませんので注意しましょう。

基本コマンドを覚えよう

pwd - カレントディレクトリを表示

pwdコマンドにより、カレントディレクトリを表示して、自分の居場所を確認できます。

入力例:

# カレントディレクトリを表示
$ pwd

出力例:

/home/yutaka

cd - 指定したディレクトリに移動

cdは、指定したディレクトリに移動するコマンドです。何も指定せずに実行すると、ホームディレクトリに戻ります。

入力例:

# ホームディレクトリに戻る
$ cd

cdに続いて、ディレクトリ名を指定すると、指定したディレクトリに移動します。ディレクトリ名の指定には、絶対パスと相対パスのどちらでも使用できます。

入力例:

# 絶対パスでルートディレクトリに移動
$ cd /
# カレントディレクトリを表示
$ pwd

出力例:

/

入力例:

# 相対パスで一つ上のディレクトリに移動
$ cd ..
# カレントディレクトリを表示
$ pwd

出力例:

/home

上の例ではcdのあとに移動先ディレクトリを表す/..を追加しましたが、このように、コマンドの後に補足的に付ける文字列や数値をコマンドの引数(ひきすう)と呼ぶことがあります。

ls - ディレクトリ内のファイル一覧を表示

lsコマンドにより、ディレクトリ内のディレクトリやファイルの一覧を表示できます。引数を指定しなければ、カレントディレクトリの内容を表示します。

入力例:

# カレントディレクトリの内容を表示
$ ls

出力例:

dir1 dir2 file1

デフォルトの挙動では、ディレクトリやファイルの名前の一覧を表示するだけですが、もう少し詳細な情報が欲しい場合は、-lというオプションを付けます。

# カレントディレクトリの内容の詳細を表示
$ ls -l

出力例:

合計 8
drwxrwxr-x 2 yutaka yutaka 4096 10月 15 15:07 dir1
drwxrwxr-x 2 yutaka yutaka 4096 10月 15 15:00 dir2
-rw-rw-r-- 1 yutaka yutaka    0 10月 15 15:00 file1

一般に、Linuxコマンドのオプションは-xのように「ハイフン+英数字」の形をしています。ハイフンと英数字の間にスペースを入れないように注意しましょう。

ピリオド.から始まる名前を持つファイルは隠しファイルと呼ばれ、lsコマンドのデフォルトの挙動では表示されません。すでに出てきた...はディレクトリですが、これらも隠しファイルの一種です。隠しファイルを含めて全てのファイルを表示するには、-aオプションを付ける必要があります。

入力例:

# 全てのファイルを表示
$ ls -a

出力例:

. .. .bash_history .bashrc dir1 dir2 file1

複数のオプションを同時に使用することも可能です。例えば-lオプションと-aオプションを同時に使用するには、ls -l -aあるいはls -laとします。

引数に指定したディレクトリの内容を表示することもできます。

入力例:

ls /usr/local

出力例:

Wolfram  cuda       etc    go       lib      man   share  stata17 bin      cuda-10.1  games  include  libexec sbin  src    var

キーバインドをマスターしよう

Linuxのシェルには、キーバインドと呼ばれる非常に強力な時短のための仕組みがあります。これをマスターすることが、Linuxを使う上で非常に重要です。キーバインドは沢山ありますが、最低でも以下のものを覚えておきましょう。

Ctrl-p

コマンド入力履歴を過去方向に遡ります。同じコマンドを何度も入力したい場合に便利です。

Ctrl-n

Ctrl-pの逆で、コマンド入力履歴を現在に向かって順に表示します。

Ctrl-a

コマンドプロンプトの行頭にジャンプします。

Ctrl-e

コマンドプロンプトの行末(end)にジャンプします。

Ctrl-h

カーソルの前にある一文字を削除します。

Ctrl-d

カーソルの位置にある一文字を削除(delete)します。

Ctrl-k

カーソルの位置以降にある文字を全て削除(kill)します。

Ctrl-f

カーソルを一文字分右(forward)に進めます。

Ctrl-b

カーソルを一文字分左(backward)に移動します。

練習問題

  1. 絶対パスを使って/etcディレクトリに移動しなさい。
  2. pwdコマンドで、カレントディレクトリが/etcであることを確認しなさい。
  3. lsコマンドとls -lコマンドにより/etcディレクトリ内のファイル一覧を表示しなさい。
  4. /etcディレクトリから相対パスを使ってルートディレクトリに移動しなさい。
  5. ルートディレクトリから相対パスを使って/usr/localディレクトリに移動しなさい。
  6. pwdコマンドで、カレントディレクトリが/usr/localであることを確認しなさい。
  7. lsコマンドで、ls -lコマンドにより/usr/localディレクトリ内のファイル一覧を表示しなさい。
  8. cdコマンドで、パスを使わずにホームディレクトリに戻りなさい。
  9. ルートディレクトリに移動し、そこにどのようなディレクトリがあるかlsで確認し、見つけたディレクトリのうち、好きなものに移動しなさい。また、移動先のディレクトリの内容をlsで確認しなさい。
  10. 1-8で行ったのと同じ要領で、様々なディレクトリに自由に移動して、どのようなファイルやディレクトリがあるか確認しなさい。

課題1

  1. Linuxはどのような点でWindowsと異なるか、あなた自身がLinuxに触れて抱いた感想を交えて300字以上で説明しなさい。
  2. Linuxが社会でどのように活躍しているかを調べ、その知見に基づき、なぜ高知工科大学にLinuxマシンがあるのか、なぜWindowsマシンだけではダメなのか、その理由を考えて300字以上で説明しなさい。
  3. Linuxを学ぶことが、あなた自身の将来にとってどのように有意義であるかを、あなたが進もうとしている専攻や、興味のある研究室・研究テーマ、あるいは卒業後の進路と関連付けて300字以上で説明しなさい。いくら考えても、全く役に立たないと思われる場合は、その理由を300字以上で説明しなさい。