lệnh chattr và lsattr

Trên hệ điều hành Linux, chattr sửa đổi các thuộc tính của tệp và lsattr(hiển thị) chúng.

Trong Linux, các thuộc tính tệp là các cờ ảnh hưởng đến cách tệp được lưu trữ và truy cập bởi hệ thống tệp. Chúng là siêu dữ liệu được lưu trữ trong inode liên kết của tệp.

Sự mô tả

chattrlsattr Là một phần của e2fsprogs gói phần mềm, có sẵn theo tên đó trong hầu hết các trình quản lý gói. Trang chủ e2fsprogs được đặt tại http://e2fsprogs.sourceforge.net.

Ghi chú: Các thuộc tính không giống như quyền đối với tệp. Về thông tin về thiết lập quyền, hãy xem chmod.

Cú pháp: chattr

chattr [-R] [-V] [-f] [-v version] [-p project] mode ... file ...

Tùy chọn

chattr có các tùy chọn sau:

-R Thay đổi đệ quy các thuộc tính của thư mục và nội dung của chúng.
-V Cung cấp đầu ra chi tiết và phiên bản chương trình hiển thị.
-f Loại bỏ hầu hết các thông báo lỗi.
-v phiên bản Đặt số phiên bản / thế hệ của tệp. Đây là một số chín chữ số tùy ý được gán cho một tệp khi nó được tạo. Nó không phải là duy nhất. Nó có thể được thay đổi thành bất kỳ số tùy ý nào khác.
-p dự án Đặt số dự án của tệp.
cách thức
tập tin Tệp hoặc các tệp cần thay đổi.

Chuỗi chế độ

Một cách thức chuỗi bao gồm một operator và một hoặc nhiều attributes. Nó có dạng:

{+|-|=}[aAcCdDeijsStTu]

Một trong các toán tử sau phải xuất hiện ở đầu cách thức sợi dây:

tính cách hoạt động
+ Các thuộc tính được liệt kê được thêm vào tệp.
- Các thuộc tính được liệt kê sẽ bị xóa khỏi tệp.
= Các thuộc tính được liệt kê được thêm vào; bất kỳ thuộc tính nào bị bỏ qua sẽ bị xóa.

Phần còn lại của cách thức chuỗi là một số ký tự, mỗi ký tự đại diện cho một thuộc tính. Chúng phân biệt chữ hoa chữ thường, không thể phân tách bằng khoảng trắng và có thể xuất hiện theo bất kỳ thứ tự nào. Để biết danh sách các ký tự thuộc tính, hãy xem:, bên dưới.

Chuỗi chế độ ví dụ là “+caS","-Asd", và "=eAsS“.

Nhiều cách thức chuỗi có thể được chỉ định để kết hợp +- các toán tử trong một lệnh, ví dụ: “+asD -c"và "-a +s +D -c“Đều hợp lệ.

Cú pháp: lsattr

lsattr [-R] [-V] [-a] [-d] [-v] file ...

Tùy chọn

-R Liệt kê đệ quy các thuộc tính của thư mục và nội dung của chúng.
-V Hiển thị phiên bản chương trình.
-a Liệt kê tất cả các tệp trong một thư mục, bao gồm cả những tệp có tên bắt đầu bằng dấu chấm ('.').
-d Liệt kê các thư mục dưới dạng các tệp thông thường, thay vì liệt kê nội dung của chúng.
-v Liệt kê số phiên bản / thế hệ của tệp cùng với các thuộc tính của nó.

Danh sách các thuộc tính

Các ký tự sau đại diện cho các thuộc tính có thể được sửa đổi bởi chattr hoặc được liệt kê với lsattr.

tính cách
thuộc tính
sự mô tả

a
chỉ nối
Tệp chỉ có thể được mở để ghi ở chế độ nối thêm: dữ liệu hiện có của nó có thể không bị ghi đè. Nó không thể bị xóa hoặc đổi tên; liên kết cứng không thể được thực hiện đến tệp này; hầu hết siêu dữ liệu của nó không thể thay đổi được. Việc sửa đổi thuộc tính này yêu cầu quyền root.

A
không có cập nhật thường xuyên
Khi tệp được truy cập, bản ghi thời gian của nó không được sửa đổi, điều này trong một số trường hợp có thể làm giảm I / O đĩa.

