Linux コマンド早見表 — 用途別 200 以上のコマンド

ファイルと権限からネットワーク、systemd、テキスト処理まで、用途別の Linux コマンド。すべての項目にオプション、コピーできる例、macOS での注意点付き。

Linux コマンド チートシート · freetoolsforweb.com/tools/linux-commands-cheat-sheet · 2026-10-18 確認

最終確認日:2026-10-18、GNU coreutils 9.x、util-linux、procps-ng、iproute2、systemd、bash 5.2 の各マニュアル。macOS の注記は macOS 26 の man ページと照合 で確認。

15 セクション・全 215 件

テキストの表示と編集

ファイルを読み、ログをページ単位で確認し、ターミナルで編集し、バージョンを比較します。

cat

ファイルを表示・連結

Linux · macOS#
cat [-n] [-A] file...
-n
すべての行に行番号を付ける
-A
タブを ^I、行末を $ で表示(GNU)。CRLF の改行コードがわかる
cat /etc/os-release

ファイルを表示

cat part1.txt part2.txt > whole.txt

連結

cat -A script.sh | head

隠れたタブや Windows の ^M 改行を見つける

macOS/BSD: macOS の cat には -A がありません。同じ表示には cat -vet を使います。

tac

ファイルを最終行から逆順に表示

Linux#
tac file
tac access.log | head

新しいログ行から表示

macOS/BSD: macOS にはありません。tail -r file を使います。

less

長いファイルや出力をページ単位で表示

Linux · macOS#
less [-N] [-S] [+F] file
Space / b
次のページ / 前のページ
/text
前方検索。n で次、N で前へ
g / G
先頭 / 末尾へ移動
F
tail -f のようにファイルを追跡。Ctrl+C で停止
q
終了
-N
行番号を表示
-S
長い行を折り返さない(横スクロール)
less /var/log/syslog

ログを読む

journalctl -u nginx | less -S

長い行を折り返さずに表示

head

ファイルの先頭行を表示

Linux · macOS#
head [-n N] [-c N] file...
-n N
先頭 N 行(デフォルトは 10)
-c N
先頭 N バイト
-n -N
最後の N 行以外すべて(GNU)
head -n 20 data.csv

ヘッダーと最初の数行

head -c 512 file.bin | xxd

バイナリの先頭をのぞく

macOS/BSD: macOS の head は負の数を受け付けません。

tail

ファイルの末尾を表示、またはリアルタイムで追跡

Linux · macOS#
tail [-n N] [-f|-F] file...
-n N
最後の N 行(デフォルトは 10)
-n +N
N 行目から表示
-f
ファイルが追記されるたびに表示し続ける
-F
名前で追跡し、ログローテーション後も継続
tail -n 50 app.log

最後の 50 行

tail -F /var/log/nginx/access.log

ローテーションされるログを監視

tail -n +2 data.csv

CSV のヘッダー行を飛ばす

nano

シンプルなエディターでファイルを編集

Linux#
nano file
Ctrl+O
保存
Ctrl+X
終了
Ctrl+W
検索
Ctrl+K / Ctrl+U
行を切り取り / 貼り付け
Alt+U
元に戻す
sudo nano /etc/hosts

システムファイルを編集

画面下部のショートカットバーにキーが表示されます。^ は Ctrl、M- は Alt を意味します。

vim

vim でファイルを編集(と終了方法)

Linux · macOS#
vim file
i
挿入モード(文字を入力)
Esc
ノーマルモードに戻る
:w / :q / :wq
保存 / 終了 / 保存して終了
:q!
保存せずに終了
/text
検索。n で次へ
dd / yy / p
行を削除 / 行をコピー / 貼り付け
u / Ctrl+R
元に戻す / やり直し
vim +42 app.py

42 行目を開く

diff

2 つのファイルやディレクトリを比較

Linux · macOS#
diff [-u] [-r] [-q] [-w] a b
-u
unified 形式(patch や git が使う形式)
-r
ディレクトリを再帰的に比較
-q
ファイルが異なるかどうかだけを表示
-w
空白をすべて無視
-y
左右に並べて表示
diff -u old.conf new.conf

読みやすい差分表示

diff -rq dir1/ dir2/

2 つのツリーで異なるファイル

diff <(sort a.txt) <(sort b.txt)

プロセス置換でソートしてから比較

tee

出力をファイルと画面に同時に書き出す

Linux · macOS#
tee [-a] file...
-a
上書きせずに追記
make 2>&1 | tee build.log

ビルドを見ながらログを残す

echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf

root 所有のファイルに追記(リダイレクトはシェルが行うため sudo echo >> は失敗する)

printf

書式付きテキストを確実に出力

Linux · macOS#
printf 'format' args...
printf '%s\n' "$var"

-n で始まる場合でも変数を安全に出力

printf '%-12s %6.2f\n' disk 93.5

列をそろえて出力

echo -e や echo -n はシェルによって動作が異なります。printf はどこでも同じように動作します。

column

出力を表形式にそろえる

Linux · macOS#
column -t [-s separators]
column -t -s, data.csv | less -S

単純な CSV を表として読む

mount | column -t

空白区切りの出力を整列

xxd / hexdump

ファイルを 16 進数で表示

Linux · macOS#
xxd file | hexdump -C file
xxd image.png | head

16 進数と ASCII を並べて表示

hexdump -C file.bin | head

標準形式の 16 進ダンプ

xxd は vim のパッケージに含まれています。hexdump は util-linux に含まれます(新しい Debian/Ubuntu では bsdextrautils)。

strings

バイナリファイルから読める文字列を抜き出す

Linux · macOS#
strings [-n min] file
-n N
N 文字以上の文字列のみ(デフォルトは 4)
strings -n 8 firmware.bin | less

バージョン文字列、URL、パスを探す

Linux では binutils に含まれています。

パーミッションと所有者

ファイルを読み取り・書き込み・実行できるユーザーを確認し、変更します。

ls -l

-rwxr-x--- のようなパーミッション文字列を読む

Linux · macOS#
ls -l file
ls -l deploy.sh

-rwxr-x--- 1 alice devs 812 Oct 18 09:12 deploy.sh

1 文字目は種類です(- はファイル、d はディレクトリ、l はシンボリックリンク)。その後に所有者、グループ、その他のユーザーの 3 文字ずつが続きます。r=4、w=2、x=1 なので、rwxr-x--- は 750 です。

chmod

8 進数でパーミッションを変更

Linux · macOS#
chmod [-R] mode file...
-R
ディレクトリとその中身すべてに適用
-v
変更ごとに表示
chmod 644 index.html

所有者は読み書き、全員が読み取り可:通常のファイル

chmod 755 deploy.sh

所有者はすべて、他は読み取り・実行:スクリプトとディレクトリ

chmod 600 ~/.ssh/id_ed25519

秘密鍵を自分だけが読めるようにする。権限が緩い鍵は ssh が拒否する

chmod u+x

文字(u/g/o +/-)でパーミッションを変更

Linux · macOS#
chmod [ugoa][+-=][rwxX] file...
chmod +x script.sh

スクリプトを実行可能にする

chmod go-w file

グループとその他から書き込み権限を外す

chmod -R u=rwX,go=rX site/

大文字の X は、ディレクトリと既に実行権限のあるファイルにだけ実行権限を付ける

chmod -R 777

chmod -R 777 が間違った解決策である理由

危険Linux · macOS#
chmod -R 777 dir
find site/ -type d -exec chmod 755 {} +

正しい解決策その 1: ディレクトリは 755

find site/ -type f -exec chmod 644 {} +

その 2: ファイルは 644

危険: マシン上のすべてのユーザーと、乗っ取られたすべてのサービスにツリー全体への書き込み権限を与え、全ファイルを実行可能にし、~/.ssh が 777 だと OpenSSH が鍵を拒否するようになります。/etc や /usr に適用すると sudo やシステムが壊れることがあります。代わりに chown で所有者を直すか、2 つの find コマンドを使ってください。

chown

ファイルの所有者とグループを変更

危険Linux · macOS#
chown [-R] user[:group] file...
-R
再帰的に適用
user:
末尾にコロンを付けてグループを省略すると、グループもユーザーのログイングループに設定
sudo chown -R www-data:www-data /var/www/site

Web ルートを Web サーバーのユーザーに渡す

sudo chown "$USER": file.txt

root が作成したファイルの所有者を自分にする

危険: /、/usr、/etc に sudo chown -R を実行すると、sudo、passwd、各種サービスが依存している setuid ビットと所有者情報が失われ、復旧にはたいてい再インストールが必要になります。パスをよく確認してください。

chgrp

ファイルのグループだけを変更

Linux · macOS#
chgrp [-R] group file...
chgrp -R developers /srv/shared

共有フォルダーをチームのグループに渡す

umask

新しいファイルのデフォルトのパーミッションを設定

Linux · macOS#
umask [mask]
umask

現在のマスクを表示(通常は 0022)

umask 077

このシェルでは新しいファイルを 600、ディレクトリを 700 にする

マスクはビットを取り除きます。ファイルは 666、ディレクトリは 777 から始まるので、022 ならそれぞれ 644 と 755 になります。

sudo

root(または別のユーザー)としてコマンドを実行

Linux · macOS#
sudo [-u user] [-i] command
-i
root のログインシェル
-u user
root ではなく指定したユーザーとして実行
-l
実行を許可されているコマンドを一覧表示
-k
キャッシュされた認証情報を破棄
sudo systemctl restart nginx

管理コマンドを 1 つ実行

sudo !!

直前のコマンドを sudo 付きで再実行

sudo -u postgres psql

サービス用ユーザーとして実行

su

別のユーザーに切り替える

Linux · macOS#
su [-] [user]
su - deploy

deploy ユーザーの環境でログイン

sudo su -

root にパスワードがないときの root シェル(sudo -i でも同じ)

setfacl / getfacl

ACL で特定のユーザーにアクセス権を追加

Linux#
setfacl -m u:user:perms file
-m
エントリーを変更(追加)
-x
エントリーを削除
-b
ACL エントリーをすべて削除
-R
再帰的に適用
-d
新しいファイルに継承されるデフォルト ACL を設定
setfacl -m u:alice:rw report.xlsx

グループを変えずに alice に読み書きを許可

getfacl report.xlsx

すべてのエントリーを表示

setfacl -R -m g:devs:rwX /srv/app

グループにツリー全体へのアクセス権を与える

ls -l のパーミッション文字列の末尾にある + は、そのファイルに ACL が設定されていることを示します。

chattr / lsattr

ファイルを変更不可にする

Linux#
chattr +i|-i file
sudo chattr +i /etc/resolv.conf

-i で解除するまで、root を含め誰も変更・削除できない

lsattr /etc/resolv.conf

属性を表示。i は変更不可を表す

