rm: ディレクトリ「archive」を削除しますか? y
このオプションをデフォルトにする方法については、シェル環境のカスタマイズについて説明している第 7 章で説明します。
3.3.3. ファイルの検索
3.3.3.1. シェル機能の使用
ファイルの移動の例では、シェルが複数のファイルを一度に操作する方法を既に説明しました。その例では、シェルはユーザーが角括弧「[」と「]」の間に指定した条件の意味を自動的に認識します。シェルは、数値の範囲や大文字・小文字を同様に置換できます。また、任意の数の文字をアスタリスクに置換し、1文字のみを疑問符に置換します。
あらゆる種類の置換を同時に使用できます。シェルは非常に論理的に処理します。例えば、Bashシェルでは次のような式も問題なく動作します。 ls ディレクトリ名/*/*/*[2-3].
他のシェルでは、アスタリスクは入力の手間を省くためによく使われます。 cd ディレクトリ* cd ディレクトリにジョブを開始します。しかし、Bashではこれは必要ありません。GNUシェルにはファイル名補完という機能があるからです。つまり、コマンド(どこでも)またはファイル(カレントディレクトリ)の最初の数文字を入力すると、混乱がない限り、シェルがあなたの意図を理解してくれます。例えば、
多くのファイルを含むディレクトリでは、次のように入力するだけで、文字Aで始まるファイルがあるかどうかを確認できます。 ls A そして、 タブ キーを2回押すのではなく 入力します「A」で始まるファイルが1つだけの場合、このファイルが引数として表示されます。 ls (または任意のシェル コマンド) を直ちに実行します。
3.3.3.2.どれ
ファイルを検索する非常に簡単な方法は、 which コマンドは、ユーザーの検索パスにリストされているディレクトリから必要なファイルを探します。もちろん、検索パスには実行可能プログラムを含むディレクトリへのパスのみが含まれているため、 which 通常のファイルでは機能しません。 which コマンドは、「コマンドが見つかりません」という問題のトラブルシューティングに役立ちます。以下の例では、ユーザーは ティナ 使えない アクロレッド 一方、同僚は同じシステムで全く問題なく動作しています。問題は パス 前のパートの問題:ティナの同僚は、必要なプログラムが
/opt/acroread/bin ですが、このディレクトリはパスにありません。
ティナ:~> どのアクロリード
/usr/bin/which: (/bin:/usr/bin:/usr/bin/X11) に acroread がありません
ティナ:~> どのアクロリード
/usr/bin/which: (/bin:/usr/bin:/usr/bin/X11) に acroread がありません
この問題は、実行するコマンドのフルパスを指定するか、
PATH変数:
ティナ:~> エクスポート PATH=$PATH:/opt/acroread/bin
ティナ:~> エコー$ PATH
/bin:/usr/bin:/usr/bin/X11:/opt/acroread/bin
ティナ:~> エクスポート PATH=$PATH:/opt/acroread/bin
ティナ:~> エコー$ PATH
/bin:/usr/bin:/usr/bin/X11:/opt/acroread/bin
使い方 which コマンドは、コマンドが別のコマンドのエイリアスであるかどうかも確認します。
ゲリット:~> which -a ls
lsは`ls -F --color=auto'のエイリアスです。lsは/bin/lsです。
ゲリット:~> which -a ls
lsは`ls -F --color=auto'のエイリアスです。lsは/bin/lsです。
もしこれがあなたのシステムで機能しない場合は、 alias コマンド:
tille@www:~/mail$ エイリアス ls
エイリアス ls='ls --color'
tille@www:~/mail$ エイリアス ls
エイリアス ls='ls --color'
3.3.3.3. 検索と位置特定
これらは、検索パスにリストされているパス以外のパスを検索するときに使用する実際のツールです。 find UNIXで知られているツールは非常に強力であり、それが構文をやや複雑にしている原因となっている可能性があります。GNU findただし、構文の問題は解消されています。このコマンドはファイル名の検索だけでなく、ファイルサイズ、最終更新日、その他のファイルプロパティも検索条件として使用できます。最も一般的な用途はファイル名の検索です。
find -名前
これは、「指定されたパスに含まれるすべてのファイルとサブディレクトリを検索し、名前に検索文字列を含むファイルの名前を出力する」(内容には含まない)と解釈できます。
別の応用例 find 特定のサイズのファイルを検索するためのもので、以下の例ではユーザーが ピーター
現在のディレクトリまたはそのサブディレクトリ内で 5 MB より大きいすべてのファイルを検索します。
ピーター:~> 検索 . -size +5000k
サイコティック・カオス.mp3
ピーター:~> 検索 . -size +5000k
サイコティック・カオス.mp3
manページを詳しく見てみると、 find 見つかったファイルに対して操作を行うこともできます。よくある例としてはファイルの削除が挙げられます。まずは、 -EXEC オプションで正しいファイルが選択されたことを確認し、その後コマンドを再実行して選択されたファイルを削除できます。以下では、 .tmp:
ピーター:~> find . -name "*.tmp" -exec rm {} \;
ピーター:~>
ピーター:~> find . -name "*.tmp" -exec rm {} \;
ピーター:~>
最適化!
このコマンドは、 rm 要件を満たすファイルが見つかるまで、何度でも実行します。最悪の場合、数千回、あるいは数百万回に及ぶ可能性があります。これはシステムにかなりの負荷をかけます。
より現実的な方法は、パイプ(|)を使用し、 xargs とツール rm 議論として。こうすることで、 rm コマンドは、ファイルごとにではなく、コマンドラインがいっぱいになった場合にのみ呼び出されます。I/Oリダイレクトを使用して日常的なタスクを簡素化する方法については、第5章を参照してください。
その後(マニュアルページによると1999年、20年後)、 find), locate 開発されました。このプログラムは使いやすくなっていますが、 findは、1日に1回しか更新されないファイルインデックスデータベースに基づいて出力されているため、 locate データベースは、 find そのため、結果はほぼ瞬時に表示されます。
ほとんどのLinuxディストリビューションでは 配置する 最近では、セキュリティ強化されたロケートの現代版 locate ユーザーが権限のない出力を受け取るのを防ぐ。 ルートのホームディレクトリはその一例ですが、通常は公開されていません。Cシェルについて知っている人を見つけたいユーザーは、次のコマンドを発行します。 locate .cshrcと入力すると、Cシェル用にカスタマイズされた設定ファイルを持つすべてのユーザーが表示されます。ユーザーが ルート および ジェニー Cシェルを実行している場合は、ファイルのみ
/home/jenny/.cshrc が表示されます。 ルートのホームディレクトリです。ほとんどのシステムでは、
locate は slocate プログラムへのシンボリック リンクです。
ビリー:~> ls -l /usr/bin/locate
lrwxrwxrwx 1 root slocate 7 Oct 28 14:18 /usr/bin/locate -> slocate*
ビリー:~> ls -l /usr/bin/locate
lrwxrwxrwx 1 root slocate 7 Oct 28 14:18 /usr/bin/locate -> slocate*
ユーザー ティナ 使えたかもしれない locate 彼女が求めていたアプリケーションを見つけるために:
ティナ:~> acroreadを見つける
/usr/share/icons/hicolor/16x16/apps/acroread.png
/usr/share/icons/hicolor/32x32/apps/acroread.png
/usr/share/icons/locolor/16x16/apps/acroread.png
/usr/share/icons/locolor/32x32/apps/acroread.png
/usr/local/bin/acroread
/usr/local/Acrobat4/Reader/intellinux/bin/acroread
/usr/local/Acrobat4/bin/acroread
ティナ:~> acroreadを見つける
/usr/share/icons/hicolor/16x16/apps/acroread.png
/usr/share/icons/hicolor/32x32/apps/acroread.png
/usr/share/icons/locolor/16x16/apps/acroread.png
/usr/share/icons/locolor/32x32/apps/acroread.png
/usr/local/bin/acroread
/usr/local/Acrobat4/Reader/intellinux/bin/acroread
/usr/local/Acrobat4/bin/acroread
名前を含まないディレクトリ ビン プログラムを含むことはできません。実行ファイルは含まれません。残りの可能性は3つあります。 / usr / local / bin その一つです ティナ 望んでいたのは、実際のプログラムを起動するシェル スクリプトへのリンクです。
ティナ:~> ファイル /usr/local/bin/acroread
/usr/local/bin/acroread: ../Acrobat4/bin/acroread へのシンボリック リンク
ティナ:~> ファイル /usr/local/Acrobat4/bin/acroread
/usr/local/Acrobat4/bin/acroread: Bourne シェル スクリプトのテキスト実行ファイル
ティナ:~> ファイル /usr/local/Acrobat4/Reader/intellinux/bin/acroread
/usr/local/Acrobat4/Reader/intellinux/bin/acroread: ELF 32ビットLSB実行ファイル、Intel 80386、バージョン1、動的リンク(
ティナ:~> ファイル /usr/local/bin/acroread
/usr/local/bin/acroread: ../Acrobat4/bin/acroread へのシンボリック リンク
ティナ:~> ファイル /usr/local/Acrobat4/bin/acroread
/usr/local/Acrobat4/bin/acroread: Bourne シェル スクリプトのテキスト実行ファイル
ティナ:~> ファイル /usr/local/Acrobat4/Reader/intellinux/bin/acroread
/usr/local/Acrobat4/Reader/intellinux/bin/acroread: ELF 32ビットLSB実行ファイル、Intel 80386、バージョン1、動的リンク(
shared ライブラリ) 剥奪 パスをできるだけ短く保ち、ユーザーがコマンドを実行するたびにシステムが長時間検索する必要がないようにするために、 / usr / local / bin パスには他のディレクトリは含まれず、
特定のプログラムのバイナリファイルのみを含み、 / usr / local / bin その他の有用なものが含まれています
プログラムも同様です。
もう一度、 find および locate 情報ページに記載されています。
3.3.3.4. grepコマンド
3.3.3.4.1. 一般的なラインフィルタリング
シンプルだが強力なプログラム、 grep 入力行をフィルタリングし、特定のパターンを出力に返すために使用されます。この用途は文字通り数千に及びます。 grep プログラム。以下の例では、 ジェリー 使用されます grep 彼がどうやってそれをやったかを見るために find:
ジェリー:~> grep -a .bash_history を検索する
find . -name ユーザー情報 man find
../ -name common.cfg を見つける
ジェリー:~> grep -a .bash_history を検索する
find . -name ユーザー情報 man find
../ -name common.cfg を見つける
検索履歴
このような場合に便利なのは、 bashを押すことで起動します Ctrlキー+R 前回のやり方を確認したい例のように、すぐに find 再び:
トーマス ~> ^R
(逆i検索)`find': `/home/thomas` -name *.xml を検索
トーマス ~> ^R
(逆i検索)`find': `/home/thomas` -name *.xml を検索
検索プロンプトに検索文字列を入力してください。入力する文字数が多いほど、検索範囲が狭くなります。これにより、このシェルセッションのコマンド履歴(
.bash_history (セッション終了時にホームディレクトリに保存されます)。検索文字列の最新の出現箇所が表示されます。同じ文字列を含む以前のコマンドを表示するには、次のように入力します。 Ctrlキー+R 再び。
情報ページをご覧ください bash 詳細については、。
少しの良識があれば、UNIX系OSならオンライン辞書が使える。Linuxにもある。辞書は既知の単語をリスト化したもので、 言葉、 にあります /usr/share/dict単語の正しいスペルを素早く確認するのに、グラフィカルアプリケーションは必要ありません。
ウィリアム:~> grep pinguin /usr/share/dict/words
ウィリアム:~> grep ペンギン /usr/share/dict/words
ペンギン
ウィリアム:~> grep pinguin /usr/share/dict/words
ウィリアム:~> grep ペンギン /usr/share/dict/words
ペンギン
辞書と単語リスト
一部のディストリビューションでは、 辞書 コマンドは、リスト内の単語を単純に検索するだけでなく、より多くの機能を提供します。
私のホームディレクトリの隣にあるディレクトリの所有者は誰ですか? ほら、彼の電話番号が載っているじゃないですか!
リサ:~> grep gdbruyne /etc/passwd
gdbruyne:x:981:981:Guy Debruyne、電話 203234:/home/gdbruyne:/bin/bash
リサ:~> grep gdbruyne /etc/passwd
gdbruyne:x:981:981:Guy Debruyne、電話 203234:/home/gdbruyne:/bin/bash
ところで、アルノのメールアドレスは何でしたっけ?
セルジュ:~/メール> grep -i arno *
送信メール: 宛先:[メール保護]>
送信メール: 24年2001月XNUMX日月曜日 [メール保護] 書きました:
セルジュ:~/メール> grep -i arno *
送信メール: 宛先:[メール保護]>
送信メール: 24年2001月XNUMX日月曜日 [メール保護] 書きました:
find と locate は、grep と組み合わせて、より高度なクエリを定義する際によく使用されます。詳細については、第5章の I/O リダイレクトを参照してください。
3.3.3.4.2. 特殊文字
シェルにとって特別な意味を持つ文字は 逃げたBashのエスケープ文字は、他のシェルと同様にバックスラッシュです。バックスラッシュは、後続の文字の特別な意味を無効にします。シェルは、/、.、?、*など、多くの特殊文字を認識します。完全なリストは、シェルのInfoページとドキュメントに記載されています。
例えば、ディレクトリ内のすべてのファイルではなく、ファイル「*」を表示したい場合は、次のようにします。