findコマンド:Linux上でファイルを見つけるための広範なオプション

彼らは、歴史を覚えていない人は、何度も同じことを繰り返すことになると言います。 あなたが歴史をどのように使うべきかを知らない バッシュシステムのパワーをフルに使うことはできません。 しかし、スタートは決して遅すぎると、おそらくこのレビューを読んで、あなたはGNUバッシュで動作するように日常の仕事のスキルで、より便利で必要な発見します。

シェルに時間を費やしている場合は、実行したコマンドの「履歴」があることがわかります。これは、Webブラウザが訪問したWebページの履歴を記憶しているのと同じです。 もちろん、シェルのコマンドの履歴は、ブラウザの訪問ページの履歴よりもはるかに早く現れましたが。

多くのユーザーは、コマンド履歴へのアクセスは、コマンドで取得することができるという事実に気づいていません   またはキーボードショートカットを使用して Ctrl + P  (前のコマンド)と Ctrl + n  (次へのコマンド)。 これらは非常に便利で歴史を扱うためによく使われるテクニックですが、Bashの歴史を使って作業することはできません。 Bashのストーリーを使って、チームを使って作業するいくつかのトリックを見てみましょう   あるいは他の方法インチ

数字を使う

あなたがコマンドを与えるならば それぞれの前にシーケンス番号が付いた最後に入力されたコマンドのリストが表示されます。 構造を使用して履歴からコマンドを再実行することができます

実行する必要がある場合 n番目  リストの最後からコマンドを数えて たとえば、あなたの結論   次のようになります。

1 sudo su 2 exit 3 sudo apt-get update

1 sudo su

2出口

3 sudo apt - アップデートを入手する

その後、命令

これは、(最後のコマンドを開始します !! )の助けを借りて sudo。 悪くない?

あなたはおそらくデザインを知っています !コマンドで始まる歴史の最後のチームを立ち上げる コマンド。 だから、最近非常に長いコマンドを実行し、それがどこから始まったかを覚えていれば、この方法でストーリーを実行すると便利です。 そして、この場合のBashはチームを探していないと知りましたが、探しています 部分文字列? つまり、感嘆符の後にコマンド全体を入力する必要はなく、最初の文字だけで十分です。 あなたが何かを実行するとしましょう:

$ git commit -a -m "様々な雑多なメモ"

コマンドを繰り返すことができますが、その考え方は十分です

コマンドの最後のパラメータを呼び出す

の組み合わせを使用して «Esc +。» (エスケープ  期間付き)、あなたは履歴から電話をかけることができます 言葉、引数としてコマンドに渡されます。 例えば、あなたが走った:

$ cp filename1 filename2

あなたは真ん中から2つの言葉を引き出す必要がありましたか? それは簡単です!

$ ls! :*

検索

もう1つの便利な機能は、 "Ctrl + r"。 クリック "Ctrl + r"  登場した招待状で以前に実行されたコマンドの一部を入力し始める。 文字を入力すると、Bashは指定した文字を含む履歴の最後のコマンドを見つけようとします。 見つけたら、あなたは始めることができます "Ctrl + r"  もう一度、Bashは、もしあれば、以前のコマンドを表示します。 適切なチームを見つけたら、クリックしてください «Enter»  コマンドラインに表示されます。

起動する前にコマンドを編集する必要がある場合は、従来の「左矢印」と「右矢印」を使用して、コマンドの目的の場所にカーソルを移動して修正します。

セキュリティ

チームの歴史は非常に有用なものですが、時にはそれを保持することが望ましくない状況もあります。 たとえば、多くのユーザー間で共有されているシステムを使用して作業したり、したくない場合 システム管理者  システムを使用して、入力したコマンドを選択します。 パーソナルコンピュータを使用している場合でも、ハッキングされる可能性が常にあります。本当に重要なデータの履歴を保持したくない場合もあります。 最終的には、コマンドを格納することに意味がないため、コマンドを使用して履歴を捨てないようにすることができます。 たとえば、頻繁に使用することができます lsなぜストレージチームの面で長く長く本当に役立つのではなく、それを歴史の中に保管するのですか?

歴史の中でコマンドのストレージを管理する方法を見てみましょう。

最初の方法は、 .bashrc

