86
Linuxファイルシステムを理解する - ディレクトリの謎を解く
The Linux mascot, Tux, in a filing cabinet
(画像クレジット:Pexels / OpenClipArt)

Unix / Linuxのファイルシステム階層は、OS初心者にとっては非常に難解に思えるかもしれません。私たちも最初はそうでした。しかし、この謎めいたファイルシステムは、結局のところそれほど謎めいたものではありません。ディレクトリ名に付随する説明が必要なだけです。

Linuxは優れたオペレーティングシステムです。シングルボードコンピュータからスーパーコンピュータまで、あらゆるデバイスで動作します。しかし、Windows環境から移行したユーザーにとっては、ファイルシステムが扱いにくい場合があります。Linuxは、主にValveのSteam Deckのおかげで、ゲーム用途で人気が高まっています。しかし、 Raspberry Piのようなコンピューターが、Linuxを新世代に導入しているのです。

それでは、現代のLinuxシステムによくある典型的なファイルシステムを見てみましょう。Kubuntuを使用していますが、ディレクトリ構造はRaspberry Piとデータセンターで同じです。

スワイプして水平にスクロールします

/

他のすべてのディレクトリにアクセスできるルート ディレクトリ。

ビン

システムに必要な必須コマンド(バイナリ)はここに保存されます。

ブート

ブートローダー ファイル (カーネル、grub、initrd)。

開発

デバイス ファイル (ハード ドライブ、USB デバイス) へのリンク。

ホスト固有の構成ファイル。

ユーザーのホームディレクトリ。

ライブラリ

バイナリ用のライブラリ

紛失物

ディスク操作で削除または失われたファイルが含まれます。

メディア

リムーバブルメディア(CD / DVD / USB)のマウントポイント

メートル

一時マウントポイント

オプション

アドオンアプリケーションソフトウェアパッケージ

プロセス

プロセスとカーネル用の仮想ファイルシステム。

ルートユーザーのホームディレクトリ

走る

実行時変数データ。前回の起動以降に実行中のシステムに関する情報。

sbin

必須のシステムバイナリ。

srv

Web / FTP サーバー固有のデータ。

システム

デバイス、ドライバー、カーネルの情報が含まれます。

一時

一時ファイルはここに保存されます。

ユーザー

すべてのユーザー向けのコマンドとアプリケーションが含まれています。セカンダリ階層、読み取り専用アクセス。

var

変数ファイル、つまり頻繁に変更されることが予想されるファイル。例えば、ログファイルなど。

ルート権限を取得しましたか?

UNIXファイルシステムの起点はルートディレクトリ(通常は/)です。これはシステム上のすべてのディレクトリの起点であり、通常はrootまたはsudoグループのユーザーのみがこのディレクトリに書き込み可能です。このディレクトリ内のファイルの大部分(存在する場合)は、他のユーザーには読み取り専用です。rootユーザーには独自のホームディレクトリがあり、作業に必要なファイルとディレクトリはそこにあります。

ルートディレクトリからbin(バイナリの略)へ移動します。このディレクトリには、必須コマンドが配置されています。cat 、grep、ls、lessなどのコマンドが見つかります。このディレクトリは通常、そのままにしておきます。ここにあるファイルを壊すとシステムが使用できなくなる可能性があるため、インストールは避けたいからです。

バイナリ、アプリケーション、ユーティリティ

ファイルシステムには、コマンドとアプリケーションのための場所が多数あります。

重要なコマンドやユーティリティはbinディレクトリに保存されています。このディレクトリには、ターミナルで使用するls、cp、mv などの多くのコマンドが含まれています。Ubuntuデスクトップでは、このディレクトリだけで2453個のバイナリが存在します。binディレクトリには、Linux環境を快適に動作させるために必要なものがすべて揃っています。また、システムのメンテナンスに必要なツールも含まれています。これには、シングルユーザーモード(単一のスーパーユーザーがインストールを管理するモード)で実行する際に必要なツールも含まれます。そのため、誤ったキー入力によってシステムがダウンする可能性があるため、binディレクトリは基本的にそのままにしています。

Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。

