ファイルとディレクトリを扱う
目標
ファイルとディレクトリを作り、移動し、リンクでつなぎ、まとめてバックアップする流れを手に馴染ませます。特に、ハードリンクとシンボリックリンクの違いを inode 番号で直接確かめます。
なぜ重要なのか
Linux でファイル名は実体ではなく、実体を指す参照です。ディレクトリは (名前, inode 番号) の組のリストにすぎず、データの本当の持ち主は inode です。この構造を知っていると、「なぜ mv は 1GB のファイルでも一瞬で終わるのか」「なぜ rm しても容量が減らないのか」「なぜハードリンクは別のディスクに張れないのか」が一度に説明できます。逆にこの構造を知らないと、その3つをそれぞれ別の異常現象として暗記することになります。
ステップ
/root/workディレクトリを作ってください。/root/work/hello.txtを作り、1行目にhello labhubを入れてください。/etc/hostnameを/root/work/hostnameにコピーしてください。内容が元と完全に同じでなければなりません。/root/work/logs/2026/08ディレクトリを一度に作ってください。/root/work/logs/2026/08の下にapp1.logからapp5.logまでの5つを作り、そのファイルの名前だけ(パスは除く)を1行に1つずつ入れた/root/work/loglist.txtを作ってください。hello.txtを指すハードリンク/root/work/hello.hardと、シンボリックリンク/root/work/hello.linkをそれぞれ作ってください。/root/work/draft.txtを作ってdraftの1行を入れたあと、/root/work/logs/2026/08/draft.txtに移動してください。/root/work/logsディレクトリ全体を/root/work/backup.tar.gzに圧縮してまとめてください。
参考
stat -c '%i %h %s' 파일で、inode 番号 / リンク数 / サイズを一度に見られます。ls -liの1列目が inode 番号です。ハードリンク同士ではこの値が同じです。- よくあるミス1: 5番で
findの結果をそのまま保存すると、./logs/2026/08/app1.logのようなパスが入ってしまいます。必要なのはファイル名だけです。 - よくあるミス2: 7番で
cpを使うと元のファイルが残って失敗します。移動はデータをコピーせず、ディレクトリエントリだけを書き換えます。
作業ディレクトリを作る
/root/work ディレクトリを作ってください。
ディレクトリを作るコマンドは mkdir です。パスは /root/work をそのまま使ってください。
最初のファイルを作る
/root/work/hello.txt を作り、1行目に hello labhub を入れてください。
echo の出力をファイルに送る(リダイレクト)か、vim で直接作っても構いません。
システムファイルをコピーする
/etc/hostname を /root/work/hostname にコピーしてください。内容が元と完全に同じでなければなりません。
cp は元のファイルをそのまま残して新しいファイルを作ります。コピーは元と内容が完全に同じでなければなりません。
入れ子のディレクトリを一度に作る
/root/work/logs/2026/08 ディレクトリを一度に作ってください。
mkdir は既定では、親ディレクトリがないと失敗します。上位のパスまで一度に作るオプションがあります。
ログファイルの一覧を取り出す
/root/work/logs/2026/08 の下に app1.log から app5.log までの5つを作り、そのファイルの名前だけ(パスは除く)を1行に1つずつ入れた /root/work/loglist.txt を作ってください。
find で .log ファイルを探しますが、必要なのはパス全体ではなくファイル名だけです。-printf や basename を思い出してみてください。
ハードリンクとシンボリックリンク
hello.txt を指すハードリンク /root/work/hello.hard と、シンボリックリンク /root/work/hello.link をそれぞれ作ってください。
ln はハードリンク、ln -s はシンボリックリンクです。stat で inode 番号(%i)とリンク数(%h)を比べてみてください。
ファイルを移動する
/root/work/draft.txt を作って draft の1行を入れたあと、/root/work/logs/2026/08/draft.txt に移動してください。
コピー(cp)ではなく移動(mv)です。元の場所には何も残ってはいけません。
ログディレクトリをバックアップする
/root/work/logs ディレクトリ全体を /root/work/backup.tar.gz に圧縮してまとめてください。
tar でまとめて gzip で圧縮するオプションの組み合わせが必要です。logs ディレクトリ全体を含めてください。