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

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

對話 UNIX,第 5 部分: 操縱數據與文件

瀏覽:8日期:2024-06-11 18:14:33

近些年來,計算機硬件變得非常的便宜。每 GB 的硬盤空間只需要 0.50 美元,一臺 19 英寸的平板顯示器售價還不到 200 美元,一臺可以運行 Unix® 的便攜式電腦售價還不到 1000 美元。即使是專門的服務器硬件也不是很昂貴。

價格如此的便宜,使得一個中型或大型的組織可以為不同的任務采用單獨的硬件設備。而且,只需要將計算機連接到網絡、將磁盤映像復制到一臺普通的計算機并重新啟動,就可以輕松地擴展計算能力。當然,沒有免費的午餐。每臺計算機都需要電能、空調以及關心和愛護。

在管理大量的計算機時最常見的問題之一是,如何保持這些系統最新和一致。在有些情況下,您希望在所有的地方都部署某個應用程序的相同版本,以免不一致的特性讓用戶感到困惑?;蛘?,作為另一個示例,您可能希望在用于相同目的的不同服務器中安裝相同的操作系統。具有可預測性是很有好處的。

即使您只擁有一臺便攜式計算機和一臺臺式計算機,保持這兩臺計算機之間的同步也可能是一項艱巨的任務。今天,您正在使用便攜式計算機進行工作。而昨天,您可能使用臺式計算機對某些內容進行了修改。您可能在這兩天中都向中央文件服務器上傳或從中下載了一些文件。隨著數據的上傳和下載,很快您就會被什么數據放在什么地方給弄糊涂。

在本系列的第 5 部分中,讓我們來討論一些有價值的技術,它們可以幫助您控制文件數目急劇增加的局面。

壓縮和轉發

很顯然,要在多臺不同的計算機之間維護數據的一致性,最簡單的方法是隨身攜帶您的文件(電子表格、數據庫、文本文件,等等)。如果您可以直接接觸到所使用的每臺計算機,那么您可以攜帶一個便攜式磁盤、CD-RW 或大容量的便攜閃存,并在需要使用這些文件時插入存儲設備。

然而,如果您所使用的計算機是遠程的或無法直接接觸到的,假設在愛達荷州 Boise 的機房中,無法直接連接外部設備。相反,您可以為您的(一些或所有的)文件建立存檔,連接到局域網 (LAN) 或廣域網 (WAN) 中,將存檔復制到目標,然后恢復這些文件以便繼續工作(而且,您可以使用存檔作為簡單的備份,以便在出現災難的情況下保護您的文件,比如將計算機忘在出租車中)。

在 Unix 系統中,可靠的實用程序 tar 可以用來簡化構建存檔的工作。tar 實用程序將一個或多個文件和目錄打包為單個文件,并保持原始文件的大小、擁有者、權限、文件類型及其在文件系統層次結構中的位置。tar 實用程序將您的文件完整地記錄到磁帶中,tar 是磁帶存檔程序 (tape archiver) 的首字母縮寫。

例如,假設您在一個目錄中放入了各種各樣的文件,如清單 1 所示。

清單 1. 文件目錄

$ cd stuff$ ls -lR.:drwxr-xr-x 2 mstreicher mstreicher  4096 Oct 12 19:11 CSS-rwxr-xr-x 1 mstreicher mstreicher 91 Aug 17 2005 demo.rb-rw-r--r-- 1 mstreicher mstreicher 111563 Oct 12 19:10 tech.pdf./css:total 16-rw-r--r-- 1 mstreicher mstreicher  711 Mar 25 2006 style.css-rw-r--r-- 1 mstreicher mstreicher 11353 Apr 10 2006 valid.css

要為這兩個文件和一個目錄創建存檔,可以運行下面的 tar 命令:

$ tar --create --verbose --gzip --file archive.tgz *css/css/style.csscss/valid.cssdemo.rbtech.pdf

--create 選項告訴 tar 創建一個存檔;--verbose 選項為 tar 所處理的文件生成一個列表;--gzip 選項啟用 gzip 方式的壓縮,這將縮小該存檔的大小;而 --file archive.tgz 指定了存檔的名稱。

Shell 將星號 (*) 解釋為“任何文件,所以對其展開后為兩個文件和一個目錄。從上面的輸出中您可以看出,tar 對 CSS 目錄進行了存檔,同時遞歸地對該目錄中的內容進行了存檔。

在運行 tar 命令之后,當前目錄中包含了一個新的文件 archive.tgz:

