Red Hat Enterprise Linux でのファイルシステムへのアクセス

Red Hat Enterprise LinuxBeginner
オンラインで実践に進む

はじめに

この実験では、Red Hat Enterprise Linux (RHEL) システムにおける Linux ファイルシステムの管理について実践的な経験を積みます。ファイルシステムとブロックデバイスの識別方法、df および du コマンドを使用したディスク使用量の確認方法、そしてファイルシステムの手動マウントおよびアンマウントの実践を学びます。

さらに、locatefind コマンドを使用して、名前、所有者、権限、サイズ、時間、ファイルタイプといったさまざまな条件に基づいて効率的にファイルを検索する方法を習得します。

ファイルシステムとブロックデバイスの識別

このステップでは、Red Hat Enterprise Linux システム上でファイルシステムとブロックデバイスを識別する方法を学びます。ストレージがどのように構成されているかを理解することは、システム管理の基本です。ブロックデバイスとその関連ファイルシステムをリストアップし、調査するためのさまざまなコマンドを探求します。

まず、いくつかの主要な概念を理解しましょう。

  • ブロックデバイス (Block Device): ブロックデバイスは、ストレージデバイスへの低レベルなアクセスを提供するファイルです。ハードドライブ、SSD、USB ドライブなどがこれに該当します。Linux では、通常 /dev ディレクトリに配置されています。
  • パーティション (Partition): パーティションは、物理ストレージデバイスの論理的な分割単位です。1 つのハードドライブを複数のパーティションに分け、それぞれ異なるファイルシステムでフォーマットしたり、異なる目的で使用したりできます。
  • ファイルシステム (File System): ファイルシステムは、オペレーティングシステムがデータの保存や取得を制御するために使用する手法およびデータ構造です。データをファイルやディレクトリとして整理します。一般的な Linux ファイルシステムには XFS や ext4 があります。
  • マウントポイント (Mount Point): マウントポイントは、ファイルシステム階層内の空のディレクトリであり、ファイルシステムを接続(マウント)してその内容にアクセスできるようにする場所です。

まずは、lsblk コマンドを使用してシステム上のブロックデバイスをリストアップすることから始めましょう。このコマンドは、すべてのブロックデバイスとそのパーティションをツリー形式で表示します。

lsblk

以下のような出力が表示されるはずです。VM によっては vdavdb といった名前、あるいは nvme0n1nvme1n1 といった NVMe 名が表示される場合があります。

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
vda    253:0    0   40G  0 disk
├─vda1 253:1    0    1M  0 part
├─vda2 253:2    0  100M  0 part /boot/efi
└─vda3 253:3    0 39.9G  0 part /
vdb    253:16   0   40G  0 disk

出力の各項目の意味は以下の通りです。

  • NAME: ブロックデバイス(例: vda, vdb, nvme0n1, nvme1n1)またはパーティション(例: vda1, vda2, nvme0n1p2)の名前。
  • MAJ:MIN: メジャーデバイス番号とマイナーデバイス番号。
  • RM: リムーバブルデバイスかどうか(1 ならリムーバブル、0 なら非リムーバブル)。
  • SIZE: デバイスまたはパーティションのサイズ。
  • RO: 読み取り専用かどうか(1 なら読み取り専用、0 なら読み書き可能)。
  • TYPE: デバイスのタイプ(例: disk、パーティションなら part)。
  • MOUNTPOINTS: デバイスやパーティションが現在マウントされている場所。

次に、df コマンドを使用してファイルシステムとその使用状況を確認します。df コマンドは、ファイルシステムのディスク容量使用状況を報告します。

df

出力には、さまざまなファイルシステム、合計サイズ、使用済み容量、空き容量、マウントポイントが表示されます。

Filesystem     1K-blocks    Used Available Use% Mounted on
devtmpfs            4096       0      4096   0% /dev
tmpfs            1822216       0   1822216   0% /dev/shm
tmpfs             728888     616    728272   1% /run
efivarfs             256       9       243   4% /sys/firmware/efi/efivars
/dev/vda3       41773036 3628732  38144304   9% /
/dev/vda2         102156    7198     94958   8% /boot/efi
tmpfs             364440       0    364440   0% /run/user/1000