ext4、XFS、Btrfs で使えます。root でも「Operation not permitted」と表示される場合は lsattr で確認してください。

プロセスとジョブ

実行中のものを見つけて停止し、処理をバックグラウンドで実行します。

ps

実行中のプロセスを一覧表示

Linux · macOS#
ps aux | ps -ef | ps -o fields -p PID
aux
CPU・メモリ・ユーザー付きで全プロセスを表示(BSD 形式)
-ef
親 PID 付きで全プロセスを表示(System V 形式)
-o
表示する列を選ぶ
--sort=-%mem
メモリ使用量の多い順に並べる(procps)
ps aux | grep [n]ginx

[n] の書き方で grep 自身を結果から除外

ps aux --sort=-%mem | head

メモリ使用量の多いプロセス

ps -o pid,ppid,etime,cmd -p 1234

プロセスの実行時間

macOS/BSD: macOS の ps には --sort がありません。ps aux -m(メモリ順)か ps aux -r(CPU 順)を使います。

pstree

プロセスを親子関係のツリーで表示

Linux#
pstree [-p] [user|PID]
pstree -p

PID 付き

pstree -p 1234

プロセスが生成した子プロセス

top

CPU とメモリの使用状況をリアルタイムで確認

Linux · macOS#
top [-u user] [-p PID] [-b -n 1]
P / M
CPU / メモリ順に並べる(Linux の top)
1
CPU コアごとに表示
k
PID を指定してプロセスを終了
q
終了
-b -n 1
スクリプト用に 1 回だけバッチ出力
top -b -n 1 | head -20

チケットに貼り付けられるスナップショット

macOS/BSD: macOS の top は別のプログラムです。並べ替えは top -o cpu または top -o mem で行います。

htop

より使いやすい対話型プロセスビューアー

Linux#
htop [-u user]
F3 or /
検索
F4
フィルター
F6
並べ替える列を選ぶ
F9
シグナルを送る(kill)
t
ツリー表示
htop -u www-data

1 人のユーザーのプロセスだけ

apt install htop / dnf install htop でインストールします。

pgrep

名前からプロセス ID を探す

Linux · macOS#
pgrep [-a] [-f] [-u user] pattern
-a
コマンドライン全体を表示(Linux の procps)
-f
名前だけでなくコマンドライン全体と照合
-u user
そのユーザーのプロセスのみ
-x
名前の完全一致
pgrep -a nginx

PID とコマンドライン

pgrep -f 'python manage.py runserver'

引数でスクリプトを特定

macOS/BSD: macOS では -a は「祖先プロセスを含める」の意味です。名前と引数を見るには pgrep -lf を使います。

pkill

名前を指定してプロセスを停止

Linux · macOS#
pkill [-signal] [-f] [-u user] pattern
pkill -f "node server.js"

Node アプリを 1 つ停止

pkill -HUP nginx

再読み込みのシグナルを送る

pgrep -af node

停止する前に -f で一致するものを確認

パターンは正規表現で、名前のどこに一致しても対象になります。pkill node は nodejs-helper にも当たります。先に pgrep で確認してください。

kill

プロセスにシグナルを送る(停止、強制終了、再読み込み)

Linux · macOS#
kill [-signal] PID...
(none) / -15 / -TERM
プロセスに正常終了を求める(デフォルト)
-9 / -KILL
強制終了。捕捉できず、後片付けもされない
-1 / -HUP
多くのデーモンが設定を再読み込みする
-l
シグナル名を一覧表示
kill 1234

穏やかに停止

kill -9 1234

TERM が無視されたときの最終手段

kill %1

このシェルのジョブ 1 を終了

まずは通常の kill を試し、数秒待ってください。-9 は後片付けを省くため、一時ファイルやロック、書きかけのデータが残ることがあります。

killall

名前が完全一致するプロセスをすべて終了

Linux · macOS#
killall [-signal] name
killall firefox

Firefox のプロセスをすべて

Linux では psmisc パッケージに含まれています。

Ctrl+Z, bg, fg, jobs

コマンドを一時停止してバックグラウンドで再開

Linux · macOS#
Ctrl+Z; bg [%n]; fg [%n]; jobs
jobs

このシェルのジョブを番号付きで一覧表示

bg %1

ジョブ 1 をバックグラウンドで再開

fg %1

フォアグラウンドに戻す

Ctrl+Z でフォアグラウンドのプログラムが一時停止します(bg か fg を実行するまで止まったままです)。

&

コマンドをバックグラウンドで開始

Linux · macOS#
command &
./long-export.sh > export.log 2>&1 &

開始してすぐにプロンプトに戻る

wait

スクリプト内でバックグラウンドジョブの終了を待つ

nohup

ログアウト後もコマンドを実行し続ける

Linux · macOS#
nohup command > log 2>&1 &
nohup ./server > server.log 2>&1 &

SSH セッションを閉じても動き続ける

長時間動かすものには、systemd サービス(「サービスとログ」を参照)や tmux のほうが確実です。

disown

実行中のジョブをシェルから切り離す

Linux · macOS#
disown [-h] [%n]
disown -h %1

nohup を付け忘れたとき:bg でバックグラウンドにしてから disown する

tmux

接続が切れてもターミナルセッションを維持

Linux#
tmux new -s name | tmux attach -t name
Ctrl+B d
デタッチ(セッションは動き続ける)
Ctrl+B c
新しいウィンドウ
Ctrl+B % / Ctrl+B "
左右に分割 / 上下に分割
tmux ls
セッションを一覧表示
tmux new -s deploy

名前付きセッションを開始

tmux attach -t deploy

SSH が切れた後に再接続

パッケージマネージャーでインストールします。古くからある代替は GNU screen です(Ctrl+A d でデタッチ、screen -r で再接続)。

nice / renice

CPU 優先度を下げて(または上げて)コマンドを実行

Linux · macOS#
nice -n N command | renice -n N -p PID
nice -n 19 tar -czf backup.tgz /data

ほかの処理を邪魔しないバックアップ

sudo renice -n -5 -p 1234

実行中のプロセスの優先度を上げる

nice 値は -20(最高優先度)から 19(最低優先度)までです。0 未満にできるのは root だけです。

timeout

時間がかかりすぎたらコマンドを終了

Linux#
timeout [-s signal] duration command
timeout 30s curl -s https://example.com/health

30 秒で打ち切る

timeout -s KILL 5m ./job.sh

5 分後に強制終了

制限時間に達した場合は終了ステータス 124 で終了します。

watch

コマンドを数秒ごとに再実行

Linux#
watch [-n seconds] [-d] command
watch -n 2 df -h

ディスク容量が埋まっていく様子を監視

watch -d 'ss -s'

-d で変化した部分を強調表示

lsof

ファイルやポートを開いているプロセスを確認

Linux · macOS#
lsof [-i :port] [-p PID] [file]
sudo lsof -i :8080

ポート 8080 で待ち受けているもの

sudo lsof +L1

削除済みなのに開かれたままのファイル(ディスクが満杯なのに du では何も見つからない場合)

lsof -p 1234

1 つのプロセスが開いているすべてのファイル

fuser

マウントやポートを使っているものを探す(または終了する)

危険Linux#
fuser [-v] [-m] [-k] target
sudo fuser -vm /mnt/usb

umount で「target is busy」と表示される原因

sudo fuser -v 8080/tcp

TCP ポートを使っているプロセス

危険: fuser -k は対象を使っているすべてのプロセスを確認なしで終了します。マウントポイントに対して実行すると、自分のシェルも含まれることがあります。

time

コマンドの実行時間を計測

Linux · macOS#
time command
time ./build.sh

real は経過時間、user + sys は CPU 時間

strace

プログラムが呼び出すシステムコールをトレース

Linux#
strace [-f] [-e trace=...] command | strace -p PID
strace -f -e trace=openat ./app 2>&1 | grep -v ENOENT

実際に開いているファイルはどれ?

sudo strace -p 1234

応答しないプロセスは何で止まっている?

システム情報とリソース

OS のバージョン、カーネル、CPU、メモリ、ハードウェア、時刻、負荷。

uname

カーネルのバージョンとアーキテクチャを表示

Linux · macOS#
uname [-a|-r|-m]
-a
すべて
-r
カーネルのリリース
-m
マシンのアーキテクチャ:x86_64、aarch64
uname -r

例:6.8.0-45-generic

uname -m

ダウンロードすべきバイナリは x86_64 か aarch64 か

cat /etc/os-release

Linux のディストリビューションとバージョンを確認

Linux#
cat /etc/os-release
cat /etc/os-release

systemd 以降のすべてのディストリビューションで NAME、VERSION_ID、ID を表示

lsb_release -a

Debian/Ubuntu での代替(インストールされていれば)

macOS/BSD: macOS: sw_vers。

hostnamectl

ホスト名を表示・設定

Linux#
hostnamectl [set-hostname name]
hostnamectl

ホスト名、OS、カーネル、仮想化

sudo hostnamectl set-hostname web01

マシン名を変更

uptime

稼働時間とロードアベレージを表示

Linux · macOS#
uptime
uptime

1 分、5 分、15 分間のロードアベレージ

負荷は実行中または待機中のプロセス数です。CPU 数(nproc)と比べてください。4 コアで負荷 4 ならフル稼働です。

free

メモリとスワップの使用量を確認

Linux#
free [-h]
free -h

「free」ではなく「available」列を見る

macOS/BSD: macOS: vm_stat、または top -l 1 | grep PhysMem。

Linux は余った RAM をディスクキャッシュに使うため、正常なマシンでも「free」は少なく見えます。プログラムがまだ使えるのは「available」の値です。

lscpu / nproc

CPU のモデルとコア数を表示

Linux#
lscpu | nproc
lscpu

モデル、ソケット、コア、スレッド、フラグ

make -j"$(nproc)"

使えるコアをすべて使う

macOS/BSD: macOS: sysctl -n hw.ncpu と sysctl -n machdep.cpu.brand_string。

lspci / lsusb

PCI・USB デバイスを一覧表示

Linux#
lspci [-k] | lsusb
lspci -k | grep -A3 -i vga

グラフィックカードと使用中のドライバー

lsusb

USB デバイスがそもそも認識されているか

dmidecode / lshw

メモリスロット、BIOS、ハードウェアの詳細を表示

Linux#
sudo dmidecode -t type | sudo lshw -short
sudo dmidecode -t memory | grep -i size

スロットごとの搭載メモリ

sudo lshw -short

デバイスごとに 1 行

dmesg

カーネルメッセージを読む(ハードウェア、ドライバー、OOM による強制終了)

Linux#
dmesg [-T] [-w] [--level=...]
-T
読みやすいタイムスタンプ
-w
新しいメッセージを追跡
--level=err,warn
問題のみ
sudo dmesg -T | tail -30

直前に起きたこと(USB の接続、ディスクエラー)

sudo dmesg -T | grep -i 'out of memory'

