Hướng dẫn các cách phổ biến nhất để copy, di chuyển file và thư mục giữa 2 VPS Linux.
==== SCP (Secure Copy) ====
SCP dùng SSH để truyền file, đơn giản và có sẵn trên mọi hệ thống Linux.
Copy file từ máy local lên VPS:
scp file.txt root@103.157.204.101:/root/
scp file.txt root@103.157.204.101:/var/www/html/
Copy file từ VPS về máy local:
scp root@103.157.204.101:/root/file.txt ./
scp root@103.157.204.101:/var/log/nginx/error.log /tmp/
Copy file giữa 2 VPS (từ VPS A sang VPS B):
scp root@VPS_A_IP:/path/to/file root@VPS_B_IP:/path/to/dest/
Copy cả thư mục (dùng -r):
scp -r /var/www/html root@103.157.204.101:/var/www/
scp -r root@VPS1:/home/user/myapp root@VPS2:/home/user/
Copy với port SSH khác (dùng -P):
scp -P 2222 file.txt root@103.157.204.101:/root/
Copy nhiều file cùng lúc:
scp file1.txt file2.txt file3.txt root@103.157.204.101:/root/
scp *.log root@103.157.204.101:/tmp/logs/
Nén rồi copy (tiết kiệm băng thông, dùng -C):
scp -C -r /var/www/html root@103.157.204.101:/var/www/
Xem tiến trình copy (dùng -v):
scp -v largefile.tar.gz root@103.157.204.101:/root/
==== RSYNC (Đồng bộ thư mục) ====
rsync thông minh hơn SCP: chỉ copy phần thay đổi, giữ nguyên permissions, hỗ trợ resume. Phù hợp để sync thư mục lớn hoặc backup.
Sync thư mục từ local lên VPS:
rsync -avz /var/www/html/ root@103.157.204.101:/var/www/html/
Sync từ VPS về local:
rsync -avz root@103.157.204.101:/var/www/html/ /backup/html/
Sync giữa 2 VPS:
rsync -avz root@VPS1:/var/www/ root@VPS2:/var/www/
Các option quan trọng:
-a : archive mode (giữ permissions, timestamps, symlinks)
-v : verbose (hiện tiến trình)
-z : nén data trong quá trình truyền
-P : hiện progress bar + resume khi bị ngắt
--delete : xóa file ở đích nếu không còn ở nguồn (sync hoàn toàn)
--exclude : bỏ qua file/thư mục nhất định
-n : dry run, chỉ xem sẽ làm gì chứ không thực sự copy
Rsync với port SSH khác:
rsync -avz -e "ssh -p 2222" /var/www/ root@103.157.204.101:/var/www/
Rsync bỏ qua thư mục:
rsync -avz --exclude="node_modules" --exclude=".git" --exclude="*.log" \
/var/www/myapp/ root@103.157.204.101:/var/www/myapp/
Rsync xóa file đích không còn ở nguồn:
rsync -avz --delete /var/www/html/ root@103.157.204.101:/var/www/html/
Resume file lớn bị ngắt giữa chừng:
rsync -avzP largefile.tar.gz root@103.157.204.101:/root/
==== SFTP (Interactive File Transfer) ====
SFTP cho phép duyệt và quản lý file tương tác như FTP nhưng qua SSH.
# Kết nối SFTP
sftp root@103.157.204.101
# Kết nối port khác
sftp -P 2222 root@103.157.204.101
Các lệnh trong SFTP session:
ls # liệt kê file trên VPS
lls # liệt kê file trên máy local
pwd # thư mục hiện tại trên VPS
lpwd # thư mục hiện tại trên local
cd /var/www # vào thư mục trên VPS
lcd /tmp # vào thư mục trên local
get file.txt # download file từ VPS về local
get -r folder/ # download cả thư mục
put file.txt # upload file từ local lên VPS
put -r folder/ # upload cả thư mục
rm file.txt # xóa file trên VPS
mkdir newfolder # tạo thư mục trên VPS
exit # thoát
==== TAR + SSH (Nén và truyền một lần) ====
Cách nhanh để copy thư mục lớn — nén và truyền trong 1 lệnh, không cần tạo file tar tạm:
Copy thư mục từ VPS A sang VPS B:
# Chạy trên VPS A:
tar czf - /var/www/html | ssh root@VPS_B_IP "tar xzf - -C /var/www/"
Copy từ local lên VPS:
tar czf - ./myapp | ssh root@103.157.204.101 "tar xzf - -C /var/www/"
==== SO SÁNH CÁC PHƯƠNG PHÁP ====
- SCP: Đơn giản, nhanh, phù hợp copy file/thư mục nhỏ. Không resume được.
- rsync: Tốt nhất cho thư mục lớn, backup, sync định kỳ. Chỉ copy phần thay đổi, resume được.
- SFTP: Phù hợp khi cần duyệt file tương tác, upload/download linh hoạt.
- tar + SSH: Nhanh nhất cho thư mục lớn nhiều file nhỏ vì nén trước khi truyền.
Tip: Dùng SSH key để không cần nhập password khi copy
# Tạo SSH key trên máy nguồn
ssh-keygen -t ed25519
# Copy public key lên VPS đích
ssh-copy-id root@103.157.204.101
# Sau đó SCP/rsync không cần nhập password nữa
rsync -avz /data/ root@103.157.204.101