特にサイズを見やすくするために、-h オプションを使用して人間が読みやすい形式(例: M は MiB、G は GiB)で表示できます。

df -h

サイズがより理解しやすい形式で表示されます。

Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        4.0M     0  4.0M   0% /dev
tmpfs           1.8G     0  1.8G   0% /dev/shm
tmpfs           712M  616K  712M   1% /run
efivarfs        256K  8.5K  243K   4% /sys/firmware/efi/efivars
/dev/vda3        40G  3.5G   37G   9% /
/dev/vda2       100M  7.1M   93M   8% /boot/efi
tmpfs           356M     0  356M   0% /run/user/1000

最後に、lsblk -fp コマンドを使用して、デバイスのフルパス、UUID(Universally Unique Identifier)、およびファイルシステムタイプをリストアップします。UUID はデバイス名が変わっても不変の識別子であるため、一貫したマウントを行う際に非常に便利です。

lsblk -fp

出力には UUID とファイルシステムタイプが含まれます。

NAME        FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
/dev/vda
├─/dev/vda1
├─/dev/vda2 vfat   FAT16       E52E-0564                              92.7M     7% /boot/efi
└─/dev/vda3 xfs          root  4c234c8b-4f67-4d65-abb5-06753b1ec236   36.4G     9% /
/dev/vdb

UUID カラムに注目してください。これは各ファイルシステムの一意の識別子を提供します。これは、/etc/fstab などの設定ファイルでファイルシステムを確実にマウントするために不可欠です。

次のステップに進む前に、ブロックデバイスとファイルシステムの情報を後で確認できるように、プロジェクトディレクトリに短いレポートを保存しておきましょう。

{
  lsblk
  echo
  df -h
  echo
  lsblk -fp
} > ~/project/filesystem_overview.txt

レポートが作成されたことを確認するには、以下を実行します。

cat ~/project/filesystem_overview.txt

df と du を使用したファイルシステム使用状況の確認

このステップでは、df および du コマンドを使用してファイルシステムの使用状況をより深く調査します。df がマウントされたファイルシステムのディスク容量使用状況の概要を提供するのに対し、du (disk usage) は特定のファイルやディレクトリのディスク使用量を見積もるために使用されます。それぞれの違いと使い分けを理解することは、効果的なディスク容量管理において重要です。

まず、人間が読みやすい形式のオプションを付けた df コマンドを再度確認しましょう。このコマンドは、マウントされているすべてのファイルシステムでどれだけの容量が使用され、どれだけ空いているかを素早く把握するのに最適です。

df -h

出力には、読みやすい形式(例: G はギガバイト、M はメガバイト)でディスク使用状況が表示されます。

Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        892M     0  892M   0% /dev
tmpfs           915M     0  915M   0% /dev/shm
tmpfs           915M   17M  899M   2% /run
tmpfs           915M     0  915M   0% /sys/fs/cgroup
/dev/vda4       8.0G  1.4G  6.7G  17% /
/dev/vda3      1014M  166M  849M  17% /boot
tmpfs           183M     0  183M   0% /run/user/1000

次に、du コマンドを探求します。df とは異なり、du は指定されたパス内のファイルやディレクトリが使用しているディスク容量を計算します。これは、どのディレクトリやファイルが最も容量を消費しているかを知りたい場合に特に便利です。

現在のディレクトリ (~/project) のディスク使用量を確認するには、引数なしで du を使用します。これにより、~/project 内のすべてのファイルとサブディレクトリのサイズがリストアップされます。

du

出力は長くなる可能性があり、デフォルトではキロバイト単位でサイズが表示されます。

4       ./.config/xfce4/xfconf/xfce-perchannel-xml
8       ./.config/xfce4/xfconf
12      ./.config/xfce4
16      ./.config
4       ./.local/share/nano
8       ./.local/share
12      ./.local
28      .

