Linux における「!」の知られざる使用法のまとめ

Linux における「!」の知られざる使用法のまとめ

序文

実際、Linux では、控えめな「!」が驚くほど多くの用途で使用されています。この記事では、「!」の魔法的な使い方について詳しく説明します。詳しい紹介を見てみましょう。

前のコマンドを実行する

たとえば、前のコマンドを実行した後、次の方法を使用して前のコマンドを再度実行できます。

$ whereis bash #コマンドbashを実行: /bin/bash /etc/bash.bashrc /usr/share/man/man1/bash.1.gz
$ !! # 前のコマンドをもう一度実行します。bash
bash: /bin/bash /etc/bash.bashrc /usr/share/man/man1/bash.1.gz

!! は最後に実行されたコマンドを表します。ご覧のとおり、感嘆符を 2 つ入力すると、前のコマンドが表示され、同時に実行されます。もちろん、このタスクを実行するには、通常は「UP」キーを使用することを考えます。しかし、以前のコマンド展開に基づくと、!! の方が便利になります。
たとえば、ファイルを表示したいが、さらに入力し忘れたとします。

$ /opt/user/test.txt #さらに入力するのを忘れました
$以上!! #これならもっと早くないですか?

使ってみてください!!もっと便利じゃないですか?

前のコマンドの最初または最後の引数を使用してコマンドを実行します。

前のコマンドの最後のパラメータを使用する

たとえば、ls を使用してパラメーターなしでディレクトリの内容を一覧表示したが、長いパラメーターを入力せずに -al パラメーターを使用して再度実行したい場合は、次の方法を使用できます。

$ ls /proc/1/task/1/net/tcp
/proc/1/タスク/1/net/tc
$ ls -al !$
ls -al /proc/1/task/1/net/tcp
-r--r--r-- 1 ルート ルート 0 12月22日 17:30 /proc/1/task/1/net/tcp

ここで、!$ は前のコマンドの最後のパラメータを表します。

前のコマンドの最初のパラメータを使用する

前のコマンドの最初のパラメータを使用するには、!^ を使用します。例:

$ ls -al !^

最後のパラメータを削除し、前のコマンドを実行します

最後のパラメータなしで前のコマンドを実行する場合:

$ ls -al dir # dir は非常に長い文字列であると想定します $ !:-
ls -al

どのようなシナリオで使用される可能性がありますか?たとえば、前のコマンドの最後のパラメータが長い文字列で、それを使用せず、バックスペース キーで削除するのに時間がかかる場合は、上記の方法を使用できます。

前のコマンドのすべてのパラメータを使用する

先ほど、前のコマンドの最後のパラメータを使用することを説明しました。最後のパラメータではない場合はどうなるでしょうか?とても簡単です。!* を使用するだけです。たとえば、find コマンドの入力を間違えて修正したい場合、次のようにします。

$ fin -name "test.zip" #ここでの検索語は間違っています。
$ 見つけてください!*
./ -name "test.zip" を検索します
./workspaces/shell/find/test.zip
./workspaces/shell/テスト.zip

前のコマンドで指定したパラメータを使用する

読者の中には、パラメータの 1 つだけを使用したい場合はどうすればよいのかと疑問に思う人もいるかもしれません。 ![コマンド名]:[パラメータ番号]のルールに従ってください。例えば:

$ cp -rf dira dirb/ #diraをdirbにコピー
$ ls -l !cp:2 #diraの内容を表示 ls -l dira
合計 0
-rw-rw-r-- 1 hyb hyb 0 12月22日 17:45 テストファイル

前のコマンドのパラメータが非常に長く、途中でパラメータを使用する必要がある場合、その効果はより顕著になります。

履歴内のコマンドを実行する

履歴コマンドを使用して、以前に実行したコマンドを表示できることは誰もが知っていますが、履歴内のコマンドを再度実行するにはどうすればよいでしょうか。 「UP」キーを使用して表示することもできますが、履歴コマンドが非常に長い場合は、あまり便利ではありません。このようなときは、「!」が便利です。

$ 履歴
(ここではこれ以上の内容を省略します)
2043 ./dira/testfile をタッチ
 2044 cp -rf dira dirb/
 2045 ls -al dira
 2046 ls -l ディラ
 2047 ls -al dira
 2048 ls -l ディラ
 2049 ls -al dira
 2050 ls -l ディラ
 2051年の歴史

history コマンドでは、以前に実行されたコマンドを表示でき、その前に値も表示されることがわかります。前述の cp -rf dira dirb/ コマンドを実行する場合、実際には次のように実行できます。

$ !2044 #2044 は実行された n 番目のコマンドです cp -rf dira dirb/

つまり、履歴コマンドは![履歴コマンド値]を通じて実行されます。

もちろん、最後から 2 番目のコマンドを実行したい場合は、次の方法があります。

