File System

目次

  1. 概要
  2. Windowsのファイルシステム、ディレクトリ構成
  3. Linuxのファイルシステム、ディレクトリ構成
    1. root権限
    2. sudoers
    3. FHS
  4. Macのファイルシステム、ディレクトリ構成
    1. root 権限
    2. 主なディレクトリ

概要

簡単に言ってしまえば、データをファイルで管理する仕組みです。 よく”名前を付けて保存”や、”上書き保存”などをしていると思いますが、データの書き換えや内容変更がデータ自体を消すことなく行えるのは、ファイルシステムがそれらを管理してくれているからです。
それぞれのOSがどのようなファイルシステムで動作し、その上にどのようなディレクトリが構成されているかを知ることで、OSへの理解が深まります。
C言語のfopen、freadのようなプログラムでファイル操作ができるのは、動作しているPCがファイルシステムを有しているからです。
逆にほとんどのマイコンにはファイルシステムは含まれておらず、sdカードなどにデータを記載して読み込ませる、ということが出来ないのです(とはいえ最近のはけっこうできます)。

Windowsのファイルシステム、ディレクトリ構成

主にNTFSというファイルシステムを使っています。各ドライブごとにOSが定義されるため、外部記憶装置をマウントしなくても中身にアクセスできます。
そのため、外部記憶装置やssd、hddはD:E:といった名前のドライブとして扱われます。
WindowsのメインのディレクトリはC:から始まり、その下の構成は次のようになっています。
ここにはPC全体に関わる設定ファイルが含まれます。

  • Users
    ユーザーのディレクトリ。複数アカウントがあると、ここに表示される。
  • ProgramFiles
    64bitのプログラムとアプリケーションが保存される。
  • ProgramFiles(x86)
    64bit上の32bitアプリケーションが保存される。
  • Windows
    OSの本体。
    • System32 主要なシステムや実行ファイルが含まれる
    • Fonts フォント
    • Temp 一時ファイル。再起動のたびに消える

特にUsersの下のディレクトリについて、多くのアプリケーションはUsers/usernameをホームディレクトリとみなし、設定ファイルを置くことになっています。そのためusernameは英語で、かつ単純な名前がいいでしょう。Pathもアクセスしやすく使いやすいです。

  • Users/username/Document
    ファイル系はここで管理するとよい。pathとしては比較的アクセスしやすい。
  • Users/username/Desktop
    デスクトップに表示される。デスクトップはきれいな方がよい。仕事机と同じ。
  • Users/username/Downloads
    ダウンロードしたものは基本的にここに入る。ここをホームとして作業するのは非常に危険。私は定期的にすべて削除している。

基本的にC:はOSの本体に近いところで、あまりいじるのはよくないとされています。
ただし、開発者向けのソフトなどについてはPATHに追加するのが楽になるためC:直下で管理することもあるそうです。
PC全体に適用したい、または管理者権限が必要な実行ファイル系を含むアプリケーションはProgramFilesで、
その他ユーザー別管理でよく、権限を必要としない設定ファイル、ログ、キャッシュのみが必要なアプリはUsers/uname/Appdataで管理されるイメージです。 あとはUsers/uname直下に.ファイル名という形でアプリが保存されるものもあります。

  • ProgramFiles
    Git, Google, Microsoft系, Cのコンパイラ, WSL, Zip解凍
  • Appdata/Local
    Zoom, Fusion, Unity, BambooStudio
  • Users/uname直下 tex, vscode, pythonのライブラリ, anaconda, arduinoIDE

あと、Windowsの機能としてOnedriveがります。私は嫌いです。というのも、同期しないで作業してると勝手に消えるし、ドキュメントがカタカナだしローカルと2個できるし、何ならデスクトップも2個あるし、ローカルのデスクトップは反映されないし、pathは長くなるし…
というわけで、個人的にはOnedriveを切って、git管理をするのがいいんじゃないかなーと思ってます。
最悪なのはusb管理ですね。消えます。というか昔消したことがあります。最低でもPCのローカル、大事なものは何らかの方法でクラウドに上げて管理しておくことをおすすめします。

Linuxのファイルシステム、ディレクトリ構成

linux(Ubuntu)はext4というファイルシステムを使っています。Windowsとの違いとして、すべての情報をファイルとして取り扱うため、外部記憶装置との間で情報をやり取りする際は記憶装置をマウントし、/mnt/sdb1のような形にする必要がある点が挙げられます。

root権限

さて、linuxはすべてのファイルを統一的に管理するので、/を根(=ルート)としてファイルが階層的に管理されています。WindowsでいうところのC:にあたります。
よく聞く、sudo rm -rf /は、OS含めPCの全部のファイルを削除しなさいというネタコマンドで、実行するとLinuxが消し飛びます。
rootの下にはOSの動きを決定するような重要なファイルがいくつもあり、これらをいじる権限をroot権限と呼びます。常にroot権限をユーザーに与えてしまうと何をしでかすか分からないので、基本的にはユーザー権限でloginし、必要なときにrootにアクセスする権限を借りる、という方式を取ることが多いです。これがsudoコマンドです。コマンドの前にsudoと入れることで一時的にroot権限を使うことができるのです。
さて、先程sudo rm -rf /をするとlinuxが消し飛ぶ、と言いましたが、最近のlinuxはこれを禁止コマンドとして実行できないようなガードが入っています。安心ですね。というわけで次のコマンドを実行してみましょう。
sudo rm -rf / --no-preserve-root
するとあら不思議、linuxがなくなってしまいました。これが強制root権限です。使わないでください。

sudoers

