Giải ngố Linux – Phần 3: Tìm kiếm, thao tác với file và quản lý quyền với Linux Command Line

Tiếp theo nội dung Phần 2 – Linux Filesystem và các đòn cơ bản để duyệt và quản lý file với Command Line, kỳ này tôi lại tiếp tục sa lầy vào đám Command Line. Nội dung chính được tập trung sẽ bao gồm vấn đề tìm kiếm, thao tác với file và quản lý quyền.

Vâng, tôi đồng ý với suy nghĩ của bạn, nội dung cái vẹo gì mà nghe chán bỏ mịa! Và do vậy, nếu không phải bạn đang muốn coi cách sử dụng một command cụ thể trong bài này, tôi nghĩ bạn chỉ nên xem qua để nắm sơ lược vấn đề. Khi nào đụng tình huống thực tế liên quan cần sử dụng thì quay lại đây để xem kỹ thêm.

#1 Command line để tìm kiếm và thao tác với file

#1.1 Tìm kiếm file và nội dung trong file

Với vấn đề này bạn sẽ có 2 chiêu cơ bản sau:

find

  • Mục đích: tìm file trong thư mục theo các tiêu chuẩn
  • Cú pháp: find directory_name criteria

Lưu ý:

  • Với thằng này phổ biến nhất là option -name file_name;
  • Wildcards “*” có thể được sử dụng trong quá trình tìm kiếm để thay thế cho phần bạn không nhớ rõ hoặc không quan tâm trong criteria.
find command
find command

grep

  • Mục đích: tìm nội dung của file và trích xuất các dòng khớp với regular expression. Đây là phương án chuẩn nếu bạn nhớ mang máng một phần nội dung file mà lại quên mịa file tên chính xác là gì.
  • Cú pháp: grep expression file_name (có thể dùng Wildcards “*”)
grep command
grep command

Lưu ý: option -r sẽ cho phép recursive search (tìm dạng đệ quy) tất cả file trong thư mục.

#1.2 Hiển thị và chỉnh sửa file text cơ bản

Với mục tiêu hiển thị để xem đơn thuần thì bạn có thể dùng:

cat – concatenate

  • Mục đích: đọc file và hiển thị nội dung ra terminal
  • Cú pháp: cat file_name

Lưu ý: Trường hợp file nội dung dài, bạn có thể dùng less/more để hiển thị theo trang

Trường hợp bạn cần đọc/tạo/sửa file thì chuyển sang phương án cao cấp hơn là editor command như vi/vim/nano. Để hình dung ngữ cảnh sử dụng thực tế bạn có thể xem thêm bài Tạo Private Key và ký Certificate cho VPN Server, VPN Client và cấu hình OpenVPN Server. Trong nội dung này, khi cấu hình OpenVPN Server tôi có sử dụng nano để chỉnh sửa file server.conf với command:

 nano /etc/openvpn/server.conf

Sử dụng nano chỉnh sửa file
Sử dụng nano chỉnh sửa file

Trường hợp muốn tạo file đơn giản từ command redirection (nghĩa là lấy đầu ra của command phọt ra để ghi vô file), bạn có thể dùng:

  • command > file_name: tạo file từ output của command
  • command >> file_name: đính kèm output của command vào file hiện hữu
Command redirection
Command redirection

#2 Rights management (Quản lý quyền) Command Line

#2.1 Các nhóm user và quyền cơ bản

Cái này thì Windows hay Linux gì cũng thế. Với hệ thống nhiều người dùng thì hiển nhiên bạn cần phải có hệ thống quản lý quyền cho các thao tác trên file/directory và thiết bị.

Trước hết, bạn cần nhớ, với file/directory sẽ có 3 nhóm user theo thứ tự từ trái qua phải

  • Owner (kí hiệu u): là chủ xị của file/directory;
  • Owner Group (kí hiệu g): nhóm các thành viên chung group với chủ xị;
  • Other (kí hiệu o): đám lôm côm còn lại.

Lưu ý: Bạn có thể sẽ thấy kí hiệu a (All) trong một số command (ví dụ chmod), ý muốn bao quát cả 3 nhóm trên.

Đồng thời, bạn sẽ có 3 quyền thao tác cơ bản sau:

  • Reading (kí hiệu là r): quyền đọc nội dung;
  • Writing (kí hiệu là w): quyền ghi nội dung;
  • Executing (kí hiệu là x): quyền thực thi (hiển nhiên đối tượng được phân quyền phải có khả năng thực thi).

Như vậy khi kiểm tra (với ls -l chẳng hạn), bạn sẽ nhìn thấy kiểu như sau:

  • Ký tự đầu tiên sẽ là “” ứng với file và “d” ứng với directory
  • 3 ký tự kế tương ứng cho Owner (ở đây là testkali). Ví dụ với file txt sẽ là rw- tương ứng với quyền đọc, ghi (không có thực thi);
  • 3 ký tự kế sẽ cho Owner Group
  • 3 ký tự cuối là cho Other
