Linux の基礎知識

【Linuxの基礎知識】ディレクトリ操作について!

ディレクトリとは、WindowsやMac上では「フォルダ」という言葉で表現されます。一方、CUI操作を前提としたUNIX系OSには「フォルダ」という概念は存在しません。

この記事ではLinuxのコマンドを用いて、ディレクトリを操作する方法をご説明します。ここを理解すれば、Linux上でディレクトリを自由に行き来したり、情報を表示したりできるようになります。

ディレクトリとは?

ディレクトリとは、ファイルの集まりを分類するための容れ物です。WindowsやMacで言うところの「フォルダ」です。

ディレクトリのイメージ

Linuxにおいてのディレクトリとは、WindowsやMacのような「容れ物」単体を表す名称と言うよりも、「所在」や「階層」など、「位置」の概念を強く含んだ意味合いを持ちます。まずは、Unix系OS特有のディレクトリ表現方法を見ていきましょう。

ユーザー「geeks」から見たLinuxのディレクトリイメージ

ルートディレクトリ

LinuxOSのディレクトリ階層を上へ上へと辿っていけば、どこからいっても必ず「/(root)」に辿り着きます。ルートディレクトリとは、最上位「/(root)」のディレクトリを指します。

ちょっと紛らわしいですが、ディレクトリの最上層を「root(木の根っこ)」ディレクトリと呼びます。これと似た呼び方で「root(スーパーユーザー:最上位の権限保有者)」が存在します。「root(スーパーユーザー)」は、もともと、UNIX系OSでログイン時のホームディレクトリがシステムのルートディレクトリ(/)であることからこのように呼ばれるようになっています。紛らわしい・・

カレントディレクトリ

カレントディレクトリとは、現在自分のいるディレクトリ(現在位置)を指しています。「pwd」コマンドで表示されるディレクトリです。ちなみに「.(ドット)」を用いて表現することもできます。

# カレントディレクトリへ移動(現在位置から現在位置へ移動、つまりそのまま)
$ cd .

ホームディレクトリ

ホームディレクトリとは、ログインした際に、最初に移動するディレクトリを指します。通常は、ユーザー作成時にユーザーと同一名が付与されます。「~(チルダ)」を用いて表現することもできます。

# ホームディレクトリへ移動
$ cd ~

ここでいうホームディレクトリとは、「/home」の事ではありません。自身のログイン時に最初に移動するディレクトリです。

親ディレクトリ

親ディレクトリとは、特定のディレクトリから見て、一つ上(上層)にあるディレクトリを指します。「..(ドット*2)」を用いて、用いて表現することもできます。

# ひとつ上の階層(親ディレクトリ)へ移動
$ cd ..
# 二つ上の階層(親の親ディレクトリ)へ移動
$ cd ../..

サブディレクトリ

サブディレクトリとは、特定のディレクトリから見て、下位(下層)にあるディレクトリを指します。

# 下位の階層へ移動
cd <サブディレクトリ名>

相対パスと絶対パス

ディレクトリを移動する際には、「相対パス」と「絶対パス」という考え方が役に立ちます。

ユーザー:geeksからディレクトリの移動イメージ

「相対パス」は、現在のディレクトリを基準にしたディレクトリの位置を示します。

例えば、現在ディレクトリが「/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

「ls -l」では見えなかった設定ファイル(隠しファイル群)が「ls -la」では表示されている。

ディレクトリを移動「cd」

「cd」コマンドは、現在ディレクトリを位置を変更するコマンドです。「cd」コマンドは非常に使用頻度の多いコマンドです。

コマンドの書式

cd ディレクトリ

現在の自分のディレクトリの場所がどこになっているのかを確認するためには「pwd」と入力します。現在のユーザーのホームディレクトリに移動したいときには、「cd」だけ、もしくは、「cd ~」(チルダ)を入力します。ちなみに現在のディレクトリを表す記号は「.(ドット)」、一つ上の階層へ上がるには「..(ドット2つ)」で表します。

# cd /home
# cd ~

下記は「cd」の実行例です。ここでは、一度「/home」へ移動後「pwd」コマンドでカレントディレクトリを確認、その後「cd ~」(チルダ)を使ってホームディレクトリへ戻ります。

カレントパスの表示「pwd

「pwd」コマンドは、カレントディレクトリの名称を表示するコマンドです。一般的には前述の「cd」コマンドと組み合わせて使用されます。

コマンドの書式

pwd[オプション]

コマンドの主なオプション

  • -P:物理的なディレクトリ名を表示する
  • -L:論理的なディレクトリ名を表示する(デフォルト)

下記は「pwd」の実行例です。

# pwd

カレントディレクトリのパスが表示されまています。

ディレクトリを作成する「mkdir

「mkdir」コマンドは、ディレクトリを新規作成するコマンドです。

コマンドの書式

mkdir[オプション] ディレクトリ

コマンドの主なオプション

  • -m(--mode):作成するディレクトリのパーミッションを設定する
  • -p(--parents):必要に応じて親ディレクトリも作成する
  • -v(--verbose):経過を表示する

