LPIC あずき本v5.0 ch5 デバイスとLinuxファイルシステム ch5.2-ch5.4

LPICLinux勉強メモ

出典: 


ファイルシステムの管理

  • TODO: 雑なのでそのうち勉強しなおす

ディスクの利用状況の確認

  • ファイルシステムに書き込めなくなった場合、すみやかに原因を特定して復旧しなければならない

    • 空き容量不足
    • iノード枯渇
  • dfコマンド

    • 空き容量確認
  • duコマンド

    • ファイルやディレクトリが占めている容量の確認

ファイルシステムのチェック

  • fsckコマンド

    • ディスクチェック
    • 必要であれば修復
    • アンマウントするか、読み取り専用でマウントして実施すること

      • 書き込み中に実施するとファイルシステムが壊れる
  • e2fsckコマンド

    • ext2/ext3/ext4用

ファイルシステムの管理

  • tune2fsコマンド

    • ext2, ext3, ext4ファイルシステムのさまざまなパラメータを設定

      • fsckコマンドのチェック間隔
      • 領域サイズの変更
    • やはりアンマウントor読み取り専用マウントしておくこと

XFS: eXtents File System

  • Red Hat Enterprise Linux7, CentOS7の標準ファイルシステム
  • ジャーナリングファイルシステムである

    • ファイルシステムの操作をジャーナル(ログ)に記録する仕組みを備える
    • ファイルシステムの整合性チェックを素早く行える

      • 障害発生時のリブート時間を短縮できる

ファイルシステムのマウントとアンマウント

マウントの仕組み

  • マウント

    • あるファイルシステムに別のファイルシステムを組み込んで、全体として1つのファイルシステムとして扱えるようにする

      • ディスク上のファイルシステム
      • リムーバブルメディア
      • NFS: Network File System
    • デバイスやネットワークの違いが透過的になる
  • マウントポイント

    • マウントしたファイルシステムが結合されるディレクトリ

      • /media/mnt以下空ディレクトリなど

/etc/fstabファイル

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda2 during installation
UUID=bbddb2bb-7fde-4777-88b4-d762aadc173d /               ext4    errors=remount-ro 0       1
# /boot/efi was on /dev/sda1 during installation
UUID=9A29-BDC2  /boot/efi       vfat    umask=0077      0       1
/swapfile                                 none            swap    sw              0       0
  • 書式

    • <file system>

      • デバイスファイル名
      • ラベル
      • UUID

        • blkidコマンドで得られる
    • <mount point>

      • マウント先
    • <type>

      • ファイルシステムの種類(先述)
    • <options>

      • マウント時に必要なオプション

        • 読み取り専用、とか
    • <dump>

      • 1: dumpコマンドによるバックアップ対象
      • 0: バックアップ対象外
      • ふつうext2/ext3なら1、他は0らしい
    • <pass>

      • ブート時にfsckがチェックする順序
      • 0:チェックされない
      • 1以上: 昇順
      • ルートファイルシステムは1であること
  • UUID: Universally Unique IDentifier

    • デバイスの識別に使われる
sudo blkid
...
/dev/loop6: TYPE="squashfs"
/dev/loop7: TYPE="squashfs"
/dev/sda1: UUID="9A29-BDC2" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="5352c0a6-f610-48e5-9887-d63a6e227709"
/dev/sda2: UUID="bbddb2bb-7fde-4777-88b4-d762aadc173d" TYPE="ext4" PARTUUID="78d3dda3-2950-49fe-bf58-0ed9282a458f"
/dev/loop8: TYPE="squashfs"
/dev/loop9: TYPE="squashfs"
...

マウントとアンマウント

mount

MOUNT(8)                System Administration                MOUNT(8)

NAME
       mount - mount a filesystem

SYNOPSIS
       mount [-l|-h|-V]

       mount -a [-fFnrsvw] [-t fstype] [-O optlist]

       mount [-fnrsvw] [-o options] device|dir

       mount [-fnrsvw] [-t fstype] [-o options] device dir
  • マウント情報取得
mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,nosuid,relatime,size=4000356k,nr_inodes=1000089,mode=755)
...
  • USBメモリをマウントしたときのコマンド備忘録
sudo mkdir /mnt/sdb1
sudo mount /dev/sdb1 /mnt/sdb1

df -a
  • /mntを使うのは間違っている気がする

    • /mediaを使うのが正しそう
...
+ /dev/sdb1        7558460  343500   7214960   5% /mnt/sdb1
  • デバイスファイルとマウントポイントのどちらかを省略すると、/etc/fstabを参照して補完する
  • /etc/fstabにしたがって全マウント
sudo mount -a

umount

  • ファイルシステムをアンマウント
sudo umount /mnt/sdb1
  • /etc/mtab

    • マウントされているファイルシステムの情報が格納されている
ls -l /etc/mtab
  • /proc下ファイル(に見えるやつ)へのシンボリックリンクだった
lrwxrwxrwx   1 root           root           19 2019-02-24 02:13 /etc/mtab -> ../proc/self/mounts
  • /etc/mtabファイルに記述されているファイルシステムを全アンマウント
sudo umount -a

ディスククォータの管理

  • LPIC 101 ver5.0で丸ごと消えた
  • そのうち勉強する

クォータの制限

クォータの適用

クォータの管理コマンド

quota

quotacheck

quotaon

quotaoff

edquota

repquota

ファイルの配置と検索

FHS: Filesytem Hierarchy Standard(ファイルシステム階層標準)

  • ファイルシステム内のレイアウトの標準

/bin

  • 基本的なコマンド配置
  • 一般ユーザでも実行可能

/sbin

  • システム管理に必須のコマンドが配置
  • rootのみ実行可能

/etc

  • 設定ファイル、スクリプトファイル等

/dev

  • デバイスファイルが配置される

    • udev: Userspace DEVice management の仕組みにより自動配置

/lib

  • 共有ライブラリ
  • カーネルモジュール
  • とりわけ、/bin,/sbinにあるコマンドが必要とするもの

/media

  • リムーバブルメディアのマウントポイント

/mnt

  • 一時的にマウントするファイルシステムのマウントポイント

/opt

  • パッケージ管理の仕組みを使ってプログラムがインストールされる
  • ディストリによっては無い

/proc

  • カーネル内部情報へのアクセス
  • 仮想的なファイルシステム

    • 実際にファイルがあるわけではない

/root

  • root氏の~
  • オプション
  • /homeと分けるメリット

    • /homeがマウントできなくなってもシステムのメンテをできる

/boot

  • 起動に必要な設定
  • カーネルイメージ
  • ディスクの先頭付近に配置されることがある

    • BIOSの制限を受けないよう

/home

  • 一般ユーザの~
  • オプション
  • 独立したファイルシステムにするメリット

    • クォータを設定できる
    • 保守性向上

/tmp

  • すべてのユーザが読み書きできる
  • ディレクトリにはスティッキービットが設定される

    • 誰でも書き込めるよう
    • かつ、ディレクトリの所有者(root)しかディレクトリを消せないよう

/var

  • 頻繁に書き換えられる

/var/cache

  • 一時的なキャッシュファイル

    • manコマンドで表示するために整形したデータ等

/var/lock

  • 排他制御用ファイルを配置

/var/log

  • ログ書き出し

/var/run

  • システムの状態を示すファイル

    • *.pidファイルにはPIDが格納されている
    • killコマンドに渡したりできる
  • ソケットファイルとかも

    • *.sock

/var/spool

  • 処理待ちデータ

    • 印刷待ちデータ

      • /var/spool/lpd
    • 予約されたジョブ

      • /var/spool/at

/usr

  • コマンドやユーティリティ

/usr/bin

  • ユーザーが一般的に使うコマンド
  • 緊急時のシステム保守に必須ではないもの

/usr/sbin

  • システム管理コマンド
  • 緊急時のシステム保守に必須ではないもの

/usr/lib

  • プログラムに必須な共有ライブラリ

/usr/local

  • ローカルシステムで必要とされるもの

    • コマンド
    • ライブラリ
    • ドキュメント
  • さらにbin, sbin, lib等細分

