Linux入門:コマンド操作のきほん

Linuxの「すべてはファイル」という考え方

生田 陸人
LuaGate エンジニア / 現役エンジニア
編集 LuaGate編集部

このレッスンで分かること

  • Linux はファイル・デバイス・プロセス・ネットワークまで / から始まるパスで扱います
  • ls -l 先頭の 1 文字でファイル種別が判別できます (- d l c b s p)
  • /proc /sys は仮想ファイル (カーネルがその場で内容を生成)

Linuxの「すべてはファイル」という考え方 とは

Linuxの重要な概念「すべてはファイル」について解説します。ファイルシステムの理解を深めましょう。本レッスンでは、Linuxの「すべてはファイル」という考え方 の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。

なぜ重要か

Linuxを使いこなす上で最初に押さえておきたい思想が「Everything is a file」、つまりあらゆるリソースがファイルとして見えるという考え方です。ディスク上のデータだけでなく、キーボードやディスプレイなどのデバイス、プロセス情報、メモリ、さらにはネットワーク接続まで、ほとんどすべてが/から始まるパスでアクセスできます。

この設計のおかげで、私たちはcatechogrepといった少数のコマンドを覚えるだけで、ファイル・デバイス・プロセスをまったく同じやり方で操作できるようになります。新しい技術が出てきても「ファイルとして読み書きする」という共通言語があるため、Webサーバー、コンテナ、IoTデバイスまで一貫した感覚で扱えるのです。実務でも、サーバーの状態を cat /proc/loadavg で確認したり、不要な出力を /dev/null に捨てたり、設定ファイルを cat /etc/... で読むなど、この発想はあらゆる場面で顔を出します。

「Everything is a file」のイメージは、デバイスもプロセスもネットワークも全部 / から始まるパスで読み書きできる、と考えると分かりやすくなります。

主要なディレクトリ構造

Linuxのファイルシステムはルート/を起点としたツリー構造です。代表的なディレクトリは下記のとおりです。

ディレクトリ役割
/ルート(最上位)
/bin一般ユーザー向けコマンド
/sbin管理者向けコマンド
/etcシステム設定ファイル
/homeユーザーのホーム
/varログやキャッシュなど可変データ
/tmp一時ファイル(再起動で消える想定)
/usrユーザー向けプログラム本体
/procプロセスやカーネル情報の仮想ファイル
/sysカーネルが公開する設定インターフェース
/devデバイスファイル
/optサードパーティ製ソフトウェア

ファイルとして見えるもの

通常のデータファイル以外にも、次のような「ファイルのように振る舞う」対象が存在します。

ターミナル

# プロセス情報を読む(PID 1 の情報) cat /proc/1/status | head -5

ターミナル

# 乱数を 16 バイトだけ取り出す head -c 16 /dev/urandom | xxd

ターミナル

# /dev/null は捨て場 command_that_logs > /dev/null 2>&1

動作の図解

diagram (will load when visible)

図のツリーを箇条書きで整理すると、次の通りです。

  • / (ルート) を頂点とするツリー構造
  • /bin /etc /home /var は実ファイル系
  • /dev の下にデバイス (null urandom 等) が並ぶ
  • /proc の下にプロセス情報 (1/status 等) が並ぶ
  • すべて同じ「ファイル」として cat echo で読み書きできる

ファイル種別の確認

ls -l の先頭1文字でファイル種別が分かります。

記号種別
-通常ファイル/etc/hostname
dディレクトリ/etc
lシンボリックリンク/usr/bin/vi
cキャラクタデバイス/dev/null
bブロックデバイス/dev/sda
sソケット/var/run/docker.sock
p名前付きパイプアプリ間通信用

ターミナル

$ ls -l /dev/null /etc/hostname /tmp crw-rw-rw- 1 root root 1, 3 May 19 10:00 /dev/null -rw-r--r-- 1 root root 12 May 19 10:00 /etc/hostname drwxrwxrwt 6 root root 4096 May 19 10:00 /tmp

ファイルとデバイスを同じ口で扱う実例

音声データをスピーカーに送ったり、シリアルポートにデータを書いたりするときも、書き込む先がファイルパスである点は変わりません。たとえば組込み機器では echo 1 > /sys/class/gpio/gpio17/value のように GPIO 出力を切り替える場面があります。ここで使っているのも > という「ファイルへの書き込み」記法です。

ターミナル

# 文字列を /dev/stdout に書く = 標準出力に書く echo hello > /dev/stdout

ターミナル

# /dev/stderr に書けば標準エラー出力に流れる echo oops > /dev/stderr

/proc/sys のファイルは実際のディスクには存在しません。アクセスした瞬間にカーネルがその場で内容を返す仮想ファイルです。サイズが 0 と表示されても中身は読めます。

標準的な道具で多くのことを表現するため、UNIXは「シンプルなインターフェースを共有する」設計を選びました。それがファイルというメタファーです。

よくある誤解

  • 拡張子 .txt .sh .png などはあくまで人間向けの目印で、Linuxはファイル種別を中身から判断します(file コマンドで確認)
  • ディレクトリも「中身に他のファイル名のリストを持つ特別なファイル」です。lsは実はその中身を読んでいるだけ
  • 隠しファイル(ドット始まり)は仕組みではなくlsの慣習で、.bashrc などはただ名前の先頭にドットがあるだけ
  • パーティションが違ってもツリーは1つに繋がっています(マウントポイントで連結される)

やってみよう

演習エディタで ls -l /file /etc/hostname を実行し、ファイル種別の表示と file の判定結果を見比べてみましょう。仮想ファイル /proc/cpuinfocat で読むのもおすすめです。同じ環境変数を cat /proc/$$/environ | tr '\0' '\n' | head で覗くと、自分のシェルプロセスの情報がファイルとして読めることが実感できます。

この章のポイント

ここまでの要点 Linux はあらゆるリソースをファイルとして扱う。ls -l 先頭で種別判定。/proc /sys はディスクではなくカーネルが生成する仮想ファイル。

まとめ

  • Linuxでは通常ファイル・デバイス・プロセス・パイプなどがすべてファイルとして表現される
  • ルート/を頂点としたツリー構造で、/etc /home /var などに役割が決まっている
  • ls -l の先頭1文字でファイル種別が分かる
  • 拡張子は飾りで、本当の種別は file コマンドやstatで調べる
  • /proc /sys は仮想ファイルで、ディスクではなくカーネルが内容を生成する

次のレッスン

次は ディレクトリの移動と確認 で、Linuxの重要な概念「すべてはファイル」について解説します を学びます。

事前確認 — 進む前に次の 3 つができることを確認しましょう。

  1. すべてはファイル の要点を自分の言葉で説明できる
  2. このレッスンの最小コード (または操作手順) を見ずに書ける
  3. 練習問題やクイズで間違えた箇所を読み直して理解した

理解度チェック (30 秒)

Q. すべてはファイル とは何か、1 文で説明してください。

この章のポイント

A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。

関連レッスン

参考リンク