AlmaLinux 9 総合ガイド 第3章

第3章: 基本的なコマンドライン操作


3.1 なぜコマンドライン操作が重要なのか

Linuxサーバー運用において、コマンドラインインターフェース(CLI) は最も基本的で強力な手段です。GUIに比べて以下のメリットがあります。

  1. 軽量で高速: 画面描画にリソースを割かないため、遠隔操作や低スペック環境でも快適。
  2. スクリプトとの相性が良い: コマンドを組み合わせやすく、自動化や大量処理に向いている。
  3. リモート管理が容易: SSHなどのネットワーク経由で、GUI不要で操作可能。

ここでは、シェルの仕組みよく使われるコマンド効率化のためのテクニックを深掘りしていきます。


3.2 シェルとターミナルの基礎知識

3.2.1 シェル (Shell) とは

シェル (Shell)
ユーザーがコマンドを入力し、OSに対して操作を指示するためのプログラム。Linuxでは主に bash (Bourne Again Shell) がデフォルトとして使われますが、zshfish など他のシェルも存在します。

  • ログインシェル: ユーザーがログインしたとき最初に起動するシェル。/etc/passwd で設定される。
  • 対話シェル (interactive shell): その場でコマンドを入力して動作を確認するためのシェル。
  • 非対話シェル (non-interactive shell): スクリプト実行時など、ユーザーの入力なしに動作するシェル。

3.2.2 ターミナル (Terminal) とは

ターミナル (Terminal)
キーボードや画面を通じて、シェルとユーザーが対話するための環境。物理的な端末だけでなく、GNOME Terminalやxtermなどの端末エミュレータ、SSHセッションなども含まれます。

  • TTY (teletype): 物理コンソールや仮想コンソール (Ctrl + Alt + F2 など)
  • Pseudoterminal (pty): GUI端末エミュレータやSSHで使われる仮想的なターミナル

3.3 基本コマンドの復習と応用

3.3.1 ディレクトリ操作

コマンド説明使用例
pwd現在の作業ディレクトリ(カレントディレクトリ)を表示pwd
cdディレクトリを移動cd /etc
lsディレクトリ内のファイル一覧を表示ls -l /var/log (詳細表示)
mkdir新しいディレクトリを作成mkdir /home/user/newdir
rmdir空のディレクトリを削除rmdir olddir

応用ポイント:
ls -a で隠しファイルも表示、ls -lh でサイズを人間に読みやすい形式にするなど、多数のオプションがある。

3.3.2 ファイル操作

コマンド説明使用例
cpファイル・ディレクトリのコピーcp file1 file2 (同じディレクトリにコピー)
mvファイル・ディレクトリの移動、名前変更mv file1 /tmp/ (一時ディレクトリに移動)
rmファイル・ディレクトリの削除rm -r olddir (ディレクトリごと削除)
touch空ファイルの作成、またはファイルの更新日時を変更touch newfile.txt
catファイルの内容を表示cat /etc/hosts
lessテキストファイルをページ送りで閲覧less /var/log/messages
headファイルの先頭部分を表示head -n 5 /etc/passwd (先頭5行)
tailファイルの末尾部分を表示tail -f /var/log/secure (リアルタイム監視)

削除時の注意:
rm -rf は非常に危険。特に rm -rf / のような操作はシステム全体を消去し、取り返しのつかない事態に陥るため細心の注意を払うこと。

3.3.3 テキスト処理と検索

コマンド説明使用例
grepテキストからパターン(正規表現)に一致する行を検索grep "ERROR" /var/log/messages
sedストリームエディタ。テキストの置換や削除をコマンドライン上で行うsed 's/foo/bar/g' input.txt > output.txt
awkテキストを区切り文字で分割し、条件や数値演算に基づく加工が可能awk -F: '{print $1}' /etc/passwd
sort行を並べ替えるsort /etc/passwd
uniq重複行を排除sort list.txt | uniq (重複をまとめて排除)

grepの拡張:
grep -E (拡張正規表現) や grep -r (再帰的検索) などを活用すると、複雑な検索やディレクトリ全体の検索が容易になる。


3.4 権限と所有権の深掘り

3.4.1 パーミッションの仕組み

Linuxのファイルアクセス権は、所有者 (owner)所属グループ (group)その他 (others) の3つに分かれ、読み取り (r)書き込み (w)実行 (x) の3ビットが割り当てられます。

例: -rw-r--r-- 1 alice staff 4096 Feb  1 00:00 example.txt
  • -rw-r--r-- : 所有者が rw-、グループが r--、その他が r--
  • alice : 所有者
  • staff : 所属グループ

3.4.2 chmodの応用

  • 数値モード: chmod 755 file
  • 7 (rwx), 5 (r-x), 5 (r-x)
  • シンボリックモード: chmod u+x file
  • u(所有者)、g(グループ)、o(その他) に対して +(追加)、-(削除)を指定

setuid, setgid, stickyビット

  • setuidビット (s): 実行ファイルが所有者権限で動作する。
  • setgidビット (s): 実行ファイルがグループ権限で動作、またはディレクトリ内のファイルに同じグループを継承。
  • stickyビット (t): ディレクトリ内のファイルを所有者以外が削除できなくする(例:/tmp)。
# 例: stickyビットを付与
chmod +t /some/dir
# 例: setgidを付与
chmod g+s /some/dir

注意: setuid, setgidはセキュリティリスクにもつながるため、用途を理解し慎重に設定する。

3.4.3 chownとchgrp

# 所有者のみ変更
sudo chown bob example.txt

# グループのみ変更
sudo chgrp staff example.txt

# 所有者・グループを同時に変更
sudo chown bob:staff example.txt

