cp Linux là lệnh dùng để sao chép file hoặc thư mục từ vị trí nguồn sang vị trí đích trên hệ thống. Đây là công cụ hữu ích để thực hiện các tác vụ như backup, nhân bản cấu trúc thư mục, triển khai file cấu hình và di chuyển dữ liệu trong môi trường Linux. Trong bài viết này, mình sẽ cung cấp hướng dẫn chuyên sâu về lệnh cp, từ cú pháp chuẩn đến các kỹ thuật sao chép an toàn dành cho DevOps và SysAdmin.
Những điểm chính
- Định nghĩa lệnh cp Linux: Hiểu rõ
cplà lệnh cơ bản dùng để sao chép file hoặc thư mục, giúp tạo bản sao dự phòng hoặc di chuyển dữ liệu. - Các tùy chọn của lệnh cp: Có được bảng tra cứu nhanh các tùy chọn quan trọng, giúp bạn tùy chỉnh việc sao chép một cách linh hoạt.
- Những lợi ích khi sử dụng: Nắm được các lợi ích chính của
cpnhư bảo vệ dữ liệu, quản lý file hiệu quả và an toàn khi sao chép. - Hướng dẫn sao chép an toàn: Biết cách sử dụng lệnh
cpđể sao lưu dữ liệu mà vẫn giữ nguyên toàn bộ thuộc tính. - Các ví dụ sử dụng thực tế: Thành thạo các lệnh
cpqua các trường hợp sử dụng thực tế, từ sao chép file/thư mục cơ bản, giữ nguyên thuộc tính, đến việc sao chép hàng loạt và giám sát tiến trình. - Kỹ thuật nâng cao: Học được cách sử dụng tùy chọn
--parentsđể giữ nguyên cấu trúc đường dẫn khi sao chép. - Những lưu ý khi sử dụng: Nắm được các lưu ý quan trọng để sử dụng
cpmột cách an toàn, tránh các rủi ro như ghi đè dữ liệu và xử lý sai liên kết mềm. - Câu hỏi thường gặp: Giải đáp các thắc mắc liên quan đến lệnh cp trong Linux.
Lệnh cp Linux là gì?
Cp Linux là một lệnh cơ bản trong Linux dùng để sao chép file hoặc thư mục từ vị trí này sang vị trí khác trên hệ thống file. Lệnh này cho phép bạn tạo bản sao dự phòng cho dữ liệu mà không làm thay đổi bản gốc. Cú pháp của lệnh cp như sau:
cp [OPTION] SOURCE DESTTrong đó:
- SOURCE: Là file hoặc thư mục cần sao chép.
- DEST: Là vị trí hoặc tên file/thư mục nơi bạn muốn sao chép đến.

Các tùy chọn của lệnh cp trong Linux
Dưới đây là các tùy chọn quan trọng của lệnh cp Linux:
| Tùy chọn | Chức năng kỹ thuật | Ví dụ minh họa: |
|---|---|---|
| -r hoặc -R | Recursive: Sao chép đệ quy thư mục và nội dung bên trong. | cp -r dir1 dir2 |
| -v | Verbose: Chế độ hiển thị chi tiết tiến trình sao chép. | cp -v a.txt b.txt |
| -i | Interactive: Yêu cầu xác nhận trước khi ghi đè lên file đích đã tồn tại. | cp -i config /etc/ |
| -u | Update: Chỉ sao chép nếu file nguồn mới hơn file đích hoặc file đích chưa tồn tại. | cp -u a.txt b.txt |
| –preserve=all | Full Preservation: Giữ nguyên toàn bộ thuộc tính mở rộng và metadata. | cp --preserve=all src dst |
| -p | Preserve: Bảo lưu các thuộc tính cơ bản: Mode, Ownership, Timestamps. | cp -p src dst |
| -f | Force: Bắt buộc ghi đè không cần hỏi (cần thận trọng). | cp -f a b |
Những lợi ích khi sử dụng lệnh cp Linux
Lệnh cp mang lại nhiều lợi ích quan trọng trong quản lý file trên Linux:
- Bảo vệ dữ liệu: Lệnh cp cho phép tạo bản sao dự phòng của các file quan trọng mà không làm thay đổi hoặc xóa bản gốc. Điều này giúp bảo vệ dữ liệu khỏi mất mát hoặc hư hỏng do sơ sót.
- Phù hợp cho quản lý file: Với tùy chọn -r, bạn có thể sao chép toàn bộ thư mục cùng với các thư mục con và file bên trong một lần duy nhất giúp tiết kiệm thời gian so với việc sao chép từng file một.
- Linh hoạt khi sử dụng: Lệnh cp hỗ trợ nhiều tùy chọn mạnh mẽ như giữ nguyên thuộc tính file, chế độ tương tác, hiển thị quá trình chi tiết, cho phép bạn tùy chỉnh cách sao chép theo nhu cầu cụ thể.
- An toàn khi sao chép: Tùy chọn -i yêu cầu xác nhận trước khi ghi đè file đã tồn tại, giúp ngăn chặn việc vô tình xóa hoặc thay thế các file quan trọng.
- Tiết kiệm thời gian: Bạn có thể sao chép nhiều file cùng lúc trong một câu lệnh duy nhất bằng cách chỉ định nhiều nguồn, thay vì phải thực hiện từng lệnh một.