はい、「静けさ」について。 共有システムでは、ユーティリティを使用して実行したコマンドを一部のユーザーが見ることができます トップ  と ps。 したがって、作業中のシステムの信頼性が100%保証されていない場合は、秘密データを含むコマンドを実行しないでください。

結論

ここで取り上げたテクニックは日々の仕事に役立ち、もっと楽しいものになることを本当に願っています。 しかし、これはすべてではありません。 システムの履歴については、manページを必ず参照してください。 私はあなた自身のためにもっと多くの便利を見つけることができると確信しています!

間違いなく、Linuxで作業するときには、 ファイルを検索する 特定の特性を有する。 これらの特性には、サイズやファイルの種類、権限などがあります。

Linuxコマンドの存在 見つける多くの点で、 ファイルを検索する  異なる基準によって

今日我々は分析する linuxでファイルを検索する  チームのための主要なオプションを与える 見つけるこれはあなたの仕事に適用することができます。


コマンドフォーマット 見つける:

見つける方法-Options

どこで 方法  検索するディレクトリです。 次の値をパスとして指定できます。

.   - 現在のディレクトリで検索する。

/   - ルートディレクトリからの検索。

~   - ホームディレクトリで検索します。

オプションについては、慎重に読むことが非常に必要な非常に大きなリストがあります(これは将来役立ちます)。 そして、 findコマンドの基本オプション:

-name  - 上記のテンプレートを使用して名前でファイルを検索する。

-user  - 指定されたユーザに属するファイルを検索する。

グループ  - 指定されたグループに属するファイルを検索する。

パーペム  - 指定されたアクセスモードのファイルを検索する。

  - 特定の種類のファイルを検索する。 タイプも十分です:

  • b - 特殊ブロックファイル。
  • d - カタログ。
  • c - 特殊文字ファイル。
  • fは通常のファイルです。
  • l - シンボリックリンク。
  • p - 名前付きパイプ。
  • sはソケットです。
-size n  - n単位のサイズのファイルを検索する。

-mtime -n + n  - 内容が( - )日以上前に変更されたファイルを検索する。

いくつか考えてみる チーム使用の例 見つける :

最も一般的に使用されるオプションは、オプションです -nameこれは名前でファイルを検索します。

-nameオプションの例 :

$ / mnt / usbの-name "* .MP3" を見つける-print

/ mnt / usbディレクトリにマウントされたUSBデバイス上の拡張子.mp3を持つすべてのファイル(*印で示されている)を検索します。

$ find〜-name "test *" -print

testで始まるホームディレクトリファイルのリストを表示します。

あなたが(例えば、jへの)特定の文字で始まるファイルを検索する必要がある場合は、作業は非常に簡単です、正規表現を使用すると便利があるでしょう。

$ / -name "*" -printを検索する

上記のコマンドがjまでの文字で始まる、システム内のすべてのファイルを見つけることができるようになります。

特定のアクセスモードを持つファイルを検索する

特定のアクセスモードのファイルを検索する必要がある場合は、オプション パーペムこれは助けが簡単です。

たとえば、アクセスモード775のファイルを検索します(所有者とグループは 完全な権利  残りのユーザーには書き込み制限があります)。

$ 見つける。 -perm 775 -print

を使用した検索の実行 見つける -permオプションを使用すると、別の方法を使用することができます。モード値の前にハイフンを置き、指定されたすべての許可ビットが設定されているファイルを検索できます。 さらに、この場合、残りのビットは無視されます。

たとえば、グループのユーザーがフルアクセス権を持つファイルを検索します。

$ 見つける。 -perm -070 -print

ハイフンの代わりに、プラス記号を指定することができます。 この場合、指定されたパーミッションビットの少なくとも1つのファイルが検索されます。 残りのビットは無視されます。

特定のユーザーまたはグループのファイルを検索する

特定のユーザーのファイルを検索することは、実装が非常に簡単です。 これを行うには、次のコマンドを実行します。

$ / -userを検索するadmin -print

上記のコマンドは、 検索ファイル  ユーザーadminに属するシステムで

特定のグループに属するファイル(マネージャなど)を検索するには、次のコマンドを実行します。

$ find / -group managers -print

