目次
- 基本操作コマンド
- ファイル操作
- ディレクトリ操作
- テキスト処理
- 検索コマンド
- アーカイブと圧縮
- ネットワーク関連
- プロセス管理
- システム情報
- パーミッション管理
- パッケージ管理
- SSH関連
- Git コマンド
- Docker コマンド
- Windows環境でのLinux
- シェルスクリプト基本
- 便利なワンライナー
- トラブルシューティング
- パフォーマンス最適化
- セキュリティ対策
1. 基本操作コマンド
コマンド | 説明 | 使用例 | 実際の使用シーン |
---|---|---|---|
ls |
ディレクトリの内容を表示するための基本コマンド |
ls -la (全ファイル詳細表示) ls -lh (サイズを人間が読みやすい単位で表示) |
・プロジェクトファイル確認 ・設定ファイル一覧表示 |
cd |
ディレクトリを移動するコマンド |
cd /path/to/dir (指定パスに移動) cd .. (親ディレクトリへ移動) |
・プロジェクト間の移動 ・設定ディレクトリへの移動 |
pwd |
現在の作業ディレクトリを表示(Print Working Directory) |
pwd (現在の作業ディレクトリのフルパスを表示) |
・スクリプト内での位置確認 ・複数ターミナルでの作業位置確認 |
touch |
空ファイルの作成またはタイムスタンプの更新 |
touch file.txt (ファイルが存在しなければ作成、存在すれば更新日時のみ変更) touch -d "2023-01-01" file.txt (特定日時にタイムスタンプを設定) |
・プレースホルダーファイル作成 ・ファイル日時の変更 |
mkdir |
新しいディレクトリを作成 |
mkdir -p path/to/dir (親ディレクトリが存在しなければ一緒に作成) mkdir test (testという名前のディレクトリを作成) |
・プロジェクト構造の構築 ・ログディレクトリの作成 |
cp |
ファイル・ディレクトリをコピー |
cp -r source dest (ディレクトリを再帰的にコピー) cp file.txt backup/ (ファイルをバックアップディレクトリにコピー) |
・設定ファイルのバックアップ ・ファイル配布 |
mv |
ファイル・ディレクトリの移動または名前変更 |
mv old_name new_name (ファイル名またはディレクトリ名を変更) mv file.txt /path/to/dir/ (ファイルを別のディレクトリに移動) |
・ファイル整理 ・バックアップの移動 |
rm |
ファイル・ディレクトリを削除 注意: 元に戻せない |
rm -rf dir (ディレクトリを再帰的に強制削除) rm file.txt (ファイルを削除) |
・一時ファイルの削除 ・古いバックアップの整理 |
cat |
ファイルの内容を表示 |
cat file.txt (ファイルの内容をターミナルに出力) cat file1.txt file2.txt > combined.txt (複数ファイルを結合) |
・設定ファイルの内容確認 ・ログの確認 |
less |
ファイルを閲覧(スクロール可能) |
less file.txt (ファイルを閲覧、PageUp/PageDownでスクロール可能) less +100 file.txt (100行目から表示開始) |
・大きなログファイルの閲覧 ・長いテキストファイルの確認 |
head |
ファイルの先頭部分を表示 |
head -n 10 file.txt (ファイルの先頭10行を表示) head file.txt (デフォルトで先頭10行を表示) |
・ログファイルの最新部分確認 ・CSVヘッダー確認 |
tail |
ファイルの末尾部分を表示 |
tail -f log.txt (ファイルの更新をリアルタイムで監視) tail -n 100 log.txt (最後の100行を表示) |
・ログのリアルタイム監視 ・処理進行状況の確認 |
man |
コマンドのマニュアルを表示 |
man ls (lsコマンドのマニュアル表示) man -k search_term (キーワードでマニュアル検索) |
・コマンドオプションの確認 ・使い方の詳細学習 |
history |
実行したコマンドの履歴を表示 |
history (コマンド履歴全てを表示) `history |
grep git` (gitを含むコマンド履歴のみ表示) |
clear |
画面をクリア |
clear (ターミナル画面をクリア) Ctrl+L (ショートカットでクリア) |
・作業スペースのクリーンアップ ・出力の見やすさ向上 |
echo |
テキストを出力 |
echo "Hello World" (テキストをターミナルに出力) echo $PATH (環境変数を表示) |
・シェルスクリプト内のメッセージ表示 ・環境変数確認 |
2. ファイル操作
コマンド | 説明 | 使用例 | 実際の使用シーン |
---|---|---|---|
file |
ファイルタイプを判定 |
file document.pdf (ファイルのタイプを表示) file * (カレントディレクトリ内の全ファイルのタイプを表示) |
・拡張子のないファイルの種類特定 ・ファイルフォーマットの確認 |
stat |
ファイルの詳細情報(メタデータ)を表示 |
stat file.txt (ファイルの詳細情報を表示) stat -c "%a %n" file.txt (パーミッションと名前のみ表示) |
・ファイル作成・更新日時の確認 ・パーミッションの詳細確認 |
wc |
行数・単語数・バイト数をカウント |
wc -l file.txt (ファイルの行数のみをカウント) wc file.txt (行数、単語数、バイト数を表示) |
・コードの行数カウント ・テキスト量の測定 |
dd |
低レベルなファイルコピーや変換 注意: 誤使用でデータ損失の可能性 |
dd if=/dev/zero of=file.txt count=1 bs=1M (1MBの0埋めファイルを作成) dd if=/dev/sda of=disk.img bs=4M (ディスクイメージを作成) |
・ディスクイメージのバックアップ ・大容量ファイルの効率的コピー |
ln |
ハードリンクまたはシンボリックリンクを作成 |
ln -s target_file link_name (シンボリックリンクを作成) ln original_file hard_link (ハードリンクを作成) |
・共有ライブラリへのリンク ・設定ファイルの標準位置へのリンク |
chown |
ファイル所有者とグループを変更 |
chown user:group file.txt (ファイルの所有者とグループを変更) chown -R www-data:www-data /var/www/ (ディレクトリ以下を再帰的に変更) |
・アップロードファイルの所有権変更 ・サービス実行ユーザーへの権限付与 |
chmod |
ファイルのアクセス権限を変更 |
chmod 755 script.sh (実行権限を付与) chmod -R g+w directory/ (ディレクトリ以下にグループ書き込み権限を付与) |
・スクリプトに実行権限を付与 ・セキュリティ設定の調整 |
diff |
ファイル間の差分を比較 |
diff file1.txt file2.txt (2つのファイルの差分を表示) diff -u file1.txt file2.txt (Unified形式で差分を表示) |
・設定ファイルの変更確認 ・コードの変更点確認 |
md5sum |
MD5ハッシュ値を計算(ファイル整合性確認) |
md5sum file.txt (ファイルのMD5ハッシュ値を表示) md5sum -c checksums.md5 (チェックサムファイルで検証) |
・ダウンロードファイルの整合性確認 ・ファイル変更の検出 |
sha256sum |
SHA256ハッシュ値を計算(より安全なハッシュ) |
sha256sum file.txt (ファイルのSHA256ハッシュ値を表示) sha256sum -c checksums.sha256 (チェックサムファイルで検証) |
・セキュリティ重視のファイル検証 ・暗号化キーの検証 |
truncate |
ファイルサイズを変更(拡大/縮小) |
truncate -s 0 log.txt (ファイルを0バイトに切り詰めて空にする) truncate -s 1G large_file.dat (ファイルサイズを1GBに設定) |
・ログファイルのクリア ・大容量ファイルの作成 |
split |
大きなファイルを分割 |
split -b 1G large_file.dat chunk_ (1GBごとに分割) split -l 1000 records.csv part_ (1000行ごとに分割) |
・大容量ファイルの転送 ・バックアップの分割保存 |
basename |
パスからファイル名を取得 |
basename /path/to/file.txt (パスからファイル名「file.txt」を抽出) basename /path/to/file.txt .txt (拡張子を除いたファイル名「file」を抽出) |
・スクリプト内でのファイル名抽出 ・出力ファイル名の構築 |
dirname |
パスからディレクトリ名を取得 |
dirname /path/to/file.txt (パスからディレクトリ部分「/path/to」を抽出) |
・スクリプト内での相対パス生成 ・設定ファイルディレクトリの特定 |
3. ディレクトリ操作
コマンド | 説明 | 使用例 | 実際の使用シーン |
---|---|---|---|
find |
条件に一致するファイル・ディレクトリを検索 |
find /path -name "*.txt" -type f (指定パス内のtxtファイルを検索) find . -mtime +30 -delete (30日以上前のファイルを削除) |
・古いログファイルの検索 ・特定拡張子のファイル一括処理 |
du |
ディレクトリのディスク使用量を表示 |
du -sh /path (指定パスの合計サイズを人間が読みやすい形式で表示) du -h --max-depth=1 /path (1階層のみのサイズを表示) |
・ディスク容量の問題調査 ・バックアップサイズの見積もり |
ncdu |
ディスク使用量を対話的に表示(du の高機能版) |
ncdu /path (対話的ディスク使用量分析ツールを起動) ncdu -x / (他のファイルシステムをマウントポイントで除外) |
・ディスク容量問題の詳細分析 ・大きなディレクトリの調査 |
tree |
ディレクトリ構造をツリー形式で表示 |
tree -L 2 /path (深さ2までのディレクトリ構造を表示) `tree -I "node_modules |
vendor" .` (特定ディレクトリを除外してツリー表示) |
pushd |
ディレクトリをスタックに保存して移動 |
pushd /path/to/dir (現在のディレクトリをスタックに保存して移動) pushd +2 (スタック内の2番目の位置に移動) |
・複数ディレクトリ間の素早い移動 ・元の場所に戻る予定のある作業 |
popd |
スタックから直前のディレクトリに戻る |
popd (スタックから最後にpushdした場所に戻る) popd +1 (スタック内の1番目の位置を削除) |
・作業ディレクトリへの素早い復帰 ・スクリプト内での位置復元 |
dirs |
ディレクトリスタックの内容を表示 |
dirs -v (スタック内容を番号付きで表示) dirs -c (スタックをクリア) |
・保存されたディレクトリパスの確認 ・スタック操作前の状態確認 |
4. テキスト処理
コマンド | 説明 | 使用例 | 実際の使用シーン |
---|---|---|---|
grep |
テキスト内でパターンに一致する行を検索 |
grep -r "pattern" /path (ディレクトリ内を再帰的に検索) grep -i "ERROR" --include="*.log" -r . (大文字小文字を区別せずにログファイルからエラーを検索) |
・エラーログの検索 ・コード内の特定パターン検索 |
sed |
テキストストリームの検索・置換・編集 |
sed 's/old/new/g' file.txt (ファイル内の「old」を「new」に置換) sed -i '5d' file.txt (ファイルの5行目を削除) |
・設定ファイルの一括編集 ・テキスト整形の自動化 |
awk |
パターン処理言語によるテキスト処理 |
awk '{print $1}' file.txt (各行の1列目を抽出) awk -F, '{sum+=$3} END {print sum}' data.csv (CSV 3列目の合計を計算) |
・ログファイルの特定フィールド抽出 ・CSVデータの集計 |
cut |
テキストの特定部分を切り出し |
cut -d, -f1,3 file.csv (CSVの1列目と3列目を抽出) cut -c1-10 file.txt (各行の最初の10文字を抽出) |
・CSVからの特定列抽出 ・固定長データの項目抽出 |
tr |
文字単位での置換や削除 |
tr 'a-z' 'A-Z' < file.txt (小文字を大文字に変換) tr -d '\r' < windows.txt > unix.txt (改行コードをWindows形式からUNIX形式に変換) |
・改行コード変換 ・大文字小文字変換 |
sort |
テキストファイルの行をソート |
sort -k2,2n file.txt (2列目を数値としてソート) sort -t, -k3,3r data.csv (CSVの3列目を降順でソート) |
・ログエントリのソート ・CSVデータの並べ替え |
uniq |
隣接する重複行を削除/カウント | `sort file.txt | uniq -c<br>(重複行数をカウント)<br><br> sort file.txt |
paste |
複数ファイルの行を並べて結合 |
paste file1.txt file2.txt (2ファイルを横に並べて結合) paste -d, file1.txt file2.txt (カンマ区切りで結合) |
・関連データの結合 ・マルチカラムレポート作成 |
join |
共通フィールドに基づいてファイルを結合 |
join file1.txt file2.txt (第1フィールドで結合) join -1 2 -2 3 file1.txt file2.txt (file1の2列目とfile2の3列目で結合) |
・関連データの結合 ・複数ログファイルの相関分析 |
comm |
ソート済みファイル間の共通・相違する行を比較 |
comm file1.txt file2.txt (3列で出力: file1のみ、file2のみ、共通部分) comm -23 file1.txt file2.txt (file1のみにある行を表示) |
・データセット間の差分特定 ・共通エントリの抽出 |
column |
テキストを整形された列に整列 |
column -t file.txt (スペース区切りのテキストを整形表示) column -t -s, data.csv (CSVを整形表示) |
・データの整形表示 ・テーブル形式データの可読性向上 |
strings |
バイナリファイルから印字可能な文字列を抽出 |
strings binary_file (バイナリから印字可能文字を抽出) strings -n 10 binary_file (10文字以上の文字列のみ表示) |
・バイナリファイルのデバッグ ・埋め込みテキストの調査 |
5. 検索コマンド
コマンド | 説明 | 使用例 | 実際の使用シーン |
---|---|---|---|
find |
ファイルシステム内でファイル検索と操作 |
find . -name "*.log" -mtime +30 -delete (30日以上前のlogファイルを検索して削除) find /path -size +100M (100MB以上のファイルを検索) |
・古いファイルのクリーンアップ ・大容量ファイルの特定 |
locate |
インデックスDBを使用した高速ファイル検索 |
locate filename (filenameを含むファイルを高速検索) locate -i "*.conf" (大文字小文字を区別せずconfファイルを検索) |
・設定ファイルの迅速な検索 ・システム内のファイル位置特定 |
which |
コマンドのフルパスを検索 |
which python (pythonコマンドのパスを表示) which -a python (すべてのpythonコマンドのパスを表示) |
・コマンドパスの確認 ・複数バージョンのコマンド位置確認 |
whereis |
コマンドのバイナリ・ソース・マニュアル位置を検索 |
whereis gcc (gccコマンドの関連ファイル位置を表示) |
・コマンドのドキュメント位置確認 ・パッケージのインストール確認 |
rg (ripgrep) |
高速なテキストパターン検索 |
rg -i "pattern" --type=js (JavaScriptファイル内でパターンを大文字小文字区別なく検索) rg -l "TODO" --glob "*.py" (TODOを含むPythonファイル名を表示) |
・大規模コードベースの検索 ・特定言語ファイルのみの検索 |
ag (silver searcher) |
高速テキスト検索(rg に類似) |
ag "pattern" --js (JavaScriptファイル内でパターンを検索) ag --count "TODO" --python (Pythonファイル内のTODO出現回数をカウント) |
・大規模プロジェクト内の検索 ・コード内の特定パターン検索 |
xargs |
標準入力をコマンドの引数に変換 | `find . -name "*.tmp" | xargs rm<br>(tmpファイルを検索して削除)<br><br> cat urls.txt |
6. アーカイブと圧縮
コマンド | 説明 | 使用例 | 実際の使用シーン |
---|---|---|---|
tar |
複数ファイルをアーカイブ化・展開 |
tar -czvf archive.tar.gz /path/to/dir (ディレクトリをgzip圧縮してアーカイブ作成) tar -xzvf archive.tar.gz (gzip圧縮アーカイブを展開) |
・プロジェクトのバックアップ ・ログファイルのアーカイブ |
gzip |
gzip形式で単一ファイルを圧縮 |
gzip file.txt (ファイルをgzip圧縮してfile.txt.gzを作成) gzip -9 file.txt (最高圧縮率で圧縮) |
・ログファイルの圧縮 ・転送サイズの削減 |
gunzip |
gzip圧縮ファイルを展開 |
gunzip file.txt.gz (gzip圧縮ファイルを展開) |
・圧縮ログの閲覧 ・ダウンロードしたgzipファイルの展開 |
zip |
ZIP形式でファイル圧縮(Windows互換) |
zip -r archive.zip /path/to/dir (ディレクトリを再帰的にZIP圧縮) zip -e secure.zip file.txt (パスワード保護付きで圧縮) |
・クロスプラットフォーム共有 ・Webからのダウンロード用パッケージ |
unzip |
ZIPアーカイブを展開 |
unzip archive.zip -d /path/to/extract (ZIPファイルを指定ディレクトリに展開) unzip -l archive.zip (ZIPファイルの内容一覧表示) |
・ダウンロードしたZIPの展開 ・アップロードされたZIPの処理 |
bzip2 |
bzip2形式で圧縮(gzipより高圧縮率) |
bzip2 file.txt (ファイルをbzip2圧縮してfile.txt.bz2を作成) |
・高圧縮率が必要なファイル ・長期保存用アーカイブ |
bunzip2 |
bzip2圧縮ファイルを展開 |
bunzip2 file.txt.bz2 (bzip2圧縮ファイルを展開) |
・bz2形式のファイル展開 ・アーカイブからのデータ復元 |
xz |
xz形式で圧縮(最高圧縮率) |
xz -9 file.txt (最高圧縮率でxz圧縮) xz -d file.txt.xz (xz圧縮ファイルを展開) |
・非常に大きなファイルの長期保存 ・帯域制限がある環境での転送 |
7z |
多形式対応の高圧縮率アーカイバ |
7z a archive.7z /path/to/dir (7z形式でアーカイブ作成) 7z x archive.7z -o/path/to/extract (アーカイブを指定パスに展開) |
・高圧縮率が必要な場合 ・パスワード保護が必要な場合 |
tar よく使うオプション
オプション | 説明 | 使用例 |
---|---|---|
c |
アーカイブを作成 |
tar -cf archive.tar files/ (アーカイブファイルを作成) |
x |
アーカイブを展開 |
tar -xf archive.tar (アーカイブファイルを展開) |
t |
アーカイブ内容を表示 |
tar -tf archive.tar (アーカイブの内容一覧を表示) |
f |
ファイル名指定 |
tar -cf archive.tar files/ (操作対象のアーカイブファイル名を指定) |
v |
詳細表示 |
tar -cvf archive.tar files/ (処理されるファイルを表示) |
z |
gzip圧縮/展開 |
tar -czf archive.tar.gz files/ (gzipでの圧縮を指定) |
j |
bzip2圧縮/展開 |
tar -cjf archive.tar.bz2 files/ (bzip2での圧縮を指定) |
J |
xz圧縮/展開 |
tar -cJf archive.tar.xz files/ (xzでの圧縮を指定) |
--exclude |
特定ファイル/ディレクトリを除外 |
tar -czf archive.tar.gz --exclude='*.log' dir/ (logファイルを除外してアーカイブ作成) |
7. ネットワーク関連
コマンド | 説明 | 使用例 | 実際の使用シーン |
---|---|---|---|
ping |
ホストへの到達性を確認 |
ping -c 4 example.com (4回だけpingを送信) ping -i 0.2 -c 100 192.168.1.1 (0.2秒間隔で100回pingを送信) |
・サーバーの生存確認 ・ネットワーク遅延の測定 |
traceroute |
パケットの経路を表示 |
traceroute example.com (宛先までの経路を表示) traceroute -I example.com (ICMPを使用した経路追跡) |
・ネットワーク問題の切り分け ・経路最適化の検証 |
mtr |
traceroute + ping の機能を統合 |
mtr example.com (対話的な経路モニタリングを開始) mtr --report example.com (レポート形式で結果を出力) |
・ネットワーク不安定性の継続監視 ・パケットロスの発生場所特定 |
dig |
DNS検索と解析 |
dig example.com A (ドメインのAレコードを検索) dig +trace example.com (DNSの委任パスをトレース) |
・DNSの問題診断 ・DNSレコードの確認 |
nslookup |
名前解決の確認 |
nslookup example.com (ホスト名の名前解決を実行) nslookup -type=mx example.com (MXレコードの検索) |
・基本的なDNS確認 ・メールサーバー設定確認 |
host |
シンプルなDNS検索 |
host example.com (ホスト名の名前解決を実行) host -t TXT example.com (TXTレコードの表示) |
・DNSレコードの簡易確認 ・SPF/DKIM記録の確認 |
whois |
ドメイン登録情報の照会 |
whois example.com (ドメインの登録情報を表示) whois 8.8.8.8 (IPアドレスの所有者情報を表示) |
・ドメイン所有者の確認 ・不審なIPアドレスの調査 |
curl |
データ転送ツール(HTTP/FTP/SMTP等) |
curl -O https://example.com/file.zip (ファイルをダウンロード) curl -X POST -d "data" https://api.example.com (POSTリクエストを送信) |
・API のテスト ・ファイルダウンロード |
wget |
ファイルダウンロード特化ツール |
wget https://example.com/file.zip (ファイルをダウンロード) wget -r -np https://example.com/docs/ (ウェブサイトの一部を再帰的にダウンロード) |
・大きなファイルの再開可能ダウンロード ・Webサイトのミラーリング |
nc (netcat) |
TCP/UDP接続の診断・テスト |
nc -zv example.com 80 (ポート80への接続テスト) nc -l 8080 > received_file.txt (ポート8080でリッスンしてファイル受信) |
・ポート開通確認 ・簡易ファイル転送 |
ss |
ソケット情報の表示 |
ss -tuln (リスニング中のTCP/UDPポートを表示) ss -tp (接続中のTCPソケットとプロセスを表示) |
・開いているポートの確認 ・ネットワーク接続の詳細確認 |
ip |
ネットワークインターフェース管理 |
ip a (全インターフェースのアドレス情報を表示) ip r (ルーティングテーブルを表示) |
・ネットワーク設定の確認 ・ルーティングテーブルの管理 |
tcpdump |
ネットワークパケットのキャプチャ |
tcpdump -i eth0 port 80 (eth0インターフェースのポート80トラフィックをキャプチャ) tcpdump -A -i any host example.com (特定ホストとの通信内容をASCII表示) |
・ネットワーク問題の詳細診断 ・通信内容の検査 |
nmap |
ネットワーク探索・セキュリティ監査 |
nmap -p 1-1000 192.168.1.1 (1-1000番ポートのスキャン) nmap -sV example.com (サービスバージョン検出スキャン) |
・セキュリティ脆弱性スキャン ・ネットワーク資産の把握 |
8. プロセス管理
コマンド | 説明 | 使用例 | 実際の使用シーン |
---|---|---|---|
ps |
実行中のプロセス情報を表示 |
ps aux (すべてのプロセスを詳細表示) `ps -ef |
grep nginx` (nginxプロセスを検索) |
top |
プロセス活動をリアルタイム監視 |
top (リアルタイムプロセス監視を開始) top -u username (特定ユーザーのプロセスのみ表示) |
・リソース使用状況のリアルタイム監視 ・高負荷プロセスの特定 |
htop |
top の高機能インタラクティブ版 |
htop (対話的プロセスビューアを起動) htop -p 1234,5678 (指定PIDのプロセスのみ表示) |
・システム状態の視覚的監視 ・プロセス階層関係の把握 |
kill |
プロセスにシグナルを送信して終了 |
kill -9 1234 (プロセスを強制終了) kill -15 1234 (プロセスに正常終了シグナルを送信) |
・応答しないプロセスの終了 ・サービスの再起動準備 |
pkill |
名前でプロセスを終了 |
pkill firefox (firefoxという名前のプロセスをすべて終了) pkill -u username (指定ユーザーのプロセスをすべて終了) |
・特定アプリケーションの全インスタンス終了 ・ユーザープロセスの一括終了 |
pgrep |
プロセス名からPIDを検索 |
pgrep nginx (nginxプロセスのPIDを表示) pgrep -u root ssh (rootユーザーのsshプロセスを検索) |
・特定プロセスのPID取得 ・スクリプト内でのプロセス特定 |
nice |
優先度を指定してコマンド実行 |
nice -n 19 command (最低優先度でコマンドを実行) nice -n -10 command (高優先度で実行、root権限必要) |
・バックグラウンドジョブの優先度下げ ・システム負荷分散 |
renice |
実行中プロセスの優先度を変更 |
renice -n 19 -p 1234 (PID 1234のプロセスの優先度を下げる) renice -n 10 -u username (特定ユーザーのプロセス優先度を変更) |
・実行中プロセスの優先度調整 ・重要プロセスのパフォーマンス確保 |
jobs |
シェルのバックグラウンドジョブを表示 |
jobs -l (バックグラウンドジョブをPID付きで表示) |
・バックグラウンド処理の状態確認 ・中断したジョブの確認 |
fg |
バックグラウンドジョブをフォアグラウンドに |
fg %1 (ジョブ番号1をフォアグラウンドに移動) |
・バックグラウンドジョブの監視 ・中断したジョブの再開 |
bg |
一時停止したジョブをバックグラウンドで実行 |
bg %1 (ジョブ番号1をバックグラウンドで継続実行) |
・誤って前面で開始したジョブの移動 ・長時間実行ジョブのバックグラウンド化 |
nohup |
ログアウト後もプロセスを継続 |
nohup command & (ログアウト後も継続するプロセスを開始) nohup command > output.log 2>&1 & (出力をファイルにリダイレクト) |
・長時間実行バッチの実行 ・リモートサーバーでの長期処理 |
watch |
コマンドを定期的に実行して結果表示 |
watch -n 2 'ls -l' (2秒ごとにls -lを実行して表示) |
・ファイル変更の監視 ・システム状態の定期確認 |
screen |
仮想端末セッションを管理 |
screen -S session_name (名前付きのscreenセッションを開始) screen -r session_name (既存のscreenセッションに再接続) |
・リモートサーバーでの長時間作業 ・複数ターミナル管理 |
tmux |
高機能な端末多重化 |
tmux new -s session_name (名前付きtmuxセッションを開始) tmux a -t session_name (既存のtmuxセッションにアタッチ) |
・複数の作業を同時に表示 ・開発環境のカスタマイズ |
9. システム情報
コマンド | 説明 | 使用例 | 実際の使用シーン |
---|---|---|---|
uname |
システム情報の表示 |
uname -a (すべてのシステム情報を表示) uname -r (カーネルリリースバージョンのみ表示) |
・OS/カーネルバージョン確認 ・システム互換性の確認 |
hostname |
システムのホスト名を表示・設定 |
hostname (現在のホスト名を表示) sudo hostname new-name (一時的にホスト名を変更) |
・現在のサーバー名確認 ・複数サーバー操作時の識別 |
uptime |
システム稼働時間と負荷表示 |
uptime (稼働時間、ユーザー数、負荷平均を表示) uptime -p (稼働時間を読みやすい形式で表示) |
・システム安定性の確認 ・負荷傾向の確認 |
free |
メモリ使用状況の表示 |
free -h (メモリ使用量を人間が読みやすい単位で表示) free -m (メガバイト単位で表示) |
・メモリリーク調査 ・アプリケーションのメモリ要件確認 |
df |
ディスク空き容量の表示 |
df -h (ファイルシステムの使用状況を人間が読みやすい単位で表示) df -i (iノード使用状況を表示) |
・ディスク容量の管理 ・ファイルシステム使用率の監視 |
lsblk |
ブロックデバイス情報の表示 |
lsblk (ブロックデバイスをツリー形式で表示) lsblk -f (ファイルシステム情報を含めて表示) |
・ディスクのパーティション構成確認 ・マウントポイントの確認 |
dmesg |
カーネルメッセージバッファの表示 | `dmesg | grep -i error<br>(エラーメッセージを大文字小文字区別なく抽出)<br><br> dmesg -T`(タイムスタンプを読みやすい形式で表示) |
vmstat |
仮想メモリ統計情報 |
vmstat 1 10 (1秒間隔で10回統計情報を表示) vmstat -S M (メガバイト単位で表示) |
・システムのボトルネック特定 ・メモリ/CPU/IO使用状況の監視 |
iostat |
CPU・ディスクI/O統計 |
iostat -x 1 10 (拡張統計を1秒間隔で10回表示) iostat -d -x /dev/sda (特定ディスクの詳細I/O統計) |
・ディスクI/Oのボトルネック特定 ・ストレージパフォーマンス問題診断 |
journalctl |
systemdのジャーナルログ表示 |
journalctl -xe (最新のメッセージを詳細表示) journalctl -u nginx.service (特定サービスのログのみ表示) |
・システムエラーの調査 ・サービス問題のトラブルシューティング |
systemctl |
systemdサービス管理 |
systemctl status nginx (Nginxサービスの状態を表示) systemctl restart mysql (MySQLサービスを再起動) |
・サービスの状態確認 ・サービスの起動/停止/再起動 |
10. パーミッション管理
コマンド | 説明 | 使用例 | 実際の使用シーン |
---|---|---|---|
chmod |
ファイルのアクセス権限を変更 |
chmod 755 script.sh chmod -R g+w directory/
|
・スクリプトに実行権限を付与 ・共有ディレクトリのアクセス制御 |
chown |
ファイルの所有者とグループを変更 |
chown user:group file.txt chown -R www-data:www-data /var/www/
|
・デプロイしたファイルの所有権変更 ・サービス実行ユーザーへの権限付与 |
chgrp |
ファイルのグループ所有権を変更 |
chgrp group file.txt chgrp -R developers /opt/project/
|
・グループベースのアクセス制御 ・プロジェクトファイルの共有設定 |
umask |
新規作成ファイルのデフォルト権限設定 |
umask 022 umask -S
|
・セキュリティポリシーの実装 ・新規ファイル作成時の権限制御 |
getfacl |
ファイルのACL(アクセス制御リスト)を表示 |
getfacl file.txt getfacl -R directory/
|
・詳細なアクセス制御の確認 ・セキュリティ監査 |
setfacl |
ファイルにACL設定を適用 |
setfacl -m u:user:rw file.txt setfacl -m g:group:r-x directory/
|
・通常のパーミッションでは不十分な場合の詳細制御 ・特定ユーザーへの例外的権限付与 |
chmod数値表記
数字 | パーミッション | 表記 | 説明 |
---|---|---|---|
0 | なし | --- |
アクセス権なし |
1 | 実行のみ | --x |
ファイル実行、ディレクトリ移動のみ |
2 | 書き込みのみ | -w- |
ファイル編集、ディレクトリ内ファイル作成・削除 |
3 | 書き込み+実行 | -wx |
ファイル編集・実行、ディレクトリ管理 |
4 | 読み取りのみ | r-- |
ファイル内容表示、ディレクトリ内容一覧 |
5 | 読み取り+実行 | r-x |
ファイル読取・実行、ディレクトリ閲覧・移動 |
6 | 読み取り+書き込み | rw- |
ファイル読取・編集、ディレクトリ内容確認・編集 |
7 | 全権限 | rwx |
すべての操作が可能 |
一般的なパーミッション設定:
- スクリプト:
755
(rwxr-xr-x) - 所有者は全権限、他者は実行と読み取り - 設定ファイル:
644
(rw-r--r--) - 所有者は読み書き可能、他者は読み取りのみ - 非公開ファイル:
600
(rw-------) - 所有者のみアクセス可能
11. パッケージ管理
apt (Debian/Ubuntu)
コマンド | 説明 | 使用例 | 実際の使用シーン |
---|---|---|---|
apt update |
パッケージリストを最新化 |
sudo apt update (パッケージリストを更新) |
・システム更新前の準備 ・最新パッケージ情報の取得 |
apt upgrade |
インストール済みパッケージを更新 |
sudo apt upgrade (インストール済みパッケージを更新) sudo apt full-upgrade (依存関係の変更も含めた完全アップグレード) |
・定期的なシステムメンテナンス ・セキュリティアップデートの適用 |
apt install |
パッケージをインストール |
sudo apt install package (単一パッケージをインストール) sudo apt install package1 package2 (複数パッケージを同時にインストール) |
・開発ツールのインストール ・アプリケーション依存関係のインストール |
apt remove |
パッケージを削除(設定ファイルは保持) |
sudo apt remove package (パッケージを削除するが設定ファイルは残す) |
・不要アプリケーションの削除 ・ディスク容量の確保 |
apt purge |
パッケージと設定ファイルを完全に削除 |
sudo apt purge package (パッケージと設定ファイルを完全に削除) |
・設定を含めた完全クリーンアップ ・クリーンインストール準備 |
apt search |
パッケージを検索 |
apt search keyword (キーワードを含むパッケージを検索) |
・必要なパッケージの検索 ・特定機能を提供するパッケージの特定 |
apt show |
パッケージの詳細情報を表示 |
apt show package (パッケージの詳細情報を表示) |
・依存関係の確認 ・パッケージのバージョン・機能確認 |
apt list |
パッケージリストを表示 |
apt list --installed (インストール済みパッケージを一覧表示) apt list --upgradable (アップグレード可能なパッケージを表示) |
・インストール済みソフトウェアの確認 ・利用可能アップデートの確認 |
apt autoremove |
不要になった依存パッケージを削除 |
sudo apt autoremove (不要になった依存パッケージを自動削除) |
・システムクリーンアップ ・ディスク容量の確保 |
yum/dnf (RHEL/CentOS/Fedora)
コマンド | 説明 | 使用例 | 実際の使用シーン |
---|---|---|---|
yum update |
パッケージ情報の更新とアップデート |
sudo yum update (すべてのパッケージを更新) sudo yum update -y (確認なしで全パッケージを更新) |
・システムの定期メンテナンス ・セキュリティパッチの適用 |
dnf upgrade |
パッケージの更新(dnfはyumの後継) |
sudo dnf upgrade (すべてのパッケージをアップグレード) sudo dnf upgrade --refresh (メタデータを更新してからアップグレード) |
・Fedoraシステムの更新 ・RHEL8以降のシステム更新 |
yum install |
パッケージのインストール |
sudo yum install package (パッケージをインストール) sudo yum install --nogpgcheck package (GPG署名チェックをスキップしてインストール) |
・サーバーソフトウェアのインストール ・開発環境の構築 |
dnf install |
dnfによるパッケージインストール |
sudo dnf install package (パッケージをインストール) sudo dnf install --best package (最適なバージョンをインストール) |
・最新Linuxディストリビューションでのソフトウェア導入 ・モジュラーパッケージの管理 |
yum remove |
パッケージの削除 |
sudo yum remove package (パッケージを削除) |
・不要ソフトウェアの削除 ・バージョン変更のための削除 |
yum search |
パッケージの検索 |
yum search keyword (キーワードを含むパッケージを検索) |
・特定機能のパッケージ検索 ・パッケージ名の部分一致検索 |
dnf list |
パッケージ一覧の表示 |
dnf list installed (インストール済みパッケージを一覧表示) dnf list updates (更新可能なパッケージを表示) |
・システム構成の確認 ・アップデート対象の把握 |
12. SSH関連
コマンド | 説明 | 使用例 | 実際の使用シーン |
---|---|---|---|
ssh |
リモートホストへのセキュア接続 |
ssh user@host (基本的なSSH接続) ssh -i ~/.ssh/key.pem user@host (秘密鍵を指定してSSH接続) |
・リモートサーバー管理 ・クラウドインスタンスへの接続 |
ssh-keygen |
SSH認証鍵の生成 |
ssh-keygen -t ed25519 (より安全なED25519アルゴリズムで鍵生成) ssh-keygen -t rsa -b 4096 -C "comment" (4096ビットのRSA鍵をコメント付きで生成) |
・サーバーアクセス用の認証鍵作成 ・Gitリポジトリ認証用の鍵生成 |
ssh-copy-id |
リモートホストに公開鍵を登録 |
ssh-copy-id user@host (デフォルトの公開鍵をリモートホストに登録) ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host (特定の公開鍵を登録) |
・パスワードなしログイン設定 ・新規サーバー構築時の初期設定 |
scp |
ファイルをSSH経由で安全に転送 |
scp file.txt user@host:/path (ローカルファイルをリモートホストにコピー) scp -r directory/ user@host:/path (ディレクトリを再帰的にコピー) |
・設定ファイルのデプロイ ・ログファイルの取得 |
sftp |
対話型のSSHファイル転送 |
sftp user@host (対話式SFTPセッションを開始) sftp内コマンド: get file (ダウンロード)put file (アップロード)ls , cd (ディレクトリ操作) |
・対話的ファイル操作 ・複数ファイルの転送管理 |
rsync |
効率的なファイル同期ツール |
rsync -avz /local user@host:/remote (ローカルからリモートへアーカイブモードで同期) rsync -avz --delete /local/ user@host:/remote/ (リモート側の余分なファイルを削除して完全同期) |
・増分バックアップ ・サイトのデプロイ |
sshfs |
リモートファイルシステムをマウント |
sshfs user@host:/remote /local (リモートディレクトリをローカルにマウント) sshfs user@host:/remote /local -o reconnect (切断時に自動再接続) |
・リモートファイルの直接編集 ・複数サーバーのファイルシステム統合操作 |
13. Git コマンド
コマンド | 説明 | 使用例 | 実際の使用シーン |
---|---|---|---|
git init |
新しいGitリポジトリを作成 |
git init (現在のディレクトリを新しいGitリポジトリとして初期化) git init --bare (作業ディレクトリなしのベアリポジトリを作成) |
・新規プロジェクト開始時 ・既存コードをバージョン管理化 |
git clone |
リモートリポジトリをローカルにコピー |
git clone https://github.com/user/repo.git (HTTPSプロトコルでリポジトリをクローン) git clone --depth 1 URL (直近の履歴1件のみの浅いクローン) |
・既存プロジェクトの開発参加 ・オープンソースへの貢献 |
git add |
変更をステージングエリアに追加 |
git add . (すべての変更をステージング) git add -p (変更を対話的に選択してステージング) |
・関連変更のグループ化 ・コミット前の変更確認 |
git commit |
ステージングされた変更を記録 |
git commit -m "Message" (メッセージ付きでコミット) git commit --amend (直前のコミットを修正) |
・一連の変更の保存 ・機能追加の記録 |
git status |
作業ディレクトリとステージングの状態表示 |
git status (詳細な状態表示) git status -s (短縮形式で状態表示) |
・未コミットの変更確認 ・ステージング済み変更の確認 |
git diff |
ファイル間の差分を表示 |
git diff (ステージングされていない変更の差分表示) git diff --staged (ステージング済みの変更の差分表示) |
・コード変更の詳細確認 ・コミット前のレビュー |
git log |
コミット履歴を表示 |
git log --oneline --graph (グラフィカルに一行表示のコミット履歴) git log -p (各コミットの差分も含めて表示) |
・プロジェクト進行状況の確認 ・変更履歴の追跡 |
git branch |
ブランチの作成・一覧表示・削除 |
git branch new-branch (新しいブランチを作成) git branch -d branch-name (ブランチを削除) |
・新機能開発の分離 ・バグ修正の分離 |
git checkout |
ブランチの切替・ファイルの復元 |
git checkout branch-name (指定ブランチに切り替え) git checkout -b new-branch (新ブランチを作成して切り替え) |
・ブランチ間の移動 ・誤った変更の取り消し |
git merge |
異なるブランチの変更を統合 |
git merge branch-name (指定ブランチを現在のブランチにマージ) git merge --no-ff branch-name (Fast-forwardせずに常にマージコミットを作成) |
・完成した機能の統合 ・バグ修正の本番適用 |
git pull |
リモートの変更を取得してマージ |
git pull origin main (originリポジトリのmainブランチから変更を取得・マージ) git pull --rebase origin main (マージではなくリベースで変更を取り込む) |
・チームメンバーの変更の取得 ・作業開始前の最新化 |
git push |
ローカルの変更をリモートに送信 |
git push origin main (ローカルの変更をoriginリポジトリのmainブランチに送信) git push -u origin new-branch (新しいブランチをリモートに作成してプッシュ) |
・完了した作業の共有 ・コードレビュー依頼 |
git fetch |
リモートの情報を取得(マージなし) |
git fetch origin (originリポジトリからすべてのブランチの情報を取得) git fetch --all (すべてのリモートから情報取得) |
・リモート変更の確認 ・マージ前の変更内容確認 |
git stash |
作業中の変更を一時保存 |
git stash save "WIP" (「WIP」という説明付きで変更を退避) git stash pop (退避した変更を復元して退避スタックから削除) |
・緊急タスク対応時の作業退避 ・ブランチ変更前の未完了作業保存 |
git reset |
HEADの位置を変更 |
git reset --hard HEAD^ (直前のコミットを完全に取り消し) git reset --soft HEAD~3 (3つ前のコミットまで戻し、変更はステージング状態に保持) |
・誤ったコミットの取り消し ・コミット履歴の整理 |
git rebase |
コミット履歴を再構成 |
git rebase -i HEAD~3 (直近3つのコミットを対話的に編集) git rebase main (mainブランチの最新に現在のブランチを乗せ替え) |
・コミット履歴の整理 ・取り込み済みブランチの更新 |
14. Docker コマンド
コマンド | 説明 | 使用例 | 実際の使用シーン |
---|---|---|---|
docker ps |
実行中コンテナの一覧表示 |
docker ps -a (停止中も含めたすべてのコンテナを表示) docker ps -q (コンテナIDのみを表示) |
・実行中のサービス確認 ・コンテナ状態の監視 |
docker images |
ローカルのイメージ一覧表示 |
docker images (ローカルに保存されたイメージを一覧表示) docker images --format "{{.Repository}}:{{.Tag}}" (名前とタグのみをフォーマット指定で表示) |
・利用可能なイメージの確認 ・古いイメージの特定 |
docker run |
イメージからコンテナを作成・起動 |
docker run -d -p 80:80 nginx (nginxイメージをバックグラウンドで実行し、ポート80をマッピング) docker run -it --rm ubuntu bash (ubuntuで対話的シェルを起動し、終了時にコンテナ削除) |
・アプリケーションのデプロイ ・開発環境の起動 |
docker build |
Dockerfileからイメージを構築 |
docker build -t myapp:1.0 . (カレントディレクトリのDockerfileからmyapp:1.0というタグ付きイメージを構築) docker build --no-cache -t myapp . (キャッシュを使わずに新規ビルド) |
・アプリケーションのパッケージング ・CI/CDパイプラインでのビルド |
docker exec |
実行中コンテナでコマンドを実行 |
docker exec -it container_id bash (実行中コンテナで対話的バッシュシェルを起動) docker exec container_id ls /app (コンテナ内の/appディレクトリの内容を表示) |
・コンテナ内のトラブルシューティング ・設定確認 |
docker logs |
コンテナのログを表示 |
docker logs -f container_id (コンテナのログをリアルタイムで追跡) docker logs --tail 100 container_id (最新の100行のログのみ表示) |
・アプリケーションのデバッグ ・エラー調査 |
docker stop |
コンテナを停止 |
docker stop container_id (コンテナを正常に停止) docker stop $(docker ps -q) (すべての実行中コンテナを停止) |
・アプリケーションの正常終了 ・リソース解放 |
docker rm |
コンテナを削除 |
docker rm container_id (停止したコンテナを削除) docker rm -f container_id (実行中のコンテナを強制削除) |
・クリーンアップ ・不要コンテナの整理 |
docker rmi |
イメージを削除 |
docker rmi image_id (指定したイメージを削除) docker rmi $(docker images -q -f "dangling=true") (タグ付けされていない不要イメージを削除) |
・ディスク容量の確保 ・古いバージョンの削除 |
docker-compose up |
複数コンテナのサービスを起動 |
docker-compose up -d (docker-compose.ymlで定義されたサービスをバックグラウンドで起動) docker-compose up --build (サービス起動前にイメージを再ビルド) |
・開発環境の一括起動 ・マイクロサービスの構築 |
docker-compose down |
複数コンテナのサービスを停止・削除 |
docker-compose down (サービス、コンテナ、ネットワークを停止・削除) docker-compose down -v (ボリュームも含めて削除) |
・環境の完全クリーンアップ ・リソースの解放 |
docker network |
Dockerネットワークの管理 |
docker network ls (作成されたネットワーク一覧を表示) docker network create mynetwork (新しいネットワークを作成) |
・サービス分離 ・コンテナ間通信の設定 |
docker volume |
Dockerボリュームの管理 |
docker volume ls (作成されたボリューム一覧を表示) docker volume create myvolume (新しいボリュームを作成) |
・データベースの永続化 ・設定ファイルの共有 |
15. Windows環境でのLinux
WSL関連コマンド (Windows)
コマンド | 説明 | 使用例 | 実際の使用シーン |
---|---|---|---|
wsl |
WSLセッションを開始 |
wsl (デフォルトのLinuxディストリビューションを起動) wsl -d Ubuntu-20.04 (特定のディストリビューションを起動) |
・Linuxコマンド実行 ・シェルスクリプト開発 |
wsl --list |
インストール済みディストリビューション一覧 |
wsl --list --verbose (詳細情報付きでディストリビューション一覧を表示) wsl -l -o (インストール可能なディストリビューション一覧を表示) |
・インストール済み環境の確認 ・WSL1/WSL2の確認 |
wsl --install |
WSLとLinuxディストリビューションをインストール |
wsl --install -d Ubuntu (WSLとUbuntuディストリビューションをインストール) wsl --install (デフォルトのUbuntuをインストール) |
・初回WSLセットアップ ・追加ディストリビューションの導入 |
wsl --terminate |
WSLインスタンスを終了 |
wsl --terminate Ubuntu (実行中のUbuntuインスタンスを終了) wsl -t Ubuntu (短縮形の終了コマンド) |
・メモリ解放 ・問題発生時のリセット |
wsl --export |
ディストリビューションをエクスポート |
wsl --export Ubuntu C:\backup.tar (Ubuntuディストリビューションをtarファイルにエクスポート) |
・開発環境のバックアップ ・環境の複製準備 |
wsl --import |
エクスポートしたディストリビューションをインポート |
wsl --import Ubuntu2 C:\Ubuntu C:\backup.tar (バックアップから新しいインスタンスを作成) |
・環境の複製 ・バックアップからの復元 |
wsl --shutdown |
すべてのWSLインスタンスを停止 |
wsl --shutdown (すべてのWSLディストリビューションを停止) |
・システムリソース解放 ・Windows再起動前の準備 |
wsl --set-version |
ディストリビューションのWSLバージョン変更 |
wsl --set-version Ubuntu 2 (UbuntuをWSL2に変更) |
・パフォーマンス最適化 ・機能互換性対応 |
Windows⇔WSL間ファイル操作
操作 | 説明 | パス | 実際の使用シーン |
---|---|---|---|
WSLからWindows | Windowsファイルへのアクセス |
/mnt/c/Users/YourName/ (Windowsのユーザーフォルダにアクセス) /mnt/d/projects/ (Dドライブのプロジェクトフォルダにアクセス) |
・Windows上のプロジェクト操作 ・ファイル共有 |
WindowsからWSL | WSLファイルへのアクセス |
\\wsl$\Ubuntu\home\username\ (エクスプローラからUbuntuのホームディレクトリにアクセス) |
・WindowsエディタでWSLファイル編集 ・ファイルコピー |
VSCodeリモート開発 | WSL内のコードをVSCodeで編集 | VS CodeのRemote-WSL拡張機能で接続 WSL内から: code . (現在のディレクトリをVS Codeで開く) |
・WSL内プロジェクトの統合開発 ・クロスプラットフォーム開発 |
16. シェルスクリプト基本
スクリプト作成と実行
#!/bin/bash
# コメント
echo "Hello, World!"
実行方法:
chmod +x script.sh # 実行権限付与
./script.sh # 実行
実際の使用シーン: デプロイメント自動化、バックアップスクリプト、システム監視、開発環境セットアップ
変数
# 変数定義(=の前後にスペースは不可)
NAME="John"
# 変数使用
echo "Hello, $NAME"
echo "Hello, ${NAME}" # 変数名が曖昧な場合に中括弧で明示
# コマンド結果を変数に格納
CURRENT_DIR=$(pwd) # 推奨方法(コマンド置換)
FILES=`ls` # 古い方法(バッククォート)
実際の使用シーン: 設定値の管理、繰り返し使用する値の保存、コマンド結果の処理
条件分岐
# 基本的な条件分岐
if [ "$1" = "test" ]; then
echo "Test mode"
elif [ "$1" = "prod" ]; then
echo "Production mode"
else
echo "Unknown mode"
fi
# 数値比較 (-eq, -ne, -lt, -le, -gt, -ge)
if [ "$NUM" -eq 10 ]; then
echo "Number is 10"
fi
# ファイル確認
if [ -f "$FILE" ]; then # ファイルが存在する
echo "File exists"
fi
if [ -d "$DIR" ]; then # ディレクトリが存在する
echo "Directory exists"
fi
# AND/OR条件
if [ "$A" = "yes" ] && [ "$B" = "yes" ]; then
echo "Both are yes"
fi
if [ "$A" = "yes" ] || [ "$B" = "yes" ]; then
echo "At least one is yes"
fi
実際の使用シーン: エラーハンドリング、引数による処理の分岐、環境チェック
ループ
# for文(リスト)
for i in 1 2 3 4 5; do
echo "Number: $i"
done
# 範囲指定
for i in {1..10}; do
echo "Number: $i"
done
# Cスタイルループ
for ((i=1; i<=5; i++)); do
echo "Count: $i"
done
# while文
COUNT=1
while [ $COUNT -le 5 ]; do
echo "Count: $COUNT"
((COUNT++)) # 数値インクリメント
done
# ファイル内容の読み取り
while read line; do
echo "Line: $line"
done < input.txt
実際の使用シーン: ファイル一括処理、反復タスク、データ処理
関数
# 関数定義
function say_hello() {
echo "Hello, $1!" # 第1引数を参照
return 0 # 戻り値(0は成功)
}
# 関数呼び出し
say_hello "World"
# 戻り値取得
say_hello "Test"
RESULT=$? # 直前のコマンド(関数)の戻りコード
echo "Return code: $RESULT"
# 関数出力を変数に格納
OUTPUT=$(say_hello "Capture")
echo "Function output: $OUTPUT"
実際の使用シーン: 共通処理のモジュール化、コードの再利用、複雑な処理のカプセル化
特殊変数
変数 | 説明 | 使用例 |
---|---|---|
$0 |
スクリプト名 | echo "Script name: $0" |
$1 - $9
|
引数1-9 | echo "First argument: $1" |
$# |
引数の数 | echo "Number of args: $#" |
$@ |
すべての引数(クォートで囲むと個別に処理) | for arg in "$@"; do echo $arg; done |
$* |
すべての引数(一つの文字列として) | echo "All args: $*" |
$? |
直前のコマンドの終了ステータス | if [ $? -ne 0 ]; then echo "Error"; fi |
$ |
現在のシェルのプロセスID | echo "PID: $" |
$! |
最後にバックグラウンドで実行したコマンドのプロセスID | echo "Background PID: $!" |
実際の使用シーン: スクリプトの柔軟な引数処理、エラーハンドリング、プロセス管理
17. 便利なワンライナー
テキスト処理
ワンライナー | 説明 | 実際の使用シーン |
---|---|---|
cat data.csv | cut -d, -f2 |
CSVの2列目を抽出 | ・データ分析の前処理 ・特定フィールドの確認 |
grep "ERROR" log.txt | wc -l |
エラーメッセージの出現回数をカウント | ・障害調査 ・システムの健全性確認 |
sort file.txt | uniq -c | sort -nr |
テキスト行の出現頻度を降順表示 | ・アクセス頻度分析 ・パターン分析 |
find . -name "*.java" -exec grep -l "TODO" {} \; |
TODOコメントを含むJavaファイルを検索 | ・コード品質チェック ・残作業の特定 |
sed '/^$/d' file.txt |
ファイル内の空行を削除 | ・データクリーニング ・テキスト前処理 |
awk '{sum+=$2} END {print sum}' file.txt |
2列目の数値を合計 | ・数値データの集計 ・ログファイルの統計 |
ファイル操作
ワンライナー | 説明 | 実際の使用シーン |
---|---|---|
find . -type f -printf '%T@ %p\n' | sort -n | tail -10 | cut -f2- -d" " |
最近変更された10ファイルを表示 | ・最近の変更追跡 ・監査作業 |
find . -type f -exec du -h {} \; | sort -rh | head -5 |
サイズが最大の5ファイルを表示 | ・ディスク容量管理 ・大きなファイルの特定 |
find / -type f -size +100M |
100MB以上の大きなファイルを検索 | ・ディスク容量の確保 ・大きなログファイルの特定 |
find /path -type f -mtime +30 -delete |
30日以上前のファイルを削除 | ・自動クリーンアップ ・古いログの削除 |
システム管理
ワンライナー | 説明 | 実際の使用シーン |
---|---|---|
ps aux --sort=-%mem | head -6 |
メモリ使用量上位5プロセスを表示 | ・メモリリーク調査 ・リソース使用監視 |
ps aux --sort=-%cpu | head -6 |
CPU使用率上位5プロセスを表示 | ・高負荷プロセスの特定 ・パフォーマンス問題診断 |
du -h /var | sort -rh | head -10 |
/var内の大きなディレクトリを表示 | ・ディスク容量問題の特定 ・クリーンアップ候補の特定 |
grep "Failed password" /var/log/auth.log | wc -l |
失敗したログイン試行回数をカウント | ・セキュリティ監視 ・不正アクセス調査 |
ネットワーク関連
ワンライナー | 説明 | 実際の使用シーン |
---|---|---|
netstat -tuln | grep LISTEN |
リスニング中のポートを表示 | ・サービス稼働確認 ・セキュリティ監査 |
lsof -i :80 |
ポート80を使用しているプロセスを特定 | ・サービス診断 ・ポート競合解決 |
curl -I https://example.com |
HTTPヘッダーを表示 | ・Webサーバー設定確認 ・リダイレクト確認 |
tcpdump -i eth0 'port 80' |
ポート80のトラフィックをキャプチャ | ・ネットワークデバッグ ・プロトコル分析 |
18. トラブルシューティング
システム問題診断コマンド
問題 | 診断コマンド | 対処方法 |
---|---|---|
高CPU使用率 |
top (リアルタイムCPU監視)ps aux --sort=-%cpu | head -10
|
・問題プロセスの特定と再起動 ・負荷分散の実施 ・アプリケーションの最適化 |
メモリ不足 |
free -h (メモリ使用状況確認)vmstat 1 10 (メモリ・スワップ監視) |
・不要プロセスの終了 ・スワップ設定調整 ・メモリリークしているアプリの特定 |
ディスク容量不足 |
df -h (ファイルシステム使用率)du -h --max-depth=1 /path (ディレクトリサイズ) |
・大きなファイルの特定と削除 ・ログローテーション設定 ・不要データのアーカイブ |
ネットワーク接続問題 |
ping host (基本的な到達性確認)traceroute host (経路確認)netstat -tuln (リスニングポート) |
・ファイアウォール設定確認 ・ネットワーク設定確認 ・DNSキャッシュのクリア |
サービス起動失敗 |
systemctl status service (サービス状態確認)journalctl -xe (systemdログ確認) |
・設定ファイルの修正 ・必要なリソースへのアクセス権確認 ・依存サービスの起動確認 |
ログ確認コマンド
ログタイプ | 確認コマンド | 一般的なチェックポイント |
---|---|---|
システムログ |
dmesg (カーネルメッセージ)journalctl -b (現在ブートのログ) |
・ハードウェアエラー ・ドライバー問題 ・起動時エラー |
アプリケーションログ |
tail -f /var/log/application.log grep ERROR /var/log/application.log
|
・例外スタックトレース ・エラーメッセージ ・警告メッセージ |
Webサーバーログ |
tail -f /var/log/nginx/access.log grep 500 /var/log/nginx/error.log
|
・HTTPステータスコード ・処理時間 ・エラーレスポンス |
セキュリティログ |
grep "Failed password" /var/log/auth.log last (ログイン履歴) |
・不正アクセス試行 ・認証失敗 ・異常なログイン時間 |
19. パフォーマンス最適化
システム監視コマンド
コマンド | 説明 | 最適化アクション |
---|---|---|
top / htop
|
リアルタイムシステム監視 | ・CPU/メモリ使用率の高いプロセスの特定 ・異常なリソース消費の検出 |
vmstat 1 |
CPU、メモリ、I/O、スワップの秒間統計 | ・メモリ不足とスワップ使用状況特定 ・I/Oボトルネック検出 |
iostat -xz 1 |
ディスクI/O詳細統計 | ・ディスクI/O飽和状態の特定 ・ストレージパフォーマンス問題の特定 |
sar -n DEV 1 |
ネットワークインターフェース統計 | ・ネットワーク飽和状態の検出 ・帯域幅使用率の高いアプリケーションの特定 |
データベース最適化
コマンド/ツール | 説明 | 最適化アクション |
---|---|---|
mysqltuner |
MySQL設定分析 | ・メモリ割り当ての最適化 ・クエリキャッシュの調整 |
EXPLAIN SELECT ... |
SQLクエリ実行計画分析 | ・インデックス使用の検証 ・非効率クエリの特定 |
redis-cli --stat |
Redis統計監視 | ・メモリ使用率の監視 ・コマンド処理速度の確認 |
20. セキュリティ対策
セキュリティスキャンと監視
コマンド/ツール | 説明 | セキュリティ対策 |
---|---|---|
nmap -sV -p 1-65535 host |
ポートスキャン・サービス検出 | ・不要なサービスの停止 ・公開ポート最小化 |
lynis audit system |
システムセキュリティ監査 | ・セキュリティ設定の強化 ・潜在的脆弱性の修正 |
fail2ban-client status sshd |
自動ブロック状態確認 | ・攻撃者IPの特定 ・保護機能の有効性評価 |
ファイル整合性監視
コマンド/ツール | 説明 | セキュリティ対策 |
---|---|---|
tripwire --check |
ファイル整合性監視 | ・不正なファイル変更の検出 ・セキュリティインシデントの調査 |
find / -type f -name "*.php" -exec md5sum {} \; > checksums.txt |
手動ファイルチェックサム | ・webshellなど不正スクリプト検出 ・ファイル変更履歴の作成 |