検索

Linux 期待の詳細な説明

Aug 09, 2019 pm 02:22 PM
linux

Linux 期待の詳細な説明

expect はどこでも見られます

expect コマンドを初めて見たのは、私が初めてイベントに参加したときでした。当時、それは自動デプロイメント、MD5 比較、およびリリースのための本格的なオンライン ツールのセットで、社内の有能な人材がシェル スクリプトを使用して作成しました。スクリプトと多くの期待されるコマンド。私はexpectコマンドの使い方がまったく理解できなかったので、時間を見つけてexpectコマンドについてこの記事にまとめました。

推奨: [Linux ビデオ チュートリアル ]

まずは質問をしてください

現在、2 つの Linux ホスト A と B があります。 、ホスト A からホスト B に SSH 接続し、ホスト B でコマンドを実行する方法は? このプロセスを完全に自動化するにはどうすればよいですか?この方法を使用することもできます:

ssh admin@10.220.20.15 "ls"

ただし、この方法は扱いにくく、毎回パスワードを入力する必要があり、複雑なロジックやコマンドを実行することはできません。では、完全自動化を実現するにはどうすればよいでしょうか?これには、今日の記事で要約した期待が使用されます。

期待とは何ですか?

expect は、人間の介入なしにインタラクティブなタスクを自動化するために使用される無料のプログラミング ツールです。端的に言うと、expect は自動対話機能を実装するために使用されるソフトウェアのセットです。

実際の作業では、コマンド、スクリプト、またはプログラムを実行するとき、これらのコマンド、スクリプト、またはプログラムは実行を継続するために端末から特定の指示を入力する必要があり、これらの入力は手動で行う必要があります。 Expect を使用すると、プログラムのプロンプトに従ってプログラムに提供される標準入力をシミュレートできるため、自動化された対話型実行が実現します。これは期待通りです! ! !

##expect の基本##expect を使用する場合は、基本的に次の 4 つのコマンドを処理します。

#sendコマンドは文字列パラメータを受け取り、そのパラメータをプロセスに送信します。 Linux 期待の詳細な説明

expect コマンドは send コマンドの反対です。expect コマンドは通常、プロセスからのフィードバックを待つために使用されます。その後、プロセスからのフィードバックに基づいて、対応する対話型コマンドを送信します。

spawn コマンドは、新しいプロセスを開始するために使用されます。spawn 後の send コマンドと Expect コマンドは両方とも、spawn を使用して開かれたプロセスと対話します。

interact コマンドは、実際にはあまり使用されません。通常、spawn、send、expect コマンドでタスクを適切に完了できますが、特別な場合には、interact コマンドを使用する必要があります。interact コマンドは次のとおりです。主に自動化を終了し、手動操作に入るために使用されます。たとえば、spawn、send、expect コマンドを使用して ftp ログイン ホストを完了し、ファイルをダウンロードするタスクを実行しますが、ファイルのダウンロードが完了した後も ftp コマンド ラインの状態を維持できるようにしたいと考えています。後続のコマンドを手動で実行することもできますが、この場合は、interact コマンドを使用すると、このタスクを非常にうまく完了できます。

実践的なコード分析

上記は予想を要約し、特によく使用されるいくつかのコマンドについて詳しく説明します。以下は、一般的に使用されるいくつかの Expect スクリプトを通じて、expect を使用して日常のタスクを完了する方法の詳細な説明です。

#!/usr/tcl/bin/expect
set timeout 30
set host "101.200.241.109"
set username "root"
set password "123456"
spawn ssh $username@$host
expect "*password*" {send "$password\r"}
interact

これは、expect の基本的な使用法を示す、非常に単純な Expect サンプル コードです。

#!/usr/tcl/bin/expect: スクリプトを解釈するために Expect を使用します;

set timeout 30: タイムアウトを秒単位で設定します (デフォルトは 10 秒です);

set host "101.200.241.109": 変数を設定;

spawn ssh $username@$host: spawn は、expect 環境に入った後に実行できるexpect の内部コマンドです。expect がインストールされていない場合、または直接 デフォルトの SHELL で実行すると、spawn コマンドが見つかりません。その主な機能は、対話型の指示を提供するために ssh 実行プロセスにシェルを追加することです;

expect "*password*": Expect ここでも、expect の内部コマンドです。このコマンドは、最後に実行されたかどうかを判断することを意味します。出力結果に文字列 "password" が含まれている場合は、すぐに返されます。そうでない場合は、一定の時間が経過してから返されます。ここでの待ち時間は、以前に設定した 30 秒です。

send " $password\r": 対応する出力結果が一致すると、オープン ssh プロセスにパスワードが送信され、対話型アクションが実行されます。

interact: 実行完了後、対話型状態が維持され、制御はコンソールに引き継がれ、この時点で手動で操作することができます。このような文がない場合は、リモート端末に留まらず、ログイン完了後に終了します。

これは、上記の単純なスクリプトの分析です。上記の例では、expect - mode-action に非常に重要な概念が含まれています。つまり、上記の Expect "*password*" {send " $password \r"}このコードが表す意味。

モード アクション

コード Expect "*password*" {send "$password\r"} と組み合わせて、「モード アクション」について説明します。簡単に言うと、パターンが一致すると対応するアクションが実行され、パスワード文字列が一致するとパスワードが入力されます。次のようなコードも表示される場合があります:

expect {
    "password" {
        send "$password\r"
        exp_continue
    }
    eof
    {
        send "eof"
    }
}

其中exp_continue表示循环式匹配,通常匹配之后都会退出语句,但如果有exp_continue则可以不断循环匹配,输入多条命令,简化写法。