$ !-2 #感嘆符の後には負の数が続き、負の数は項目の最後の数を表します

キーワードで履歴コマンドを実行する

!キーワードに基づいてコマンドを実行できます。

キーワードで始まる前のコマンドを実行します

たとえば、前の find コマンドを実行します。

$ !find #findで始まる前のコマンドを実行します

キーワードを含む前のコマンドを実行する

別の例として、name を含む前のコマンドを実行します。

$ find ./ -name "テスト"
。/テスト
./検索/テスト
$ !?名前?
./ -name "テスト" を検索します
。/テスト
./検索/テスト

前のコマンドのパラメータを置き換えます

例えば:

$ find ./ -name "古い*" -a -name "*.zip"

このコマンドで古いものを新しいものに置き換える必要がある場合:

$ !!:gs/古い/新しい

論理否定の役割

これは最もよく使われる機能で、たとえば、cfg で終わるファイルを除くすべてのファイルを削除します。

rm !(*.cfg) # 削除するときは注意してください

ここでは詳細には触れません。

要約する

感嘆符「!」の効果は、確かに時々驚くべきものがあります。先ほども触れたばかりかもしれませんが、他の文字と組み合わせて特定の意味の特定の用途を表しますが、実際には、組み合わせたり拡張したりして、より素晴らしい用途を発見することができます。これについてはここでは詳しく説明しません。他に何か良い発見はありましたか?ぜひメッセージをお寄せください!

さて、以上がこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM をご愛顧いただきありがとうございます。

この記事の著者: この記事のリンクを見る: https://www.yanbinghu.com/2018/12/22/40915.html
著作権に関する声明: この記事はオリジナル記事であり、著作権は Shouwang に帰属し、CC BY-NC-SA 3.0 ライセンス契約を採用しています。転載をご希望の場合はご連絡ください!

以下もご興味があるかもしれません:
  • Linux での感嘆符コマンド (!) の使用の概要

<<:  React Native の基本原則の深い理解 (Bridge of React Native)

>>:  Mysql 5.6ではユーザー名とパスワードを変更するメソッドが追加されました

推薦する

MYSQL ロック解除とロックテーブルの紹介

MySQL ロックの概要他のデータベースと比較すると、MySQL のロック メカニズムは比較的単純で...

JS ES の新機能: 拡張演算子の紹介

1. スプレッド演算子スプレッド演算子は 3 つのドット ... で、複数の引数 (関数呼び出しなど...

ウェブページのフッターで注意すべきことのまとめ

たくさんのリンクおそらく、このようなサイトをたくさん見たことがあるでしょう。ページの下部に 50 個...

ウェブページのFOUC問題によるウェブページの混乱の解決策

FOUC は Flash of Unstyled Content の略で、FOUC と略されます。簡...

mysql における mydumper と mysqldump の比較

いくつかのテーブルまたは単一のデータベースのみをバックアップする場合は、innobackup よりも...

Dockerプライベートライブラリの実装

プライベート Docker レジストリのインストールとデプロイは、Docker テクノロジーを導入、...

シェルスクリプトは、Docker の半自動コンパイル、パッケージ化、およびリリースアプリケーション操作を構築します。

Docker 公開方法は、DevOps (送信、コンパイル、パッケージ化、リリースなどの一連のイベ...

MySQLが内部一時テーブルを使用するタイミングについて簡単に説明します。

組合執行分析を簡単にするために、次のSQLを例として使用します。 テーブル t1 を作成します ( ...

Linuxで静的ネットワーク接続を構成する方法

Linux システムのネットワーク接続を構成するのは難しい場合があります。幸いなことに、多くの新しい...

JSON.stringify の簡易版の実装とその 6 つの主要機能の詳細な説明

目次序文JSON.stringify の 6 つの機能特集1特集2特集3特集4特集5特集6手動で文字...

5つのCSSスクロール天井実装方法の比較(パフォーマンス向上版)

改訂版のプレビューこの記事は 3 日前に書かれたものです。先輩の同僚から改訂の提案をいくつかいただき...

JavaScriptのURLオブジェクトとは何かについて話しましょう

目次概要ハッシュプロパティホストプロパティホスト名属性Href属性起源のプロパティユーザー名とパスワ...

Vue+ElementUI Treeの使い方

Vue+ElementUI Treeの使い方は参考までに。具体的な内容は以下のとおりです。 フロント...

MySQL が起動直後にシャットダウンする問題 (ibdata1 ファイルの破損が原因) に対する完璧な解決策

コンピュータ ルームのサーバー上の mysql がしばらく実行されていたのですが、突然、再起動しても...

クールなIoT大画面機能を実現するHTML+VUEページング

効果デモ.html <html> <ヘッド> <メタ文字セット=&qu...