$ ls -l archive.tgz-rw-r--r-- 1 mstreicher mstreicher 105470 Oct 13 17:16 archive.tgz

現在,您可以將 archive.tgz 復制到另一臺計算機,并在遠程計算機上使用 tar 解壓存檔的內容。事實上,用來恢復文件的命令行與前面使用的命令行基本相同。要對這個存檔進行解壓,可以使用:

$ tar --extract --verbose --gunzip --preserve-permissions --file archive.tgz

這個 tar 命令將解壓 archive.tgz 壓縮文件中的內容。--extract 選項與 --create 選項正好相反;--gunzip 與 --gzip 相反,而 --preserve-permissions 將重新創建原始文件的權限。

在運行了這個命令之后,完整地恢復了所保存的文件,并保持了原來的時間戳、權限和文件名。同時,重新創建了名為 css 的目錄,并將其中的內容壓縮到了最初的位置。

tar 實用程序具有許多選項:--create、--extract 和 --list(列出 .tar 文件的內容而不展開該文件)。其他的選項(如 --gzip 和 --preserve-permissions)用來控制 tar 如何創建存檔。有關在您的 Unix 版本中每個選項更詳細的信息和正確的語法,請參閱 tar 的 man 頁面。

創建存檔、將其復制到目標、然后再解壓縮,這種方法非常有用,但是可能比較費事。另外,如果存檔非常大,您可能無法同時存儲存檔和解壓后的文件。如果源和目標計算機之間通過 LAN 或 WAN 連接,那么為了節省時間,您可以組合使用 Secure Shell (SSH) 和 tar 命令,以將文件存檔、復制和解壓合并為一步操作。下面是完成這項工作的命令:

$ (cd ~/stuff; tar --create --gzip --file - *) | ssh destination tar --extract --gunzip --file --verbose -C stuff

該命令進行了很多操作,所以讓我們對其進行分解:

命令中帶圓括號的部分稱為subshell。subshell 中進行的更改,例如更改目錄,不會影響到您的命令行,但是它將影響 subshell 的執行環境。因此,第一個短語 (cd ~/stuff; tar --create --gzip --file - *) 更改到目錄 ~/stuff,然后運行 tar。因為 subshell 后面跟著管道,所以 subshell 的所有輸出都通過管道傳輸給了下一個命令。

與許多其他的 Unix 實用程序一樣,tar 可以分別向標準輸出 (stdout) 寫入、從標準輸入 (stdin) 讀取。stdout 和 stdin 通常表示為連字符 (-)。所以,短語 --create --file - 在 stdout 上創建存檔。

管道 (|) 將 subshell 的所有輸出通過管道傳輸給 ssh。這樣可以有效地將所有的輸出從源計算機傳輸到目標計算機。

最后,目標計算機運行自己的 tar 實例對存檔進行解壓。然而,這里的 --extract --file - 從標準輸入 讀取存檔。-C 選項強迫接收方 的 tar 在開始進行任何處理之前,將目錄更改到 stuff(在遠程 home 目錄中)。最后的結果是,將通過 ssh 傳輸的存檔解壓到 ~/stuff 中。

通過這一個(有些冗長的)命令,您創建了、傳輸并解壓縮了存檔。順便提一下,對該命令行中內容的順序稍作顛倒,您就可以從遠程計算機中獲取創建的存檔并解壓到本地計算機。下面的命令可以實現這項任務,在本地計算機中運行:

$ ssh destination cat archive.tgz | (cd ~/stuff; tar --extract --gunzip --file -)

在遠程計算機上打開遠程存檔,將 cat 產生的字節流發送到 subshell,這個 subshell 首先更改目錄,然后對存檔進行解壓縮。(為 tar 命令添加 -C ~/stuff 可以起到與前面相同的作用;這個示例顯示了 subshell 也可以使用輸入。)

您可以使用相同的方法在同一臺計算機上對文件進行鏡像。嘗試下面的命令:

tar --create --file - * | tar -C /path/to/Directory --extract --file -

通過復制方式存檔

tar 實用程序加上 ssh,可以很方便地將文件從一臺計算機傳輸到另一臺計算機。tar 實用程序創建存檔,而 ssh 則實現該存檔的安全傳輸。

另一種方法是使用 SSH 固有的能力將文件從一臺計算機傳輸到另一臺計算機。sftp 是 SSH 的另一種特征,它提供了文件傳輸協議 (FTP) 的所有特性,并且在傳輸的過程中對文件數據進行保護。(通常,不建議使用 FTP,因為它不是很安全,然而公共的 FTP 站點是個例外。)

