自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

在 Linux 文件系統(tǒng)中使用 attr 添加擴展屬性

系統(tǒng) Linux
我使用開源的 XFS 文件系統(tǒng)是為了其擴展屬性帶來的小小便利。擴展屬性是一種為我的數(shù)據(jù)添加上下文的獨特方式。

“文件系統(tǒng)” 是一個描述你的計算機怎樣跟蹤你創(chuàng)建的所有文件的完美詞語。你的計算機存儲有大量的數(shù)據(jù),無論是文檔、配置文件還是數(shù)以千計的照片。這需要一種對人和機器都友好的方式。諸如 Ext4、XFS、JFS、BtrFS 的文件系統(tǒng)是你的計算機用來跟蹤文件的“語言”。

你的桌面或終端可以幫助你快速查找文件。例如,你的文件管理器可能有過濾功能,以便讓你可以快速查看家目錄內(nèi)的圖片,它也可能帶有搜索功能以讓你使用文件名定位文件。這些特性被稱作文件屬性,正如其名,它們是由文件頭或者文件系統(tǒng)代碼定義的文件對象的屬性。大多數(shù)的文件系統(tǒng)記錄了標準的文件屬性,例如文件名、文件大小、文件類型、創(chuàng)建時間、上次訪問時間等。

我在我的計算機上使用開源的 XFS 文件系統(tǒng),不是為了其穩(wěn)定性和高性能,而是為了其擴展屬性帶來的小小便利。

常見的文件屬性

當你保存一個文件,文件相關(guān)的數(shù)據(jù)也會隨同保存。常見的屬性會告訴操作系統(tǒng)是否更新訪問時間,什么時間同步數(shù)據(jù)到硬盤等邏輯細節(jié)。哪些屬性被保存取決于底層文件系統(tǒng)的功能和特性。

在標準文件屬性(如果有標準屬性的話)之外,XFS、Ext4 和 BtrFS 文件系統(tǒng)都可以使用擴展屬性。

擴展屬性

XFS、Ext4 和 BtrFs 允許你創(chuàng)建自己的任意文件屬性。由于是自己創(chuàng)建的,操作系統(tǒng)不會有內(nèi)建支持,不過我以“標簽”的方式使用它們,就像圖片的 EXIF 數(shù)據(jù)一樣。開發(fā)者們也許會選擇使用擴展屬性去開發(fā)應(yīng)用內(nèi)的自定義的功能。

XFS 中的屬性有兩個“命名空間”:用戶(user)和根(root)。當創(chuàng)建屬性時,你必須將其加入其中一個命名空間。要將屬性添加到根命名空間,必須使用 sudo 命令或以 root 身份登錄。

增加一個屬性

你可以使用 attr 和 setfattr 命令在 XFS 文件系統(tǒng)中為文件增加屬性。

attr 命令默認在 user 命名空間下進行,所以你只需要為屬性設(shè)置一個名字(-s)和值(-V)。

$ attr -s flavor -V vanilla example.txt
Attribute "flavor" set to a 7 byte value for example.txt:
vanilla

setfattr 命令需要你指定目標命名空間:

$ setfattr --name user.flavor --value chocolate example.txt

列出擴展文件屬性

使用 attr 或者 getfattr 命令可以看已添加到文件上的擴展屬性。attr 命令默認使用 user 空間,使用 -g 以獲取擴展屬性:

$ attr -g flavor example.txt
Attribute "flavor" had a 9 byte value for example.txt:
chocolate

getfattr 命令需要屬性的命名空間和名字:

$ getfattr --name user.flavor example.txt 
# file: example.txt
user.flavor="chocolate"

列出所有擴展屬性

要看一個文件的所有擴展屬性,你可以使用 attr -l

$ attr -l example.txt
Attribute "md5sum" has a 32 byte value for example.txt
Attribute "flavor" has a 9 byte value for example.txt

或者,你也可以使用 getfattr -d

$ getfattr -d example.txt
# file: example.txt
user.flavor="chocolate"
user.md5sum="969181e76237567018e14fe1448dfd11"

擴展文件屬性可以使用 attr 和 setfattr 更新,就像你創(chuàng)建這些屬性一樣:

$ setfattr --name user.flavor --value strawberry example.txt
$ getfattr -d example.txt
# file: example.txt
user.flavor="strawberry"
user.md5sum="969181e76237567018e14fe1448dfd11"

其他文件系統(tǒng)上的屬性

使用擴展屬性最大的風(fēng)險是忘記這些屬性是特定于某個文件系統(tǒng)的。這意味著當你從一個磁盤或分區(qū)復(fù)制文件到另外一個磁盤或分區(qū)時,這些屬性都會丟失,即使目標位置的文件系統(tǒng)也支持擴展屬性。

為了避免丟失擴展屬性,你需要使用支持保留這些屬性的工具,例如 rsync 命令。

$ rsync --archive --xattrs ~/example.txt /tmp/

但無論你使用什么工具,如果你傳輸文件到一個不知道如何處理擴展屬性的文件系統(tǒng),這些屬性都會被丟棄。

搜索屬性

與擴展屬性交互的機制并不多,所以使用這些添加的文件屬性的方法也有限。我使用擴展屬性作為標簽機制,這讓我可以將沒有明顯關(guān)系的文件聯(lián)系起來。例如,假設(shè)我需要在一個項目中用“知識共享”的圖形。假如我預(yù)見性地將 license 屬性添加到了我的圖形庫中,我就可以使用 find 和 getfattr 在圖形文件夾中尋找:

find ~/Graphics/ -type f \
    -exec getfattr \
    --name user.license \
    -m cc-by-sa {} \; 2>/dev/null
# file: /home/tux/Graphics/Linux/kde-eco-award.png
user.license="cc-by-sa"
user.md5sum="969181e76237567018e14fe1448dfd11"

文件系統(tǒng)的秘密

文件系統(tǒng)一般不會引起你的注意。它們實際是定義文件的系統(tǒng)。這不是計算機做的最讓人興奮的任務(wù),也不是用戶應(yīng)該關(guān)心的東西。但是有些文件系統(tǒng)可以給你有趣、安全的特殊能力,擴展文件屬性就是一個好例子。它的用途可能有限,但是擴展屬性是你為數(shù)據(jù)增加上下文的獨特方法。

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2009-12-14 13:33:31

linuxramdisk文件系統(tǒng)

2009-12-22 15:12:33

Linux擴展文件系統(tǒng)

2011-01-25 10:27:12

Linux 文件系統(tǒng)屬

2009-11-06 10:05:18

Linux系統(tǒng)環(huán)境GFS

2009-12-22 13:15:59

Linux ueven

2009-12-10 09:42:07

2020-07-29 07:40:19

Linux系統(tǒng)Vim

2023-09-17 17:35:36

LinuxVeritas文件系統(tǒng)

2018-05-02 08:35:33

LinuxTripwire文件系統(tǒng)

2020-10-29 08:34:48

Linux - tmp

2012-03-09 17:31:50

ibmdw

2011-01-13 14:10:30

Linux文件系統(tǒng)

2022-11-07 12:52:25

Linuxfsck命令

2010-03-16 14:42:16

linux環(huán)境

2020-07-22 14:53:06

Linux系統(tǒng)虛擬文件

2020-05-25 09:09:01

Linux件系統(tǒng)導(dǎo)航

2020-08-28 07:49:19

Linux文件系統(tǒng)

2020-05-22 13:40:09

Linux文件系統(tǒng)

2011-08-18 11:29:31

attr中文man

2021-06-06 16:55:22

Linux文件系統(tǒng)
點贊
收藏

51CTO技術(shù)棧公眾號