Thuộc tính tập tin

**Thuộc tính tập tin** hoặc **thuộc tính tệp**/**thuộc tính file** là siêu dữ liệu được liên kết với tập tin máy tính mà xác định hành vi của hệ thống tập tin. Mỗi thuộc tính có thể có một trong hai trạng thái: được thiết lập và xóa (bật hoặc tắt). Các thuộc tính được xem là khác biệt với các siêu dữ liệu khác, phần mở rộng tên tập tin hoặc quyền của hệ thống tập tin. Ngoài các tập tin, thư mục, ổ đĩa và các đối tượng hệ thống tập tin khác có thể cũng có các thuộc tính.

Thông thường trong các hệ điều hành MS-DOS và Microsoft Windows, có bốn thuộc tính: lưu trữ, ẩn, chỉ đọc và hệ thống. Windows đã thêm những thuộc tính mới. Các hệ thống có nguồn gốc từ 4.4BSD-Lite, như các hệ điều hành FreeBSD, NetBSD, OpenBSD, DragonFly BSD, và macOS, có bộ thuộc tính "hệ thống" và "người dùng" riêng biệt; các phiên bản mới hơn của hạt nhân Linux cũng hỗ trợ một tập hợp các thuộc tính tập tin.

## Phân loại

### DOS và Windows
Thông thường trong hệ điều hành DOS và Microsoft Windows, tập tin và thư mục có 4 thuộc tính:

* **Archive** (Lưu trữ): Khi được bật, nó chỉ ra rằng các tập tin lưu trữ đã thay đổi kể từ khi hoạt động sao lưu cuối cùng. Hệ thống tập tin của Windows đặt thuộc tính này trên bất kỳ tập tin nào đã thay đổi. Phần mềm sao lưu sau đó có nhiệm vụ xóa thuộc tính này khi sao lưu thành công.
* **Hidden **(Ẩn): Khi được đặt, nó cho biết tập tin lưu trữ bị ẩn. Các lệnh MS-DOS như dir và các ứng dụng Windows như File Explorer không hiển thị các tập tin ẩn theo mặc định, trừ khi được yêu cầu làm như vậy. 
* **System**: (hệ thống) Khi được đặt, nó cho biết tập tin lưu trữ là tập tin hệ thống quan trọng cần thiết để máy tính hoạt động bình thường. MS-DOS và Microsoft Windows sử dụng nó để đánh dấu các tập tin hệ thống quan trọng. Các lệnh MS-DOS như dir và các ứng dụng Windows như File Explorer không hiển thị tập tin hệ thống theo mặc định ngay cả khi các tập tin ẩn được hiển thị, trừ khi được yêu cầu làm như vậy.
* **Read-only**: (chỉ đọc) Khi được đặt, thuộc tính này cho biết không nên thay đổi tập tin. Khi mở tập tin, API hệ thống tập tin thường không cấp quyền ghi cho ứng dụng yêu cầu, trừ khi ứng dụng yêu cầu một cách rõ ràng. Các thuộc tính chỉ đọc trên các thư mục thường bị bỏ qua, được sử dụng cho một mục đích khác.

Khi các phiên bản Windows mới xuất hiện, Microsoft đã bổ sung vào việc kiểm kê các thuộc tính có sẵn trên hệ thống tập tin NTFS, bao gồm nhưng không giới hạn:

* **Compressed**: (nén) Khi được đặt, Windows sẽ nén tập tin khi lưu trữ. 
* **Encrypted**: (được mã hóa) Khi được đặt, Windows sẽ mã hóa tập tin lưu trữ khi lưu trữ để ngăn truy cập trái phép. 
* **not content-Indexed**: (không được lập chỉ mục nội dung) Khi được đặt, Dịch vụ lập chỉ mục hoặc Tìm kiếm Windows không bao gồm tập tin lưu trữ trong hoạt động lập chỉ mục của chúng.

### 4.4BSD-Lite và các dẫn xuất
Trong các hệ điều hành 4.4BSD và 4.4BSD-Lite, các tập tin và thư mục chấp nhận bốn thuộc tính có thể được thiết lập bởi chủ sở hữu tập tin hoặc siêu người dùng (thuộc tính "Người dùng") và hai thuộc tính chỉ có thể được đặt bởi siêu người dùng (thuộc tính "Hệ thống"):

* **(User) No-dump**: (Người dùng - không lưu) Khi được đặt, nó chỉ ra rằng tập tin hoặc thư mục không nên được lưu trong một thao tác sao lưu.
* **(User and System) Immutable**: (Người dùng và hệ thống - Không thể thay đổi) Khi được đặt, thuộc tính này cho biết tập tin hoặc thư mục sẽ không bị thay đổi. Cố gắng mở tập tin để ghi, tạo tập tin trong thư mục, xóa tập tin khỏi thư mục, đổi tên tập tin trong thư mục, đổi tên tập tin hoặc thư mục hoặc xóa tập tin hoặc thư mục sẽ không thành công với lỗi quyền thao tác.
* **(User and System) Append-only**: (Người dùng và hệ thống - chỉ ghi vào cuối) Khi được đặt, thuộc tính này cho biết tập tin chỉ nên được ghi nối vào.
* **(User) Opaque**: (Người dùng - mờ) Khi được đặt trên một thư mục, thuộc tính này chỉ ra rằng thư mục bị mờ khi được xem qua một ngăn xếp công đoàn (union stack).

Hệ điều hành FreeBSD đã thêm một số thuộc tính bổ sung, cũng được DragonFly BSD hỗ trợ:

* **(User and System) No-unlink**: (Người dùng và hệ thống - Không đổi tên/xóa) Khi được đặt, thuộc tính này cho biết tập tin hoặc thư mục không được đổi tên hoặc xóa. Nỗ lực đổi tên hoặc xóa tập tin hoặc thư mục sẽ không thành công với mã lỗi quyền.

Hệ điều hành FreeBSD cũng hỗ trợ:

* **(System) No-archive**: (Hệ thống - không lưu trữ) Khi được đặt, thuộc tính này cho biết tập tin hoặc thư mục sẽ không được lưu trữ.
* **(System) Snapshot**: (Hệ thống - ảnh chụp nhanh) Khi được đặt, thuộc tính này cho biết tập tin hoặc thư mục là tập tin ảnh chụp nhanh. Thuộc tính này được duy trì bởi hệ thống và không thể được thiết lập, ngay cả bởi siêu người dùng.

Trong khi hệ điều hành BSD DragonFly hỗ trợ:

* **(User and System) No-history**: (Người dùng và hệ thống - Không có lịch sử): Khi được đặt, thuộc tính này cho biết lịch sử không được giữ lại cho tập tin hoặc thư mục.
* **(User) Swapcache**: (Người dùng - Không bộ nhớ đệm trao đổi) Khi được thiết lập, thuộc tính này chỉ ra rằng dữ liệu hệ thống tập tin sạch cho tập tin, hoặc cho thư mục và mọi thứ bên dưới thư mục, nên được lưu trữ trong không gian hoán đổi trên ổ đĩa thể rắn.
* **(System) Swapcache**: (Hệ thống - Không bộ nhớ đệm trao đổi) Khi được đặt, thuộc tính này cho biết rằng dữ liệu hệ thống tập tin sạch cho tập tin hoặc cho thư mục và mọi thứ bên dưới thư mục, sẽ không được lưu trong không gian hoán đổi trên ổ đĩa thể rắn.
* **(System) Archived**: (Hệ thống - đã lưu trữ) Khi được đặt, thuộc tính này cho biết tập tin hoặc thư mục có thể được lưu trữ.

Hệ điều hành NetBSD bổ sung thêm 1 thuộc tính, và cũng được OpenBSD hỗ trợ:

* **(System) Archived**: (Hệ thống - đã lưu trữ) Khi được đặt, thuộc tính này cho biết tập tin hoặc thư mục đã được lưu trữ.

Hệ điều hành macOS thêm 3 thuộc tính:

* **(User) Hidden**: (Người dùng - Ẩn) Khi được đặt, thuộc tính này cho biết tập tin hoặc thư mục không được hiển thị trong GUI; tuy nhiên, ls sẽ hiện thị nó; 
* **(System) Restricted**: (Hệ thống - Bị giới hạn) Khi được đặt, thuộc tính này cho biết tập tin hoặc thư mục sẽ được bảo vệ bởi Hệ thống bảo vệ Tính toàn vẹn.
* **(User and System) Compressed**: (Người dùng và Hệ thống - Đã nén) Thuộc tính chỉ đọc cho các tập tin được nén bằng cách sử dụng Nén HFS+.

Trên hệ điều hành Solaris cho ZFS cũng có các thuộc tính:

* **av_quarantined**: Truy cập vào tập tin bị hạn chế cho đến khi việc quét virus kết thúc.
* **av_modified**: Điều này có nghĩa là phiên bản hiện tại của tập tin không được chương trình diệt vi-rút quét qua.

## Thay đổi thuộc tính
Trong các hệ điều hành DOS, OS/2 và Windows, lệnh `[[attrib]]` trong Cmd.exe và COMMAND.COM có thể được dùng để thay đổi và hiển thị 4 thuộc tính tập tin truyền thống. File Explorer trong Windows có thể hiển thị bảy thuộc tính được đề cập nhưng không thể đặt hoặc xóa thuộc tính Hệ thống. Windows PowerShell, mà đã trở thành một phần của Windows 7 trở đi, có hai lệnh có thể đọc và ghi các thuộc tính: `Get-ItemProperty` và `Set-ItemProperty`. Để thay đổi thuộc tính trên một tập tin trên Windows NT, người dùng phải có Quyền hệ thống tập tin được biết đến như là *thuộc tính cho phép ghi* và *thuộc tính cho phép ghi mở rộng*.

Trong các hệ điều hành 4.4BSD và 4.4BSD-Lite và các dẫn xuất, các lệnh `[[chflags]]` và `[[ls]]` có thể được sử dụng để thay đổi và hiển thị thuộc tính tập tin. Để thay đổi thuộc tính "người dùng" trên một tập tin trong hệ điều hành có nguồn gốc 4.4BSD, người dùng phải là chủ sở hữu của tập tin đó hoặc là siêu người dùng; để thay đổi thuộc tính "hệ thống", người dùng phải là siêu người dùng.

Trong hệ điều hành Linux, các lệnh `[[chattr]]` và `[[chattr#lsattr_description|lsattr]]` có thể được sử dụng để thay đổi và hiển thị thuộc tính tập tin.

Trong hệ điều hành Solaris, người dùng có thể sử dụng lệnh `[[chmod]]` để thay đổi và lệnh `[[ls]]` để xem các thuộc tính.

Trong hầu hết các trường hợp, người dùng phải có quyền truy cập thích hợp để có thể thay đổi thuộc tính của một tập tin.

## Xem thêm
* Thuộc tính tập tin mở rộng
* Nhãn ổ đĩa

## Tham khảo

## Liên kết ngoài
* Định nghĩa của thuộc tính tập tin trên DOS  của PC Magazine