ホームページ システムチュートリアル Linux Linux の感嘆符 (!) に関する 10 のヒント

Linux の感嘆符 (!) に関する 10 のヒント

Feb 15, 2024 pm 05:40 PM
linux Linuxチュートリアル Linuxシステム Linuxコマンド シェルスクリプト overflow 埋め込みLinux Linux を始める Linux学習

'!'Linux の記号や演算子は、履歴から取得したコマンドを変更したり、実行前のコマンドを変更したりすることで、論理否定 演算子として使用できます。次のすべてのコマンドは、bash シェルで明示的に検証されています。検証していませんが、これらのほとんどは他のシェルでは動作しません。

Linux の感嘆符 (!) に関する 10 のヒント

  1. コマンド番号を指定して履歴内のコマンドを実行します。

#「

歴史的な コマンド (以前に実行されたコマンド) からコマンドを実行できるという事実に気づいていないかもしれません。開始するには、まず「history」コマンドを実行してコマンド番号を見つけます。

# リーリー

#「

これで、history

の出力では、

history のコマンドのみが、それが表示される番号によって実行されます。 'history' コマンド出力に表示される 1551 という番号のコマンドを実行するとします。

# リーリー #「

そして、番号

1551 にリストされているコマンドを実行します。実行されたコマンドを取得するこの方法は、特に非常に長いコマンドの場合に非常に便利です。 **!** を使用して呼び出すだけです。

# 以前に実行したコマンドを最後から 2 番目のコマンド、最後から 7 番目のコマンドなどとして実行します。

    #「
  1. 以前に実行したコマンドを実行できます。実行される最後のコマンドは **-1
、最後から 2 番目のコマンドは
- という順序で実行されます。 2

、最後から 2 番目のコマンドは -2 です。7 は

-7** です。

##「

首先运行history命令以获取上次执行命令的列表。有必要运行history命令,这样您就可以确保没有类似的命令rm command > file和其他命令,只是为了确保您不会意外运行任何危险的命令。然后检查第六个最后一个命令,八个最后一个命令和第十个最后一个命令。

$ history
$ !-6
$ !-8
$ !-10
ログイン後にコピー

按数字运行上次执行的命令

  1. 将我们运行的最后一个命令的参数传递给新命令,无需重新输入

我需要列出目录 “**/home/$USER/Binary/firefox**” 的内容。

$ ls /home/$USER/Binary/firefox
ログイン後にコピー

然后我意识到我应该触发 “ls -l” 以查看哪个文件在那里可执行?所以我应该再次输入整个命令!不,我不需要。我只需要将这个新命令的最后一个参数作为:

$ ls -l !$
ログイン後にコピー

这里!$将携带在最后一个命令中传递给这个新命令的参数。

将上次执行命令的参数传递给新命令

  1. 如何使用 (!) 处理两个或多个参数

假设我在桌面上创建了一个文本文件1.txt

$ touch /home/avi/Desktop/1.txt
ログイン後にコピー

然后使用cp命令在任一侧使用完整路径将其复制到 “**/home/avi/Downloads**”。

$ cp /home/avi/Desktop/1.txt /home/avi/downloads
ログイン後にコピー

现在我们已经使用cp命令传递了两个参数。第一个是 “**/home/avi/Desktop/1.txt”,第二个是 “/home/avi/Downloads**”,让我们以不同的方式处理它们,只需执行echo [arguments]以不同方式打印两个参数。

$ echo "1st Argument is : !^"
$ echo "2nd Argument is : !cp:2"
ログイン後にコピー

注意第一个参数可以打印为“!^”,其余参数可以通过执行“![Name_of_Command]:[Number_of_argument]”.

在上面的例子中,第一个命令是 “cp”,第二个参数需要打印。因此“!cp:2”,如果任何命令说xyz使用 5 个参数运行并且您需要获得第 4 个参数,您可以使用“!xyz:4”,并根据需要使用它。所有参数都可以通过 访问“!*”

处理两个或更多参数

  1. 根据关键字执行最后一条命令我们可以根据关键字执行上次执行的命令。我们可以这样理解:
$ ls /home > /dev/null      [Command 1]
$ ls -l /home/avi/Desktop > /dev/null    [Command 2] 
$ ls -la /home/avi/Downloads > /dev/null [Command 3]
$ ls -lA /usr/bin > /dev/null    [Command 4]
ログイン後にコピー

