国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

如何移動UNIX目錄

瀏覽:82日期:2024-06-21 11:54:20

有時候,您需要將整個 Unix 目錄樹復制到相同系統中其他的位置或不同的系統。有許多種不同的方法可以完成這項操作,但并非所有的方法都可以保持信息數量不變或兼容于不同的系統。本文討論了 UNIX 中各種可用的選項,以及如何最好地使用它們來完成相應的任務。

關于本系列

通常,UNIX® 管理員都擁有一套常用的輔助進程管理的關鍵實用工具、訣竅和系統。本文提供了各種用于簡化各個過程的關鍵實用工具、命令行鏈和腳本。這些工具中的一部分來自于操作系統,而大部分的訣竅則來源于長期的經驗積累和減輕系統管理員的工作壓力的要求。本系列文章主要專注于最大限度地利用各種 UNIX 環境中可用的工具,包括簡化異類環境中的管理任務的方法。

使用 cp

如果您使用 -r 命令行選項遞歸到其子目錄中,標準的 cp 命令可用于復制整個目錄樹。該選項將對非標準的文件執行未知的操作。有些 UNIX 變種和 GNU cp 工具支持 -R 選項,使用該選項可以正確地復制命名管道、鏈接和其他的文件。

對于最簡單的應用,cp 命令可以將目錄復制到具有不同名稱的新目錄(請參見清單 1)。

清單 1. cp 命令—將一個目錄復制到具有不同名稱的新目錄

$ cp -r srcdir destdir

然而,當在 cp 命令中指定源文件和目標位置時,您應該加以小心,因為其處理方式可能對結果有很大的影響。例如,假設您希望將目錄 /home/mc 復制到目錄 /export/home/mc。如果 /export/home/mc 不存在,那么清單 2 會將目錄 /home/mc 復制到 /export/home/mc。

清單 2. 在 cp 命令中指定源文件和目標位置

$ cp -r /home/mc /export/home/mc

然而,如果 /export/home/mc 已經存在,那么清單 2 會將目錄 /home/mc 復制到這個目錄中,并創建新的目錄 /export/home/mc/mc。

要將一個目錄中的內容復制到一個已有的目錄中,可以選擇源目錄中的文件,如清單 3 所示。

清單 3. 將一個目錄中的內容復制到一個已有的目錄中

