KUT経・マネ/プログラミング系授業
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
出力例:
/home/yutaka
cdは、指定したディレクトリに移動するコマンドです。何も指定せずに実行すると、ホームディレクトリに戻ります。
入力例:
# ホームディレクトリに戻る
$ cd
cdに続いて、ディレクトリ名を指定すると、指定したディレクトリに移動します。ディレクトリ名の指定には、絶対パスと相対パスのどちらでも使用できます。
入力例:
# 絶対パスでルートディレクトリに移動
$ cd /
# カレントディレクトリを表示
$ pwd
出力例:
/
入力例:
# 相対パスで一つ上のディレクトリに移動
$ cd ..
# カレントディレクトリを表示
$ pwd
出力例:
/home
上の例ではcdのあとに移動先ディレクトリを表す/や..を追加しましたが、このように、コマンドの後に補足的に付ける文字列や数値をコマンドの引数(ひきすう)と呼ぶことがあります。
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の逆で、コマンド入力履歴を現在に向かって順に表示します。
コマンドプロンプトの行頭にジャンプします。
コマンドプロンプトの行末(end)にジャンプします。
カーソルの前にある一文字を削除します。
カーソルの位置にある一文字を削除(delete)します。
カーソルの位置以降にある文字を全て削除(kill)します。
カーソルを一文字分右(forward)に進めます。
カーソルを一文字分左(backward)に移動します。
/etcディレクトリに移動しなさい。pwdコマンドで、カレントディレクトリが/etcであることを確認しなさい。lsコマンドとls -lコマンドにより/etcディレクトリ内のファイル一覧を表示しなさい。/etcディレクトリから相対パスを使ってルートディレクトリに移動しなさい。/usr/localディレクトリに移動しなさい。pwdコマンドで、カレントディレクトリが/usr/localであることを確認しなさい。lsコマンドで、ls -lコマンドにより/usr/localディレクトリ内のファイル一覧を表示しなさい。cdコマンドで、パスを使わずにホームディレクトリに戻りなさい。lsで確認し、見つけたディレクトリのうち、好きなものに移動しなさい。また、移動先のディレクトリの内容をlsで確認しなさい。