User rights
User rights

Lưu ý, với executable file (file có khả năng thực thi) còn có thể gán 2 quyền đặc biệt là:

  • Setuid (Set User IDupon execution): cho phép bất kỳ user nào thực thi chương trình với quyền của Owner (u). Dạng này cần chạy với quyền của super-user;
  • Setgid (Set Group IDupon execution): cho phép bất kỳ user nào thực thi chương trình với quyền của Groupd Owner (g).

Hai thằng này sử dụng hơi rối nên tôi giới thiệu để biết thôi. Khi nào có ngữ cảnh phù hợp tôi sẽ demo cho rõ thêm vậy.

Tương tự, với directory, bạn cũng sẽ có 3 quyền thao tác:

  • Reading (kí hiệu là r): tương ứng xem cấu trúc thư mục và nội dung file;
  • Writing (kí hiệu là w): cho phép tạo và xóa file;
  • Executing (kí hiệu là X): cho phép di chuyển qua lại directory (ví dụ với cd command) để truy cập nội dung.

Lưu ý:

  • Với directory, nếu bạn có quyền Execute nhưng không có quyền Read thì bạn chỉ có thể truy cập nội dung một khi đã biết tên và đường dẫn chính xác.
  • Setgid cũng áp dụng với directory. Với thư mục tạo mới, nó sẽ tự động được gán Owner group theo thư mục cha

Ngoài ra, còn có một dạng trời ơi khác nữa là Sticky Bit. Đây là dạng phân quyền thường gặp ở các thư mục tạm nơi mà người người, nhà nhà đều có quyền ghi (ví dụ thư mục /tmp/). Sticky Bit là phương án để kiểm soát việc xoá file tại các thư mục này với ý đồ thiết kế là chỉ có owner của file hoặc owner của thư mục cha là được quyền xóa.

#2.2 Các lệnh phân quyền

Với vấn đề phân quyền, bạn có 3 chiêu cổ truyền sau:

chown

  • Mục đích: thay đổi owner của file
  • Cú pháp: chown user file_name

Lưu ý: Nếu muốn thay đổi owner và group owner của file bạn có thể dùng cú pháp: chown user:group file_name

chgrp

  • Mục đích: đổi group owner của file
  • Cú pháp: chgrp group file

chmod

  • Mục đích: đổi quyền của file
  • Cú pháp: chmod rights file

Chỗ này bạn cần lưu ý là có 2 cách thể hiện quyền là theo ký hiệu và theo con số tương ứng.

Theo ký hiệu tương ứng với 3 nhóm user u/g/o (nếu dùng a thì tương ứng gán đồng thời cả 3 nhóm như tôi nói trên), việc phân quyền r/w/x có thể được thực hiện với:

  • =: gán
  • +: thêm
  • -: bớt

Theo con số tương ứng (cách này nhanh nhưng không linh hoạt bằng cách trên vì áp vô nguyên cục)

  • 4: đọc
  • 2: viết
  • 1: thực thi

Góc trợ giúp:

Nếu bạn đang tự hỏi mấy con số này ở đâu ra thì đây dạng thể hiện thập phân của 3 bit tương ứng cho 3 quyền thao tác.

Bit Thứ 2 Thứ 1 Thứ “0”
Giá trị nhị phân 1 1 1
Giá trị thập phân (22) = 4 (21) = 2 (20) = 1

Bạn có thể tham khảo nội dung Giải ngố địa chỉ IP (Internet Protocol address) – Phần 2: IPv4 có thực đang giãy chết?

Khi đó bạn có thể kết hợp lại để gán nhanh quyền cho cả 3 nhóm

Ví dụ chmod 750 file_name sẽ:

  • Gán Owner toàn quyền đọc, viết và thực thi (7=4+2+1)
  • Gán Group Owner quyền đọc và thực thi (5=4+1)
  • Ông Other thì phế hết võ công với con số 0

Với chmod, 2 combo bẩn bựa hay gặp là:

  • 755 cho file/directory có thể thực thi
  • 644 cho file dữ liệu

Ngoài ra, ở đây, bạn có thể gắn thêm con số trước combo này để sử dụng đám setuid, setgidsticky bit rối rắm ở trên:

  • 4: setuid
  • 2: setgid
  • 1: sticky

Ví dụ, với chmod 4755 sẽ thiết lập setuid cho các quyền như đề cập trước đó.

Phù, rối nùi như canh hẹ đúng không! Nếu bạn không nắm rõ hết thì cũng chả sao đâu. Như tôi nói ở đầu bài, chờ khi nào đụng chuyện có ngữ cảnh thực tế cụ thể rồi bạn quay lại xem một lần nữa sẽ rõ thôi.

5 thoughts on “Giải ngố Linux – Phần 3: Tìm kiếm, thao tác với file và quản lý quyền với Linux Command Line”

Leave a Reply

Your email address will not be published. Required fields are marked *