18
Cơ bản về Linux
Để giải quyết vấn đề này, chúng ta có thể lợi dụng sự hỗ trợ ký tự đại diện có sẵn trên
Linux. Sự hỗ trợ này, còn gọi là "globbing" (vì lý do lịch sử), cho phép người dùng chỉ rõ
nhiều tệp tin một lúc, dùng một mẫu đại diện
nào đó. Bash và các câu lệnh Linux khác sẽ
biên dịch mẫu này, và tìm trên hệ thống
tất cả các tệp tin tương ứng nó. Nhờ vậy, nếu có
các tệp tin tep1, tep2,...i tep8 trong thư mục hiện thời, bạn có thể xóa những tệp này mà chỉ
cần gõ:
rm tep[1-8]
Hoặc nếu bạn muốn xóa tất cả các tệp tin mà bắt đầu bằng tep cũng như tệp tin nào có
tên tep, hãy gõ:
$ rm tep*
Ký tự đại diện * tương ứng bất kỳ ký tự hay chuỗi ký tự nào, và thậm thí "không có ký
tự" cũng tương ứng. Tất nhiên, có thể sử dụng đại diện "toàn cầu" (glob wildcards) để xóa
tệp tin một cách đơn giản hơn, như chúng ta sẽ thấy trong các phần tiếp theo.
2.4.2
Hiểu về không tương ứng
Nếu muốn liệt kê tất cả đối tượng của hệ thống tập tin trong /etc bắt đầu bằng g cũng như
mọi tệp tin có tên là g, bạn cần gõ:
$ ls -d /etc/g*
/etc/gaim
/etc/gnome
/etc/group-
/etc/gtk
/etc/gateways
/etc/gnome-vfs-2.0
/etc/group.org
/etc/gtk-2.0
/etc/gconf
/etc/gnome-vfs-mime-magic
/etc/gs-gpl
/etc/gdm
/etc/groff
/etc/gshadow
/etc/gimp
/etc/group
/etc/gshadow-
Bây giờ, điều gì sẽ xảy ra nếu bạn dùng một mẫu mà không có đối tượng nào tương ứng?
Không có cách kiểm ra nào tốt hơn là một ví dụ: chúng ta thử liệt kê tất cả các tệp tin trong
/usr/bin bắt đầu bằng asdf và kết thúc bằng jkl,, gồm cả tệp tin có thể có là asdfjkl:
$ ls -d /usr/bin/asdf*jkl
ls:
/usr/bin/asdf*jkl:
No such file or directory
Đó là cái đã xảy ra! Thường thì, khi chúng ta chỉ rõ một mẫu, mẫu đó tương ứng một hay
nhiều tệp tin trên hệ thống, và bash thay thế mẫu bởi một danh sách các vật thể tìm thấy,
cách nhau bởi khoảng trống
. Tuy nhiên, khi mẫu không đưa ra không có một đối tượng nào
phù hợp, thì bash coi ký tự đại diện như một ký tự bình thường. Kết quả là ls không thể tìm
thấy tệp tin /usr/bin/asdf*jkl, và đưa ra thông báo lỗi. Quy luật ở đây là mẫu toàn cầu chỉ
được khai triển nếu có đối tượng tương ứng trong hệ thống tập tin
. Trong trường hợp ngược
lại chúng được đưa nguyên văn vào câu lệnh
27
wildcard pattern
28
nói chính xác hơn là trong đường dẫn chỉ ra trong dòng lệnh
29
trong trường hợp này /usr/bin/asdf*jkl sẽ được đưa vào câu lệnh ls