🐡
bash入門 - 効率的なコマンドライン操作を習得しよう
シェルとは何か
シェルは、ユーザーと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