Linuxの引数(コマンドライン引数)を徹底解説!bash・zsh初心者でもわかる使い方と基礎知識
生徒
「Linuxのコマンドを勉強中なのですが、コマンドの後ろにつける言葉やファイル名は何て呼ぶんですか?」
先生
「それは、引数(ヒキスウ)と呼びます。コマンドに対して『何を対象にするか』や『どう動いてほしいか』を伝えるための重要なパラメータ(媒介変数)ですよ。」
生徒
「ヒキスウ、ですか。数学みたいで難しそうですね。初心者でも使いこなせますか?」
先生
「大丈夫です!実は日常的に使っているものばかりですよ。bash(バッシュ)やzsh(ズィーシェル)といったシェルの基本となる引数の仕組みを、ゆっくり学んでいきましょう。」
Linuxを初めて学ぶ人や、 OS・プロセス・メモリ管理・仮想マシン・コンテナの仕組みを図解で理解したい人におすすめの定番書籍です。
試して理解 Linuxのしくみを見る※ Amazonアソシエイト広告リンク
1. 引数(ヒキスウ)とは何か?基本的な意味を解説
Linux(リナックス)の世界でよく耳にする引数(ヒキスウ)とは、コマンドを実行する際に、そのコマンドに渡す情報のことを指します。英語では「Argument(アーギュメント)」と呼ばれます。
例えば、あなたが誰かに「掃除して」と頼む場面を想像してください。これだけでは、どこを掃除すればいいのか分かりませんよね?そこで「リビングを掃除して」と付け加えます。このときの「リビングを」にあたる情報が、プログラミングやLinuxにおける引数の役割です。
Linuxのシェル(命令を受け付けるソフト)であるbash(バッシュ)やzsh(ズィーシェル)では、コマンド名の後にスペース(空白)を空けて引数を入力します。これにより、特定のファイルを表示したり、特定のフォルダを削除したりといった具体的な指示が可能になります。
また、引数と似た言葉にパラメータ(媒介変数:バイカイヘンスウ)があります。厳密には、コマンド側が受け取る枠組みをパラメータ、実際に渡す値を引数と呼びますが、Linuxの初心者のうちは「コマンドに与える追加情報」という理解で問題ありません。
2. 引数とオプションの違いを知ろう
Linuxコマンドを動かす際、引数と一緒に使われるのがオプションです。この二つの違いを整理しておきましょう。
オプションは、コマンドの動作を細かく設定するためのスイッチのようなものです。通常はハイフン「-」や「--」から始まります。一方で引数は、操作の対象となるファイル名やディレクトリ名(フォルダ名)そのものを指すことが多いです。
例えば、ファイルを一覧表示するls(エルエス)コマンドで考えてみましょう。
ls -l /home/user
total 0
drwxr-xr-x 2 user user 40 4月 2 12:00 Documents
drwxr-xr-x 2 user user 40 4月 2 12:00 Downloads
この場合、-l(ハイフンエル)がオプションで、詳細を表示するという設定をしています。そして、/home/userという部分が引数であり、表示したい場所を指定しています。引数があることで、今いる場所だけでなく、好きな場所の情報を引き出すことができるのです。
3. 複数の引数を指定する方法と空白の扱い
Linuxの多くのコマンドでは、引数を複数同時に渡すことができます。複数の引数を渡すときは、それぞれの間をスペース(半角空白)で区切ります。
例えば、新しくディレクトリを作成するmkdir(エムケーディアイアール)コマンドを使って、一度に三つのフォルダを作ってみましょう。読み方は、mkdir(メイクディレクトリ)です。
mkdir apple orange banana
ls
apple banana orange
このように、引数を並べるだけでまとめて処理ができるのがLinuxの便利なところです。しかし、ここで注意が必要なのが「スペースを含んだ名前」の扱いです。もし「My Documents」というフォルダを一つの引数として渡したい場合、そのまま入力すると「My」と「Documents」という二つの引数だと解釈されてしまいます。
そのため、スペースを含む文字列を一つの引数にするには、ダブルクォーテーション(二重引用符)で囲む必要があります。
mkdir "My Documents"
ls
'My Documents' apple banana orange
4. シェルスクリプトでの引数の活用(位置パラメータ)
Linuxを使いこなすと、自分で一連の処理をまとめた「シェルスクリプト」を書くようになります。シェルスクリプトの中でも引数は大活躍します。スクリプトに渡された引数は、自動的に番号のついた変数に格納されます。これを位置パラメータと呼びます。
位置パラメータの読み方は、位置パラメータ(イチパラメータ)です。具体的には以下のような変数を使います。
$0:実行しているスクリプトファイル自身の名前$1:1番目の引数$2:2番目の引数$#:渡された引数の合計数
実際に簡単なスクリプトを作ってみましょう。以下の例では、挨拶をするスクリプトに名前を引数として渡します。
cat hello.sh
echo "こんにちは、$1 さん!"
bash hello.sh 田中
こんにちは、田中 さん!
このように、引数を使うことでスクリプトの中身を書き換えなくても、実行するたびに結果を変える柔軟なプログラムが作れます。これは、業務効率化やサーバー構築の自動化において欠かせない技術です。
5. 特殊な引数「$@」と「$*」の使い分け
シェルスクリプトで、渡された全ての引数をまとめて扱いたい場合があります。そのときに使うのが、$@(アットマーク変数)や$*(アスタリスク変数)です。これらはどちらも「全引数」を意味しますが、少しだけ挙動が異なります。
一般的には、個々の引数をバラバラに保持してくれる$@がよく使われます。例えば、複数のファイルを順番に処理するループ処理(繰り返し処理)を書く際に便利です。bash(バッシュ)やzsh(ズィーシェル)のスクリプトを書くエンジニアにとって、これらの使い分けは非常に重要です。
読み方は、アットマーク(アットマーク)やアスタリスク(アスタリスク)です。記号一つでスクリプトの動きが変わるため、最初は戸惑うかもしれませんが、少しずつ慣れていきましょう。特に、引数がゼロ個の場合や、大量にある場合の処理を想定することが、エラーの少ない良いスクリプトを作るコツです。
6. 引数を使ってシステム管理を行う(rootユーザー)
Linuxには、システム全体を管理する権限を持つroot(ルート)ユーザーが存在します。rootユーザーでコマンドを実行する際も、引数の使い方は同じですが、その影響範囲が非常に大きくなります。特にファイルの削除や設定の変更を行う際は、引数に指定したパス(住所)が間違っていないか、細心の注意を払う必要があります。
例えば、システムの設定ファイルが置かれている/etc(エトセ)ディレクトリ内のファイルを確認する場合を見てみましょう。
ls /etc/hostname
/etc/hostname
この例では、/etc/hostnameが引数です。rootユーザー(管理者権限)で作業するときは、プロンプトが$ではなく#(シャープ)に変わるのが一般的です。引数を一つ間違えるだけでシステムが起動しなくなることもあるため、コマンドを実行する前に必ず「引数は正しいか?」を指差し確認する習慣をつけましょう。初心者のうちは、sudo(スードゥー)コマンドを使って一時的に権限を借りる方法が安全です。
7. 引数の履歴機能(bash・zshの便利なテクニック)
Linuxのターミナルを使っていると、さっき使った引数をもう一度使いたいことがよくあります。bashやzshには、引数を再利用するための便利なショートカットが存在します。
有名なものに、!$(エクスクラメーション・ドル)があります。これは「直前のコマンドの最後の引数」を呼び出す魔法の言葉です。読み方は、末尾引数参照(マツビヒキスウサンショウ)などの通称で呼ばれることもあります。
mkdir test_directory
cd !$
cd test_directory
上の例では、mkdirで作ったディレクトリ名をわざわざ入力し直さなくても、!$と打つだけで、前の引数であるtest_directoryを自動的に補完してくれます。こうしたテクニックを覚えることで、タイピングミスが減り、黒い画面(ターミナル)での操作スピードが劇的に向上します。
8. 引数と標準入力の違いとは?
初心者の方がよく混乱するのが、引数と標準入力(ヒョウジュンニュウリョク)の違いです。どちらもコマンドにデータを渡す手段ですが、通り道が違います。
引数は「コマンドの後ろに直接書くラベル」のようなものであり、コマンドが起動する瞬間に渡されます。一方で標準入力は、コマンドが動き出した後に、パイプライン(縦棒の記号 |)などを使ってデータの流れを流し込む仕組みです。
例えば、ファイルの中身を表示するcat(キャット)コマンドで比較してみましょう。
cat memo.txt
これは引数としてファイル名を渡しています
echo "こんにちは" | cat
こんにちは
上の例は引数、下の例は標準入力(echoの結果をパイプで渡している)です。Linuxコマンドには「引数しか受け取らないもの」「標準入力しか受け取らないもの」「両方使い分けられるもの」があります。これらを理解すると、Linuxのシェル芸(コマンドを組み合わせて複雑な処理をすること)の世界がぐっと身近になります。引数の仕組みを理解することは、Linuxマスターへの第一歩なのです。
LPICレベル1の合格を目指している人や、 Linuxコマンド・シェル・ネットワーク・セキュリティの試験対策を効率よく進めたい人におすすめの定番問題集です。
Linux教科書 LPICレベル1 スピードマスター問題集を見る※ Amazonアソシエイト広告リンク
まとめ
今回の記事では、Linux操作の根幹を支える引数(コマンドライン引数)について、その基礎知識から応用テクニックまで詳しく解説してきました。Linuxの世界において、引数は単なる「コマンドの後ろに添える文字」ではなく、システムに対して具体的な「対象」を指示し、プログラムの挙動を柔軟に制御するための不可欠な要素です。
これまでのポイントを整理すると、まず第一に、コマンドと引数の間には必ず半角スペースが必要であること、そして複数の引数を並べることで一括処理が可能になるという効率性が挙げられます。特にbashやzshといった主要なシェル環境では、スペースを含むファイル名を扱う際にダブルクォーテーションで囲むというルールを忘れてはいけません。
また、シェルスクリプトにおける位置パラメータ($1、$2など)の活用は、定型業務を自動化する上で非常に強力な武器となります。引数を利用することで、同じスクリプトであっても実行時の入力に応じて異なる結果を出力できるため、汎用性の高いツール自作が可能になります。
さらに、中級者へのステップアップとして、直前の引数を再利用する!$などのショートカットや、全引数を一括で扱う$@の概念、そして標準入力との明確な違いを理解することが重要です。これらをマスターすることで、ターミナル上での作業スピードは劇的に向上し、複雑なサーバー構築やシステム運用もスムーズに行えるようになります。
実践的なサンプルコードで理解を深める
ここでは、学んだ引数の知識を活かして、複数のファイル名を引数として受け取り、それらを一括でバックアップ(コピー)する簡単なシェルスクリプトの例を紹介します。このコードでは、特殊変数である$@を使用して、引数に指定された全てのファイルをループ処理しています。
#!/bin/bash
# 引数が0個の場合は使い方を表示して終了する
if [ $# -eq 0 ]; then
echo "エラー: バックアップ対象のファイルを指定してください。"
exit 1
fi
echo "バックアップを開始します。合計ファイル数: $#"
# 全ての引数($@)を一つずつ処理する
for file in "$@"
do
if [ -f "$file" ]; then
cp "$file" "${file}.bak"
echo "完了: $file -> ${file}.bak"
else
echo "警告: $file は存在しないためスキップしました。"
fi
done
echo "すべての処理が終了しました。"
引数に関連する重要キーワード一覧
Linuxの学習を効率化するために、この記事で登場した重要な用語を改めて確認しておきましょう。これらの用語はエンジニア同士の会話や技術ドキュメントでも頻出します。
| 用語 | 読み方 | 役割・意味 |
|---|---|---|
| 引数(Argument) | ひきすう | コマンドに渡す具体的な操作対象やデータ。 |
| オプション(Option) | おぷしょん | コマンドの動作モードを変更するスイッチ(-lなど)。 |
| 位置パラメータ | いちぱらめーた | スクリプト内で引数を参照するための変数($1、$2)。 |
| 標準入力 | ひょうじゅんにゅうりょく | パイプ等を通じて渡されるデータの流れ。 |
| デリミタ | でりみた | 引数の区切り文字。Linuxでは通常「スペース」。 |
引数の使い方で迷った時のTips
コマンドライン引数の指定方法は、各コマンドによって細かく異なります。そんな時は、引数として--helpを渡すか、manコマンド(マニュアルコマンド)を使って、そのコマンドがどのような引数やオプションを期待しているかを調査する癖をつけましょう。
# コマンドのヘルプを引数で呼び出す例
ls --help
man ls
Linuxの操作に慣れるまでは、引数の順番や書き方でエラーが出ることも多いですが、エラーメッセージを読み解く力こそが上達への近道です。引数を正しく制御できるようになれば、Linuxを自由自在に操れる日はすぐそこです。
生徒
「先生、まとめを読んで引数のことがかなり整理できました!コマンドの後ろに置くデータが引数で、挙動を変えるのがオプションなんですね。」
先生
「その通りです。理解が早いですね!特にスペースが含まれる時の『""(ダブルクォーテーション)』での囲い込みは、実際の業務でも忘れがちなポイントなので意識しておくと良いですよ。」
生徒
「シェルスクリプトの $1 とか $2 というのも便利そうですね。自分で作ったプログラムに引数で名前を渡せるようになると、一気にエンジニアっぽくなった気がします!」
先生
「そうですね。引数を使うことで、一つのスクリプトを使い回せるようになります。あと、さっき教えた『!$』は使ってみましたか?」
生徒
「はい!さっき mkdir で作った長いディレクトリ名を cd する時に使ってみたら、一瞬で補完されて感動しました。タイピングの回数が減って、黒い画面の操作が楽しくなってきました!」
先生
「それは素晴らしいですね。Linuxは『いかに楽をして正確に操作するか』を追求する文化があります。引数マスターになることが、効率的なシステム運用の第一歩ですよ。これからもその調子で頑張りましょう!」