🐡

bash入門 - 効率的なコマンドライン操作を習得しよう

2024/10/22に公開

シェルとは何か

シェルは、ユーザーとOSの間を取り持つインターフェースです。
コマンドを解釈し、実行結果を表示する役割を担っています。

ユーザー <-> シェル(zsh) <-> OS(カーネル)

主要なシェルの比較:

シェル名 特徴 主な利用環境
bash 最も広く使われている Linux全般
zsh bashの機能を拡張、より使いやすい macOS, Linux
fish より現代的なUI、自動補完が強力 個人利用

基本的なコマンド操作

# ディレクトリ操作
ls          # ファイル一覧表示
cd          # ディレクトリ移動
pwd         # 現在のディレクトリパス表示
mkdir       # ディレクトリ作成

特によく使うlsコマンドのオプション:

ls -l       # 詳細情報を表示
ls -a       # 隠しファイルも表示
ls -h       # ファイルサイズを人間が読みやすい形式で表示

パスとディレクトリ構造

Unixライクなシステムでは、すべてがファイルとして扱われます。
ディレクトリ構造を理解することは、システムを理解する基本となります。

重要なディレクトリ:

/           # ルートディレクトリ
/home       # ユーザーのホームディレクトリ
/etc        # システム設定ファイル
/usr        # ユーザーレベルのプログラムやライブラリ
/var        # 可変データ(ログなど)

ファイル操作の基本

touch file.txt          # 空ファイルの作成
cp source.txt dest.txt  # ファイルのコピー
mv old.txt new.txt     # ファイルの移動/名前変更
rm file.txt            # ファイルの削除

ファイル操作時の便利なオプション:

オプション 説明 使用例
-r 再帰的に処理 cp -r dir1 dir2
-f 強制実行 rm -f file.txt
-i 対話モード mv -i old.txt new.txt

テキスト処理コマンド

cat file.txt           # ファイル内容の表示
less file.txt         # ページャーでの表示
head -n 5 file.txt    # 先頭5行を表示
tail -n 5 file.txt    # 末尾5行を表示
grep "pattern" file   # パターンマッチング検索

パイプとリダイレクト

コマンドの組み合わせで強力な処理が可能になります。

# パイプの例
ls -l | grep "\.txt$"  # txtファイルのみ表示
ps aux | grep "nginx"  # nginxプロセスを検索

# リダイレクトの例
echo "Hello" > file.txt     # 出力をファイルに書き込み
echo "World" >> file.txt    # ファイルに追記

zshの便利機能

zshはbashの機能を拡張し、より使いやすくなっています。

補完機能

# タブ補完の例
cd /u/l/b[Tab]  # /usr/local/bin まで補完

エイリアス設定

# よく使うコマンドのエイリアス
alias ll='ls -la'
alias gs='git status'

グロブ(パターンマッチング)

# 高度なファイルマッチング
ls **/*.txt      # サブディレクトリも含めてtxtファイルを検索
rm -rf ^*.txt    # txtファイル以外を削除

環境変数とシェル設定

環境変数はシェルの動作に影響を与える重要な要素です。

# 主要な環境変数
echo $PATH       # コマンド検索パス
echo $HOME      # ホームディレクトリ
echo $USER      # 現在のユーザー名

.zshrcの設定例

# .zshrcの基本設定例
export PATH=$HOME/bin:/usr/local/bin:$PATH
export LANG=en_US.UTF-8

# プロンプトのカスタマイズ
PROMPT='%F{green}%n@%m%f:%F{blue}%~%f$ '

プロセス管理

実行中のプログラムを管理することも重要なスキルです。

ps aux              # プロセス一覧表示
top                # システムモニタリング
kill <PID>         # プロセスの終了

プロセス制御のシグナル:

シグナル 番号 意味
SIGTERM 15 正常終了要求
SIGKILL 9 強制終了
SIGHUP 1 設定再読み込み

スクリプティング入門

シェルスクリプトを使うと、複数のコマンドを自動化できます。

#!/bin/zsh

# 基本的なスクリプト例
for file in *.txt; do
    echo "Processing $file..."
    grep "error" "$file"
done

条件分岐

if [ -f "config.txt" ]; then
    echo "設定ファイルが存在します"
else
    echo "設定ファイルがありません"
fi

関数定義

function backup() {
    local source="$1"
    local dest="$2"
    cp -r "$source" "$dest"
    echo "バックアップ完了: $source -> $dest"
}

セキュリティと権限管理

ファイルやディレクトリの権限管理は重要なスキルです。

chmod 755 script.sh   # 実行権限の付与
chown user:group file # 所有者の変更

権限の意味:

数値 権限 説明
4 r 読み取り
2 w 書き込み
1 x 実行

トラブルシューティング

よくあるトラブルとその解決方法を紹介します。

コマンドが見つからない場合

which command     # コマンドの場所を確認
echo $PATH       # PATHの確認
rehash           # コマンドキャッシュの更新

プロセスが応答しない場合

ps aux | grep process  # プロセスIDの特定
kill -9 <PID>         # 強制終了

パフォーマンス最適化

シェルの使用を効率化するためのテクニックです。

ジョブ制御

command &        # バックグラウンド実行
fg              # フォアグラウンドに戻す
bg              # バックグラウンドに移動

ヒストリ機能の活用

history         # コマンド履歴表示
!!              # 直前のコマンドを再実行
!$              # 直前のコマンドの最後の引数

開発環境との連携

gitやdockerなど、開発ツールとの連携も重要です。

# gitの基本操作
git status
git add .
git commit -m "メッセージ"

# dockerコマンド
docker ps
docker-compose up -d

生産性向上のためのTips

エイリアスの活用例

# ~/.zshrcに追加
alias dc='docker-compose'
alias g='git'
alias tf='terraform'

ショートカットキー

Ctrl + A    # 行頭へ移動
Ctrl + E    # 行末へ移動
Ctrl + R    # コマンド履歴検索

Discussion