所有権の誤設定によってWebサーバーやデーモンが動作しないケースが多々あるため、SELinuxコンテキストとあわせて適切な権限を付与することが重要。


3.5 パイプとリダイレクトの高度な活用

3.5.1 リダイレクト

  • >: 標準出力をファイルへ上書き
  • >>: 標準出力をファイルへ追記
  • 2>: 標準エラー出力をファイルへ上書き
  • &>: 標準出力と標準エラー出力をまとめてファイルへ上書き
# 標準出力をresults.txtに保存し、エラーをerr.txtに分離
mycommand > results.txt 2> err.txt

3.5.2 パイプ (|)

1つのコマンドの出力を別のコマンドの入力にする。複雑な処理を段階的に行う場合に非常に有効。

# /var/log/messagesから"ERROR"を含む行だけを検索し、最後10行を表示
grep "ERROR" /var/log/messages | tail -n 10

複数パイプの例:

ps aux | grep httpd | awk '{print $2}' | xargs kill -9

など、コマンドをチェーンして柔軟な操作を実行できる。ただし、読みづらくなりがちなのでスクリプト化を検討すると良い。


3.6 シェルのヒストリーとエイリアス活用

3.6.1 シェルヒストリー (history)

history コマンドを使うと、過去に入力したコマンドが一覧表示される。上矢印キーを押すだけでも直前のコマンドを呼び出せる。

  • !番号 : 指定したヒストリー番号のコマンドを再実行
  • !文字列 : ヒストリーから該当文字列を含むコマンドを再実行
  • Ctrl + R : インクリメンタルサーチで過去コマンドを検索

注意: 過去のコマンドに機密データ(パスワードなど)が含まれていると、ヒストリーとして残ってしまうので注意が必要。

3.6.2 エイリアス (alias)

# 一時的にエイリアスを定義
alias ll='ls -l --color=auto'
alias rm='rm -i'

# 定義を確認
alias

# 永続化: ~/.bashrc に追記
echo "alias ll='ls -l --color=auto'" >> ~/.bashrc

頻繁に使うコマンドや長いオプションを省略できるため、タイピング量を削減し、間違いを防ぎやすくなる。


3.7 環境変数と設定ファイル

3.7.1 環境変数 (Environment Variables)

  • echo $PATH : 実行可能ファイルの検索パス
  • echo $HOME : ユーザーのホームディレクトリ
  • export VAR=value : 新しい環境変数を定義
# 例: PATHに独自ディレクトリを追加
export PATH=$PATH:/home/user/bin

3.7.2 シェルの初期化ファイル

  • /etc/profile: システム全体のログインシェル初期設定
  • ~/.bash_profile / ~/.bash_login: ログイン時に読み込まれるユーザー独自の設定
  • ~/.bashrc: 非ログインシェルまたは対話シェルの初期化設定

ヒント:
aliasや環境変数の設定は~/.bashrcに記述することが多い。ログイン時のみ実行させたい場合は~/.bash_profileなどに記述。


3.8 シェルスクリプトの基礎とTIPS

3.8.1 シェルスクリプトの作成手順

  1. ファイルの先頭にシェバンを書く: #!/bin/bash
  2. 必要なコマンドや処理を順番に記述
  3. 実行権限を付与: chmod +x script.sh
  4. ./script.sh または bash script.sh で実行
#!/bin/bash
# sample_script.sh

# 変数定義
NAME="AlmaLinux"
echo "Hello, $NAME"

# 条件分岐
if [ "$USER" == "root" ]; then
  echo "Running as root"
else
  echo "Running as $USER"
fi

3.8.2 条件式と制御構文

  • if-then-else:
  if [ -f /etc/passwd ]; then
    echo "File exists"
  else
    echo "File not found"
  fi
  • forループ:
  for FILE in *.txt; do
    echo "Processing $FILE"
  done
  • whileループ:
  i=0
  while [ $i -lt 5 ]; do
    echo "Count: $i"
    ((i++))
  done
  • case文:
  case "$1" in
    start) echo "Starting...";;
    stop)  echo "Stopping...";;
    *)     echo "Usage: $0 {start|stop}";;
  esac

3.8.3 デバッグとエラー対策

  • bash -x script.sh : スクリプト内の各行を実行時に表示する(デバッグ目的)。
  • set -e : スクリプト内でコマンドがエラーを返した時点で停止する(安全設計に役立つ)。
  • trap コマンド : シグナルを受け取ったときに実行する処理を定義し、スクリプトが中断されてもクリーンアップができる。

3.9 学習のまとめ

  1. CLI操作の重要性: GUIに頼らずコマンドラインで操作する習慣を身につけると、サーバー運用が飛躍的に効率化する。
  2. シェルとターミナル: bashをはじめとする各種シェルの概念やターミナルエミュレータの役割を理解する。
  3. ファイル操作・テキスト処理: ls, cp, mv, grep, sed, awk など頻用コマンドの使いこなしで、日常作業がスピードアップ。
  4. 権限管理: 所有者・グループ・その他のパーミッションの仕組みを理解し、chmod, chown を適切に使い分ける。
  5. パイプとリダイレクト: 単純なコマンドを組み合わせて強力なワンライナーを作り、複雑な処理を簡単に実行できるようになる。
  6. シェルヒストリとエイリアス: history, alias を活用して入力を短縮し、同じコマンドを再度打つ手間を省く。
  7. シェルスクリプト: 自動化の第一歩。条件分岐やループ、環境変数を活用することで、繰り返し作業を効率的に処理。

次章へのつながり

次の章(第4章)では、AlmaLinux 9でのユーザーとグループ管理をさらに深堀りします。マルチユーザー環境を想定した権限設定、パスワードポリシー、sudoの活用など、実際の運用で不可欠な要素を学んでいきましょう。