如果您曾經使用過 FTP,sftp 實際上與其相同。只需輸入 sftp destination 以連接到名為 destination 的遠程計算機,然后運行 FTP 命令,如 cd、lcd、mput 和 mget 以便對文件進行雙向移動。

在兩臺計算機之間傳輸文件的另一種方法是使用 scp,即安全復制 (secure copy)。顧名思義,scp 的工作方式與普通的 cp 非常相似,它可以用來將文件從一個地方復制到另一個地方,可以在同一臺計算機上或兩臺不同的計算機之間。

例如,如果您希望在本地計算機中將一些文件和目錄復制到另一個目錄,您可以運行與清單 2 中所示類似的代碼。

清單 2. 在兩臺計算機之間復制文件

$ ls -lFdrwxr-xr-x 2 mstreicher mstreicher  4096 Oct 12 19:11 CSS/-rwxr-xr-x 1 mstreicher mstreicher 91 Aug 17 2005 demo.rb*-rw-r--r-- 1 mstreicher mstreicher 111563 Oct 12 19:10 tech.pdf$ cp -pr * /home/joe/stuff$ ls -lF /home/joe/stuffdrwxr-xr-x 2 mstreicher mstreicher  4096 Oct 12 19:11 css/-rwxr-xr-x 1 mstreicher mstreicher 91 Aug 17 2005 demo.rb*-rw-r--r-- 1 mstreicher mstreicher 111563 Oct 12 19:10 tech.pdf

在這個示例中,cp -pr 遞歸地將所有的文件和目錄復制到 /home/joe/stuff。-r 表示遞歸;-p 表示保持該文件的時間戳。

您可以使用 scp 完成相同的工作(即在本地進行復制):

$ scp -pr * /home/joe/stuff

但如果您指定了遠程系統,那么 scp 可以通過網絡復制文件:

$ scp -pr * destination:/home/joe/stuff

假定目標計算機中存在 /home/joe/stuff 目錄,并且對您來說是可寫的,那么這兩個文件和一個目錄將完整地復制到遠程計算機。與 cp 一樣,scp 使用 -p 表示保持文件的時間戳,-r 表示遞歸。

scp 很容易使用,特別是當建立了私-公鑰對時,可以避免在每次執行 ssh/scp/sftp 操作時輸入密碼。

然而對于 scp,有一個特殊的問題需要注意。假定您在自己的 home 目錄中有一個名為 doc 的目錄,并且您希望將其復制到遠程系統。而且,您希望當文件或目錄具有相同名稱時,使用 ~/doc 中的內容替換遠程 doc 目錄中的內容。需要使用的命令應該與下面所示類似:

$ scp -pr ~/doc destination:/path/to/doc

請注意,目標計算機上的目錄沒有尾部的斜杠 (/)。scp 將這個路徑解釋為“將 ~/doc 目錄中的內容復制到目標計算機的 /path/to/doc 目錄。與 cp 一樣,與本地文件和目錄具有相同名稱的遠程文件和目錄將被覆蓋,而遠程系統中所特有的文件將保持不變。

然而,如果您添加上尾部的斜杠,如下所示:

$ scp -pr ~/doc destination:/path/to/doc/

scp 將后面的這個路徑解釋為“將 ~/doc 目錄復制到 /path/to/doc/ 目錄。所以,將本地 doc 目錄復制到遠程目錄中,而不是覆蓋遠程目錄的內容。

尾部的斜杠并不是一個錯誤。有時您可能希望使用它,而有時您可能不希望使用它,這取決于實際情況。

保持同步

scp 非常有用,因為它與 cp 非常接近。tar 和 ssh 稍微復雜一點,但它們可以保持文件的元數據,如擁有者和權限。

但是 tar 和 scp 都無法對本地和遠程目錄中的內容進行同步。例如,如果您在本地系統中更改了一個文件,并在遠程系統中更改了另一個文件,那么為了建立工作鏡像,您不得不運行兩次 scp 命令。現在可以想象一下,如果您更改了大量的文件,并且其中許多具有相同的名稱,很快地,您將會發現同步工作變得非常復雜。

幸運的是,有一個名為 rsync 的神奇的實用程序,它可以對文件集進行同步。然而更有價值的是,rsync 僅對那些更改過的數據進行傳輸,這樣可以使得傳輸的數據量最小化。