在这里,我们使用了相同的命令**(ls),但使用了不同的开关和不同的文件夹。此外,我们已将每个命令的输出发送到 “/dev/null**”,因为我们不会处理命令的输出,控制台也保持干净。

现在根据关键字执行上次运行命令。

$ ! ls     [Command 1]
$ ! ls -l    [Command 2] 
$ ! ls -la    [Command 3]
$ ! ls -lA    [Command 4]
ログイン後にコピー

检查输出,您会惊讶地发现您只是通过ls关键字运行已执行的命令。

根据关键字运行命令

  1. 神奇的!!

您可以使用(!!).它将在当前命令中使用 alter/tweak 调用最后一个运行命令。给你看场景

最后一天我运行了一个单行脚本来获取我的私有 IP,所以我运行,

$ ip addr show | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk '{print $2}' | cut -f1 -d/
ログイン後にコピー

然后我突然发现我需要将上面脚本的输出重定向到一个文件ip.txt,那我该怎么办?我应该再次重新输入整个命令并将输出重定向到文件吗?那么一个简单的解决方案是使用UP导航键并添加'> ip.txt'将输出重定向到文件。

$ ip addr show | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk '{print $2}' | cut -f1 -d/ > ip.txt
ログイン後にコピー

UP键可以快速找到历史命令。现在考虑以下条件,下次我在单行脚本下运行时。

$ ifconfig | grep "inet addr:" | awk '{print $2}' | grep -v '127.0.0.1' | cut -f2 -d:
ログイン後にコピー

一旦我运行脚本,bash 提示符就会返回一个错误消息“bash: ifconfig: command not found”,我不难猜测我以用户身份运行此命令,而它应该以 root 身份运行。

那么有什么解决办法呢?很难登录到 root 然后再次键入整个命令!此外,上一个示例中的(向上导航键)在这里也没有出现。所以?我们需要“!!”不带引号调用,这将调用该用户的最后一个命令。

$ su -c !! root
ログイン後にコピー

这里su是切换用户,也就是 root,-c以用户身份运行特定的命令,最重要的部分!!将被命令替换,最后运行的命令将在这里替换。是的!您需要提供 root 密码。

!!主要在以下场景中使用,

当我以普通用户身份运行apt-get命令时,我通常会收到一个错误,说您无权执行。

$ apt-get upgrade && apt-get dist-upgrade
ログイン後にコピー

Opps 错误… 不要担心执行以下命令以使其成功..

$ su -c !!
$ service apache2 start
or
$ /etc/init.d/apache2 start
or
$ systemctl start apache2
ログイン後にコピー

OOPS 用户无权执行此类任务,所以我运行..

$ su -c 'service apache2 start'
or
$ su -c '/etc/init.d/apache2 start'
or
$ su -c 'systemctl start apache2'
ログイン後にコピー
  1. 运行影响除 ![FILE_NAME] 之外的所有文件的命令

!逻辑 NOT)可以用来运行所有命令的文件 / 文件扩展名,除了后面'!'

A.**从目录中删除所有文件,但名称为**2.txt的文件除外。

$ rm !(2.txt)
ログイン後にコピー

B.从文件夹中删除所有文件类型,除了扩展名为 “pdf”的文件类型。

$ $ rm !(*.pdf)
ログイン後にコピー
  1. 检查一个目录(比如 / home/avi/Tecmint)是否存在?printf 如果所述目录存在与否。

在这里,我们将使用'! -d'来验证目录是否存在,然后使用逻辑 AND 运算符(&&)来打印该目录不存在,然后使用逻辑 OR 运算符(||)来打印目录是否存在。

逻辑是,当输出[ ! -d /home/rumenz ]0 时,它将执行超出 Logical 的内容否则它将转到 Logical OR(||)并执行超出 LogicalOR 的内容

$ [ ! -d /home/rumenz ] && printf '\nno such /home/rumenz directory exist\n' || printf '\n/home/rumenz directory exist\n'
ログイン後にコピー
  1. 检查目录是否存在?如果没有退出命令。与上述条件类似,但这里如果所需目录不存在,它将退出命令。