OOM killer がアプリを止めた?

/proc

/proc から CPU・メモリ・プロセスの生の情報を読む

Linux#
cat /proc/<file>
grep MemAvailable /proc/meminfo

利用可能なメモリ(kB)

grep -c ^processor /proc/cpuinfo

論理 CPU 数

cat /proc/1234/status

1 つのプロセスの状態とメモリ

vmstat / iostat

ボトルネックが CPU・メモリ・ディスクのどれかを調べる

Linux#
vmstat interval count | iostat -xz interval
vmstat 1 5

r = 実行キュー、si/so = スワップ、wa = I/O 待ち

iostat -xz 1

ディスクごとの使用率(%util)とレイテンシ(await)

iostat は sysstat パッケージに含まれています。

date

日付や Unix タイムスタンプを表示・計算

Linux · macOS#
date [+format] [-d 'description']
+%F
YYYY-MM-DD
+%s
Unix タイムスタンプ(秒)
-d 'text'
日付を解析:tomorrow、2 days ago、@1700000000(GNU)
-u
UTC
date '+%Y-%m-%d %H:%M:%S'

ログ用のタイムスタンプ

date +%s

1970-01-01 UTC からの秒数

date -d @1700000000

タイムスタンプを日付に変換(GNU)

date -d '2 days ago' +%F

相対的な日付(GNU)

macOS/BSD: macOS の date には -d がありません。タイムスタンプには date -r 1700000000、「2 日前」には date -v-2d、解析には date -j -f '%Y-%m-%d' 2026-10-18 +%s を使います。

timedatectl

タイムゾーンを設定し、時刻同期を確認

Linux#
timedatectl [set-timezone Zone]
timedatectl

現地時刻、UTC、タイムゾーン、NTP で同期済みか

timedatectl list-timezones | grep America

タイムゾーン名を探す

sudo timedatectl set-timezone America/Toronto

タイムゾーンを変更

ディスクとファイルシステム

空き容量、容量を使っているもの、パーティション、マウント、フォーマット。

df

ディスクの空き容量を確認

Linux · macOS#
df [-h] [-T] [-i] [path]
-h
読みやすいサイズ表記
-T
ファイルシステムの種類を表示(GNU)
-i
バイト数ではなく inode の使用量
df -h

マウントされているすべてのファイルシステム

df -h .

このディレクトリがあるファイルシステム

df -i

空きがあるのに「No space left」? inode が足りないのかもしれません

macOS/BSD: macOS では、-T は種類を表示するのではなく種類で絞り込みます。

du

ディスク容量を使っているものを探す

Linux · macOS#
du [-s] [-h] [-d depth] [path...]
-s
引数ごとに合計を 1 つ表示
-h
読みやすいサイズ表記
-d N
階層の深さを制限(GNU の長い形式:--max-depth=N)
-x
1 つのファイルシステム内にとどめる
du -sh /var/log

1 つのフォルダーのサイズ

du -h -d 1 | sort -h

サブフォルダー一覧、最大のものが最後(GNU と macOS の両方で動作)

sudo du -xh -d 1 / | sort -h | tail

最上位で特に大きいディレクトリ

macOS/BSD: macOS の du には -d はありますが、--max-depth はありません。

ncdu

ディスク使用量を対話的に確認

Linux#
ncdu [-x] [path]
sudo ncdu -x /

矢印キーで移動、d で削除

apt install ncdu / dnf install ncdu でインストールします。

lsblk

ディスクとパーティションを一覧表示

Linux#
lsblk [-f]
-f
ファイルシステムの種類、ラベル、UUID、マウントポイント
lsblk

ディスク、パーティション、サイズ、マウントポイント

lsblk -f

どのパーティションが ext4/xfs か、その UUID

macOS/BSD: macOS: diskutil list。

blkid

パーティションの UUID を取得

Linux#
sudo blkid [device]
sudo blkid /dev/sdb1

/etc/fstab 用の UUID と TYPE

findmnt

どこに何がマウントされているかを表示

Linux#
findmnt [target] | findmnt -T path
findmnt

オプション付きのマウントツリー

findmnt -T /var/lib/docker

このパスがどのファイルシステムにあるか

sudo findmnt --verify

再起動前に /etc/fstab のエラーをチェック

mount

ディスクやパーティションをマウント

Linux#
mount [-t type] [-o options] device dir
sudo mount /dev/sdb1 /mnt/usb

USB メモリをマウント(ディレクトリが存在している必要あり)

sudo mount -o remount,rw /

読み取り専用のルートを書き込み可能にする

sudo mount -t nfs nas:/export /mnt/nas

NFS 共有をマウント

umount

ディスクをアンマウント

Linux#
umount dir|device
sudo umount /mnt/usb

これで安全に取り外せる

sudo umount -l /mnt/nas

遅延アンマウント:すぐに切り離し、使用されなくなったら後片付け

「target is busy」は、何らかのプロセス(多くはそのディレクトリにいる自分のシェル)が使用中であることを意味します。fuser -vm か lsof で特定してください。

/etc/fstab

起動時にディスクを自動マウント

Linux#
UUID=<uuid> <mountpoint> <type> <options> <dump> <pass>
UUID=3f6c...  /data  ext4  defaults,nofail  0  2

ファイルシステムごとに 1 行。nofail ならディスクがなくても起動を続行

sudo mount -a

fstab の内容を今すぐすべてマウント:再起動前のテストに

fstab にタイプミスがあると、次回の起動が緊急モードになることがあります。編集後は必ず sudo mount -a(または findmnt --verify)を実行してください。

fdisk / parted

パーティションテーブルを表示・編集

危険Linux#
sudo fdisk -l | sudo fdisk /dev/sdX | sudo parted /dev/sdX print
sudo fdisk -l

すべてのディスクとそのパーティション

sudo parted /dev/sdb print

パーティションテーブルの種類(gpt/msdos)と構成

危険: パーティションテーブルを書き込むと(fdisk の w、parted の mklabel)、そのディスク上の既存データにアクセスできなくなります。先に lsblk でデバイス名を確認してください。/dev/sda と /dev/sdb は簡単に入れ替わります。

mkfs

パーティションをフォーマット

危険Linux#
sudo mkfs.<type> device
sudo mkfs.ext4 -L data /dev/sdb1

ラベル付きで ext4 にフォーマット

sudo mkfs.vfat -F 32 /dev/sdc1

ほかの機器でも読める FAT32 の USB メモリ

危険: 対象のファイルシステムを即座に消去します。デバイスがマウントされていなければ確認もありません。lsblk -f でデバイスを確認してください。/dev/sda1 ではなく /dev/sda をフォーマットしたり、別のディスクを選んだりすると、そのディスクが失われます。

fsck

ファイルシステムをチェック・修復

危険Linux#
sudo fsck [-f] device
sudo fsck -f /dev/sdb1

アンマウントしたパーティションを強制的に完全チェック

危険: 読み書き可能でマウントされているファイルシステムには絶対に fsck を実行しないでください。破損するおそれがあります。先にアンマウントするか、ルートファイルシステムの場合はレスキューメディアから起動してください。

dd

ISO を USB メモリに書き込む、またはディスクを丸ごとコピー

危険Linux · macOS#
dd if=input of=output bs=size [status=progress] [conv=fsync]
if= / of=
入力 / 出力のファイルまたはデバイス
bs=4M
ブロックサイズ。大きいほど高速
status=progress
コピーしたバイト数を表示(GNU)
conv=fsync
終了前にデバイスへ書き出す
sudo dd if=ubuntu.iso of=/dev/sdX bs=4M status=progress conv=fsync

起動用 USB を作成(sdX はパーティションではなくディスク全体に置き換える)

dd if=/dev/zero of=test.img bs=1M count=100

100 MB のファイルを作成

危険: dd は確認なしで of= の対象を上書きします。if= と of= を取り違えたり、間違った /dev/sdX を選んだりすると、そのディスクが消去されます。実行する直前に lsblk で確認してください。

macOS/BSD: macOS: diskutil unmountDisk の後に /dev/rdiskN(diskutil list で確認)を対象にし、bs=4m を使います。進捗は Ctrl+T で表示できます。

sync

保留中の書き込みをディスクに反映

Linux · macOS#
sync
sync && sudo umount /mnt/usb

USB ドライブを抜く前に

swapon / mkswap

スワップ領域を確認・追加

Linux#
swapon --show | mkswap file && swapon file
swapon --show

現在のスワップ

sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile

2 GB のスワップファイルを追加(維持するには /etc/fstab に追記)

Btrfs でスワップファイルを使うには追加の手順が必要です(最近の btrfs-progs では btrfs filesystem mkswapfile)。

shred

削除する前にファイルを上書き

危険Linux#
shred [-u] [-n passes] file
shred -u -n 3 secrets.txt

3 回上書きしてから削除

危険: 元に戻せません。また、SSD、ジャーナリングやコピーオンライトのファイルシステム(Btrfs、ZFS)、スナップショットのある環境では確実ではありません。本当に保護したいならディスク全体の暗号化を使ってください。

ネットワーク

IP アドレス、ルート、開いているポート、HTTP リクエスト、DNS、SSH、ファイル転送。

ip addr

このマシンの IP アドレスを表示

Linux#
ip [-br] addr [show dev IFACE]
ip -br a

インターフェースごとに 1 行:名前、状態、アドレス

ip a show eth0

1 つのインターフェースの詳細

hostname -I

IP アドレスだけ

macOS/BSD: macOS: ifconfig、または ipconfig getifaddr en0。

ip は旧来の ifconfig(net-tools)に代わるコマンドです。ifconfig は多くのディストリビューションで標準ではインストールされなくなりました。

ip route

ルーティングテーブルとデフォルトゲートウェイを表示

Linux#
ip route [get ADDRESS] | ip route add NET via GW
ip r

ルート一覧。「default via」がゲートウェイ

ip route get 1.1.1.1

宛先に使われるインターフェースとゲートウェイ

sudo ip route add 10.20.0.0/16 via 192.168.1.1

ルートを追加(再起動で消える)

ip link

ネットワークインターフェースを有効化・無効化

危険Linux#
ip link [set IFACE up|down]
ip link

インターフェースと MAC アドレス

sudo ip link set eth0 down && sudo ip link set eth0 up

インターフェースを再起動

危険: SSH 接続に使っているインターフェースを無効にすると、セッションが切断されます。

ss

待ち受けポートと接続中のコネクションを一覧表示

Linux#
ss [-t] [-u] [-l] [-p] [-n]
-t / -u
TCP / UDP
-l
待ち受け中のソケットのみ
-p
プロセスを表示(他のユーザーのものを見るには sudo)
-n
ポートを数値で表示し、DNS で名前解決しない
-s
集計を表示
sudo ss -tulpn

すべての待ち受けポートとそのプログラム

