Nội dung bài viết

Lần đầu SSH vào một VPS trống, thứ duy nhất bạn có là một dấu nhắc dòng lệnh nhấp nháy. Không giao diện, không nút bấm. Đây là những câu lệnh cơ bản nhất mà bất cứ ai quản lý VPS cũng cần thuộc.

Tôi nhóm chúng theo công việc thực tế thay vì liệt kê rời rạc, vì như vậy dễ nhớ hơn nhiều.

Di chuyển và xem xét

pwd                 # đang đứng ở thư mục nào
ls                  # liệt kê nội dung thư mục
ls -lah             # dạng chi tiết, kèm file ẩn và dung lượng dễ đọc
cd /var/www         # chuyển thư mục
cd ..               # lùi lên một cấp
cd ~                # về thư mục home
clear               # xóa sạch màn hình

ls -lah là biến thể tôi dùng nhiều nhất: -l cho dạng danh sách chi tiết, -a hiện cả file ẩn bắt đầu bằng dấu chấm (rất quan trọng vì .htaccess, .env đều là file ẩn), -h đổi dung lượng sang KB/MB thay vì đếm byte.

Đọc nội dung file

cat config.php          # in toàn bộ file ra màn hình
less error.log          # xem từng trang, dùng phím mũi tên, nhấn q để thoát
head -n 20 access.log   # 20 dòng đầu
tail -n 50 error.log    # 50 dòng cuối
tail -f error.log       # theo dõi log theo thời gian thực

tail -f là công cụ debug quan trọng nhất trong danh sách này. Mở nó ở một cửa sổ, thao tác trên website ở cửa sổ khác, và bạn thấy lỗi hiện ra ngay khi nó xảy ra.

Với file lớn, tránh dùng cat vì nó đổ hết vào màn hình. Dùng less để cuộn từ từ.

Tìm kiếm

grep "error" error.log              # tìm dòng chứa chuỗi
grep -i "database" config.php       # không phân biệt hoa thường
grep -rn "wp_options" /var/www      # tìm đệ quy, kèm số dòng
find /var/www -name "*.log"         # tìm file theo tên
find /var/www -type f -size +100M   # tìm file lớn hơn 100MB

Cặp grep -rn cực kỳ hữu dụng khi cần biết một chuỗi cấu hình nằm ở file nào trong cả mã nguồn.

Thao tác với file và thư mục

mkdir backup            # tạo thư mục
mkdir -p a/b/c          # tạo cả cây thư mục lồng nhau
cp file.txt file.bak    # sao chép
cp -r thumuc/ backup/   # sao chép cả thư mục
mv cu.txt moi.txt       # đổi tên hoặc di chuyển
rm file.txt             # xóa file
rmdir thumuc            # xóa thư mục rỗng
rm -rf thumuc           # xóa thư mục kèm toàn bộ nội dung

Một lời cảnh báo nghiêm túc về rm -rf: Linux không có thùng rác và không hỏi lại. Gõ nhầm rm -rf / hoặc rm -rf / var/www (thừa một dấu cách) là mất sạch máy chủ. Trước khi nhấn Enter với lệnh này, hãy đọc lại đường dẫn một lần nữa.

Thói quen an toàn: chạy ls với chính đường dẫn đó trước để xem mình sắp xóa cái gì.

Nén và giải nén

tar -czvf backup.tar.gz /var/www    # nén cả thư mục
tar -xzvf backup.tar.gz             # giải nén
gzip file.sql                       # nén một file
gunzip file.sql.gz                  # giải nén
zip -r site.zip thumuc/             # nén dạng zip
unzip site.zip                      # giải nén zip

Mẹo nhớ bộ cờ của tar: create để tạo, extract để bung, z là gzip, v là hiện danh sách file, f là chỉ định tên file.

Phân quyền

chmod 644 wp-config.php    # chủ sở hữu đọc ghi, còn lại chỉ đọc
chmod 755 thumuc           # thư mục cần quyền thực thi để vào được
chmod -R 755 /var/www      # áp dụng đệ quy
chown -R www-data:www-data /var/www   # đổi chủ sở hữu

Quy tắc thông dụng cho web: file để 644, thư mục để 755. Đừng bao giờ dùng 777, đó là cho phép bất cứ ai trên máy chủ ghi đè file của bạn.

Con số được ghép từ ba quyền: đọc là 4, ghi là 2, thực thi là 1. Vậy 6 = 4 + 2 là đọc và ghi, 7 = 4 + 2 + 1 là toàn quyền. Ba chữ số lần lượt dành cho chủ sở hữu, nhóm, và những người còn lại.

Theo dõi tài nguyên

top                 # danh sách tiến trình đang chạy, cập nhật liên tục
htop                # bản dễ nhìn hơn, cần cài thêm
df -h               # dung lượng ổ đĩa còn trống
du -sh /var/www     # thư mục này chiếm bao nhiêu
du -sh * | sort -h  # xếp hạng các thư mục con theo dung lượng
free -h             # tình trạng RAM

Khi VPS đột nhiên chậm, ba lệnh đầu tiên tôi chạy luôn là top, df -hfree -h. Phần lớn sự cố nằm ở một trong ba chỗ đó: CPU bị một tiến trình chiếm hết, ổ đĩa đầy, hoặc hết RAM.

Ổ đĩa đầy là thủ phạm bị bỏ sót nhiều nhất, và thường là do file log phình to. Cặp du -sh * | sort -h chạy trong /var/log sẽ chỉ ra ngay.

Quản lý dịch vụ

systemctl status nginx     # kiểm tra trạng thái
systemctl restart nginx    # khởi động lại
systemctl reload nginx     # nạp lại cấu hình, không ngắt kết nối
systemctl enable nginx     # tự chạy khi khởi động máy
journalctl -u nginx -n 50  # 50 dòng log gần nhất của dịch vụ

Ưu tiên reload hơn restart khi chỉ đổi cấu hình: nó nạp cấu hình mới mà không làm đứt các kết nối đang phục vụ.

Vài lệnh khác hay dùng

passwd              # đổi mật khẩu tài khoản hiện tại
date                # xem ngày giờ hệ thống
whoami              # đang đăng nhập bằng tài khoản nào
history             # xem lại các lệnh đã gõ
ln -s /goc /lienket # tạo liên kết mềm
echo $PATH          # in giá trị biến môi trường
which php           # tìm đường dẫn tới lệnh
uptime              # máy đã chạy được bao lâu

Hai phím tắt tiết kiệm nhiều thời gian nhất

Phím Tab tự hoàn thành tên file và tên lệnh. Gõ cd /var/w rồi nhấn Tab, shell tự điền nốt thành /var/www. Nó vừa nhanh vừa tránh gõ sai đường dẫn.

Phím mũi tên lên lấy lại lệnh vừa gõ. Kết hợp với Ctrl + R để tìm kiếm ngược trong lịch sử lệnh, bạn gần như không phải gõ lại lệnh dài lần thứ hai.