インターンのケース面接で、どう答えていいかわからなかったので、まとめておきます。
この記事では、Linux環境で作業をする上で不可欠な基本的なコマンドとシステムやネットワークのトラブルシューティング時に役立つコマンドをまとめておきます。
1.Linuxの基本的なコマンド
日常的に使用する基本的なコマンドをカテゴリ別にまとめておきます。
1.1.ファイルとディレクトリの操作
コマンド |
説明 |
主なオプション/使用例 |
pwd |
現在のディレクトリのパスを表示 |
pwd |
cd |
ディレクトリを移動 |
cd /home/user/documents (絶対パス) cd .. (親ディレクトリ) cd ~ (ホームディレクトリ) cd - (前回のディレクトリ) |
ls |
ディレクトリの内容を表示 |
ls -l (詳細情報) ls -a (隠しファイルも表示) ls -h (ファイルサイズを人間が読める形式で表示) |
mkdir |
新しいディレクトリを作成 |
mkdir new_dir (単一ディレクトリ) mkdir -p dir1/dir2 (ネストしたディレクトリ) |
rmdir |
空のディレクトリを削除 |
rmdir dir (空のディレクトリ) |
rm |
ファイルを削除 |
rm file.txt (ファイル) rm -r dir (ディレクトリ) rm -f (強制的に削除) |
cp |
ファイルをコピー |
cp file.txt new_dir/ (ディレクトリにコピー) cp -r dir1 dir2 (ディレクトリをコピー) |
mv |
ファイルやディレクトリを移動または名前を変更 |
mv file.txt new_dir/ (ディレクトリに移動) mv file.txt new_name.txt (名前を変更) |
touch |
ファイルのタイムスタンプを更新 |
touch file.txt (ファイルのタイムスタンプを更新) |
1.2.ファイルの内容表示と編集
コマンド |
説明 |
主なオプション/使用例 |
cat |
ファイルの内容を表示 |
cat file.txt (ファイルの内容を表示) |
more |
ファイルの内容を一ページずつ表示 |
more file.txt (ファイルの内容を一ページずつ表示) |
less |
ファイルの内容を一ページずつ表示 |
less file.txt (ファイルの内容を一ページずつ表示) |
head |
ファイルの先頭部分を表示 |
head -n 10 file.txt (ファイルの先頭10行を表示) |
tail |
ファイルの末尾部分を表示 |
tail -n 10 file.txt (ファイルの末尾10行を表示) |
grep |
ファイル内のテキストを検索 |
grep "keyword" file.txt (ファイル内の"keyword"を検索) grep -r "keyword" dir/ (ディレクトリ内の"keyword"を検索) grep -i "keyword" file.txt (大文字小文字を無視して検索) |
sort |
ファイル内のテキストを並べ替え |
sort file.txt (ファイル内のテキストを並べ替え) sort -r file.txt (ファイル内のテキストを逆順に並べ替え) |
uniq |
ファイル内の重複行を削除 |
uniq file.txt (ファイル内の重複行を削除) uniq -c file.txt (ファイル内の重複行をカウント) |
wc |
ファイルの行数、単語数、文字数をカウント |
wc file.txt (ファイルの行数、単語数、文字数をカウント) wc -l file.txt (ファイルの行数をカウント) wc -w file.txt (ファイルの単語数をカウント) wc -c file.txt (ファイルの文字数をカウント) |
cut |
ファイル内のテキストを分割 |
cut -d ',' -f 1 file.txt (ファイル内の","で区切った1列目を表示) cut -d ',' -f 1,2 file.txt (ファイル内の","で区切った1列目と2列目を表示) |
1.3.権限管理と所有者
コマンド |
説明 |
主なオプション/使用例 |
chmod |
ファイルやディレクトリの権限を変更 |
chmod 755 file.txt (ファイルの権限を755に変更) chmod -R 755 dir/ (ディレクトリとその中身の権限を755に変更) |
chown |
ファイルやディレクトリの所有者を変更 |
chown user:group file.txt (ファイルの所有者をuser:groupに変更) chown -R user:group dir/ (ディレクトリとその中身の所有者をuser:groupに変更) |
chgrp |
ファイルやディレクトリのグループを変更 |
chgrp group file.txt (ファイルのグループをgroupに変更) chgrp -R group dir/ (ディレクトリとその中身のグループをgroupに変更) |
whoami |
現在のユーザー名を表示 |
whoami (現在のユーザー名を表示) |
id |
現在のユーザーのIDを表示 |
id (現在のユーザーのIDを表示) |
groups |
現在のユーザーのグループを表示 |
groups (現在のユーザーのグループを表示) |
su |
別のユーザーに切り替え |
su user (userユーザーに切り替え) su - user (userユーザーに切り替え) |
1.4.プロセス管理
コマンド |
説明 |
主なオプション/使用例 |
ps |
プロセスの一覧を表示 |
ps aux (すべてのプロセスを表示) ps -ef (すべてのプロセスを詳細に表示) |
top |
プロセスの一覧を表示 |
top (プロセスの一覧を表示) |
kill |
プロセスを終了 |
kill pid (pidで指定したプロセスを終了) kill -9 pid (pidで指定したプロセスを強制的に終了) |
htop |
プロセスの一覧を表示 |
htop (プロセスの一覧を表示) |
1.5.システム情報とユーティリティ
コマンド |
説明 |
主なオプション/使用例 |
df |
ディスクの使用状況を表示 |
df -h (ディスクの使用状況を表示) |
du |
ディレクトリの使用状況を表示 |
du -h (ディレクトリの使用状況を表示) |
free |
メモリの使用状況を表示 |
free -h (メモリの使用状況を表示) |
uname |
システムの情報を表示 |
uname -a (システムの情報を表示) |
hostname |
ホスト名を表示 |
hostname (ホスト名を表示) |
history |
コマンドの履歴を表示 |
history (コマンドの履歴を表示) |
echo |
文字列を表示 |
echo "Hello, World!" (Hello, World!を表示) |
1.6.パイプとリダイレクト
コマンド |
説明 |
主なオプション/使用例 |
| |
コマンドの出力を次のコマンドに渡す |
ls -l | grep "file.txt" (ls -lの出力をgrep "file.txt"に渡す) |
> |
コマンドの出力をファイルに保存 |
ls -l > file.txt (ls -lの出力をfile.txtに保存) |
>> |
コマンドの出力をファイルに追加 |
ls -l >> file.txt (ls -lの出力をfile.txtに追加) |
< |
コマンドの入力をファイルから取得 |
wc -l < file.txt (file.txtの行数をカウント) |
<< |
コマンドの入力をファイルから取得 |
wc -l << EOF (EOFまでの入力をカウント) |
&> |
コマンドの出力とエラーをファイルに保存 |
ls -l &> file.txt (ls -lの出力とエラーをfile.txtに保存) |
&>> |
コマンドの出力とエラーをファイルに追加 |
ls -l &>> file.txt (ls -lの出力とエラーをfile.txtに追加) |
2>&1 |
エラー出力を標準出力にリダイレクト |
ls -l 2>&1 (ls -lのエラー出力を標準出力にリダイレクト) |
2.Linuxのトラブルシューティング
2.1.トラブルシューティングの一般的な思考プロセス
このような思考は経験で培うものだと思いますが、まとめてあった方が良いと考えました。
問題対処は、以下のような順番で行うことが多いです。
2.1.1.問題の明確化
- 何が起きているか。
- いつから起きているか。
- どこで起きているのか。
- 誰に影響が出ているのか。
- どうすれば再現可能か。
- 以前は正常の動作していたのか。変更があったのか。
- エラーメッセージは何か
2.1.2.影響範囲の特定
- 単一ユーザか、複数ユーザか。
- 特定のアプリケーションか、すべてのアプリケーションか。
- 特定のサーバか、すべてのサーバか。
- ローカルの問題か、リモートの問題か。
- ネットワークの問題か、サーバの問題か。
- ハードウェアの問題か、ソフトウェアの問題か。
2.1.3.OSI参照モデルを下位層から順番に確認
- 物理層
- LANケーブルは刺さっているか。LEDは点灯しているか。
- データリンク層
- NICは認識されているか。(
ip a
,dmesg
)
- MACアドレスは正しいか。(
ip neigh
)
- ネットワーク層
- IPアドレスは正しいか。ルーティングは正しいか。(
ip a
, ip route
, traceroute
)
- トランスポート層
- ポートは開いているか。サービスはリッスンしてるか。(
telnet
,nc
,ss
,netstat
)
- ファイアウォールは通過できているのか(
iptables -L
)
- アプリケーション層
- アプリケーションは起動しているか。
- ログにエラーが出ていないか。(
systemctl status <サービス名>
, journalctl -u <サービス名>
)
2.1.4.変更とテスト
- 一度に一つの変更を行う。
- 変更を行うたびにテストを行う。
- 問題が解決しない場合は、変更を元に戻す。
2.1.5.ログの確認
- システムログ(
/var/log/syslog
,/var/log/messages
,journalctl
)
- カーネルログ(
dmesg
)
- アプリケーションログ
- セキュリティログ(
/var/log/auth.log
,/var/log/secure
)
- ネットワークログ(
tcpdump
で取得したパケット)
2.2. ネットワークトラブルシューティング
以下ではネットワーク関連で頻出のコマンドを レイヤ別・目的別 に整理し、実際の切り分けフローと合わせて紹介します。
2.2.1. ネットワーク状態の可視化
コマンド |
主な目的 |
使用例 |
ip a / ip addr
|
IP アドレスとサブネット確認 |
ip -br a (ブリーフ表示) |
ip link |
インターフェース状態 (UP/DOWN)・MTU |
ip link set eth0 up |
ip route |
ルーティングテーブル確認 |
ip route get 8.8.8.8 |
hostname -I |
ローカルに割当てられた IP 一覧 |
|
cat /etc/resolv.conf |
DNS リゾルバ設定確認 |
|
ethtool eth0 |
物理リンク速度・デュプレックス・エラー |
ethtool -S eth0 (統計) |
2.2.2. 疎通テスト & 経路診断
コマンド |
主な目的 |
使用例 |
ping |
ICMP Echo による到達確認 |
ping -c 4 8.8.8.8 |
traceroute |
経路上の各ホップを可視化 |
traceroute github.com |
mtr |
ping + traceroute をリアルタイムで統計 |
mtr -rwc 10 example.com |
2.2.3. パケットキャプチャ & 解析
コマンド |
主な目的 |
使用例 |
tcpdump |
パケットキャプチャ (CLI) |
sudo tcpdump -i eth0 port 80 -w web.pcap |
wireshark |
GUI で詳細解析 (.pcap を開く) |
|
🔍 Tip tcpdump でキャプチャした .pcap
は Wireshark にドラッグ&ドロップして GUI 解析すると効率的です。
2.2.4. ポート & サービスの確認
コマンド |
主な目的 |
ss -tunlp |
リッスン中の TCP/UDP ポートとプロセス |
lsof -i :80 |
特定ポートを使用するプロセス特定 |
nc -zv host 22 |
ポート開放テスト (TCP) |
netstat -tulnp |
(旧) ポート・ルート・統計 |
2.2.5. DNS 解決の検証
コマンド |
主な目的 |
dig +short example.com |
A レコード確認 |
dig @8.8.8.8 example.com MX |
特定 DNS へ MX 問い合わせ |
nslookup example.com |
(legacy) 名前解決 |
host 8.8.8.8 |
逆引き確認 |
2.2.6. ルーティング & ARP/NDP
コマンド |
主な目的 |
ip route show table all |
すべてのルーティングテーブル表示 |
ip neigh |
ARP/NDP キャッシュ確認 |
arp -a |
(legacy) ARP テーブル表示 |
2.2.7. ファイアウォールとパケットフィルタ
コマンド |
主な目的 |
sudo iptables -L -n -v |
Netfilter ルール確認 |
sudo firewall-cmd --list-all |
firewalld ルール確認 |
sudo ufw status verbose |
UFW 状態確認 |
2.2.8. ネットワーク関連ログのウォッチ
コマンド |
主な目的 |
journalctl -u NetworkManager -f |
NetworkManager のリアルタイムログ |
tail -f /var/log/syslog |
Debian 系汎用ログ |
tail -f /var/log/messages |
RHEL 系汎用ログ |
dmesg -T |
grep -i eth |
2.2.9. パフォーマンスと統計系ユーティリティ
コマンド |
主な目的 |
ifstat -t |
インターフェースごとの転送速度 |
sar -n DEV 1 5 |
NIC 単位の送受信統計 |
ethtool -S eth0 |
ハードウェアエラーカウンタ |
2.2.10. クイックチェックリスト
-
リンク:
ip link
, ethtool
で物理層 OK?
-
IP / ルーティング:
ip a
, ip route
正しい?
-
疎通:
ping
, traceroute
でどこまで届く?
-
DNS:
dig
, nslookup
名称解決は?
-
ポート:
ss
, lsof
, nc
で LISTEN / 通過確認。
-
FW:
iptables -L
, firewall-cmd
でブロック無し?
-
パケット:
tcpdump
で実際に流れているか確認。
-
ログ:
journalctl
, dmesg
でエラーを洗う。
Discussion