この4番目の節では、ワイルドカード* 、 [] 、および?の使用 パターンでパスを置換します。 また、最初の部分の結果が要約されています。 お楽しみください! ;)
ジョーカーの使用
ジョーカーに会おう
日常の使用では、多くのファイルシステムオブジェクトに対して一度に1つの操作(たとえばrm)を実行する必要がある場合、Linuxが頻繁に発生します。 このような状況では、多くのファイルをコマンドラインに入力することは非常に面倒です。
$ rm file1 file2 file3 file4 file5 file6 file7 file8
この問題を解決するには、組み込みのLinuxジョーカーのサポートを活用できます。 このサポートは「グロビング」とも呼ばれ(歴史的な理由により、ロシア語では「ファイル名のユニバーサル化」とも呼ばれます)、ワイルド連結パターンを使用して一度に多くのファイルを指定できます。 Bashや他のLinuxチームは、ドライブに合ったファイルを探すことでこのパターンを解釈します。 したがって、現在の作業ディレクトリにfile1からfile8までのファイルがある場合は、次のように入力して削除できます。
$ rm file[1-8]
または、fileという名前のファイル自体を含め、fileで始まる名前のすべてのファイルを削除する場合は、次のように入力できます 。
$ rm file*
ワイルド連結「*」は、任意の文字または文字セット、あるいはそれらの不在にも一致します。 もちろん、グロブジョーカーは、後で説明するように、ファイルを削除するだけではありません。
不適切なテンプレート
/ etc内の「g」で始まるすべてのファイルシステムオブジェクトとg自体をリストする必要がある場合は、次のように入力できます。
$ ls -d /etc/g*
/etc/gconf /etc/ggi /etc/gimp /etc/gnome /etc/gnome-vfs-mime-magic /etc/gpm /etc/group /etc/group-
次に、ファイルシステムオブジェクトに適合しないテンプレートを指定した場合の動作について説明します。 次の例では、 asdfjklを含む可能性のある「asdf」で始まり「jkl」で終わる/ usr / bin内のすべてのファイルを反復処理しようとしました 。
$ ls -d /usr/bin/asdf*jkl
ls: /usr/bin/asdf*jkl: No such file or directory
これがどうなるかです。 通常、テンプレートを指定し、1つ以上のファイルが暗黙のファイルシステムに配置されている場合、bashはテンプレートをスペースで区切られたすべての適切なオブジェクトのリストに置き換えます。 ただし、テンプレートと一致するものがない場合、bashは渡された引数をそのままジョーカーに残します。 そのため、lsはファイル/ usr / bin / asdf * jklを見つけられず、エラーを返します。 ここでの基本的なルールは次のとおりです。globテンプレートは、ファイルシステムのオブジェクトと一致する場合にのみ展開されます。 それ以外の場合は、そのまま残り、文字通りプログラム呼び出しに転送されます。
ジョーカー構文:*および?
そのため、グロビングがどのように機能するかは既に見てきましたが、今ではジョーカーの構文を検討する価値があります。 ジョーカーとして特殊文字が使用されます:
* -0個以上の文字に一致します。 これは、「何も含めて何でもかまいません」という意味です。 例:
- / etc / g *は、 / etc内のgおよびgファイル自体で始まるすべてのファイルと一致します。
- / tmp / my * 1は、ファイルmy1を含め、myで始まり1で終わる/ tmp内のすべてのファイルに一致します。
? -任意の1文字に等しい。 例:
- myfile? myfileという名前のファイルとそれに続く任意の1文字に一致します。
- / tmp / notes?txtは、たとえば/tmp/notes.txtおよび/ tmp / notes_txtと一致します(存在する場合)。
ジョーカー構文:[]
このジョーカーはどのように見えますか? しかし、より正確です。 使用するには、必要な文字を[]内に入れてください。 結果の式は、これらの文字のいずれかを満たします。 「-」を使用して、範囲、さらには範囲の組み合わせを示すこともできます。 例:
- myfile [12]はmyfile1とmyfile2に一致します。 これらのファイルの少なくとも1つが現在のディレクトリに存在する場合、ジョーカーは動作します。
- [Cc] hange [Ll] ogはChangelog 、 ChangeLog 、 changeLogおよびchangelogに一致します。 ご覧のとおり、ブラケットジョーカーの使用は、大文字でオプションを示すのに非常に便利です。
- ls / etc / [0-9] * 10進数字で始まる/ etc内のすべてのファイルを表示します。
- ls / tmp / [A-Za-z] *は、大文字または小文字のラテン文字で始まる/ tmp内のすべてのファイルを表示します。
[!]コンストラクトは[]コンストラクトと同等です。ただし、括弧内の文字と一致する代わりに、 [!]の間にリストされていない任意の文字と一致します。 および]。 例:
- rm myfile [!9]は、 myfileという名前のすべてのファイルとmyfile9を除く1文字を削除します。
ジョーカーの警告
ジョーカーを使用する際に注意すべきいくつかの警告があります。 bashはワイルドカード文字(?、[、]および*)を特別な方法で処理するため、これらの文字を含むコマンドの引数を記述するときは特に注意する必要があります。 たとえば、文字列「[fo] *」を含むファイルを作成する場合、次のコマンドでは目的の結果が得られない場合があります。
$ echo [fo]* > /tmp/mynewfile.txt
テンプレート[fo] *が現在の作業ディレクトリ内のファイルと一致する場合、予想される[fo] *の代わりに/tmp/mynewfile.txt内にそれらの名前があります。 解決策? さて、そのうちの1つはあなたのキャラクターを一重引用符で囲み、bashにジョーカーの拡張を行わないように指示します:
$ echo '[fo]*' > /tmp/mynewfile.txt
このアプローチを使用すると、意図したとおり、新しいファイルには文字通り[fo] *が含まれます。 また、エスケープバックスラッシュを使用して、bashに[、]および*は文字通りに解釈されるべきであり、ジョーカーのようではないことを伝えることができます。
$ echo \[fo\]\* > /tmp/mynewfile.txt
両方のアプローチ(単一引用符とバックスラッシュのエスケープ)は同じ効果で機能します。 バックスラッシュの処理について話しているので、文字通り\を指定したい場合は、一重引用符で囲むか、\\(これは\に変換されます)と入力できることを明確にしておくといいでしょう。
注:
二重引用符は一重引用符と同じように機能しますが、bashで制限された処理を実行できます。 したがって、文字通りコマンドにテキストを渡すことに本当に関心がある場合は、一重引用符が最善の策です。 man 7 globと入力すると、ジョーカーの開示に関する詳細情報を取得できます。 bashでの引用の詳細については、man 1 bashと入力し、QUOTINGと呼ばれるセクションを読んでください。 計画にLPI試験の合格が含まれている場合は、これを宿題と見なしてください。 =)
要約と他のリソースへのリンク
まとめ
おめでとうございます。 Linuxの基本レビューが終わりました! これがLinuxの基礎知識を強化するのに役立つことを願っています。 ここで学んだトピック(bashの基本、基本的なLinuxコマンド、リンク、ジョーカーなど)は、正規表現、所有権とアクセス権、ユーザーアカウント管理などのトピックを扱う次の管理の基本チュートリアルの基礎を築きました。 、などなど。
これらのチュートリアルを続けていくと、すぐにLinux Professional InstituteのLPICレベル1認定を取得できます。 この認定について言えば、これが本当にあなたが興味を持っているものであるならば、このガイドでカバーされる資料のために慎重に選ばれた以下の段落のリソースを勉強することをお勧めします。
参照資料
「例のBash」シリーズの記事で、ダニエルはbashプログラミング構成を使用して独自のbashスクリプトを作成する方法を示しています。 このシリーズ(主に1部と2部)は、LPICレベル1の優れた準備となります。
- 例のBash、パート1:Bourne-againシェルでのプログラミングの基礎- 英語では 、ロシア語への翻訳が期待されています
- サンプルのBash、パート2:bashプログラミングの基礎についての詳細- 英語で 、翻訳を待つ
- 例のBash、パート3:ebuildシステムを考慮します- 英語では、翻訳は
著者について
ダニエル・ロビンス
Daniel Robbinsは、Gentooコミュニティの創設者であり、Gentoo Linuxオペレーティングシステムの作成者です。 ダニエルは妻のメアリーと元気な娘2人とニューメキシコに住んでいます。 彼はFuntooの創設者兼代表でもあり、 IBM developerWorks 、Intel Developer Services、およびC / C ++ Users Journalの技術記事を数多く執筆しています。
クリス・ハウザー
クリスハウザーは、1994年にテイラー大学(米国インディアナ州)の管理者チームに参加し、コンピューターサイエンスと数学の学士号を取得して以来、UNIXサポーターです。 その後、Webアプリケーション、ビデオ編集、UNIXドライバー、暗号化保護など、さまざまな分野で働きました。 現在、Sentry Data Systemsで働いています。 Chrisは、Gentoo LinuxやClojureなどの多くの無料プロジェクトにも貢献し、 The Joy of Clojureの共同執筆者でもあります。
アロン・グリフィス
Iron Griffisはボストンに住んでおり、ここ10年間、Hewlett-PackardでTru64、Linux、Xen、KVM仮想化セキュリティ認証用のUNIXネットワークドライバー、最近ではHP ePrintプラットフォームなどのプロジェクトに従事しました。 プログラミングの暇な時間に、Ayronは、自転車に乗ったり、ビットをジャグリングしたり、ボストンのプロ野球チームRed Socksを応援したりする際に、プログラミングの問題を消し去ることを好みます。