df -h と同様に、du でも -h オプションを使用することで出力を読みやすくできます。

du -h

これにより、サイズが人間が読みやすい単位で表示されます。

4.0K    ./.config/xfce4/xfconf/xfce-perchannel-xml
8.0K    ./.config/xfce4/xfconf
12K     ./.config/xfce4
16K     ./.config
4.0K    ./.local/share/nano
8.0K    ./.local/share
12K     ./.local
28K     .

多くの場合、個々のファイルやサブディレクトリのサイズよりも、ディレクトリの合計サイズを知りたいはずです。その場合は、-h と一緒に -s (summary) オプションを使用します。ホームディレクトリ (~) の合計サイズを確認してみましょう。

du -sh ~

このコマンドは、ホームディレクトリの合計サイズを出力します。

48K     /home/labex

du がどのようにサイズを報告するかを確認するために、いくつかファイルを作成してみましょう。test_data というディレクトリを作成し、その中にいくつかファイルを作成します。

まず、ディレクトリを作成します。

mkdir ~/project/test_data

次に、test_data ディレクトリに移動します。

cd ~/project/test_data

続いて、いくつかファイルを作成します。head コマンドを使用して、特定のサイズのファイルを作成します。

head -c 1K < /dev/urandom > file1.txt
head -c 5K < /dev/urandom > file2.txt
head -c 10K < /dev/urandom > file3.txt

ここで、du -h を使用して、これらの新しいファイルと test_data ディレクトリのサイズを確認します。

du -h

以下のような出力が表示されるはずです。

1.0K    ./file1.txt
5.0K    ./file2.txt
10K     ./file3.txt
24K     .

最後の行 (24K .) は、現在のディレクトリ (., つまり ~/project/test_data) の合計サイズを示しています。

最後に、~/project ディレクトリに戻り、du -sh を使用して test_data の合計サイズを確認します。

cd ~/project
du -sh test_data

test_data ディレクトリの要約されたサイズが表示されます。

24K     test_data

これは、du を使用して特定のディレクトリ内のディスク消費量を特定し、ストレージを効果的に管理する方法を示しています。

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

このステップでは、ファイルシステムを手動でマウントおよびアンマウントする方法を学びます。ファイルシステムをマウントすると、ファイルシステム階層内の特定のディレクトリ(マウントポイント)を通じてその内容にアクセスできるようになります。アンマウントすると、ファイルシステムがマウントポイントから切り離され、再度マウントされるまで内容にアクセスできなくなります。これは、リムーバブルメディア、一時ストレージ、または新しいディスクパーティションを管理するために不可欠なスキルです。

この演習では、LabEx VM 環境で利用可能な、マウントされていない追加ディスクを使用します。VM によっては、そのディスクは /dev/vdb/dev/nvme1n1 などという名前である可能性があるため、デバイス名をハードコードするのではなく、検出するようにします。

まず、ルートディスクと、フォーマットおよびマウントする追加ディスクを特定します。

ROOT_PARTITION=$(findmnt -n -o SOURCE /)
ROOT_DISK="/dev/$(lsblk -no PKNAME \"$ROOT_PARTITION\")"
DATA_DISK=$(lsblk -dnpo NAME,TYPE | awk '$2 == "disk" {print $1}' | grep -vx "$ROOT_DISK" | head -n 1)
echo "$DATA_DISK"

このコマンドは、/dev/vdb/dev/nvme1n1 のような追加ディスクへのパスを表示するはずです。

/dev/nvme1n1

ファイルシステムをマウントするには、マウントポイントとなる空のディレクトリが必要です。一時的なマウントには /mnt を使用するか、その中にサブディレクトリを作成するのが一般的です。マウントポイントとして機能させるために、~/project ディレクトリ内に mydata という新しいディレクトリを作成しましょう。

mkdir ~/project/mydata

次に、$DATA_DISK に格納されている追加ディスクをファイルシステムでフォーマットする必要があります。Red Hat Enterprise Linux のデフォルトである XFS ファイルシステムを使用します。このコマンドは指定されたデバイス上のすべてのデータを消去するため、注意して実行してください。