Hướng dẫn sao chép an toàn với lệnh cp Linux
Cú pháp để sao chép an toàn với lệnh cp Linux như sau:
cp -rv --preserve=all SOURCE DESTTrong đó:
-r(Recursive): Duyệt và sao chép đệ quy toàn bộ cấu trúc thư mục con.-v(Verbose): Hiển thị chi tiết từng file đang được xử lý ra màn hình, giúp quản trị viên giám sát tiến trình.--preserve=all: Bảo toàn tuyệt đối mọi metadata bao gồm quyền truy cập, chủ sở hữu, nhãn bảo mật và dấu thời gian.

Các ví dụ sử dụng thực tế của lệnh cp
1. Sao chép file cơ bản
Để sao chép một file đơn lẻ sang tên mới hoặc vị trí mới, bạn thực thi lệnh sau:
cp file.txt backup.txt
2. Sao chép thư mục
Để sao chép một thư mục chứa dữ liệu, bạn bắt buộc phải dùng cờ -r, nếu thiếu thì lệnh sẽ báo lỗi bỏ qua thư mục. Cú pháp lệnh như sau:
cp -r folder1 folder1_backup
3. Copy nhưng giữ nguyên permission và timestamp
Khi sao lưu các file cấu hình hoặc dữ liệu người dùng, việc giữ nguyên quyền hạn và thời gian là bắt buộc để đảm bảo ứng dụng hoạt động đúng sau khi restore. Để copy và giữ nguyên permission và timestamp, bạn sử dụng lệnh sau:
cp -rp folder1 folder1_backup
4. Copy có xác nhận
Lệnh sau sẽ ngăn chặn việc vô tình ghi đè lên file quan trọng bằng cách yêu cầu xác nhận từ người dùng (y/n):
cp -i folder1/file.txt folder1_backup/file.txtLúc này, Terminal sẽ hỏi: overwrite 'folder1_backup/file.txt'?
- Nếu bạn nhập y và nhấn Enter: file cũ sẽ bị ghi đè bởi file mới.
- Nếu bạn nhập n: thao tác sao chép bị hủy, file đích được giữ nguyên.

5. Copy hàng loạt file theo pattern với grep
Bạn sử dụng đường ống (pipe) để lọc và sao chép hàng loạt file theo mẫu cụ thể bằng lệnh:
ls | grep ".txt$" | xargs -I {} cp {} /folder1_backupTrong đó:
ls: Liệt kê danh sách file.grep: Lọc các file có đuôi.txt.xargs: Truyền danh sách file vào lệnhcpđể thực thi.

6. Giám sát tiến trình file lớn với pv
Đối với các file kích thước lớn (ISO, Database dump), bạn kết hợp với pv để theo dõi thanh tiến độ và tốc độ truyền tải bằng lệnh sau:
pv bigfile.iso | cp bigfile.iso /backup/Hoặc bạn sử dụng cơ chế redirection bằng lệnh sau:
pv bigfile.iso > /backup/bigfile.iso
7. Copy file mới hơn
Bạn sử dụng tùy chọn -u để tiết kiệm tài nguyên, chỉ sao chép các file có nội dung mới hơn so với đích:
cp -u *.txt /data/
Hướng dẫn sử dụng lệnh cp nâng cao để giữ nguyên cấu trúc đường dẫn
Sử dụng lệnh cp kết hợp với tùy chọn --parents cho phép bạn sao chép file, đồng thời tái tạo lại toàn bộ cấu trúc thư mục cha tại đích đến. Cấu trúc lệnh như sau:
cp --parents assets/images/logo.png backupHệ thống sẽ tạo ra đường dẫn đầy đủ /backup/assets/images/logo.png thay vì chỉ copy file logo.png vào ngay thư mục /backup.

