Linux

ファイルとディレクトリ

パスを正しく読み、安全に作成・検索・コピーする方法を学びます。

01

絶対パスと相対パス

/から始まる絶対パスは現在地に依存しません。相対パスは現在地を基準にします。

練習場所COMMAND
mkdir -p ~/linux-practice/project/docs
cd ~/linux-practice/project
printf 'guide\n' > docs/guide.txt
realpath docs/guide.txt
表示例OUTPUT
/home/mity/linux-practice/project/docs/guide.txt

docs/guide.txtが相対パス、表示されたものが絶対パスです。ユーザー名部分は環境により変わります。

02

作成・コピー・移動・削除

安全な操作例COMMAND
cd ~/linux-practice/project
mkdir -p backup
cp -v docs/guide.txt backup/
mv -v backup/guide.txt backup/guide-old.txt
ls -R
表示例OUTPUT
'docs/guide.txt' -> 'backup/guide.txt'
renamed 'backup/guide.txt' -> 'backup/guide-old.txt'
.:
backup  docs

./backup:
guide-old.txt

./docs:
guide.txt

-vは処理対象を表示します。ディレクトリのコピーにはcp -rが必要です。

rmは取り消せない 練習ではrm -i backup/guide-old.txtのように確認付きで削除します。変数、ワイルドカード、sudoを伴う削除は対象が広がる危険があります。
03

ワイルドカードと引用符

名前を展開COMMAND
touch report-01.txt report-02.txt image.png
printf '%s\n' report-*.txt
実行結果OUTPUT
report-01.txt
report-02.txt

*は0文字以上、?は任意の1文字、[12]は1または2です。空白を含む名前は"sales report.txt"のように引用します。find -name '*.txt'では、findへパターンを渡すため引用符が必要です。

04

リダイレクトとパイプ

標準入力は0、標準出力は1、標準エラー出力は2として扱われます。

出力をつなぐCOMMAND
printf 'error\ninfo\nerror\n' > app.log
grep 'error' app.log | sort | uniq -c
grep 'missing' app.log > result.txt
echo $?
実行結果OUTPUT
      2 error
1

|は左の標準出力を右の標準入力へ渡します。終了ステータス0は成功、0以外は失敗や「一致なし」などを表します。このgrepは一致がないため1です。

>は上書き command > fileは実行前にfileを空にします。追記は>>、エラーだけを保存するなら2>です。
07

tarでまとめて圧縮する

作成・内容確認・展開COMMAND
tar -czf project.tar.gz docs
tar -tzf project.tar.gz
mkdir restored
tar -xzf project.tar.gz -C restored
一覧の例OUTPUT
docs/
docs/guide.txt

cは作成、tは一覧、xは展開、zはgzip、fの直後はアーカイブ名です。入手元が不明なアーカイブは、先にtar -tfでパスを確認します。

PRACTICE

ミニ課題:エラーログ集計

3行以上のログを作り、ERRORを含む行だけをerrors.txtへ保存し、行数を表示してください。

解答例COMMAND
printf 'INFO start\nERROR disk\nINFO retry\nERROR network\n' > server.log
grep 'ERROR' server.log > errors.txt
wc -l errors.txt
実行結果OUTPUT
2 errors.txt