チャレンジ一覧 / linux-filesystem-top-level

Day 4: /dev

ディレクトリの概要

/devは、Linuxカーネルが管理するデバイスファイルの集合。

デバイスファイル(device node)とも呼ばれる。

Linuxでは、ハードウェアをファイルとして扱う仕組みがある。(Everything is a file)

ハードウェアLinuxからの見え方
SSD/dev/sda
USB/dev/sdb
端末/dev/tty
仮想デバイス/dev/null

また、/devは現在udev(デバイス管理システム)によって起動時やデバイス接続時に自動生成される。

※udev とは、Linuxでデバイスを管理し、/devのデバイスファイルを自動生成する仕組み。

例)USBメモリを挿すと

カーネルが検出 ↓ udevが処理 ↓ /dev/sdb が作られる

主な用途

Linuxのデバイス(ハードウェア)へアクセスするための窓口。

アプリケーションやコマンドは

などに直接触れるのではなく、/devのファイルを通して操作する

代表的なファイル

ストレージ系

デバイス意味
/dev/sda1台目のディスク
/dev/sda1そのパーティション
/dev/loop*ループデバイス(ISOやイメージをディスクとして扱う)
/dev/mapperLVMや暗号化ディスク

※ パーティションとは1つのディスクを複数の領域に分割したもの。 それぞれが独立したディスクのように扱われ、/dev/sda1 /dev/sda2 のように番号で識別される。

特殊デバイス

デバイス用途
/dev/nullデータを捨てる
/dev/zero0を出し続ける
/dev/random安全な乱数
/dev/urandom高速な疑似乱数

ターミナル系

デバイス意味
/dev/tty現在の端末
/dev/tty0仮想コンソール
/dev/pts仮想ターミナル

入出力系

デバイス意味
/dev/stdin標準入力
/dev/stdout標準出力
/dev/stderr標準エラー

仮想メモリ系

デバイス意味
/dev/mem物理メモリ
/dev/shm共有メモリ

/dev/sda

/dev/sdaは物理ディスクを操作するためのデバイスファイル(ブロックデバイス)

/dev/sdaのブロックデバイス(ディスク・パーティション)とマウント状況を表示

%lsblk sda
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda      8:0    0 476.9G  0 disk 
├─sda1   8:1    0     1G  0 part /boot/efi
└─sda2   8:2    0 475.9G  0 part /

/dev/sdaディスクの詳細情報とパーティションテーブルを表示

%sudo fdisk -l
(中略)
Disk /dev/sda: 476.94 GiB, 512110190592 bytes, 1000215216 sectors
Disk model: SAMSUNG MZNLN512
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: B44DAF85-F580-4D0A-A46A-ABD2895C03B8

Device       Start        End   Sectors   Size Type
/dev/sda1     2048    2203647   2201600     1G EFI System
/dev/sda2  2203648 1000212479 998008832 475.9G Linux filesystem

パーティションテーブルの各項目の意味

項目意味
Deviceパーティション名
Startパーティション開始位置
Endパーティション終了位置
Sectors使用しているセクタ数
Sizeパーティションサイズ
Typeパーティションの用途

仮想デバイスの役割

仮想デバイスはよく使う機能をデバイスとして提供するもの。

実際のハードウェアを持たず、カーネルがソフトウェアとして提供するデバイス。

デバイス機能
/dev/nullデータ破棄
/dev/zero0を無限に生成(初期化、テスト用データ等)
/dev/random暗号用途のための高品質な乱数を生成(暗号鍵等)
/dev/loopファイルをディスクとして扱う

/dev/null

/dev/nullは、書き込まれたデータをすべて破棄する特殊デバイス。

Linuxではコマンドの出力は通常 stdout(標準出力)として画面に表示されるが、 不要な出力を捨てたい場合に /dev/null を使う。

%ll /dev/null
crw-rw-rw- 1 root root 1, 3 Mar 14 14:17 /dev/null

先頭のcはキャラクタデバイスを意味する。

※キャラクタデバイスとは、データを1文字(1バイト)単位で順番に読み書きするデバイス

 対になるもので、「ブロックデバイス(ブロック単位でランダムアクセス)」がある。

/dev/null が役立つ理由

Linuxではコマンドが基本的に出力を必ずどこかに書く設計になっている。

しかし状況によっては、結局いらないということが多い。

そこで捨て場所として /dev/null を使う。