慣れるまではなかなか大変なLinuxのディレクトリの扱い方を紹介します。 因みにlinux、Linuxではディレクトリと呼びます。 Windowsも以前はディレクトリと言われていましたが、昨今はフォルダと言われています。 どちらも呼び方が異なるだけで同じ意味です。
ディレクトリとは (directory)
Windowsで言うフォルダのことです。
Linuxのディレクトリ
Linuxのディレクトリ左の図の様な構造をしています。 今回で重要なディレクトリは赤枠で囲んだルートディレクトリとホームディレクトリです。 Linuxを使う上で他のディレクトリも大事ですが、混乱を避けるために、ここではルートディレクトリとホームディレクトリを中心に説明します。
一番上の『/』の部分をルートディレクトリといいます。
/homeの下に/user_nameである、
/home/user_nameがホームディレクトリです。 私の場合だと、/home/ichiriとなります。 Raspberry Piの初期設定だと、/home/piとなっています。
その他のディレクトリは『Linuxのディレクトリ一覧』をご覧ください。
ルートディレクトリ 『/』
ルートとは根源の意味で、『/』のルートディレクトリが一番上のディレクトリです。 Linuxにはルートというと、ルートディレクトリとルートユーザー『root』の2種類があります。 ルートユーザー『root』はichiriやpiと異なり、全ての権限を持つ総管理者となります。 『/』ルートディレクトリなのかルートユーザーを示す『root』なのかは文脈で読み取らないといけません。 以下の様にすると、ルートディレクトリに移動出来ます。 *例外 $マークのコマンドプロンプトの左の青文字の 『~』はホームディレクトリを示します。 そこで、cd(Change Directory)で『/』とすると、青文字が『/』となりました。 ルートディレクトリにいるということです。 その後で、homeとすると、青文字がルートディレクトリ『/』の下の『/home』ディレクトリに変わりました。
それとは別に『/root』ディレクトリもありますが、これはrootユーザーのホームディレクトリです。
ホームディレクトリ 『~』
正確にはユーザーホームディレクトリと呼びます。『/home』もホームディレクトリと呼ぶのでややこしいです。 もし、明確に分ける時は、ichiriのホームディレクトリとか、piのホームディレクトリとか、『/home』の事はスラッシュホームディレクトリとか呼んで区別します。 ここではユーザーホームディレクトリをホームディレクトリと呼ぶことにします。
ホームディレクトリは『~』で表されます。 Linuxを使っていけば『~』がいかに便利かlinux分ってきますが、要は一文字で『/home/ichiri』を表せるので非常に便利なのです。
ユーザーがログインすると、まずこのディレクトリに来ます。 例えばichiriでログインすると、/home/ichiriに入り『~$』となります。『pwd』コマンドで現在いるディレクトリを表示するとちゃんと『/home/ichiri』にいる事がわかります。
また、LinuxもWindows同様ログイン出来るichiriやpiのようにユーザーを複数作れるのですが、ログインしたユーザー名が異なっていても、『~』を使うと、『/home/ログインしたユーザー名』のディレクトリを参照したり移動したりできます。
ホームディレクトリは、各ユーザーごとのデータを保存するようになっています。 アプリケーションや設定等もユーザーごとに保存されます。 その為、各ユーザーホームディレクトリの下に、Windows同様にDocumentsやDownloads等が存在します。(uBuntu、Rasbian、CentOS等の既存のDistributionでなく、組込。Linuxの場合は自分で作らなければDocuments等のディレクトリは存在しません。)があります。ホームディレクトリは、各ユーザーごとのデータを保存するようになっています。 アプリケーションや設定等もユーザーごとに保存されます。 その為、各ユーザーホームディレクトリの下に、Windows同様にDocumentsやDownloads等が存在します。(uBuntu、Rasbian、CentOS等の既存のDistributionでなく、組込Linuxの場合は自分で作らなければDocuments等のディレクトリは存在しません。)
カレントディレクトリ
これは簡単で、今いるディレクトリの事です。 『pwd』で現在いるディレクトリのフルパス(全階層のディレクトリ名)が省略なしで表示されます。
- 1行目は『~』(/home/ichiri)にいますが、cd BBB_Workspaceでひとつ下の/home/ichiri/BBB_Workspaceに移動しています。
- そこから、3行目にcd /で『/』ルートディレクトリに移動しています。
- 2行目のカレントディレクトリは、/home/ichiri/BBB_Workspaceで
- 4行目のカレントディレクトリは、/ ルートディレクトリにいます。
絶対パス、相対パス
パス(PATH)とはディレクトリの場所を指します。 例えば、/home/ichiriは、ユーザー名ichiriのホームディレクトリのパスです。 BBB_WorkspaceディレクトリがあるPATHは、/home/ichiri/BBB_Workspaceです。 ルートディレクトリのPATHは『/』です。 PATHというのは、通常ソフトやライブラリ等を紐付ける道を示すのでPATHとなっていると思います。
絶対パス
絶対パスは、ルートディレクトリから記述せねばなりません。 例えば、/home/ichiri/BBB_Workspaceと記述するのは絶対パスです。 しなければなりません絶対パスは、ルートディレクトリから記述せねばなりません。 例えば、/home/ichiri/BBB_Workspaceと記述するのは絶対パスです。
相対パス 『./』 カレントディレクトリ
しかし、今いるディレクトリ(カレントディレクトリ)が『~』(/home/ichiri)の場合、以下の様にすると/home/ichiri/BBB_Workspaceに移動できます。
- 1行目、5行目、9行目はどれもホーム『~』にいます。
- 1行目はルートからの全てのディレクトリを絶対パスで指定して、/home/ichiri/BBB_Workspaceに移動しています。
- 5行目は、『./』を使い、BBB_Workspaceだけをしていして、/home/ichiri/BBB_Workspaceに移動しています。 この『.』はカレントディレクトリを示す文字です。 カレントディレクトリは『~』(/home/ichiri)なので、./BBB_Workspaceは、/home/ichiri/BBB_Workspaceとなります。 この『./』部分が相対パスになります。 ルートから全てのディレクトリを記述せずに、今自分がいるカレントディレクトリを起点としてBBB_Workspaceを指しす相対パスになります。(5行目の最後の『/』はあってもなくても構いません)
- 9行目は、BBB_Workspaceの前に何もついていませんが、Linuxの決まりごととして、何もつけなければ、カレントディレクトリという事になります。 つまり『./』と同じですね。
これくらいの階層であれば、全部絶対パスで指定しても問題ないですが、下のように階層が深くなると移動やディレクトリの指定が絶対パスだと大変です。
また、ソフトウェアを開発してユーザーのLinuxにインストールしてもらう時、インストール先がホームディレクトリの下にあると、ユーザー名が何かわからないので、絶対パスだとそのソフトから、子ディレクトリにあるライブラリを指定できなくなります。 なので、相対パスは必ず必要なのです。
- 次の様に、簡単にカレントディレクトリから2つ下のディレクトリに移動出来ます。
- 1行目と3行目は同じ意味です。
- しかし5行目は『.』がないだけですが、大きな違いです。 これは絶対パスで指定しているので、そもそもルートディレクトリのすぐ下に/BBB_Workspaceがないといけないのですが、そのディレクトリはルートディレクトリの直下にないので、No such …. directoryとエラーになって移動していません。
相対パス『..』 一つ上
相対パスで『./』はカレントディレクトリを指しますが、『../』は一つ上のディレクトリを指します。 『../../』は2つ上のディレクトリを指します。 『cd ..』で一つ上のディレクトリに移動します。『cd ../』も同じです。 『cd ../..』と『cd ../../』は同じ意味で、2つ上のディレクトリに移動します。 この際、cdの後には必ず半角スペースが必要です。
全角スペースが入ると下の様にエラーになります。 これはLinuxのコマンドラインは全て半角英数字(ASCII文字)で構文解読しているため3バイトコードの日本語の全角文字に対応していないからです。 多分対応出来ると思いますが、解読に時間がかかり実行速度が遅くなるのでやらないでしょうね。
以下のようにすると、一つ上に移動して、その下のbusybox-1.35.0ディレクトリに移動すると記述出来ます。 相対パスの『../busybox-1.35.0』で指定すれば、絶対パスで『/home/ichiri/BBB_Workspace/Downloads/busybox-1.35.0』とするより簡単で早く間違いも少なく指定することが出来るのです。
隠しディレクトリ、隠しファイル
Windowsでも最近Linuxの形式が取り入れられていますが、ファイルやディレクトリの前に『.』が付くのが隠しファイルや隠しディレクトリです。 lsコマンドで見てもtotal 0とでます。 ls -laの『a』を付けると、隠しファイルの.ichiriと、自分のディレクトリを表す『.』と、親ディレクトリを表す『..』が表示されます。 何故total 8かは『.』カレントディレクトリの割り当てられた、1ブロックを512バしなければなりませんイトのブロック数だそうです。 しかし、.ichiriを23バイトのファイルにしたら、total12となりました。 なので真相は分っていません。
ssh通信をすると、秘密鍵やらなんやらfingerprint等が書き込まれる隠しディレクトリがホームディレクトリの下に出来ます。 ~/.ssh/ これは、/home/ichiri/.ssh/のことです。 因みに、最後の『/』はなくても構いませんが、末尾に『/』があると必ずディレクトリです。 『/』がないとそれはファイルかディレクトリのどちらかで文脈で判断しなければなりません。
超重要
相対パスは必ず必要になりますが、相対パスを指定する際、間違って絶対パスを指定してファイルなどを消すとシステムが破壊される可能性があるので、十分気を付けてくださいね。 ルート権限やsudo権限(Super User Do:スーパーユーザーとして実行)をすると重要なファイルも消せてしまいます。 そのファイルは復元できません。 なので以下のような間違いはしlinuxないよう絶対パスと相対パスの使い方の十分慣れることと、常に何処にいるのかを確認して実行すること。(特にsudoでの実行時)
以下の場合は、ichiriのホームディレクトリ下に~/etcディレクトリを作りました。 ichiri権限ではディレクトリを作れないので、sudo権限で作りました。 cd etcはcd ./etcと同じなので、ichiriホームディレクトリ下に移動します。 しかし、cd /etcだとルート直下の/etcディレクトリに移動します。 そこでファイルを消してしまうとアプリが動かなくなったりするので、ホームディレクトリ以下以外のディレクトリに移動する時は十分注意して操作をする必要があります。
Linuxはいろんな機能があり、サーバーなどにも適しているのですが、いろいろ覚えないことが沢山あり最初は大変ですが、慣れてしまえばそれほど難しくありません。 使い続けると自然と慣れるのでいろいろ使ってみることだと思います。
コメント