TopDev

15 Lệnh Shell Nâng Cao Biến Bạn Thành "Pro" Ngay Lập Tức!

minhdev 📖 10 phút đọc

Bạn đã thành thạo các lệnh Shell cơ bản như ls, cd, mkdir? Tuyệt vời! Nhưng để thực sự làm chủ hệ thống Linux/Unix, bạn cần đi sâu hơn vào các lệnh quản lý tệp và thư mục nâng cao. Bài viết này sẽ hướng dẫn bạn 15 lệnh Shell "đắt giá", giúp bạn tìm kiếm, nén, quản lý quyền và thao tác với tệp như một chuyên gia!

Hãy sẵn sàng mở Terminal và nâng cấp kỹ năng Shell của bạn lên một tầm cao mới!



I. Tìm Kiếm Tệp và Nội Dung: Không Còn Lạc Lõng Giữa Biển Dữ Liệu!#

1. find - Tìm kiếm tệp/thư mục theo tên (hay hơn ls nhiều!)#

Bạn có hàng ngàn tệp và không nhớ chính xác nó nằm ở đâu? find chính là vị cứu tinh của bạn!

  • Công dụng: Tìm kiếm tệp hoặc thư mục dựa trên các tiêu chí nhất định (tên, kích thước, thời gian, quyền hạn, v.v.) trong một thư mục cụ thể và các thư mục con của nó.

  • Ví dụ cơ bản: Tìm kiếm tệp có tên myfile.txt trong thư mục hiện tại và các thư mục con: ` find . -name "myfile.txt"

`

- Tìm kiếm tất cả các tệp `.log` trong thư mục `/var/log` và các thư mục con:

find /var/log -name "*.log"

- Tìm kiếm thư mục có tên `myproject`:

find . -type d -name "myproject" (-type d chỉ định tìm thư mục, -type f chỉ định tìm tệp)

2. grep - Tìm kiếm nội dung bên trong tệp (cực kỳ quyền năng!)#

Đôi khi, bạn không nhớ tên tệp, nhưng bạn nhớ một đoạn văn bản bên trong nó. grep sẽ giúp bạn "lục tung" các tệp để tìm kiếm!

  • Công dụng: Tìm kiếm các dòng chứa một chuỗi văn bản hoặc mẫu biểu thức chính quy (regex) trong các tệp.

  • Ví dụ cơ bản: Tìm kiếm chuỗi "error" trong tệp mylog.txt: ` grep "error" mylog.txt

`

- Tìm kiếm chuỗi "warning" trong tất cả các tệp `.log` trong thư mục hiện tại:

grep "warning" *.log

  • Các tùy chọn grep "must-know": -r (recursive): Tìm kiếm đệ quy trong các thư mục con. Rất hữu ích khi bạn muốn tìm kiếm trong toàn bộ dự án. ` grep -r "function_name" my_project_folder/

`

- **`-i` (ignore-case):** Bỏ qua sự phân biệt chữ hoa/chữ thường.

grep -i "username" auth.log # Tìm "username", "Username", "USERNAME", v.v.

- **`-v` (invert-match):** Hiển thị các dòng KHÔNG chứa chuỗi tìm kiếm.

grep -v "#" config.ini # Lọc bỏ các dòng comment (bắt đầu bằng #)

- **`-n` (line-number):** Hiển thị số dòng chứa chuỗi tìm kiếm.

grep -n "fail" application.log # Output: # 123: [ERROR] Login fail # 456: [WARN] Payment fail due to ...



II. Nén và Giải Nén Tệp: Tiết Kiệm Không Gian, Di Chuyển Dễ Dàng!#

Khi cần lưu trữ hoặc chuyển giao nhiều tệp, nén chúng lại là một giải pháp tuyệt vời.

3. tar, gzip, unzip - Bộ ba hoàn hảo!#

  • tar (tape archive): Công cụ dùng để "đóng gói" nhiều tệp và thư mục thành một tệp tin lưu trữ (archive).

  • gzip (GNU zip): Công cụ dùng để nén/giải nén một tệp tin. Thường được dùng kết hợp với tar.

  • unzip: Công cụ chuyên dùng để giải nén các tệp .zip (thường thấy từ Windows).

  • Ví dụ: Đóng gói và nén một thư mục (tạo file .tar.gz hoặc .tgz): ` tar -czvf my_project.tar.gz my_project_folder/ # -c: create (tạo archive) # -z: gzip (nén bằng gzip) # -v: verbose (hiển thị chi tiết quá trình) # -f: file (chỉ định tên tệp archive)

`

- **Giải nén một tệp `.tar.gz`:**

tar -xzvf my_project.tar.gz # -x: extract (giải nén archive)

- **Nén một tệp riêng lẻ với `gzip`:**