Kỹ thuật này thường được ứng dụng trong các trường hợp như:
- Sao lưu file cấu hình theo đúng cây thư mục.
- Triển khai bản vá theo cấu trúc source code có sẵn.
Những lưu ý khi sử dụng lệnh cp Linux
Dưới đây là các lưu ý quan trọng khi sử dụng lệnh cp trong quản trị hệ thống Linux:
- Rủi ro ghi đè dữ liệu: Lệnh cp mặc định sẽ ghi đè file đích nếu trùng tên mà không đưa ra cảnh báo, do đó bạn nên sử dụng tùy chọn -i để yêu cầu xác nhận thủ công.
- Bảo toàn thuộc tính file: Quy trình sao chép tiêu chuẩn sẽ thay đổi chủ sở hữu và thời gian tạo file sang người dùng hiện tại, vì vậy bạn cần dùng tham số -p hoặc -a để giữ nguyên quyền hạn và timestamp.
- Xử lý liên kết mềm: Hệ thống sẽ sao chép nội dung của file đích thay vì sao chép liên kết mềm trừ khi bạn chỉ định rõ tùy chọn -P hoặc -d.
- Sao chép file tin ẩn: Ký tự đại diện * (wildcard) của Shell thường bỏ qua các file bắt đầu bằng dấu chấm (.), dẫn đến việc thiếu sót dữ liệu cấu hình khi sao chép nội dung thư mục.
- Yêu cầu đệ quy cho thư mục: Lệnh cp sẽ báo lỗi và bỏ qua đối tượng nếu người dùng cố gắng sao chép một thư mục mà không khai báo cờ -r hoặc -R.

Câu hỏi thường gặp
Có cách nào tạo bản sao lưu nhanh mà không tốn dung lượng đĩa cứng không?
Có thể, bằng cách tạo Hard Link. Thay vì sao chép dữ liệu vật lý, bạn có thể tạo một inode mới trỏ đến cùng một vùng dữ liệu trên đĩa.
Lệnh thực hiện như sau: cp -l source_file target_file
Sử dụng lệnh trên sẽ cho tốc độ tức thì và gần như không tốn dung lượng lưu trữ. Tuy nhiên, nếu nội dung file gốc thay đổi, file đích cũng thay đổi theo.
Sự khác biệt cốt lõi giữa cp -r và cp -a là gì?
– cp -r: Là lệnh sao chép đệ quy nội dung thư mục, không bảo đảm giữ nguyên quyền hạn, thời gian hay symlink.
– cp -a: Là tổ hợp của -dR –preserve=all, lệnh này sẽ sao chép đệ quy và giữ nguyên symlink, quyền hạn, user/group, timestamp, SELinux context.
Bạn nên cp -a cho việc sao lưu hệ thống đầy đủ và dùng cp -r cho việc sao chép file tài liệu thông thường.
Tại sao sau khi cp file cấu hình vào thư mục web, dịch vụ lại báo lỗi “403 Forbidden” dù đã chmod 777?
Nếu bạn đang dùng các hệ điều hành như CentOS, RHEL hoặc Fedora, nguyên nhân có thể nằm ở SELinux. Khi dùng cp, file đích sẽ nhận Security Context mặc định của thư mục cha, hoặc giữ nguyên context của nguồn nếu dùng sai tùy chọn, khiến tiến trình Web Server không có quyền truy cập. Để khắc phục, bạn sử dụng cp -Z để thiết lập lại context mặc định cho đích đến hoặc sau khi copy phải chạy lệnh restorecon -Rv /var/www/html để sửa lỗi SELinux.
Lệnh cp Linux là công cụ hữu ích nhưng có rủi ro cao nếu không được sử dụng đúng cách. Do đó, việc hiểu rõ các tùy chọn bảo toàn thuộc tính và cơ chế đệ quy không chỉ giúp bạn ngăn chặn các sự cố ghi đè dữ liệu mà còn đảm bảo tính nguyên vẹn của hệ thống sau quá trình sao lưu hoặc di chuyển.