c
nén lại
Các tệp có thuộc tính này được nhân tự động nén khi ghi vào đĩa. Nội dung của nó không được nén khi đọc. Lưu ý: Thuộc tính này không có hiệu lực trong hệ thống tệp ext2, ext3 và ext4.

C
không sao chép
Các tệp có thuộc tính này không phải cập nhật sao chép khi ghi. Nếu thuộc tính này được đặt trên một thư mục, các tệp mới được tạo trong thư mục đó sẽ nhận được bộ thuộc tính này. Lưu ý: Thuộc tính này chỉ có hiệu lực trên các hệ thống tệp thực hiện sao chép-ghi. Trên btrfs, thuộc tính này phải được đặt trên tệp mới hoặc tệp trống. Nếu thuộc tính này được đặt sau khi tệp btrfs đã chứa dữ liệu, thì thời gian mà dữ liệu của nó sẽ ổn định là không xác định.

d
không đổ
Các tệp có thuộc tính này bị bỏ qua trong bất kỳ bản sao lưu nào do dumpmột công cụ kế thừa cho hệ thống tệp ext2.

D
cập nhật thư mục đồng bộ
Các thay đổi đối với thư mục có thuộc tính này được ghi đồng bộ vào đĩa. Đó là, hệ thống đợi hoàn thành ghi trước khi làm việc khác. Tương đương với dirsync đến mountđược áp dụng cho một tập hợp con các tệp trên hệ thống tệp.

e
phạm vi khối
Chỉ ra rằng một tệp nên được lưu trữ bằng cách sử dụng các phạm vi khối. Dữ liệu được lưu trữ liền kề giữa hai khối và chỉ hai khối đó phải được biết để tìm dữ liệu của tệp. Ánh xạ mức độ khối có thể tiết kiệm dung lượng đĩa, vì nó làm giảm số lượng khối phải được liệt kê trong inode của tệp.

i
bất biến
Các tệp có thuộc tính này không thể bị xóa hoặc đổi tên; liên kết cứng không thể được thực hiện đến tệp này; hầu hết siêu dữ liệu của nó không thể thay đổi được; dữ liệu không thể được ghi vào tệp. Việc sửa đổi thuộc tính này yêu cầu root hoặc một quy trình có khả năng CAP_LINUX_IMMUTABLE, như được đặt với setcap.

j
tạp chí dữ liệu
Một tệp có thuộc tính này có tất cả dữ liệu của nó được ghi vào nhật ký của nó trước khi được ghi vào chính tệp đó. Chỉ hiệu quả trên các hệ thống tệp ext3 và ext4 đã bật tạp chí và các tùy chọn “data = order” hoặc “data = writeback” được đặt. Nếu tính năng ghi nhật ký được bật trong các hệ thống đó, nhưng tùy chọn “dữ liệu = tạp chí” được đặt, thuộc tính này không có hiệu lực. Chỉ root hoặc một quy trình có khả năng CAP_SYS_RESOURCE như được đặt với setcap có thể thay đổi thuộc tính này.

P
hệ thống phân cấp dự án
Thư mục có thuộc tính này sẽ thực thi cấu trúc phân cấp cho các ID dự án. Các tệp và thư mục được tạo trong thư mục sẽ kế thừa ID dự án của thư mục. Các hoạt động đổi tên bị hạn chế nên khi các tệp hoặc thư mục đó được chuyển sang một thư mục khác, các ID dự án sẽ khớp. Các liên kết cứng đến các tệp này chỉ có thể được tạo nếu ID dự án của đích và đích khớp nhau.

s
xóa an toàn
Nếu một tệp có thuộc tính này bị xóa, dữ liệu của nó sẽ bị ghi đè bằng các số 0, tương tự như một shred. Thuộc tính này bị bỏ qua bởi các hệ thống tệp ext2, ext3 và ext4.

S
cập nhật đồng bộ
Khi các tệp có thuộc tính này được sửa đổi, các thay đổi sẽ được ghi đồng bộ vào đĩa. Tương đương với sync của mountcho các tệp riêng lẻ.