存在しないユーザーまたはグループのファイルを検索するには、オプション - 奴  と - グループ:

$ 見つける/ -nouser -print

$ 検索/ -nogroup -print

特定の種類のファイルを検索する

チームの便利な機能の1つ 見つける特定の種類のファイルを検索する機能です。 オプションの使用に関するオプションを検討する :

/ etcディレクトリ内のシンボリックリンクを検索する:

$ / etc -type l -printを見つける

/ mnt / raidにディレクトリの一覧を表示する

$ / mnt / raid -type d -printを検索する

特定のサイズのファイルを検索する

オプション サイズ  特定のサイズのファイルを検索することができ、実行時に次のように表示されます。

$ 見つける。 -size 2000k -print

上記のコマンドは、現在のディレクトリに2 MBのファイルを見つけて表示します。 たとえば、500 KB未満のファイルを検索する必要がある場合、コマンドの種類は次のようになります。

$ 見つける。 -size -500k -print

600メガバイトを超えるファイルを見つける必要がある場合は、次のコマンドを適用します。

$ / -size + 600M -printを見つける

-mtimeオプションを使用してファイルを検索する

オプション -mtime  ある時点で変更されたファイルを見つけることができます。

たとえば、/ mnt / raid / uploadディレクトリにあるファイルを検索し、過去5日間に変更する作業がありました。 これで我々はチームを助けるでしょう:

$ find / mnt / raid / upload -mtime -5 -print

たとえば、1週間は変更されていないファイルを見つけるために、その逆が必要な場合は、次のコマンドを適用します。

$ find / mnt / raid / upload -7 -print

チーム 見つける  これは非常に便利なツールです ファイルを検索する また、 ファイルを検索する  NFSディスク(ネットワーク ファイルシステム)、しかし、この場合には、NFS上の何かを検索するための時間は、ローカルドライブ上のよりもはるかに多くを取ることを考慮する必要があります。

この記事では、我々はあなたの仕事であなたを助けるコマンド検索のための唯一の主要なオプションを検討しています。 便利なものを使い、些細なことを心配しないでください!

サーバー環境では、コマンドラインの操作に時間がかかります。 多くの場合、bashシェルが使用されます。 コマンドシェル  デフォルトではほとんどのディストリビューションです。

おそらく、端末セッションの共通コマンドの間に頻繁に繰り返され、コマンドデータの変化する - もっと頻繁に。 余分な機会が練習するのではなく、いくつかの点で、それは気にして刺激を開始します - もちろん、それはので、最初の利得は、各取扱説明書は、非常に便利です。

幸いなことに、bashシェルにはかなり良く開発された履歴関数があります。 効果的にbashで履歴を使用して管理する機能を使用すると、コマンドの入力に費やす時間を削減することができ、それによって作業量が増加します。 以下のような乾燥のいわゆる原則は、(自分を繰り返してはいけない)開発者の間で人気のある、よく知られています。 bashで歴史を生産的に使用することは、この原則に従って情報を扱うのに役立ちます。

このガイドでは、Ubuntu 12.04でVPSのすべての機能を説明しますが、ほぼすべての機能 linuxディストリビューション  このように動作します。

bashの履歴設定

履歴を使用する前に、より使いやすくするためにbash設定の一部を編集する必要があります。

Bashでは、履歴に保存する必要がある以前のコマンドの数を編集できます。 これを行うには、bashのは、2つの別々のオプションがあります。オプションは、«HISTFILESIZE»は、履歴ファイルに保存されているコマンドの数を指定し、«HISTSIZE»は、現在のセッションのためにメモリに保存されているコマンドの数を示します。

これは、後で使用するために、ディスク上の現在のセッションの歴史の大きさだけでなく、店よりボリューム履歴を制限メモリが合理的に設定できることを意味します。

デフォルトでは、bashのは、これらのパラメータの非常に緩やかな値を設定するので、彼らはより多くの完全な履歴を使用できるように、拡張する必要があります。 一部のディストリビューションでは既定の履歴設定が既に増加しています。

これらのオプションを変更するには、エディタを使用して "〜/ .bashrc"ファイルを開きます。

