Linuxのメタキャラクタ~メタキャラクタについて~
今回の内容
今回は、メタキャラクタについて解説します。
試験ポイント
コマンドラインで使用されるメタキャラクタの「*」「‘」「”」「/」が重要!
★LPIC試験ポイント①★
ファイルを検索するときに役立つシェルのメタキャラクタの「[]」が重要!
★LPIC試験ポイント②★
メタキャラクタとは
シェルで特別な意味を持つ記号のことを、「メタキャラクタ」といいます。 「メタキャラクタ」は、適切に活用することにより、コマンドライン上での表現に幅を持たせることが可能となります。
ディレクトリを表すメタキャラクタ
以下は、ディレクトリを表すメタキャラクタの一覧となります。
例)一般ユーザ「test」でログインしており、 カレントディレクトリが/home/test/lpic の場合
メタキャラクタ | 説明 |
---|---|
~ = ホームディレクトリ | /home/test |
. = カレントディレクトリ | /home/test/lpic |
.. = 1つ上のディレクトリ | /home/test |
——————–
[test@localhost lpic]$ echo ~ /home/test ↑testユーザのホームディレクトリディレクトリ(~)をechoで表示 [test@localhost lpic]$ [test@localhost lpic]$ cd ~ ↑cdコマンドを使ってtestユーザのホームディレクトリに移動 [test@localhost ~]$
——————–
[test@localhost ~]$ ls . Desktop Downloads Music Public Templates Videos Documents lpic Pictures readme.txt test
——————–
[test@localhost ~]$ cd .. [test@localhost home]$ [test@localhost home]$ ls . test [test@localhost home]$
——————–
コマンドラインで使用されるメタキャラクタ
以下は、コマンドラインで使用されるメタキャラクタの一覧となります。
メタキャラクタ | 説明 |
---|---|
* | ワイルドカード(任意の数の文字)。 |
? | ワイルドカード(1文字の任意の文字)。 |
コマンド1;コマンド2 | コマンドの連結。 |
コマンド1&&コマンド2 | コマンド1が成功した場合(正常な戻り値を得たとき)のみ、コ マンド2を実行。 |
コマンド1||コマンド2 | コマンド1が失敗した場合(正常な戻り値以外を得たとき)の み、コマンド2を実行。 |
$(コマンド) `コマンド` | コマンドの置き換え |
? | ワイルドカード(1文字の任意の文字)。 |
‘(「単一引用符」 (シングルクォーテーション)) |
囲まれた部分が文字列であることを表す(一切のメ タキャラクタを無視)。 |
“(二重引用符 (ダブルクォーテーション)) |
引用符内にコマンドがあれば、そのコマンドを実行し た結果が展開される。 変数の場合は、変数に格納されているコマンドを実 行した結果が展開される。 |
∖ (バックスラッシュ) |
次の1文字をエスケープする(メタキャラクタとしての 特殊な意味を無視)。 |
——————–
[test@localhost ~]$ touch file1 file22 file333 ★touch:空のファイルを作成するコマンド [test@localhost ~]$ [test@localhost ~]$ ls file* file1 file22 file333 ★file~を出力
——————–
[test@localhost ~]$ ls file? file1 [test@localhost ~]$ ls file??? file333
——————–
[test@localhost ~]$ pwd ; ls /root anaconda-ks.cfg Documents file1 file333 Music Public Videos Desktop Downloads file222 initial-setup-ks.cfg Pictures Templates [test@localhost ~]$
——————–
[test@localhost ~]$ pwd && echo true /home/test ★一つ目のコマンドが成功している true ⇒使用例)バックアップが成功したら、圧縮するよとか。。 試験では、あまり出ないが、実務でよく使う
[test@localhost ~]$ cd xxx && echo true -bash: cd: xxx: そのようなファイルやディレクトリはありません [test@localhost ~]$ [test@localhost ~]$ cd xxx || echo true -bash: cd: xxx: そのようなファイルやディレクトリはありません true ★cd xxxが失敗したので、echo trueが出力された
——————–
[test@localhost ~]$ var1=$(pwd)
[test@localhost ~]$ echo $var1 /home/test
[test@localhost ~]$ var2=`pwd` [test@localhost ~]$ echo var2 var2 ★「$」をつけないとpwdの実行結果はでない [test@localhost ~]$ echo $var2 /home/test
——————–
[test@localhost ~]$ echo $var1 /home/test [test@localhost ~]$ 【’】 [test@localhost ~]$ echo '$var1' $var1 ★ただの文字列として出力 [test@localhost ~]$
★試験ポイント①★
——————–
引用符内にコマンドがあれば、そのコマンドを実行した結果が展開される。
変数の場合は、変数に格納されているコマンドを実行した結果が展開される
【”】 [test@localhost ~]$ echo "$var1" /home/test ★メタキャラクタとして認識
【バックスラッシュ】 [test@localhost ~]$ echo $var1 /home/test [test@localhost ~]$ echo \$var1 $var1 [test@localhost ~]$ [test@localhost ~]$ echo \"$var1\" "/home/test" [test@localhost ~]$ [test@localhost ~]$ echo \"\$var1\" "$var1" [test@localhost ~]$
コマンドおよび引用符 | 使用例 | 結果 |
---|---|---|
* | $ ls file* | file1 file22 file333 |
? | $ ls file?? | file22 |
コマンド1;コマンド2 | $ pwd ; ls | /home/test true |
コマンド1||コマンド2 | $ cd directory1 || echo false | bash: cd: directory1: No such file or directory false |
$(コマンド) `コマンド` | $var1=$(pwd) $ echo $var1 —————- $var2=`pwd` $ echo $var2 |
/home/test |
‘ | $ echo ‘$var1’ | $var1 |
“ | $ echo “$var1” | /home/test |
∖(バックスラッシュ) | $ echo ∖$var1 | $var1 |
※「∖(バックスラッシュ)」は、フォントやOSにより、「¥」と表示されることもあります。
ファイルを検索するときに役立つシェルのメタキャラクタ
ファイルを検索するときに役立つのがシェルのメタキャラクタです。 メタキャラクタを使うとパターンに一致する複数ファイルを一括して扱うことができます。 以下が主なメタキャラクタとなります。
メタキャラクタ | 説明 |
---|---|
* | 0文字以上の文字または文字列にマッチする。 【例】「a*」であれば「a」「ab」「abc」「aaaa」のいずれもマッチする。0文字もマッチする ことに注意。 |
? | 任意の1文字にマッチする。 【例】「a?」であれば「aa」「ab」「a1」などはマッチし、「a」「abc」などにはマッチしない。 |
[] | []内に列挙されている文字のいずれか1文字にマッチする。 連続した文字列には「-」が使用できる。 [a-z]は英小文字すべて、[0-9]は数字すべて、指定範囲の先頭に「!」を使うとマッチし ない範囲を指定できる。 【例】「a[bcd]」は「ab」「ac」「ad」のいずれかにマッチする。 「a[!bcd]」は「aa」「a1」はマッチするが、「ab」「ac」「ad」にはマッチしない。 |
{} | {}内の文字を使って文字列を生成する。 【例】「test{1,2}」はtest1、test2を生成する。 |
また、メタキャラクタに使用されている文字をメタキャラクタではなく文字列として使いたい 場合には「¥」(バックスラッシュ)を使用します。
——————–
【例】「a*」であれば「a」「ab」「abc」「aaaa」のいずれもマッチする。
0文字もマッチすることに注意。
[test@localhost ~]$ find ./ -name "file" ↑名前で検索 どういう条件か:ルートディレクトリ以下のfileをいう名前の ファイルやディレクトリを検索 現在「file」というファイルがない事がわかる [test@localhost ~]$ find ./ -name "file*" ./file1 ./file22 ./file333 [test@localhost ~]$
——————–
【例】「a?」であれば「aa」「ab」「a1」などはマッチし、「a」「abc」などにはマッチしない。
[test@localhost ~]$ find ./ -name "file??" ./file22 [test@localhost ~]$
——————–
【例】「a[bcd]」は「ab」「ac」「ad」のいずれかにマッチする。
「a[!bcd]」は「aa」「a1」はマッチするが、「ab」「ac」「ad」にはマッチしない。
[test@localhost ~]$ find ./ -name "file[12]*" ./file1 ./file22 [test@localhost ~]$ [test@localhost ~]$ find ./ -name "file[0-9]" ./file1 [test@localhost ~]$ [test@localhost ~]$ find ./ -name "file[0-9][1234][1234]" ./file333 [test@localhost ~]$
★試験ポイント②★
——————–
【例】「test{1,2}」はtest1、test2を生成する。
[test@localhost ~]$ touch Lpic{1,2,3,4} [test@localhost ~]$ ls Lpic1 Lpic2 Lpic3 Lpic4 file1 file22 file333 [test@localhost ~]$
まとめ
メタキャラクタはよく試験にも出題されますし、実務においても使いこなすことによりLINUXを扱う速度がグンと上がります!しっかりと覚えておきましょう!それでは今回はこのあたりで。
確認問題
1つ上のディレクトリに移動する際のメタキャラクタとして、正しい選択肢を1つ選びなさい。
A) cd ~
B) cd ..
C) cd ##
D) cd …
ワイルドカード(任意の数の文字)を表すメタキャラクタとして、正しい選択肢を1つ選びなさい。
A) ?
B) .
C) {}
D) *
次の1文字をエスケープする(メタキャラクタとしての特殊な意味を無視)を表すメタキャラクタとして、
正しい選択肢を1つ選びなさい。
A) ‘
B) &&
C) ;
D) ∖