Một thư mục là một danh sách các tệp và thư mục con (chính xác hơn, đối với mỗi mục: tên tệp hoặc tên thư mục con, người dùng sở hữu, nhóm sở hữu, bit quyền, quyền mở rộng, con trỏ tới vị trí trên đĩa của tệp/thư mục con và bổ sung siêu dữ liệu bí truyền). Một thư mục có một chủ sở hữu và một nhóm. Các quyền của thư mục kiểm soát người dùng và đọc, viết và đĩa CD
vào thư mục đó. Nếu bạn muốn tạo một tệp trong một thư mục, bạn phải có quyền ghi vào thư mục đó. Nếu bạn muốn xóa một tệp khỏi một thư mục, bạn phải có quyền ghi vào thư mục đó. Nếu bạn muốn đổi tên một tập tin, bạn phải có quyền ghi vào thư mục. Nếu bạn muốn thay đổi quyền của một tệp, bạn phải có quyền ghi vào thư mục. Tất cả những điều này là sửa đổi của thư mục, vì vậy hãy sử dụng quyền của thư mục. (Có những trường hợp ngoại lệ liên quan đến các quyền mở rộng mà tôi đặt sang một bên ở đây.)
Trong phần sau, tôi sẽ tiếp tục viết "mục nhập thư mục bạn sử dụng để truy cập nó" vì có thể có nhiều mục nhập thư mục, do đó có thể có các tên khác nhau, cho một tệp trong hệ thống tệp. Trên thực tế, một số mục trong một thư mục (nhất thiết phải có các tên khác nhau) có thể trỏ đến cùng một tệp trên đĩa và các mục khác nhau có thể có người dùng sở hữu, nhóm sở hữu và quyền khác nhau.
Một mục nhập tệp trong một thư mục có người dùng sở hữu, nhóm sở hữu và quyền. Nếu bạn muốn đọc nội dung của một tệp, mục nhập thư mục bạn sử dụng để truy cập nó phải cho phép bạn truy cập đọc. Nếu bạn muốn ghi nội dung của một tệp, mục nhập thư mục bạn sử dụng để truy cập nó phải cho phép bạn truy cập ghi. Nếu bạn muốn thực thi nội dung của một tệp, mục nhập thư mục bạn sử dụng để truy cập nó phải cho phép bạn thực thi quyền truy cập.
Vì vậy, hãy làm việc thông qua ví dụ của bạn.
- Thư mục làm việc hiện tại là
~/tmp/
, vì vậy người dùng hiện tại là người dùng sở hữu, nhóm sở hữu và có quyền đọc+ghi+thực thi đối với thư mục.
sudo touch c.txt
Điều này tạo ra một tập tin với người dùng sở hữu nguồn gốc
có quyền đọc + ghi, nhóm nguồn gốc
có quyền ghi và quyền ghi cho người dùng khác. (4 = đọc, 2 = ghi, 1 = thực thi; 6 = 4+2 = đọc+ghi)
rm c.txt
có cảnh báo/nhắc nhở "rm: xóa tệp trống thông thường được bảo vệ chống ghi 'c.txt'?
" Cảnh báo này có nghĩa là: người dùng hiện tại có quyền ghi vào thư mục hiện tại, vì vậy có thể xóa tệp này, nhưng người dùng hiện tại chỉ có quyền đọc nội dung của tệp này, điều này cho thấy rằng người dùng hiện tại muốn bảo vệ tệp này trước những thay đổi .Hai ý đồ này không tương thích với nhau nên đề nghị hướng dẫn thêm.
- Lựa chọn
y
và c.txt
bị xóa. Đúng. Bạn có quyền xóa mục khỏi thư mục, vì vậy khi bạn trả lời y
, mục nhập sẽ bị xóa khỏi thư mục. Không có lúc nào nội dung của tệp được ghi hoặc thực thi (đó là điều mà quyền truy cập tệp sẽ không cho phép).
Kịch bản thứ hai của bạn cũng hoạt động, nhưng không phải vì lý do bạn mong đợi. vim
và nhiều, rất nhiều trình soạn thảo khác (bao gồm cả Microsoft Word chẳng hạn), không chỉnh sửa tệp gốc. Họ sao chép tệp, sau đó chỉnh sửa bản sao. Nếu các chỉnh sửa không được lưu, bản sao có thể bị xóa. Nếu các chỉnh sửa được lưu, tệp gốc sẽ bị xóa khỏi thư mục và bản sao được đổi tên thành tên của tệp gốc. Vì vậy, hãy xem những gì sẽ xảy ra.
kiểm tra mkdir
kiểm tra cd
ls -laF
tổng số 8
drwxrwxr-x 2 mờ mờ 4096 31 tháng 10 11:40 ./
drwxr-xr-x 78 mờ mờ 4096 Ngày 31 tháng 10 11:40 ../
Chúng tôi thấy rằng người dùng của tôi, mờ
, và nhóm của tôi, mờ
sở hữu thư mục hiện tại, .
và 775 quyền được đặt (người dùng mờ
: rwx, nhóm mờ
:rwx, khác:rx).
sudo vim d.txt
[cung cấp mật khẩu]
[phiên vim bắt đầu]
[chế độ chèn]Xin chào.
Bây giờ, hãy chuyển sang trình bao khác và xem điều gì đang diễn ra trong thư mục.
[vỏ khác, không sudo ...]
kiểm tra cd
ls -laF
tổng số 20
drwxrwxr-x 2 mờ mờ 4096 31 tháng 10 11:44 ./
drwxr-xr-x 78 mờ mờ 4096 ngày 31 tháng 10 11:44 ../
-rw------- 1 thư mục gốc 12288 Ngày 31 tháng 10 11:44 .d.txt.swp
Chúng tôi thấy rằng sudo vim
đã tạo một tệp tạm thời có tên .d.txt.swp
với chủ sở hữu root.root
và chế độ 600
. Bây giờ hãy quay lại và lưu tệp vào sudo vim
phiên và kiểm tra lại.
ls -laF
tổng số 12
drwxrwxr-x 2 mờ mờ 4096 31 tháng 10 11:48 ./
drwxr-xr-x 78 mờ mờ 4096 31 tháng 10 11:48 ../
-rw-r--r-- 1 gốc gốc 4 ngày 31 tháng 10 11:48 d.txt
Chúng tôi thấy mục nhập thư mục của tệp tạm thời đã được sửa đổi để có tên mới và quyền mới. Người dùng hiện tại ở đây là mờ
, người chỉ có quyền đọc đối với d.txt
, Nhưng đó là tất cả mờ
cần mở tệp trong trình chỉnh sửa.
[phiên đầu tiên, thông báo không sudo...]
vim d.txt
[đi đến cuối dòng đầu tiên]
[ nối thêm. đã cảnh báo: "W10: Cảnh báo: Thay đổi tệp chỉ đọc"]
[nhập một dấu cách sau "Xin chào."]
Ngay sau khi chúng tôi nối thêm
sau Chào.
tệp tạm thời vim xuất hiện trong thư mục.
[Phiên họp thứ hai]
ls -laF
tổng số 16
drwxrwxr-x 2 mờ mờ 4096 31 tháng 10 11:53 ./
drwxr-xr-x 78 mờ mờ 4096 ngày 31 tháng 10 11:52 ../
-rw-r--r-- 1 gốc gốc 4 ngày 31 tháng 10 11:48 d.txt
-rw------- 1 mờ mờ 4096 ngày 31 tháng 10 11:53 .d.txt.swp
Thư mục này có quyền rwx cho người dùng mờ
, vì vậy việc tạo mục nhập này được cho phép. Như bình thường, vim
giữ quyền của các tệp tạm thời rất nghiêm ngặt.
[phần đầu tiên]
[thoát chế độ chèn]
[Esc]: w
[nhận được lỗi: "E45: tùy chọn 'chỉ đọc' được đặt (thêm ! để ghi đè)"]
Điều này có nghĩa là mục nhập thư mục gốc không có quyền ghi cho người dùng hiện tại, mờ
. Điều này thường có ngữ nghĩa rằng tệp không bị sửa đổi, vì vậy vim
có thể tôn trọng những ngữ nghĩa đó hoặc ghi đè lên chúng (vì quyền thư mục cho phép mờ
để loại bỏ d.txt
nhập và đổi tên .d.txt.swp
đến d.txt
). Bạn muốn cái nào?
[phần đầu tiên]
[Esc]:w!
Bạn chọn ghi đè.
Hãy xem những gì đang xảy ra trong thư mục bây giờ.
[Phiên họp thứ hai]
ls -laF
tổng số 28
drwxrwxr-x 2 mờ mờ 4096 31 tháng 10 12:01 ./
drwxr-xr-x 78 mờ mờ 4096 31 tháng 10 12:00 ../
-rw-r--r-- 1 mờ mờ 5 ngày 31 tháng 10 12:01 d.txt
-rw-r--r-- 1 mờ mờ 4 ngày 31 tháng 10 11:48 d.txt~
-rw------- 1 mờ mờ 12288 31 tháng 10 12:01 .d.txt.swp
Có thể bạn không nhìn thấy d.txt~
tập tin. tôi có thể đã bật một vim
tùy chọn để luôn lưu một bản sao lưu của tệp gốc. Tôi không nhớ hành vi mặc định của vim
là đối với tùy chọn này.
Bây giờ có ba tệp:
d.txt
-- phiên bản sửa đổi mà chúng tôi vừa lưu. Nó chứa "Xin chào.". Các lần lưu tiếp theo sẽ thay thế tệp này.
d.txt~
-- một bản sao lưu của tập tin gốc. Nó chứa "Xin chào." Mục nhập thư mục này được tạo bởi một quá trình đang chạy dưới dạng mờ
, như vậy đã mờ
quyền sở hữu và quyền mặc định của.
.d.txt.swp
-- tập tin làm việc hiện tại. Các chỉnh sửa tiếp theo sẽ được tự động lưu định kỳ vào tệp này.
Bây giờ chúng ta hãy kết thúc điều đó vim
phiên họp.
[phần đầu tiên]
[Esc]:q
và một lần nữa xem những gì đang xảy ra trong hệ thống tập tin.
[Phiên họp thứ hai]
ls -laF
tổng số 16
drwxrwxr-x 2 mờ mờ 4096 31 tháng 10 12:05 ./
drwxr-xr-x 78 mờ mờ 4096 ngày 31 tháng 10 12:05 ../
-rw-r--r-- 1 mờ mờ 5 ngày 31 tháng 10 12:01 d.txt
-rw-r--r-- 1 mờ mờ 4 ngày 31 tháng 10 11:48 d.txt~
Cả hai tệp được tạo bởi unprivileged mờ
, như vậy có mờ
quyền sở hữu và quyền mặc định của. mờ
đã có thể tạo và xóa các mục nhập thư mục này vì mờ
có quyền ghi vào thư mục hiện tại, .
.