«HISTSIZE»オプションと«HISTFILESIZE»下さい。 それらの値が設定されている場合は、値を変更します。 このファイルにこのようなパラメーターがない場合は、それを入力します。 このマニュアルでは、ディスクの10,000行とメモリに保存された5,000行を管理できます。 これは、ほとんどのシステムではなく、控えめな値であり、それでも彼らはパフォーマンスに影響を与える場合、削減する必要があります。

HISTSIZE = 5000
  HISTFILESIZE = 10000

デフォルトでは、bashは書き換えや、既存のファイルを更新し、各セッションの終わりに歴史を書き込みます。 これは、いくつかのbash-セッションで作業する場合は、最後の完全なセッションの履歴のみを保存することを意味します。

これは、むしろそれを上書きするよりも、話を追加します«histappendの»を、設定することで回避することができます。 既にインストールされている可能性があります。 それ以外の場合は、次の行を追加してアクティブにすることができます。

shopt -s histappend

セッションを待たずに、すぐに歴史の中で任意のコマンドを持っている(端末の一つのコマンドに他ですぐに利用された)bashには、設定または各新しいの前に実行されるコマンドが含まれています«PROMPT_COMMAND»オプションをするために、コマンド«履歴-a»を追加することができます コマンドライン。

しかし、そのようなチームの適切な操作のためには、トリックが必要です。 すぐに«歴史-a»を追加する必要があり、ファイルの歴史の中で、その後、編集したファイルの履歴を読み、«歴史-r»の助けを借りて、このセッションの歴史に戻って、その後、«歴史-c»の助けを借りて、このセッションの現在の履歴をクリアします。

これは次のようになります。

輸出PROMPT_COMMAND = "履歴-a;歴史-c;歴史-r; $ PROMPT_COMMAND"

終了したら、変更を保存してファイルを閉じます。

変更内容を有効にするには、ログアウトして再度ログイン、またはにsourceコマンドを使用します このファイル、入力:

ソース〜/ .bashrc

前回の履歴をバッシュ

bashで話を表示するには、コマンド«歴史»を使用しています。 前のコマンドをコマンドで文字列に出力します。 ほとんどの場合、 "HISTSIZE"という値で設定された行数を出力するはずです。 現時点ではあまりにも多くのチームがありません:

歴史
. . .
  43男bash
  44 man fc
  45男bash
  46 fc -l -10
  歴史
  48 ls -a
  49 vim .bash_history
  50の歴史
  51人の歴史
  52ヒストリー10
  53歴史

コマンドシーケンス番号も表示されます。 各チームは、使いやすさのための番号に関連付けられています。

"history"の後にコマンド数を指定することで、出力を短くすることができます。 あなただけの最後の5つのチームが入っ表示したい場合たとえば、私たちは、ダイヤルすることができます:

歴史5
  50の歴史
  51人の歴史
  52ヒストリー10
  53歴史
  54歴史5

ヒストリ内の特定の文字列を含むコマンドをすべて検索するには、縦棒の文字の後にgrepを使用します。 たとえば、 "cd"を含む行を検索するには、次のように入力します。

歴史| grep cd
  33枚の写真/
  37 cd ..
  39 cdデスクトップ/
  61 cd / usr / bin /
  68 cd
  83 cd / etc /
  86 cd resolvconf /
  90 cd resolv.conf.d /

Bashの履歴からコマンドを実行する

コマンドを派生させることの学習はもちろん便利ですが、コマンドシーケンス番号の使用を除いて、これはほとんど何も与えません。 以前のコマンドを呼び出すには、特殊な構文を使用する必要があります。

前のコマンドのいずれかを呼び出すには、番号を入力してその前に置く 感嘆符  «!»。 上記の履歴の例に基づいて、次のように入力するだけでマニュアルの操作ページをすばやく表示できます。

これは即座に番号51の履歴のコマンドを呼び出して実行します。

現在の位置を基準にしてコマンドを実行することもできます。 これは、構文 "!-N"を使用して実行されます。ここで、 "n"は実行するコマンドの番号に置き換えなければなりません。

たとえば、最後から2番目のコマンドを表示して実行する必要がある場合は、「!-2」と入力します。 したがって、ディレクトリへの長いパスの内容が出力されてからechoコマンドが導入され、パスを再度表示する必要がある場合、セッションは次のようになります。

