scp拷貝方向:什麼是源,什麼是目標?
scp 的簡介是:
scp
$$ -1246BCpqrv $$ $$ -c cipher $$ $$ -F ssh_config $$ $$ -i identity_file $$ $$ -l limit $$ $$ -o ssh_option $$ $$ -P port $$ $$ -S program $$ $$ [user@ $$主機1:]文件1 …$$ [user@ $$主機2:]文件2
什麼是源,什麼是目標?我總是想知道複製發生在哪個方向。它是如何定義的?
Unix 命令幾乎總是(很少有例外)在目標之前有源。如果有意義的話,大多數都允許在最終目標之前使用多個來源。
這包括
scp
.
cp
某些命令(如and的 GNU 版本mv
)有一個選項(例如-t
or--target-directory=DIRECTORY
),允許您將目標放在首位 -但預設設置是標準的“目標之前的源”。這非常有用,因此您可以在使用類似的東西時將目標放在源之前find ... -exec cp -t target/ {} +
,或者您可以避免使用-I {}
withxargs
(這要慢得多,它會導致xargs
每個 arg 派生一個命令,而不是盡可能多地適合每個命令行),例如,... | xargs -0r mv -t target/
而不是... | xargs -0r -I {} mv {} target/
如果沒有上面提到的顯式覆蓋選項,“目標之前的源”幾乎是聞所未聞的 - 如此罕見以至於您完全有權認為“嗯?WTF?” 如果你遇到它。
如果您需要
scp
一次將多個文件發送到多台機器,請在 for 循環中執行,如下所示:for h in host1 host2 host3... ; do scp file1 file2 file3... "user@$h:/path/" done
或
pdcp
從 Parallel Distributed Shell使用。pdsh
為大多數 linux 發行版打包。例如
pdcp -w host1,host2,host3 file1 file2 file3 /path/to/target/
這是一個非常簡單的範例,
pdsh
有一個配置文件,您可以使用該配置文件來定義主機和具有任意組名的主機組(例如all
、webservers
、dbservers
、gpunodes
或其他名稱)。然後您可以在pdsh
orpdcp
命令中使用它們:pdsh -g all 'uname -a ; uptime' pdcp -g webservers index.html /var/www/
與
for
上面的循環不同,它不按順序執行命令或複製文件,一次一台主機。它並行執行多個命令,並根據您機器的 CPU 核心數量進行合理限制。