Lệnh scp trong Linux cho phép người dùng copy file và thư mục an toàn giữa hai vị trí khác nhau. Bài viết này sẽ hướng dẫn cho bạn cách sử dụng lệnh scp kèm theo các ví dụ trực quan, dễ hiểu. Cùng tham khảo ngay nhé!
Cú pháp của lệnh scp trong Linux
Lệnh scp
(secure copy) là một công cụ mạnh mẽ trong Linux cho phép truyền tải file an toàn giữa các máy chủ (host). Lệnh này sử dụng mã hóa để bảo vệ dữ liệu trong quá trình truyền tải, đảm bảo tính bảo mật cho thông tin của bạn.
Cú pháp cơ bản của lệnh scp
như sau:
scp [options] [source] [destination]
Trong đó:
- Options: Tùy chọn bổ sung cho lệnh
scp
. - Source: Đường dẫn đến file hoặc thư mục nguồn cần sao chép.
- Destination: Đường dẫn đến vị trí đích để lưu file hoặc thư mục.
Lệnh scp
sử dụng kết nối SSH để truyền tải dữ liệu. Vì vậy, bạn cần phải xác thực trên máy chủ đích bằng ssh key hoặc mật khẩu.
Cách copy file và thư mục bằng lệnh scp trong Linux
Copy file local đến hệ thống remote
Để copy file từ máy local của bạn đến máy chủ từ xa (remote host), bạn có thể sử dụng lệnh scp (secure copy). Lệnh scp
sử dụng kết nối SSH (Secure Shell) để truyền tải file an toàn và bảo mật.
Để copy file file.txt từ máy local đến thư mục /remote/directory trên máy chủ đích có địa chỉ IP 10.10.0.2 với tên người dùng remote_username, bạn có thể sử dụng lệnh sau:
scp file.txt remote_username@10.10.0.2:/remote/directory
Trong đó, file.txt là tên của file cần copy, còn remote_username là user trên server ở xa, 10.10.0.2 là địa chỉ IP của server, /remote/directory là đường dẫn của thư mục đích cần copy file đến. Nếu không chỉ định directory ở xa thì file sẽ được tự động copy vào home directory của remote user.
Sau khi thực thi lệnh, bạn sẽ được yêu cầu nhập mật khẩu để bắt đầu quá trình chuyển file:
remote_username@10.10.0.2's password: file.txt 100% 0 0.0KB/s 00:00
Nếu không chỉ định tên file trong vị trí đích thì lệnh scp
sẽ copy file rồi đặt tên gốc. Nếu muốn lưu file dưới một tên khác thì ta cần chỉ định tên file mới trong lệnh:
scp file.txt remote_username@10.10.0.2:/remote/directory/newfilename.txt
Nếu SSH trên remote host đang nghe ở một cổng khác (mặc định là cổng 22) thì bạn có thể chỉ định cổng bằng option -P:
scp -P 2322 file.txt remote_username@10.10.0.2:/remote/directory
Để copy một thư mục, cú pháp cũng không có gì khác biệt nhiều vì bạn chỉ cần thêm flag -r để copy file và thư mục theo kiểu đệ quy.
scp -r /local/directory remote_username@10.10.0.2:/remote/directory
Copy một file remote đến hệ thống local
Để copy file từ một vị trí ở xa về máy local thì ta có thể dùng vị trí remote như nguồn và vị trí local như vị trí đích để copy file.
Chẳng hạn như bạn muốn copy file có tên file.txt từ remote server, địa chỉ IP là 10.10.0.2 về máy local thì có thể dùng lệnh sau:
scp remote_username@10.10.0.2:/remote/file.txt /local/directory
Copy file giữa hai hệ thống remote
Không giống như rsync, lệnh scp không yêu cầu người dùng phải đăng nhập vào một trong các server để truyền file ở các hệ thống từ xa.
Câu lệnh sau cho phép copy file /files/file.txt từ remote host host1.com đến thư mục /files trên remote host host2.com.
scp user1@host1.com:/files/file.txt user2@host2.com:/files
Sau đó ta sẽ được yêu cầu nhập mật khẩu cho hai tài khoản remote này. Dữ liệu sẽ được truyền trực tiếp từ một host đến host khác.
Để định tuyến traffic qua máy thực thi lệnh, ta có thể truyền thêm option -3 như sau:
scp -3 user1@host1.com:/files/file.txt user2@host2.com:/files
Lời kết
Bài viết này đã hướng dẫn cách sử dụng lệnh scp trong Linux để copy file giữa các máy local và remote với nhau, hay thậm chí là giữa hai máy remote. Bạn có thể thiết lập thêm xác thực dựa trên key ssh để kết nối đến server Linux mà không cần nhập mật khẩu, hoặc nếu thường xuyên kết nối đến một hệ thống nào đó thì có thể định nghĩa các kết nối trong file config SSH để đơn giản hóa các quá trình sau này.