sudo mkfs.xfs "$DATA_DISK"

XFS ファイルシステムの作成を示す出力が表示されます。出力内のデバイス名は、お使いの VM に一致します。

meta-data=/dev/nvme1n1           isize=512    agcount=4, agsize=2621440 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=1 inobtcount=1 nrext64=0
data     =                       bsize=4096   blocks=10485760, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=16384, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

$DATA_DISK に XFS ファイルシステムが作成されたので、それを ~/project/mydata マウントポイントにマウントできます。mount コマンドには sudo 権限が必要です。

sudo mount "$DATA_DISK" ~/project/mydata

ファイルシステムが正常にマウントされたことを確認するには、再度 df -h コマンドを使用します。検出されたディスクが、マウントポイント /home/labex/project/mydata としてリストされているはずです。

df -h

出力から検出されたディスクを探してください。

Filesystem      Size  Used Avail Use% Mounted on
...
/dev/nvme1n1     40G  318M   40G   1% /home/labex/project/mydata

これで、~/project/mydata 内にファイルやディレクトリを作成できるようになり、それらは $DATA_DISK のディスク上に保存されます。テストファイルを作成してみましょう。

sudo touch ~/project/mydata/testfile.txt

~/project/mydata の内容をリストアップして、ファイルの作成を確認します。

ls -l ~/project/mydata

testfile.txt がリストされているはずです。

total 0
-rw-r--r--. 1 root root 0 Jun 16 11:09 testfile.txt

マウントされたファイルシステムの使用が終わったら、特に物理デバイスを取り外す前には、データの破損を防ぐためにアンマウントすることが重要です。umount コマンドを使用してファイルシステムをアンマウントします。

sudo umount ~/project/mydata

もし umount コマンドが「target is busy(ターゲットが使用中です)」というエラーで失敗した場合は、何らかのプロセスがまだマウントポイントにアクセスしていることを意味します。これは、現在の作業ディレクトリがマウントされたファイルシステム内にある場合によく起こります。これを解決するには、現在のディレクトリをマウントポイントの外側(例えばホームディレクトリ ~)に変更してください。

cd ~

その後、再度アンマウントを試みます。

sudo umount ~/project/mydata

アンマウント後、df -h を再度確認して、検出されたディスクがマウントされていないことを確認します。

df -h

検出されたディスクが /home/labex/project/mydata にマウントされていないはずです。

Filesystem      Size  Used Avail Use% Mounted on
...
## ここにあなたの追加ディスクは表示されなくなっているはずです。

これで、ファイルシステムの手動マウントとアンマウントのプロセスは完了です。

locate と find を使用した名前によるファイル検索

このステップでは、locatefind という 2 つの強力なコマンドを使用して、システム上のファイルを検索する方法を学びます。どちらのコマンドもファイルの検索に役立ちますが、動作が異なり、それぞれ適したシナリオがあります。

locate コマンドの使用

locate コマンドは、ファイル名とパスの事前構築済みデータベースを検索するため、非常に高速です。ただし、これはデータベースが最後に更新されてから作成または削除されたファイルを見つけられない可能性があることを意味します。データベースは通常、cron ジョブによって毎日更新されますが、強制的に更新することも可能です。

このイメージでは、locate コマンドは既に使用可能です。データベースを更新する前に、コマンドが存在することを確認します。

command -v locate

以下のような出力が表示されるはずです。

/usr/bin/locate

インストール後、locate データベースを更新する必要があります。このコマンドには sudo 権限が必要です。

sudo updatedb

このコマンドはバックグラウンドで実行され、ファイルシステムのサイズによっては少し時間がかかる場合があります。

それでは、passwd のような一般的なシステムファイルを検索してみましょう。

locate passwd

"passwd" を含むパスのリストが表示されます。

/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/usr/share/man/man1/passwd.1.gz
/usr/share/man/man5/passwd.5.gz
...出力省略...

大文字と小文字を区別せずに検索するには、-i オプションを使用します。大文字小文字を気にせず "messages" を含むファイルを検索してみましょう。

