ディレクトリとは、WindowsやMac上では「フォルダ」という言葉で表現されます。一方、CUI操作を前提としたUNIX系OSには「フォルダ」という概念は存在しません。
この記事ではLinuxのコマンドを用いて、ディレクトリを操作する方法をご説明します。ここを理解すれば、Linux上でディレクトリを自由に行き来したり、情報を表示したりできるようになります。
ディレクトリとは?
ディレクトリとは、ファイルの集まりを分類するための容れ物です。WindowsやMacで言うところの「フォルダ」です。
Linuxにおいてのディレクトリとは、WindowsやMacのような「容れ物」単体を表す名称と言うよりも、「所在」や「階層」など、「位置」の概念を強く含んだ意味合いを持ちます。まずは、Unix系OS特有のディレクトリ表現方法を見ていきましょう。
ルートディレクトリ
LinuxOSのディレクトリ階層を上へ上へと辿っていけば、どこからいっても必ず「/(root)」に辿り着きます。ルートディレクトリとは、最上位「/(root)」のディレクトリを指します。
ちょっと紛らわしいですが、ディレクトリの最上層を「root(木の根っこ)」ディレクトリと呼びます。これと似た呼び方で「root(スーパーユーザー:最上位の権限保有者)」が存在します。「root(スーパーユーザー)」は、もともと、UNIX系OSでログイン時のホームディレクトリがシステムのルートディレクトリ(/)であることからこのように呼ばれるようになっています。紛らわしい・・
カレントディレクトリ
カレントディレクトリとは、現在自分のいるディレクトリ(現在位置)を指しています。「pwd」コマンドで表示されるディレクトリです。ちなみに「.(ドット)」を用いて表現することもできます。
# カレントディレクトリへ移動(現在位置から現在位置へ移動、つまりそのまま)
$ cd .
ホームディレクトリ
ホームディレクトリとは、ログインした際に、最初に移動するディレクトリを指します。通常は、ユーザー作成時にユーザーと同一名が付与されます。「~(チルダ)」を用いて表現することもできます。
# ホームディレクトリへ移動
$ cd ~
ここでいうホームディレクトリとは、「/home」の事ではありません。自身のログイン時に最初に移動するディレクトリです。
親ディレクトリ
親ディレクトリとは、特定のディレクトリから見て、一つ上(上層)にあるディレクトリを指します。「..(ドット*2)」を用いて、用いて表現することもできます。
# ひとつ上の階層(親ディレクトリ)へ移動
$ cd ..
# 二つ上の階層(親の親ディレクトリ)へ移動
$ cd ../..
サブディレクトリ
サブディレクトリとは、特定のディレクトリから見て、下位(下層)にあるディレクトリを指します。
# 下位の階層へ移動
cd <サブディレクトリ名>
相対パスと絶対パス
ディレクトリを移動する際には、「相対パス」と「絶対パス」という考え方が役に立ちます。
「相対パス」は、現在のディレクトリを基準にしたディレクトリの位置を示します。
例えば、現在ディレクトリが「/home/geeks」の場合、「/boot」ディレクトリを相対パスで指定するには「cd ../../boot」となります。つまり、現在のディレクトリから見て「../..」というコマンドを入力して、上層へ2回遡り「/boot」を指定します。
現在地「/home/geeks」からの「/boot」への 相対パス
cd ../../boot
一方の「絶対パス」とは、現在自分がどこにいるかに関わらず、ツリー構造のトップのディレクトリから見て、どの位置に移動するのかという、位置をすべて入力して決め打ちで移動するという方法です。
「/boot」への 絶対パス
cd /boot
絶対パスを指定する場合には、「/」によってディレクトリを下っていきます。たとえば、「/boot」のディレクトリに移動したい場合、「/boot」と入力します。住所地番のような入力方法と考えてもよいでしょう。
ファイルの一覧表示「ls」
「ls」コマンドはファイルを一覧表示や、ファイルの詳細情報を表示するコマンドです。
コマンドの書式
ls[オプション] ファイル or ディレクトリ
コマンドの主なオプション
- -l:リスト形式で表示する
- -o:「-l」と同じだが、グループ情報は表示しない
- -h(--human-readable):「-l」と併用したとき、人が読みやすい形式で表示する
- -c:「-l」と併用したとき、更新日の代わりに「ctime」を表示する
- -u:「-l」と併用したとき、更新日の代わりに最終アクセス日を表示する
- -i(--inode):各ファイルの前にファイルの「iノード番号」を表示する
- -s(--size):各ファイルの前にファイルのブロック数を表示する
- -t:ファイルの更新日が新しい順に表示する
- -r(--reverse):並び順を反転させる
- -a(-all):ドットファイルも表示する
- -d(--directory):ディレクトリそのものの情報を表示する
通常、Unix系のOSでは、ユーザー毎の設定ファイルは「.(ドット)」から始まる「隠しファイル」としてユーザー毎のホームディレクトリへ格納されています。Linuxでは「.(ドット)」から始まるファイル名は、「隠しファイル」となり、通常の「ls」コマンドでは一覧表示の対象になりません。
実際に下記のコマンドを実行してみます。
# ls -l
# ls -la
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[root@CentOS7 ~]# ls -l 合計 0 👈 なにも表示されていない ------------------------------------------------------------ [root@CentOS7 ~]# ls -la dr-xr-x---. 5 root root 232 4月 1 13:05 . dr-xr-xr-x. 17 root root 224 3月 30 11:25 .. -rw-------. 1 root root 369 3月 31 14:35 .bash_history -rw-r--r--. 1 root root 18 12月 29 2013 .bash_logout -rw-r--r--. 1 root root 176 12月 29 2013 .bash_profile -rw-r--r--. 1 root root 176 12月 29 2013 .bashrc drwx------. 4 root root 31 3月 30 16:14 .cache drwxr-xr-x. 3 root root 18 3月 30 16:14 .config -rw-r--r--. 1 root root 100 12月 29 2013 .cshrc drwx------. 3 root root 25 3月 30 11:27 .dbus -rw-r--r--. 1 root root 129 12月 29 2013 .tcshrc [root@CentOS7 ~]# |
「ls -l」では見えなかった設定ファイル(隠しファイル群)が「ls -la」では表示されている。
ディレクトリを移動「cd」
「cd」コマンドは、現在ディレクトリを位置を変更するコマンドです。「cd」コマンドは非常に使用頻度の多いコマンドです。
コマンドの書式
cd ディレクトリ
現在の自分のディレクトリの場所がどこになっているのかを確認するためには「pwd」と入力します。現在のユーザーのホームディレクトリに移動したいときには、「cd」だけ、もしくは、「cd ~」(チルダ)を入力します。ちなみに現在のディレクトリを表す記号は「.(ドット)」、一つ上の階層へ上がるには「..(ドット2つ)」で表します。
# cd /home
# cd ~
下記は「cd」の実行例です。ここでは、一度「/home」へ移動後「pwd」コマンドでカレントディレクトリを確認、その後「cd ~」(チルダ)を使ってホームディレクトリへ戻ります。
1 2 3 4 5 6 7 |
[root@CentOS7 ~]# cd /home [root@CentOS7 home]# pwd /home ------------------------------------------------------------ [root@CentOS7 home]# cd ~ [root@CentOS7 ~]# pwd /root |
カレントパスの表示「pwd」
「pwd」コマンドは、カレントディレクトリの名称を表示するコマンドです。一般的には前述の「cd」コマンドと組み合わせて使用されます。
コマンドの書式
pwd[オプション]
コマンドの主なオプション
- -P:物理的なディレクトリ名を表示する
- -L:論理的なディレクトリ名を表示する(デフォルト)
下記は「pwd」の実行例です。
# pwd
1 2 3 |
[root@CentOS7 ~]# pwd /root [root@CentOS7 ~]# |
カレントディレクトリのパスが表示されまています。
ディレクトリを作成する「mkdir」
「mkdir」コマンドは、ディレクトリを新規作成するコマンドです。
コマンドの書式
mkdir[オプション] ディレクトリ
コマンドの主なオプション
- -m(--mode):作成するディレクトリのパーミッションを設定する
- -p(--parents):必要に応じて親ディレクトリも作成する
- -v(--verbose):経過を表示する
下記コマンドを実行することにより、カレントディレクトリに「test01」ディレクトリを作成できます。作成できたことを確認するためには、前述した「ls」コマンドを実行してみましょう。「test01」と表示されているはずです。
# mkdir -m 777 test01
1 2 3 4 |
[root@CentOS7 ~]# mkdir -m 777 test01 [root@CentOS7 ~]# ls -l drwxrwxrwx. 2 root root 6 4月 2 12:25 test01 [root@CentOS7 ~]# |
ディレクトリ「test01」を パーミッション「777」で作成しました。
なお、次の「-p」オプションを使うとこにより、親ディレクトリ「parent」と、そのなかに含まれるディレクトリ「test02」を同時に作成することが出来ます。
通常「mkdir」コマンドでは、存在しないディレクトリの配下へサブディレクトリを作成することは出来ません。
「-p」オプションを使用することで、必要に応じてディレクトリの作成及び、サブディレクトリの作成を同時に行うことができます。
# mkdir -p parent/test02
実際に上記コマンドをコンソール上で実行してみます。
1 2 3 4 5 6 7 8 9 10 |
[root@CentOS7 ~]# mkdir -p parent/test02 [root@CentOS7 ~]# ls -lR drwxr-xr-x. 3 root root 20 4月 2 12:47 parent ./parent: 合計 0 drwxr-xr-x. 2 root root 6 4月 2 12:47 test02 ./parent/test02: 合計 0 [root@CentOS7 ~]# |
親ディレクトリ「parent」と、そのなかに含まれるディレクトリ「test02」を同時に作成しました。
ディレクトリを削除する「rmdir」
「rmdir」コマンドを用いることにより、ディレクトリを削除することができます。ただし、削除できるのは中身が空のディレクトリのみです。
コマンドの書式
rmdir[オプション] ディレクトリ
コマンドの主なオプション
- -p(--parents):必要に応じて親ディレクトリも削除する
- -v(--verbose):経過を表示する
下記コマンドを実行することにより、親ディレクトリ「parent」と、そのなかに含まれるディレクトリ「test02」を削除できます。
# rmdir -p parent/test02
※ 「rmdir」コマンドでは、削除対象のディレクトリ内が空でなければ削除はできません。
中のファイルごと削除したい場合は、rmコマンドを使用します。
1 2 3 4 5 6 7 8 9 |
[root@CentOS7 ~]# ls -l 合計 0 drwxr-xr-x. 3 root root 20 4月 2 12:53 parent drwxrwxrwx. 2 root root 6 4月 2 12:52 test01 ------------------------------------------------------------ [root@CentOS7 ~]# rmdir -p parent/test02 [root@CentOS7 ~]# ls -l 合計 0 drwxrwxrwx. 2 root root 6 4月 2 12:52 test01 |
ディレクトリを行き来する「pushd, popd」
「pushd, popd」コマンドは、「ディレクトリスタック」を使い、複数のディレクトリの行き来することが出来るコマンドです。
通常、ディレクトリを行き来する際には「cd」コマンドを用いますが、ディレクトリ階層が複雑な箇所を行ったり来たりする場合、パスを打つ手間が大きくなってしまいます。その場合、パスを「ディレクトリスタック」に積み、ショートカットのようにディレクトリを簡単に行き来できる方法があります。
- pushd
「ディレクトリスタック」へディレクトリパスを保存するコマンドです。さらにカレントディレクトリをそのディレクトリに変更します。 - popd
「ディレクトリスタック」からディレクトリパスを取り出すコマンドです。カレントディレクトリを最後に保存した場所に変更し、ディレクトリスタックから登録を削除します。
コマンドの書式
pushd[オプション] または ディレクトリ
popd [オプション]
pushdコマンドの主なオプション
- +番号:「+3」でディレクトリスタックの左から4番目が先頭になるように保存内容をローテートして、先頭になったディレクトリをカレントディレクトリに変更する
- -番号:同様に右から数えてローテート後、カレントディレクトリを変更する
- -n:スタックの操作のみを実行する。カレントディレクトリは変更しない
popdコマンドの主なオプション
- +番号:「+3」でディレクトリスタックの左から4番目を削除しその場所をカレントディレクトリとする
- -番号:右から数えて削除後、その場所に変更する
- -n:スタックからの削除のみを実行、カレントディレクトリは変更しない
前提条件として、「/root/scrpts/bin」と「/root/scripts/log」というディレクトリを頻繁に行き来するケースを想定します。そして、カレントディレクトリは「/root/scripts/bin」とします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
[root@CentOS7 bin]# pwd 👈 カレントディレクトリ確認 /root/scripts/bin ------------------------------------------------------------ [root@CentOS7 bin]# pushd ../log 👈 「ディレクトリスタック」へ登録 ~/scripts/log ~/scripts/bin [root@CentOS7 log]# pwd /root/scripts/log ------------------------------------------------------------ [root@CentOS7 log]# pushd 👈 登録と同時に「/root/scripts/log」へ移動(以降:行き来します) ~/scripts/bin ~/scripts/log [root@CentOS7 bin]# pwd /root/scripts/bin ------------------------------------------------------------ [root@CentOS7 bin]# popd 👈 「ディレクトリスタック」からパス情報を削除 ~/scripts/log [root@CentOS7 log]# pwd /root/scripts/log ------------------------------------------------------------ [root@CentOS7 log]# pushd -bash: pushd: 他のディレクトリはありません [root@CentOS7 log]# |
pushd +[n]で「ディレクトリスタック」内の登録パス情報をローテートすることが出来ます。交互の飛び先を変更する場合に操作します。
まとめ
この記事では、Linuxを扱う上で必須となるディレクトリ操作コマンドをご紹介させていただきました。
ディレクトリの操作コマンドは、「ls」コマンド、「cd」コマンドなどと組み合わせで使用することが基本になります。コマンド操作によってディレクトリなどの移動ができれば、まずはCUIでのディレクトリ操作の第一歩といえるでしょう。
Linux基礎知識(全12記事)
├─Linuxとは何か? Linuxの基本概要を理解しよう!
├─Linuxをインストールし、ログインしてみよう!
├─起動の仕組みとカーネルについて!
├─ディレクトリ構造とファイルシステムについて!
├─ユーザー環境(ユーザー、グループ、パスワード)の設定について!
├─ディレクトリ操作について!
├─ファイル操作について!
├─テキスト操作について!
├─Linuxの基本コマンドを覚えよう!
├─適切なアクセス制御を付与してみよう!
├─リンクとiノードについて理解を深めよう!
└─LVMとは?LVMを理解しよう?