gzip my_large_file.txt # Tạo ra my_large_file.txt.gz

- **Giải nén một tệp `.gz`:**

gzip -d my_large_file.txt.gz # Giải nén thành my_large_file.txt

- **Giải nén tệp `.zip`:**

unzip my_archive.zip



III. Quyền Truy Cập Tệp: Bảo Mật Dữ Liệu Của Bạn!#

Trong Linux/Unix, mọi tệp và thư mục đều có các quyền truy cập riêng biệt, quy định ai có thể đọc, ghi, hoặc thực thi chúng.

4. Giải thích Quyền truy cập tệp (rwx)#

Mỗi quyền được biểu diễn bằng một ký tự:

  • r (read): Cho phép đọc nội dung tệp hoặc liệt kê nội dung thư mục.

  • w (write): Cho phép sửa đổi nội dung tệp hoặc tạo/xóa tệp trong thư mục.

  • x (execute): Cho phép chạy tệp thực thi hoặc truy cập vào thư mục.

Các quyền này được gán cho 3 nhóm đối tượng:

  • User (Owner): Chủ sở hữu tệp.

  • Group: Nhóm người dùng sở hữu tệp.

  • Others: Những người dùng khác không phải chủ sở hữu và không thuộc nhóm.

Khi bạn dùng ls -l, bạn sẽ thấy các quyền như sau: -rwxrw-r--

  • Ký tự đầu tiên (- hoặc d): Loại tệp (- là tệp thông thường, d là thư mục).

  • 3 ký tự tiếp theo (rwx): Quyền của chủ sở hữu.

  • 3 ký tự tiếp theo (rw-): Quyền của nhóm.

  • 3 ký tự cuối cùng (r--): Quyền của những người dùng khác.

5. chmod - Thay đổi Quyền Truy Cập Tệp#

  • chmod là viết tắt của "change mode".

  • Công dụng: Thay đổi quyền truy cập của tệp hoặc thư mục.

  • Các chế độ số (Octal Modes) của chmod: Đây là cách phổ biến và mạnh mẽ nhất để thiết lập quyền. Mỗi quyền (r, w, x) tương ứng với một giá trị số: r (read) = 4

    • w (write) = 2

    • x (execute) = 1

    • - (no permission) = 0 Bạn cộng tổng các giá trị này cho mỗi nhóm đối tượng:

    • 7 (rwx) = 4 + 2 + 1: Đọc, ghi, thực thi.

    • 6 (rw-) = 4 + 2 + 0: Đọc, ghi.

    • 5 (r-x) = 4 + 0 + 1: Đọc, thực thi.

    • 4 (r--) = 4 + 0 + 0: Chỉ đọc.

    • 0 (---) = 0 + 0 + 0: Không có quyền gì.

  • Ví dụ: chmod 755 myfile.sh: Chủ sở hữu: 7 (rwx) - Đọc, ghi, thực thi. - Nhóm: 5 (r-x) - Đọc, thực thi. - Người khác: 5 (r-x) - Đọc, thực thi. (Đây là quyền phổ biến cho các script có thể thực thi)

    • chmod 644 my_document.txt: Chủ sở hữu: 6 (rw-) - Đọc, ghi.

      • Nhóm: 4 (r--) - Chỉ đọc.

      • Người khác: 4 (r--) - Chỉ đọc. (Đây là quyền phổ biến cho các tệp văn bản)

6. chown - Thay đổi Chủ sở hữu tệp#

  • chown là viết tắt của "change owner".

  • Công dụng: Thay đổi chủ sở hữu của một tệp hoặc thư mục. Thường yêu cầu quyền sudo (quyền quản trị).

  • Ví dụ: sudo chown newuser myfile.txt # Thay đổi chủ sở hữu sang 'newuser' sudo chown newuser:newgroup myfolder/ # Thay đổi cả chủ sở hữu và nhóm

7. chgrp - Thay đổi Nhóm của tệp#

  • chgrp là viết tắt của "change group".

  • Công dụng: Thay đổi nhóm sở hữu của một tệp hoặc thư mục. Thường yêu cầu quyền sudo.

  • Ví dụ: sudo chgrp newgroup myfile.txt # Thay đổi nhóm sang 'newgroup'



IV. Liên Kết Tệp: Sức Mạnh của "Lối Tắt"!#