コマンドのもう一つの保存場所はsbinで、ここには絶対に必要なコマンドが配置されています。sbinの「S」はスーパーユーザー」、つまりルートユーザーまたはsudo権限を持つユーザーを指します。これらのコマンドは特権ユーザー専用であり、このディレクトリにはファイルシステム、ネットワーク、バックグラウンドサービスを操作するツールが含まれています。

ターミナルで独自のアプリケーションを使いたい場合はどうすればいいでしょうか?binや sbinにドロップするだけでいいのでしょうか?答えは「いいえ」です。これらのディレクトリはそのままにしておく必要があります。アプリケーションは他のディレクトリと干渉しないように、/usr/local/binまたは/usr/bin/に配置する必要があります。独自のアプリケーションを保存できるもう1つの場所は/opt/です。このディレクトリを使用するアプリケーションは比較的少ないです。テストマシンでは、Google Chrome、Balena's Etcher、Zoomのディレクトリが見つかりました。

謎のディレクトリ 

Linux初心者が「このディレクトリは何をするの?」と戸惑ってしまうようなディレクトリは数多くあります。まず最初に挙げられるのがetcです。「エトシー」と発音するこのetcディレクトリには、マシン固有の設定ファイルが含まれています。ここには、Common Unix Print Service(カップ)、sensors(温度)、cron(指定した時間にコマンドを実行するスケジュール)の設定​​ファイルがあります。

devディレクトリデバイスが配置されている場所です。Linuxは物理デバイスも含めすべてをファイルとして扱い、このディレクトリでデバイスを見つけます。ディスク、入力、シリアルコンソール(/dev/tty)などのデバイスはここに配置されます。私たちの経験では、Raspberry Pi Picoやその他のマイクロコントローラーなどのデバイスのUSB-シリアルインターフェースを配置するためにこのディレクトリを使用しています。

libはライブラリの略で、システムの実行に不可欠なライブラリが見つかる場所です。カーネルライブラリやその他のシステムに必要なファイルがここにあります。ライブラリはWindowsのDLLファイルと同様に動作します。

「lost+found」という謎めいた名前のディレクトリは、バスターミナルにふさわしい響きがします。しかし、このディレクトリは古くなった、あるいは不完全なデータが保存されている場所です。予期せぬ停電、エラー、バグなどが発生した後、データを再構築する必要がある場合は、fscklost+foundを併用します。

Processesの略称であるproc は、 proc ファイルシステムのマウントポイントです。このディレクトリ全体には、現在実行中のプロセスに関する情報を示すファイルが含まれています。各プロセスには番号(PID)が付けられており、top、htop、ps、bpytopなどのコマンドを実行することで識別できます。私たちは top コマンドを使って Chrome ブラウザのプロセスを特定し、PID を使用してそのプロセスにディレクトリを移動しました。proc ディレクトリを使用すると、実行中のプロセスを調査し、問題や情報を調べ、実行中のプロセスからデータを抽出することができます。

実行ディレクトリには、システム起動以降の情報が含まれています。自動実行であれユーザー実行であれ、あらゆるコマンドがここに痕跡を残します。例えば、この機能を開発する際には、画面の一部を録画するためにpeekコマンドを使用しました実行ディレクトリには、アプリデータを含む関連サブディレクトリがありました。

srv は通常、サイト固有のデータを格納するために使用されますが、特定のサービスのデータファイルを保存するために使用されます。Webページを提供する場合は、このディレクトリからCGIスクリプトを使用できます。テストシステムでは、Webサービスを実行していないため、このディレクトリは空です。

procと同様に動作するsys は、カーネルに関する情報を保存するディレクトリです。システムバス、デバイス、ファームウェアなどの一連のディレクトリに構造化されているため、procのように生の PID を見つけるのが簡単です。