下記コマンドを実行することにより、カレントディレクトリに「test01」ディレクトリを作成できます。作成できたことを確認するためには、前述した「ls」コマンドを実行してみましょう。「test01」と表示されているはずです。

# mkdir -m 777 test01

ディレクトリ「test01」を パーミッション「777」で作成しました。

なお、次の「-p」オプションを使うとこにより、親ディレクトリ「parent」と、そのなかに含まれるディレクトリ「test02」を同時に作成することが出来ます。

通常「mkdir」コマンドでは、存在しないディレクトリの配下へサブディレクトリを作成することは出来ません。

「-p」オプションを使用することで、必要に応じてディレクトリの作成及び、サブディレクトリの作成を同時に行うことができます。

# mkdir -p parent/test02

実際に上記コマンドをコンソール上で実行してみます。

親ディレクトリ「parent」と、そのなかに含まれるディレクトリ「test02」を同時に作成しました。

ディレクトリを削除する「rmdir

「rmdir」コマンドを用いることにより、ディレクトリを削除することができます。ただし、削除できるのは中身が空のディレクトリのみです。

コマンドの書式

rmdir[オプション] ディレクトリ

コマンドの主なオプション

  • -p(--parents):必要に応じて親ディレクトリも削除する
  • -v(--verbose):経過を表示する

下記コマンドを実行することにより、親ディレクトリ「parent」と、そのなかに含まれるディレクトリ「test02」を削除できます。

# rmdir -p parent/test02


 「rmdir」コマンドでは、削除対象のディレクトリ内が空でなければ削除はできません。
  中のファイルごと削除したい場合は、rmコマンドを使用します。

ディレクトリを行き来する「pushd, popd

「pushd, popd」コマンドは、「ディレクトリスタック」を使い、複数のディレクトリの行き来することが出来るコマンドです。

通常、ディレクトリを行き来する際には「cd」コマンドを用いますが、ディレクトリ階層が複雑な箇所を行ったり来たりする場合、パスを打つ手間が大きくなってしまいます。その場合、パスを「ディレクトリスタック」に積み、ショートカットのようにディレクトリを簡単に行き来できる方法があります。

  • pushd
    「ディレクトリスタック」へディレクトリパスを保存するコマンドです。さらにカレントディレクトリをそのディレクトリに変更します。
  • popd
    「ディレクトリスタック」からディレクトリパスを取り出すコマンドです。カレントディレクトリを最後に保存した場所に変更し、ディレクトリスタックから登録を削除します。
「pushd」コマンドで交互移動するイメージ。

コマンドの書式

pushd[オプション] または ディレクトリ
popd [オプション]

pushdコマンドの主なオプション

  • +番号:「+3」でディレクトリスタックの左から4番目が先頭になるように保存内容をローテートして、先頭になったディレクトリをカレントディレクトリに変更する
  • -番号:同様に右から数えてローテート後、カレントディレクトリを変更する
  • -n:スタックの操作のみを実行する。カレントディレクトリは変更しない

popdコマンドの主なオプション

  • +番号:「+3」でディレクトリスタックの左から4番目を削除しその場所をカレントディレクトリとする
  • -番号:右から数えて削除後、その場所に変更する
  • -n:スタックからの削除のみを実行、カレントディレクトリは変更しない

前提条件として、「/root/scrpts/bin」と「/root/scripts/log」というディレクトリを頻繁に行き来するケースを想定します。そして、カレントディレクトリは「/root/scripts/bin」とします。

pushd +[n]で「ディレクトリスタック」内の登録パス情報をローテートすることが出来ます。交互の飛び先を変更する場合に操作します。

まとめ

この記事では、Linuxを扱う上で必須となるディレクトリ操作コマンドをご紹介させていただきました。

ディレクトリの操作コマンドは、「ls」コマンド、「cd」コマンドなどと組み合わせで使用することが基本になります。コマンド操作によってディレクトリなどの移動ができれば、まずはCUIでのディレクトリ操作の第一歩といえるでしょう。

よく読まれている記事

1

Shellとは? Shellとは、人間の理解できる言葉を機会へ伝えるプログラムです。 Linux環境でコマンドプロンプト画面を開いているとき、常にShellは起動している状態です。 「Shell」とは ...

2

Linuxは主にサーバー用として利用されるOSです。大規模な基幹システムの開発者、ロボットや家電開発等の組み込み系エンジニア、ネットワーク機器やデータベースに携わるインフラエンジニアは触れることが多い ...

3

プログラミング言語を習得しようと思った時、必ずと言っていいほど候補として挙げられるのが「Java」というプログラミング言語です。 「Java」は、現在日本で最も使われている言語であり、非常に人気のある ...

4

この記事は、Linuxについて勉強している初心者の方向けに「Shellスクリプト」について解説します。最後まで読んで頂けましたら、Shellスクリプトはどのような役割を担っているのか?を理解出来るよう ...

-Linux の基礎知識