Linuxのファイルとディレクトリの概要 & 関連コマンド
はじめに
多少実践的にもLinux使えるようになりたいと思い書籍「新しいLinuxの教科書」を読み進めています。
本記事では「新しいLinuxの教科書」で学んだ内容と別途気になって調べた内容や知識も含めアウトプットしていきます。
前回の記事の続きとなっております。
Linuxはシステム全体がファイルで構成されている
Linuxで扱う情報は、ディレクトリ、ファイル、およびデバイスファイルなど、すべてがファイルとして扱われており
、文書・画像・プログラムもそのうちに含まれます。
また、ハードディスクやキーボード、プリンタなどの入出力装置もファイルとして扱われています。
ハードディスクには「/dev/sda」という特別なファイル名が割り当てられています。
このファイルに対して書き込みを行うと、実際にはハードディスクにデータが書き込まれます。
同様に、キーボード入力は「/dev/input/eventX」というファイルに割り当てられ、プリンタ出力は「/dev/lpX」というファイルに割り当てられます。
これらのファイルには、それぞれ特別なファイル名が割り当てられており、通常のファイルと同じように扱うことができます。
ディレクトリとは
扱うファイルが増えてくるとファイルを種類ごとに分類できると便利です。そのような場合にはディレクトリ(フォルダ)で管理します。
例として、以下のようにディレクトリ構造を表すことができます。
├── documents │ ├── report1.doc │ ├── report2.doc │ └── memo.txt ├── images │ ├── photo1.jpg │ ├── photo2.jpg │ ├── background.png │ └── icon.png └── programs ├── program1.exe ├── program2.exe └── readme.txt
Linuxのディレクトリ構造
コメントアウトでは、各ディレクトリの簡単な説明を記載しています。
/ (ルートディレクトリ) ├── bin/ # 一般ユーザーおよびシステム管理者が使う重要なコマンドが格納されるディレクトリ ├── boot/ # ブートローダのファイルやカーネルが格納されるディレクトリ ├── dev/ # デバイスファイルが格納されるディレクトリ ├── etc/ # システムの設定ファイルが格納されるディレクトリ ├── home/ # ユーザーホームディレクトリが格納されるディレクトリ │ ├── hoge/ # ユーザーhogeのホームディレクトリ │ └── fuga/ # ユーザーfugaのホームディレクトリ ├── lib/ # システムに必要な共有ライブラリが格納されるディレクトリ ├── media/ # 挿入されたメディア(CD-ROM、USBメモリなど)が自動的にマウントされるディレクトリ ├── mnt/ # 一時的にファイルシステムをマウントするためのディレクトリ ├── opt/ # サードパーティー製アプリケーションが格納されるディレクトリ ├── proc/ # カーネルがプロセス情報を提供するためのディレクトリ ├── root/ # rootユーザーのホームディレクトリ ├── run/ # 実行中のプログラムのPIDファイルやソケットファイルが格納されるディレクトリ ├── sbin/ # rootユーザーが使うシステム管理者向けの重要なコマンドが格納されるディレクトリ ├── srv/ # システムが提供するサービス(Webサーバー、FTPサーバーなど)のデータが格納されるディレクトリ ├── sys/ # カーネルパラメータを参照するためのディレクトリ ├── tmp/ # 一時的なファイルが格納されるディレクトリ ├── usr/ # ユーザープログラムが格納されるディレクトリ │ ├── bin/ # 一般ユーザーが実行可能なプログラムが格納される │ ├── lib/ # 共有ライブラリが格納される │ └── local/ # ローカル管理者が独自にインストールしたプログラムやライブラリが格納される └── var/ # キャッシュファイルが格納される
上記の中でも重要なディレクトリをまとめます。
/bin
一般ユーザーおよびシステム管理者が使うコマンドの実行ファイルを置くためのディレクトリ
です。
実行ファイルはLinuxの様々な場所に配置されていますが、/binはその中でも特にLinuxシステムの動作に最低限必要な重要度の高いコマンドを格納しています。
例)
cat、chmod、cp、echo、grep、ls、mkdir、mv、ps、rm、rmdir、touch
これらのコマンドは、基本的なシステム管理タスクやファイル操作を実行するために必要なものが含まれています。
以下のようにしてcatコマンドで/binのコマンドのファイル群を覗くこともできます。
Tabの補完機能で選択してエンターを押すとcatを実行してファイルの中身がターミナルエミュレーターで表示されます。
/dev
デバイスファイルとはキーボードやマウス、USBストレージ、ハードディスクなどのハードウェアをファイルとして扱えるようにされた特殊なファイル
です。
devに含まれている様々な特殊なファイルを通じて、Linuxシステムは様々なデバイスにアクセスできます。
これらのファイルを操作することにより、Linuxシステムはデバイスにデータを書き込み、デバイスからデータを読み取ることができます。
ディレクトリ入力 + Tabキーで/dev
のファイル群を覗いてみました!catで中身も見れます♪
~/workspace ❯❯❯ cat /dev/ -- file -- afsc_type5% ptyr7% rdisk1% ttys020% auditpipe% ptyr8% rdisk1s1% ttys021% auditsessions% ptyr9% rdisk1s2% ttys022% autofs% ptyra% rdisk1s3% ttys023% ...
etc
設定ファイルを置くためのディレクトリです。
Linuxで動作するシステム全体の設定ファイル
や各種アプリケーションの設定ファイル
などのconfigファイルはこのディレクトリに配置して使用されます。
Linux自体の設定に関わるファイルもこのディレクトリにありますので、Linuxを運用、管理する上で非常に重要なディレクトリです。
ディレクトリ入力 + Tabキーで/etc
のファイル群を覗いてみました!catで中身も見れます♪
~/workspace ❯❯❯ cat /etc/ ✘ 1 -- file -- afpovertcp.cfg krb5.keytab profile aliases@ localtime@ protocols apache2/ mail.rc rc.common ... com.apple.screensharing.agent.launchd nfs.conf shells csh.login ntp.conf ssh/ csh.logout ntp_opendirectory.conf ssl/ ...
上記を見るとSSHサーバーの設定を行うsshや、SSL証明書の管理で使用するsslのディレクトリも配置されていることがわかります!
また、Linuxシステムのユーザーアカウントのログイン、ログアウトに必要なアカウントの情報も含まれていますね。
/home
ユーザーごとに割り当てられるホームディレクトリが配置されるディレクトリで、Linuxユーザーのユーザー名
が/homeディレクトリの配下
に割り当てられる個人用ディレクトリとなります。
~/workspace ❯❯❯ cat /home/ ✘ 1 -- no matches found --
/home/ディレクトリは一般ユーザーがアクセスできない
ため、一般ユーザーで実行すると"No such file or directory"のエラーが表示されます。
sudoなどで管理者権限を持ったユーザーで実行することで、その中身を確認できます。例えば、以下のコマンドを実行するとユーザー名の一覧が表示されます。
sudo ls /home/
/tmp
一時的なファイル
(テンポラリファイル)を置くためのディレクトリです。
アプリケーションの実行中に作業途中の結果などを一時的なファイルとして保存する際にはこのディレクトリの下にファイルが作成されます。
システム再起動時に自動的に削除されます
。また、定期的に不要なファイルを手動で削除することもできます。
/tmpディレクトリは一時的なファイルを置くための場所であるため、重要なデータを保存することは避けるべきです。
/usr
/usr
はUnix System Resources(Unixシステムリソース)の略で、Linuxシステムのユーザー向けアプリケーション、ライブラリ、ドキュメントなどの多くのリソースを含む規模の大きなディレクトリです。
userの略かと思っていました。
/usr
には、/bin
や/sbin
に置かれているような重要なシステムコマンド以外の多くのユーティリティが含まれています。
/usr
はシステムのインストール時に一度だけ書き込まれ、その後は変更されません。
そのため、ユーザーがインストールしたアプリケーションのデータは通常/usr/local
に保存されます。
/var
Linuxシステムが稼働している間に変化するファイル(ログファイル、キャッシュファイル、メールなど)を格納するためのディレクトリです。
/varは、ディスク容量が不足するとシステムの動作に支障をきたす
可能性があります。システム管理者は、定期的に/varの容量をチェック
し、不要なファイルを削除
してスペースを確保する必要があります。
ちなみにdf -hコマンドを使用すると以下のように実際の使用しているディスク容量や空き容量、使用率などがわかります。
~/workspace ❯❯❯ df -h ✘ 1 Filesystem Size Used Avail Capacity iused ifree %iused Mounted on /dev/disk1s5s1 932Gi 22Gi 669Gi 4% 502047 4293851909 0% / devfs 216Ki 216Ki 0Bi 100% 746 0 100% /dev /dev/disk1s4 932Gi 17Gi 669Gi 3% 17 7019557920 0% /System/Volumes/VM /dev/disk1s2 932Gi 356Mi 669Gi 1% 1343 7019557920 0% /System/Volumes/Preboot /dev/disk1s6 932Gi 103Mi 669Gi 1% 453 7019557920 0% /System/Volumes/Update /dev/disk1s1 932Gi 222Gi 669Gi 25% 3118083 7019557920 0% /System/Volumes/Data map auto_home 0Bi 0Bi 0Bi 100% 0 0 100% /System/Volumes/Data/home /Applications/Docker.app 932Gi 167Gi 741Gi 19% 2746781 7767437560 0% /private/var/folders/7y/p20x6q590279n2sl0cdbl8b40000gn/T/AppTranslocation/27A45680-0A74-4A74-B477-143F023A0989
ちなみにGUIからでも管理は可能です。
macOSでは「ストレージ管理」機能が提供されています。
- 「Apple メニュー」から「この Macについて」を選択
- 「ストレージ」をクリック
- 「管理」をクリック
- システムがストレージをスキャンして、ファイルサイズや使用状況を表示
- 各カテゴリーの項目をクリックして、不要なファイルを選択し、「削除」をクリック
など..
少し脱線しましたがディレクトリの説明は以上です。
パスとは
/などを利用してファイルの道筋を表すものです。
絶対パス
絶対パスは、ファイルやディレクトリの場所をルートディレクトリ
から完全なパスで指定する方法です。
ルートディレクトリとは、ファイルシステムの階層構造の最上位にあるディレクトリ
で、Linuxでは「/」(スラッシュ)で表されます。
絶対パスでは、ルートディレクトリから指定したディレクトリやファイルまでの、すべてのディレクトリを「/」で区切ったパスを指定します。
例えば、/home/user/Documents/という絶対パスは、ルートディレクトリの下にある「home」ディレクトリ、その下にある「user」ディレクトリ、その下にある「Documents」というディレクトリを指します。
相対パス
相対パスとは、現在の作業ディレクトリ
から目的のファイルやディレクトリまでのパスを表現する方法です。
相対パスは、ドメイン名やルートディレクトリから始まる絶対パスとは異なり、現在の作業ディレクトリを起点に、その位置に相対的な位置関係を示します。
ディレクトリ移動に関するlinuxコマンド
コマンド | 解説 |
---|---|
pwd | 現在の作業ディレクトリの絶対パスを表示するコマンド。 |
cd | 作業ディレクトリを変更するコマンド。引数として変更したいディレクトリの相対パスまたは絶対パスを指定する。引数を省略すると、ホームディレクトリに移動する。 |
ls | 現在の作業ディレクトリに存在するファイルやディレクトリの一覧を表示するコマンド。-lオプションを付けると、詳細情報(パーミッション、所有者、サイズ、更新日時など)も表示される。-aオプションを付けると、隠しファイルも含めて表示される。 |
pwdで現在のディレクトリを確認し、lsで現在の作業ディレクトリに存在するファイルやディレクトリの一覧を表示する例です。
~/workspace ❯❯❯ pwd ✘ 1 /Users/yanokouhei/workspace ~/workspace ❯❯❯ ls /Users/yano/workspace/ -- file -- gigooo/ goenbako/ portfolio/ runteq/ 整理/
引数をつけずにcdコマンドを実行すると、ホームディレクトリに戻ることができます。
~/workspace ❯❯❯ cd ~ ❯❯❯
チルダ(~)を利用する方法もあります。
以下はチルダを使ってホームディレクトリから絶対パスを利用して直接別の配下のディレクトリに移動しています。
~/workspace ❯❯❯ cd ~ ~ ❯❯❯ cd /Users/yano/workspace ~/workspace ❯❯❯ cd ~/workspace/goenbako ~/w/goenbako ❯❯❯
lsコマンドと応用
lsコマンドを使うとディレクトリ内のファイルなどを表示させることができます。
~/w/goenbako ❯❯❯ ls -- file -- Gemfile app/ config.ru node_modules/ spec/ yarn-error.log Gemfile.lock babel.config.js db/ package.json storage/ yarn.lock README.md bin/ lib/ postcss.config.js tmp/ Rakefile config/ log/ public/ vendor/
パス名展開
パス名展開とは、シェルが指定されたパターンにマッチするファイル名を自動的に展開する機能です。
これにより、コマンドライン引数の入力を効率的に行うことができます。
パス名展開にはいろんなパターンがあります。
ワイルドカード(*)
0文字以上の任意の文字列にマッチします。
以下は/goenbakoのディレクトリでGemから始まるファイルに一致する一覧を表示させています。
~/w/goenbako ❯❯❯ ls Gem* Gemfile Gemfile.lock
拡張子がjsのファイルに一致する一覧を表示させることも可能です。
~/w/goenbako ❯❯❯ ls *.js babel.config.js postcss.config.js
これは便利です!
ls -l コマンド
~/w/goenbako ❯❯❯ ls -l total 1600 -rw-r--r-- 1 yano staff 2286 6 3 2022 Gemfile -rw-r--r-- 1 yano staff 12961 6 3 2022 Gemfile.lock -rw-r--r-- staff 7492 4 10 2022 README.md -rw-r--r-- 1 yano staff 227 9 6 2021 Rakefile drwxr-xr-x 15 yano staff 480 6 3 2022 app -rw-r--r-- 1 yano staff 1716 12 1 2021 babel.config.js drwxr-xr-x 10 yano staff 320 11 26 2021 bin drwxr-xr-x 22 yano staff 704 6 5 2022 config -rw-r--r-- 1 yano staff 130 9 6 2021 config.ru drwxr-xr-x 5 yano staff 160 6 5 2022 db drwxr-xr-x 4 yano staff 128 9 6 2021 lib drwxr-xr-x 7 yano staff 224 3 17 2022 log drwxr-xr-x 846 yano staff 27072 6 5 2022 node_modules -rw-r--r-- 1 yano staff 982 6 12 2022 package.json -rw-r--r-- 1 yano staff 224 9 19 2021 postcss.config.js drwxr-xr-x 14 yano staff 448 5 31 2022 public drwxr-xr-x 7 yano staff 224 3 21 2022 spec drwxr-xr-x 3 yano staff 96 12 14 2021 storage drwxr-xr-x 10 yano staff 320 6 5 2022 tmp drwxr-xr-x 3 yano staff 96 9 5 2021 vendor -rw-r--r--@ 1 yano staff 395293 12 1 2021 yarn-error.log -rw-r--r-- 1 yano staff 369503 6 12 2022 yarn.lock
項目はまとめると以下のようになります。
項目 | 解説 |
---|---|
パーミッション | ファイルやディレクトリへのアクセス権を示す記号で、所有者、グループ、その他の各権限がある |
ハードリンク数 | ファイルに対するハードリンクの数 |
所有者 | ファイルやディレクトリの所有者のユーザー名 |
グループ | ファイルやディレクトリの所属するグループ名 |
サイズ | ファイルのサイズをバイト単位で表示 |
更新日時 | ファイルが最後に更新された日時を表示 |
名前 | ファイル名やディレクトリ名を表示 |
ls -a コマンド
ls -aコマンドは、隠しファイル
や隠しディレクトリ
を含めたすべてのファイル・ディレクトリを一覧表示するためのコマンドです。通常のlsコマンドでは表示されない、.
で始まるファイルやディレクトリも表示されます。
$ ls -a . .. .bash_history .bashrc .cache .git .local .ssh file1.txt file2.txt directory1
上記の例では、.
で始まる.bash_history
や.bashrc
、.cache
、.git
、.local
、.ssh
といった隠しファイルや、directory1
という名前の隠しディレクトリも表示されています。
また、.
と..
はそれぞれ現在のディレクトリと親ディレクトリを表しています。
続く…
コメント
本記事の内容は以上になります!
書籍の続きのアウトプットも随時更新したいと思います。
プログラミングスクールのご紹介 (卒業生より)**
お世話になったプログラミングスクールであるRUNTEQです♪
ご不明な点ありましたらお気軽にコメントか、TwitterのDMでお答えします♪
参考
- 新しいLinuxの教科書 - Chapter05