Mọi thứ bạn cần biết về siêu ký tự (Metacharacters) Linux
Tính năng mạnh mẽ nhất của Linux Bash shell là khả năng làm việc với các file và chuyển hướng đầu vào và đầu ra của chúng một cách vô cùng hiệu quả. Linux sử dụng các ký tự hoặc ký hiệu đặc biệt được gọi là siêu ký tự (Metacharacters) bổ sung cho lệnh shell liên quan đến tìm kiếm tệp và kết nối lệnh.
Các siêu ký tự rất hữu ích trong việc liệt kê, xóa và sao chép các tệp trên Linux. Tuy nhiên, chức năng của mỗi siêu ký tự khác nhau tùy thuộc vào lệnh bạn đang sử dụng.
Bài viết này cung cấp kiến thức chuyên sâu về các loại siêu ký tự khác nhau trong Linux. Và mình sẽ giải thích cách các ký tự đặc biệt này giúp kết nối và mở rộng các lệnh.
Xử lý File với siêu ký tự
Linux shell cho phép bạn lưu các lần gõ phím khi nhập lệnh bằng cách sử dụng siêu ký tự giữa các tệp hoặc tên thư mục. Những ký tự này giúp bạn tham chiếu đến một nhóm tệp hoặc một thư mục để liệt kê, di chuyển hoặc thực hiện các hành động khác.
Đây là một số siêu ký tự trong Linux Shell:
- * (Dấu hoa thị): Khớp một hoặc nhiều lần xuất hiện của một ký tự
- ? (Dấu chấm hỏi): Khớp một ký tự đơn lẻ hoặc một lần xuất hiện mẫu
- [] (Dấu ngoặc vuông): Khớp với bất kỳ số, ký hiệu hoặc bảng chữ cái được phân tách bằng dấu gạch ngang nào được chỉ định bên trong dấu ngoặc vuông
Một cách lý tưởng để thực hành siêu ký tự trong Linux là tạo một thư mục trống mới bên trong thư mục /tmp.
sudo mkdir /tmp/meta
Bây giờ truy cập vào thư mục /tmp/meta bằng lệnh cd và tạo các tệp trống mới bằng cách sử dụng lệnh touch:
touch apple.txt cider.sh vinegar.php cat.txt lemon.txt juice.sh catfish.sh
Sử dụng các lệnh sau để kiểm tra siêu ký tự “*” và hiển thị kết quả đầu ra:
ls c* Output: catfish.sh cat.txt cider.sh
ls c*h Output: catfish.sh cider.sh
ls *r* Output: cider.sh vinegar.php
sudo rm *p*
Lệnh trên sẽ xóa tất cả các tệp có chứa ký tự “p” trong tên của nó. Bạn có thể xác nhận thay đổi bằng lệnh ls:
ls Output: catfish.sh cat.txt cider.sh juice.sh lemon.txt
Dưới đây là một số ví dụ về dấu “?”:
ls a?* Output: apple.txt
ls c?t* Output: catfish.sh cat.txt
Lệnh cuối cùng khớp với bất kỳ tệp nào bắt đầu bằng chữ c và có chữ t là chữ cái thứ ba (cat.txt, catfish.sh,…). Bây giờ sử dụng tùy chọn [av]* với lệnh ls để liệt kê tất cả các tệp bắt đầu bằng a hoặc v:
ls [av]* Output: apple.txt vinegar.sh
Bạn có thể sửa đổi lệnh trên để chỉ liệt kê các tệp kết thúc bằng chữ t:
ls [ac]*[t] Output: apple.txt catfish.txt cat.txt
Tương tự, bạn có thể sử dụng các chữ cái được phân tách bằng dấu gạch ngang để xác định phạm vi và liệt kê các tệp như sau:
ls [a-j]* Output: apple.txt catfish.sh cat.txt cider.sh juice.sh
Chuyển hướng file siêu ký tự
Để hiểu rõ hơn về chuyển hướng trong Bash, mỗi quy trình trong Linux đều có các bộ mô tả tệp, được gọi là đầu vào tiêu chuẩn (stdin/0), đầu ra tiêu chuẩn (stdout/1) và lỗi tiêu chuẩn (stderr/2). Chúng xác định nguồn gốc của đầu vào lệnh và quyết định nơi gửi đầu ra và thông báo lỗi.
Các siêu ký tự giúp bạn sửa đổi các hành động này bằng cách chuyển hướng luồng nội dung I/O. Nói chung, Linux shell đọc đầu vào lệnh từ bàn phím và ghi kết quả ra màn hình. Chuyển hướng đầu vào cho phép lệnh đọc nội dung từ tệp thay vì bàn phím, và chuyển hướng đầu ra lưu đầu ra vào tệp.
Nói cách khác, siêu ký tự chuyển hướng tệp Linux cho phép bạn chuyển hướng nội dung đến (>) và từ (<) tệp. Ba siêu ký tự chuyển hướng chính là:
1. <: Chuyển nội dung tệp sang lệnh. Ví dụ: đầu ra lệnh cho less .bashrc cũng giống như less < .bashrc.
2. >: Chuyển đầu ra lệnh vào tệp. Lệnh ls /etc > lists.txt sẽ lưu kết quả đầu ra vào tệp lists.txt.
3. >>: Thêm đầu ra lệnh vào nội dung tệp.
wc là viết tắt của word count và bạn có thể sử dụng nó để hiển thị sự khác biệt giữa tệp trước và sau khi gắn nó với đầu ra.
Siêu ký tự mở rộng dấu ngoặc nhọn
Siêu ký tự mở rộng dấu ngoặc nhọn cho phép bạn mở rộng các ký tự trên các thư mục, tên tệp hoặc các tham số lệnh khác. Ví dụ: bạn có thể tạo một thư mục mới bên trong thư mục /tmp và tạo một tập hợp các tệp bằng cách sử dụng lệnh touch như sau:
sudo mkdir /tmp/brace; cd /tmp/brace touch test{1,2,3,4,5}
Bây giờ, bạn có thể kiểm tra xem touch đã tạo tệp hay chưa bằng lệnh ls.
ls Output: test1 test2 test3 test4 test5
Bạn có thể chỉ định nhiều danh sách để tạo tên tệp dựa trên sự kết hợp của các phần tử trong danh sách. Ví dụ:
touch {apple,cider,vinegar}.{fruit,liquid,sour} touch {a,b,c}.{1,2,3}
Lệnh cuối cùng sẽ tạo các tệp sau trong thư mục hiện tại:
Lệnh đầu tiên sử dụng hai bộ dấu ngoặc nhọn để liên kết tên tệp trong mỗi bộ với bộ kia. Bạn cũng có thể viết lệnh cuối cùng bằng cách touch {a..c}.{1..3} để chỉ định phạm vi giữa a và c và 1 và 3.
Ngoài việc tạo tệp, bạn cũng có thể sử dụng dấu ngoặc nhọn để xóa hoặc sao chép tệp sang các vị trí khác.
Một số siêu ký tự Linux khác
Dưới đây là bảng một số siêu ký tự bạn phải biết để kết nối lệnh với tên, mô tả và ví dụ của chúng để thực hành:
Tên | Mô tả | Ví dụ |
---|---|---|
Pipe (|) | Kết nối đầu ra lệnh làm đầu vào cho lệnh khác. | cat /etc/passwd | grep root |
Semicolon (;) | Cho phép thực hiện các lệnh tuần tự, lần lượt. | cd /etc ; ls -la ; chmod +x /tmp/script.php |
Ampersand (&) | Chạy các quy trình hoặc lệnh trong nền. | find / -perm -u=s -type f & |
Dollar ($) | Mở rộng biểu thức số học và chuyển nó vào shell | echo “total files in this directory are: $(ls | wc -l)” |
Null Redirection (2>) | Hướng thông báo lỗi chuẩn đến tệp /dev/null | your_command 2>/dev/null |
Circumflex (^) | Khớp với bất kỳ mẫu nào bắt đầu bằng biểu thức theo sau là ^ | cd /etc/ssh ; ls | grep ^s |
Các siêu ký tự trên Linux còn được gọi là các ký tự đại diện bổ sung ý nghĩa đặc biệt cho các lệnh và kiểm soát hành vi của chúng. Các siêu ký tự tối ưu hóa hiệu suất công việc của người dùng trong khi làm việc với các tệp/thư mục và kết nối/mở rộng các lệnh shell Linux.
Bên cạnh đó, siêu ký tự cũng là khối xây dựng của biểu thức chính quy. Ngoài ra, tìm hiểu về siêu ký tự và cách sử dụng chúng là một kỹ năng quan trọng cần có nếu bạn muốn trở thành một người dùng Linux chuyên nghiệp.
Ngoài ra, bạn cũng có thể xem thêm cách viết Shell Script trong Linux tại đây.