ls / usr / share / doc / manpages
  エコーハロー
  !-2#は内容を再度一覧表示します

最後のコマンドを再実行するには、bashで "!-1"を使用するのではなく、 "ホット"コマンド "!!"を使うことができます。

多くの人がsudo権限を必要とするコマンドを入力する場合にこれを使用します。 "sudo !!"と入力すると、sudo権限でコマンドが上書きされます。 このセッションは次のようになります。

/ etc / helloに触れる
  touch: `/ etc / hello 'に触れることができません:許可が拒否されました
  sudo !!
  sudo touch / etc / hello
   demouserのパスワード:

この例は、この便利な構文の別のプロパティを示しています。 実際、これは簡単な交換であり、必要に応じて他のチームに組み込むことができます。

Bashでストーリーをスクロールする

ストーリーをBashでスクロールして、後続の各コマンドをコマンドラインに表示して編集する方法があります。

最も一般的な方法は、コマンドラインの上矢印キーを押すことです。

このキーを押すたびに、コマンドラインの履歴に戻ります。 方向を変更するには、下矢印キーを使用します。下矢印キーは、履歴を最後のコマンドラインまでスクロールします。

代わりに矢印キーは、キーボードショートカットを使用することができます。前方にスクロールする物語をバックスクロールする«CTRL-Pの»を、そして«CTRL-N»。

現在のコマンドラインに戻るには、 "Meta-\u003e"を使用します。 ほとんどの場合、 "meta"とシンボル "\u003e"は "ALT-Shift-"の組み合わせを置き換えます。 これは、現在の コマンドライン  遠く離れている。

ストーリーの最初の行に移動するには、リバース・マヌーバ「Meta-<». Обычно это сочетание замещает «ALT-Shift-,».

以下の合計として歴史をナビゲートするために最も重要なキーの一覧を示します:

  • 上矢印キー:履歴をスクロールします。
  • CTRLp:履歴をスクロールして戻します。
  • 下矢印キー:ストーリーを前方にスクロールします。
  • CTRLn:物語を前方にスクロールする。
  • ALTシフト-. :ストーリーの最後に移動する(最後に入力したコマンドまで)。
  • ALTシフト-, :ストーリーの始めに移動します(最初に入力したコマンドまで)。

の検索履歴バッシュ

「歴史| grep "はいくつかの手順を実行する最も簡単な方法ですが、多くの状況でのその作業は理想とはかけ離れています。
  Bashには履歴検索機能があります。 たとえば、「Ctrl-r」キーボードショートカットを使用して、履歴検索が逆方向(しばしば最も新鮮な結果が表示されます)で使用されます。

たとえば、「Ctrl-r」と入力して前のコマンドの一部を入力できます。 チームの一部だけを募集する必要があります。 入力した値が不要なコマンドと一致した場合は、再度「Ctrl-r」を押すと次の結果が表示されます。

誤って目的のコマンドをスキップした場合は、「CTRL-s」の組み合わせを使用して検索の方向を変更できます。 これは、前の章で説明した履歴をナビゲートして検索する場合にも便利です。

注意:多くの端末では、 "CTRL-s"の組み合わせが端末セッションをブロックします。 つまり、検索に使用しようとすると、端末が「フリーズ」します。 セッションのロックを解除するには、「Ctrl-q」と入力します。

ほとんどの現代の端末でのセッションの一時停止と再開のこれらの機能は、以下のようにタイプすることで無効にすることができるため、必要ありません。

これを〜/ .bashrcファイルに追加して、コマンドが継続的に実行されるようにする必要があります。

これで検索の組み合わせが正しく動作します。

入力されたコマンドの部分を検索する

一般的な検索方法は、コマンドの一部を入力し、それが以前に実行されたかどうかを確認してから履歴で検索することです。

コマンドラインに既に入力されているデータを使って検索を正しく実行するには? "CTRL-a"で行の先頭にカーソルを移動し、 "CTRL-r"の履歴をコールし、 "CTRL-y"を使用して現在の行を挿入し、再度 "CTRL-r"を使用して検索を取り消します。

たとえば、Ubuntuでパッケージキャッシュを更新する必要があります。 このコマンドは既に実行されていますが、そうであるかどうかを確認するには、sudoと入力します:

この段階では、このコマンドはすでに実行されていることがわかります。 今すぐクリック:

これにより、カーソルが行の先頭に移動します。

これにより、履歴の逆順検索が行われます。 このアクションには副作用があります。現在のカーソル位置の後にあるコマンド行のすべての内容をコピーし、クリップボードに挿入します。

コマンドラインから新しくコピーされたコマンドが検索に挿入されます。

これで、指定した部分を含むコマンドを検索するために、逆履歴検索を再度実行する必要があります。

最初は、この手順はかなり混乱しているように見えますが、慣れる必要があります。 複雑なコマンドの半分が導入されたばかりの瞬間には非常に役立ち、現在は作業を完了するためにストーリーが必要です。

さらに、これらのすべてのアクションを1つにまとめることができます。

bashでの歴史の高度な使用

bashに存在する歴史を使うための基本的なテクニックを調べた。 その中で:

  • !! :最後のコマンドを出力する。
  • ! n:シリアル番号 "n"のコマンドに移動します。
  • !- n:最後のコマンドの前に "n"という番号が付けられたチームに行きます。

イベント識別子

上記の3つの組み合わせは、 イベント識別子。 実際、これは特定の基準を使って過去のチームを履歴から呼び出す方法です。

たとえば、最後の "ssh"コマンドを実行するには、次のコマンドを使用します。

このアクションは "ssh"で始まる文字列を探します。 コマンドの先頭にないシーケンスを検索するには、シーケンスの前後に "?"文字を入力します。 たとえば、最後のコマンド "apt-cache search"を繰り返すには、次のように入力する必要があります。

最後のコマンド( "!!")の出力のバリエーションを使用することもできます。 クイック検索を実行し、次のように入力して置換します。

^オリジナル^置換^

これは最後のコマンド( "!!"など)を呼び出し、 "original"の値と一致するものを探し、 "replacement"という値で置き換えます。 コマンドが実行されます。

スペルミスを修正するために必要ならば、適用するのが非常に便利です。 例えば:

cat / etc / hosst
  cat:/ etc / hosst:そのようなファイルやディレクトリはありません
  ^ホスステ^ホスト^

言葉の決定子

イベント識別子の後にコロン文字(:)を追加してから、 単語修飾子一致するコマンドの一部を選択します。

これは、チームを「単語」 - 空間で区切られた領域に分割することによって機能します。 これにより、コマンドパラメータとやりとりするための新たな機会が開かれます。

コマンド自体には0が付けられ、最初の引数は1などとなります。

たとえば、ディレクトリの内容を表示してから、次のように変更することができます。

ls / usr / share / doc / manpages
  cd !!:1

この操作が最後に実行されているコマンドで実行された場合、この組み合わせは2番目の「!」とコロンを削除することで圧縮できます。

これは同じように動作します。

最初の引数はシンボル "^"で参照でき、最後の引数は "$"です。 これらの文字は、序数ではなく、範囲を扱うときにはるかに便利です。 たとえば、前のコマンドのすべての引数を次の3つの方法で新しいものに取り出すことができます。

!!:1*
!!:1-$
!!:*

アスタリスク "*"文字は、元のコマンド以外のデータの出力を示すために使用されます。 同様に、指定された単語の後ろのすべてが含まれることを示すために、番号の後に*を付けることができます。

修飾子

呼び出された履歴行の動作に追加できる最後のものは、テキスト自体を制御するために呼び出しの動作を変更することです。 修飾子は、行末に追加の ":"の後に追加されます。

たとえば、修飾子 "h"( "head"を意味する)を使用してファイルへのパスを短縮すると、スラッシュ(/)の最後の文字へのパスが削除されます。 注意:スラッシュ文字で終わるディレクトリへのパスを短くする必要がある場合、これは正しく動作しません。

これは、ファイルを変更するときによく使用され、そのファイルに関連付けられたファイルに対して操作を実行するためにそのディレクトリに移動する必要があります。

cat / usr / share / doc / manpages / copyright

その後、ディレクトリに移動します。 これは、パラメータ文字列のコマンド "cd"で、最後にファイル名を "切り捨て"て行うことができます。

cd !!:$:h
  pwd
  / usr / share / doc / manページ

パスを短くし、修飾子 "t"( "tail"を意味する)を使用してファイル名のみを使用して、手順を逆にすることもできます。 たとえば、 "t"フラグを使用してファイル名だけを残して、最後の "cat"コマンドを検索することができます。

あなたは完全な道を離れることもでき、チームは適切に働くでしょう。 しかし時にはそうではありません。 たとえば、現在のディレクトリのいくつかのサブディレクトリにネストされたファイルを操作し、 "h"修飾子を使用してサブディレクトリを変更すると、相対パスを使用すると、このファイルへの相対パスは使用されなくなります。

もう1つの非常に有用な修飾子は "r"で、 ".xxx"という形式の末尾の接尾辞を削除します。 これは、 "tar"コマンドを使用してファイルを解凍し、そのディレクトリに移動するときに便利です。 ディレクトリ名がファイル名と同じであると仮定すると、次のようなことができます。

tar xzvf long-project-name.tgz
  cd !!:$:r

tarballがtgzの代わりにtar.gzという拡張子を使用する場合は、修飾子を2回入力するだけです:

tar xzvf long-project-name.tar.gz
  cd !!:$:r:r

同様の修飾子 "e"は、末尾の拡張子を除くすべてを削除します。

呼び出されたコマンドが見つかるだけで実行されない場合は、 "p"修飾子を使用してbashにコマンドを再度表示させることができます。

これは、ストーリーの正しい選択を確実にする必要がある場合に便利です。 さらに、この変更子は、それ以上の編集が必要な場合に備えて、選択されたコマンドを履歴に入れます。

たとえば、 "find"コマンドは以前はホームディレクトリで実行されていましたが、今はこのディレクトリ(/)から実行する必要があります。 置換が正しく実行されるかどうかを確認するには、次の方法で可能です(このコマンドの番号が119の場合)。

find〜-name "file1"#元のコマンド
  !119:0:p /!119:2 *:p
  find / -name "file1"

コマンドが正しく印刷された場合は、次のコマンドで実行できます。

コマンドで置換を実行するより簡単な方法があります:s / original / new /

例えば、上記の動作は、以下のように実行することができる。

これにより、検索パターンの最初のインスタンスが置き換えられます。 それぞれのマッチの置換を実行するには、 "g"と "s"修飾子を使用します。 たとえば、 "file1"、 "file2"、 "file3"という名前のファイルとディレクトリ "dir1"、 "dir2"、 "dir3"を作成するには、

タッチファイル1ファイル2ファイル3
  mkdir !!:*:gs / file / dir /

成果

このガイドは、履歴を使用するための基本的な概念をマスターするのに役立ちます。 もちろん、記述された関数のいくつかはまれにしか役に立ちませんが、それらについて知り、それらを使用できるようにすることも必要です。

一般に、履歴を使用すると説明されているすべての可能性は、作業を大幅にスピードアップすることができます。

   タグ:,

Linuxでは、ファイルを見つけるための非常に強力で便利なコマンド、findコマンドがあります。 それはファイルを見つけるための多くのオプションがありますが、その構文のために多くの場合初心者にとっては難しいことがあります。

findを使う簡単な例

まず、findコマンドを使用して、configという名前のコンピュータ上のファイルを検索する簡単な例を見てみましょう。 /のルートディレクトリから設定ファイルを探します。 これを行うには、十分なアクセス権を得るためにrootとしてコマンドを実行する必要があります。そうしないと、「Permission denied」メッセージが表示されます。 したがって、次のコマンドを実行してください:

/ -nameの設定を確認する-print

コマンドは、/ directory(findコマンドの最初のパラメータ)で始まり、ファイル名を画面に出力する(引数-print)、config(-name config)という名前のファイルを検索します。 私は検索が再帰的であることに注意します。つまり、検索すると、すべてのネストされたディレクトリが検索されます。 ご覧のとおり、すべてがシンプルです。 次に、コマンドの構文を検討し、主な議論のレビューに進む。

findの構文

リファレンスマニュアルで見つけることができるfindコマンドの一般的な構文はあまり単純ではないかもしれませんので、より読みやすい方法を教えてください:

[パス] [オプション] [検索条件] [ファイルに対する操作]

パス

検索パスとして、絶対パスと相対パスの両方、およびスペースで区切られたパスのリストを使用できます。

オプション

findコマンドのオプションは、 " - "文字で始まり、その後にオプションの名前が続きます。 基本的なオプションについて考えてみましょう。

検索条件

findコマンドには、複数の検索基準(テストとも呼ばれます)があります。 各基準は、真または偽のいずれかを返す特定のテスト条件です。 これは、プログラミングにおけるifステートメントの条件と比較することができます。 次のファイルを処理するプロセスでは、findコマンドは各基準を順番にチェックし、次の条件がfalseを返す場合、findコマンドは次のファイルに進みます。 findコマンドにはかなりの基準がありますが、そのうちのいくつかだけを検討します。

-atime Nファイルが最後にアクセスされたのはN日前です。
-mtime N最後のファイル変更はN日前です。
名前テンプレートパスを指定せずにファイル名(パターン名)。 常にテンプレートを引用符で囲むことをお勧めします。
- 新しい他のファイルファイルは、他のファイルより遅く変更されました。
-size [±] NファイルサイズはNブロックで、+ Nを指定した場合、ファイルサイズはN、-Nよりも大きくなります。 Nの後の記号はブロックサイズを示します。 B - Wバイト、 - - 512バイト、2バイト、K - キロバイト、M - メガバイト、G - ギガバイト。
タイプCタイプCのファイル Cの最も一般的に使用される値は、d - ディレクトリ、f - ファイルです。
-user UserNameこのファイルはUserNameという名前のユーザーに属します。

条件を使用してfindコマンドを使用する例

  見つける。 -type f -name "〜*" -print

現在のディレクトリで、名前が文字 "〜"で始まる通常のファイル(ディレクトリではない)を検索します。

見つける。 -newer file.bak -type f -print

現在のディレクトリで、file.bakより後で修正されたファイルを検索します。

演算子

条件は演算子を使用して組み合わせることができます。 以下は、優先順位を下げる順番での演算子です。

一般的なケースでは、演算子を使用する場合、優先度の順に基準がチェックされます。 カッコを使用して順序を変更できます。 かっこはバックスラッシュを使用して選択する必要があります。

演算子を使用したfindコマンドの使用例

  見つける。 \\( - name "〜*"または-name "temp *" \\)-type f -print

現在のディレクトリで、文字 "〜"または "temp"で始まり、ディレクトリではなく通常のファイル(-type f)であるファイルを検索します。

見つける。 -maxdepth 1 \\(\\( - サイズ+ 600M - および-size -1G \\)-or -name "* .MPEG" \\) - および型F

600メガバイトと1ギガバイト(-size)または名前がzakanchivayuschietsya«.MPEG»(-name)上のファイルより大きく(F -file)、通常のファイル - 現在のディレクトリ(-maxdeph 1ないサブディレクトリの処理を)見つけます。

ファイルに対するアクション

findコマンドが実行されると、見つかったファイルに対してさまざまなアクションを実行できます。 主なものを考えてみましょう。

実行可能なコマンドでは、パラメータ()を引数として使用できます。引数は現在のファイルへのパスに置き換えられます。

アクションでのfindコマンドの使用例

  見つける。 -size + 1000c-type f -ls

カレントディレクトリのファイルは、1000バイトの通常のサイズよりも大きく、コマンドlsの-dils(アクションLS)を使用して実行して下さい。

見つける。 -name "〜*" -type f -ok rm()\\;

現在のディレクトリでチルダ文字 "〜"で始まる普通のファイルを探し、各ファイルについて、(rmコマンドを実行するための)削除を尋ねます。

結論

このノートでは、非常に重要で有用なLinux findコマンドを見てきました。このコマンドは、多くの基準とテンプレートでファイルを検索する可能性を無制限に提供します。 また、コマンド(アクション)を使用することで、ファイルを検索してファイルに対する操作を実行できます。

テーマを継続する:
Android

スマートフォンのどのモデルが最も人気があり、高品質なのかを言うのは難しいです。 誰かがAndroidオペレーティングシステム上で動作する携帯電話を使用するのが好きで、誰かが...