linuxではだれがsudoをデフォルトで使えるか、を設定することができます。/etc/sudoersを編集することで、様々なコマンドにsudo権限を付与することが可能です。通常はroot ALL=(ALL:ALL) ALLと書いてあり、rootにroot権限を与えるとだけ書いてあります。sudo visudoというコマンドでこれを編集することで、好きなコマンドにroot権限を付与することができます。

FHS

Filesystem Hierarchy Standard。linuxの全ディストリビューションで、ディレクトリ構成に関する統一化が図られています。現在でも多くの差異はあるため、これは1つの指標程度に捉えてください。

  • /bin(Binaries)
    rootと一般ユーザーが使うことのできる基本的なコマンドが格納されている。
    python、which、apt、ls、rm、mkdir…
    例えばls -l aptとすると、
    -rwxr-xr-x 1 root root 18824 Sep 5 2024 apt
    このような出力が得られる。

  • /boot
    システム起動時に必要なファイルが格納してある。BIOSの影響を受けないためにここにいるが、いじることはない。

  • /dev(Device)
    ハードウェアや周辺機器はここに接続される。例えばマイコンをPCにつなぎ、シリアルで接続すると、開かれるシリアルポートはたいてい/dev/tty/ACM0/dev/tty/USB0のような名前になる。
    この階層の設計思想はUnixを受け継いでおり、デバイスはファイルと同じようにOpen,Read,Write,Closeができるような扱いがされる。

  • /etc(Etcetra)
    システムの設定ファイル。ここにあるファイルを変更することでOSのシステム周りをいじることができる。
    • /etc/systemd
    • /etc/udev
      udev.confというファイルがある。ここにコンフィグを追加すると、デバイスが接続した際のOSの挙動を変更することができる。
    • /etc/ssh
      外部からのssh接続を可能にする。
    • /etc/netplan yamlファイルで接続するネットワークの設定や自分のipアドレスの設定を書くことができる。
    • /etc/dpkg
      追加したパッケージの情報などが格納される。基本的には触らない。
      ここで扱われるものはpackage(.debファイル)で、ソフトウェアに関わるところ。つまりOS側のパッケージ。
    • /etc/dkms Dynemic kernel module Support
      dpkgとは違いkernelに依存するモジュールで、どれを使うかが書いてある。kernelのupdateの際に参照され、必要なパッケージがダウンロードされるようになっている。
    • /etc/ros/rosdep/sources.list.d これはrosに関するもの。updateが失敗するときは結構ここに問題がある。
  • /home
    各ユーザーのホームディレクトリ。WindowsではUsersとなっている。
    • /home/uname
      基本的にファイル系はここにまとめておくとよい。
  • /lib(library)
    システムの起動時に必要なものや、bin、sbinのコマンド実行に必要なライブラリが格納されている。触らない。

  • /mnt(mount)
    外部のファイルシステムを一時的にマウントする際に使う。usbやsdカードをフォーマットするときなどはここにマウントする。

  • /opt(optional)
    外部パッケージが入るところ。rosはここにいる。

  • /proc(Process)
    kernel(OSの構成参照)内部の情報にアクセスするための仮想階層。 CPU情報やメモリの使用状況、ネットワーク情報が参照できる。

  • /root
    システム管理者のホーム。homeが壊れてもここで作業が続行できる、ということらしい。

  • /sbin(System Binary)
    OSが動作するために必要なコマンドが格納されている。ここにあるコマンドはすべて実行にsudo権限が必要
    netplan、arp、dkms…

  • /tmp(Temporary)
    一時的に使用するファイルを格納する。再起動時にリセットされる。

  • /usr
    全ユーザーが使うものが格納されている。ユーザー単位のrootのようなもの。bin,sbin,libの本体はじつはここ。
    • /usr/bin
      /binの本体。
      ~$ ls -ld /bin
      lrwxrwxrwx 1 root root 7 Mar 29  2024 /bin -> usr/bin
      

      というように、/binは単に/usr/binへのリンクに過ぎない。ではなぜ/binが存在しているかと言うと、usrがない場合にも最低限のコマンドは実行できるようにするためである。

  • /var(Variable)
    システム運用中のログファイルが格納される。
    時々プロセスがlocされています。というエラーが出るが、これはプロセスが正常終了できず次に行けないというエラーであり、このときに/var/lock/hogehoge.locというファイルを消すとlockが解除される。

Macのファイルシステム、ディレクトリ構成

ちょっとわかんないんでAIに書かせました。根っこはUnixなので、linux見ればだいたいわかるんじゃないかなーと思ってます。Macがわかる人、ぜひ書き直してください。

macOS は APFS (Apple File System) を使用し、Unix 系 OS と同様に / をルートとして管理します。
外部ドライブは /Volumes 配下にマウントされます。

root 権限

  • root ユーザーが OS の重要操作を行う
  • 必要に応じて sudo コマンドで一時的に権限を借りる

主なディレクトリ

  • /Applications
    アプリケーションを格納(Windows の Program Files 相当)

  • /System
    OS 本体のシステムファイル

  • /Library
    システム全体で使うライブラリや設定ファイル

  • /usr
    全ユーザー共通で使うコマンド・ライブラリ
    • /usr/bin/usr/lib/usr/sbin
  • /bin
    基本的なコマンド

  • /tmp
    一時ファイル

  • /var
    ログやキャッシュ

  • /dev
    デバイスファイル

  • /Volumes
    外部ドライブやネットワークドライブのマウントポイント

  • /Users
    ホームディレクトリ
    • /Users/username/Documents:書類
    • /Users/username/Desktop:デスクトップ
    • /Users/username/Downloads:ダウンロード
    • /Users/username/Library:ユーザー専用設定やキャッシュ

先頭に戻る

作成者: 丸山響輝 / 23 / HR・レスキュー

最終更新: 2025年 08/17