Liên kết (link) là một cách để tạo "lối tắt" hoặc tham chiếu đến một tệp hoặc thư mục khác trên hệ thống. Có hai loại chính: Symbolic Link (Symlink) và Hard Link.

  • Symlink (liên kết tượng trưng): Giống như một "lối tắt" trong Windows. Nó là một tệp đặc biệt chứa đường dẫn đến tệp hoặc thư mục gốc. Nếu tệp/thư mục gốc bị xóa, symlink sẽ bị hỏng.

  • Công dụng: Tạo một liên kết tượng trưng.

  • Ví dụ: ln -s /path/to/original_file /path/to/symlink # Tạo symlink đến file ln -s /path/to/original_folder /path/to/symlink_folder # Tạo symlink đến folder

  • Xóa Symlink: Xóa như một tệp thông thường bằng rm. rm /path/to/symlink

  • Hard Link: Không phải là một tệp riêng biệt mà là một tên gọi khác cho cùng một dữ liệu trên ổ đĩa. Các Hard Link trỏ trực tiếp đến cùng một "inode" (vùng chứa thông tin tệp) trên hệ thống tệp. Nếu tệp gốc bị xóa, Hard Link vẫn giữ nguyên dữ liệu đó.

  • Công dụng: Tạo một liên kết cứng.

  • Ví dụ: ln /path/to/original_file /path/to/hardlink

  • Phân biệt Symlink và Hard Link:

    Đặc điểm Symlink (Symbolic Link) Hard Link
    Loại Tệp riêng biệt chứa đường dẫn Tên gọi khác cho cùng inode
    Thao tác gốc Xóa gốc làm hỏng link Xóa gốc không ảnh hưởng link khác
    Kiểu tệp Có thể link đến tệp HOẶC thư mục Chỉ có thể link đến TỆP (không thư mục)
    Hệ thống tệp Có thể link qua các phân vùng (filesystem) khác Chỉ link trong cùng một phân vùng
    ls -l Ký tự l đầu tiên, chỉ rõ đích đến Không có ký tự đặc biệt, trông như tệp gốc


V. Xem Thông Tin & Thao Tác Nâng Cao Khác!#

10. du & df - Kiểm tra dung lượng đĩa#

  • du (disk usage): Hiển thị dung lượng đĩa mà các tệp hoặc thư mục đang chiếm. du -h my_folder/ # -h (human-readable) để dễ đọc (KB, MB, GB) du -sh my_folder/ # -s (summary) để chỉ hiển thị tổng dung lượng của thư mục

  • df (disk free): Hiển thị dung lượng đĩa trống trên các phân vùng (filesystem). df -h # Hiển thị dung lượng trống của các phân vùng

11. stat - Xem thông tin chi tiết về tệp#

  • Công dụng: Hiển thị thông tin chi tiết về một tệp hoặc hệ thống tệp, bao gồm thời gian truy cập, sửa đổi, thay đổi trạng thái, kích thước, số inode, v.v.

  • Ví dụ: stat myfile.txt

12. mkdir -p - Tạo nhiều thư mục lồng nhau cùng lúc#

Chúng ta đã gặp lệnh này ở bài cơ bản, nhưng nó xứng đáng được nhắc lại trong phần nâng cao vì sự tiện lợi của nó!

  • Công dụng: Tạo một cây thư mục, tạo các thư mục cha nếu chúng chưa tồn tại.

  • Ví dụ: ` mkdir -p documents/reports/2025/q1

    Lệnh này sẽ tạo thư mục 'documents', bên trong có 'reports', bên trong có '2025', và cuối cùng là 'q1'.

    `

13. head & tail - Xem nhanh nội dung tệp#

Bạn không muốn mở cả một tệp log khổng lồ chỉ để xem vài dòng đầu/cuối? headtail là bạn của bạn!

  • head: Hiển thị các dòng đầu tiên của một tệp (mặc định là 10 dòng). head mylog.log head -n 5 mylog.log # Hiển thị 5 dòng đầu tiên

  • tail: Hiển thị các dòng cuối cùng của một tệp (mặc định là 10 dòng). Cực kỳ hữu ích khi theo dõi log theo thời gian thực! tail mylog.log tail -n 5 mylog.log # Hiển thị 5 dòng cuối cùng tail -f mylog.log # Theo dõi tệp log theo thời gian thực (nhấn Ctrl+C để thoát)



Lời kết#

Với 15 lệnh Shell nâng cao này, bạn đã có trong tay bộ công cụ mạnh mẽ để quản lý tệp và thư mục trên hệ thống Linux/Unix một cách hiệu quả và chuyên nghiệp. Từ tìm kiếm sâu rộng với findgrep, nén/giải nén thông minh với tar/gzip, đến việc kiểm soát quyền truy cập và liên kết tệp, bạn đang dần trở thành một "bậc thầy" thực sự về Shell.

Hãy dành thời gian thực hành từng lệnh, thử các tùy chọn khác nhau và kết hợp chúng để giải quyết các vấn đề thực tế. Càng thực hành, bạn sẽ càng thấy sức mạnh vô hạn của Shell!

Bài liên quan trong #Shell

✓ Đã sao chép link