以下是關於在 Debian 系統上管理二進位制和文字資料的工具及其相關提示。
資料的安全和它的受控共享有如下幾個方面。
存檔檔案的建立
遠端儲存訪問
複製
跟蹤修改歷史
促進資料共享
防止未經授權的檔案訪問
檢測未經授權的檔案修改
這些可以通過使用工具集來實現。
存檔和壓縮工具
複製和同步工具
網路檔案系統
移動儲存媒介
安全 shell
認證體系
版本控制系統工具
雜湊演算法和加密工具
以下是 Debian 系統上可用的存檔和壓縮工具的預覽。
表 10.1. 存檔和壓縮工具列表
| 軟件包 | 流行度 | 大小 | 副檔名 | 命令 | 描述 |
|---|---|---|---|---|---|
tar
|
V:914, I:999 | 3152 | .tar |
tar(1) |
標準的歸檔工具(預設) |
cpio
|
V:489, I:998 | 1144 | .cpio |
cpio(1) |
Unix System V 風格的歸檔器,與 find(1) 一起使用 |
binutils
|
V:164, I:673 | 97 | .ar |
ar(1) |
建立靜態庫的歸檔工具 |
fastjar
|
V:2, I:25 | 183 | .jar |
fastjar(1) |
Java 歸檔工具(類似 zip) |
pax
|
V:12, I:24 | 170 | .pax |
pax(1) |
新的 POSIX 歸檔工具,介於 tar 和 cpio 之間 |
gzip
|
V:891, I:999 | 242 | .gz |
gzip(1), zcat(1), … |
GNU LZ77 壓縮工具(預設) |
bzip2
|
V:147, I:973 | 122 | .bz2 |
bzip2(1), bzcat(1), … |
Burrows-Wheeler
block-sorting 壓縮工具有著比 gzip(1) 更高的壓縮率 (跟
gzip 有著相似的語法但速度比它慢) |
lzma
|
V:2, I:27 | 149 | .lzma |
lzma(1) |
LZMA 壓縮工具有著比 gzip(1)
更高的壓縮率(不推薦) |
xz-utils
|
V:453, I:980 | 612 | .xz |
xz(1), xzdec(1), … |
XZ 壓縮工具有著比 bzip2(1)
更高的壓縮率(壓縮速度慢於 gzip 但是比 bzip2 快; LZMA 壓縮工具的替代品) |
zstd
|
V:4, I:24 | 1902 | .zstd |
zstd(1), zstdcat(1), … |
Zstandard 快速無失真壓縮工具 |
p7zip
|
V:79, I:454 | 987 | .7z |
7zr(1), p7zip(1) |
有著更高壓縮率的 7-zip 檔案歸檔器(LZMA 壓縮) |
p7zip-full
|
V:102, I:469 | 4664 | .7z |
7z(1), 7za(1) |
有著更高壓縮率的 7-Zip 檔案歸檔器(LZMA 壓縮和其他) |
lzop
|
V:10, I:85 | 164 | .lzo |
lzop(1) |
LZO 壓縮工具有著比 gzip(1)
更高的壓縮和解壓縮速度 (跟 gzip 有著相似的語法但壓縮率比它低) |
zip
|
V:49, I:427 | 623 | .zip |
zip(1) |
InfoZip:DOS 歸檔器和壓縮工具 |
unzip
|
V:132, I:792 | 385 | .zip |
unzip(1) |
InfoZIP:DOS 解檔器和解壓縮工具 |
|
警告 |
|---|---|
|
除非你知道將會發生什麼,否則不要設定 " |
gzipped tar(1) 歸檔器用於副檔名是 ".tgz" 或者
".tar.gz" 的檔案。
xz-compressed tar(1) 歸檔器用於副檔名是 ".txz"
或者 ".tar.xz" 的檔案。
FOSS 工具,例如
tar(1),中的主流壓縮方法已經按如下所示的遷移: gzip →
bzip2 → xz
cp(1),scp(1) 和
tar(1) 工具可能並不適用於一些特殊的檔案。cpio(1)
工具的適用範圍是最廣的。
cpio(1) 是被設計為與 find(1)
和其它命令一起使用,適合於建立備份指令碼的場景,因此,指令碼的檔案選擇部分能夠被獨立測試。
Libreoffice 資料檔案的內部結構是 ".jar" 檔案,它也可以使用
unzip 工具來開啟。
事實上跨平臺支援最好的存檔工具是 zip。按照“zip
-rX”的方式呼叫可以獲得最大的相容性。如果最大檔案大小需要納入考慮範圍,請同時配合“-s”選項使用。
以下是 Debian 系統上的可用的簡單複製和備份工具的預覽。
表 10.2. 複製和同步工具列表
| 軟件包 | 流行度 | 大小 | 工具 | 功能 |
|---|---|---|---|---|
coreutils
|
V:901, I:999 | 17478 | GNU cp | 複製本地檔案和目錄("-a" 引數實現遞迴) |
openssh-client
|
V:809, I:997 | 4298 | scp | 複製遠端檔案和目錄(客戶端,"-r" 引數實現遞迴) |
openssh-server
|
V:701, I:844 | 1567 | sshd | 複製遠端檔案和目錄(遠端伺服器) |
rsync
|
V:311, I:564 | 677 | 單向遠端同步和備份 | |
unison
|
V:3, I:16 | 14 | 雙向遠端同步和備份 |
在複製檔案的時候, rsync(8) 比其他工具提供了更多的特性。
差分傳輸演算法只會傳送原始檔與已存在的目標檔案之間的差異部分
快速檢查演算法 (預設) 會查詢大小或者最後的修改時間有變化的檔案
"--exclude" 和 "--exclude-from" 選項類似於
tar(1)
在源目錄中新增反斜槓的語法能夠避免在目標檔案中建立額外的目錄級別。
|
提示 |
|---|---|
|
在 表 10.11 “版本控制系統工具列表” 中的版本控制系統 (VCS) 可以被認為是多路拷貝和同步工具。 |
以下是用不同的工具壓縮和解壓縮整個 "./source" 目錄中的內容。
GNU tar(1):
$ tar -cvJf archive.tar.xz ./source $ tar -xvJf archive.tar.xz
或者,如下所示。
$ find ./source -xdev -print0 | tar -cvJf archive.tar.xz --null -F -
cpio(1):
$ find ./source -xdev -print0 | cpio -ov --null > archive.cpio; xz archive.cpio $ zcat archive.cpio.xz | cpio -i
如下是用不同的工具複製整個 "./source" 目錄中的內容。
本地複製: "./source" 目錄 → "/dest" 目錄
遠端複製:本地主機上的 "./source" 目錄 →
"user@host.dom" 主機上的 "/dest" 目錄
rsync(8):
# cd ./source; rsync -aHAXSv . /dest # cd ./source; rsync -aHAXSv . user@host.dom:/dest
你能夠選擇使用“源目錄上的反斜槓”語法。
# rsync -aHAXSv ./source/ /dest # rsync -aHAXSv ./source/ user@host.dom:/dest
或者,如下所示。
# cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . /dest # cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . user@host.dom:/dest
GNU cp(1) 和 openSSH scp(1):
# cd ./source; cp -a . /dest # cd ./source; scp -pr . user@host.dom:/dest
GNU tar(1):
# (cd ./source && tar cf - . ) | (cd /dest && tar xvfp - ) # (cd ./source && tar cf - . ) | ssh user@host.dom '(cd /dest && tar xvfp - )'
cpio(1):
# cd ./source; find . -print0 | cpio -pvdm --null --sparse /dest
你能夠在所有包含 "." 的例子裡用 "foo" 替代
".",這樣就可以從 "./source/foo" 目錄複製檔案到
"/dest/foo" 目錄。
在所有包含 "." 的列子裡,你能夠使用絕對路徑
"/path/to/source/foo" 來代替 ".",這樣可以去掉
"cd ./source;". 如下所示,這些檔案會根據工具的不同,拷貝到不同的位置。
"/dest/foo": rsync(8), GNU
cp(1), 和 scp(1)
"/dest/path/to/source/foo": GNU
tar(1), 和 cpio(1)
|
提示 |
|---|---|
|
|
find(1) 被用作從歸檔中篩選檔案也被用作拷貝命令 (參見第 10.1.3 节 “歸檔語法”和第 10.1.4 节 “複製語法”)
或者用於 xargs(1) (參見第 9.3.9 节 “使用檔案迴圈來重複一個命令”)。通過 find
的命令列引數能夠使其功能得到加強。
以下是 find(1)基本語法的總結。
find 條件引數的運算規則是從左到右。
一旦輸出是確定的,那麼運算就會停止。
“邏輯 OR" (由條件之間的 "-o"
引數指定的)優先順序低於 "邏輯 AND" (由
"-a" 引數指定或者條件之間沒有任何引數)。
”邏輯 NOT" (由條件前面的 "!"
指定) 優先順序高於 “邏輯 AND”。
"-prune" 總是返回邏輯 TRUE
並且如果這個目錄是存在的,將會搜尋除這個目錄以外的檔案。
"-name" 選項匹配帶有 shell 萬用字元 (參見第 1.5.6 节 “Shell 萬用字元”) 的檔名但也匹配帶有類似 "*" 和
"?" 元字元的 ."。(新的 POSIX 特性)
"-regex" 匹配整個檔案路徑,預設採用 emacs 風格的 BRE (參見第 1.6.2 节 “正則表達式”)。
"-size" 根據檔案大小來匹配 (值前面帶有 "+"
號匹配更大的檔案,值前面帶有 "-" 號匹配更小的檔案)
"-newer" 引數匹配比引數名中指定的檔案還要新的檔案。
"-print0" 引數總是返回邏輯 TRUE 並將完整檔名 (null
terminated) 列印到標準輸出裝置上。
如下是 find(1) 語法格式。
# find /path/to \
-xdev -regextype posix-extended \
-type f -regex ".*\.cpio|.*~" -prune -o \
-type d -regex ".*/\.git" -prune -o \
-type f -size +99M -prune -o \
-type f -newer /path/to/timestamp -print0
這些命令會執行如下動作。
查詢 "/path/to" 下的所有檔案
限定全域性查詢的檔案系統並且使用的是 ERE (參見第 1.6.2 节 “正則表達式”)
通過停止處理的方式來排除匹配 ".*\.cpio" 或 ".*~"
正則表示式的檔案
通過停止處理的方式來排除匹配 ".*/\.git" 正則表示式的目錄
通過停止處理的方式來排除比 99MB (1048576位元組單元) 更大的檔案
顯示檔名,滿足以上搜索條件並且比 "/path/to/timestamp" 新的檔案
請留心以上例子中的 "-prune -o" 排除檔案的習慣用法。
|
注意 |
|---|---|
|
對於非 Debian 系的 Unix-like 系統,有些引數可能不被
|
為重要的資料存檔尋找 儲存裝置 時,你應該注意它們的侷限性。對於小型的個人資料備份,我使用品牌公司的 CD-R 和 DVD-R 然後把它放在陰涼、乾燥、清潔的地方。(專業的一般使用磁帶存檔介質)
|
注意 |
|---|---|
|
防火安全是對於紙質文件來說的,大多數的計算機資料儲存媒介耐熱性比紙差。我經常依賴儲存在多個安全地點的加密拷貝。 |
網上(主要是來源於供應商資訊)可以檢視儲存介質的最大使用壽命。
大於100年:用墨水的無酸紙
100年:光碟儲存(CD/DVD,CD/DVD-R)
30年:磁帶儲存(磁帶,軟盤)
20年:相變光碟儲存(CD-RW)
這不包括由於人為導致的機械故障等等。
網上(主要來源於供應商資訊)可以檢視儲存介質的最大的寫次數。
大於250,000次:硬碟驅動器
大於10,000次:快閃記憶體
1,000次:CD/DVD-RW
1次:CD/DVD-R,紙
|
小心 |
|---|---|
|
這裡的儲存壽命和寫次數的資料不應該被用來決定任何用於關鍵資料的儲存媒介,請翻閱製造商提供的特定產品的說明。 |
|
提示 |
|---|---|
|
因為 CD/DVD-R 和 紙只能寫一次,它們從根本上阻止了因為重寫導致的資料意外丟失。這是優點! |
|
提示 |
|---|---|
|
如果你需要更快更頻繁的進行大資料備份,那麼通過高速網路連線的遠端主機上的硬碟來實現備份,可能是唯一可行的方法。 |
可移動儲存裝置可能是以下的任何一種。
數碼相機
數字音樂播放器
它們可以通過以下的方式來進行連線。
像 GNOME 和 KDE 這樣的現代桌面環境能夠在 "/etc/fstab"
檔案中沒有匹配條目的時候,自動掛載這些可移動裝置。
|
提示 |
|---|---|
|
|
|
提示 |
|---|---|
|
只有當這些可移動裝置沒有在 " |
現代桌面環境下的掛載點被選為
"/media/disk_label",它可以被如下所示的來定製。
FAT 格式的檔案系統使用 mlabel(1) 命令
ISO9660 檔案系統使用帶有 "-V" 選項的
genisoimage(1) 命令
ext2/ext3/ext4 檔案系統使用帶有 "-L" 選項的
tune2fs(1) 命令
|
提示 |
|---|---|
|
掛載時可能需要提供編碼選項(參見 第 8.1.3 节 “檔名編碼”)。 |
|
提示 |
|---|---|
|
在圖形介面選單上移除檔案系統,可能會移除它的動態裝置節點例如
" |
當你通過可移動儲存裝置與其他系統分享資料的時候,你應該先把它格式化為被兩種作業系統都支援的通用的 檔案系統。下面是檔案系統的列表。
表 10.3. 典型使用場景下可移動儲存裝置可選擇的檔案系統列表
| 檔案系統名 | 典型使用場景 |
|---|---|
| FAT12 | 軟盤(<32MiB)上跨平臺的資料分享 |
| FAT16 | 在小硬碟(<2GiB)上的跨平臺的資料分享 |
| FAT32 | 在大硬碟(<8TiB,被 MS Windows95 OSR2 以上的作業系統所支援) 上的跨平臺的資料分享 |
| exFAT | 在大硬碟類裝置上跨平臺共享資料(<512TiB,被 WindowsXP, Mac OS X Snow Leopard 10.6.5 和 Linux 核心 5.4 版本以上的作業系統所支援) |
| NTFS | 在大硬碟類裝置上的跨平臺共享資料 (在 MS Windows NT 和後續版本原生支援;在 Linux 上,通過使用 FUSE 的 NTFS-3G 支援。) |
| ISO9660 | 在 CD-R 和 DVD+/-R 上的跨平臺的靜態資料分享 |
| UDF | CD-R 和 DVD+/-R (新)上的增量資料寫入 |
| MINIX | 軟盤上磁碟空間高利用率的 unix 檔案資料儲存 |
| ext2 | 在裝有老舊 linux 系統的硬碟上的資料分享 |
| ext3 | 在裝有老舊 linux 系統的硬碟上的資料分享 |
| ext4 | 在裝有較新的 linux 系統的硬碟上的資料分享 |
| btrfs | 使用只讀快照在裝有較新的 Linux 系統的硬碟上共享資料 |
|
提示 |
|---|---|
|
檢視第 9.8.1 节 “使用 dm-crypt/LUKS 加密移動磁碟”來獲得關於使用裝置級加密的跨平臺的資料共享的資訊。 |
FAT 檔案系統被絕大多數的現代作業系統支援,它對於通過可行動硬碟進行的資料交換是非常有用的。
當格式化像裝有 FAT 檔案系統的跨平臺資料共享的可移動裝置時,以下應該是保險的選擇。
用 fdisk(8),cfdisk(8) 或者
parted(8) 命令(參見第 9.5.2 节 “硬碟分割槽配置”)把它們格式化為單個的主分割槽並對把它做如下標記。
標記小於 2GB 的 FAT 裝置為 字元"6"。
標記更大的 FAT32 裝置為字元 "c"。
如下所示是用 mkfs.vfat(8) 命令格式化主分割槽的。
它的裝置名字,例如 "/dev/sda1" 用於 FAT16 裝置
明確的選項和它的裝置名,例如 "-F 32 /dev/sda1" 用於 FAT32 裝置
當使用 FAT 或 ISO9660 檔案系統分享資料時,如下是需要注意的安全事項。
用
tar(1),或cpio(1)命令壓縮檔案,目地是為了保留檔名,符號連結,原始的檔案許可權和檔案所有者資訊。
用 split(1) 命令把壓縮檔案分解成若干小於 2GiB的小檔案,使其免受檔案大小限制。
加密壓縮檔案保護其內容免受未經授權的訪問。
|
注意 |
|---|---|
|
因為 FAT 檔案系統的設計,最大的檔案大小為 |
|
注意 |
|---|---|
|
微軟系統本身並不建議在超過 200MB 的分割槽或者驅動器上使用 FAT。他們的 " Overview of FAT, HPFS, and NTFS File Systems 這篇文章突出顯示了微軟系統的缺點,例如低效的磁碟空間利用。當然了,我們在 Linux 系統上還是應該使用 ext4 檔案系統。 |
|
提示 |
|---|---|
|
有關檔案系統和訪問檔案系統的更多資訊,請參考 "Filesystems HOWTO"。 |
當使用網路來分享資料的時候,你應該使用通用的服務。這裡有一些提示。
表 10.4. 典型使用場景下可選擇的網路服務列表
| 網路服務 | 典型使用場景描述 |
|---|---|
| SMB/CIFS 用 Samba 掛載網路檔案系統 | 通過 “Microsoft Windows 網路” 分享檔案,參見 smb.conf(5) 和 官方 Samba 3.x.x 指導和參考手冊(The Official
Samba 3.x.x HOWTO and Reference Guide) 或
samba-doc 軟體包 |
| NFS 用 Linux 核心掛載網路檔案系統 | 通過 “Unix/Linux 網路" 分享檔案,參見 exports(5) 和 Linux NFS-HOWTO |
| HTTP 服務 | 在 web 伺服器/客戶端之間分享檔案 |
| HTTPS 服務 | 在有加密的安全套接層 (SSL) 或者安全傳輸層 (TLS) 的網路伺服器/客戶端中分享檔案 |
| FTP 服務 | 在 FTP 伺服器/客戶端之間分享檔案 |
儘管對於檔案分享來說,通過網路掛載檔案系統和傳輸檔案是相當方便的,但這可能是不安全的。它們的網路連線必須通過如下所示的加強安全性。
我們都熟知計算機有時會出問題,或者由於人為的錯誤導致系統和資料損壞。備份和恢復操作是成功的系統管理中非常重要的一部分。可能有一天你的電腦就會出問題。
|
提示 |
|---|---|
|
保持你的備份系統簡潔並且經常備份你的系統,有備份資料比你採用的備份方法的技術先進要重要的多。 |
有3個關鍵的因素決定實際的備份和恢復策略。
知道要備份和恢復什麼。
你自己建立的資料檔案:在 "~/" 下的資料
你使用的應用程式建立的資料檔案:在 "/var/" 下的資料(除了
"/var/cache/","/var/run/" 和
"/var/tmp/")
系統配置檔案:在 "/etc/” 下的資料
本地軟體:在 "/usr/local/" 或 "/opt/" 下的資料
系統安裝資訊:關鍵步驟 (分割槽,...) 的純文字備忘錄
驗證資料結果:通過實驗性的恢復操作來預先驗證
知道怎樣去備份和恢復。
安全的資料儲存:保護其免於覆蓋和系統故障
經常備份:有計劃的備份
冗餘備份:資料映象
傻瓜式操作:單個簡單命令備份
評估涉及的風險和成本。
評估資料丟失的損失
備份所需的資源:人力,硬體,軟體,…
資料丟失的方式及其可能性
|
注意 |
|---|---|
|
除非你知道自己做的是什麼,否則不要備份 |
至於安全的資料儲存,資料至少是應該在不同的磁碟分割槽上最好是在不同的磁碟和機器上,來承受檔案系統發生的損壞。重要的資料最好儲存在只能寫一次的媒介上例如 CD/DVD-R 來防止覆蓋事故。(參見 第 9.7 节 “二進位制資料” 怎樣在 shell 命令列寫入儲存媒介。GNOME 桌面圖形環境可以讓你輕鬆的通過選單:“位置 → CD/DVD 燒錄”來實現寫入操作。)
|
注意 |
|---|---|
|
當備份資料的時候,你可能希望停止一些應用程式的守護程序例如 MTA(參見第 6.2.4 节 “郵件傳輸代理 (MTA)”)。 |
|
注意 |
|---|---|
|
你應該格外小心地備份和恢復身份認證相關的資料檔案例如 " |
|
注意 |
|---|---|
|
如果你以使用者程序的方式執行 cron job,你必須儲存檔案到
" |
以下是 Debian 系統上值得注意的實用備份程式套件的列表。
表 10.5. 實用備份程式套件列表
| 軟件包 | 流行度 | 大小 | 說明 |
|---|---|---|---|
dump
|
V:1, I:6 | 352 | 4.4 BSD dump(8) 和
restore(8) 命令用於 ext2/ext3/ext4 檔案系統 |
xfsdump
|
V:0, I:9 | 854 | 在 GNU/Linux 和 IRIX 上用
xfsdump(8) 和 xfsrestore(8) 命令來備份和恢復
XFS 檔案系統 |
backupninja
|
V:3, I:4 | 367 | 輕量的可擴充套件的 meta-backup 系統 |
bacula-common
|
V:10, I:14 | 2158 | Bacula: 網路資料備份,恢復和核查-常見的支援檔案 |
bacula-client
|
I:3 | 183 | Bacula: 網路資料備份,恢復和核查-客戶端元軟體包 |
bacula-console
|
V:1, I:4 | 107 | Bacula: 網路資料備份,恢復和核查-文字終端 |
bacula-server
|
I:1 | 183 | Bacula: 網路資料備份,恢復和核查-伺服器端元軟體包 |
amanda-common
|
V:1, I:2 | 10030 | Amanda: 馬里蘭大學開發的高階自動化網路磁碟歸檔器(庫) |
amanda-client
|
V:1, I:2 | 1088 | Amanda: 馬里蘭大學開發的高階自動化網路磁碟歸檔器(客戶端) |
amanda-server
|
V:0, I:0 | 1075 | Amanda: 馬里蘭大學開發的高階自動化網路磁碟歸檔器(伺服器端) |
backup-manager
|
V:1, I:1 | 571 | 命令列備份工具 |
backup2l
|
V:0, I:1 | 114 | 用於可掛載媒介 (基於磁碟的) 的低維護的備份/恢復工具 |
backuppc
|
V:3, I:3 | 3183 | BackupPC 是用於備份 PC 機資料(基於磁碟)的高效能的企業級工具 |
duplicity
|
V:9, I:19 | 1834 | (遠端) 增量備份 |
flexbackup
|
V:0, I:0 | 243 | (遠端) 增量備份 |
rdiff-backup
|
V:6, I:14 | 733 | (遠端) 增量備份 |
restic
|
V:1, I:4 | 22540 | (遠端) 增量備份 |
slbackup
|
V:0, I:0 | 151 | (遠端) 增量備份 |
備份工具有各自的專用的用途。
Mondo Rescue 是一個備份系統,它能夠方便的從備份 CD/DVD 等裝置中快速恢復整個系統,而不需要經過常規的系統安裝過程。
定期備份使用者資料,可以透過一個簡單的指令碼實現 (第 10.2.2 节 “個人備份”)。
第 10.1.1 节 “存檔和壓縮工具” 和 第 10.1.2 节 “複製和同步工具” 描述的基礎工具能夠通過自定義指令碼來幫助系統備份。這些指令碼的功能可以通過如下的工具來增強。
restic 軟體包能夠增量備份(遠端)。
rdiff-backup 軟體包能夠增量備份(遠端)。
dump 軟體包用於高效增量的歸檔和恢復整個檔案系統。
|
提示 |
|---|---|
|
參見 " |
對於執行 testing 套件的個人 Debian
桌面系統來說,只需要保護個人資料和關鍵資料。我不管怎樣每年都會重新安裝一次系統。因此沒理由去備份整個系統或者安裝全功能的備份實用程式。
與此同時,有一定頻率的最近的個人資料和系統配置快照的備份,加上偶爾個人資料的全備份,是非常有價值的。
我經常使用一個簡單的 shell 指令碼 bss 來製作這些快照和備份。這個指令碼是一個短小的
shell,使用標準工具:btrfs 子卷快照, rsync,
cp.
|
提示 |
|---|---|
|
你能夠用 " |
資料安全基礎設施是資料加密,訊息摘要和簽名工具的結合。
表 10.6. 資料安全基礎工具列表
| 軟件包 | 流行度 | 大小 | 命令 | 說明 |
|---|---|---|---|---|
gnupg
|
V:498, I:942 | 864 | gpg(1) |
GNU 隱私衛士 - OpenPGP 加密和簽名工具 |
gpgv
|
V:890, I:999 | 882 | gpgv(1) |
GNU 隱私衛士 - 簽名驗證工具 |
paperkey
|
V:1, I:13 | 58 | paperkey(1) |
從 OpenPGP 私鑰裡面,僅僅匯出私密資訊 |
cryptsetup
|
V:41, I:77 | 407 | cryptsetup(8), … |
dm-crypt 塊裝置加密支援 LUKS 工具 |
coreutils
|
V:901, I:999 | 17478 | md5sum(1) |
計算與校驗 MD5 訊息摘要 |
coreutils
|
V:901, I:999 | 17478 | sha1sum(1) |
計算與校驗 SHA1 訊息摘要 |
openssl
|
V:814, I:994 | 1465 | openssl(1ssl) |
使用 "openssl dgst" (OpenSSL)計算資訊摘要 |
參見 第 9.8 节 “資料加密提示” 的 dm-crypt 和 ecryptfs,它們透過 Linux 核心模組實現了自動資料加密架構。
如下是 GNU 隱私衛士 基本的金鑰管理命令。
表 10.7. GNU 隱私衛士金鑰管理命令的列表
| 命令 | 說明 |
|---|---|
gpg --gen-key |
生成一副新的金鑰對 |
gpg --gen-revoke my_user_ID |
生成 my_user_ID 的一份吊銷證書 |
gpg --edit-key user_ID |
互動式的編輯金鑰,輸入 "help" 來獲得幫助資訊 |
gpg -o file --export |
把所有的金鑰輸出到檔案 |
gpg --import file |
從檔案匯入金鑰 |
gpg --send-keys user_ID |
傳送 user_ID 的公鑰到公鑰伺服器 |
gpg --recv-keys user_ID |
從公鑰伺服器下載 user_ID 的公鑰 |
gpg --list-keys user_ID |
列出 user_ID 的所有金鑰 |
gpg --list-sigs user_ID |
列出 user_ID 的簽字 |
gpg --check-sigs user_ID |
檢查 user_ID 金鑰簽字 |
gpg --fingerprint user_ID |
檢查 user_ID 的指紋 |
gpg --refresh-keys |
更新本地金鑰 |
信任碼含義.
如下命令上傳我的 "1DD8D791" 公鑰到主流的公鑰伺服器
"hkp://keys.gnupg.net"。
$ gpg --keyserver hkp://keys.gnupg.net --send-keys 1DD8D791
預設良好的公鑰伺服器在 "~/.gnupg/gpg.conf" (舊的位置在
"~/.gnupg/options")檔案中設定,此檔案包含了以下資訊。
keyserver hkp://keys.gnupg.net
從鑰匙伺服器獲取無名鑰匙。
$ gpg --list-sigs --with-colons | grep '^sig.*\[User ID not found\]' |\ cut -d ':' -f 5| sort | uniq | xargs gpg --recv-keys
有一個錯誤在 OpenPGP 公鑰伺服器 (先前的版本
0.9.6),會將鍵中斷為 2 個以上的子鍵。新的 gnupg (>1.2.1-2)
軟體包能夠處理這些中斷的子鍵。參見 gpg(1) 下的
"--repair-pks-subkey-bug" 選項.
這裡有一些在檔案上使用 GNU 隱私衛士 命令的例子。
表 10.9. 在檔案上使用的 GNU 隱私衛士的命令列表
| 命令 | 說明 |
|---|---|
gpg -a -s file |
ASCII 封裝的簽名檔案 file.asc |
gpg --armor --sign file |
同上 |
gpg --clearsign file |
生成明文簽字資訊 |
gpg --clearsign file|mail foo@example.org |
傳送一份明文簽字到 foo@example.org |
gpg --clearsign --not-dash-escaped patchfile |
明文簽名的補丁檔案 |
gpg --verify file |
驗證明文檔案 |
gpg -o file.sig -b file |
生成一份分離的簽字 |
gpg -o file.sig --detach-sig file |
同上 |
gpg --verify file.sig file |
使用 file.sig 驗證檔案 |
gpg -o crypt_file.gpg -r name -e file |
公鑰加密,從檔案裡面獲取名字,生成二進位制的 crypt_file.gpg |
gpg -o crypt_file.gpg --recipient name --encrypt file |
同上 |
gpg -o crypt_file.asc -a -r name -e file |
公鑰加密,從檔案中獲取名字,生成 ASCII 封裝的 crypt_file.asc |
gpg -o crypt_file.gpg -c file |
將檔案對稱加密到 crypt_file.gpg |
gpg -o crypt_file.gpg --symmetric file |
同上 |
gpg -o crypt_file.asc -a -c file |
對稱加密,從檔案到 ASCII 封裝的 crypt_file.asc |
gpg -o file -d crypt_file.gpg -r name |
解密 |
gpg -o file --decrypt crypt_file.gpg |
同上 |
增加下面內容到 "~/.muttrc",在自動啟動時,避免一個慢的 GnuPG,在索引選單中按
"S" 來允許它使用。
macro index S ":toggle pgp_verify_sig\n" set pgp_verify_sig=no
gnupg 外掛可以讓你對副檔名為 ".gpg",
".asc", 和 ".ppg"的檔案可靠的執行 GnuPG.
# aptitude install vim-scripts vim-addon-manager $ vim-addons install gnupg
md5sum(1) 提供了製作摘要檔案的一個工具,它使用 rfc1321 裡的方式製作摘要檔案.
$ md5sum foo bar >baz.md5 $ cat baz.md5 d3b07384d113edec49eaa6238ad5ff00 foo c157a79031e1c40f85931829bc5fc552 bar $ md5sum -c baz.md5 foo: OK bar: OK
|
注意 |
|---|---|
|
MD5 校驗和的 CPU 計算強度是比 GNU Privacy Guard (GnuPG) 加密簽名要少的.在通常情況下,只有頂級的摘要檔案才需要加密簽名來確保資料完整性. |
這裡有許多原始碼合併工具。如下的是我感興趣的工具。
表 10.10. 原始碼合併工具列表
| 軟件包 | 流行度 | 大小 | 命令 | 說明 |
|---|---|---|---|---|
patch
|
V:123, I:721 | 248 | patch(1) |
給原檔案打補丁 |
vim
|
V:102, I:404 | 3286 | vimdiff(1) |
在 vim 中並排比較兩個檔案 |
imediff
|
V:0, I:0 | 170 | imediff(1) |
全屏互動式兩路/三路合併工具 |
meld
|
V:14, I:38 | 3065 | meld(1) |
比較和移植檔案(GTK) |
wiggle
|
V:0, I:0 | 174 | wiggle(1) |
應用被拒絕的補丁 |
diffutils
|
V:883, I:993 | 1598 | diff(1) |
逐行比較兩個檔案 |
diffutils
|
V:883, I:993 | 1598 | diff3(1) |
逐行比較和合並三個檔案 |
quilt
|
V:3, I:32 | 788 | quilt(1) |
管理系列補丁 |
wdiff
|
V:8, I:69 | 644 | wdiff(1) |
在文字檔案中,顯示單詞的不同 |
diffstat
|
V:14, I:146 | 81 | diffstat(1) |
通過 diff 生成一個改變柱狀圖 |
patchutils
|
V:16, I:143 | 232 | combinediff(1) |
從兩個增量補丁建立一個積累補丁 |
patchutils
|
V:16, I:143 | 232 | dehtmldiff(1) |
從一個 HTML 頁面提取出一個 diff |
patchutils
|
V:16, I:143 | 232 | filterdiff(1) |
從一個 diff 檔案裡面提取或者排除 diff 檔案 |
patchutils
|
V:16, I:143 | 232 | fixcvsdiff(1) |
修復由 CVS patch(1) 錯誤建立的 diff 檔案 |
patchutils
|
V:16, I:143 | 232 | flipdiff(1) |
交換兩個補丁的順序 |
patchutils
|
V:16, I:143 | 232 | grepdiff(1) |
顯示哪些檔案是由匹配正則表示式的補丁修改 |
patchutils
|
V:16, I:143 | 232 | interdiff(1) |
顯示在兩個統一格式 diff 檔案(基於同一個檔案的兩個不同 diff 檔案)之間的差異 |
patchutils
|
V:16, I:143 | 232 | lsdiff(1) |
顯示哪些檔案由補丁修改 |
patchutils
|
V:16, I:143 | 232 | recountdiff(1) |
重新計算通用內容 diff 檔案的數量和偏移 |
patchutils
|
V:16, I:143 | 232 | rediff(1) |
修復手工編輯 diff 檔案的數量和偏移 |
patchutils
|
V:16, I:143 | 232 | splitdiff(1) |
隔離出增量補丁 |
patchutils
|
V:16, I:143 | 232 | unwrapdiff(1) |
識別已經被分詞的補丁 |
dirdiff
|
V:0, I:2 | 166 | dirdiff(1) |
顯示目錄樹之間的不同並移植改變 |
docdiff
|
V:0, I:0 | 555 | docdiff(1) |
逐詞逐字的比較兩個檔案 |
makepatch
|
V:0, I:0 | 102 | makepatch(1) |
生成擴充套件補丁檔案 |
makepatch
|
V:0, I:0 | 102 | applypatch(1) |
應用擴充套件補丁檔案 |
下面的操作,匯出兩個原始檔的不同,並根據檔案的位置,建立通用 diff 檔案"file.patch0" 或
"file.patch1".
$ diff -u file.old file.new > file.patch0 $ diff -u old/file new/file > file.patch1
diff 檔案(通常被叫作 patch 補丁檔案),用於傳送一個程式更新。通過下面的方式,接收到的部分,應用這個更新到其它檔案。
$ patch -p0 file < file.patch0 $ patch -p1 file < file.patch1
The version control systems (VCS) is sometimes known as the revision control system (RCS), or the software configuration management (SCM).
Git 是這些天選擇的工具,因為 Git 能夠同時在本地和遠端原始碼管理上,做任何事情。
透過 Debian Salsa 服務,Debian 能夠提供免費的 Git 服務。在 https://wiki.debian.org/Salsa 能找到它的說明文件。
Here is a summary of the notable VCS on the Debian system.
表 10.11. 版本控制系統工具列表
| 軟件包 | 流行度 | 大小 | 工具 | VCS 型別 | 描述 |
|---|---|---|---|---|---|
git
|
V:312, I:494 | 36515 | Git | 分散式 | 用 C 寫的快速 DVCS (被 Linux 核心和其他專案使用) |
gitk
|
V:5, I:41 | 1749 | Git | 分散式 | VCS (Git) 儲存庫樹的圖形介面顯示 |
mercurial
|
V:6, I:44 | 1053 | Mercurial | 分散式 | mercurial 主要是用 Python 寫的還有一部分是 C 寫的 |
darcs
|
V:0, I:7 | 23159 | Darcs | 分散式 | 有智慧代數補丁的 DVCS(慢) |
bzr
|
V:1, I:15 | 28 | Bazaar | 分散式 | DVCS influenced by tla written in Python (historic) |
tla
|
V:0, I:2 | 1011 | GNU arch | 分散式 | DVCS mainly by Tom Lord (historic) |
subversion
|
V:18, I:104 | 4873 | Subversion | 遠端 | "CVS done right", newer standard remote VCS (historic) |
cvs
|
V:4, I:38 | 4620 | CVS | 遠端 | previous standard remote VCS (historic) |
tkcvs
|
V:0, I:1 | 1498 | CVS, … | 遠端 | VCS (CVS,Subversion,RCS) 儲存庫樹的圖形介面顯示 |
rcs
|
V:3, I:19 | 562 | RCS | 本地 | "Unix SCCS done right" (historic) |
cssc
|
V:0, I:2 | 2044 | CSSC | 本地 | clone of the Unix SCCS (historic) |
你可以在 "~/.gitconfig" 裏面設置幾個 Git
接下來需要使用的全局配置,比如說你的名字和電子郵件地址。
$ git config --global user.name "Name Surname" $ git config --global user.email yourname@example.com
如果你習慣使用 CVS 或 Subversion 命令,你也許希望設置如下幾個命令別名。
$ git config --global alias.ci "commit -a" $ git config --global alias.co checkout
你能夠通過如下方式檢查你的整體組態。
$ git config --global --list
這裡是主要的 Git 命令概覽。
表 10.12. 本地 VCS 命令比較
| Git 命令 | 功能 |
|---|---|
git init |
建立(本地)儲存庫 |
git clone |
克隆遠端儲存庫到本地工作目錄樹 |
git pull |
通過合併遠端儲存庫來更新工作目錄樹 |
git add . |
把工作目錄樹中的檔案新增到 VCS |
git rm |
從 VCS 中移除工作目錄樹中的檔案 |
git commit -a |
提交改變到本地儲存庫 |
git push |
通過本地儲存庫來更新遠端儲存庫 |
git status |
從 VCS 中顯示工作目錄樹的狀態 |
git diff |
比較參考儲存庫和工作目錄樹的差異 |
git repack -a -d; git prune |
重新打包本地倉庫到一個單獨的包 |
gitk |
VCS 儲存庫樹的圖形介面顯示 |
表 10.13. git 相關包和命令列表
| 軟件包 | 流行度 | 大小 | 命令 | 說明 |
|---|---|---|---|---|
git-doc
|
I:14 | 12063 | N/A | Git 官方文檔 |
gitmagic
|
I:1 | 721 | N/A | "Git 魔術",易於理解的 Git 手冊 |
git
|
V:312, I:494 | 36515 | git(7) |
Git 快速、可擴展、分佈式的版本控制系統 |
gitk
|
V:5, I:41 | 1749 | gitk(1) |
有歷史功能的 Git 圖形倉庫瀏覽器 |
git-gui
|
V:1, I:23 | 2343 | git-gui(1) |
Git 圖形界面(無歷史功能) |
git-email
|
V:0, I:11 | 993 | git-send-email(1) |
從 Git 用電子郵件發送收集到的補丁 |
git-buildpackage
|
V:1, I:11 | 4187 | git-buildpackage(1) |
用 Git 自動製作 Debian 包 |
dgit
|
V:0, I:1 | 496 | dgit(1) |
Debian 檔案庫的 git 互動操作 |
imediff
|
V:0, I:0 | 170 | git-ime(1) |
An interactive git commit split helper tool |
stgit
|
V:0, I:0 | 603 | stg(1) |
封裝的 git (Python) |
|
小心 |
|---|---|
|
從命令列通過 " |
|
提示 |
|---|---|
|
With |
|
提示 |
|---|---|
|
When you want to go back to the clean working directory without loosing the
current state of the working directory, you can use " |
|
提示 |
|---|---|
|
If there is a executable file |
|
提示 |
|---|---|
|
GUI tools such as |
你可以使用 Git
工具來手工記錄按時間先後順序的配置歷史。這裏是一個例子,讓你練習記錄"/etc/apt/" 內容。
$ cd /etc/apt/ $ sudo git init $ sudo chmod 700 .git $ sudo git add . $ sudo git commit -a
提交配置,描述此次提交。
對配置文件進行修改。
$ cd /etc/apt/ $ sudo git commit -a
提交配置,說明提交,繼續你的工作。
$ cd /etc/apt/ $ sudo gitk --all
你有全部的配置歷史。
|
注意 |
|---|---|
|
|
|
注意 |
|---|---|
|
在上面例子裏的 " |
|
提示 |
|---|---|
|
要更加完整的建立配置歷史記錄,請參閱 |
看下面。
man 手冊: git(1)
(/usr/share/doc/git-doc/git.html)
Git 用戶手冊
(/usr/share/doc/git-doc/user-manual.html)
git 介紹教程
(/usr/share/doc/git-doc/gittutorial.html)
git 介紹教程:第二部
(/usr/share/doc/git-doc/gittutorial-2.html)
GIT 每一天 20個左右的命令
(/usr/share/doc/git-doc/giteveryday.html)
Git 魔術
(/usr/share/doc/gitmagic/html/index.html)
git-gui(1) 和 gitk(1) 命令使 Git 變得非常容易使用。
|
警告 |
|---|---|
|
不要使用帶空格的標簽字符串。即使一些工具,如 |