ss -tn state established '( dport = :443 )'

ポート 443 への確立済みの接続

ss -s

接続数の合計

macOS/BSD: macOS: lsof -iTCP -sTCP:LISTEN -n -P、または netstat -an。

ss は netstat に代わるコマンドです。net-tools がインストールされていれば netstat -tulpn も使えます。

curl

HTTP リクエストを送信、またはファイルをダウンロード

Linux · macOS#
curl [options] URL
-I
ヘッダーのみ(HEAD リクエスト)
-L
リダイレクトをたどる
-o file / -O
ファイルに保存 / リモートの名前で保存
-s / -S
出力を抑える / ただしエラーは表示
-f
HTTP 4xx/5xx のときはエラーページを出力せずに失敗(終了コード 22)
-v
詳細表示:リクエストとレスポンスのヘッダー、TLS
curl -I https://example.com

ステータス行とヘッダー

curl -LO https://example.com/file.tar.gz

リダイレクトをたどってダウンロード

curl -s -o /dev/null -w '%{http_code}\n' https://example.com

ステータスコードだけ

curl -fsSL https://example.com/install.sh -o install.sh

実行前に読めるようスクリプトをダウンロード

curl -d

JSON で POST リクエストを送信

Linux · macOS#
curl -H 'Content-Type: application/json' -d 'json' URL
-d data
リクエストボディ。指定すると POST になる
--data-binary @file
ファイルをそのまま送信
-H header
ヘッダーを追加
-X METHOD
PUT、PATCH、DELETE…
-u user:pass
Basic 認証
curl -H 'Content-Type: application/json' -d '{"name":"Ada"}' https://api.example.com/users

JSON を POST

curl -H "Authorization: Bearer $TOKEN" https://api.example.com/me

$TOKEN が展開されるようダブルクォートで囲む

curl -X DELETE https://api.example.com/users/42

その他のメソッド

wget

ファイルをダウンロード(再開可能)

Linux#
wget [options] URL
-c
途中までのダウンロードを再開
-O file
名前を付けて保存(標準出力には -O-)
-q
出力を抑える
-r -np
再帰的に取得し、親ディレクトリには上がらない
wget -c https://example.com/big.iso

接続が切れた後に再開

wget -qO- https://example.com/data.json | jq .

別のコマンドに直接パイプ

macOS/BSD: 標準の macOS にはありません。curl -LO を使います(再開するには curl -C - -LO)。

dig

DNS レコードを調べる

Linux · macOS#
dig [@server] name [type] [+short]
dig +short example.com

A レコードだけ

dig MX example.com

メールサーバー

dig @1.1.1.1 example.com

特定のリゾルバーに問い合わせる(ローカルキャッシュを回避)

dig -x 8.8.8.8

逆引き

dig +trace example.com

ルートから委任をたどる

パッケージ名:dnsutils(Debian/Ubuntu)、bind-utils(Fedora/RHEL)。

host / nslookup

DNS を手早く調べる

Linux · macOS#
host name | nslookup name [server]
host example.com

A、AAAA、MX を 1 つの短い結果で

nslookup example.com 8.8.8.8

同じコマンドが Windows にもある

resolvectl

使用中の DNS サーバーを確認し、DNS キャッシュをクリア

Linux#
resolvectl [status|query|flush-caches]
resolvectl status

インターフェースごとの DNS サーバー

sudo resolvectl flush-caches

systemd-resolved のキャッシュをクリア

macOS/BSD: macOS: sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder。

systemd-resolved を使っているシステム(Ubuntu、Fedora の標準)のみです。

ping

ホストに到達できるか確認

Linux · macOS#
ping [-c count] [-i interval] host
-c N
N パケットで停止
-i sec
パケットの送信間隔
-4 / -6
IPv4 / IPv6 を強制
ping -c 4 example.com

4 パケット送ってから集計を表示

Linux と macOS の ping は、-c を付けない限り Ctrl+C を押すまで続きます(Windows は 4 回で停止)。応答がなくても停止しているとは限りません。ICMP をブロックしているホストも多くあります。

traceroute / tracepath

ホストまでのパケットの経路を確認

Linux · macOS#
traceroute [-n] host | tracepath host
traceroute -n example.com

DNS 解決なしでホップを表示

tracepath example.com

root 不要で MTU も表示

macOS/BSD: macOS には traceroute はありますが、tracepath はありません。

Linux では traceroute のインストールが必要な場合があります。tracepath(iputils)はたいてい入っています。

mtr

パケットロスが起きている場所を探す

Linux#
mtr [-r] [-w] [-c count] host
mtr -rw -c 100 example.com

ホップごとに 100 回計測してレポート

ping と traceroute を組み合わせたツールです。途中の 1 ホップだけのロスは、たいていそのルーターが ICMP の優先度を下げているだけです。最後までロスが続く場合は本物です。

ssh

リモートマシンにログイン

Linux · macOS#
ssh [-p port] [-i key] [-J jump] user@host [command]
ssh alice@203.0.113.10

ログイン

ssh -p 2222 alice@host

標準以外のポート

ssh alice@host 'df -h'

コマンドを 1 つ実行して戻る

ssh -J bastion.example.com alice@10.0.0.5

踏み台サーバーを経由

ssh -L / -R / -D

SSH でポートを転送(トンネル)

Linux · macOS#
ssh -L local:host:remote user@server
-L 5432:localhost:5432
ローカルのポート 5432 をサーバーのポート 5432 につなぐ
-R 8080:localhost:3000
サーバーのポート 8080 をローカルの 3000 につなぐ
-D 1080
ローカルのポート 1080 で SOCKS プロキシ
-N
リモートコマンドを実行せず、トンネルだけ
ssh -N -L 5432:localhost:5432 alice@db-host

ローカルの DB クライアントをリモートの Postgres に接続

ssh -N -D 1080 alice@host

サーバー経由でブラウズ

ssh-keygen

SSH 鍵を作成してサーバーに登録

Linux · macOS#
ssh-keygen -t ed25519 [-C comment] | ssh-copy-id user@host
ssh-keygen -t ed25519 -C "you@example.com"

~/.ssh に新しい鍵ペアを作成

ssh-copy-id alice@host

公開鍵をサーバーの authorized_keys に追記

ssh-keygen -R host

サーバー再構築後に古いホスト鍵を削除(「REMOTE HOST IDENTIFICATION HAS CHANGED」)

~/.ssh/config

SSH の接続設定を短いエイリアスとして保存

Linux · macOS#
Host alias / HostName / User / Port / IdentityFile
Host web
  HostName 203.0.113.10
  User deploy
  Port 2222
  IdentityFile ~/.ssh/id_ed25519

以後は ssh web だけで接続(scp と rsync も使う)

scp

SSH でサーバーとファイルをコピー

Linux · macOS#
scp [-r] [-P port] source... dest
-r
ディレクトリをコピー
-P port
ポート(大文字の P。ssh は小文字の -p)
-i key
秘密鍵ファイル
scp report.pdf alice@host:/tmp/

アップロード

scp alice@host:/var/log/app.log .

ダウンロード

scp -r -P 2222 site/ alice@host:~/

別のポートでフォルダーをアップロード

OpenSSH 9.0 以降、scp は内部で SFTP プロトコルを使います。大きなファイルや繰り返しのコピーには、差分だけを送る rsync のほうが高速です。

rsync

ローカルまたは SSH 経由でフォルダーを同期

Linux · macOS#
rsync [-avz] [--progress] [-n] source dest
-a
アーカイブ:再帰的に処理し、パーミッション・日時・リンクを保持
-v
詳細表示
-z
転送中に圧縮
-P
進捗を表示し、途中のファイルを再開
-n
ドライラン:何が起きるかを表示
--exclude 'pattern'
ファイルを除外
-e 'ssh -p 2222'
SSH のオプションを指定
rsync -avzP site/ deploy@host:/srv/site/

site/ の末尾のスラッシュで、フォルダー自体ではなく中身をコピー

rsync -av --exclude 'node_modules' ./ /backup/app/

不要なものを除いてローカルにバックアップ

macOS/BSD: 最近の macOS には rsync ではなく openrsync が入っています。一般的なオプションは使えますが、あまり使われないものの一部は使えません。

src/ は「src の中身」、スラッシュなしの src は「src フォルダー」を意味します。これを間違えるとフォルダーが入れ子になります(dest/src/…)。

rsync --delete

コピー先を完全なミラーにする

危険Linux · macOS#
rsync -av --delete source/ dest/
rsync -avn --delete site/ /srv/site/

まずドライラン:「deleting」で始まる行が削除されるもの

rsync -av --delete site/ /srv/site/

その後で本番実行

危険: コピー元にないものはコピー先からすべて削除されます。コピー元とコピー先を取り違えたり、コピー元のパスが空や間違いだったりすると、コピー先が消去されます。必ず先に -n を付けて実行してください。

nc

TCP ポートが開いているか確認

Linux · macOS#
nc -zv host port | nc -l port
nc -zv db.internal 5432

「succeeded」か「Connection refused」/タイムアウト

nc -l 9000

ポートで待ち受け、反対側からファイアウォールをテスト

オプションは netcat の種類によって異なります。従来版では nc -l -p 9000 とする必要があります。

ufw

Ubuntu のファイアウォールを管理

危険Linux#
sudo ufw [status|allow|deny|delete|enable]
sudo ufw status verbose

ルールとデフォルトポリシー

sudo ufw allow 22/tcp

SSH を許可(enable の前に実行)

sudo ufw allow from 10.0.0.0/8 to any port 5432

1 つのポートを 1 つのネットワークに許可

危険: リモートサーバーで先に SSH を許可せずに(ufw allow OpenSSH または 22/tcp)sudo ufw enable を実行すると、ログインできなくなります。

firewall-cmd

Fedora/RHEL のファイアウォールを管理

Linux#
sudo firewall-cmd [--permanent] --add-service|--add-port ...
sudo firewall-cmd --list-all

アクティブなゾーンとルール

sudo firewall-cmd --permanent --add-service=https && sudo firewall-cmd --reload

HTTPS を恒久的に開放

sudo firewall-cmd --permanent --add-port=8080/tcp

ポートを開放

--permanent を付けないと、ルールは次の再読み込みか再起動まで有効です。

nmcli

Wi-Fi と接続を管理(NetworkManager)

Linux#
nmcli [device|connection] ...
nmcli device status

インターフェースと接続状態

nmcli device wifi list

近くのネットワーク

nmcli device wifi connect 'MyWiFi' password 'secret'

ネットワークに接続

パッケージ管理:apt、dnf、pacman、zypper

主要な 4 つのパッケージマネージャーで同じ操作を比較します:Debian/Ubuntu(apt)、Fedora/RHEL(dnf)、Arch(pacman)、openSUSE(zypper)。システムを変更する操作には sudo を付けてください。