locate -i messages

以下のような結果が表示されます。

/usr/share/locale/zza/LC_MESSAGES
/usr/share/makedumpfile/eppic_scripts/ap_messages_3_10_to_4_8.c
/usr/share/vim/vim82/ftplugin/msmessages.vim
...出力省略...

-n オプションを使用して結果の数を制限することもできます。"passwd" の最初の 5 つの出現箇所を見つけてみましょう。

locate -n 5 passwd

最初の 5 つの一致のみが表示されます。

/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/usr/share/man/man1/passwd.1.gz
/usr/share/man/man5/passwd.5.gz

find コマンドの使用

find コマンドはファイルシステムをリアルタイムで検索するため、locate よりも低速ですが、非常に最近作成されたファイルを含め、条件に一致するすべてのファイルを確実に検索できます。また、はるかに強力な検索オプションを提供します。

find の基本的な構文は find [パス] [式] です。パスが指定されていない場合は、現在のディレクトリを検索します。

ルートディレクトリ (/) から sshd_config ファイルを検索してみましょう。

find / -name sshd_config

設定ファイルへのパスが表示されるはずです。

/etc/ssh/sshd_config

部分的な名前を検索したりワイルドカードを使用したりする場合は、シェルが prematurely(時期尚早に)展開するのを防ぐために、ファイル名のパターンを引用符で囲むことが重要です。~/project ディレクトリ内で .txt で終わるすべてのファイルを検索してみましょう。

find ~/project -name '*.txt'

前のステップで file1.txtfile2.txtfile3.txt を作成していれば、それらがリストアップされるはずです。

/home/labex/project/test_data/file1.txt
/home/labex/project/test_data/file2.txt
/home/labex/project/test_data/file3.txt

find で大文字と小文字を区別せずに検索するには、-iname オプションを使用します。/usr/share/doc ディレクトリ内で "README" を含むファイル(大文字小文字を区別しない)を検索してみましょう。

find /usr/share/doc -iname '*readme*'

多くの結果が表示されます。例:

/usr/share/doc/libselinux/README
/usr/share/doc/libsepol/README
/usr/share/doc/libsemanage/README
...出力省略...

find コマンドは非常に多機能で、他の条件と組み合わせることができます。これについては次のステップで探求します。

続ける前に、後で比較できるように主要な locatefind の結果を保存しておきます。

{
  locate -n 5 passwd
  echo "---"
  find ~/project -name '*.txt'
} > ~/project/search-results.txt

保存された結果は以下で確認できます。

cat ~/project/search-results.txt

所有者、権限、サイズ、時間によるファイル検索

このステップでは、強力な find コマンドを使用して、名前だけでなくさまざまな条件に基づいてファイルを検索する方法を学びます。これには、所有者、権限、サイズ、変更時間による検索が含まれます。これらの高度な検索機能は、監査、クリーンアップ、トラブルシューティングなどのシステム管理タスクに不可欠です。

所有者によるファイル検索

-user および -group オプションを使用して、特定のユーザーまたはグループが所有するファイルを検索できます。ユーザー/グループ名または数値 ID を指定できます。

ホームディレクトリ (~) 内で labex ユーザーが所有するすべてのファイルを検索してみましょう。

find ~ -user labex

設定ファイルを含む多くのファイルがリストアップされます。

/home/labex
/home/labex/.bash_logout
/home/labex/.bash_profile
/home/labex/.bashrc
/home/labex/.config
/home/labex/.config/xfce4
/home/labex/.config/xfce4/xfconf
/home/labex/.config/xfce4/xfconf/xfce-perchannel-xml
/home/labex/.local
/home/labex/.local/share
/home/labex/.local/share/nano
/home/labex/project
/home/labex/project/test_data
/home/labex/project/test_data/file1.txt
/home/labex/project/test_data/file2.txt
/home/labex/project/test_data/file3.txt
...出力省略...

同様に、labex グループが所有するファイルを検索するには以下のようにします。

find ~ -group labex

