Nguồn: http://www.crucialp.com/resources/tutorials/server-administration/how-to-copy-files-across-a-network-internet-in-unix-linux-redhat-debian-freebsd-scp-tar-rsync-secure-network-copy.php
Một trong những thuận lợi của việc dùng Linux/UNIX là có rất nhiều cách để thực hiện một việc. Bài viết này sẽ chỉ cho bạn những cách copy files qua mạng dùng scp, rsync, tar. Tất cả các cách ở đây đều dùng ssh - nó bảo mật và đáng tin cậy hơn là rcp hoặc ftp.
1. scp
scp (hay còn gọi là secure copy) là một trong những cách đơn giản nhất, nó được thiết kế để thay thế cho rcp
Cú pháp:
Code:
scp [-Cr] /some/file [ more ... ] host.name:/destination/file
Code:
scp [-Cr] [[user@]host1:]file1 [ more ... ] [[user@]host2:]file2
Trước khi scp copy bất cứ file nào, nó sẽ kết nối qua ssh trước, sau đó hộp thoại nhắc username sẽ xuất hiện.
Tùy chọn -r được sử dụng khi bạn muốn copy "đệ quy" (recursively) trong thư mục.
scp mã hóa dữ liệu qua kết nối mạng của bạn, nhưng nếu sử dụng tuỳ chọn -C bạn có thể nén dữ liệu trước khi gửi qua mạng. Điều này có thể làm giảm thời gian khi bạn copy những file lớn.
Theo mặc định thì scp sử dụng thuật toán mã hoá 3DES
Khi nào thì không nên dùng scp:
1. Khi bạn copy nhiều file, scp sẽ tạo một tiến trình mới cho mỗi file và có thể khá chậm khi copy
2. khi sử dụng tuỳ chọn -r, scp không biết về symbolic link và sẽ mù quáng làm theo, thậm chí nếu nó đã tạo một bản copy của file đó rồi.
Ví dụ:
$ scp -C quanta@192.168.1.3:/home/quanta/openvpn-2.0.9.tar.gz /home/quanta
quanta@192.168.1.3's password:
openvpn-2.0.9.tar.gz 100% 653KB 653.4KB/s 00:00
$ scp -C /home/quanta/Lesson.odt quanta@192.168.1.3:/home/quanta
quanta@192.168.1.3's password:
Lesson.odt 100% 19KB 18.6KB/s 00:00
2. rsync: tương tự cú pháp của scp
Code:
rsync -e ssh [-avz] /some/file [ more ... ] host.name:/destination/file
Code:
rsync -ave ssh source.server:/path/to/source /destination/dir
Điểm đặc biệt của rsync là khả năng phân tích các file và chỉ copy những phần thay đổi chứ không copy lại toàn bộ các files.
-a: Archive mode
-v: Verbose: liệt kê file được copy
-z: Enable compression
-e: ssh sử dụng ssh làm phương tiện copy
Điểm bất lợi của rsync:
+ Cú pháp dài dòng
+ Phải nhớ rằng bạn đang sử dụng ssh
Ví dụ:
$ rsync -e ssh -avz quanta@192.168.1.3:/home/quanta/openvpn-2.0.9.tar.gz /home/quanta
quanta@192.168.1.3's password:
receiving file list ... done
openvpn-2.0.9.tar.gz
sent 42 bytes received 669440 bytes 191280.57 bytes/sec
total size is 669076 speedup is 1.00
$ rsync -e ssh -avz list.txt quanta@192.168.1.3:/home/quanta
quanta@192.168.1.3's password:
building file list ... done
list.txt
sent 1065 bytes received 42 bytes 316.29 bytes/sec
total size is 2775 speedup is 2.51
3. tar: luôn luôn được sử dụng cho các ứng dụng nén. tar có thể xử lý một cây thư mục lớn khá tốt mà vẫn đảm bảo file permissions.
Cú pháp:
Code:
tar -cf - /some/file | ssh host.name tar -xf - -C /destination
Code:
tar -czf - /some/file | ssh host.name tar -xzf - -C /destination
Tuỳ chọn -c tạo một archive và tuỳ chọn -f sẽ nói với tar là send archive đó đến stdout
Tuỳ chọn -C để thay đổi thư mục trên host đích. Nó lấy input từ stdin. Tuỳ chọn -x sẽ extracts archive
Cú pháp thứ 2 được dùng khi chuyển giao qua mạng với tuỳ chọn -z để nén luồng dữ liệu lại, làm giảm thời gian khi chuyển giao qua mạng.
Nếu sử dụng -v (verbose) hãy crhắc chắn rằng bạn đang dùng cú pháp thứ 2, nếu không sẽ bị "đúp" output.
Sử dụng tar và piping cũng là một cách hay để copy file trên local và file permissions vẫn giữ đúng
Tại sao tar không nên được dùng:
1. cú pháp có thể khó nhớ
2. Nó không nhanh bằng scp khi copy ít file
Có một vài cách khác để copy file qua mạng, như là FTP, NAS, hoặc NFS nhưng tất cả chúng đều yêu cầu những phần mềm chuyên dụng phải được cài trên máy "nhận", hoặc máy "gửi" cuối, hơn nữa chúng không hữu ích như những lệnh trên.