[Series] [Linux programming] Những khái niệm cơ bản [Part 4]
LINUX và 1 vạn câu hỏi vì sao
1. Cây thư mục:
Khác với Windows, Linux kernel quản lí chỉ một cây thư mục duy nhất, và ở level cao nhất là root (slash /). root là nơi bắt đầu của tất cả file và thư mục.
/ - root /bin - chương trình của user /sbin - chương trình hệ thống /etc - các file cấu hình /dev - lưu trữ file thiết bị /tmp - file tạm, mất khi reboot /proc - file tiến trình /var - lưu file biến của chương trình /usr - chương trình và cài đặt của user (L2) /home - đơn giản là home thôi :v /boot - chứa file dùng booting: initrd, vmlinux, grub /lib - tài nguyên thư viện hệ thống /mnt - thư mục dùng để mount tạm thời file hệ thống /media - dùng cho các thiết bị external: flash, cdrom
2. File types - kiểu dữ liệu tệp:
Đúng với triết lí của Linux: "Everything is a file" - mọi thứ đều có thể được biểu diễn dưới dạng tệp. Một số loại hình tệp quan trọng trên Linux có thể kể đến:
-: regular file - file thông thường d: directory file - file "thư mục" l: link file - file liên kết, bao gồm symbolic link (soft) và normal link (hard) c: character device file b: block device file s: socket file - e.g. IPC UNIX_SOCKET p: named pipe file - e.g. IPC FIFO
3. Ownership & Permissions - Phân quyền:
Khi nói đến phân quyền trong Linux, ta nói đến 3 quyền cơ bản khi dùng tệp của user/group/other:
+READ: quyền đọc file
+WRITE: quyền ghi/ghi đè/chỉnh sửa nội dung file
+EXECUTE: quyền thực thi/truy cập
minhm@DESKTOP-OSU08TV ~/Application Data $ ls -al total 19 drwx------+ 1 minhm minhm 0 Feb 26 00:39 . drwx------+ 1 minhm minhm 0 Feb 5 05:53 .. drwx------+ 1 minhm minhm 0 Feb 5 06:04 Adobe drwx------+ 1 minhm minhm 0 Feb 14 18:52 Microsoft drwx------+ 1 minhm minhm 0 Mar 5 16:01 ZaloData -rwx------+ 1 minhm minhm 66 Mar 5 2024 z_u.txt -rwx------+ 1 minhm PC 25 Feb 26 00:18 zmeta.json ...
Cấu trúc của output lệnh ls -al như sau:
-rwxrw-r-- 1 vboxfs root 2048 Jan 13 07:11 afile.exe ------------------------------------------ [-]: loại file [rwx------]: chỉ số phân quyền [1]: số lượng hard links [vboxfs]: người dùng [root]: nhóm của người dùng [2048]: kích thước tệp [Jan 13 07:11]: lần hiệu chỉnh cuối [afile.exe]: tên tệp ------------------------------------------
Các chỉ số phân quyền được kí hiệu là r/w/x, và theo thứ tự sẽ lần lượt là bit 0, 1, 2 cho từng nhóm user/group/others. others là nhóm người dùng không phải user và cũng không thuộc vào group. Khi định chỉ số phân quyền, có thể dùng 2 cách:
chmod [OPTIONS] [ugoa…][-+=]perms…[,…] FILE... INPUT: rw-rw-r-- $ sudo chmod u+x <file> OUTPUT: rw-rw-r-x INPUT: rw-rw-r-- $ sudo chmod +x <file> OUTPUT: rwxrwxr-x chmod [OPTIONS] NUMBER FILE... INPUT: rw-rw-r-- $sudo chmod 775 <file> OUTPUT: rwxrwxr-x INPUT: rw-rw-r-- $sudo chmod 700 <file> OUTPUT: rwx------
Cách 1: Symbolic - sử dụng kí tự ugoa - user:group:others:all (a=ugo). Cách này cho phép cài đặt chỉ số phân quyền thông qua các cờ (flags) của câu lệnh chmod. Cờ đầu tiên [ugoa...] cho phép thiết lập đối tượng được phân quyền, trong khi đó cờ thứ hai [-+=] dùng như các thao tác thêm, bớt, thay đổi phân quyền ("=" cho phép xóa toàn bộ quyền khác trừ quyền được chỉ định, nếu không có quyền chỉ định thì toàn bộ về 0).
INPUT: rw-rw-r-- $ sudo chmod g=x <file> OUTPUT: rw---xr-x INPUT: rw-rw-r-- $ sudo chmod u=rwx,g=,o=wx <file> OUTPUT: rwx----wx INPUT: rw-rw-r-- $ sudo chmod ug-rw <file> OUTPUT: ------r--
Cách 2: Numeric - sử dụng tổng giá trị nhóm bit - 0,1,2. Mỗi nhóm bit sẽ gồm 3 bits tương ứng với r/w/x. Giá trị phân quyền của 1 đối tượng chính là tổng các bit, tính theo hệ thập phân (dec).
INPUT: rw-rw-r-- $ sudo chmod 456 <file> OUTPUT: r--r-xrw- INPUT: rw-rw-r-- $ sudo chmod 777 <file> OUTPUT: rwxrwxrwx
Đôi khi ta thấy trên một số server Linux dùng 4-digits để phân quyền. vậy digit đầu tiên mang ý nghĩa gì?
chmod 1777 <file>
digit đầu tiên này cũng bao gồm 3 bits set: setuid/setgid/sticky. Thông thường nếu không sử dụng (=0) thì digit này có thể được giản lược.
setuid bit: (files only) ~Bit này được dùng trong thực thi tệp, sẽ chạy tệp dưới quyền user đã tạo tệp - không phải user khởi chạy tệp. [-rwsr-xr-x minh root 2447 Aug 29 2018 /etc/passwd] setgid bit: (both files & dirs) ~Đối với tệp, bit này giúp tệp ưu tiên chạy dưới quyền group mà tệp thuộc về. [-rwxrwsr-x minh root 1427 Aug 2 2019 sample_file] ~Đối với đường dẫn, tất cả các tệp hoặc đường dẫn con của đường dẫn có phân quyền hiện tại sẽ thuộc về và chỉ có thể được sử dụng bởi users trong group đó. [drwxrwsr-x minh root 1427 Aug 2 2019 sample_dir] sticky bit: (programs and dirs) ~dùng trong lưu trữ text segment của một chương trình trong swap space, kể cả khi chương trình dừng, dùng để tăng tốc độ chạy của chương trình về sau (giống giống cookie :v). Thông thường sticky bit hay được dùng với các tệp cấu hình (config files). ~Đối với đường dẫn được set sticky bit, đường dẫn đó và cả các tệp bên trong chỉ có thể được xóa hoặc đổi tên bởi root user, non-root user sở hữu đường dẫn hoặc của tệp.
Tiếp theo: Lập trình hệ thống
Khoa học - Công nghệ
/khoa-hoc-cong-nghe
Bài viết nổi bật khác
- Hot nhất
- Mới nhất