Yanonoblog!

こつこつと

Linuxのファイルとディレクトリの概要 & 関連コマンド

はじめに

多少実践的にも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ディレクトリ構造

以下は一般的な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を実行してファイルの中身がターミナルエミュレーターで表示されます。

image

/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

/usrUnix 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では「ストレージ管理」機能が提供されています。

  1. Apple メニュー」から「この Macについて」を選択
  2. 「ストレージ」をクリック
  3. 「管理」をクリック
  4. システムがストレージをスキャンして、ファイルサイズや使用状況を表示
  5. 各カテゴリーの項目をクリックして、不要なファイルを選択し、「削除」をクリック

など..

少し脱線しましたがディレクトリの説明は以上です。

パスとは

/などを利用してファイルの道筋を表すものです。

絶対パス

絶対パスは、ファイルやディレクトリの場所をルートディレクトリから完全なパスで指定する方法です。

ルートディレクトリとは、ファイルシステムの階層構造の最上位にあるディレクトリで、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です♪

https://runteq.jp/r/ohtFwbjW

ご不明な点ありましたらお気軽にコメントか、TwitterのDMでお答えします♪

https://twitter.com/outputky

参考

  • 新しいLinuxの教科書 - Chapter05