操作apt(Debian、Ubuntu)dnf(Fedora、RHEL)pacman(Arch)zypper(openSUSE)
パッケージリストを更新 #
dnf はメタデータが古くなると自動で更新します。Arch では pacman -Sy の後に -S pkg を実行しないでください。部分アップグレードはサポートされていないため、-Syu を使います。
apt update
dnf makecache
pacman -Sy
zypper refresh
すべてアップグレード #
openSUSE Tumbleweed では zypper dup を使います。apt full-upgrade は、アップグレードを完了するために必要ならパッケージの削除も行います。
apt update && apt upgrade
dnf upgrade
pacman -Syu
zypper update
パッケージをインストール #
apt install nginx
dnf install nginx
pacman -S nginx
zypper install nginx
ダウンロードしたパッケージファイルをインストール #
./ を付けると apt はパッケージ名ではなくファイルとして扱い、依存関係を解決します(dpkg -i は解決しません)。
apt install ./app.deb
dnf install ./app.rpm
pacman -U app.pkg.tar.zst
zypper install ./app.rpm
パッケージを削除 #
apt remove nginx
dnf remove nginx
pacman -R nginx
zypper remove nginx
設定ファイル・不要な依存関係ごと削除 #
apt purge nginx && apt autoremove
dnf remove nginx && dnf autoremove
pacman -Rns nginx
zypper remove --clean-deps nginx
パッケージの詳細を表示 #
apt show nginx
dnf info nginx
pacman -Si nginx (installed: -Qi)
zypper info nginx
インストール済みパッケージを一覧表示 #
apt list --installed
dnf list --installed
pacman -Q
zypper search --installed-only
利用可能な更新を一覧表示 #
apt list --upgradable
dnf check-update
checkupdates (pacman-contrib)
zypper list-updates
ファイルがどのパッケージのものか調べる #
まだインストールしていないファイルの場合:dnf provides /path、apt-file search path(apt-file が必要)、pacman -F path。
dpkg -S /usr/bin/curl
rpm -qf /usr/bin/curl
pacman -Qo /usr/bin/curl
rpm -qf /usr/bin/curl
パッケージがインストールしたファイルを一覧表示 #
dpkg -L nginx
rpm -ql nginx
pacman -Ql nginx
rpm -ql nginx
パッケージを現在のバージョンに固定 #
DNF 4 では、versionlock を使うには versionlock プラグインのパッケージが必要です。
apt-mark hold nginx
dnf versionlock add nginx
IgnorePkg = nginx in /etc/pacman.conf
zypper addlock nginx
パッケージキャッシュを削除 #
apt clean
dnf clean all
pacman -Sc
zypper clean

ユーザーとグループ

自分が誰か、誰がログインしているかの確認と、アカウントの管理。

whoami / id

ユーザー名、UID、グループを表示

Linux · macOS#
whoami | id [user]
id

uid、gid、所属するすべてのグループ

id alice

別のユーザー

who / w / last

ログイン中のユーザーと最近のログインを確認

Linux · macOS#
who | w | last [-n N]
w

ログイン中のユーザーと実行中のもの

last -n 10

最近のログインと再起動

sudo lastb -n 10

最近のログイン失敗(Linux)

useradd

ユーザーアカウントを作成

Linux#
sudo useradd [-m] [-s shell] [-G groups] user
-m
ホームディレクトリを作成(すべてのディストリビューションでデフォルトではない)
-s /bin/bash
ログインシェル
-G group1,group2
補助グループ
sudo useradd -m -s /bin/bash alice && sudo passwd alice

作成してパスワードを設定

Debian/Ubuntu では、adduser alice がホームディレクトリとパスワードを設定してくれる、より使いやすい対話型のラッパーです。

usermod -aG

ユーザーをグループに追加

危険Linux#
sudo usermod -aG group user
sudo usermod -aG docker alice

alice が docker を使えるようにする

sudo usermod -aG sudo alice

Debian/Ubuntu で管理者にする(Fedora/RHEL/Arch ではグループ名は wheel)

危険: -a を付けないと、usermod -G はユーザーの補助グループをすべて置き換え、sudo 権限が外れることがあります。グループの変更は次回のログインから反映されます(または newgrp docker を実行)。

userdel

ユーザーアカウントを削除

危険Linux#
sudo userdel [-r] user
sudo userdel -r olduser

ホームディレクトリとメールスプールも削除

危険: -r を付けるとホームディレクトリとそのファイルが完全に削除されます。先にバックアップするか、代わりにアカウントをロックしてください(passwd -l)。

passwd

パスワードを変更、またはアカウントをロック

Linux#
passwd [user] | passwd -l|-u user
passwd

自分のパスワードを変更

sudo passwd alice

他のユーザーのパスワードをリセット

sudo passwd -l alice

パスワードでのログインをロック(SSH 鍵では引き続きログインできる場合あり)

groupadd / gpasswd

グループを作成、またはグループからユーザーを外す

Linux#
sudo groupadd name | sudo gpasswd -d user group
sudo groupadd developers

新しいグループ

sudo gpasswd -d alice developers

alice をグループから外す

groups / getent

グループのメンバーやユーザーの所属グループを一覧表示

Linux#
groups [user] | getent group name
groups alice

alice の所属グループ

getent group sudo

sudo グループのメンバー(LDAP でも動作)

getent passwd alice

アカウント情報:UID、ホーム、シェル

visudo

ユーザーに安全に sudo 権限を与える

Linux · macOS#
sudo visudo [-f /etc/sudoers.d/file]
sudo visudo -f /etc/sudoers.d/deploy

ルールごとに別ファイル

deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart myapp

1 つのコマンドだけパスワードなしで許可

visudo は保存前に構文をチェックします。通常のエディターで /etc/sudoers を編集してタイプミスをすると、誰も sudo を使えなくなることがあります。

chage

パスワードの有効期限を確認・設定

Linux#
sudo chage [-l] [-M days] user
sudo chage -l alice

最終変更日と有効期限

sudo chage -M 90 alice

90 日ごとに期限切れにする

アーカイブと圧縮

tar、gzip、xz、zip とチェックサム。

tar -c

.tar.gz アーカイブを作成

Linux · macOS#
tar -czf archive.tar.gz files...
-c
作成
-z / -j / -J
gzip / bzip2 / xz で圧縮
-f file
アーカイブのファイル名(f の直後に置く)
-v
追加するファイルを表示
--exclude='pattern'
ファイルを除外
tar -czf site-2026-10-18.tar.gz site/

フォルダーを gzip 圧縮したアーカイブ

tar -cJf logs.tar.xz --exclude='*.tmp' logs/

一時ファイルを除いた、より小さな xz アーカイブ

tar -x

.tar.gz、.tar.xz、.tar.bz2 を展開

Linux · macOS#
tar -xf archive [-C dir]
-x
展開
-C dir
dir に展開(dir は存在している必要あり)
--strip-components=1
最上位のフォルダーを取り除く
tar -xf archive.tar.gz

GNU tar と macOS の tar は圧縮形式を自動で判別する

tar -xzf app.tar.gz -C /opt/app --strip-components=1

外側のディレクトリを除いてフォルダーに展開

tar -t

アーカイブの中身を一覧表示、または 1 ファイルだけ展開

Linux · macOS#
tar -tf archive | tar -xf archive path/in/archive
tar -tf backup.tar.gz | less

展開せずに中身を確認

tar -xf backup.tar.gz etc/nginx/nginx.conf

1 つのファイルを取り出す(パスは -t の表示どおり)

tar --zstd

zstd で高速に圧縮

Linux · macOS#
tar --zstd -cf archive.tar.zst files...
tar --zstd -cf data.tar.zst data/

xz よりはるかに高速で、圧縮率は gzip -9 と同等かそれ以上

zstd -d file.zst

単一ファイルを解凍

GNU tar 1.31 以降(または最近の bsdtar)と zstd プログラムが必要です。

gzip / gunzip

単一ファイルを圧縮・解凍

Linux · macOS#
gzip [-k] [-d] [-9] file
-k
元のファイルを残す
-d
解凍(gunzip と同じ)
-9
最高圧縮
gzip -k access.log

access.log.gz を作成し、元のファイルも残す

zcat access.log.gz | grep 404

ディスクに解凍せずに読む

zgrep 500 access.log.*.gz

ローテーション済みのログを直接 grep

-k を付けないと、gzip は元のファイルを .gz 版で置き換えます。

xz / bzip2

単一ファイルを高圧縮

Linux#
xz [-T0] [-9] [-d] file | bzip2 [-d] file
xz -T0 -k big.sql

すべての CPU コアを使い、元のファイルを残す

unxz big.sql.xz

解凍

zip

.zip ファイルを作成

Linux · macOS#
zip -r archive.zip files... [-x pattern]
zip -r site.zip site/

フォルダーを zip 圧縮

zip -r site.zip site/ -x '*.git*' '*/node_modules/*'

パスを除外

zip -e は旧式の ZipCrypto 方式で暗号化するため、強度が低いです。本当に秘密にしたいなら 7z か gpg を使ってください。

unzip

.zip ファイルを展開

Linux · macOS#
unzip [-l] [-o] archive.zip [-d dir]
unzip files.zip -d files/

フォルダーに展開

unzip -l files.zip

中身を一覧表示するだけ

unzip -o files.zip

確認せずに上書き

7z

.7z(ほか多くの形式)のアーカイブを扱う

Linux#
7z a|x|l archive [files]
7z x archive.7z

パスを保ったまま展開

7z a -p backup.7z docs/

AES-256 で暗号化したアーカイブ(パスワードの入力を求められる)

7z l archive.rar

さまざまな形式の中身を一覧表示

パッケージ:Debian/Ubuntu では p7zip-full / 7zip、Fedora/Arch では p7zip または 7zip。

sha256sum

チェックサムでダウンロードを検証

Linux#
sha256sum file | sha256sum -c SUMSFILE
sha256sum ubuntu.iso

ダウンロードページのハッシュと比較

sha256sum -c SHA256SUMS --ignore-missing

一覧にあるファイルのうち、手元にあるものをすべて検証

macOS/BSD: macOS: shasum -a 256 file(および shasum -a 256 -c SUMSFILE)。

split

大きなファイルを分割・結合

Linux · macOS#
split -b size file prefix
split -b 100M backup.tar.gz backup.part.

backup.part.aa、.ab、…

cat backup.part.* > backup.tar.gz

再び結合

テキスト処理

テキストや JSON の切り出し、絞り込み、並べ替え、集計、変換、整形。

sed s///

テキストを検索して置換

Linux · macOS#
sed 's/old/new/[g]' file
g
最初の一致だけでなく、行内のすべての一致を置換
-E
拡張正規表現(バックスラッシュなしでグループ化)
I
大文字と小文字を区別せずに一致(GNU)
sed 's/http:/https:/g' links.txt

