1. Các thao tác cơ bản với tệp
1.5. Xoá tệp hoặc thư mục
Như chúng ta đã biết, muốn xoá bỏ tệp hoặc thư mục, chúng ta dùng lệnh rm. Muốn xoá tệp không thuộc quyền sở hữu của mình, chúng ta phải có quyền hạn ghi trên thư mục chứa tệp cần xoá.
Nếu đang làm chủ tệp, tất nhiên là chúng ta có thể tuỳ ý xoá bỏ, nhưng với điều kiện là quyền hạn của thư mục chứa tệp đó cho phép chúng ta ghi.
Lệnh rm * sẽ xoá toàn nhóm tệp mà chúng ta có quyền ghi trong thư mục hiện hành, nhưng thư mục cấp dưới không bị ảnh hưởng. Muốn xoá thư mục cấp dưới, chúng ta phải dùng tuỳ chọn -r (recursive, đệ quy).
Ở một vài phiên bản, rm sẽ tạm dừng để hỏi chúng ta có thực sự muốn xoá tệp mà chúng ta có quyền sở hữu nhưng lại không có quyền hạn ghi. Một vài phiên bản khác lại thắc mắc khi chúng ta gõ lệnh rm kèm với wildcard. Đương nhiên chúng ta có thể viết riêng cho mình một macro hoặc một shell script để tạo cơ hội suy nghĩ trước khi khẳng định xoá tệp.
Nếu phiên bản rm đang sử dụng đắn đo khi chúng ta ra lệnh xoá những tệp mà mình sở hữu nhưng lại không có quyền hạn ghi, chúng ta có thể phòng ngừa việc lỡ tay xoá mọi thứ trong thư mục bằng lệnh sau đây:
# touch "0 0"
Lệnh trên tạo ra tệp mang tên "0 0". Trong chuỗi ASCII, ký tự số “0” được sắp xếp trước mọi ký tự chữ, do đó khi gõ lệnh rm * thì rm sẽ thử xoá tệp "0 0" đầu tiên và dừng lại hỏi. Nếu quả thật không muốn xoá mọi thứ trong thư mục, chúng ta còn kịp bấm <Del> hoặc <Ctrl-c> để huỷ (kill) tiến trình rm. Muốn thử, chúng ta hãy xoá tệp "0 0" xem. Đừng gõ rm * nữa nếu phiên bản chúng ta đang dùng lại không dừng lại hỏi.
Một cách hay hơn nữa để phòng trường hợp lỡ tay xoá tất là chúng ta dùng cờ -i với rm. Ở đây -i viết thay chữ interactive (tương tác). Nếu gõ rm -i tên_tệp, máy sẽ yêu cầu chúng ta khẳng định. Và chúng ta phải trả lời "yes" trước khi tệp được xoá. Nếu chúng ta gõ rm -i *, máy sẽ buộc chúng ta trả lời cho từng tệp trong thư mục.
Khi phải thường xuyên sử dụng rm -i, chúng ta có thể cài lệnh này vào trong một shell script hoặc tạo ra một chức năng shell. Nếu thảo ra shell script, chúng ta nên nhớ là shell sẽ duyệt qua các lệnh trong thư mục liệt kê ở biến PATH theo đúng thứ tự liệt kê. Nếu thư mục $HOME/bin của chúng ta ở dưới chót, shell script mang tên rm sẽ không bao giờ được tìm thấy. Chúng ta có thể đặt thư mục $HOME/bin ở đầu danh sách của biến PATH, hoặc tạo ra một lệnh mới, chẳng hạn như del. Nếu tạo ra shell script mang tên “del”, chúng ta phải đánh dấu "khả thi" bằng lệnh
chmod để shell có thể nhận ra nó. Khi tạo ra lệnh del, chúng ta chỉ phải ghi một lệnh duy nhất là rm -i $*.
Bởi vì khi gõ lệnh del *, shell sẽ diễn dịch ra là rm -i *.
Còn một cách khác để xoá tệp là dùng alias (bí danh). Chúng ta có thể hiểu alias như là một lệnh shell nội bộ (giống các lệnh doskey như của DOS kể từ phiên bản 5.0).
Trong khi đang dùng shell C, nếu muốn thêm alias chúng ta phải chỉnh sửa lại tệp mang tên .cshrc. Chúng ta có thể sử dụng bất kỳ trình soạn thảo văn bản nào, chẳng hạn như vi (xem "Sử dụng trình soạn thảo vi") để chỉnh sửa tệp này. Với shell C, chúng ta thêm những dòng sau đây vào đầu tệp .cshrc:
rm() {
/bin/rm -i $* }
Muốn thêm alias vào shell Korn, chúng ta thêm những dòng sau vào tệp $HOME/.kshrc
alias rm 'rm -i $*'
Khi định xoá một thư mục bằng lệnh rm, máy sẽ báo đấy là thư mục và không được xoá. Nếu muốn xoá các thư mục rỗng, chúng ta dùng lệnh rmdir như với DOS.
Linux còn một cách khác để xoá thư mục cùng với nội dung, nhưng cách này rất nguy hiểm: lệnh rm -r sẽ xoá bất kỳ thư mục và tệp nào được phát hiện.
Thí dụ chúng ta có thư mục ./foo chứa tệp và thư mục cấp dưới, lệnh rm -r foo sẽ xoá sạch nội dung thư mục ./foo, kể cả các thư mục cấp dưới.
Với lệnh rm -i -r, máy sẽ yêu cầu chúng ta khẳng định trước khi thực hiện thao tác xoá. Trong trường hợp thư mục chứa rỗng, rm sẽ không tự ý xoá, giống như trường hợp chúng ta ra lệnh rm mà không kèm tuỳ chọn nào.
Ghi chú: Chúng ta không nhất thiết phải đặt từng cờ cho mỗi lệnh Linux. Nếu
cờ nào không cần đối số kèm theo, chúng ta có thể phối hợp chúng với nhau. Thí dụ,
rm -i -r có thể được viết là:
rm -ir