絶対パスと相対パス
/から始まる絶対パスは現在地に依存しません。相対パスは現在地を基準にします。
練習場所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.txtdocs/guide.txtが相対パス、表示されたものが絶対パスです。ユーザー名部分は環境により変わります。
作成・コピー・移動・削除
安全な操作例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を伴う削除は対象が広がる危険があります。ワイルドカードと引用符
名前を展開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へパターンを渡すため引用符が必要です。
リダイレクトとパイプ
標準入力は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>です。findとgrepで検索する
更新日時と文字列で検索COMMAND
find . -type f -name '*.log' -print
grep -Rni --include='*.txt' 'guide' .表示例OUTPUT
./app.log
./docs/guide.txt:1:guidegrep -Rは再帰、-nは行番号、-iは大文字小文字を区別しない指定です。大量の場所や/全体を検索すると時間と権限エラーが増えるため、開始位置を絞ります。
ハードリンクとシンボリックリンク
シンボリックリンクCOMMAND
ln -s docs/guide.txt guide-link.txt
ls -l guide-link.txt
cat guide-link.txt実行結果OUTPUT
lrwxrwxrwx 1 mity mity 14 Aug 29 11:00 guide-link.txt -> docs/guide.txt
guideシンボリックリンクは別のパスを指します。元を移動・削除するとリンク切れになります。ハードリンクln source hardlinkは同じ実体を指し、通常ディレクトリや別ファイルシステムには作れません。
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.txtcは作成、tは一覧、xは展開、zはgzip、fの直後はアーカイブ名です。入手元が不明なアーカイブは、先にtar -tfでパスを確認します。
ミニ課題:エラーログ集計
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