サーバーで「ポートが使用中」
逆引き表の1行目: ss -tulnp | grep :8080 で PID を探し、kill <PID>。または直接 kill -9 $(lsof -t -i :8080)。
Guide
Linux コマンド早見表は、ターミナルで日常的に打つ160件のコマンドを「ファイルとディレクトリ、内容の表示と編集、テキスト処理、権限とユーザー、プロセスとサービス、ネットワーク、圧縮とアーカイブ、システム情報と管理」の8分類に整理し、それぞれに1文の解説と、そのままコピーできる例を数行付けています。ls、find、grep、sed、awk、tar、curl、ss、journalctl のようにオプションが多いコマンドには、よく使うオプション表も展開表示できます。
更新日 2026-09-094 sources7 min read
Linux コマンド早見表は、ターミナルで日常的に打つ160件のコマンドを「ファイルとディレクトリ、内容の表示と編集、テキスト処理、権限とユーザー、プロセスとサービス、ネットワーク、圧縮とアーカイブ、システム情報と管理」の8分類に整理し、それぞれに1文の解説と、そのままコピーできる例を数行付けています。ls、find、grep、sed、awk、tar、curl、ss、journalctl のようにオプションが多いコマンドには、よく使うオプション表も展開表示できます。
このページは2通りの探し方に対応します。1つはコマンド名はわかっているが引数を忘れたとき(tar、chmod で検索)。もう1つは「何を見たいか」しかわからないとき——「どのプロセスが 8080 を使っているか」「どのディレクトリが一番ディスクを占めているか」「このサービスはなぜ起動しないのか」——そのために「これを見たい… → どのコマンドを使うか」の逆引き表を用意し、先に目的を示してから、それを得られる2–3件のコマンドを推奨から互換の順に並べています。
ページ下部にはブラウザーで動くシミュレーター端末があります。メモリ上のファイルシステムと60以上のコマンドを備えた Shell インタープリターで、パイプ、リダイレクト、ワイルドカード、sed/awk のよく使うサブセットに対応しています。8つの練習ステージはディレクトリ構造の作成からパイプでのログ集計までを扱います。あなたの PC にアクセスせず、ネットワークもないので、rm -rf を打ち間違えてもステージがリセットされるだけです。
help でシミュレーターが対応する全コマンドを一覧でき、Tab でファイル名を補完できます。「ポート」で検索すると、コマンド一覧と逆引き表の両方に一致します:
シミュレーター端末のステージ8「パイプの組み合わせ」の解答例:
これを見たい:どのプロセスが特定のポートを使っているか
ss -tulnp | grep :8080
lsof -i :8080
netstat -tulnp | grep 8080 古いシステム
ネットワーク › ss -tulnp 待ち受けポートと対応プロセスを見る(netstat の代替)
ネットワーク › lsof -i :<ポート> どのプロセスがそのポートを使っているかuser@toolun-lab:~$ awk '{print $2}' access.log | sort | uniq -c | sort -rn
3 /index.html
2 /api/list
2 /about
✔ クリア:パイプの組み合わせ:最も多くアクセスされたパス。Unix 設計の2つの原則がこの一覧の形を決めています。「すべてはファイル」: デバイス、プロセス情報(/proc)、ソケットはすべてファイルとして公開されるため、cat /proc/cpuinfo、ls -l /dev/sd*、echo > /dev/tcp/host/port のような奇妙に見える使い方も成立します。「各プログラムは1つのことをうまくやる」: grep は絞り込みだけ、sort は並べ替えだけ、uniq は隣接する重複の統合だけ、wc は数えるだけ。どれも小さく、その威力はパイプでつなげることで生まれます。
だからこそ早見表の例には | が頻出します。awk '{print $1}' access.log | sort | uniq -c | sort -rn | head は5つの小さなプログラムで「最もアクセスの多い IP」を組み立てます。各段の入出力を理解するほうが、コマンド全体を丸暗記するより役に立ちます。
各プロセスは起動時に3つの開かれた「ファイル」を持ちます。標準入力(0)、標準出力(1)、標準エラー(2)です。> は標準出力をファイルへ、2> はエラーストリームを、2>&1 はエラーを出力へ合流させ、&> は bash の省略形です。日常で最もよく使うのは cmd > out.log 2>&1 & で、通常出力とエラーの両方をログに入れてからバックグラウンドへ送ります。2>&1 を忘れるのは「ログにエラーが出ない」原因の第1位です。
ls -l の1列目 -rwxr-xr-x は4段に分かれます。種類(- はファイル、d はディレクトリ、l はリンク)、その後に所有者・所属グループ・その他のユーザーそれぞれ3桁の読み(4)・書き(2)・実行(1)です。3桁を足すと数字表記になります。rwx=7、r-x=5、r--=4、したがって 755 は「自分は全部、他は読みと実行だけ」、644 は「自分は読み書き、他は読みだけ」です。ディレクトリでは x は「中に入れる」を意味し、x のないディレクトリは r があっても中身を一覧できません。600/700 は秘密鍵と ~/.ssh に使い、SSH クライアントは権限が緩すぎる鍵ファイルを拒否します。他の組み合わせは chmod 計算 でチェックを入れて確認できます。
kill という名前は誤解を招きます。実際はプロセスにシグナルを送るだけです。既定の TERM(15)は「終了してください」で、プログラムには状態を保存する機会があります。KILL(9)はカーネルが直接終了させ、プログラムに機会は一切ありません。だからまず kill、数秒待ってだめなら kill -9 です。HUP(1)はデーモンでは「設定を再読み込み」の約束事で、nginx -s reload の裏側はこれです。
最近のディストリビューションは systemd でサービスを管理します。systemctl が起動・停止と自動起動を、journalctl がそれらのログをまとめて収集します。「サービスが起動しない」ときの定番の流れは、systemctl status で状態と直近のログ → journalctl -u <サービス> -n 100 で完全なエラー → ss -tlnp でポートがすでに使われていないかの確認、です。
ifconfig、netstat、route、arp はメンテナンスが終了した net-tools に属し、新しいシステムには既定で入っていません。対応する代替は iproute2 の ip addr、ss、ip route、ip neigh です。早見表は両方を載せ、逆引き表では新しいツールを先に置いています。ss -tulnp の5文字はそれぞれ TCP、UDP、待ち受け、数値のポート、プロセスを意味し、ポート問題の調査でほぼ定番の書き出しです。
GNU sed の -i は引数なしで使えますが、BSD sed(macOS 標準)は -i の後にバックアップ接尾辞が必須なので、sed -i '' 's/a/b/' file と書きます。同様の違いに date -d(GNU)と date -v(BSD)、古い macOS に存在しない readlink -f があります。早見表は GNU 版を基準にし、macOS との差は項目の注記に書いています。brew install coreutils gnu-sed で GNU 版を入れられます。
yast など)、デスクトップ環境のコマンド、プログラミング言語付属の CLI は収録していません。sed は s///、N,Mp、Nd のみ、awk は {print $N} のみです。ネットワークはなく(curl、ssh、apt は理由を説明します)、実プロセスもなく(ps、top、kill は固定のデモデータを返します)、対話的なエディターもありません(ファイルの書き込みは echo >、cat >> を使います)。逆引き表の1行目: ss -tulnp | grep :8080 で PID を探し、kill <PID>。または直接 kill -9 $(lsof -t -i :8080)。
「テキスト処理」グループは grep -A3 -B1 で前後を表示するところから、awk/sort/uniq -c で集計、tail -F でローテーションするログを追うところまで一通り揃っています。練習端末のステージ3と8がまさにこの2つです。
tar -czvf → scp / rsync -avz → tar -xzvf -C /var/www/ の3つは隣り合っています。rsync --delete の落とし穴は注記にあります。
「システム情報と管理」グループを cat /etc/os-release、nproc、free -h、df -h、ss -tlnp、systemctl list-units の順に一通り見れば、10分で全体像がつかめます。
ほぼ無理です。Linux にゴミ箱はなく、rm は inode を直接解放します。重要なディレクトリを操作する前に ls でパスを確認し、スクリプトでは変数を引用符で囲んで空かどうかも判定するか(rm -rf "${DIR:?}"/)、trash-cli のようなツールを rm の代わりに使ってください。
多くの場合、ターミナルかファイルの文字コードが一致していないためです。まず file ファイル名 で文字コードを確認し、GBK のファイルは iconv -f GBK -t UTF-8 で UTF-8 に変換してから検索します。grep -a を使うと、バイナリと誤判定されたファイルをテキストとして扱えます。
ss -tulnp の列は順に Netid、State、Recv-Q、Send-Q、Local Address:Port、Peer Address:Port、Process です。ポートは Local Address:Port 列(*:8080 や 0.0.0.0:8080 は全 NIC で待ち受け)で探し、プロセスは最後の列の users:(("node",pid=842,fd=18)) で探します。
ブラウザー内で動いており、ネットワークスタックもなく、あなたの代わりにリクエストを送るべきでもないからです。これらのコマンドは理由を1文返し、早見表の項目を案内します。練習の中心はファイル、テキスト、権限の操作で、これらはメモリ上のファイルシステムで完全に使えます。
自分に権限のあるファイルを読むだけなら不要です。システムディレクトリ(/etc、/usr)の変更、1024 未満のポートのバインド、他人のプロセスの詳細表示、サービスとパッケージの管理には root が必要です。sudo は1つのコマンドを root として実行させるもので、root に切り替えて作業し続けるより安全です。
早見データ、逆引き表、シミュレーター端末はすべてページと一緒にダウンロードされ、ブラウザー内で動作します。検索・コピー・練習はリクエストを送信しません。お気に入りは端末の localStorage に保存されます。シミュレーター端末のファイルシステムは現在のページのメモリ上にだけ存在し、更新すると消え、実際のファイルの読み書きは行いません。
ls、cp、sort、cut などの基本コマンドの権威ある説明。ss(8)、ip(8)、find(1)、grep(1) を含みます。更新日 2026-09-09
160 件の Linux/Shell コマンドをファイル・テキスト・権限・プロセス・ネットワーク・圧縮・システム別に分類し、オプション表と実例を掲載。「何を見たいか → どのコマンドか」の逆引き表、検索・コピー・お気に入り、練習用端末付き
このツールの翻訳は未完了です。一部は原文または代替言語で表示されます。
出力目標からの逆引きです。知りたいことを先に書き、それを表示できるコマンドを2〜3件、新しい順・推奨順に並べます。
pwd # /var/www/site
ls -la # 詳細 + 隠しファイル ls -lh # 人間が読めるサイズ ls -lt | head # 更新時刻の逆順に最新を表示
| -l | 長い形式: 権限、所有者、サイズ、時間 |
| -a | で始まる隠しファイルが含まれています。 |
| -h | サイズ(K/M/G) |
| -t | 変更時刻で並べ替える |
| -S | サイズごとに並べ替える |
| -R | 再帰的なサブディレクトリ |
| -d | ディレクトリ自体をリストするだけで、入力しないでください |
cd /var/log cd .. # 前のレベル cd - # 前のディレクトリに戻ります cd # ホームディレクトリ (cd ~ と同じ)
mkdir -p app/src/{components,utils}
mkdir -m 700 private| -p | 再帰的に作成します。すでに存在する場合でもエラーは報告されません |
| -m | 権限を指定する |
| -v | 作成されたものを表示する |
touch README.md touch -d "2026-01-01" old.log # 時間を指定します
cp a.txt b.txt cp -r src/backup/ # ディレクトリには -r が必要です cp -a /etc/nginx ~/nginx-bak # 権限と時間を予約します
| -r / -R | ディレクトリを再帰的にコピーする |
| -a | アーカイブ: -dR --preserve=all と同じ |
| -i | 取材前に質問する |
| -n | 既存のファイルを上書きしないでください |
| -u | ソースが更新された場合のみコピーする |
| -v | プロセスを表示 |
mv old.txt new.txt # 名前を変更 mv *.log logs/ # バッチ移動 mv -i a.txt dir/ # 上書きする前に確認する
| -i | 取材前に質問する |
| -n | 対象外 |
| -f | フォースカバレッジ |
| -v | プロセスを表示 |
rm file.txt rm -r build/ # ディレクトリを削除 rm -rf node_modules # 存在しないことを確認または無視しない
rm はごみ箱に入りません。 rm -rf の前に、パス変数をエコーして空かどうかを確認します。DIR が空の場合、rm -rf "$DIR"/ は rm -rf / と同じになります。
| -r | ディレクトリを再帰的に削除する |
| -f | 質問しないで、存在しないことを無視してください |
| -i | 一つ一つ確認していく |
| -d | 空のディレクトリを削除する |
| -- | 以下のパラメータは不適切なオプションです(-で始まるファイルを削除します) |
rmdir empty-dir rmdir -pa/b/c # 空の親ディレクトリとともに
ln -s /opt/app/current ~/app ln -sf new-target link # 既存のリンクを上書きします readlink -f link # リンクが指している場所を確認する
find . -name "*.log"
find /var -type f -size +100M # 100MB を超えるファイル
探す 。 -mtime -7 -name "*.js" # 7 日以内に変更されました
find . -name "*.tmp" -delete
find . -type f -exec chmod 644 {} \;| -name / -iname | 名前による (-iname は大文字と小文字を無視します) |
| -type f|d|l | ファイル/ディレクトリ/リンク |
| -size +10M / -1k | サイズ別 |
| -mtime -N / +N | N 日以内/N 日前に変更されました |
| -maxdepth N | 深さを制限する |
| -exec cmd {} \; | 結果ごとにコマンドを実行 |
| -delete | マッチを削除する |
| -empty | 空のファイルまたはディレクトリ |
sudo updatedb locate nginx.conf
which python3 ls # bash ビルトインと入力すると、エイリアス / ビルトイン / 外部コマンドが表示されます command -v node # コマンドがスクリプト内に存在するかどうかを確認します
tree -L 2 Tree -a -I "node_modules|.git" # 除外します
file photo.bin # photo.bin: JPEG image data, ...
stat app.log stat -c "%s %n" * # サイズと名前のみ
du -sh . du -sh * |ソート -rh | head # 最も多くのスペースを占めるのは誰ですか du -h --max-depth=1 /var
| -s | 合計のみを表示 |
| -h | 人間が読める |
| --max-depth=N | 制限レベル |
| -a | ファイルが含まれています |
df -h df -h /home df -i # i ノードの使用量 (ファイルが多すぎる場合はフル)
basename /var/log/syslog # syslog basename report.pdf .pdf # report dirname /var/log/syslog # /var/log
realpath ../config.yml
rsync -avz --progress src/ user@host:/srv/app/ rsync -av --delete ./dist/ /var/www/site/ # ターゲット内の冗長ファイルも削除します rsync -avn src/ dst/ # -n プレビューのみ
ソース ディレクトリの末尾にある / の有無によって意味が異なります。src/ はコンテンツを同期し、src はディレクトリ自体を同期します。
| -a | アーカイブ モード (再帰的 + 属性を保持) |
| -v | プロセスを表示 |
| -z | 伝送圧縮 |
| --delete | ターゲット側の冗長ファイルを削除する |
| -n / --dry-run | プレビューのみ |
| --exclude=PAT | 除外する |
| -P | 進行状況 + ブレークポイントから再開 |
scp app.tar.gz user@1.2.3.4:/tmp/ scp -r user@host:/var/log/app ./logs scp -P 2222 file user@host:~ # ポートを指定します (大文字の P)
cat config.yml cat -n app.js # 行番号付き cat a.txt b.txt > all.txt # スプライシング
| -n | 行番号 |
| -A | 非表示の文字を表示する (^M は CRLF) |
| -s | 連続した空白行を圧縮する |
less /var/log/syslog #/キーワード検索 n 次 G 終了 g 先頭 q 終了 F フォロー (tail -f と同様)
| -N | 行番号を表示 |
| -S | ラインを壊さないでください |
| +F | フォローモードに入る |
| -i | 検索では大文字と小文字が区別されません |
head -n 20 app.log head -c 100 file.bin # 最初の 100 バイト head -n -5 ファイル # 最後の 5 行を除く
tail -n 50 app.log tail -f /var/log/nginx/access.log tail -F app.log # ファイルがローテーションされた後も追跡を続行します
| -n N | 次の N 行 |
| -f | フォローして追加 |
| -F | 手順に従ってファイルの再構築を処理します |
| -n +N | N行から最後まで |
wc -l access.log ls | wc -l #ディレクトリにはいくつのアイテムがありますか? 猫 *.py | wc -l # コードの行数
diff -u old.conf new.conf diff -r dir1 dir2 # ディレクトリを比較します diff <(sort a) <(sort b) # ソートされた内容を比較します
| -u | 統一フォーマット |
| -r | ディレクトリを再帰的に比較する |
| -q | 異なる場合のみ報告 |
| -w | 空白を無視する |
| -i | 大文字と小文字を無視する |
cmp a.bin b.bin
nl -ba script.sh # 空行にも番号が付けられます
tac app.log | less
strings app.bin | grep -i version
xxd file.bin | head -20 xxd -r dump.txt > file.bin # 復元
nano /etc/hosts # Ctrl+O 保存 Ctrl+X 終了 Ctrl+W 検索 Ctrl+K 線を切り取る
vim app.conf # :wq 保存して終了します:q!保存せずに終了 /単語検索 dd 行を削除 u 元に戻す :nu 行番号を設定
make 2>&1 | tee build.log エコー「テキスト」 | sudo tee /etc/file # sudo を使用して保護されたファイルを書き込む cmd | tee -a log.txt # 追加
ls > list.txt echo "line" >> notes.txt cmd > out.log 2>&1 # すべてをログに記録します cmd 2>/dev/null # エラーを破棄します cmd &> all.log # bash の省略形
ps aux | grep nginx cat log | grep ERROR | wc -l history | tail -20
grep -rn "TODO" src/
grep -i error app.log
grep -v "^#" nginx.conf | grep -v "^$" # コメントと空白行を削除します
grep -E "5[0-9]{2}" access.log # 拡張正規表現
grep -l "main" *.c # ファイル名のみをリストします
grep -A3 -B1 "Exception" app.log # コンテキストの最初の 1 行と最後の 3 行| -r / -R | 再帰ディレクトリ |
| -n | 行番号を表示 |
| -i | 大文字と小文字を無視する |
| -v | 選択範囲を反転 (パターンのない行) |
| -E | 拡張正規表現 (egrep と同じ) |
| -F | 固定文字列として |
| -w | 単語全体が一致する |
| -c | 行数を数えるだけ |
| -l | 一致するファイル名のみをリストする |
| -o | 一致する部分のみを出力する |
| -A/-B/-C N | N 行のコンテキストの後/前/前後 |
| --include="*.js" | 再帰時のファイル名を制限する |
rg "TODO" --type ts
rg -n "fetch\(" src/sed 's/foo/bar/g' a.txt # 置換結果を出力する sed -i 's/foo/bar/g' a.txt # ファイルを直接変更する (GNU) sed -i.bak 's/8080/80/' app.conf # 変更を加える前にバックアップを作成します sed 's#/usr/local#/opt#g' f # 区切り文字は置き換え可能
| -i | その場で変更 (macOS では -i '' が必要) |
| -n | p コマンドで選択した行のみを印刷します。 |
| -e | 複数のスクリプト |
| -E | extended regular |
| g flag | Replace all in one line |
sed -n '10,20p' app.log # 10 ~ 20 行目 sed '5d' f.txt # 5行目を削除 sed '/^$/d' f.txt # 空行を削除 sed '3i\new line' f.txt # 3行目より前に挿入
awk '{print $1}' アクセスログ |並べ替え |ユニーク -c | sort -rn | head # 最も訪問された IP
awk -F: '{print $1}' /etc/passwd # ユーザー名
awk '$3 > 100 {print $0}' data.txt # 3 番目の列は 100 行を超えています
awk '{sum += $2} END {print sum}' f # 合計| -F <区切り文字> | フィールド区切り文字 (デフォルトは空白) |
| $0 / $1 / $NF | 行全体 / 1列目 / 最後の列 |
| NR | 現在の行番号 |
| BEGIN{} / END{} | 開始前/終了後に実行 |
| /通常/{…} | 一致する行のみを処理する |
cut -d, -f1,3 data.csv cut -d: -f1 /etc/passwd Cut -c1-8 ファイル番号を文字位置で切り取る
sort names.txt sort -n nums.txt # 数値順 sort -k2 -t, -r data.csv # 列 2 を逆順に並べ替えます sort -u list.txt # 重複を並べ替えて削除します sort -h size.txt # K/M/G サイズに応じて
| -n | 値による |
| -r | 逆順 |
| -k N | N列ごと |
| -t <区切り文字> | 列区切り記号 |
| -u | 重複を削除する |
| -h | 人間が判読できるサイズ |
| -V | バージョン番号のソート (1.2 < 1.10) |
sort words.txt | uniq -c | sort -rn .txt を並べ替える | uniq -d # 重複のみを表示 .txt を並べ替える | uniq -u # 一意のものだけを表示します
echo hello | tr a-z A-Z # HELLO tr -d '\r' < win.txt > unix.txt # CR を削除します tr -s ' ' < f # 連続するスペースを圧縮する エコー $PATH | tr ':' '\n' # 1 行に 1 つ
find . -name "*.log" | xargs rm
探す 。 -name "*.txt" -print0 | xargs -0 wc -l # ファイル名にスペースが含まれています
猫の URL.txt | xargs -n1 -P4curl -sO # 4 方向並列
echo a b c | xargs -I{} echo "item: {}"| -0 | NUL で区切られています (find -print0 を使用) |
| -n N | 毎回 N 個のパラメータを渡します |
| -I {} | スペースを占有するには {} を使用します |
| -P N | N並列 |
| -r | 入力が空の場合は実行しない |
paste -d, names.txt emails.txt
join -t, -1 1 -2 1 <(sort a.csv) <(sort b.csv)
cat /etc/fstab | column -t mount | column -t
echo abc | rev # cba
折りたたむ -w 80 -s long.txt # -s スペースで折りたたむ
iconv -f GBK -t UTF-8 gbk.txt > utf8.txt iconv -l | grep -i gb # サポートされているエンコーディングをリストする
dos2unix script.sh sed -i "s/\r$//" script.sh # dos2unixがインストールされていない場合
curl -s https://api.github.com/repos/git/git | jq .stargazers_count jq ".items[] | .name" data.json jq -r ".[].id" list.json # -r 引用符なしの元の文字列 猫 a.json | jq 。 # フォーマット
echo "Hello" echo -e "a\tb\nc" echo $HOME echo "PATH=$PATH" >> ~/.bashrc
printf "%-10s %5d\n" name 42 printf "%.2f\n" 3.14159 printf "%s\n" *.txt # 1 行に 1 つのファイル名
seq 1 10 seq 0 5 100 # ステップサイズ 5 for i in $(seq 1 3); do echo $i; done
echo "2^10" | bc echo "scale=3; 10/3" | bc エコー "obase=16; 255" | bc # 16進数に変換
chmod 755 script.sh # rwxr-xr-x chmod 644 file.txt # rw-r--r-- chmod 600 ~/.ssh/id_ed25519 # 自分だけが読み書きできる chmod -R 755 public/ # 再帰的
| 755 | ディレクトリ/実行ファイルの共通の値 |
| 644 | 通常のファイルの共通の値 |
| 600 | 秘密キーとパスワードのファイル |
| 700 | プライベートディレクトリ (~/.ssh など) |
| -R | 再帰 |
chmod +xdeploy.sh # 実行可能ファイルを追加 chmod u+w,go-w file # 所有者は書き込み可能ですが、他の人は書き込みできません chmod a-x file chmod g+sshared/ # ディレクトリ setgid: 新しいファイル継承グループ
sudo chown www-data:www-data -R /var/www/site sudo chown $USER file.txt chgrp 開発者プロジェクト/ # シャッフルのみ
umask umask 027 # グループは読み取り専用、他のグループには権限がありません
sudo apt update sudo -i # root対話型シェルに切り替える sudo -u postgres psql # 別のユーザーとして実行 須藤!! # sudo を使用して以前のものを再実行します
su - deploy 出る # 戻ってくる
whoami id id デプロイ # 他のユーザーを表示
sudo useradd -m -s /bin/bash deploy sudo passwd deploy sudo usermod -aG sudodeploy # sudo グループに参加する
sudo usermod -aG docker $USER newgrp docker # または、再度ログインして有効にします
sudo userdel -r olduser
passwd sudo passwd deploy sudo passwd -l デプロイ # アカウントをロックする
groups groups www-data cat /etc/group | grep docker
who w last -n 10 lastlog
ssh-keygen -t ed25519 -C "me@example.com" cat ~/.ssh/id_ed25519.pub ssh-copy-id user@host # 公開キーをサーバーにインストールします
ssh user@1.2.3.4 ssh -p 2222 user@host #ポートを指定 ssh -i ~/.ssh/key.pem ubuntu@host ssh -L 8080:localhost:80 user@host # ポートフォワーディング ssh user@host "uptime" # コマンドを 1 つだけ実行する
| -p | ポート |
| -i | 秘密鍵ファイル |
| -L ローカル:ターゲット:ポート | ローカルポートフォワーディング |
| -N | 転送だけではシェルは開きません |
| -v | 接続の問題のデバッグ |
Host prod
HostName 1.2.3.4
User deploy
Port 2222
IdentityFile ~/.ssh/prod_keyps aux | grep nginx ps -ef | grep java ps aux --sort=-%mem | head # 最もメモリを消費する ps -p 1234 -o pid,etime,cmd # プロセスの実行時間はどれくらいですか?
| aux | BSD スタイル: 端末を含むすべてのユーザー、冗長 |
| -ef | UNIX 形式: 親プロセスを含むすべてのプロセス |
| --sort=-%cpu | CPU ごとに逆順に並べ替える |
| -p PID | プロセスの指定 |
| -o フィールド | カスタム列 |
pgrep -f "node server.js" pgrep -l nginx # 名前付き pkill -f "node server.js" # 検索して強制終了します
top top -o %MEM top -p 1234 # 特定のプロセスのみを表示します
htop htop -u www-data
kill 1234 kill -9 1234 # 従わない場合は殺す kill -HUP 1234 # サービスに設定を再ロードさせます kill -l # シグナルリスト
| -15 / -TERM | デフォルト: 通常の終了を要求します |
| -9 / -KILL | クリーンアップの機会を与えずに強制終了 |
| -1 / -HUP | 構成のオーバーロードによく使用されます |
| -2 / -INT | Ctrl+C と同じ |
| -STOP / -CONT | 一時停止/再開 |
killall node killall -9 chrome
npm run build & jobs fg %1 # Ctrl+Z で現在のフォアグラウンド タスクを一時停止し、バックグラウンドでタスクを続行します
nohup python server.py > server.log 2>&1 & エコー$! # PID はまだ始まったばかりです
tmux new -s work # Ctrl+B を押してから d を押して区切る tmux ls tmux attach -t work tmux kill-session -t work
systemctl status nginx systemctl status --failed # サービスの失敗
sudo systemctl restart nginx sudo systemctl reload nginx # 接続を中断せずに設定をリロードする
sudo systemctl enable --now docker sudo systemctl disable apache2 systemctl is-enabled nginx
systemctl list-units --type=service --state=running systemctl list-unit-files | grep enabled
journalctl -u nginx -f journalctl -u app -n 200 --no-pager journalctl --since "1 hour ago" journalctl -p err -b # このブート以降のエラー sudojournalctl --vacuum-size=500M # クリーンアップ
| -u <ユニット> | サービス |
| -f | フォローする |
| -n N | 最後の N 行 |
| --since / --until | 時間範囲 |
| -p err | レベルでフィルタリングする |
| -b | 今回のスタートアップは |
| -k | カーネルメッセージ |
crontab -e # 毎日 3:30 にバックアップ 30 3 * * * /opt/scripts/backup.sh >> /var/log/backup.log 2>&1 # 5分ごと */5 * * * * /usr/bin/curl -s https://example.com/ping crontab -l # 表示
echo "systemctl restart app" | at 03:00 atq #キュー atrm 3 # 削除
watch -n 2 "df -h" watch -d free -m # -d 変更をハイライト表示
time ./build.sh time curl -s https://example.com > /dev/null
timeout 10 ping example.com timeout -s KILL 30 ./stuck.sh
lsof -p 1234 lsof +D /var/log # このディレクトリ内のファイルを使用しているのは誰ですか? lsof | grep selected # 削除されたが占有されているファイル (ディスクは解放されていません)
strace -p 1234 strace -f -e trace=network node app.js strace -c ./cmd # 統計
nice -n 19 tar czf big.tgz data/ renice -n 10 -p 1234
ss -tulnp ss -tlnp | grep :80 ss -s # 接続統計 ss -tan state established
| -t / -u | TCP / UDP |
| -l | モニターのみ |
| -n | 数値ポートではサービス名が解決されません |
| -p | プロセスを表示 (すべてを表示するには root が必要です) |
| -a | すべてを接続する |
netstat -tulnp | grep 3000 netstat -an | grep ESTABLISHED | wc -l
lsof -i :8080 lsof -i tcp -sTCP:LISTEN kill -9 $(lsof -t -i :3000) # 占有者を直接キルします
ip addr ip -4 -br addr # ストリームライン ホスト名 -I # IP のみ
ip route ip Route get 8.8.8.8 # 特定のアドレスに行くにはどちらの方法でしょうか?
ping -c 4 example.com ping -i 0.2 -c 20 10.0.0.1
traceroute example.com mtr -rw example.com
curl -I https://example.com # 応答ヘッダーのみを読み取ります
カール -sS https://api.example.com/x | jq 。 # サイレントですがエラーを報告します
curl -o file.zip -L https://…/file.zip # ダウンロードしてリダイレクトに従います
curl -X POST -H "Content-Type: application/json" -d '{"a":1}' https://api.example.com/items
curl -u user:pass https://…
curl -w "%{http_code} %{time_total}\n" -o /dev/null -s https://example.com| -I | リクエストヘッダーのみ(HEAD) |
| -L | リダイレクトをフォローする |
| -o ファイル / -O | ファイルに保存 / リモート ファイル名を使用 |
| -Xメソッド | リクエスト方法 |
| -H "ヘッダー:値" | リクエストヘッダー |
| -d データ | リクエストボディ (デフォルトの POST) |
| -s / -S | サイレント/エラーありで静か |
| -v | インタラクション全体を表示 |
| -k | 証明書エラーを無視します (デバッグ用) |
| -w形式 | ステータスコード、所要時間などを出力します。 |
wget https://example.com/file.tar.gz wget -c https://…/big.iso # ダウンロードを続ける wget -qO- https://example.com | head # 画面への出力 wget -r -np -nH --cut-dirs=1 https://example.com/docs/
dig example.com dig +short example.com dig MX example.com dig @8.8.8.8 example.com # DNS を指定する dig -x 93.184.216.34 # 逆チェック
nslookup example.com nslookup -type=txt example.com
host example.com
sudo nano /etc/hosts 127.0.0.1 dev.example.com
nc -zv example.com 443 nc -l 8080 # モニター 8080 エコー「こんにちは」 | NCホスト8080 # データを送信
telnet smtp.example.com 25
sudo ufw status sudo ufw allow 22 sudo ufw allow 80/tcp sudo ufw allow from 10.0.0.0/8 to any port 5432 sudo ufw enable
開く前に必ず 22 を解放してください。そうしないと、SSH が自動的にロックアウトされます。
sudo firewall-cmd --list-all sudo firewall-cmd --add-port=8080/tcp --permanent sudo firewall-cmd --reload
sudo iptables -L -n -v --line-numbers sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
sudo tcpdump -i eth0 port 80 -nn sudo tcpdump -i any host 10.0.0.5 -w cap.pcap # ファイルを Wireshark に保存します
sudo iftop -i eth0 nload
ip neigh arp -a
tar -czvf site.tar.gz site/ tar -czf logs.tgz --exclude="*.tmp" logs/ tar -cJvf site.tar.xz site/ # xz 圧縮は小さく、低速になります
| -c | 作成する |
| -x | ほどく |
| -t | リストコンテンツ |
| -z / -j / -J | gzip / bzip2 / xz |
| -v | ファイルを表示 |
| -f ファイル | アーカイブ ファイル名 (ファイル名の後に続く必要があります) |
| -C ディレクトリ | ディレクトリに切り替えて操作してください |
| --exclude=PAT | 除外する |
tar -xzvf site.tar.gz tar -xzvf site.tar.gz -C /var/www/ tar -xf any.tar.* # 新しいバージョンの tar は圧縮形式を自動的に認識します tar -tzvf site.tar.gz # まず中身を見てみましょう
gzip big.log # big.log.gz を取得 gzip -k big.log # 元のファイルを保持します gunzip big.log.gz zcat big.log.gz | grep ERROR # 解凍せずに直接表示します
zip -r project.zip project/ -x "*/node_modules/*" zip -e Secret.zip file.txt # 暗号化
unzip archive.zip unzip archive.zip -d out/ unzip -l archive.zip # リストの表示のみ unzip -O gbk cn.zip # Windowsの中国語ファイル名が文字化けする場合
7z x archive.7z 7z a -mx9 out.7z dir/ 7z x file.rar
xz -9 big.sql xz -d big.sql.xz bzip2 -k file
split -b 100M big.iso part_ cat part_* > big.iso
sha256sum ubuntu.iso sha256sum -c SHA256SUMS md5sum file.zip
sudo dd if=ubuntu.iso of=/dev/sdX bs=4M status=progress && sync dd if=/dev/zero of=test.bin bs=1M count=100 # 100MB テストファイル
of= 間違ったデバイスに書き込むと、ディスクは直接消去されます。実行前にlsblkで3回確認してください。
uname -a uname -m # x86_64 / aarch64 cat /etc/os-release # リリースバージョン
hostnamectl sudo hostnamectl set-hostname web-01
uptime # ロード > CPU コア数 (nproc) はキューイングを示します
free -h free -m -s 2 # 2 秒ごとに更新
nproc lscpu | grep -E "Model name|^CPU\(s\)"
lsblk lsblk -f # ファイルシステムと UUID を使用 sudo fdisk -l
sudo mount /dev/sdb1 /mnt/usb sudo umount /mnt/usb マウント |列 -t # マウント済み cat /etc/fstab # ブート時に自動的にマウントします
vmstat 1 10
iostat -x 1 5
sudo dmesg -T | tail -50 sudo dmesg -T | grep -i "killed process" # 誰が OOM されましたか?
env | sort printenv HOME echo $PATH | tr ":" "\n"
export JAVA_HOME=/usr/lib/jvm/java-17 export PATH="$HOME/.local/bin:$PATH" echo 'export EDITOR=vim' >> ~/.bashrc && source ~/.bashrc
alias ll="ls -alF" alias gs="git status" unalias ll エイリアス番号リスト
history | grep ssh !105 sudo !! 履歴 -c # クリア
sudo apt update && sudo apt upgrade sudo apt install htop apt search nginx apt show nginx sudo apt remove --purge pkg && sudo apt autoremove
| update | ソフトウェアソースインデックスを更新 |
| upgrade | インストールされているパッケージをアップグレードする |
| install / remove | インストール/アンインストール |
| search / show | 検索・詳細 |
| autoremove | 不要になった依存関係をクリーンアップする |
| list --installed | インストール済みリスト |
sudo dnf install -y git sudo dnf update dnf search nginx sudo yum install epel-release # 古いシステム
sudo pacman -Syu sudo pacman -S neovim pacman -Ss keyword sudo pacman -Rns pkg
brew install jq brew upgrade brew list brew search ripgrep
sudo snap install code --classic snap list
sudo dpkg -i app.deb sudo apt -f install dpkg -l | grep nginx dpkg -L nginx #どのファイルがパッケージ化されますか?
sudo shutdown -h now sudo reboot sudo shutdown -r +10 "10分後にメンテナンスを再開します" sudo shutdown -c # キャンセル
date date "+%Y-%m-%d %H:%M:%S" date -d "yesterday" +%F 日付 +%s # タイムスタンプ date -d @1700000000 # タイムスタンプを日付に変換します
timedatectl sudo timedatectl set-timezone Asia/Shanghai timedatectl list-timezones | grep Asia
cal cal 2026 cal -3 # 1ヶ月前後
lsmod | grep nvidia sudo modprobe br_netfilter
lspci | grep -i vga lsusb
ulimit -n ulimit -n 65535 # 現在のセッション cat /proc/sys/fs/file-max
chsh -s $(which zsh) echo $SHELL
source ~/.bashrc 。 ~/.zshrc # シノニム
#!/usr/bin/env bash set -euo Pipefail # エラー、未定義変数エラー、パイプエラー送信時に停止 for f in *.log; do エコー「プロセス$f」 done
man tar man 5 crontab # セクション 5: ファイル形式 tar --help | less tldr tar # コミュニティ サンプル バージョン (インストールが必要)
メモリ上で動く小さなファイルシステムと Shell インタープリターです。ls / cd / cat / grep / sed / awk / find / chmod / tar など 60 以上のコマンドに対応し、パイプ、リダイレクト、ワイルドカードも使えます。8 つのステージは「ディレクトリ構造の作成」から「パイプで集計」まで。ネットワークに接続せず、実際のファイルにも触れません。Git の練習はGit コマンド早見表。