文件複製時可執行
所以我剛買了一個新的三星 T7 攜帶式 SSD。我最初打算將它格式化為 exFAT,以便在 Windows、MacOS 和 Linux 上使用,但經過檢查,該磁碟帶有一個預設文件系統
HPFS/NTFS/exFAT
. 我不知道那是一回事,但我決定測試一下。為了測試它,我簡單地將一些 ASCII 文本文件複製到磁碟上,但無論複製方法和文件副檔名如何,它們都設置了可執行標誌。我不明白為什麼。為什麼會這樣,我該如何避免呢?我希望文件按原樣複製。
顯示更改權限的完整輸出。
user@ubuntu:~$ echo "test text file" > test.txt user@ubuntu:~$ echo "test test test" > test user@ubuntu:~$ echo "print('test')" > test.py user@ubuntu:~$ user@ubuntu:~$ ls -l test* -rw-rw-r-- 1 user user 15 July 18 01:20 test -rw-rw-r-- 1 user user 14 July 18 01:20 test.py -rw-rw-r-- 1 user user 15 July 18 01:20 test.txt user@ubuntu:~$ user@ubuntu:~$ mkdir /media/user/T7/testdir user@ubuntu:~$ cp test /media/user/T7/testdir/ user@ubuntu:~$ rsync test.txt /media/user/T7/testdir/ user@ubuntu:~$ rsync -a test.py /media/user/T7/testdir/ user@ubuntu:~$ user@ubuntu:~$ ls -l /media/user/T7/testdir total 384 -rwxr-xr-x 1 user user 15 July 18 01:23 test -rwxr-xr-x 1 user user 14 July 18 01:20 test.py -rwxr-xr-x 1 user user 15 July 18 01:23 test.txt
在這裡您可以看到我已經嘗試了
cp
,rsync
和rsync -a
,但它們每次都作為執行檔結束。為什麼?編輯:
我嘗試對預設情況下 NTFS 附帶的 WD HDD 執行完全相同的操作。在那裡,文件獲得 777 權限 (
rwxrwxrwx
)。它與磁碟本身有關嗎?顯然我的知識在這裡缺乏。
HPFS/NTFS/exFAT
是一種分區類型。它聲稱該分區包含一種指定的文件系統類型,但這不一定是完整的事實。在掛載分區時嘗試
lsblk -o +FSTYPE
或查看 /proc/mounts 以查看實際的文件系統類型。無論如何,HPFS 不太可能,因此 SSD 很可能已經使用 NTFS 或 exFAT 文件系統進行了格式化。
就 Linux 的使用而言,這兩種文件系統類型都缺乏某種屬性:它們不支持 Unix 風格的所有權/組/權限資訊。
NTFS 具有 ACL,可用於實現 Unix 風格的所有權和權限;如有必要,它甚至可以支持 Linux 的 ACL。但在此之前,Linux NTFS 驅動程序需要一個Unix 風格的使用者和組 ID(UID 和 GID,基本上只是簡單的數字)和 Windows 風格的安全 ID(SID:由破折號分隔的長串數字組)之間的轉換錶)。如果沒有提供,驅動程序將無法知道它應該如何在文件系統上記錄文件權限資訊,並且它會像使用根本不支持使用者和權限概念的文件系統一樣工作。
exFAT 是為可移動媒體設計的文件系統:假設物理上擁有該媒體的人無論如何都可以讀取儲存在其中的所有內容,因此權限沒有多大意義。所以就像 FAT32 和 FAT 家族中的其他文件系統一樣,它根本沒有文件所有權和權限的真正概念,也沒有辦法儲存它們。
但是 Linux - 或任何類 Unix 系統 - 從根本上要求每個文件都必須與某個使用者和某個組相關聯,並且必須至少具有經典的使用者/組/其他權限集,或更複雜的 ACL。所有系統呼叫和作業系統命令都希望每個文件都有這些。因此,如果文件系統不支持這些,文件系統驅動程序需要偽造它們。
為了在文件系統沒有所有權和權限時提供虛假的所有權和權限,NTFS-3G 和 exFAT 文件系統驅動程序都支持一組掛載選項,您可以使用這些選項定義兩組權限:一組用於所有文件,另一組用於所有文件目錄。如果無法將權限資訊儲存到文件系統上每個文件的元數據中,那麼您只能獲得這些資訊。
WD NTFS HDD 和三星 SSD 之間的差異表明三星很可能已經有一個 exFAT 文件系統,而 exFAT 和 NTFS 文件系統只是具有不同的預設設置來偽造權限……或者 NTFS HDD 有一個 ACL在其根目錄上,該目錄將在 Windows 中表示為
Everyone - Full Control
,配置為由任何新文件或子目錄繼承。由於 Windows 中的“Everyone”是一個全域定義的標準 SID,因此它是 Linux NTFS 驅動程序預設能夠理解的極少數 SID 之一。