/usr/share

  • アーキテクチャ非依存のファイル

    • /usr/share/man

      • manコマンドで使うマニュアル

/usr/src

  • Linuxのカーネルソース等

ファイルの検索

find

FIND(1)                General Commands Manual                FIND(1)

NAME
       find - search for files in a directory hierarchy

SYNOPSIS
       find  [-H]  [-L]  [-P]  [-D  debugopts]  [-Olevel]  [starting-
       point...] [expression]
  • 指定したディレクトリ以下、検索式によりファイルやディレクトリを検索
  • 検索式(expression)

    • -name ファイル名

      • ファイル名検索
    • -atime n

      • アクセス時刻がn*24時間以内
    • -mtime n

      • 更新時刻がn*24時間以内
    • -perm [/-]?mode

      • アクセス権で検索

        • mode: 完全一致
        • -mode: 包含
        • /mode: どれか含まれる
    • -size n[cwbkMG]?

      • ファイルサイズで検索
      • デフォルトb…512バイトブロック単位
      • c: char … 1バイト
      • w: word … 2バイト
      • k,M,G: KiB, MiB, GiB
    • -type c

      • ファイルの種類で検索

        • f: ファイル
        • d: ディレクトリ
        • l: シンボリックリンク
    • -user uname, -group gname

      • 所有ユーザ、グループで検索
    • -exec command {} \;

      • マッチしたファイルに対してコマンド実行
      • xargs的なことできる
    • -ok command {} \;

      • マッチしたファイルに対してコマンド実行
      • プロンプト

locate

  • findよりも速い検索
  • 検索データベースを更新しておく必要あり

updatedb

  • locateで使用するデータベースの更新
  • 多くのディストリでcronで定期実行されるそう

/etc/cron.daily/mlocate

#! /bin/bash

set -e

[ -x /usr/bin/updatedb.mlocate ] || exit 0

if which on_ac_power >/dev/null 2>&1; then
    ON_BATTERY=0
    on_ac_power >/dev/null 2>&1 || ON_BATTERY=$?
    if [ "$ON_BATTERY" -eq 1 ]; then
	exit 0
    fi
fi

# See ionice(1)
if [ -x /usr/bin/ionice ] &&
    /usr/bin/ionice -c3 true 2>/dev/null; then
    IONICE="/usr/bin/ionice -c3"
fi

# See nocache(1)
NOCACHE=
if [ -x /usr/bin/nocache ]; then
    NOCACHE="/usr/bin/nocache"
fi

flock --nonblock /run/mlocate.daily.lock $NOCACHE $IONICE /usr/bin/updatedb.mlocate
  • 設定

/etc/updatedb.conf

PRUNE_BIND_MOUNTS="yes"
# PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /var/spool /media /var/lib/os-prober /var/lib/ceph /home/.ecryptfs /var/lib/schroot"
PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs devtmpfs fuse.mfs shfs sysfs cifs lustre tmpfs usbfs udf fuse.glusterfs fuse.sshfs curlftpfs ceph fuse.ceph fuse.rozofs ecryptfs fusesmb"
  • PRUNEPATHS, PRUNEFS

    • データベースに登録しないディレクトリのパスとファイルシステム

which

  • コマンドを探し出して絶対パスを表示
  • 環境変数PATHに基づいて検索

    • 一般ユーザが管理者用コマンドを検索することはできないことがある

      • /sbinとかがPATHに含まれていない場合、できない

whereis

  • 指定されたコマンドについて、下記構成要素のパスを検索

    • バイナリ
    • ソースコード
    • 設定ファイル
    • マニュアル
whereis bash
bash: /bin/bash /etc/bash.bashrc /usr/share/man/man1/bash.1.gz

type

  • 指定のコマンドの分類を出力

    • シェル組み込み
    • 通常の実行ファイル
    • エイリアス
  • bash組み込みコマンドっぽい

    • eshellにはない
type type
type はシェル組み込み関数です
type bash
bash は /bin/bash です
type ls
ls は `ls --color=auto' のエイリアスです