- サーバー
Linuxコマンド一覧|100個をカテゴリ別に実行結果つきで解説
Linuxコマンドとは、ターミナル(端末)に文字で入力して、ファイル操作やプロセス管理、ネットワーク確認などをLinuxに指示するための命令です。数百種類ありますが、開発やサーバー運用でよく使うのは100個ほどで、カテゴリごとに覚えると迷わず引けるようになります。
この記事は、Linuxコマンドの全体を見渡す入口です。約100個をカテゴリ別の表にまとめ、各コマンドに「よく使うオプション1行」と、Ubuntu 24.04.4 LTS(GNU coreutils 9.4、bash 5.2)で実際に実行した結果を載せました。長い出力は数行に縮めています。最後に、rm -rf や chmod -R を安全に書く方法を表で整理しました。
Linuxコマンドの早見表(やりたいこと別)
| やりたいこと | コマンド例 |
|---|---|
| 今いる場所を知る/移動する | pwd / cd ~/work |
| ファイル一覧を詳しく見る | ls -lah |
| フォルダを作る(階層ごと) | mkdir -p a/b/c |
| コピー・移動・削除 | cp -r src dst / mv -i a b / rm -i file |
| 中身を見る(先頭・末尾・追跡) | head -n 20 f / tail -n 20 f / tail -f app.log |
| 文字列を探す | grep -rn "ERROR" logs/ |
| ファイルを探す | find . -name "*.py" |
| 列を切り出す・集計する | cut -d, -f2 f.csv | sort | uniq -c |
| 置換する | sed 's/old/new/g' f |
| 権限を変える | chmod 755 deploy.sh / chmod u+x f |
| 動いているプロセスを見る・止める | ps aux / kill <PID> |
| ディスクとメモリの空き | df -h / du -sh * / free -h |
| 使っているポートを調べる | ss -tlnp / lsof -i :8080 |
| HTTPで疎通確認 | curl -I http://localhost:8080/ |
| 圧縮・展開 | tar -czf a.tar.gz dir / tar -xzf a.tar.gz |
| パッケージを入れる | sudo apt update && sudo apt install jq |
| OSやカーネルの情報 | cat /etc/os-release / uname -a |
| サービスの状態 | systemctl status nginx |
| 結果をファイルに保存 | cmd > out.txt 2>&1 |
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「Linuxコマンド一覧|100個をカテゴリ別に実行結果つきで解説」
検証環境と表の見方
| 項目 | 内容 |
|---|---|
| OS | Ubuntu 24.04.4 LTS(カーネル 6.18、コンテナ環境、root で実行) |
| 主なツール | GNU coreutils 9.4、bash 5.2.21、procps、iproute2、OpenSSH 9.6p1、jq 1.7 |
| サンプル | stock.csv(id,item,qty の4行)、logs/app.log(INFO/ERROR などの5行) |
- 実行結果の列は、この環境で実行した出力の抜粋です。「(未実行)」と書いたものは、この環境にsystemdやコマンドがないため公式マニュアルに沿って記載しています。
- オプションは最もよく使うものを1行で載せています。詳しくは
コマンド --helpかman コマンドで確認できます。
サンプルの stock.csv は id,item,qty の見出しと、1,desk,3 / 2,chair,10 / 3,monitor,5 / 4,chair,2 の4行です。
ファイル・ディレクトリ操作
| コマンド | 役割 | よく使うオプション | 実行結果(抜粋) |
|---|---|---|---|
pwd |
今いるディレクトリを表示 | -P(リンク先の実パス) |
/…/demo(前半は省略) |
cd |
移動 | cd -(直前)、cd ~(ホーム)、cd ..(1つ上) |
出力なし |
ls |
一覧 | -l(詳細)-a(隠し含む)-h(単位)-t(新しい順) |
-rw-r--r-- 1 root root 54 Sep 29 15:10 stock.csv |
mkdir |
ディレクトリ作成 | -p(途中の階層も作成、既存でもエラーなし) |
出力なし |
touch |
空ファイル作成・更新日時の更新 | -d "2026-01-01"(日時指定) |
出力なし |
cp |
コピー | -r(フォルダ)-i(上書き確認)-p(属性保持) |
出力なし |
mv |
移動・名前変更 | -i(上書き確認)--update=none(上書きしない) |
出力なし |
rm |
削除 | -i(1件ずつ確認)-I(4件以上でまとめて確認)-r |
rm: remove regular empty file 'n1.txt'? |
rmdir |
空のディレクトリを削除 | -p(親も空なら削除) |
出力なし |
ln |
リンク作成 | -s(シンボリックリンク) |
latest.log -> logs/app.log |
tree |
階層を木構造で表示 | -L 2(深さ)-a |
├── logs |
stat |
詳しい属性 | -c '%a %n'(権限を数字で) |
755 -rwxr-xr-x deploy.sh |
file |
ファイルの種類を判定 | -i(MIMEタイプ) |
stock.csv: CSV ASCII text |
realpath |
絶対パスに変換 | --relative-to=DIR |
/…/demo/stock.csv(前半は省略) |
basename |
パスからファイル名だけ | 第2引数で拡張子を除去 | basename /var/log/app.log .log → app |
dirname |
パスからディレクトリだけ | ― | /var/log |
ls -lh の実行結果です。先頭10文字が種類と権限、続いて所有者・サイズ・更新日時です。
$ ls -lh
total 16K
-rwxr-xr-x 1 root root 10 Sep 29 15:15 deploy.sh
drwxr-xr-x 2 root root 4.0K Sep 29 15:15 logs
drwxr-xr-x 2 root root 4.0K Sep 29 15:15 src
-rw-r--r-- 1 root root 54 Sep 29 15:15 stock.csv
ファイルの中身を表示する
| コマンド | 役割 | よく使うオプション | 実行結果(抜粋) |
|---|---|---|---|
cat |
全体を表示・連結 | -n(行番号) |
1 id,item,qty |
less |
1画面ずつ表示 | /語(検索)q(終了)+F(追跡) |
対話表示 |
head |
先頭を表示 | -n 20 |
id,item,qty / 1,desk,3 |
tail |
末尾を表示 | -n 20、-f(追記を追跡)、-n +2(2行目から) |
3,monitor,5 / 4,chair,2 |
nl |
行番号をつけて表示 | -ba(空行にも番号) |
2 ERROR db timeout |
wc |
行数・単語数・バイト数 | -l(行数) |
5 stock.csv |
echo |
文字列を出力 | -e(\n などを解釈) |
― |
printf |
書式つきで出力 | '%s\t%s\n' |
id name |
tee |
画面とファイルの両方に出力 | -a(追記) |
echo extra | tee -a note.txt → extra |
ログを見るときは tail -f(追記を表示し続ける、Ctrl+Cで終了)、大きなファイルは cat ではなく less を使うと画面が流れずに読めます。
検索する
| コマンド | 役割 | よく使うオプション | 実行結果(抜粋) |
|---|---|---|---|
grep |
文字列を含む行を探す | -r(再帰)-n(行番号)-i(大小無視)-v(除外)-c(件数) |
ERROR db timeout |
find |
条件でファイルを探す | -name "*.py" -type f -mtime -1 -size +100M |
./src/app.py |
which |
コマンドの場所 | -a(すべて) |
/usr/bin/python3 |
whereis |
実行ファイル・マニュアルの場所 | ― | ls: /usr/bin/ls |
type |
コマンドの種類(組み込み・別名など) | -a |
cd is a shell builtin |
locate |
索引からファイル名検索(速い) | -i(事前に updatedb) |
索引作成が必要 |
$ grep -c ERROR logs/app.log
2
$ find . -name "*.py"
./src_bak/app.py
./src/app.py
テキスト処理(集計・変換)
| コマンド | 役割 | よく使うオプション | 実行結果(抜粋) |
|---|---|---|---|
cut |
列の切り出し | -d,(区切り)-f2(2列目) |
item / desk / chair |
sort |
並べ替え | -n(数値)-r(逆順)-t, -k3(3列目) |
4,chair,2 が先頭 |
uniq |
連続する重複をまとめる | -c(件数)※先に sort |
2 chair |
tr |
文字の置換・削除 | a-z A-Z、-d '\r'(CR削除) |
DESK CHAIR |
sed |
置換・行の編集 | 's/old/new/g'、-i.bak(上書き+バックアップ) |
2,stool,10 |
awk |
列ごとの処理・計算 | -F,(区切り)'{print $2}' |
20(合計) |
diff |
差分 | -u(統一形式) |
同じなら出力なし |
comm |
ソート済み2ファイルの共通・差 | -12(共通行だけ) |
― |
paste |
行を横に連結 | -d:、-s(1行にまとめる) |
desk:3 |
split |
ファイルを分割 | -l 1000(行数ごと) |
part_aa part_ab part_ac |
xargs |
入力を引数に変換して実行 | -n 1、-0(find -print0 と組み合わせ) |
5 ./logs/app.log |
jq |
JSONの抽出・整形 | -r(引用符なし).key |
desk |
パイプ(|)でつなぐと、CSVの集計がコマンドだけでできます。
$ cut -d, -f2 stock.csv | tail -n +2 | sort | uniq -c
2 chair
1 desk
1 monitor
$ sort -t, -k3 -n stock.csv
id,item,qty
4,chair,2
1,desk,3
3,monitor,5
2,chair,10
$ awk -F, 'NR>1{s+=$3} END{print s}' stock.csv
20
$ sed 's/chair/stool/g' stock.csv
id,item,qty
1,desk,3
2,stool,10
3,monitor,5
4,stool,2
つまずきやすい点:awk -F, '$3>=5' stock.csv と書くと、見出し行 id,item,qty も表示されました。見出しの qty は文字列として比較されるためです。NR>1 を付けて見出しを除くと意図どおりになります。
$ awk -F, '$3>=5' stock.csv
id,item,qty
2,chair,10
3,monitor,5
sed -i は元のファイルを書き換えるので、sed -i.bak でバックアップを残すか、まず -i なしで結果を確認するのがおすすめです。
権限・所有者
| コマンド | 役割 | よく使うオプション | 実行結果(抜粋) |
|---|---|---|---|
chmod |
権限の変更 | 755、u+x(所有者に実行権)、go-w |
-rwxr-xr-x deploy.sh |
chown |
所有者の変更 | user:group、-R(再帰) |
demo_user demo_user stock.csv |
chgrp |
グループの変更 | -R |
出力なし |
umask |
新規作成時の既定権限 | -S(記号表示) |
0022 |
sudo |
管理者権限で実行 | -u user、-i(rootのシェル) |
― |
数字の権限は「所有者・グループ・その他」の順に、読み4+書き2+実行1の合計です。
ユーザー・グループ
| コマンド | 役割 | よく使うオプション | 実行結果(抜粋) |
|---|---|---|---|
whoami |
今のユーザー名 | ― | root |
id |
UID・GID・所属グループ | id ユーザー名 |
uid=0(root) gid=0(root) groups=0(root) |
groups |
所属グループ | ― | demo_user : demo_user |
useradd |
ユーザー作成 | -m(ホーム作成)-s /bin/bash |
uid=1001(demo_user) … |
usermod |
ユーザー変更 | -aG docker user(グループ追加、-a を忘れずに) |
出力なし |
userdel |
ユーザー削除 | -r(ホームも削除) |
出力なし |
passwd |
パスワード変更 | passwd ユーザー名 |
対話入力 |
su |
ユーザー切り替え | su - user(環境も切り替え) |
対話入力 |
$ useradd -m demo_user && id demo_user
uid=1001(demo_user) gid=1002(demo_user) groups=1002(demo_user)
usermod -G を -a なしで使うと、指定したグループだけに置き換わります。追加したいときは必ず -aG と書きます。
プロセス・ジョブ
| コマンド | 役割 | よく使うオプション | 実行結果(抜粋) |
|---|---|---|---|
ps |
プロセス一覧 | aux(全部)-ef、--sort=-%mem |
22248 S 00:00 sleep 300 |
top |
リアルタイム表示 | -b -n 1(1回だけ出力)、画面で M(メモリ順) |
load average: 0.49, … |
kill |
シグナル送信(停止) | 既定はTERM、-9(強制)は最後の手段 |
Terminated sleep 300 |
pkill |
名前で停止 | -f(引数まで一致)-u user |
出力なし |
pgrep |
名前でPID検索 | -a(コマンドも表示)-f |
23393 sleep 301 |
& |
バックグラウンド実行 | cmd & |
[1] 22248 |
jobs |
ジョブ一覧 | -l(PIDも) |
[1]+ 23393 Running sleep 301 … |
fg / bg |
前面へ/背面で再開 | fg %1、Ctrl+Zで一時停止後に bg |
― |
nohup |
ログアウト後も実行 | nohup cmd > out.log 2>&1 & |
done(ログに出力) |
$ sleep 300 &
[1] 22248
$ ps -o pid,stat,etime,cmd -p 22248
PID STAT ELAPSED CMD
22248 S 00:00 sleep 300
$ kill 22248
[1]+ Terminated sleep 300
pkill や pkill -f は名前が一致するプロセスをすべて止めます。共有サーバーでは、pgrep -a 名前 で対象を確認してから、PIDを指定して kill するのが確実です。実際に pgrep -a -f "sleep 301" を実行すると、目的の sleep 301 に加えて、その文字列を含むコマンドを実行中のシェル自身も一致しました。-f は引数全体を見るため、こうした巻き込みが起きます。
ディスク・メモリ
| コマンド | 役割 | よく使うオプション | 実行結果(抜粋) |
|---|---|---|---|
df |
ファイルシステムの空き | -h(単位つき)-i(inode) |
/dev/vda 252G 36G 5.9G 86% / |
du |
ディレクトリの使用量 | -sh(合計)--max-depth=1、| sort -h |
8.0K logs |
free |
メモリ使用量 | -h |
Mem: 7.8Gi 1.0Gi 2.0Gi … |
lsblk |
ブロックデバイス一覧 | -f(ファイルシステム) |
vda 254:0 0 256G 0 disk / |
mount |
マウント状況・マウント | mount | grep " / " |
/dev/vda on / type ext4 (rw,…) |
vmstat |
CPU・メモリ・I/Oの推移 | vmstat 1 5(1秒ごと5回) |
r b swpd free … |
$ free -h
total used free shared buff/cache available
Mem: 7.8Gi 1.0Gi 2.0Gi 31Mi 5.1Gi 6.8Gi
Swap: 0B 0B 0B
メモリの残りは available の列で判断します。buff/cache は必要に応じて解放されるためです。
ネットワーク
| コマンド | 役割 | よく使うオプション | 実行結果(抜粋) |
|---|---|---|---|
ip |
IPアドレス・経路 | -br addr(簡潔)、route |
lo UNKNOWN 127.0.0.1/8 |
ss |
ソケット・待ち受けポート | -tlnp(TCP・待ち受け・数値・プロセス) |
LISTEN 0 5 127.0.0.1:7251 … python3 |
lsof |
ファイル・ポートを開いているプロセス | -i :8080 |
python3 22285 root 3u IPv4 … (LISTEN) |
curl |
HTTPリクエスト | -I(ヘッダ)-s -v -X POST -d |
HTTP/1.0 200 OK |
wget |
ファイルのダウンロード | -O 名前、-c(再開) |
― |
ping |
疎通確認 | -c 4(回数) |
(未実行:この環境に未導入) |
dig |
DNS問い合わせ | +short、@8.8.8.8 |
― |
getent |
hostsやDNSで名前解決 | hosts 名前 |
127.0.0.1 localhost |
ssh |
リモートログイン | -i 鍵、-p ポート、-L(ポート転送) |
― |
scp |
SSHでファイル転送 | -r、-P ポート |
― |
rsync |
差分同期 | -av、--dry-run(確認だけ)、--delete |
sending incremental file list |
ローカルで簡易サーバー(ポート7251)を立てて確認した結果です。
$ ss -tlnp | grep 7251
LISTEN 0 5 127.0.0.1:7251 0.0.0.0:* users:(("python3",pid=22285,fd=3))
$ curl -sI http://127.0.0.1:7251/ | head -2
HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.11.15
$ rsync -av --dry-run src/ backup_src/ | head -4
sending incremental file list
created directory backup_src
./
app.py
つながらないときは ss -tlnp で待ち受けを確認 → curl で応答を見る順に切り分けます。rsyncは元フォルダ末尾の / の有無で結果が変わる(src/ は中身、src はフォルダごと)ため、まず --dry-run で確かめると安心です。
パッケージ管理
| コマンド | 役割 | よく使うオプション | 実行結果(抜粋) |
|---|---|---|---|
apt update |
パッケージ一覧の更新 | sudo apt update |
― |
apt install |
インストール | -y(確認なし) |
― |
apt upgrade |
更新 | apt list --upgradable(先に確認) |
― |
apt remove / purge |
削除 | purge は設定ファイルも削除 |
― |
apt-cache policy |
入っている版と候補の版 | apt-cache policy git |
Installed: 1:2.43.0-1ubuntu7.3 |
dpkg -l |
インストール済み一覧 | dpkg -l パッケージ名、-L(ファイル一覧) |
ii coreutils 9.4-3ubuntu6.2 amd64 |
dnf |
RHEL系(Rocky・Alma等)のパッケージ管理 | dnf install、dnf check-update |
(未実行:Ubuntu環境のため) |
$ apt-cache policy git | head -3
git:
Installed: 1:2.43.0-1ubuntu7.3
Candidate: 1:2.43.0-1ubuntu7.3
Ubuntu・Debian系は apt、RHEL系(Rocky Linux・AlmaLinux等)は dnf とパッケージ管理が分かれます。それ以外の多くのコマンドは共通です。
圧縮・アーカイブ
| コマンド | 役割 | よく使うオプション | 実行結果(抜粋) |
|---|---|---|---|
tar |
まとめる・展開する | -czf(作成)-xzf(展開)-tzf(一覧)-C 先 |
src/app.py |
gzip / gunzip |
.gz圧縮・展開 | -k(元ファイルを残す) |
stock.csv stock.csv.gz |
zip / unzip |
.zip圧縮・展開 | -r、unzip -l(一覧) |
12 … src/app.py |
xz |
高圧縮 | -k、-d(展開) |
stock.csv.xz |
$ tar -czf backup.tar.gz src logs
$ tar -tzf backup.tar.gz
src/
src/app.py
logs/
logs/app.log
$ mkdir -p restore && tar -xzf backup.tar.gz -C restore && ls restore
logs
src
tarは「c=作る、x=展開、t=一覧、z=gzip、f=ファイル名」。展開前に -t で中身を確認し、-C で展開先を指定すると安心です。
システム情報・シェル環境
| コマンド | 役割 | よく使うオプション | 実行結果(抜粋) |
|---|---|---|---|
uname |
カーネル情報 | -a、-r(版だけ) |
Linux vm 6.18.44-fc-v49 … x86_64 GNU/Linux |
cat /etc/os-release |
OSの種類と版 | head -2 |
PRETTY_NAME="Ubuntu 24.04.4 LTS" |
hostname |
ホスト名 | -I(IPアドレス) |
vm |
uptime |
起動時間と負荷 | -p(読みやすい形式) |
up 26 min, load average: 0.49, … |
date |
日時 | "+%Y-%m-%d %H:%M:%S" |
2026-09-29 15:12:32 |
lscpu |
CPU情報 | | grep "Model name" |
CPU(s): 2 |
dmesg |
カーネルのメッセージ | -T(時刻を読みやすく)| tail |
docker0: port 1(…) entered forwarding state |
w / last |
ログイン中・ログイン履歴 | last -n 10 |
USER TTY FROM LOGIN@ … |
env |
環境変数の一覧 | | grep ^LANG |
LANG=C.UTF-8 |
export |
環境変数を設定 | export APP_ENV=dev |
echo $APP_ENV → dev |
alias |
別名 | alias ll='ls -alF' |
type ll → ll is aliased to `ls -alF' |
history |
実行履歴 | !番号(再実行)history 20 |
― |
md5sum / sha256sum |
ハッシュ値(改ざん・同一確認) | -c(照合) |
4eb0f1d5fab0… stock.csv |
watch |
一定間隔で繰り返し実行 | -n 2(2秒ごと)-d(差分強調) |
画面表示 |
man / --help |
マニュアル・ヘルプ | man -k 語(キーワード検索) |
― |
systemd(サービス管理)
| コマンド | 役割 |
|---|---|
systemctl status nginx |
状態とログの末尾を表示 |
sudo systemctl start / stop / restart nginx |
起動・停止・再起動 |
sudo systemctl reload nginx |
設定の再読み込み(止めずに反映) |
sudo systemctl enable --now nginx |
自動起動を有効化して、すぐ起動 |
systemctl list-units --type=service --state=running |
動いているサービス一覧 |
systemctl --failed |
失敗したサービス一覧 |
journalctl -u nginx -n 50 |
サービスのログ(最新50行) |
journalctl -u nginx -f |
ログを追跡 |
journalctl --since "1 hour ago" |
期間で絞り込み |
この検証環境はsystemdで起動していないため、上の表は未実行です(systemdの公式マニュアルに沿って記載)。実行すると次のメッセージが出ました。コンテナ内ではsystemctlが使えないことが多いです。
$ systemctl status cron
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
パイプ・リダイレクト・ショートカット
| 書き方 | 意味 | 例 |
|---|---|---|
a | b |
aの出力をbの入力へ | ps aux | grep nginx |
> file |
出力を上書き保存 | echo a > out.txt |
>> file |
追記 | echo b >> out.txt |
2> file |
エラーだけ保存 | ls nosuch 2> err.txt |
> file 2>&1 |
出力とエラーを両方保存 | cmd > all.log 2>&1 |
< file |
ファイルを入力に | sort < stock.csv |
a && b |
aが成功したらb | make && ./app |
a || b |
aが失敗したらb | grep -q X f || echo none |
a ; b |
結果に関係なく順に | cd /tmp ; ls |
$(cmd) |
コマンドの結果を埋め込む | echo "today: $(date +%F)" |
<(cmd) |
結果をファイルのように渡す | diff <(sort a) <(sort b) |
$ ls stock.csv nosuch > all.txt 2>&1; cat all.txt
ls: cannot access 'nosuch': No such file or directory
stock.csv
2>&1 は「エラーを標準出力と同じ場所へ」という意味で、> file の後ろに書きます。
キーボードショートカット(bash)です。対話操作のため実行結果はありません。
| キー | 動作 | キー | 動作 |
|---|---|---|---|
| Tab | ファイル名・コマンドの補完 | Ctrl + R | 履歴を検索 |
| Ctrl + C | 実行中のコマンドを中断 | Ctrl + Z | 一時停止(bg / fg で再開) |
| Ctrl + A / Ctrl + E | 行頭 / 行末へ | Ctrl + U / Ctrl + K | カーソル前 / 後ろを削除 |
| Ctrl + L | 画面をクリア | Ctrl + D | 入力終了・ログアウト |
| ↑ / ↓ | 履歴をたどる | !! |
直前のコマンドを再実行(sudo !! など) |
影響の大きいコマンドを安全に書く方法
Linuxは確認なしで実行されるコマンドが多いため、書き方を少し工夫するだけで、意図しない削除や上書きを防げます。以下はこの環境で確認した動作です。
| 操作 | 起こりうること | 安全な書き方 | 確認した動作 |
|---|---|---|---|
rm -rf dir |
確認なしで再帰削除 | まず ls dir で中身確認。複数なら rm -I |
rm: remove 4 arguments? と1回確認 |
rm -rf "$DIR/cache" |
変数が空だと /cache を指す |
rm -rf "${DIR:?}/cache"、スクリプト先頭に set -u |
TARGET_DIR: parameter null or not set で停止 |
rm -rf / |
システム全体 | GNU rmは既定で保護(--preserve-root) |
it is dangerous to operate recursively on '/' |
chmod -R 777 dir |
全員が書き込み可能に | ディレクトリ755・ファイル644を find で分けて設定 |
下のコード参照 |
chown -R user /path |
パス違いで広範囲が変わる | 実行前に realpath で対象を確認 |
― |
> important.conf |
中身が一瞬で空になる | set -o noclobber で上書き防止、>> で追記 |
cannot overwrite existing file |
mv a b / cp a b |
既存のbを上書き | mv -i、cp -i、上書きしないなら --update=none |
mv: overwrite 'n2.txt'? |
sed -i |
元ファイルを書き換え | sed -i.bak(バックアップ)、先に -i なしで確認 |
― |
kill -9 |
後片付けなしで終了 | まず kill(TERM)、止まらないときだけ -9 |
TERMで Terminated |
sudo echo x > /etc/f |
リダイレクトはsudoの外で失敗 | echo x | sudo tee /etc/f(追記は tee -a) |
― |
find ... -delete |
条件違いで多数削除 | 先に -print で一覧、確認後に -delete |
― |
dd of=/dev/sdX |
指定を誤るとディスクを上書き | lsblk でデバイス名を確認してから |
(未実行) |
crontab -r |
確認なしで全削除 | crontab -l > cron.bak で保存、crontab -ri |
(未実行:この環境に未導入) |
変数が空のときに止まる書き方と、権限をまとめて安全に設定する書き方です。
#!/usr/bin/env bash
set -euo pipefail # 未定義変数・エラーで止まる
TARGET_DIR="${1:-}"
rm -rf "${TARGET_DIR:?}/cache" # 空なら削除せずエラーで終了
find site -type d -exec chmod 755 {} + # ディレクトリは755(chmod -R 777 の代わりに)
find site -type f -exec chmod 644 {} + # ファイルは644
$ bash -c 'rm -rf "${TARGET_DIR:?}/cache"'
bash: line 1: TARGET_DIR: parameter null or not set
$ bash -c 'set -u; rm -rf "$TARGET_DIR/cache"'
bash: line 1: TARGET_DIR: unbound variable
$ ls -lR site
site:
drwxr-xr-x 2 root root 4096 Sep 29 15:12 css
-rw-r--r-- 1 root root 0 Sep 29 15:12 index.html
site/css:
-rw-r--r-- 1 root root 0 Sep 29 15:12 a.css
なお、coreutils 9.4 で cp -n を使うと cp: warning: behavior of -n is non-portable and may change in future; use --update=none instead と表示されました。上書きしないコピーは --update=none と書くと安心です。
よくある質問
Q. 最初に覚えるべきLinuxコマンドはどれですか?
A. pwd・ls・cd・mkdir・cp・mv・rm・cat・less・grep の10個で、ファイルを見て動かす基本操作ができます。次に chmod・ps・df・tar を覚えると、サーバー作業の多くに対応できます。
Q. Macのターミナルでも同じコマンドが使えますか?
A. 多くは使えますが、macOSはBSD系のため一部のオプションが異なります(例:sed -i は sed -i '' と書く)。
Q. オプションを忘れたときはどう調べますか?
A. コマンド --help で短い一覧、man コマンド で詳しいマニュアルが見られます。man -k キーワード で、目的に合うコマンド名を探すこともできます。
まとめ
- Linuxコマンドはカテゴリ別に覚えると引きやすい。まずは早見表から「やりたいこと」で探す
ls -lah・grep -rn・find -name・tail -fは日々の作業で最もよく使う組み合わせ- テキスト処理は cut・sort・uniq・awk をパイプでつなぐとCSV集計までできる
ss -tlnp→curlの順でネットワークの問題を切り分ける- 削除や上書きは
-i・-I・${VAR:?}・set -u・noclobber・--dry-runで安全に - 権限は
findでディレクトリ755・ファイル644に分けて設定する - 迷ったら
--helpとmanで公式の説明を確認する
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「Linuxコマンド一覧|100個をカテゴリ別に実行結果つきで解説」
株式会社RJCでは、日々のサーバー作業で使うコマンドや安全な書き方を、プロジェクトの中で仲間と共有しています。こうした知識を共有しながら、日々技術を磨いています。
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。