第3章: 基本的なコマンドライン操作
3.1 なぜコマンドライン操作が重要なのか
Linuxサーバー運用において、コマンドラインインターフェース(CLI) は最も基本的で強力な手段です。GUIに比べて以下のメリットがあります。
- 軽量で高速: 画面描画にリソースを割かないため、遠隔操作や低スペック環境でも快適。
- スクリプトとの相性が良い: コマンドを組み合わせやすく、自動化や大量処理に向いている。
- リモート管理が容易: SSHなどのネットワーク経由で、GUI不要で操作可能。
ここでは、シェルの仕組みやよく使われるコマンド、効率化のためのテクニックを深掘りしていきます。
3.2 シェルとターミナルの基礎知識
3.2.1 シェル (Shell) とは
シェル (Shell)
ユーザーがコマンドを入力し、OSに対して操作を指示するためのプログラム。Linuxでは主に bash (Bourne Again Shell) がデフォルトとして使われますが、zsh や fish など他のシェルも存在します。
- ログインシェル: ユーザーがログインしたとき最初に起動するシェル。
/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 シェルスクリプトの作成手順
- ファイルの先頭にシェバンを書く:
#!/bin/bash
- 必要なコマンドや処理を順番に記述
- 実行権限を付与:
chmod +x script.sh
- ./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 学習のまとめ
- CLI操作の重要性: GUIに頼らずコマンドラインで操作する習慣を身につけると、サーバー運用が飛躍的に効率化する。
- シェルとターミナル: bashをはじめとする各種シェルの概念やターミナルエミュレータの役割を理解する。
- ファイル操作・テキスト処理:
ls
,cp
,mv
,grep
,sed
,awk
など頻用コマンドの使いこなしで、日常作業がスピードアップ。 - 権限管理: 所有者・グループ・その他のパーミッションの仕組みを理解し、
chmod
,chown
を適切に使い分ける。 - パイプとリダイレクト: 単純なコマンドを組み合わせて強力なワンライナーを作り、複雑な処理を簡単に実行できるようになる。
- シェルヒストリとエイリアス:
history
,alias
を活用して入力を短縮し、同じコマンドを再度打つ手間を省く。 - シェルスクリプト: 自動化の第一歩。条件分岐やループ、環境変数を活用することで、繰り返し作業を効率的に処理。
次章へのつながり
次の章(第4章)では、AlmaLinux 9でのユーザーとグループ管理をさらに深堀りします。マルチユーザー環境を想定した権限設定、パスワードポリシー、sudoの活用など、実際の運用で不可欠な要素を学んでいきましょう。