書式とオプションの読み方
マニュアルのcommand [OPTION]... FILE...では、角括弧は省略可能、...は複数指定可能という意味です。角括弧自体は入力しません。
ls -a -l
ls -al
ls --all --format=long上の3つは概ね同じ指定です。短いオプションはまとめられる場合がありますが、引数を取るオプションの位置には注意します。
| 確認方法 | 用途 |
|---|---|
command --help | 短い使い方を端末に表示 |
man command | 詳しいマニュアルを表示 |
type command | 外部コマンド、組み込み、別名のどれか確認 |
command -v name | 実行されるコマンドの場所を確認 |
type cd
command -v lscd is a shell builtin
/usr/bin/ls移動と一覧:pwd・cd・ls
| コマンド/指定 | 意味 |
|---|---|
pwd | 現在のディレクトリを絶対パスで表示 |
cd path | pathへ移動 |
cd ../cd ~/cd - | 一つ上/ホーム/直前へ移動 |
ls -l | 権限、所有者、容量、日時を長い形式で表示 |
ls -a | ドットで始まる項目も表示 |
ls -h | -lの容量をKiB、MiBなどで読みやすく表示 |
ls -t/-r | 更新日時順/並びを逆順 |
ls -d */ | 現在地のディレクトリ名だけを表示 |
ls -lahtr-l -a -h -t -rの組み合わせです。-tで新しい順にした後、-rで反転するため古い項目が先になります。
ファイル操作:mkdir・touch・cp・mv・rm
| 例 | 意味 |
|---|---|
mkdir -p a/b | 親も含めて作成。存在済みでもエラーにしない |
touch file | 空ファイル作成。存在すれば日時を更新 |
cp -i source dest | コピー。上書き前に確認 |
cp -r dir backup | ディレクトリを再帰コピー |
cp -a source backup | 属性を保ちながら再帰コピー |
mv -i old new | 移動・改名。上書き前に確認 |
rm -i file | 削除前に確認 |
rmdir empty-dir | 空ディレクトリだけを削除 |
mkdir -p ~/linux-practice/commands/docs
touch ~/linux-practice/commands/docs/memo.txt
cp -iv ~/linux-practice/commands/docs/memo.txt ~/linux-practice/commands/memo-copy.txt'.../docs/memo.txt' -> '.../memo-copy.txt'rm -rは配下、-fは確認なしで削除します。特にsudo、変数、*と組み合わせず、まずpwdとls -- targetで対象を確認してください。--は以降をオプションではなく名前として扱わせます。内容表示:cat・less・head・tail
| 例 | 意味 |
|---|---|
cat file | 全内容を標準出力へ表示 |
cat -n file | 全行へ行番号を付ける |
less file | 長い内容をスクロール表示。qで終了 |
head -n 5 file | 先頭5行 |
tail -n 20 file | 末尾20行 |
tail -f app.log | 追記を監視。Ctrl+Cで終了 |
printf 'red\ngreen\nblue\n' > colors.txt
cat -n colors.txt 1 red
2 green
3 blueバイナリファイルをcatすると端末表示が乱れることがあります。種類が不明なら先にfile filenameで確認します。
検索:grep・find
| オプション | 意味 |
|---|---|
grep -i | 大文字・小文字を区別しない |
grep -n | 行番号を表示 |
grep -v | 一致しない行を表示 |
grep -r | ディレクトリを再帰検索 |
grep -E | 拡張正規表現を使用 |
grep -F | パターンを正規表現ではなく固定文字列として扱う |
find -type f/d | 通常ファイル/ディレクトリに限定 |
find -name pattern | 大文字小文字を区別して名前検索 |
find -iname pattern | 大文字小文字を区別しない名前検索 |
find -mtime -7 | 7日未満に変更された項目 |
find -size +10M | 10MiBより大きい項目 |
printf 'INFO start\nERROR disk\nerror network\n' > app.log
grep -in '^error' app.log2:ERROR disk
3:error networkfind . -type f -name '*.txt' -print'*.txt'はシェルではなくfindに解釈させるため引用します。find ... -deleteは結果を削除するため、まず-printで同じ条件を確認します。
テキスト処理:sort・uniq・wc・cut・tr
| 例 | 意味 |
|---|---|
sort file | 行を文字順に並べる |
sort -n/-r | 数値順/逆順 |
uniq -c | 連続する同じ行を数える。通常sortと併用 |
wc -l/-w/-c | 行数/単語数/バイト数 |
cut -d, -f2 | カンマ区切りの2列目 |
tr 'a-z' 'A-Z' | 標準入力の小文字を大文字へ置換 |
tee file | 画面表示しながらファイルにも保存 |
xargs | 標準入力をコマンド引数へ変換。空白を含む名前に注意 |
printf 'apple\norange\napple\n' | sort | uniq -c 2 apple
1 orangeCSVには引用符や改行を含められるため、複雑なCSVをcutだけで正確に解析することはできません。専用ツールやプログラミング言語のCSVライブラリを使います。
容量とシステム情報:df・du・free・uname
| 例 | 意味 |
|---|---|
df -h | ファイルシステム単位の空き容量を読みやすく表示 |
du -sh path | pathが使用する合計容量 |
du -h --max-depth=1 | 直下ごとの容量。GNU版で利用可能 |
free -h | メモリとスワップの使用状況 |
uname -a | カーネルを含むシステム情報 |
uptime | 稼働時間とロードアベレージ |
date '+%F %T' | 年月日と時刻を指定形式で表示 |
df -h /
du -sh ~/linux-practiceFilesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 12G 26G 32% /
24K /home/mity/linux-practicedfはファイルシステム全体、duは指定した項目を走査した合計です。削除済みファイルをプロセスが開いたままの場合など、値が一致しないことがあります。
プロセス:ps・pgrep・kill・jobs
| 例 | 意味 |
|---|---|
ps aux | 全ユーザーのプロセスを詳細表示 |
ps -ef | 親子関係を含む別形式の全プロセス表示 |
pgrep -a name | 名前に一致するPIDとコマンド行 |
top | CPU・メモリ使用状況を継続表示。qで終了 |
jobs -l | 現在のシェルのバックグラウンドジョブ |
kill PID | PIDへSIGTERMを送信 |
kill -l | シグナル一覧 |
sleep 60 &
pgrep -a sleep
kill $!4210 sleep 60$!は直前にバックグラウンド実行したプロセスのPIDです。他の利用者やシステムのPIDを確認せず終了させないでください。
ネットワーク:ip・ss・getent・curl
| 例 | 意味 |
|---|---|
ip -brief address | インターフェースとアドレスを短く表示 |
ip route | 経路表を表示 |
ss -lnt | TCP待受を数値で表示 |
ss -lntp | 可能ならプロセスも表示 |
getent hosts name | システム設定に従い名前解決 |
curl -I URL | HTTPレスポンスヘッダーを取得 |
curl -L URL | リダイレクトに追従 |
curl -fS URL | HTTPエラーを失敗にする。-Sは-s併用時もエラーを表示 |
curl -sS -o /dev/null -w '%{http_code}\n' https://example.com/200-sSは通常の進捗を消しつつエラーを表示、-o /dev/nullは本文を捨て、-wは指定情報を表示します。URLから取得したスクリプトをそのままシェルへ渡さないでください。
アーカイブ:tar・gzip・zip
| 例 | 意味 |
|---|---|
tar -cf a.tar dir | tarアーカイブを作成 |
tar -czf a.tar.gz dir | gzip圧縮して作成 |
tar -tf a.tar | 展開せず内容一覧 |
tar -xzf a.tar.gz -C dest | destへ展開 |
gzip file/gunzip file.gz | 単一ファイルの圧縮/展開 |
zip -r a.zip dir | ZIPを再帰作成。別途導入の場合あり |
unzip -l a.zip | ZIPの内容一覧 |
tar -czf docs.tar.gz docs
tar -tzf docs.tar.gz
mkdir -p restored
tar -xzf docs.tar.gz -C restoredパイプ・リダイレクト・終了ステータス
| 記号 | 意味 |
|---|---|
| | 左の標準出力を右の標準入力へ渡す |
>/>> | 標準出力を上書き保存/追記 |
2> | 標準エラー出力を保存 |
&> | 標準出力と標準エラーを保存(Bash) |
&& | 左が成功したときだけ右を実行 |
|| | 左が失敗したときだけ右を実行 |
$? | 直前の終了ステータス。通常0は成功 |
"$name" | 変数展開後も一つの引数として扱う |
mkdir -p output && printf 'done\n' > output/result.txt
cat output/result.txt
echo $?done
0rm $fileでは空白やワイルドカードが再解釈されます。通常はrm -- "$file"のように引用し、オプションの終端も示します。ミニ課題:大きいログを探して集計する
練習ディレクトリから.logを探し、ERRORを含む行数をファイル別に表示してください。
mkdir -p ~/linux-practice/logs
printf 'INFO\nERROR\nERROR\n' > ~/linux-practice/logs/app.log
grep -Hc 'ERROR' ~/linux-practice/logs/*.log/home/mity/linux-practice/logs/app.log:2-Hはファイル名、-cは一致した行数を表示します。ファイルが非常に多い場合や名前に改行を含み得る場合は、単純なワイルドカードやxargsではなくfind -print0とxargs -0などを検討します。