t
không có đuôi hợp nhất
Tệp có thuộc tính này sẽ không có bất kỳ phân đoạn khối nào ở cuối tệp được chia sẻ với dữ liệu của tệp khác. Thuộc tính này cần thiết cho phần mềm như LILO, phần mềm này đọc trực tiếp hệ thống tệp và không biết về việc hợp nhất đuôi. Một số hệ thống tệp không hỗ trợ hợp nhất đuôi, trong trường hợp đó, thuộc tính này không có tác dụng.

T
đầu trang của hệ thống phân cấp thư mục
Thư mục có thuộc tính này được trình phân bổ khối Orlov coi là đỉnh của phân cấp thư mục, được sử dụng bởi ext2 và ext3. Thuộc tính cung cấp một gợi ý cho trình cấp phát rằng các thư mục con không liên quan đến cách chúng được sử dụng và dữ liệu của chúng phải riêng biệt khi các khối được cấp phát. Ví dụ, /home có thể có thuộc tính này, chỉ ra rằng /home/mary/home/john nên được đặt trong các nhóm khối riêng biệt.

u
không thể xóa
Khi một tệp có thuộc tính này bị xóa, nội dung của nó sẽ được lưu lại, giúp chúng có khả năng giảm tốc sau này. Các công cụ phục hồi có thể tận dụng thuộc tính này bao gồm extundelete.

Thuộc tính chỉ đọc

Các thuộc tính sau đây là chỉ đọc. Chúng không thể được đặt hoặc không được đặt bởi chattrnhưng có thể được liệt kê bởi lsattr.

tính cách Ý nghĩa sự mô tả
E lỗi nén Hệ thống tệp không thể tự động nén tệp này.
h tập tin lớn Tệp đang lưu trữ các khối của nó trong các đơn vị kích thước khối của hệ thống tệp thay vì trong các cung. Tệp, hoặc trước đây là, lớn hơn 2 TB.
I thư mục được lập chỉ mục Thư mục đang được lập chỉ mục bằng cây băm (htree).
N dữ liệu nội tuyến Tệp có dữ liệu được lưu trữ nội tuyến, trong chính inode.
X nén truy cập thô Thuộc tính thử nghiệm chỉ ra rằng nội dung thô của tệp nén có thể được truy cập trực tiếp.
Z tập tin bẩn nén Thuộc tính thử nghiệm chỉ ra rằng tệp nén bị bẩn (được viết không hoàn chỉnh).

Các ví dụ

Xem các thuộc tính của tệp

Trong ví dụ này, chúng tôi tạo ba tệp trống với touch:

touch file file2 .file

Chúng tôi có thể xem các quyền của họ với lssử dụng -l:

ls -l
total 8
-rw-rw-r-- 1 hope hope 0 Jun 28 09:51 file
-rw-rw-r-- 1 hope hope 0 Jun 28 09:51 file2

Tên tệp bắt đầu bằng dấu chấm (dấu chấm) không được liệt kê bởi ls trừ khi -a Được sử dụng:

ls -a
total 28
-rw-rw-r-- 1 hope hope 0 Jun 28 09:51 file
-rw-rw-r-- 1 hope hope 0 Jun 28 09:51 .file
-rw-rw-r-- 1 hope hope 0 Jun 28 09:51 file2

Bây giờ chúng ta hãy xem các thuộc tính bằng cách chạy lsattr:

lsattr
-------------e-- ./file
-------------e-- ./file2

Như với lschúng ta phải sử dụng -a để xem các tệp có tên bắt đầu bằng dấu chấm:

lsattr -a
-------------e-- ./file
-------------e-- ./file2
-------------e-- ./.file
-------------e-- ./.
-------------e-- ./..

Để xem các thuộc tính của một tệp hoặc các tệp cụ thể, hãy chỉ định tên của chúng:

lsattr file
-------------e-- file
lsattr -a file file2 .file
-------------e-- file
-------------e-- file2
-------------e-- .file

Xem các thuộc tính của thư mục

Bây giờ, hãy tạo một thư mục và thư mục con với mkdir -p:

mkdir -p dir/subdir

Và tạo một số tệp trống trong các thư mục đó:

touch dir/file3 dir/file4 dir/subdir/file5

Theo mặc định, lsattr không duyệt qua các thư mục:

lsattr
-------------e-- ./file
-------------e-- ./file2
-------------e-- ./dir

