Thao Tác File và Thư Mục
Bài 2 cho biết file nằm đâu. Bài này thao tác với chúng: tạo, sao chép, di chuyển, đổi tên, xóa, liên kết, và tìm file. Đây là nhóm lệnh bạn dùng nhiều nhất mỗi ngày.
Mở lab (docker start -ai linuxlab) và làm việc trong /tmp cho an toàn:
cd /tmp
Tạo file và thư mục
touch a.txt b.txt # tạo file rỗng (hoặc cập nhật thời gian nếu đã có)
mkdir proj # tạo thư mục
mkdir -p proj/src/utils # -p tạo cả cây thư mục lồng nhau, không báo lỗi nếu đã tồn tại
touch tạo file rỗng; nếu file đã có, nó chỉ cập nhật mốc thời gian. mkdir -p rất hay dùng: tạo luôn các thư mục cha còn thiếu trong một lần.
Sao chép và di chuyển
cp a.txt proj/ # sao chép file vào thư mục proj
cp -r proj proj-backup # -r (recursive) để sao chép cả thư mục
mv b.txt proj/src/ # di chuyển file
mv a.txt readme.txt # đổi tên (mv chính là lệnh đổi tên trong Linux)
Lưu ý: mv vừa là di chuyển vừa là đổi tên — Linux không có lệnh "rename" riêng. Nếu đích là thư mục, nó di chuyển; nếu đích là tên mới cùng chỗ, nó đổi tên.
Xem cây thư mục để kiểm tra:
ls -R proj
proj:
a.txt src
proj/src:
b.txt
(ls -R liệt kê đệ quy. Lệnh tree cho hình cây đẹp hơn nhưng cần cài: apt-get install -y tree.)
Xóa — và một cảnh báo
rm readme.txt # xóa file
rm -r proj-backup # -r xóa cả thư mục và nội dung
rmdir proj/src/utils # chỉ xóa thư mục RỖNG
Cảnh báo quan trọng: Linux không có thùng rác cho dòng lệnh.
rmxóa là mất, không khôi phục được. Đặc biệt nguy hiểm làrm -rf(force, recursive, không hỏi) — gõ nhầm đường dẫn có thể xóa sạch dữ liệu. Quy tắc: trước khirm -r, chạylslên đúng đường dẫn đó để chắc mình đang xóa cái gì. Và không bao giờ chạyrm -rf /hayrm -rf /*.
Wildcard: thao tác hàng loạt
Shell mở rộng các ký tự đặc biệt (gọi là globbing) thành danh sách file khớp, trước khi chạy lệnh:
*— khớp bất kỳ chuỗi nào (kể cả rỗng)?— khớp đúng một ký tự[...]— khớp một ký tự trong tập
touch log1.txt log2.txt log3.txt note.md
ls log*.txt # log1.txt log2.txt log3.txt
ls *.md # note.md
ls log?.txt # log1.txt log2.txt log3.txt (mỗi ? một ký tự)
ls log[12].txt # log1.txt log2.txt
rm log*.txt # xóa tất cả file log...txt cùng lúc
Wildcard hoạt động với mọi lệnh, không riêng ls/rm. Đây là cách thao tác nhiều file một lần.
Liên kết: ln -s
Liên kết tượng trưng (symbolic link / symlink) là một "lối tắt" trỏ tới file/thư mục khác:
ln -s /tmp/proj/a.txt link-to-a
ls -l link-to-a
lrwxrwxrwx ... link-to-a -> /tmp/proj/a.txt
Ký tự l đầu dòng (Bài 2) cho biết đây là symlink. Symlink dùng nhiều để trỏ "phiên bản hiện tại" tới một thư mục cụ thể, hoặc đưa một lệnh vào PATH. (Có cả hard link tạo bằng ln không -s, nhưng symlink phổ biến hơn nhiều.)
Tìm file với find
find duyệt cây thư mục theo điều kiện:
find /tmp/proj -name "*.txt" # tìm theo tên
find /tmp -type d -name "proj" # -type d: chỉ thư mục (f: file)
find /tmp -name "*.log" -size +10M # file .log lớn hơn 10MB
/tmp/proj/a.txt
/tmp/proj/src/b.txt
find rất mạnh, còn chạy được lệnh trên mỗi kết quả bằng -exec:
find /tmp -name "*.tmp" -exec rm {} \; # tìm và xóa từng file .tmp
{} là chỗ thay bằng tên file tìm được; \; kết thúc lệnh. Đây là mẫu hay dùng để dọn dẹp hàng loạt theo điều kiện.
Phân biệt nhanh:
findduyệt hệ thống file theo điều kiện (tên, loại, kích thước, thời gian); còn để tìm nội dung bên trong file thì dùnggrep(Bài 5).
🧹 Dọn dẹp
cd /tmp && rm -rf proj proj-backup note.md link-to-a *.txt
ls /tmp
Tổng kết
Bạn đã nắm nhóm lệnh thao tác file cốt lõi: touch/mkdir -p (tạo), cp -r/mv (sao chép, di chuyển, đổi tên), rm -r/rmdir (xóa — nhớ không có thùng rác), ln -s (liên kết), wildcard * ? [] (hàng loạt), và find (tìm theo điều kiện, kèm -exec). Quy tắc an toàn quan trọng nhất: cẩn thận với rm -rf, luôn ls kiểm tra đường dẫn trước khi xóa.
Tạo và di chuyển file rồi, nhưng để sửa nội dung file ngay trên terminal thì cần một trình soạn thảo. Bài 4 học nano và vim — hai trình soạn thảo bạn chắc chắn gặp trên server.