labex は通常 labex ユーザーのプライマリグループであるため、出力は同様になります。

ユーザー ID (UID) やグループ ID (GID) で検索することもできます。labex ユーザーの UID と GID は通常 1000 です。

find ~ -uid 1000
find ~ -gid 1000

権限によるファイル検索

find コマンドの -perm オプションを使用すると、特定の権限を持つファイルを検索できます。権限は 8 進数(例: 755)またはシンボリック(例: u=rwx,g=rx,o=rx)モードで指定できます。

~/project ディレクトリに特定の権限を持つテストファイルを作成してみましょう。

touch ~/project/permission_test.txt
chmod 644 ~/project/permission_test.txt

次に、~/project 内で権限が正確に 644 であるファイルを検索します。

find ~/project -perm 644

permission_test.txt がリストされているはずです。

/home/labex/project/permission_test.txt

8 進数の権限の前に / または - を使用することもできます。

  • /: 指定された権限ビットのいずれかが設定されている場合に一致します。
  • -: 指定された権限ビットのすべてが設定されている場合に一致します。

~/project 内で、他人が少なくとも読み取り権限 (o=r または 004) を持っているファイルを検索してみましょう。

find ~/project -perm -004

これにより、permission_test.txt や、他人に読み取りアクセス権を与える他のファイルがリストアップされます。

/home/labex/project/permission_test.txt
...出力省略...

サイズによるファイル検索

-size オプションを使用すると、サイズに基づいてファイルを検索できます。サイズは単位付きで指定できます(例: k はキロバイト、M はメガバイト、G はギガバイト)。また、+ を使用して「より大きい」、- を使用して「より小さい」を指定することもできます。

~/project/test_data ディレクトリ内で、サイズが正確に 1 キロバイトのファイルを検索してみましょう。

find ~/project/test_data -size 1k

file1.txt が表示されるはずです。

/home/labex/project/test_data/file1.txt

次に、5 キロバイトより大きいファイルを検索します。

find ~/project/test_data -size +5k

file3.txt がリストされるはずです。

/home/labex/project/test_data/file3.txt

そして、10 キロバイトより小さいファイルを検索します。

find ~/project/test_data -size -10k

file1.txtfile2.txt がリストされるはずです。

/home/labex/project/test_data/file1.txt
/home/labex/project/test_data/file2.txt

変更時間によるファイル検索

-mmin(何分前に変更されたか)や -mtime(何日前に変更されたか)などのオプションを使用して、変更時間に基づいてファイルを検索できます。

~/project ディレクトリ内で、過去 60 分以内に変更されたファイルを検索してみましょう。

find ~/project -mmin -60

最近作成した場合は、permission_test.txttest_data 内のファイルが含まれる可能性が高いです。

/home/labex/project
/home/labex/project/permission_test.txt
/home/labex/project/test_data
/home/labex/project/test_data/file1.txt
/home/labex/project/test_data/file2.txt
/home/labex/project/test_data/file3.txt

1 日(24 時間)以上前に変更されたファイルを検索するには、-mtime+1 を使用します。

find ~/project -mtime +1

~/project 内のすべてのファイルが最近作成または変更された場合、このコマンドは何も返さない可能性があります。

これらのオプションを組み合わせることで、非常に具体的な検索クエリを作成でき、システム上のファイルを効率的に管理できるようになります。

次の検証で正しいファイルが見つかったことを確認できるように、検索結果を 2 つ保存しておきます。

find ~/project -perm 644 > ~/project/find-perm-results.txt
find ~/project/test_data -size +5k > ~/project/find-size-results.txt

ファイルタイプに基づくファイル検索

この最後のステップでは、find コマンドを使用してファイルタイプに基づいてファイルを検索する方法を学びます。これは、特定のパス内のすべてのディレクトリ、通常ファイル、シンボリックリンク、またはデバイスファイルを特定する必要がある場合に特に便利です。