传参

很多时候,我们需要传递参数到脚本中,现在通过下面这段代码来看看如何在expect中使用参数:

#!/usr/tcl/bin/expect
if {$argc < 3} {
    puts "Usage:cmd <host> <username> <password>"
    exit 1
}
set timeout -1
set host [lindex $argv 0] 
set username [lindex $argv 1]
set password [lindex $argv 2]
spawn ssh $username@$host
expect "*password*" {send "$password\r"}
interact

在expect中,\$argc表示参数个数,而参数值存放在$argv中,比如取第一个参数就是[lindex $argv 0],以此类推。

总结

能够在工作中熟练的使用Shell脚本就可以很大程度的提高工作效率,如果再搭配上expect,那么很多工作都可以自动化进行,对工作的展开如虎添翼。如果你会Python的话,你的视野将会更加开阔,那个时候你又会“嫌弃”expect了。

以上がLinux 期待の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はjellythinkで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Linux操作:ファイル、ディレクトリ、およびアクセス許可の管理Linux操作:ファイル、ディレクトリ、およびアクセス許可の管理Apr 23, 2025 am 12:19 AM

Linuxでは、ファイルおよびディレクトリ管理ではLS、CD、MKDIR、RM、CP、MVコマンドを使用し、許可管理はCHMOD、CHOWN、およびCHGRPコマンドを使用します。 1。LS-Lなどのファイルおよびディレクトリ管理コマンドは、詳細情報、MKDIR-Pを再帰的に作成するディレクトリを再帰的に作成します。 2。CHMOD755FILEセットファイル許可、CHOWNUSERFILEファイル所有者、CHGRPGROUPFILEの変更ファイルグループなどの許可管理コマンド。これらのコマンドは、ファイルシステム構造とユーザーおよびグループシステムに基づいており、システムコールとメタデータを介して動作および制御します。

Linuxのメンテナンスモードとは何ですか?説明したLinuxのメンテナンスモードとは何ですか?説明したApr 22, 2025 am 12:06 AM

メンテナンスメモデンリンリンアスピアルブーテンビロンメント、criticalsystemmaincencetasks.itallowsadministratorstopertopertopertopersetstingtingpasswords、Repainingfilesystems、およびRecoveringfrombootfailurureSinaMinimalenvironment.

Linux:基本的な部分に深く潜りますLinux:基本的な部分に深く潜りますApr 21, 2025 am 12:03 AM

Linuxのコアコ​​ンポーネントには、カーネル、ファイルシステム、シェル、ユーザー、カーネルスペース、デバイスドライバー、パフォーマンスの最適化とベストプラクティスが含まれます。 1)カーネルは、ハードウェア、メモリ、プロセスを管理するシステムのコアです。 2)ファイルシステムはデータを整理し、Ext4、BTRFS、XFSなどの複数のタイプをサポートします。 3)シェルは、ユーザーがシステムと対話するためのコマンドセンターであり、スクリプトをサポートします。 4)システムの安定性を確保するために、ユーザースペースをカーネルスペースから分離します。 5)デバイスドライバーは、ハードウェアをオペレーティングシステムに接続します。 6)パフォーマンスの最適化には、システム構成とベストプラクティスのチューニングが含まれます。

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

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

Linux操作:メンテナンスモードを利用しますLinux操作:メンテナンスモードを利用しますApr 19, 2025 am 12:08 AM

Linuxメンテナンスモードは、Grubメニューから入力できます。特定の手順は次のとおりです。1)GRUBメニューのカーネルを選択し、「E」を押して編集し、2)「Linux」行の最後に「シングル」または「1」を追加し、3)Ctrl Xを押して開始します。メンテナンスモードは、システム修理、パスワードリセット、システムのアップグレードなどのタスクに安全な環境を提供します。

Linux:リカバリモード(およびメンテナンス)に入る方法Linux:リカバリモード(およびメンテナンス)に入る方法Apr 18, 2025 am 12:05 AM

Linux Recoveryモードを入力する手順は次のとおりです。1。システムを再起動し、特定のキーを押してGrubメニューを入力します。 2。[RecoveryMode)でオプションを選択します。 3. FSCKやrootなどの回復モードメニューで操作を選択します。リカバリモードを使用すると、シングルユーザーモードでシステムを開始し、ファイルシステムのチェックと修理を実行し、構成ファイルを編集し、システムの問題を解決するのに役立ちます。

Linuxの重要なコンポーネント:初心者向けに説明されていますLinuxの重要なコンポーネント:初心者向けに説明されていますApr 17, 2025 am 12:08 AM

Linuxのコアコ​​ンポーネントには、カーネル、ファイルシステム、シェル、および共通ツールが含まれます。 1.カーネルはハードウェアリソースを管理し、基本的なサービスを提供します。 2。ファイルシステムはデータを整理して保存します。 3.シェルは、ユーザーがシステムと対話するインターフェイスです。 4.一般的なツールは、毎日のタスクを完了するのに役立ちます。

Linux:その基本構造を見てくださいLinux:その基本構造を見てくださいApr 16, 2025 am 12:01 AM

Linuxの基本構造には、カーネル、ファイルシステム、およびシェルが含まれます。 1)カーネル管理ハードウェアリソースとUname-Rを使用してバージョンを表示します。 2)ext4ファイルシステムは、大きなファイルとログをサポートし、mkfs.ext4を使用して作成されます。 3)シェルは、BASHなどのコマンドラインインタラクションを提供し、LS-Lを使用してファイルをリストします。

See all articles

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、