ここでは、高度なLinuxナビゲーションについてみていく。
Linuxでディレクトリを変更する基本的な方法についてはここですでに見た。
ここでは、すこし難度を上げて、Linuxでフォルダを見つける方法、ディレクトリの作成と削除方法、ファイルのコピー方法、そして最後にLinuxでドライブをマウントする方法についても確認していく。
ディレクトリの変更とファイルの検索
ファイルシステムを見ていると、どの設定ファイルがどこにあるのかわからないかもしれない。
例えば、php.iniファイルを編集したい場合、Linux初心者には、「php.iniファイルはどこにあるのか?」という疑問が生じるだろう。
編集したい特定のファイルを見つけるには、まずそのファイルがあるフォルダやディレクトリに移動する方法を学ぶ必要がある。
再度、ディレクトリを変更するにはcdコマンドを使用する。ディレクトリを変更する構文は次の通りだ。
$ cd <フォルダ名>
この構文には一見する以上の意味がある。Linuxはコマンド構文の解釈において、非常に文字通りに従う。以下の図を使用して説明する。
このようなディレクトリ構造を考えてみてほしい。
/
├── etc
└── var
└── abc
例えば、現在varディレクトリにいて、abcフォルダに移動したい場合、以下のように入力すればいい。
$ cd abc
一方、varフォルダにいる状態でetcディレクトリに移動したい場合、
$ cd etc
と入力しても移動できない。
なぜなら、Linuxはvarフォルダ内のetcフォルダに移動したいと解釈するためだが、varフォルダ内にそのようなフォルダは存在しないためだ。
正しく移動するためには、以下のコマンドを入力する。
$ cd /etc
移動したいディレクトリの名前の前にあるスラッシュに注意してほしい。このスラッシュはLinuxにルートディレクトリに移動してからetcディレクトリを見つけるよう指示するものだ。
これでLinuxはルートディレクトリ内でetcフォルダを正常に見つけて移動できる。
さて、上記の例の図を考えてみよう。ルートディレクトリにいて、var内にあるabcディレクトリに移動したいとする。以下のように入力する。
$ cd abc
これではLinuxはabcディレクトリに移動できない。ディレクトリが存在しないと言われてしまう。なぜなら、ルートディレクトリにいるからだ。
Linuxにとって、この時点でのルートディレクトリ内にabcディレクトリはない。ルートからabcディレクトリに移動するには、以下のように入力する必要がある。
$ cd /var/abc
次に、上記のコマンド内に二番目のスラッシュがあるので、ルートに戻るのではないかと思うかもしれないが、その解釈はありえない。
Linuxでは、最初のスラッシュだけをルートディレクトリとして解釈する。二番目のスラッシュは、それに続くディレクトリを、それに先立つディレクトリから探す指示として解釈される。
別の例を考えてみよう。/var/abcディレクトリにいて、etcディレクトリに移動したい場合、以下のように入力するとする。
$ cd etc
このコマンドは動作しない。現在、abcディレクトリにいることを念頭に置いてほしい。abcディレクトリ内にetcディレクトリはない。これを動作させるには、以下のコマンドを入力する必要がある。
$ cd /etc
最初のスラッシュは、Linuxにとってルートディレクトリへの移動の指示として解釈される。ルートディレクトリにいると、それからetcディレクトリを見つける。このコマンドは、ルートフォルダ内にetcディレクトリが存在するため、めでたくetcディレクトリ内に移動できる。
ls:ファイルとディレクトリのリスト表示
ディレクトリに入った後は、そのディレクトリ内に何があるのかを知ることが常に重要だ。Linuxでファイルをリスト表示するにはlsコマンドを使用する。
$ ls
そして、やりたいことに応じて、2つの引数のうちの1つを適用することができる。以下のように入力する。
$ ls -l
すると、すべてのファイルとフォルダがリスト表示され。その上で、それらのファイルやフォルダの権限、変更された日付、ファイルやフォルダのグループ所有者、個別の所有者も表示される。
これは、非常に長いリストになることがよくある。そこで、以下のように入力すると
$ ls -m
この場合、Linuxは非常に長いリストを表示するのではなく、情報を整然としたブロックにまとめて表示してくれる。
find :ファイルやフォルダを検索
重要な設定ファイルを編集したいけれど、そのファイルがどこにあるのか全くわからない場合、Linuxには幸いにも検索オプションがある。ファイルやフォルダを検索するには、以下のように入力する。
$ sudo find -iname <ファイル/ディレクトリ名>
これは、sudo、スペース、find、さらにスペース、-iname引数、さらにスペース、そして最後に探しているファイルまたはディレクトリの名前を入力する。
では、-iname 引数は何をするのだろうか。この引数は、検索が大文字と小文字を区別しないようにするものだ。
Linuxでは大文字と小文字が重要である。Linuxが初めての場合、どのファイルが大文字を含むのか、小文字であるのかを知らないかもしれない。-iname引数を検索パラメータに入力すると、大文字小文字に関係なく、探しているファイルやディレクトリを見つけられる。
例えば、homeという名前のディレクトリを探している場合、-iname引数を使用した検索コマンドは、homeというフォルダ名を持つすべてのディレクトリを返す。そのフォルダの名前がHome、homE、hOme、HOme、hoMe、またはHOMEであっても、検索結果に表示される。
一方で、-iname 引数を使用しなかった場合、ファイルやディレクトリの名前の大文字と小文字を間違えると、大文字小文字が一致しないため、検索結果が何も返さない可能性がある。
また、Linuxでfindコマンドを実行する際にはsudoコマンドを忘れてはいけない。sudoを最初に入力しないと、findコマンドは失敗する。たちの悪いことに、失敗したと返してくれるわけでもなく、単に結果を返さないのだ。
そのため、ファイルがコンピュータに存在しないものと誤解してしまいそうだが、実際には存在しており、ただsudoを使用していなかっただけなのである。
ワイルドカード文字
探しているファイルやディレクトリに対して、検索時にその名前と一緒にワイルドカード文字が使える。
Linuxファイルシステム内のファイルやディレクトリを検索する際にも、アスタリスクワイルドカードを使用できる。
アスタリスクをファイル名やディレクトリ名の前に置くと、その特定のファイル名やフォルダ名の「前のすべて」を探していることを意味する。
Linuxで設定ファイルを探しているとする。Linuxでは、すべての設定ファイルには .conf のような接尾辞があり。設定ファイルの名前を正確に忘れてしまった場合、.conf を接尾辞として持つすべてのファイルを表示したいかもしれない。この場合、以下のコマンドを入力する。
$ sudo find -iname *.conf
このコマンドは、任意の文字で始まり、.confで終わるファイルやフォルダ名を探す。
では、探しているファイルのファイル名はわかっているが、接尾辞がわからない場合はどうなるのか。この場合、以下のコマンドを入力する必要がある。
$ sudo find -iname php*
このコマンドは、phpで始まり、任意の文字で終わるファイルやフォルダ名を探す。
mkdir : ディレクトリの作成
Linuxでのファイルやディレクトリの作成、削除、移動、コピー、および名前の変更についてみていく。
まず、フォルダの作成について説明する。これは非常にシンプルで、以下のようにコマンドを入力する。
$ sudo mkdir <ディレクトリの名前>
これは、sudoの後に半角スペースを入れ、その後にmkdirパラメーター、さらに半角スペース、そして作成したいディレクトリの名前を入力する。mkdirは「make directory」の略である。
ディレクトリの完全なパスを指定しない場合、このコマンドは現在いるディレクトリ内にディレクトリを作成する。
例えば、varディレクトリ内でetcディレクトリに Test ディレクトリを作成したい場合、以下のように入力する。
$ sudo mkdir Test
このコマンドは、varディレクトリ内にTestディレクトリを作成する。var内からetcディレクトリにNotesディレクトリを作成するには、以下のように完全なパスを入力する必要がある。
$ sudo mkdir /etc/Test
この方法は、Linuxはまずルートディレクトリに移動し、その後etcディレクトリに移動して、etcディレクトリ内にNotesディレクトリを作成する。完全なパスを入力することで、ファイルシステムのどこにいても、正しい場所にディレクトリを作成できる。
rm : ファイルとディレクトリの削除
ファイルやディレクトリの削除も同様に簡単だ。以下のコマンドを入力する。
$ sudo rm <ファイル名またはディレクトリ名>
sudoの後に半角スペースを入れ、rmという文字を続け、さらにスペースを入れてから削除したいファイルやディレクトリの名前を入力する。
rmは「remove」の略だ。例えば、Notesという名前のファイルを削除したいなら、以下のように入力する。
$ sudo rm Notes
ディレクトリの削除は少し異なる。ファイルを削除する際と同じ構文に従うが、ディレクトリを削除する際にはコマンドの最後に -R 引数を追加する必要がある。
-R引数は再帰を意味する。再帰引数を使用することで、Linuxに対してディレクトリ内の内容に対しても同じタスクを実行するよう指示している。
例えば、こんな3つのファイルが含まれるabcフォルダを考えてみる。
abc
├── file1
├── file2
└── file3
これをすべてを削除したい場合、以下のように入力する。
$ sudo rm abc -R
このコマンドは、ディレクトリ自体だけでなく、それに含まれる3つのファイルも削除する。
$ sudo rm abc
このコマンドでは、再帰引数を削除のコマンドの最後に追加していないので、中のファイルも削除できないし、ディレクトリも削除できない。
再帰引数なしでディレクトリを正常に削除できるのは、ディレクトリが空の場合だけだ。
mv : ファイルやディレクトリの移動
Linuxでは、ファイルやディレクトリの名前を直接変更するコマンドはない。代わりに、Linuxにはmoveコマンドがあり。例えば、file1という名前のファイルの名前をfile2に変更したい場合、以下のコマンドを入力する。
$ sudo mv file1 file2
このコマンドは 前→後 という具合に、file1(前)の名前をfile2(後)に変更する。表面的にはファイル名を変更しているが、Linuxでは「move」という用語を使用する。また、このような構文では同じディレクトリ内でしか成立しない。
ファイルをディレクトリからディレクトリへ移動する場合も同じ構文が適用されるが、この場合、上記のようなファイルやディレクトリの名前だけでなく、以下のように完全なパスを指定する必要がある。
$ sudo mv /var/abc/file1 /etc/file2
これは、/var/abc にあるfile1 ファイルを /etc 内にfile2という名前に変えて移動した、という意味となる。
cp :ファイルとディレクトリをコピー
Linuxでファイルをコピーするには、以下のコマンドを入力する。
$ sudo cp <コピー元のファイル名> <コピー後のファイル名>
sudo、半角スペース、cpという文字、半角スペース、コピー元のファイル名、半角スペース、最後にコピー後のファイル名を入力する。cp は copy ( コピー ) という意味だ。
例えば、file10という名前のファイルのコピーを作成したい場合、以下のように入力する。
$ sudo cp file10 file10.bak
ここで、file10.bakはfile10の複製後ファイルの名前だ。このようにファイルのコピーを作成できる。
ドライブのマウント
Linuxを扱うために理解する必要がある最後の大きな要点は、ドライブのマウントである。
これは、外部ハードドライブをコンピュータに接続し、その内容を閲覧するためにドライブをマウントする場所だ。
この外部ハードドライブは、通常のハードドライブ、フラッシュドライブ、またはCD-ROMドライブであることが多い。フラッシュドライブやCD-ROMドライブも、Linuxではハードドライブとして扱われる。
基本的に、コンピュータに接続する任意のドライブはマウントする必要がある。
まず、Linuxでのマウントプロセスの動作を理解する必要がある。マウントプロセスは以下の通りだ。
- ハードドライブを接続する。
- マウントポイント用のフォルダを作成する。
- ハードドライブの特定の情報を取得し、マウントポイントディレクトリをそのハードドライブに指定する。
これがドライブをマウントする方法だ。
マウントポイントディレクトリは、ハードドライブと関連付けられている。ハードドライブの内容を閲覧するには、マウントポイントディレクトリを通じて行う。
コマンドプロンプトで実際にマウントポイントディレクトリを作成するにはどうすればいいのだろうか?
それには、以下のコマンドを入力する。
$ sudo mkdir /mnt/<マウントポイントディレクトリ名>
ここで作成している/mntディレクトリに注目してほしい。/mntはLinuxの標準マウントディレクトリである。
マウント時には、このマウントディレクトリが一般的に使われる。異なるマウントディレクトリも使えるが、/mntを使用することがベストな方法とされている。
次に、接続されたハードドライブをdrive1というマウントポイントにマウントしたい場合、以下のように入力する。
$ sudo mkdir /mnt/drive1
上記のコマンドで、ハードドライブをマウントするディレクトリを作成する。この後、マウントしようとしているハードドライブの情報を取得する。これを行うには、以下のコマンドを実行する。
$ sudo fdisk -l
上記のコマンドは、システムに接続されているすべての物理ハードドライブをリスト表示する。このリストは、システムに接続されている異なるハードドライブ、使用可能なスペースなどを示してくれる。
ここで探しているのは、/dev/sda1のようなものだ。これらはLinuxでのディスク名と呼ばれる。
Linuxのディスク名は常にアルファベット順に配置される。たとえば、Linuxシステムに接続されているハードドライブが2つある場合、それらはそれぞれ/dev/sdaおよび/dev/sdbなどと名付けられる。ディスク名の後に続く数字は、その特定のディスク内のパーティションを指す。
例えば、最初のハードドライブに2つのパーティションがある場合、それらはそれぞれ/dev/sda1および/dev/sda2として表示される。
2番目のハードドライブに3つのパーティションがある場合、それらはそれぞれ/dev/sdb1、/dev/sdb2、および/dev/sdb3として表示される。
したがって、ハードドライブをマウントするためには、ディスク名を見つけたら以下のように入力する。
$ sudo mount <ディスク名> <マウントポイント>
このコマンド構文を例に適用すると、コマンドは以下のようになる。
$ sudo mount /dev/sda /mnt/drive1
これでハードドライブをマウントすることができた。これで、マウントドライブへのディレクトリを変更して以下のように入力する。
$ sudo cd /mnt/drive1
そして、マウントポイントディレクトリにいると、以下のように入力できる。
$ ls -l
上記のコマンドは、そのハードドライブのすべての内容をリスト表示する。これで、これまでに学んだLinuxのナビゲーションコマンドをマウントされたドライブで適用できる。
そして、そのハードドライブをマウント解除したい場合は、以下のように入力する。
$ sudo umount <ディスク名> <マウントポイント>
umountはアンマウントを意味する。ハードドライブを正常にアンマウントした後は、新しいハードドライブを使用する場合に同じプロセスを繰り返せる。
まとめ
これらのコマンドは、初心者には複雑に見えるかもしれないが基本的なものだ。いきなりすべてを理解できなくても、少しづつ慣れていこう。より複雑なコマンドを学ぶためにはManページを使用するといい。