find コマンドは -type オプションの後に 1 文字を指定してファイルタイプを指定します。検索可能な一般的なファイルタイプは以下の通りです。

  • f: 通常ファイル
  • d: ディレクトリ
  • l: シンボリックリンク (symlink)
  • b: ブロックデバイス
  • c: キャラクタデバイス
  • p: 名前付きパイプ (FIFO)
  • s: ソケット

まず、~/project ディレクトリ内のすべてのディレクトリを検索することから始めましょう。

find ~/project -type d

すべてのディレクトリとサブディレクトリがリストアップされ、以下のような出力が表示されるはずです。

/home/labex/project
/home/labex/project/test_data

次に、~/project ディレクトリ内のすべての通常ファイルを検索します。

find ~/project -type f

先ほど作成した file1.txtfile2.txtfile3.txt のようなファイルがリストされます。

/home/labex/project/test_data/file1.txt
/home/labex/project/test_data/file2.txt
/home/labex/project/test_data/file3.txt

次に、シンボリックリンクの検索を実演するためにシンボリックリンクを作成します。~/project ディレクトリ内に file1.txt へのシンボリックリンクを作成します。

ln -s ~/project/test_data/file1.txt ~/project/link_to_file1.txt

ls -l を使用してシンボリックリンクが作成されたことを確認します。

ls -l ~/project/link_to_file1.txt

シンボリックリンクであることを示す出力が表示されるはずです。

lrwxrwxrwx. 1 labex labex 32 May 15 08:00 /home/labex/project/link_to_file1.txt -> /home/labex/project/test_data/file1.txt

それでは、~/project ディレクトリ内のすべてのシンボリックリンクを検索します。

find ~/project -type l

新しく作成したシンボリックリンクが表示されるはずです。

/home/labex/project/link_to_file1.txt

最後に、ブロックデバイスを検索してみましょう。ブロックデバイスは通常 /dev ディレクトリにあります。

find /dev -type b

vdavda1vda2 などのブロックデバイスがリストされます。

/dev/nvme0n1
/dev/nvme0n1p1
/dev/nvme0n1p2
/dev/nvme0n1p3
/dev/nvme1n1

-type オプションは、前のステップで学んだ他の find オプションと組み合わせることができます。例えば、/etc 内の root ユーザーが所有するすべてのディレクトリを検索するには以下のようにします。

find /etc -type d -user root

ディレクトリの長いリストが表示されます。

/etc
/etc/selinux
/etc/selinux/targeted
/etc/selinux/targeted/active
/etc/selinux/targeted/active/modules
...出力省略...

実験を終了する前に、シンボリックリンクの検索結果を保存しておきます。

find ~/project -type l > ~/project/find-type-results.txt

これで、Linux ファイルシステムへのアクセスとファイルの検索に関する実験は終了です。デバイスの識別方法、ディスク使用量の確認方法、ファイルシステムの手動マウントおよびアンマウント方法、そしてさまざまな条件を指定した locate および find の使用方法を学びました。

まとめ

この実験では、Red Hat Enterprise Linux システムにおける Linux ファイルシステムの管理について実践的な経験を積みました。まず、lsblk などのコマンドを使用してファイルシステムとブロックデバイスを識別する方法を学び、ブロックデバイス、パーティション、ファイルシステム、マウントポイントといった主要な概念を理解しました。続いて、dfdu を使用してファイルシステムの使用状況を確認する方法を探求し、ディスク容量を報告するためのそれぞれの機能の違いを学びました。また、ファイルシステムの内容にアクセスできるようにし、その後切り離す方法を示す、ファイルシステムの手動マウントおよびアンマウントという不可欠なスキルも習得しました。

さらに、さまざまな条件を使用して効率的にファイルを検索する方法を深く掘り下げました。locatefind を使用して名前でファイルを検索する方法を学び、それぞれの違いと適切な使用例を理解しました。この実験では、所有者、権限、サイズ、時間属性に基づいてファイルを検索する方法を教えることで、システム管理やトラブルシューティングのための強力なツールを提供しました。最後に、特定のファイルタイプに基づいてファイルを検索する練習を行い、ファイルシステム管理とファイル検索技術の包括的な概要を完成させました。