結果を表示。ファイルは変更されない

sed 's|/usr/local|/opt|g' paths.txt

区切り文字は自由。パスに便利

sed -E 's/([0-9]+)px/\1rem/g' style.css

キャプチャしたグループを再利用

sed -i

ファイルを直接編集

Linux · macOS#
sed -i[SUFFIX] 's/old/new/g' file
sed -i 's/^#Port 22/Port 2222/' /etc/ssh/sshd_config

GNU sed

sed -i.bak 's/foo/bar/g' config.ini

config.ini.bak を残す。GNU と macOS の両方で動作

macOS/BSD: macOS の sed では -i の後に引数が必要です:sed -i '' 's/foo/bar/g' file。GNU sed は '' をスクリプトとして読むため、両方で動くのは -i.bak の形式だけです。

sed -n / d

特定の行を表示・削除

Linux · macOS#
sed -n 'Np' | sed '/regex/d'
sed -n '100,120p' big.log

100〜120 行目

sed '/^\s*#/d; /^$/d' app.conf

コメントと空行を取り除く(GNU の \s)

sed -n '/BEGIN CERT/,/END CERT/p' bundle.pem

2 つの目印の間にあるすべて

awk

特定の列を表示

Linux · macOS#
awk [-F sep] '{print $N}' file
-F sep
フィールド区切り文字(デフォルトは連続するスペース/タブ)
$1 … $NF
フィールド。$NF は最後、$0 は行全体
NR
行番号
awk '{print $1}' access.log

1 列目(クライアント IP)

awk -F: '{print $1, $7}' /etc/passwd

ユーザーとシェル

awk -F, 'NR>1 {print $2}' data.csv

ヘッダーを飛ばして CSV の 2 列目(クォート内にカンマがない単純な CSV のみ)

awk (filter & sum)

行を絞り込んで列を合計

Linux · macOS#
awk 'condition {action} END {action}' file
awk '$9 >= 500' access.log

9 番目のフィールド(ステータス)が 5xx の行

awk '{s += $2} END {print s}' sales.txt

2 列目の合計

awk '{c[$1]++} END {for (k in c) print c[k], k}' access.log | sort -rn | head

値ごとに数えて上位 10 件

cut

1 文字の区切り文字でフィールドを切り出す

Linux · macOS#
cut -d DELIM -f LIST | cut -c RANGE
cut -d, -f1,3 data.csv

1 列目と 3 列目

cut -d: -f1 /etc/passwd

すべてのユーザー名

cut -c1-10 file

各行の先頭 10 文字

cut は区切り文字ごとにフィールドを区切るため、スペースが 2 つ続くと空のフィールドになります。スペースで整列された出力には awk を使ってください。

sort

行を並べ替える

Linux · macOS#
sort [-n] [-r] [-h] [-k N,N] [-t sep] [-u] file
-n
数値として並べ替え
-r
逆順
-h
読みやすいサイズ表記:2K < 1M < 3G
-k 2,2
2 番目のフィールドだけで並べ替え
-t ,
フィールド区切り文字
-u
重複を除く
-V
バージョン順:1.9 < 1.10
du -sh * | sort -h

フォルダーをサイズ順に

sort -t, -k3,3nr data.csv

CSV を 3 列目の数値で降順に

sort -u emails.txt > unique.txt

並べ替えて重複を除く

uniq

重複行を数える・取り除く

Linux · macOS#
sort file | uniq [-c] [-d] [-u]
-c
各行の先頭に出現回数を付ける
-d
重複している行のみ
-u
1 回だけ出現する行のみ
sort ips.txt | uniq -c | sort -rn | head

出現回数の多い行の上位 10 件

uniq は隣り合う重複しかまとめないため、先に sort してください。

wc

行数・単語数・バイト数を数える

Linux · macOS#
wc [-l] [-w] [-c] [-m] file...
wc -l access.log

行数

ls | wc -l

このフォルダー内の項目数

grep -c '' file

改行で終わらない最終行も含めた行数

tr

文字を置換・削除

Linux · macOS#
tr [-d] [-s] 'set1' ['set2']
tr 'a-z' 'A-Z' < in.txt

大文字に変換

tr -d '\r' < windows.txt > unix.txt

Windows の CRLF 改行を取り除く

tr -s ' ' < file

連続するスペースを 1 つにまとめる

tr '\n' ',' < list.txt

行をカンマでつなぐ

tr は標準入力しか読まないため、< でファイルをリダイレクトします。

xargs

入力行をコマンドの引数に変換

Linux · macOS#
command | xargs [-0] [-n N] [-P N] [-I {}] cmd
-0
入力が NUL 区切り(find -print0 と組み合わせる)。スペースがあっても安全
-n N
1 回のコマンドに渡す引数は最大 N 個
-P N
N 個のコマンドを並列実行
-I {}
{} を各入力行に置き換える
-r
入力が空ならコマンドを実行しない(GNU)
find . -name '*.log' -print0 | xargs -0 rm -f

見つかったファイルを安全に削除

cat urls.txt | xargs -n 1 -P 4 curl -sO

4 つずつ同時にダウンロード

ls *.png | xargs -I {} cp {} /backup/{}

項目ごとに 1 回コマンドを実行

macOS/BSD: GNU の xargs は、-r を付けない限り入力が空でもコマンドを 1 回実行します。macOS の xargs はデフォルトで空の入力をスキップし、互換性のために -r も受け付けます。

jq

JSON を読み取り・絞り込む

Linux · macOS#
jq [-r] 'filter' file
.
整形して表示
-r
引用符なしの生の文字列
-c
コンパクト表示。結果ごとに 1 行
.[]
配列を反復処理
select(cond)
条件に一致する要素だけを残す
jq . response.json

整形して表示

jq -r '.items[].name' data.json

1 行に 1 つずつ名前を表示

jq -r '.[] | select(.active) | .email' users.json

絞り込んでからフィールドを取り出す

curl -s https://api.github.com/repos/jqlang/jq | jq '.stargazers_count'

API から直接

apt/dnf install jq でインストールします。最近の macOS には標準で入っています。

paste

行を連結、またはファイルを横に並べて結合

Linux · macOS#
paste [-s] [-d delim] file...
paste -sd, ids.txt

すべての行をカンマでつなぐ

paste names.txt emails.txt

2 つのファイルを 2 列として並べる

comm

2 つのリストに共通する行(または片方だけの行)

Linux · macOS#
comm [-1] [-2] [-3] sorted1 sorted2
comm -12 <(sort a.txt) <(sort b.txt)

両方にある

comm -23 <(sort a.txt) <(sort b.txt)

a.txt にだけある

seq

連番を生成

Linux · macOS#
seq [first [step]] last
seq 1 5

1 から 5 まで、1 行に 1 つ

seq -w 1 10

ゼロ埋め:01 … 10

for i in $(seq 1 3); do echo "run $i"; done

ループのカウンター

base64

Base64 のエンコード・デコード

Linux · macOS#
base64 [-d] [-w 0] [file]
printf '%s' 'user:pass' | base64

エンコード(printf なら末尾に改行が付かない)

echo dXNlcjpwYXNz | base64 -d

デコード

base64 -w 0 image.png > image.b64

折り返しなし(GNU は 76 文字で折り返す)

macOS/BSD: macOS の base64 はデフォルトで折り返さず、-w もありません。デコードには -d を使います(古い macOS では -D)。

iconv

文字コードを変換(例:UTF-8 へ)

Linux · macOS#
iconv -f FROM -t TO file
iconv -f WINDOWS-1252 -t UTF-8 old.csv > new.csv

Excel から書き出したファイルの文字化けを直す

iconv -l

対応している文字コードを一覧表示

shuf

行をシャッフル、またはランダムに選ぶ

Linux#
shuf [-n N] file
shuf -n 1 names.txt

ランダムに 1 行

shuf -i 1-100 -n 5

1〜100 からランダムに 5 つの数

サービスとログ

systemd サービスの開始・停止・起動時の有効化と、journalctl によるログの確認。

systemctl status

サービスが動いているか確認

Linux#
systemctl status|is-active|is-enabled unit
systemctl status nginx

状態、PID、メモリ、最新のログ行

systemctl is-active --quiet nginx && echo up

スクリプト用

systemctl start

サービスを開始・停止・再起動・再読み込み

Linux#
sudo systemctl start|stop|restart|reload unit
sudo systemctl restart nginx

完全に再起動

sudo systemctl reload nginx

接続を切らずに設定を再読み込み(サービスが対応していれば)

タイプミスでサイトが落ちないよう、可能なら再起動の前に設定をテストしてください(例:sudo nginx -t)。

systemctl enable

起動時にサービスを開始(または自動起動を止める)

Linux#
sudo systemctl enable|disable [--now] unit
sudo systemctl enable --now docker

自動起動を有効にして今すぐ開始

sudo systemctl disable --now cups

今すぐ停止し、自動起動も無効化

sudo systemctl mask bluetooth

一切起動できないようにする(元に戻すには unmask)

systemctl list-units

実行中・失敗したサービスを一覧表示

Linux#
systemctl list-units [--type=service] [--state=…] | systemctl --failed
systemctl --failed

失敗したもの

systemctl list-units --type=service --state=running

実行中のもの

systemctl list-unit-files --state=enabled

起動時に開始されるもの

systemctl edit

サービスユニットを変更(して systemd を再読み込み)

Linux#
sudo systemctl edit unit | sudo systemctl daemon-reload
sudo systemctl edit nginx

パッケージを更新しても残るドロップイン設定で上書き

systemctl cat nginx

ユニットとすべての上書き設定

sudo systemctl daemon-reload

ユニットファイルを手で編集した後に必要

.service file

自作のアプリをサービスとして実行

Linux#
/etc/systemd/system/<name>.service
[Unit]
Description=My app
After=network.target

[Service]
User=app
WorkingDirectory=/srv/app
ExecStart=/srv/app/bin/server
Restart=on-failure

[Install]
WantedBy=multi-user.target

その後:sudo systemctl daemon-reload && sudo systemctl enable --now myapp

journalctl

サービスとシステムのログを読む

Linux#
journalctl [-u unit] [-f] [-n N] [--since …] [-p level] [-b]
-u unit
1 つのサービス
-f
追跡
-n N
最後の N 行
--since '1 hour ago'
today、yesterday、2026-10-18 09:00 なども可
-p err
優先度 err 以上
-b / -b -1
今回の起動 / 前回の起動
-e
末尾へ移動
journalctl -u nginx -f

1 つのサービスを追跡

journalctl -u myapp --since '10 min ago'

直近の期間

journalctl -b -1 -p err

クラッシュ前の起動時のエラー

journalctl --vacuum

systemd ジャーナルを縮小

Linux#
journalctl --disk-usage | sudo journalctl --vacuum-size=SIZE | --vacuum-time=TIME
journalctl --disk-usage

