近年来,计算机硬件已经变得非常便宜。 一千兆字节的硬盘空间价格为0.50美元,一台19英寸的平板显示器价格不到200美元,而能够运行UNIX®的笔记本电脑的价格不到1000美元。 甚至专门的服务器硬件也作为商品定价。
以如此低,低的价格,对于中型或大型组织而言,将单个硬件专用于独特的任务是相当实惠的。 此外,扩展计算能力可以很容易,例如将计算机连接到网络,将磁盘映像复制到新的白盒 (通用计算机)并重新启动。 当然,没有免费的午餐。 每台计算机都需要节食健康的电力,凉爽的空气以及爱与关怀。
管理大量计算机的最常见问题之一是如何使许多系统保持最新和一致。 在某些情况下,您希望在各处部署相同版本的应用程序,以免用户因不一致的特性而感到困惑。 或者,作为另一个示例,您可能希望每台服务器上具有相同目的的相同操作系统。 可预测性好。
即使您只有一台笔记本电脑和一台台式计算机,仅使这两台计算机保持同步也是一项艰巨的任务。 今天,您正在旅途中使用便携式计算机。 昨天,您从桌面进行了修补。 这两天,也许您都是从中央文件服务器上载或下载文件的。 随着数据的传入和传出,您很快就会对所在位置感到困惑。
在本系列的第5部分中,让我们看一些可以帮助控制文件爆炸的技术。
脱皮并转发
显然,在多台计算机上维护一致数据的最简单方法是将文件(电子表格,数据库,文本文件等)随身携带。 如果您可以对使用的每台计算机进行物理访问,则可以携带便携式磁盘,CD-RW或大型闪存钥匙串,并在需要文件时仅插入存储设备即可。
但是,如果您使用的机器是远程的或无法访问的,例如在爱达荷州博伊西的公司机房中,则无法连接外围设备。 相反,您可以为(部分或全部)文件创建档案,连接到局域网(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.css
css/valid.css
demo.rb
tech.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 tarball的内容。 --extract
选项与--create
选项相反; --gunzip
与--gzip
,而--preserve-permissions
重新创建原始文件的权限。
运行此命令后,保存的文件将恢复原样,并保留时间戳,权限和文件名。 此外,将重新创建名为css的目录,并在其中提取其内容。
tar
实用程序具有多个选项:-- --create
,-- --extract
和--list
(用于对.tar文件进行编录而不对其进行扩展)。 其他选项(例如--gzip
和--preserve-permissions
)控制tar
创建存档的方式。 有关更多详细信息和每个选项的正确语法,请参见您的UNIX版本的tar
手册页。
创建档案,将其复制到目标位置,然后将其提取是有用的,但是可能会很费力。 此外,如果存档非常大,则可能无法同时存储存档及其扩展文件。 为了节省时间,并且如果源计算机和目标计算机通过LAN或WAN连接,则可以将Secure Shell,SSH和tar
组合在一起,一口气归档,复制和提取文件。 这是如何做:
$ (cd ~/stuff; tar --create --gzip --file - *) | \
ssh destination tar --extract --gunzip --file --verbose -C stuff
该命令中发生了很多事情,因此让我们分解一下:
- 括号中的一系列命令称为子外壳。 在子外壳中所做的更改(例如,更改目录)不会影响您的命令行,但会影响子外壳的环境。 因此,第一个短语
(cd ~/stuff; tar --create --gzip --file - *)
更改为目录〜/ stuff,然后运行tar
。 因为子外壳后面是管道,所以子外壳的所有输出都将发送到管道中的下一个命令。 - 像许多其他UNIX实用程序一样,
tar
可以分别对标准输出(stdout
)和标准输入(stdin
)进行写入和读取。stdout
和stdin
通常都表示为连字符(-)。 因此,短语--create --file -
在stdout
上创建档案。 - 管道(|)将子外壳的所有输出管道输送到
ssh
。 这样可以有效地将所有输出从源计算机传输到目标计算机。 - 最后,目标计算机运行自己的
tar
实例以提取存档。 但是,在这里--extract --file -
从标准输入读取存档。-C
选项强制接收的tar
在开始任何处理之前将目录更改为东西(在您的远程主目录中)。 最终结果是,通过ssh
传输的档案被解压缩为〜/ stuff。
在一个(有点冗长)的命令中,您存档,传输和提取了存档。 顺便说一句,命令行的几乎转置允许您将在远程计算机上创建的存档提取并将其提取到本地计算机。 这是从本地计算机运行的解决方案:
$ ssh destination cat archive.tgz | \
(cd ~/stuff; tar --extract --gunzip --file -)
远程归档文件在远程计算机上打开,并且cat的字节流被发送到首先更改目录的子shell,然后提取归档文件。 (在tar
命令中添加-C ~/stuff
可以达到相同的效果;该示例仅显示子shell也可以使用输入。)
您可以使用相同的技术在同一台计算机上镜像文件。 尝试类似的方法:
tar --create --file - * | tar -C /path/to/directory --extract --file -
复制是最真诚的奉承形式
带有ssh
的tar
实用程序是一种将文件从一台计算机传输到另一台计算机的便捷方法。 tar
实用程序创建了档案,而ssh
促进了档案的安全传输。
另一种技术是使用SSH的固有功能将文件从一台计算机传输到另一台计算机。 sftp
是SSH的另一个“个性”,提供了文件传输协议(FTP)的所有功能,但在传输过程中仍保护文件数据。 (通常,由于不安全,因此不赞成使用FTP;但是,公共FTP站点是该规则的一个重要例外。)
如果您曾经使用过FTP,那么sftp
实际上是相同的。 只需键入sftp destination
即可连接到名为destination
的远程计算机,然后运行ftp, cd
, lcd
, mput
和mget
类的FTP命令来回移动文件。
在两台机器之间传输文件的另一种方法是使用scp
或安全副本。 顾名思义, scp
就像普通的cp
一样工作:它将文件从一个位置复制到另一个位置,可以在同一台计算机上,也可以在两台计算机之间。
例如,如果您想将一些文件和目录复制到本地计算机上的另一个目录,则可以运行清单2中所示的代码。
清单2.在两台机器之间复制文件
$ ls -lF
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
$ cp -pr * /home/joe/stuff
$ ls -lF /home/joe/stuff
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
在此示例中, 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
确实有一个特性需要注意。 假设您的主目录中有一个名为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的计算机上的主目录中。 -times
选项保留每个文件的访问,创建和最后修改时间。
$ rsync -e ssh --times --perms --recursive --delete doc destination:
rsync
这种变体将目标目录中的本地doc目录镜像。 保留文件时间和权限,并删除无关的文件(即,本地目录中不存在的远程目录中的文件)。
由于rsync
可以进行一些重大更改,因此您可能希望在命令行中添加--dry-run
选项以预览rsync
计划执行的操作。 --dry-run
不会进行任何更改,它只是显示发生了什么,如下面的清单3所示。
清单3.预览rsync的作用
$ rsync -e ssh --dry-run --times --perms --recursive --delete bin destination:
building file list ... done
bin/
skipping non-regular file "bin/HTML.pl"
skipping non-regular file "bin/Quark.pl"
bin/Responses/
bin/Responses/DBI.pm
bin/Responses/Response.pm
skipping non-regular file "bin/XML.pl"
bin/backupdca.sh
bin/lib/
bin/report.pl
bin/report.txt
sent 724 bytes received 108 bytes 554.67 bytes/sec
total size is 168879 speedup is 202.98
rsync
有很多选项:
-
-a
是无价的,因为它是--group --owner --perms --times --devices --links --recursive
的简写--group --owner --perms --times --devices --links --recursive
。--devices
重新创建设备文件,并且--links
将符号链接复制为符号链接,而不是复制符号链接指向的内容。 -
--update
防止rsync
覆盖较新的文件。 如果远程系统的文件比本地系统更新,则将保留远程系统的文件。 - 尝试
--verbose
观看rsync
情况。
再次,阅读rsync
的手册页以了解其更多技巧。 根据您定义的条件,一项重要功能专门包含或排除文件。
数据,无处不在的数据
UNIX在网络环境中使用了20多年。 那时,硬件发生了巨大的变化,但是许多软件保持不变,用户和系统管理员面临的挑战也是如此。 随着磁盘容量增长到巨大容量,跟踪所有数据的最大问题之一变得越来越严重。 诸如tar
, sftp/scp
和rsync
实用程序甚至可以驯服最野蛮的磁盘。
本系列的第6部分介绍了自动化-另一种节省时间和精力并减少人为错误的方法。
翻译自: https://www.ibm.com/developerworks/aix/library/au-speakingunix5.html