Có nhiều cách thức để copy file và thư mục từ một máy tới những máy khác trong Linux. Trong bài viết này, mình sẽ chia sẻ cho các bạn các lệnh và tham số để copy thư mục từ máy local đến máy chủ từ xa trên Linux.
Copy thư mục local tới remote server
Bạn có thể dùng ssh hoặc rsync để copy thư mục từ local đến remote server trên cùng hoặc khác directory. Nếu bạn muốn thực hiện việc truyền dữ liệu song song, bạn phải dùng pscp hoặc pssh bởi theo mặc định scp hoặc ssh sẽ truyền dữ liệu tuần tự. Nếu bạn đã cấu hình key đăng nhập giữa các server của bạn, thì scp/ssh sẽ không nhắc bạn nhập password và sẽ truyền file từ một server đến server khác một cách liền mạch. Điều này rất hữu ích cho automation.
Sử dụng scp để copy folder
Scp là gì?
scp là một công cụ copy từ xa an toàn được sử dụng để copy files và folders từ local tới remote hoặc là từ remote tới local server trên Linux. Nếu bạn sử dụng công cụ scp mà không có tham số “-r”, khi đó công cụ chỉ có thể copy files từ local tới remote server.
Cú pháp sử dụng
scp -r <path to dir on localhost> user@<host>:<path on remote host>/
Ví dụ: giờ mình sẽ copy toàn bộ directory /tmp/deepak từ localhost tới remote server tại vị trí /home/temp/ .Bên dưới là liệt kê file và folder của /tmp/deepak, như vậy mình sẽ copy tất cả file và folder tới remote server.
server-test1:~ # ls -l /tmp/deepak/
total 8
-rw-r----- 1 root root 0 May 10 13:38 file1
-rw-r----- 1 root root 0 May 10 13:38 file2
-rw-r----- 1 root root 0 May 10 13:38 file3
drwxr-x--- 2 root root 4096 May 10 13:39 test1
drwxr-x--- 2 root root 4096 May 10 13:39 test2
Sử dụng lệnh dưới đây để copy từ local tới remote server
server1:~ # scp -r /tmp/deepak check@10.10.13.20:/home/temp/
Password:
file1 100% 0 0.0KB/s 00:00
file3 100% 0 0.0KB/s 00:00
file2
Tiếp theo xác nhận truyền dữ liệu thành công trên máy từ xa
server2:~ # ll /home/temp/deepak/
total 8
drwxr-x--- 2 temp users 4096 May 10 16:50 test1
-rw-r----- 1 temp users 0 May 10 16:50 file1
drwxr-x--- 2 temp users 4096 May 10 16:50 test2
-rw-r----- 1 temp users 0 May 10 16:50 file3
-rw-r----- 1 temp users 0 May 10 16:50 file2
Nếu bạn muốn copy toàn bộ nội dung từ /tmp/deepak tới máy từ xa trên cùng directory name, dùng cú pháp dưới đây:
scp -r <path to dir on localhost>/* user@<host>:<path on remote host>/
Chạy câu lệnh bên dưới
server1:~ # scp -r /tmp/deepak/* temp@10.10.13.20:/home/temp/rahul/
Password:
file1 100% 0 0.0KB/s 00:00
file2 100% 0 0.0KB/s 00:00
file3 100
File và folder của chúng ta đã được copy tới máy từ xa thành công. Xác nhân nội dung trên máy từ xa
server2:~ # ls -l /home/temp/rahul/
total 8
-rw-r----- 1 temp users 0 May 10 16:54 file1
-rw-r----- 1 temp users 0 May 10 16:54 file2
-rw-r----- 1 temp users 0 May 10 16:54 file3
drwxr-x--- 2 temp users 4096 May 10 16:54 test1
drwxr-x--- 2 temp users 4096 May 10 16:54 test2
Sử dụng rsync để copy thư mục
Rsync là gì?
rsync là sự lựa chọn khác thay thế cho scp để copy file and thư mục từ local tới remote server.
Cú pháp
rsync -avz <path to dir on localhost> user@<host>:<path on remote host>/
Tương tự như scp, mình sẽ dùng rsync để thực hiện truyền thư mục. Để copy toàn bộ địa chỉ thư mục (deepak) từ /tmp tới remote host tại /home/temp
server1:~ # rsync -avz /tmp/deepak temp@10.10.13.20:/home/temp/
Password:
sending incremental file list
deepak/
deepak/file1
deepak/file2
deepak/file3
deepak/test1/
deepak/test2/
deepak/test2/
sent 240 bytes received 81 bytes 49.38 bytes/sec
total size is 0 speedup is 0.00
Xác minh dữ liệu có trên server 2
server2:/home/temp # ll /home/temp/deepak/
total 8
-rw-r----- 1 temp users 0 May 10 16:38 file3
-rw-r----- 1 temp users 0 May 10 16:38 file2
-rw-r----- 1 temp users 0 May 10 16:38 file1
drwxr-x--- 2 temp users 4096 May 10 16:39 test2
drwxr-x--- 2 temp users 4096 May 10 16:39 test1
Tiếp theo, mình sẽ copy nội dung của /tmp/deepak tới một thư mục khác trên máy từ xa tại /home/temp/quangvublog
Cú pháp
rsync -avz <path to dir on localhost>/* user@<host>:<path on remote host>/
Tiếp theo thực thi câu lệnh theo cú pháp
server1:~ # rsync -avz /tmp/deepak/* temp@10.10.13.20:/home/temp/quangvublog/
Password:
sending incremental file list
file1
file2
file3
test1/
test2/
sent 195 bytes received 77 bytes 108.80 bytes/sec
total size is 0 speedup is 0.00
Xác minh dữ liệu trên máy từ xa
server2:/home/temp # ls -l /home/temp/quangvublog/
total 8
--r----- 1 temp users 0 May 10 16:38 file1
-rw-r----- 1 temp users 0 May 10 16:38 file2
-rw-r----- 1 temp users 0 May 10 16:38 file3
drwxr-x--- 2 temp users 4096 May 10 16:39 test1
drwxr-x--- 2 temp users 4096 May 10 16:39 test2
Copy nội dung từ máy từ xa đến máy local
Tiếp theo mình sẽ hướng dẫn các bạn các lệnh và cú pháp để copy thư mục từ máy từ xa đến máy local. Để copy, chúng ta có thể dùng các lệnh tương tự như scp hoặc rsync. Cú pháp chỉ thay đổi từ destination thành source và source thành destination thôi.
Copy sử dụng scp
Cú pháp
scp -r <user>@<host>:<source path on remote host> <destination on localhost>
Bên dưới là nội dung trên máy từ xa tại /home/temp/deepak mà mình muốn copy tới vị trí local tại /tmp/deepak
server2:~ # ls -l /home/temp/deepak/
total 8
-rwxrwxrwx 1 root root 0 May 11 00:21 file1
-rwxrwxrwx 1 root root 0 May 11 00:21 file2
-rwxrwxrwx 1 root root 0 May 11 00:21 file3
drwxrwxrwx 2 root root 4096 May 11 00:21 test1
drwxrwxrwx 2 root root 4096 May 11 00:21 test2
Bên dưới là lệnh được thực hiện để copy folder từ remote đến local
server1:~ # scp -r temp@10.10.13.20:/home/temp/deepak /tmp/
Password:
file2 100% 0 0.0KB/s 00:00
file3 100% 0 0.0KB/s 00:00
file1
Xác minh nội dung
server1:~ # ls -l /tmp/deepak/
total 8
-rwxr-x--- 1 root root 0 May 11 00:22 file1
-rwxr-x--- 1 root root 0 May 11 00:22 file2
-rwxr-x--- 1 root root 0 May 11 00:22 file3
drwxrwxrwx 2 root root 4096 May 11 00:22 test1
drwxrwxrwx 2 root root 4096 May 11 00:22 test2
Copy folder sử dụng rsync
Tương tự như các sử dụng rsync bên để copy folder từ local tới remote
Cú pháp
scp -r <user>@<host>:<source path on remote host> <destination on localhost>
Dùng lệnh bên dưới để copy folder từ remote tới local
server1:~ # rsync -avz temp@10.10.13.20:/home/temp/deepak /tmp/
Password:
receiving incremental file list
deepak/
deepak/file1
deepak/file2
deepak/file3
deepak/test1/
deepak/test2/
sent 80 bytes received 261 bytes 136.40 bytes/sec
total size is 0 speedup is 0.00
Cuối cùng, mình hy vọng các bước từ bài viết ssh copy thư mục từ local đến remote và remote tới local sử dụng scp và rsync trên Linux thực sự hữu ích.