Ssh

可以使用 ssh 從遠端主機上刪除 rpm 包嗎?

  • November 13, 2017

大家下午好!長期潛伏者,第一次在這裡發布海報。

我正在嘗試使用腳本遠端刪除 rpm (foo)。主機太多,無法有效地手動執行此操作。

在整個環境中安裝了此 *.rpm 的多個版本。所以硬編碼名字是行不通的。之前,我的解決方案是有一個腳本,將 scp 的“removefoo.sh”發送到遠端主機,其中包含以下兩個位:

INSTALL=$(rpm -qa | grep -i foo)
rpm -e $INSTALL

這行得通……但這並不理想,因為我們希望有一個腳本“全部完成”。

顯然,將這個解決方案放在這個新腳本中會隨著腳本從管理伺服器執行而中斷,並且它將嘗試刪除它管理伺服器獲得的 $INSTALL,它甚至不執行這個 rpm…

以下沒有幫助:

ssh -q $serverIP 'rpm -qa | grep -i foo ; rpm -e'

有人有線索嗎?我在RHEL 6 和 7上,其他一切都很好(例如能夠連接到主機等)

謝謝!

使用評論中的建議yum是正確的答案,但我想解決您的問題;為什麼這不起作用?

讓我們分解你的命令;

ssh -q $serverIP 'rpm -qa | grep -i foo ; rpm -e'

這是說要rpm -qa | grep -i foo ; rpm -e在遠端主機上執行$serviceIP,對嗎?首先,它在本地有效嗎?在嘗試編排它之前,在遠端主機上的互動式 shell 中進行故障排除。

您的命令實際上是由分號連結的兩個命令。第一個rpm -qa | grep -i foo只是在系統上尋找 foo 的存在。順便說一句,您可以通過簡單地保存管道rpm -q foo。這將比列舉整個 rpm 數據庫快得多。(除非 foo 只是包名的一部分,在這種情況下,應該明確這一點並且這個答案必須改變。)

接下來,您將嘗試執行rpm -e. 如果你在你的 shell 中嘗試這個,你應該會看到錯誤;

# rpm -e
rpm: no packages given for erase

你需要告訴它刪除一些東西。您已經知道要擦除 foo 的內容,因此請在此處將 foo 包含在您的命令中rpm -e foo

最後,看起來你試圖做的只是刪除 foo 如果它已安裝。rpm -e foo如果rpm -q foo退出“真” ,則不要使用分號連結命令,而是設置條件。

rpm -q foo && rpm -e foo

例子:

[root@laptop ~]# rpm -q nmap && rpm -e nmap
nmap-7.40-1.fc25.x86_64

上面的輸出來自 rpm -q 命令。你可以壓制這個。rpm -q --quiet foo.

[root@laptop ~]# rpm -q nmap
package nmap is not installed

顯示包之後不再安裝rpm -e nmap我不必指定版本;只有包名。


**編輯:(**基於以下評論)

如果 foo 只是包名稱的一部分,並且您想刪除所有匹配的內容,您可以使用xargs. 此命令獲取一個命令的輸出並將其作為另一個命令的參數。正如您發現的那樣,您無法通過管道或連結命令到rpm -e.

rpm -qa | grep -i foo | xargs rpm -e

引用自:https://serverfault.com/questions/882134