與 tar 一樣,您可以將 rsync 與 ssh 組合使用,以連接到遠程系統并對本地和遠程的文件集合進行同步。與 scp 一樣,您可以使用 rsync 在本地進行文件復制。您還可以使用 rsync 列舉文件。

其最大的優點在于,rsync 具有各種選項,要使得一個目錄成為另一個目錄真正的鏡像,可以使用相應的選項刪除原始目錄中不存在的那些文件。讓我們來看一些示例:

$ rsync -e ssh --times *.txt destination:

這個命令將當前工作目錄中所有的文本文件復制到您在名為 destination 的計算機上的 home 目錄中。-times 選項保持每個文件的訪問權限、創建和最后修改時間。

$ rsync -e ssh --times --perms --recursive --delete doc destination:

這個變化的 rsync 命令在目標計算機上您的 home 目錄中創建本地 doc 目錄的鏡像。同時保持文件的時間和權限,并且刪除外來的文件(即,在本地目錄中不存在的遠程目錄中的文件)。

因為 rsync 可能執行一些重要的更改,所以您可能希望為該命令行添加 --dry-run 選項,以便預覽 rsync 計劃完成哪些操作。--dry-run 并不進行任何更改,它僅僅顯示將要執行的操作,如下面的清單 3 所示。

清單 3. 預覽 rsync 將要執行的操作

$ rsync -e ssh --dry-run --times --perms --recursive --delete bin destination:building file list ... donebin/skipping non-regular file "bin/HTML.pl"skipping non-regular file "bin/Quark.pl"bin/Responses/bin/Responses/DBI.pmbin/Responses/Response.pmskipping non-regular file "bin/XML.pl"bin/backupdca.shbin/lib/bin/report.plbin/report.txtsent 724 bytes received 108 bytes 554.67 bytes/sectotal size is 168879 speedup is 202.98

rsync 具有許多選項:

-a 是非常有用的選項,因為它是 --group --owner --perms --times --devices --links --recursive 的縮寫。--devices 重新創建設備文件,而 --links 將符號鏈接復制為符號鏈接,而不是復制符號鏈接所指向的內容。

--update 可以防止 rsync 覆蓋較新的文件。如果遠程系統具有比本地系統較新的文件,那么將會保留遠程系統中的這個文件。

可以嘗試使用 --verbose 選項,以便在 rsync 命令執行的過程中進行觀察。

同樣的,有關 rsync 的更多使用技巧,請閱讀 man 頁面。它具有一種重要的特性,即您可以定義需要包括和排除的文件。

數據無處不在

Unix 已在網絡環境中使用了 20 多年。其間,硬件發生了很大的變化,而大部分軟件則保持不變,這為用戶和系統管理員帶來了困難。最大的問題之一是,隨著磁盤的容量變得越來越大,要想跟蹤所有的數據更加困難。這些實用程序,如 tar、sftp/scp 和 rsync 可以用來完成各種磁盤操作。

本系列的第 6 部分將討論自動化方面的內容,這是另一種節省時間和精力并減少人工錯誤的方法。

標簽: Unix系統
相關文章:
主站蜘蛛池模板: 成人在线免费看 | 亚洲视频日韩 | 欧美亚洲一区二区三区在线 | 深夜福利网站 | 欧美视频一 | 一级毛片视频 | 美女网站免费观看视频 | 亚洲一区欧美一区 | 精品久久久久久久久中文字幕 | 黄色作爱| 亚洲在线网 | 亚洲国产一区在线二区三区 | 蝴蝶成人世界第八影院 | 国产精品国内免费一区二区三区 | 国产精品一区在线免费观看 | 国产美女视频黄a视频全免费网站 | 18视频在线观看 | 成人三级视频 | 草草草在线观看 | 国产午夜永久福利视频在线观看 | 久久久久爽亚洲精品 | 91av福利| 久久精品视频5 | 玖玖啪 | 欧美成人私人视频88在线观看 | 国产真实女人一级毛片 | 久久综合九色综合欧洲色 | 国产精品亚洲精品日韩已满 | 手机国产日韩高清免费看片 | 中文字幕一区在线 | 经典香港一级a毛片免费看 精品400部自拍视频在线播放 | 色综合久久综合 | 欧美性色一级在线观看 | 精品爱爱 | 亚洲国产第一 | 欧美成人高清在线视频大全 | 国产一级生活片 | 亚洲欧美一区二区三区四区 | 欧美性色欧美a在线播放 | 一区二区三区在线播放 | 色日韩在线 |