$ cp -r /home/mc/* /export/home/mc

cp 工具有一個非常有用的選項,-p 命令行選項,它還可以確保維持每個文件的權限和所有權。

使用 tar

tar 命令最初用來將文件歸檔到磁帶(確切地說,是磁帶驅動器)。例如,您可以使用清單 4 中的命令,將當前目錄中的文件復制到磁帶上。

清單 4. 使用 tar 將當前目錄中的文件復制到磁帶

$ tar cf /dev/rmt0 .

可以對清單 4 進行如下分析:

c 選項創建一個新的存檔。 f 選項使用命令行中的下一個選項作為目標名稱。在這個示例中,使用第一個原始磁帶設備 (/dev/rmt0)。您還可以使用其中所有的信息創建一個 tar 文件。 . 告訴 tar 將所有的文件和目錄(以及當前目錄下所有的文件和目錄)添加到這個存檔文件中。

然而,除了可以將文件和目錄結構復制到磁帶,您還可以使用 tar 將它們復制到一個文件。更有用的是,您可以將文件復制到標準輸出,然后可以使用管道從標準輸入中提取這些文件,并將它們從一個地方復制到另一個地方。通常在系統中復制和重新創建非標準的文件類型時,tar 命令更加可靠,因為 cp 命令不支持 -R 命令行選項。

例如,清單 5 顯示了如何將文件從當前目錄復制到一個已有的目錄。

清單 5. 將文件從當前目錄復制到一個已有的目錄

$ tar cf - . | (cd DIR; tar xf - )

可以對清單 5 進行如下分析:

tar cf - . 對當前目錄中的文件創建一個新的存檔,輸出到標準輸出。 cd DIR 更改了目錄。請注意,這個目錄在進行文件復制之前應該已經存在。 tar xf - 從標準輸入中提取文件。 通過使用圓括號將上面的兩個部分括起來,可以有效地將它們作為一個而不是兩個命令來處理,并且 cd 命令在提取存檔之前進行。 兩者之間的管道 (|) 將第一個 tar 的標準輸出傳入到第二個 tar 的標準輸入,并且高效地將文件復制到一個并不存在的存檔文件,然后再從其中提取文件。

如果您顯式地指定了路徑,那么 tar 命令可以保持存檔中所包含的文件的完整路徑。清單 6 使用顯式的路徑將文件復制到存檔中,這意味著,不能將這些文件提取到其他的地方,只能返回到它們的初始位置。

清單 6. 顯式地指定路徑

$ tar cf myhome.tar /home/mc

有些 tar 變種可以去掉開頭的正斜杠,這使得您可以將文件提取到任何位置。要確??偪梢詫⑽募诺叫枰奈恢?,您應該使用清單 7 中的命令從當前目錄中添加文件。

清單 7. 從當前目錄添加文件

$ cd /home/mc$ tar cf myhome.tar .

與 cp 相比,tar 命令有一個優點,那就是通過添加 v 命令行選項以打開詳細模式,您可以在將文件從源復制到目標的過程中監視文件的傳輸。通常,最好是在提取文件的 tar 命令中使用這個選項,而不是在創建存檔的 tar 命令中使用,因為它可以確保正確地對文件進行復制,而不是證實對其進行了正確的讀?。ㄕ垍⒁娗鍐?8)。

清單 8. 添加 v 命令行選項

$ tar cf - .|(cd /tmp/mc; tar xvf -)././.bash_aliases./.bash_history./.bash_path./.bash_profile./.bash_vars./.bashrc./xmlsimple.pl./rest.xml...

請注意,如果系統的 tar 不支持長路徑名,那么它可能不支持更新的 tar 格式。GNU tar 支持新的 tar 格式,并且支持長的或者非常深的路徑名。

缺省情況下,大多數 tar 變種可以正確地復制和重新創建文件和目錄,并保持相同的所有權和權限信息,然而,如果作為 root 用戶運行,那么有些變種會改寫這個信息,并在提取文件的時候改變其所有權。您可以使用 p 選項確保保持相應的權限和所有權(請參見清單 9)。

清單 9. 使用 p 選項

$ tar cpf - .|(cd /tmp/mc; tar xvpf -)

最后,您還可以通過擴展這個命令的后半部分(請參見清單 10),創建一個新的目錄作為復制這些文件的目標。

清單 10. 創建一個新的目錄作為復制文件的目標

$ tar cpf - .|(mkdir /tmp/mc; cd /tmp/mc; tar xvpf -)

就其本身而言,tar 是一種非常有用的工具,可用于復制文件和目錄結構。然而,當您使用它通過網絡來復制文件時,才能真正體現出它的價值。在研究這種訣竅之前,先來使用另一種存檔工具 cpio,這也是一種基本的處理方法。

使用 cpio

cpio 工具類似于 tar 工具,但是除了接受指定的文件或目錄之外,您必須為它提供一個文件列表。如果您只希望復制特定的文件,那么這個工具可能更加實用。例如,要創建一個包含特定目錄的 cpio 存檔,您可以使用清單 11 中的命令。

清單 11. 創建包含特定目錄的 cpio 存檔

$ ls ./dira ./dirc |cpio -ov > diranc.cpio

這個命令的 ls 部分輸出將要復制的文件列表(在本示例中是兩個目錄中的內容)。后半部分是用于將它們復制到存檔中的 cpio 命令。對這個命令進行分析,其中包括兩個選項:

o 選項將文件復制到存檔。 v 選項在復制文件時顯示文件列表,這可用于對復制過程進行確認。

通過將 cpio 的輸出重定向到一個新的文件,可以創建實際的存檔。

上面的命令存在一定的局限,它只能復制那些顯式列出的文件。要復制整個目錄,最好的方法是使用 find 命令(請參見清單 12)。

清單 12. 使用 find 命令復制整個目錄

$ find . |cpio -ov >archive.cpio

要從 cpio 存檔中提取,可以使用 i 命令行選項。您還應該使用 d 選項確保重新創建那些在存檔中存在、而在目標結構中不存在的目錄。同時使用這兩個選項,您可以將文件從一個目錄復制到另一個目錄,如清單 13 所示。

清單 13. 同時使用 i 和 d 選項

$ find . |cpio -ov |(cd /tmp/mc; cpio -idv)../.bash_aliases./.bash_history./.bash_path./.bash_profile./.bash_vars./.bashrc./xmlsimple.pl./rest.xml46 blocks..bash_aliases.bash_history.bash_path.bash_profile.bash_vars.bashrcxmlsimple.plrest.xml46 blocks

因為在這個命令的兩個部分中都使用了詳細模式,所以可以確認創建的和提取的存檔的大小是否相同。在本示例中,這兩項操作都使用了 46 個塊。

請注意,如果目標中的文件具有相同的、或更新的修改時間,那么 cpio 不會覆蓋這些文件。

通過網絡進行復制

在 Unix 中通過網絡傳輸文件的常用方法是使用網絡文件系統 (NFS) 裝入遠程目錄,然后進行與本地目錄之間的復制。這是一種比較簡單的解決方案,但對于各種各樣的情況,它并不總是可行的或實用的。

通過網絡復制文件的最簡單的方法之一是使用 tar 或 cpio 創建存檔文件,然后可以通過網絡傳輸這個存檔文件。這種方法具有一些優點,比如可以自由選擇如何以及何時進行文件的復制,但它也有一些缺點,包括復制過程的復雜性,以及在源系統中創建存檔和將該存檔復制到目標系統時保存完整的重復文件的磁盤空間需求。

正如您所看到的,創建存檔非常簡單:

清單 14. 創建一個存檔

$ tar cf mydir.tar .

然后,您可以使用合適的方法對該文件進行復制,例如,使用 cp 和 NFS 復制該文件,或使用 FTP 或 SFTP 將該文件傳輸到遠程系統。

然而,使用存檔文件的方法并不是一種特別高效的方法。您可以通過壓縮來提高其效率。

使用壓縮

如果您使用 cpio 或 tar 創建存檔文件,并通過慢速的連接對文件進行復制(例如 WAN 或 Internet,而不是 LAN 環境),那么可以在傳輸存檔文件前對其進行壓縮處理,這樣會節省傳輸的時間??梢愿鶕璧膲嚎s級別選擇合適的壓縮格式。

使用存檔的方法非常簡單。您可以選擇在創建存檔之后對其進行壓縮,如清單 15 所示。

清單 15. 在創建存檔之后對其進行壓縮

$ tar cf mydir.tar .$ bzip2 mydir.tar

要完成這項操作,您還可以使用管道生成存檔的壓縮版本(請參見清單 16)。

清單 16. 使用管道生成存檔的壓縮版本

$ tar cf - .| bzip2 >mydir.tar.bz2

清單 16 中方法的優點是,它可以使用各種版本的 tar、cpio 或任何其他的存檔工具。它還適用于各種不同的平臺,而這些平臺中的不同變種的 tar 可能并不一定支持聯機壓縮處理。如果安裝了 GNU 版本的 tar,那么您可以使用帶 z 命令行選項的 tar 命令,這樣就可以使用 Gzip 進行壓縮處理(請參見清單 17)。

清單 17. 使用帶 z 命令行選項的 tar

$ tar zcf mydir.tar.gz .

在系統之間進行目錄復制的另一種方法是,使用清單 16 中所示的管道解決方案,但需要使用遠程 Shell 工具作為目標。

直接通過網絡進行復制

將典型的 tar 或 cpio 命令的輸出通過管道傳遞到遠程 Shell 中,如遠程 Shell (rsh) 或安全 Shell (ssh),您可以直接通過網絡進行復制。使用哪一種遠程 Shell 技術,完全取決于您的環境中可以使用的 Shell。前者 (rsh) 是一種標準的遠程 Shell 系統,它提供了基本的身份驗證安全性,但不提供加密功能,而后者 (ssh) 提供了基本的身份驗證和數據加密功能。

這兩種方法使用了相同的基本命令行結構(請參見清單 18)。

清單 18. 直接通過網絡進行復制

$ tar cf - ./*|rsh remotehost tar xf - -C /remotedir

除了在遠程系統中執行目標 tar 命令之外,這個命令類似于本地化的 tar。因為在這兩個命令之間使用了管道,所以系統能夠正常工作。

請記住,根據遠程 Shell 的配置,在遠程計算機上進行身份驗證時,您可能需要輸入密碼。ssh 可能也會使用相同的處理方法。清單 19 指定了用戶/主機的組合。

清單 19. 指定在遠程計算機上進行身份驗證所使用的用戶/主機的組合

$ tar cf - ./*|ssh user@remotehost tar xf - -C /remotedir

為了在慢速的連接上實現更好的性能,您應該使用壓縮處理,如清單 20 所示。

清單 20. 在直接通過網絡進行復制的過程中使用壓縮處理

$ tar czf - ./*|ssh user@remotehost tar xzf - -C /remotedir

rsh 和 ssh 具有比較簡單的命令行格式,這使得從遠程系統中進行復制的過程變得更加簡單。例如,rcp 與 rsh 非常接近,您可以使用清單 21 中的命令。

清單 21. 使用 rcp 復制遠程系統中的文件

$ rcp -r filename remotehost:/remotedir

您必須使用 -r 命令行選項,這樣可以對目錄進行遞歸地復制。

scp 命令非常接近于 ssh,它使用了相同的結構(請參見清單 22)。

清單 22. 使用 scp

$ scp -r filename remotehost:/remotedir

通過網絡進行同步

上面所有的解決方案都主要考慮對文件的復制,包括本地的以及通過網絡的復制。然而,它們在每次進行復制操作時,都會復制整個目錄結構,而這并不總是必需的。有時,您只需要復制那些在上次復制操作之后進行過更改的文件,從本質上說是進行同步,而不是徹底的再次復制。

如果您使用 tar 或 cpio,那么通過顯式地指定存檔中需要包含的文件,您可以實現基于時間的同步。例如,如果您使用 cron 來運行同步任務,那么您可以使用下面的命令,創建僅包括在前一天進行了更改的文件的存檔(請參見清單 23)。

清單 23. 創建僅包括在前一天進行了更改的文件的存檔

$ tar cf archive.tar `find . -mtime -1 -type f`

find 命令可以查找在前一天進行了更改的文件。我僅選擇了文件,因為如果包含目錄,那么 tar 將包含該目錄中所有的文件,這樣一來,存檔文件中將包含比所需要的更多的信息。

要實現更健壯的同步操作,您可以使用 rsync 工具,它是一種免費的軟件實用工具,可以高效地通過網絡交換文件。對于復制和同步文件,尤其是在較慢的連接中,rsync 工具可能是一種有效的方法。

總結

當您在 Unix 中復制文件和目錄樹時,無論是在相同的系統中還是在通過各種類型的網絡連接的不同系統之間,都可以選擇使用各種各樣的工具和方法。究竟使用哪一種工具,取決于實際的情況和環境。我傾向于使用 tar,因為它是我使用過的最能夠兼容于各種不同 UNIX 系統的工具。對于使用 Linux® 環境的用戶來說,scp 工具是大多數 Linux 分發版中的標準組件,它可能更加合適。

標簽: Unix系統
主站蜘蛛池模板: 超级碰碰碰视频视频在线视频 | 久久免费在线视频 | 99久久亚洲综合精品网站 | 国产精品免费观在线 | 在线精品播放 | 有码一区 | 99久久久国产精品免费播放器 | 亚洲性色视频 | 欧美成人全部免费观看1314色 | 荡女妇边被c边呻吟久久 | xxx本日| 免费一级a毛片在线播放 | 国产免费网 | 黄视频在线免费看 | 精品国产三级a在线观看 | 黄色美女视频免费看 | 千涩成人网 | 美国一级毛片片免费 | 黄网站色视频免费观看w | 草草影院第一页yycccom | 国产成人女人视频在线观看 | 国产韩国精品一区二区三区久久 | 午夜成年人网站 | 欧美ppp | 欧美一级二级三级视频 | 在线a人片免费观看国产 | 精品亚洲一区二区三区 | 欧美a在线播放 | 欧美真人毛片动作视频 | 欧美一级三级在线观看 | 美女毛片在线看 | 日韩美女大全视频在线 | 亚洲国产精品区 | 久久免费精品国产视频 | 成人欧美精品久久久久影院 | 国产高清一区二区三区 | 日韩午夜在线视频 | 国产成人综合亚洲欧美在 | 亚洲更新 | 国内精品七七久久影院 | 国产精品手机在线观看 |