tmpディレクトリには、一時ファイルとディレクトリが保存されています。これらのファイルとディレクトリは予告なく削除される可能性があるため、このディレクトリは不要になったデータのみに使用するようにしてください。tmpディレクトリの便利な使い方の一つ、インストールファイルをダウンロードする際に、それらをtmpディレクトリに保存してインストールを実行することです。こうすることで、使用後にインストールファイルをクリーンアップする必要がなくなります。

では、usrには何が含まれているのでしょうか?実は、usr はLinux ファイルシステムで最も重要なディレクトリの一つです。ここには、ユーザーランド(カーネル外で実行されるコード)がすべて存在します。/usr/bin/サブディレクトリには、日常的に使用する多くのコマンドが含まれています。さらに下位のサブディレクトリには、ユーザーランドアプリケーションのライブラリ ( /usr/lib )、フォントやアイコンなどの共有ファイル ( /usr/share )、そして/usr/src/に含まれる Linux カーネルのソースファイルが含まれています。

最後に紹介する謎めいた名前のディレクトリはvarです。このディレクトリには、定期的にサイズが変わる可能性のあるファイルが保存されます。Web サイトの提供には/var/www/ が一般的に使用されているため、Web マスターであればこのディレクトリは馴染みのあるものです。 varディレクトリは、ログ ファイル ( /var/log ) の保存場所でもあります。何か問題が発生した場合、このディレクトリを調べます。カーネル ログ、syslog、および dpkg または apt を使用してアプリケーションをインストールした詳細を記録する dpkg ログを調べることができます。実際、apt には独自のサブディレクトリ /var/log/ aptがあり、そこには term.log と history.log が含まれています。これらのファイルには、apt を使用してインストールされたアプリケーションが表示されます。この機能のためにインストールした 2 つのアプリケーション、階層をマップするtreeと、 binディレクトリの内容の一覧出力を遅くするpv を見つけました。

家ほど良い場所はない(ディレクトリ)

各ユーザーには独自のホームディレクトリがあります。これは、ドキュメント、作業、ビデオなどを保存できる場所です。通常、ユーザーはホームディレクトリのみを使用し、メインファイルシステムには入りません。アプリケーションがユーザー固有の設定を必要とする場合、いくつかの隠しディレクトリのいずれかに保存されます。「.」で始まるディレクトリは一般ユーザーからは非表示になっていますが、lsコマンドに3つの引数を指定することで表示できます。最初の引数は-lで、これによりデータがリストとして表示されます。次の引数は-hで、これにより人間が容易に理解できる値(2048MBが2GBになるなど)でデータをフォーマットします。最後の引数-aは、隠しファイルも含めすべてのファイルを表示します。

ls -lha

Linux Filesystem

(画像提供:Tom's Hardware)

Linuxファイルシステムの階層構造を表示するには、treeコマンドを使用します。ご想像のとおり、treeコマンドはファイルシステムの内容をツリー構造で一覧表示します。

1.ターミナルを開き、ソフトウェア リポジトリを更新します。

sudo apt update

2. apt パッケージ マネージャーを使用してツリーをインストールします。

sudo apt install tree

3. tree コマンドを使ってLinuxファイルシステムの構造を確認します。出力を1階層( -L 1)とディレクトリのみ(-d )に制限し、開始点をルート/に設定します。

tree -d -L 1

Linux Filesystem

(画像提供:Tom's Hardware)

詳細: Linuxでディスク使用量を確認する方法

詳細: Linuxでプロセスを強制終了する方法

詳細: Linuxでファイルを検索する方法

レス・パウンダーは、トムズ・ハードウェアのアソシエイトエディターです。クリエイティブテクノロジストとして、7年間にわたり、老若男女を問わず、教育と啓発のためのプロジェクトを手がけてきました。Raspberry Pi Foundationと協力し、教師向けトレーニングプログラム「Picademy」の執筆・提供にも携わっています。