Để duyệt đệ quy và hiển thị nội dung của các thư mục, hãy sử dụng -R:

lsattr -R
-------------e-- ./file
-------------e-- ./file2
-------------e-- ./dir
./dir:
-------------e-- ./dir/file3
-------------e-- ./dir/file4
-------------e-- ./dir/subdir
./dir/subdir:
-------------e-- ./dir/subdir/file5

Thay đổi thuộc tính

Theo mặc định, các tệp và thư mục mà chúng tôi đã tạo trong các ví dụ trên (trên Ubuntu 16.04) có thuộc tính "block extents" (e) bộ.

lsattr
-------------e-- ./file
-------------e-- ./file2
-------------e-- ./dir

Hãy cho họ d thuộc tính (thuộc tính cũ, vô nghĩa trên hệ thống của chúng tôi), sử dụng +d.

chattr +d *
lsattr
------d------e-- ./file
------d------e-- ./file2
------d------e-- ./dir

Một số thuộc tính, chẳng hạn như a (append-only), chỉ người dùng root mới có thể sửa đổi:

sudo chattr +a file
lsattr
-----ad------e-- ./file
------d------e-- ./file2
------d------e-- ./dir

Các thuộc tính chỉ áp dụng cho các thư mục, chẳng hạn như D, không được đặt trên các tệp thông thường, thành công - sẽ không có lỗi nào được trả lại. Ví dụ, nếu bạn cố gắng chạy chattr +D trên một tệp thông thường, chattr sẽ không làm gì với các tệp đó và trả về trạng thái thoát thành công.

Lưu ý trong lệnh tiếp theo mà chúng tôi cố gắng thiết lập D thuộc tính trên cả tệp thông thường và thư mục. Thuộc tính được đặt trên thư mục, là không phải đặt trên tệp thông thường, và chattr trả về thành công.

chattr +D file dir && lsattr
-----ad------e-- ./file
------d------e-- ./file2
---D--d------e-- ./dir

Để bỏ đặt một thuộc tính, hãy sử dụng - trước danh sách các thuộc tính của bạn.

chattr -D dir && lsattr
-----ad------e-- ./file
-------------e-- ./file2
-------------e-- ./dir

Chỉ một toán tử có thể được chỉ định cho mỗi cách thức chuỗi, nhưng bạn có thể chỉ định nhiều thuộc tính lần lượt (không có khoảng trắng), theo bất kỳ thứ tự nào. Bạn có thể chỉ định nhiều cách thức các chuỗi, mỗi chuỗi có toán tử riêng.

chattr +sSc -d * && lsattr
s-S--a--c-----e---- ./file
s-S-----c-----e---- ./file2
s-S-----c-----e---- ./dir

Nếu một thuộc tính yêu cầu đặc quyền root, nhưng bạn không chạy lệnh với tư cách root, chattr sẽ không thay đổi không tí nào các thuộc tính cho tệp đó. Nó sẽ tiếp tục cố gắng hoạt động trên các tệp khác và khi hoàn thành, nó sẽ trả về trạng thái thoát không thành công (lỗi).

Để minh họa điều này, trong lệnh tiếp theo, chúng tôi sẽ cố gắng thiết lập a thuộc tính trên mọi tệp trong thư mục hiện tại mà không cần sử dụng sudo. Điều này sẽ không thành công (trừ khi chúng tôi đăng nhập bằng quyền root), bởi vì thiết lập a yêu cầu đặc quyền siêu người dùng.

Ngoài ra, lưu ý rằng trong lệnh tiếp theo, chúng tôi sử dụng echo để hiển thị giá trị của tham số đặc biệt bash ? (một dấu chấm hỏi). ? chứa trạng thái thoát của lệnh trước đó, vì vậy nó sẽ cho chúng tôi biết nếu chattr đã thành công (0) hoặc không thành công (1). Giống như tất cả các tham số bash, chúng tôi đề cập đến giá trị của nó bằng cách thêm tiền tố vào tên của nó với $.

chattr -sS +a *; echo $?
chattr: Operation not permitted while setting flags on dir
chattr: Operation not permitted while setting flags on file2
1

Trạng thái thoát 1 chỉ ra một lỗi đã xảy ra.