$ [ ! -d /home/rumenz ] && exit
ログイン後にコピー
  1. 如果它不存在,则在您的主目录中创建一个目录(比如 rumenz)。脚本语言中的一种通用实现,如果所需目录不存在,它将创建一个。
[ ! -d /home/rumenz ] && mkdir /home/rumenz
ログイン後にコピー

以上がLinux の感嘆符 (!) に関する 10 のヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Linuxアーキテクチャ:5つの基本コンポーネントを発表します Linuxアーキテクチャ:5つの基本コンポーネントを発表します Apr 20, 2025 am 12:04 AM

Linuxシステムの5つの基本コンポーネントは次のとおりです。1。Kernel、2。Systemライブラリ、3。Systemユーティリティ、4。グラフィカルユーザーインターフェイス、5。アプリケーション。カーネルはハードウェアリソースを管理し、システムライブラリは事前コンパイルされた機能を提供し、システムユーティリティはシステム管理に使用され、GUIは視覚的な相互作用を提供し、アプリケーションはこれらのコンポーネントを使用して機能を実装します。

GITの倉庫アドレスを確認する方法 GITの倉庫アドレスを確認する方法 Apr 17, 2025 pm 01:54 PM

gitリポジトリアドレスを表示するには、次の手順を実行します。1。コマンドラインを開き、リポジトリディレクトリに移動します。 2。「git remote -v」コマンドを実行します。 3.出力と対応するアドレスでリポジトリ名を表示します。

VSCODE前の次のショートカットキー VSCODE前の次のショートカットキー Apr 15, 2025 pm 10:51 PM

VSコードワンステップ/次のステップショートカットキー使用法:ワンステップ(後方):Windows/Linux:Ctrl←; macOS:CMD←次のステップ(フォワード):Windows/Linux:Ctrl→; macOS:CMD→

Linuxの主な目的は何ですか? Linuxの主な目的は何ですか? Apr 16, 2025 am 12:19 AM

Linuxの主な用途には、1。Serverオペレーティングシステム、2。EmbeddedSystem、3。Desktopオペレーティングシステム、4。開発およびテスト環境。 Linuxはこれらの分野で優れており、安定性、セキュリティ、効率的な開発ツールを提供します。

コードを書いた後に崇高に実行する方法 コードを書いた後に崇高に実行する方法 Apr 16, 2025 am 08:51 AM

Sublimeでコードを実行するには6つの方法があります。ホットキー、メニュー、ビルドシステム、コマンドライン、デフォルトビルドシステムの設定、カスタムビルドコマンド、プロジェクト/ファイルを右クリックして個々のファイル/プロジェクトを実行します。ビルドシステムの可用性は、崇高なテキストのインストールに依存します。

Apr 16, 2025 pm 07:39 PM

NotePadはJavaコードを直接実行することはできませんが、他のツールを使用することで実現できます。コマンドラインコンパイラ(Javac)を使用してByteCodeファイル(filename.class)を生成します。 Javaインタープリター(Java)を使用して、バイトコードを解釈し、コードを実行し、結果を出力します。

Laravelインストールコード Laravelインストールコード Apr 18, 2025 pm 12:30 PM

Laravelをインストールするには、これらの手順を順番に進みます。コンポーザー(MacOS/LinuxとWindows用)インストールLaravelインストーラーをインストールします。

vscodeの使用方法 vscodeの使用方法 Apr 15, 2025 pm 11:21 PM

Visual Studio Code(VSCODE)は、Microsoftが開発したクロスプラットフォーム、オープンソース、および無料のコードエディターです。軽量、スケーラビリティ、および幅広いプログラミング言語のサポートで知られています。 VSCODEをインストールするには、公式Webサイトにアクセスして、インストーラーをダウンロードして実行してください。 VSCODEを使用する場合、新しいプロジェクトを作成し、コードを編集し、コードをデバッグし、プロジェクトをナビゲートし、VSCODEを展開し、設定を管理できます。 VSCODEは、Windows、MacOS、Linuxで利用でき、複数のプログラミング言語をサポートし、マーケットプレイスを通じてさまざまな拡張機能を提供します。その利点には、軽量、スケーラビリティ、広範な言語サポート、豊富な機能とバージョンが含まれます

See all articles