ログが使っている容量

sudo journalctl --vacuum-size=500M

アーカイブ済みログを最大 500 MB に抑える

sudo journalctl --vacuum-time=14d

2 週間より古いアーカイブ済みログを削除

恒久的に制限するには、/etc/systemd/journald.conf で SystemMaxUse= を設定します。

/var/log

従来のログファイルを探す

Linux#
sudo tail -f /var/log/<file>
sudo tail -f /var/log/syslog

Debian/Ubuntu の一般ログ(Fedora/RHEL では /var/log/messages)

sudo tail -f /var/log/auth.log

Debian/Ubuntu のログインと sudo の記録(RHEL では /var/log/secure)

一部のディストリビューション(Fedora、Arch)では、rsyslog をインストールしない限りログはジャーナルにしか残りません。

shutdown / reboot

再起動・電源オフ

Linux#
sudo shutdown -r|-h [now|+min|hh:mm] [message] | sudo reboot
sudo reboot

今すぐ再起動

sudo shutdown -r +10 'Kernel update'

ログイン中のユーザーに警告して 10 分後に再起動

sudo shutdown -c

予約したシャットダウンを取り消す

sudo shutdown -h now

電源オフ

スケジュール実行:cron、at、タイマー

コマンドを定期的に、または後で 1 回だけ実行します。

cron syntax

cron のスケジュール行を書く

Linux · macOS#
minute hour day-of-month month day-of-week command
30 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

毎日 02:30 に実行し、出力を残す

*/15 * * * * /usr/local/bin/check.sh

15 分ごと

0 9 * * 1-5 /usr/local/bin/report.sh

月曜〜金曜の 09:00

@reboot /usr/local/bin/startup.sh

起動時に 1 回

cron は最小限の PATH で、シェルのプロファイルを読まずに実行されます。絶対パスを使ってください。コマンド内の % は \% とエスケープする必要があります。

crontab -r

crontab を削除(要注意)

危険Linux · macOS#
crontab -r
crontab -l > ~/crontab.bak && crontab -r

削除する前にバックアップ

crontab ~/crontab.bak

ファイルから復元

危険: 確認なしで cron ジョブをすべて削除します。しかも r はキーボード上で e のすぐ隣です。cron の実装によっては、先に確認する -i が使えます(crontab -ri)。

/etc/cron.d

システム全体の cron ジョブ

Linux#
/etc/crontab, /etc/cron.d/*, /etc/cron.{hourly,daily,weekly,monthly}/
0 3 * * * root /usr/local/bin/cleanup.sh

/etc/cron.d/cleanup の行:ユーザーのフィールドが追加されている点に注意

ls /etc/cron.daily/

run-parts が 1 日 1 回実行するスクリプト

Debian と Ubuntu では、/etc/cron.d 内で名前にドットを含むファイルは無視されます。backup.cron ではなく backup という名前にしてください。

at

後で 1 回だけコマンドを実行

Linux#
at TIME | atq | atrm N
echo 'systemctl restart myapp' | sudo at 02:00

今夜 2 時に

echo './report.sh' | at now + 30 minutes

30 分後に

atq

待機中のジョブ

atrm 3

ジョブ 3 を取り消す

at パッケージと、実行中の atd サービスが必要です。

systemd timers

cron の代わりに systemd タイマーでスケジュール

Linux#
systemctl list-timers | <name>.timer with OnCalendar=
systemctl list-timers

すべてのタイマーと次回の実行時刻

[Timer]
OnCalendar=*-*-* 02:30:00
Persistent=true

[Install]
WantedBy=timers.target

backup.service の隣に backup.timer を置く。Persistent で停止中の分を後から実行

systemd-analyze calendar 'Mon..Fri 09:00'

OnCalendar 式の意味を確認

sleep

次のコマンドの前に待機

Linux · macOS#
sleep N[s|m|h|d]
sleep 5 && curl -s localhost:8080/health

サービスが起動するまで待つ

sleep 2m

単位の接尾辞は GNU と現在の macOS で使える

シェルの基本(bash)

パイプ、リダイレクト、グロブ、変数、履歴、そして時間を最も節約できるキー操作。macOS のデフォルトは zsh ですが、shopt、help、bash 4 の機能(macOS の bash は 3.2)を除けば、ほぼすべてそのまま使えます。

|

コマンドの出力を別のコマンドに渡す

Linux · macOS#
command1 | command2
ps aux | grep nginx

一覧を絞り込む

history | grep 'docker run'

以前実行したコマンドを探す

set -o pipefail

スクリプト内で:最後だけでなく、どこか 1 つでも失敗したらパイプライン全体を失敗にする

> and >>

出力をファイルに保存(上書き・追記)

Linux · macOS#
command > file | command >> file
ls -l > listing.txt

上書き(ファイルがなければ作成)

echo 'done' >> progress.log

追記

set -o noclobber

> で既存のファイルを上書きしないようにする(>| で強制)

シェルはコマンドの実行前にファイルを空にするため、sort file > file を実行するとファイルが空になります。別の名前で書き出してから mv してください。

2> and 2>&1

エラー出力、またはエラーと出力をまとめてリダイレクト

Linux · macOS#
command 2> err.log | command > all.log 2>&1 | command &> all.log
find / -name x 2>/dev/null

エラーメッセージを捨てる

./build.sh > build.log 2>&1

出力とエラーを 1 つのファイルに(順番が重要:先に >、次に 2>&1)

./build.sh &> build.log

同じことを bash の短縮形で

<, <<EOF, <<<

ファイル、テキストブロック、文字列を入力として渡す

Linux · macOS#
command < file | command <<'EOF' … EOF | command <<< "string"
mysql mydb < dump.sql

ファイルを入力に

cat > config.yml <<'EOF'
port: 8080
host: $HOST stays literal
EOF

'EOF' をクォートすると $変数が展開されない

grep -c a <<< "banana"

ヒアストリング

&& || ;

条件付きでコマンドを続けて実行

Linux · macOS#
a && b | a || b | a ; b
make && sudo make install

ビルドが成功したときだけインストール

cd /srv/app || exit 1

cd に失敗したらスクリプトを止める

(cd frontend && npm run build)

括弧はサブシェルなので、現在のディレクトリは変わらない

$( ) $(( )) <( )

コマンドの出力を使う、または計算する

Linux · macOS#
$(command) | $((expression)) | <(command)
echo "Today is $(date +%A)"

コマンド置換

echo $(( 1024 * 4 ))

整数の計算

diff <(ls dir1) <(ls dir2)

プロセス置換:出力を一時ファイルのように扱う

バッククォートの `command` は $(command) の古い書き方です。$( ) は入れ子にでき、読みやすくなります。

* ? [ ] { }

ワイルドカードで多数のファイルに一致させる

Linux · macOS#
* any string | ? one char | [abc] one of | {a,b} each word
ls *.jpg

このフォルダー内のすべての JPG

rm photo-??.png

photo-01.png … photo-99.png

cp config.{yml,yml.bak}

ブレース展開:cp config.yml config.yml.bak

shopt -s globstar; ls **/*.md

** は任意の深さに一致(bash 4 以降)

グロブはデフォルトではドットファイルに一致しません(shopt -s dotglob で変更可能)。何も一致しない場合、shopt -s nullglob を設定していなければ bash はパターンをそのまま渡します。

' ' vs " "

文字列や変数を正しくクォート

Linux · macOS#
'literal' | "expands $var and $(cmd)" | \ escapes one character
echo 'Cost: $5'

シングルクォート:何も展開されない

echo "Home is $HOME"

ダブルクォート:変数は展開され、スペースは保たれる

cp "$file" "$dest/"

パスを入れた変数は必ずクォートする。クォートしないとスペースで分割される

VAR=value

シェル変数を設定して使う

Linux · macOS#
name=value (no spaces around =) | "$name" | "${name}"
name="Ada"; echo "Hi $name"

設定して使用

echo "${PORT:-8080}"

未設定または空のときのデフォルト値

file=report.tar.gz; echo "${file%%.*}" "${file##*/}"

拡張子を除く / ディレクトリを除く

echo "${#name}"

文字列の長さ

export

環境変数を設定

Linux · macOS#
export NAME=value | NAME=value command | unset NAME
export NODE_ENV=production

このシェルから起動するすべてのプログラムから見える

DEBUG=1 ./app

そのコマンドだけに適用

printenv | sort

一覧表示

unset DEBUG

削除

シェルを終了すると消えます。残すには ~/.bashrc(対話型シェル)か ~/.profile(ログインシェル)に export を書いてください。

$PATH

フォルダーを PATH に追加

Linux · macOS#
export PATH="dir:$PATH"
echo "$PATH" | tr : '\n'

1 行に 1 エントリー

export PATH="$HOME/.local/bin:$PATH"

自分の bin フォルダーを先頭に追加(~/.bashrc に追記)

hash -r

バイナリを移動した後、キャッシュされたコマンドの場所を忘れさせる

alias / source

ショートカットを作成し、シェルの設定を再読み込み

Linux · macOS#
alias name='command' | source file
alias ll='ls -alF'

残すには ~/.bashrc に追記

source ~/.bashrc

新しいターミナルを開かずに変更を反映(. ~/.bashrc と同じ)

\ls

エイリアスを回避して本来の ls を実行

$?

直前のコマンドが成功したか確認

Linux · macOS#
echo $? (0 = success)
grep -q root /etc/passwd; echo $?

0 は見つかった、1 は見つからない、2 はエラー

set -euo pipefail

スクリプトの先頭に:エラー、未設定の変数、失敗したパイプで停止

history, !!

以前のコマンドを再利用

Linux · macOS#
history | !! | !$ | !N | !prefix | ^old^new
sudo !!

直前のコマンドを sudo 付きで再実行

cd !$

直前のコマンドの最後の引数を使う

!42

履歴の 42 行目を再実行

^foo^bar

直前のコマンドの foo を bar に置き換えて再実行

HISTCONTROL=ignorespace(Ubuntu では ignoreboth の一部としてデフォルト)なら、先頭にスペースを付けて入力したコマンドは保存されません。機密情報を含むコマンドに便利です。

Ctrl+R, Ctrl+A …

ターミナルのキーボードショートカット(bash/readline)

Linux · macOS#
Emacs-style readline keys (the default)
Ctrl+R
履歴をさかのぼって検索。もう一度押すとさらに古い一致へ
Ctrl+A / Ctrl+E
行頭 / 行末へ
Ctrl+U / Ctrl+K
行頭まで / 行末まで切り取り
Ctrl+W
直前の単語を切り取り
Ctrl+Y
切り取ったものを貼り付け
Alt+B / Alt+F
1 単語戻る / 進む
Alt+.
直前のコマンドの最後の引数を挿入
Ctrl+L
画面をクリア
Ctrl+C
実行中のコマンドを中止
Ctrl+D
入力の終わり。空の行ではシェルを終了
Tab Tab
補完候補を表示
bind -P | less