Hãy xem các thuộc tính đã thay đổi như thế nào:

lsattr
-----a--c-----e---- ./file
s-S-----c-----e---- ./file2
s-S-----c-----e---- ./dir

Thông báo rằng file không gây ra lỗi. Nó đã có a từ một lệnh trước đó, vì vậy nó không gây ra lỗi; và vì vậy phần còn lại của những thay đổi (-sS) hoàn thành. Cả tệp và thư mục khác đều gây ra lỗi và hoàn toàn không thay đổi.

Để đặt mọi tệp khớp với một tập hợp thuộc tính rõ ràng, hãy sử dụng = nhà điều hành. Mọi thuộc tính được liệt kê sẽ được đặt và bất kỳ thuộc tính nào không được liệt kê sẽ không được đặt.

sudo chattr -R =es * && lsattr -R
s----------e---- ./file
s----------e---- ./file2
s----------e---- ./dir
./dir:
s----------e---- ./dir/file3
s----------e---- ./dir/file4
s----------e---- ./dir/subdir
./dir/subdir:
s----------e---- ./dir/subdir/file5

Làm cho tệp bất biến

Nếu bạn đặt i thuộc tính, một tệp sẽ được đánh dấu là "không thể thay đổi", có nghĩa là dữ liệu của nó (và một số siêu dữ liệu quan trọng) không thể thay đổi, ngay cả bởi gốc, cho đến khi thuộc tính không được đặt.

touch immutable && lsattr immutable
--------------e---- immutable
sudo chattr +i immutable && lsattr immutable
----i---------e---- immutable
mv immutable newname
mv: cannot move 'immutable' to 'newname': Operation not permitted
rm immutable
rm: cannot remove 'immutable': Operation not permitted
sudo rm -f immutable
rm: cannot remove 'immutable': Operation not permitted

Bạn không thể tạo một liên kết cứng đến một tệp không thể thay đổi:

ln immutable hardlink
ln: failed to create hard link 'hardlink' => 'immutable': Operation not permitted

Tuy nhiên, các liên kết tượng trưng là OK:

ln -s immutable symlink && ls -l symlink
lrwxrwxrwx 1 hope hope 6 Jun 29 07:49 symlink -> immutable

Đây là thời điểm tốt để lưu ý rằng các liên kết tượng trưng không có thuộc tính:

lsattr symlink
lsattr: Operation not supported While reading flags on symlink

Để làm cho các tệp có thể thay đổi một lần nữa, hãy sử dụng -i:

sudo chattr -i immutable && mv immutable newname && lsattr newname
--------------e---- newname

Đặt tệp chỉ ở chế độ nối thêm

Thuộc tính append-only (a) làm cho một tệp không thể thay đổi, ngoại trừ dữ liệu có thể được thêm vào nó.

touch appendonly && lsattr appendonly
--------------e---- appendonly
sudo chattr +a appendonly && lsattr appendonly
-----a--------e---- appendonly

Bạn không thể ghi đè tệp bằng chuyển hướng (>):

echo "Overwriting is not allowed." > appendonly
bash: appendonly: Operation not permitted

Nhưng chuyển hướng chỉ phần phụ (>>) là được:

echo "Appending is allowed." >> appendonly && cat appendonly
Appending is allowed.
echo "Appending is allowed." >> appendonly && cat appendonly
Appending is allowed.
Appending is allowed.

Các tệp chỉ nối không được di chuyển, xóa, đổi tên hoặc liên kết cứng.

sudo rm -f appendonly
rm: cannot remove 'appendonly': Operation not permitted
sudo ln appendonly hardlink
ln: failed to create hard link 'hardlink' => 'appendonly': Operation not permitted

chown - Thay đổi quyền sở hữu tệp hoặc thư mục.
chmod - Thay đổi quyền của tệp và thư mục.
ls - Liệt kê nội dung của một thư mục hoặc các thư mục.
Trên đây là Cách sử dụng lệnh chattr và lsattr trong Linux [Detailed Guide]. Tôi hy vọng bài viết này cung cấp thông tin hữu ích cho bạn. Chúng tôi rất muốn nghe đề xuất và câu hỏi của bạn, vì vậy hãy liên hệ helpsly.net hoặc để lại cho chúng tôi một bình luận.