在 Linux 環境下,有效管理資料和儲存裝置對於系統管理員和資安人員至關重要。本文將介紹常用的壓縮、封存工具,例如 tar、gzip、bzip2 和 compress,以及如何使用它們來封裝、壓縮和解壓縮檔案。此外,我們還會探討 dd 命令的應用,它可以用於建立磁碟映像和進行檔案救援。接著,我們將深入瞭解 Linux 檔案系統的架構,特別是 /dev 目錄下儲存裝置的表示方式,以及如何掛載和管理這些裝置。理解這些概念能幫助你更有效率地操作 Linux 系統,並在資安領域中進行更深入的分析和操作。
壓縮與封存
在資訊安全領域中,駭客經常需要下載和安裝新軟體,並且傳送和接收多個指令碼和大型檔案。這些任務在檔案被壓縮並合併成一個檔案後會變得更加方便。對於來自Windows世界的使用者來說,這個概念可能會讓人想到.zip格式,它將多個檔案壓縮成一個較小的檔案,方便透過網路或可移動媒體傳輸。在Linux中,有多種方法可以實作這一目標,本章將探討一些最常見的工具。此外,本章還會介紹dd命令,該命令允許你複製整個磁碟,包括該磁碟上的已刪除檔案。
壓縮技術
壓縮技術本身是一個有趣的主題,可能會填滿整本文的內容。但對於這本文來說,我們只需要對這個過程有一個基本的瞭解。壓縮,顧名思義,是使資料變小的過程,從而減少儲存容量需求並使資料更易於傳輸。作為初學駭客,分類別壓縮為無失真壓縮和有失真壓縮就足夠了。
有失真壓縮非常有效地減少了檔案的大小,但會失去資訊的一致性。換句話說,壓縮後的檔案不完全等同於原始檔案。這種型別的壓縮非常適合圖形、影片和音訊檔案,因為這些檔案中的小差異幾乎是無法察覺的。例如.mp3、.mp4、.png和.jpg都是有失真壓縮演算法。如果.png檔中的畫素或.mp3檔中的單一音符發生變化,你的眼睛或耳朵不太可能注意到差異——儘管音樂愛好者會說他們能夠明顯區分.mp3和未壓縮的.flac檔之間的差異。
有失真壓縮最重要的優點是其高效性和有效性。壓縮比非常高,這意味著結果檔案比原始檔案小得多。
然而,當你需要傳送檔案或軟體時(尤其是當資料完整性至關重要時),有失真壓縮是不可接受的。例如,如果你正在傳送指令碼或檔案,當它被解壓縮時必須保留原始檔案的一致性。因此本章主要介紹無失真壓縮這種形式的壓縮技術。
使用tar命令封存檔案
通常在開始進行檔案壓縮時,我們會先將它們合併成一個封存。在大多數情況下,我們會使用tar命令來進行封存操作。Tar是Tape Archive(磁帶封存)的簡稱,「Tape」指的是電腦發展早期使用磁帶來儲存資料的時代。「Archive」則是指將多個檔案封裝成一個單一檔案的過程。
假設你有一些指令碼檔案(如之前提到的三個指令碼檔案),並希望將它們傳送給另一位駭客同伴以進行協作專案。你可以使用以下命令將它們合併成一個封存檔案:
kali > tar -cvf HackersArise.tar hackersarise1 hackersarise2 hackersarise3
接下來我們來拆解這個命令:
tar: 是封存命令。-c: 建立新封存。-v: 詳細模式(可選),列出正在處理的檔案。-f: 指定要寫入或讀取的封存檔名稱。HackersArise.tar: 新建立的封存檔名稱。
內容解密:
此命令將三個檔案合併成一個名為 HackersArise.tar 的單一封存檔案。當我們執行這個命令後,可以看到目錄中包含了新建立的 .tar 封存檔案:
kali > ls -l
rwrr 1 root root 40960 Nov 27 2018 13:32 HackersArise.tar
請注意此處 HackersArise.tar 的大小為40,960位元組。當三個檔案被封存時,「tar」命令會消耗顯著的開銷來執行此操作:雖然三個檔案在封存前總共大小為35,094位元組,但在封存後卻增長到40,960位元組。換句話說,「tar」命令進行封存操作時增加了超過5,000位元組開銷。
對於小型檔案而言,此開銷可能非常顯著;但隨著檔案數量增加以及大小增大,「tar」命令對於資料傳輸而言會變得越來越有效率。
檢視與解壓縮
我們可以透過以下命令檢視 .tar 中包含哪些檔案內容而不進行實際解壓縮:
kali > tar -tvf HackersArise.tar
這樣我們可以看到我們原始三個檔案及其大小。
接下來我們可以透過以下方式從 .tar 中解壓出我們原始三個檔案:
kali > tar -xvf HackersArise.tar
檔案壓縮與解壓縮技巧
在 Linux 環境中,檔案的壓縮與解壓縮是日常操作中的重要環節。玄貓將帶你深入瞭解如何使用 tar、gzip、bzip2 和 compress 等工具來處理檔案的壓縮與解壓縮,並介紹如何使用 dd 命令來進行位元組級別的檔案複製。
使用 tar 命令進行檔案封裝與解封裝
tar 是 Linux 中最常用的檔案封裝工具,可以將多個檔案封裝成一個 .tar 檔案。以下是一些基本的使用方法:
# 建立一個名為 HackersArise.tar 的封裝檔案
kali > tar -cvf HackersArise.tar hackersarise1.sh hackersarise2.sh hackersarise3.sh
在這個命令中:
-c表示建立一個新的封裝檔案。-v表示顯示詳細資訊,方便檢視正在封裝的檔案。-f表示指定封裝檔案的名稱。
如果你想要「靜默」地解壓縮檔案,可以移除 -v 選項:
# 解壓縮檔案並不顯示詳細資訊
kali > tar -xf HackersArise.tar
內容解密:
tar -cvf:這個命令用於建立一個新的封裝檔案。-c表示建立,-v表示顯示詳細資訊,-f表示指定封裝檔案的名稱。tar -xf:這個命令用於解壓縮檔案。-x表示解壓縮,-f表示指定封裝檔案的名稱。
使用 gzip 壓縮
GNU zip(gzip)是 Linux 中最常用的壓縮工具之一。它可以將檔案壓縮成 .tar.gz 或 .tgz 檔案。
# 壓縮 HackersArise.tar 檔案
kali > gzip HackersArise.*
內容解密:
gzip HackersArise.*:這個命令會將所有以HackersArise.開頭的檔案進行壓縮,並更改其副檔名為.tar.gz.gunzip HackersArise.*:這個命令會將所有以HackersArise.開頭且副檔名為.tar.gz的檔案進行解壓縮。
使用 bzip2 壓縮
bzip2 是另一種常用的壓縮工具,它的壓縮比率比 gzip 高,但速度較慢。它會將檔案壓縮成 .tar.bz2 檔案。
# 壓縮 HackersArise.tar 檔案
kali > bzip2 HackersArise.*
內容解密:
bzip2 HackersArise.*:這個命令會將所有以HackersArise.開頭的檔案進行壓縮,並更改其副檔名為.tar.bz2.bunzip2 HackersArise.*:這個命令會將所有以HackersArise.開頭且副檔名為.tar.bz2的檔案進行解壓縮。
使用 compress 壓縮
compress 是一種較少使用的壓縮工具,但它易於記住。它會將檔案壓縮成 .tar.Z 檔案。
# 壓縮 HackersArise.tar 檔案
kali > compress HackersArise.*
內容解密:
compress HackersArise.*:這個命令會將所有以HackersArise.開頭的檔案進行壓縮,並更改其副檔名為.tar.Z.uncompress HackersArise.*:這個命令會將所有以HackersArise.開頭且副檔名為.tar.Z的檔案進行解壓縮。
使用 dd 命令進行位元組級別複製
在資安領域中,dd 命令非常重要。它可以進行位元組級別的複製,這意味著即使已刪除的檔案也會被複製。這對於數位取證和檢查系統中的潛在威脅非常有用。
以下是一些基本使用方法:
# 建立一個 U 錄式備份副本檔案
kali > dd if=/dev/sdb of=/root/flashcopy bs=4096 conv=noerror
內容解密:
dd if=/dev/sdb of=/root/flashcopy bs=4096 conv=noerror:這個命令會將/dev/sdb中所有資料完整備份到/root/flashcopy. 引數說明如下:if=/dev/sdb:輸入裝置,此處為/dev/sdb,可以是任何裝置,比如硬碟或光碟機.of=/root/flashcopy:輸出裝置,此處為一個備份副本.bs=4096:塊大小,即每次讀寫多少位元組資料.conv=noerror:繼續複製,即使遇到錯誤也不會停止.
玄貓希望這些資訊能夠幫助你更好地理解和使用 Linux 中的壓縮與解壓縮工具,以及如何進行位元組級別的資料複製。透過這些技術,你可以更高效地管理和保護你的資料。
Linux 系統中資料管理與儲存裝置
在從 Windows 環境轉換到 Linux 的過程中,你會發現 Linux 對儲存裝置的表示及管理方式與 Windows 相差甚遠。Linux 的檔案系統並不像 Windows 那樣有 C:、D: 或 E: 等實體磁碟表示,而是以檔案樹結構來表示,而 / 是此檔案樹的根目錄。本章將探討如何在 Linux 中處理儲存裝置,如硬碟、快取碟及其他儲存裝置。
首先,我們將學習如何在這個檔案系統中掛載額外的磁碟或儲存裝置。掛載這裡的意思是將磁碟或硬碟附加到檔案系統上,使其對作業系統可見且可用。對於駭客來說,瞭解目標系統中的檔案與儲存裝置管理系統至關重要。駭客通常使用外部媒體載入資料、駭客工具,甚至是作業系統。一旦進入目標系統,你需要理解自己所面對的環境、找到機密檔案或其他重要檔案的位置、如何將驅動器掛載到目標上,以及可以將檔案放在目標系統中的位置。本章涵蓋了所有這些主題,並介紹瞭如何管理和監控儲存裝置。
裝置目錄 /dev
首先,我們來看看 /dev 目錄。這個目錄包含了所有已連線裝置的檔案表示形式。讓我們從一些基本操作開始。
初探 /dev
進入 /dev 目錄並執行長格式列表(long listing)命令,可以看到以下內容:
kali >cd /dev
kali >ls -l
total 0
crw------- 1 root root 10,175 May 16 12:44 agpgart
crw------- 1 root root 10,235 May 16 12:44 autofs
drwxr-xr-x 1 root root 60 May 16 12:44 block
...
lrwxrwxrwx 1 root root 3 May 16 12:44 cdrom -> sr0
...
drwxr-xr-x 2 root root 60 May 16 12:44 cpu
...
列出的裝置按字母順序顯示。你可能會認識其中的一些裝置,如 cdrom 和 cpu ,但也有一些名稱非常隱晦的裝置。每個裝置在 /dev 裡都有自己的檔案表示形式,包括你可能從未使用過或意識到其存在的裝置。
當你向下滾動時,會看到更多裝置列表。特別要注意的是 sda1、sda2、sda3、sdb 和 sdb1 ,這些是硬碟及其分割槽、USB 快取碟及其分割槽的表示形式:
brw-rw----+ 1 root disk 8, 0 May 16 12:44 sda
brw-rw----+ 1 root disk 8, 1 May 16 12:44 sda1
brw-rw----+ 1 root disk 8, 2 May 16 12:44 sda2
brw-rw----+ 1 root disk 8, 5 May 16 12:44 sda5
brw-rw----+ 1 root disk 8, 16 May 16 12:44 sdb
brw-rw----+ 1 root disk 8, 17 May 16 12:44 sdb1
Linux 儲存裝置的表示方式
Linux 應用邏輯標籤來表示驅動器並將其掛載到檔案系統上。這些邏輯標籤會隨著驅動器掛載位置的變化而變化,意味著同一個硬碟可能會在不同時間和位置有不同的標籤。
原本 Linux 用 fd0 和 hda 分別表示軟碟和硬碟(還記得軟碟嗎?)。雖然現代大部分軟碟已經消失(幸好),但一些舊型硬碟仍然存在於一些 Legacy Linux 作業系統中。Serial ATA(SATA)介面和 Small Computer System Interface(SCSI)硬碟通常用 sda、sdb 或類別似的形式表示。
驅動器可以分成多個稱為分割槽的部分,這些分割槽在命名系統中用數字來表示。
| Device file | Description |
|-------------|------------------------------|
| sda | 第一個 SATA 快速硬碟 |
| sdb | 第二個 SATA 快速硬碟 |
| sdc | 第三個 SATA 快速硬碟 |
| sdd | 第四個 SATA 快速硬碟 |
本章練習
在進行到下一章之前,請嘗試完成以下練習來鞏固你在本章學到的技能:
建立三個指令碼
# 建立三個指令碼檔案
echo 'echo "This is script one"' > Linux4Hackers.sh
echo 'echo "This is script two"' > Linux4Hackers2.sh
echo 'echo "This is script three"' > Linux4Hackers3.sh
# 處理許可權問題(可能不需要)
chmod +x Linux*
建立 tarball
# 建立 tarball 檔案並觀察大小變化
tar -cvf L4H.tar Linux*sh
# 檢視 tarball 的大小和原始檔案大小總和進行比較
du -sh L4H.tar *.sh
# 控制是否覆寫現有檔案 (如已存在)
tar -cvf L4H.tar *.sh --skip-old-files
壓縮與解壓縮 tarball
# 壓縮 tarball 檔案並觀察大小變化
gzip L4H.tar
# 檢視壓縮後檔案大小與未壓縮前檔案比較
du -sh L4H.tar.gz L4H.tar
# 控制是否覆寫現有檔案 (如已存在)
gzip -c L4H.tar > L4H_new.tar.gz
# 說明 gzip 的覆寫控制方法:使用 -c (stdout) 和重導向到新檔名來避免覆寫現有檔案。
其他壓縮工具測試
# 測試 bzip2 工具壓縮與解壓縮 tarball 檔案並觀察大小變化(同 gzip 操作)
bzip2 L4H.tar
# 測試 compress 工具壓縮與解壓縮 tarball 檔案並觀察大小變化(同 gzip 操作)
compress L4H.tar
建立物理副本
# 測試 dd 命令建立物理副本(即 bit-by-bit copy):
dd if=/dev/sdX of=/path/to/backup.img bs=M status=progress && sync
# 注意:請確保替換 /dev/sdX 和 /path/to/backup.img 中的 X 和路徑為實際值。
預計效果圖示
此圖示展示了 Linux 中各種儲存裝置及其相應檔案之間的關係:
graph TD;
A[/] --> B[/dev];
B --> C[sda];
B --> D[sdb];
B --> E[cdrom];
C --> C_0[/dev/sda];
C --> C_5[/dev/sda5];
D --> D_0[/dev/sdb];
D --> D_5[/dev/sdb5];
內容解密:
- 整體架構:展示了根目錄
/下的/dev資料夾中包含多種儲存裝置。 - 詳細描述:詳細說明瞭每個主要儲存裝置(例如
sda,sdb,cdrom)及其子裝置(例如分割槽)。 - 適用情境:適合於理解 Linux 中如何對映實體儲存裝置至虛擬檔案系統。