すべてのキー割り当てを一覧表示

man / --help

コマンドのヘルプを見る

Linux · macOS#
man [section] cmd | cmd --help | help builtin | apropos word
man rsync

完全なマニュアル。/ で検索、q で終了

man 5 crontab

セクション 5: コマンドではなくファイル形式の説明

help cd

bash の組み込みコマンドには専用の man ページがない

apropos partition

ある単語に言及しているコマンドを探す

#!/usr/bin/env bash

シェルスクリプトを書いて実行

Linux · macOS#
#!/usr/bin/env bash, chmod +x, ./script.sh
#!/usr/bin/env bash
set -euo pipefail
name="${1:-world}"
if [[ -f "$name.txt" ]]; then
  echo "found $name.txt"
fi
for f in *.log; do
  echo "$f"
done

引数、条件判定、ループ

chmod +x script.sh && ./script.sh Ada

実行可能にして実行

bash -x script.sh

実行される各行をトレース

$1 … $9 は引数、"$@" はすべての引数、$# は引数の数です。[[ ]] は bash の構文なので、POSIX sh のスクリプトでは [ ] を使います。

clear / reset

表示が崩れたターミナルをクリア・修復

Linux · macOS#
clear | reset
reset

バイナリファイルを cat してターミナルに意味不明な文字が出るようになったとき

ブラウザ内で動作する静的なリファレンスです。検索内容はどこにも送信されません。 すべての無料ツールを見る.

不具合や改善できそうな点を見つけましたか?いただいたメッセージはすべて読み、すぐに対応します。

この Linux コマンド チートシートは、200 以上のコマンドをやりたい作業ごとにまとめています。ファイル間の移動と管理、権限、プロセス、ディスク容量、ネットワーク、パッケージ、ユーザー、アーカイブ、検索、テキスト処理、systemd のサービスとログ、cron、そしてそれらをつなぐ bash の基本です。各項目には構文、実際に使うオプションとその 1 行の説明、コピーできる例、そして必要に応じて警告があります。用途(「free disk space」、「what is using port 8080」)やコマンド名で検索でき、どの項目にも直接リンクできます。

オプションは GNU coreutils、util-linux、procps-ng、iproute2、systemd、bash のマニュアルに従っており、これは Ubuntu、Debian、Fedora、RHEL、Arch、openSUSE に搭載されているものです。macOS で挙動が異なる場合は青い注記でその違いを説明しています。sed -i、date -d、stat -c、xargs は、一方で書いたスクリプトがもう一方で動かなくなる定番の箇所だからです。これはよく使う 90% のためのリファレンスで、man ページの代わりではありません。めったに使わないオプションについては、今でも man <command> が最も信頼できる情報源です。

使い方

  1. 検索ボックスに作業内容やコマンドを入力します(/ を押すと検索ボックスに移動します)。すべての単語に一致する必要があるので、「tar extract」なら tar の項目に絞り込まれます。
  2. セクションのチップで「ネットワーク」や「パッケージ」などのトピックに移動するか、「危険なコマンドのみ」にチェックを入れて、データを破壊したり締め出されたりする可能性のあるコマンドをすべて表示します。
  3. 例の横にある「コピー」をクリックし、サンプルのファイル名やホスト名を自分のものに置き換えます。
  4. 項目の横の # をクリックすると、/tools/linux-commands-cheat-sheet#rsync のようなその項目への直接リンクを取得できます。
  5. 「印刷 / PDF として保存」で、サイトのナビゲーションなしのコンパクトな 2 段組みのコピーを作れます。

よくある質問

最初に覚えるべき基本的な Linux コマンドは?

まずは移動とファイル操作から:pwd、ls、cd、mkdir、cp、mv、rm、cat、less。次に man(ヘルプ)、sudo、検索用の grep と find、権限用の chmod と chown、プロセス用の ps、top、kill、ディスク容量用の df と du、リモートマシン用の ssh と scp です。パイプ(|)とリダイレクト(> と >>)は早めに覚えましょう。ほかのすべてを組み合わせられるようになります。

Linux でディスク容量を確認するには?

df -h を実行すると、マウントされているすべてのファイルシステムの空き容量が人間が読みやすい単位で表示されます。何が容量を使っているかを調べるには、ディレクトリ内で du -h -d 1 | sort -h を実行します。サブフォルダーが大きいものほど後ろに並んで表示されます。df ではディスクが満杯なのに du で何も見つからない場合、削除されたファイルがまだプロセスに開かれたままになっている可能性が高く、sudo lsof +L1 でそれらを一覧表示できます。

どのプロセスがポートを使っているかを調べるには?

sudo ss -tulpn を実行すると、待ち受け中のすべての TCP と UDP のポートが、それを所有するプログラムとともに一覧表示されます。特定のポートなら sudo lsof -i :8080 です。sudo は重要で、付けないと自分のプロセスの名前しか表示されません。ss は netstat に代わるものですが、netstat も net-tools パッケージがインストールされたシステムではまだ使えます。

kill と kill -9 の違いは何ですか?

kill PID は SIGTERM を送り、プロセスに終了を求めて後片付け(ファイルのフラッシュ、ロックの解放、接続のクローズ)をさせます。kill -9 PID は SIGKILL を送り、これはカーネルが即座に強制するもので、プロセスは捕捉も無視もできないため、後片付けは行われません。まず普通の kill を使って数秒待ち、-9 はそれを無視するプロセスのために取っておきましょう。

Mac で sed -i が動かないのはなぜですか?

macOS には BSD の sed が搭載されており、-i にはバックアップの拡張子の引数が必要です。macOS では sed -i '' 's/old/new/g' file と書きますが、Linux の GNU sed では同じコマンドが '' をスクリプトとして読むため失敗します。両方で動く形は sed -i.bak 's/old/new/g' file で、後で削除できるバックアップのコピーが残ります。

これらのコマンドはどの Linux ディストリビューションでも同じですか?

ほぼすべて同じです。中核のツールはどこでも同じ GNU と util-linux のプロジェクトから来ています。違うのは、パッケージマネージャー(Debian と Ubuntu は apt、Fedora と RHEL は dnf、Arch は pacman、openSUSE は zypper。パッケージの表で並べて比較しています)、一部のログファイルのパス、管理者グループ(sudo か wheel か)、ファイアウォールのフロントエンド(ufw か firewalld か)です。Alpine や BusyBox ベースのシステムは、オプションの少ない小型版のツールを使っています。

システムを壊しかねないコマンドと、それを防ぐ習慣

被害のほとんどは、ごく少数のコマンドによるものです。間違ったパスや空のパスでの rm -rf、間違ったディスクに向けた dd や mkfs、システムディレクトリへの chmod -R 777 や chown -R、コピー元とコピー先を取り違えた rsync --delete や robocopy 型のミラーリング、crontab -e のつもりの crontab -r、-a なしの usermod -G、間違った位置に -delete を置いた find などです。チートシートでは、それぞれを「危険」と表示し、具体的にどう失敗するかを記載しています。

その大半を防ぐ習慣は、まず無害な版を実行することです。rm -rf の前には同じパスで ls を実行します。find … -delete の前には同じ find を -print で実行します。rsync --delete の前には -n を付けてドライランします。dd や mkfs の前には lsblk を実行し、デバイス名を 2 回読みます。スクリプトでは $DIR ではなく ${DIR:?} と書けば、変数が空のときにパスが / になるのではなくスクリプトが中止されます。

シェルの設定も 2 つ役立ちます。スクリプトの先頭の set -euo pipefail は、不正な状態のまま続行せず最初のエラーで停止させ、set -o noclobber は > による既存ファイルの上書きを拒否させます。

GNU と macOS(BSD):同じコマンドで挙動が異なるところ

macOS は Unix ですが、コマンドラインツールは GNU ではなく FreeBSD に由来しており、その違いはまさに Linux のチュートリアルからコマンドをコピーしたときに表れます。

• sed -i は macOS では引数が必要です(sed -i '' …)。-i.bak なら両方で動きます。

• macOS の date には -d がありません。タイムスタンプの変換には date -r <epoch> を、相対的な日付には date -v-2d を使います。

• stat は GNU の -c ではなく、異なる書式文字を使う -f を使います。

• macOS の xargs は初期設定で空の入力をスキップしますが、GNU の xargs は -r を指定しない限りコマンドを 1 回実行します。

• du はどちらも -d 1 を受け付けますが、--max-depth は GNU のみです。macOS の ps には --sort がありません(ps aux -m または -r を使います)。

• head -n -5、tac、free、ip、ss、timeout、watch は、標準の macOS にはありません。

Mac で GNU の挙動が必要なら、Homebrew の coreutils、gnu-sed、findutils パッケージで、g の接頭辞付き(gsed、gdate、gstat、gxargs)の GNU 版をインストールできます。

権限の読み方と適切な chmod の選び方

ls -l は権限を -rwxr-x--- のような 10 文字で表示します。最初の 1 文字は種類(- はファイル、d はディレクトリ、l はリンク)で、続く 9 文字は所有者、グループ、その他の全員それぞれの読み取り・書き込み・実行の 3 組です。数値では r が 4、w が 2、x が 1 で、組ごとに足し合わせるので、rwxr-x--- は 750 です。

よく使うモード:通常のファイルは 644、ディレクトリとスクリプトは 755、秘密鍵や機密情報を含むファイルは 600、~/.ssh のような非公開ディレクトリは 700。ディレクトリでの x は「中に入れる」という意味なので、ディレクトリには必要で、通常のファイルには不要です。適用する前にモードを確認したいなら、chmod 計算ツールで記号形式と 8 進数形式を相互に変換できます。

関連する無料ツール

  • CMD vs PowerShell vs Bash — 同じ作業をコマンドプロンプト、PowerShell、bash で横に並べて比較。ファイル、grep、環境変数、プロセス、ネットワーク、サービス、スクリプトまで。
  • chmod 計算 — 読み取り・書き込み・実行のチェックボックスから 8 進数のモードと chmod コマンドを求めたり、755、644、rwxr-xr-x を読み解いたりできます。
  • cron 式ジェネレーター — ドロップダウンから cron スケジュールを作成するか貼り付けると、わかりやすい日本語で読み、次の 10 回の実行時刻をローカル時刻と UTC で確認できます。無料、ブラウザで動作。
  • サブネット計算 — 任意の CIDR のネットワーク、ブロードキャスト、ホスト範囲、マスクを計算。VLSM でのネットワーク分割、IPv6 の展開、範囲の重複チェックもできます。
  • Git 早見表 — 直前のコミットの取り消し、ブランチ名の変更、リモートブランチの削除など、やりたいこと別に整理した Git コマンド。新しい switch/restore と従来のコマンド、危険度バッジ付き。