Lệnh “cp” trong Linux/Unix là một lệnh sao chép (copy) tập tin hoặc thư mục từ một vị trí đến một vị trí khác trong hệ thống file. Lệnh này được sử dụng để tạo ra bản sao của tập tin hoặc thư mục. Bạn có thể sao chép một tập tin từ một vị trí đến một vị trí khác trong hệ thống file hoặc sao chép nhiều tập tin cùng một lúc.
Định dạng của lệnh “cp” là:
cp [OPTIONS] SOURCE DEST
Trong đó:
- OPTIONS: là các tùy chọn để điều chỉnh thao tác sao chép, ví dụ như -r để sao chép thư mục đệ quy, -v để hiển thị thông báo khi sao chép thành công, vv.
- SOURCE: là đường dẫn tới tập tin hoặc thư mục nguồn mà bạn muốn sao chép.
- DEST: là đường dẫn tới vị trí đích muốn sao chép tập tin hoặc thư mục đến.
Các tùy chọn trong lệnh “cp” bao gồm:
- -a, –archive: Sao chép một thư mục và giữ nguyên tất cả các thuộc tính của file.
- –attributes-only: Sao chép các thuộc tính của file mà không sao chép dữ liệu của file.
- –backup[=CONTROL]: Sao lưu một bản sao của mỗi file đích đã tồn tại.
- -b: Tương tự như –backup nhưng không chấp nhận tham số.
- -d: Sao chép một thư mục mà không theo dõi các liên kết tượng trưng.
- -f, –force: Nếu một file đích đã tồn tại và không thể mở được, hãy xóa nó và thử lại (tùy chọn này bị bỏ qua khi sử dụng tùy chọn -n).
- -i, –interactive: Hiển thị cảnh báo trước khi ghi đè file đích (ghi đè các tùy chọn -n trước đó).
- -H: Theo dõi các liên kết tượng trưng dòng lệnh trong nguồn.
- -l, –link: Tạo các liên kết cứng thay vì sao chép.
- -L, –dereference: Luôn theo dõi các liên kết tượng trưng trong nguồn.
- -n, –no-clobber: Không ghi đè lên file đích đã tồn tại (ghi đè các tùy chọn -i trước đó).
- -P, –no-dereference: Không bao giờ theo dõi các liên kết tượng trưng trong nguồn.
- -p: Sao chép các thuộc tính của file, bao gồm chế độ, quyền sở hữu, thời gian đánh dấu.
- –preserve[=ATTR_LIST]: Bảo tồn các thuộc tính được chỉ định (mặc định: chế độ, quyền sở hữu, thời gian đánh dấu).
- –no-preserve=ATTR_LIST: Không bảo tồn các thuộc tính được chỉ định.
- –parents: Sử dụng tên file đầy đủ của nguồn trong thư mục đích.
- -R, -r, –recursive: Sao chép các thư mục đệ quy. Khi sử dụng tùy chọn này, nếu nguồn là một thư mục, lệnh sẽ sao chép tất cả các file và thư mục con bên trong đó vào đích. Tùy chọn này là rất hữu ích khi bạn muốn sao chép toàn bộ một thư mục hoặc cây thư mục, bao gồm các file và thư mục con. Nếu không sử dụng tùy chọn này, chỉ có file trong thư mục nguồn sẽ được sao chép vào đích mà không bao gồm các thư mục con. Ngoài ra, tùy chọn -a hoặc –archive cũng bao gồm tùy chọn -R để sao chép đệ quy và bảo tồn tất cả các thuộc tính của các file và thư mục con.
- s, –symbolic-link: tạo liên kết tượng trưng thay vì sao chép
- S, –suffix=SUFFIX: ghi đè hậu tố sao lưu thông thường
- t, –target-directory=DIRECTORY: sao chép tất cả các đối số SOURCE vào THƯ MỤC
- T, –no-target-directory: xử lý DEST như một tập tin bình thường
- u, –update: chỉ sao chép khi tập tin nguồn SOURCE mới hơn tập tin đích hoặc khi tập tin đích bị thiếu
- v, –verbose: giải thích những gì đang được thực hiện
- x, –one-file-system: duy trì trên hệ thống file này
- Z: đặt ngữ cảnh bảo mật SELinux của file đích thành loại mặc định
- –context [ =CTX ]: giống như -Z, hoặc nếu CTX được chỉ định thì đặt ngữ cảnh bảo mật SELinux hoặc SMACK thành CTX
- –help: hiển thị trợ giúp này và thoát
- –version: xuất thông tin phiên bản và thoát.
Dưới đây là một số ví dụ về cách sử dụng lệnh “cp”:
Sao chép một tập tin từ một địa chỉ đến một địa chỉ khác:
cp /home/user/file.txt /home/user/newfolder/
Sao chép một thư mục và tất cả các tập tin và thư mục con của nó:
cp -r /home/user/folder /home/user/newfolder/
Sao chép nhiều tập tin vào một thư mục đích:
cp file1.txt file2.txt /home/user/newfolder/
Để sao chép nhiều file hoặc thư mục cùng lúc, ta có thể liệt kê chúng sau lệnh cp
. Ví dụ, để sao chép file file1.txt
và file2.txt
vào thư mục /home/user/documents
, ta có thể sử dụng lệnh:
cp file1.txt file2.txt /home/user/documents/
Để sao chép một file và tạo một bản sao dự phòng của file gốc, ta có thể sử dụng tùy chọn --backup
. Ví dụ, để sao chép file file.txt
vào thư mục /home/user/documents
và tạo một bản sao dự phòng của file gốc có đuôi mở rộng .bak
, ta có thể sử dụng lệnh:
cp --backup file.txt /home/user/documents/
Để yêu cầu xác nhận trước khi ghi đè lên một file đích đã tồn tại, ta có thể sử dụng tùy chọn -i
. Ví dụ, để sao chép file file.txt
vào thư mục /home/user/documents
và yêu cầu xác nhận trước khi ghi đè lên file đích đã tồn tại, ta có thể sử dụng lệnh:
cp -i file.txt /home/user/documents/
Để tạo liên kết cứng (hard link) đến một file thay vì sao chép file đó, ta có thể sử dụng tùy chọn -l
. Ví dụ, để tạo một liên kết cứng đến file file.txt
trong thư mục hiện tại, ta có thể sử dụng lệnh:
cp -l file.txt file_link
cp -p
: Sao chép file và giữ nguyên các thuộc tính (permission, timestamp) của file gốc.
cp -p file1.txt file2.txt
Lệnh trên sẽ sao chép nội dung của file file1.txt
sang file file2.txt
, giữ nguyên các thuộc tính của file file1.txt
.
cp -u -v
: Sao chép file và chỉ sao chép nếu file nguồn mới hơn file đích.
cp -u -v file1.txt /home/user/folder/
Lệnh trên sẽ sao chép file file1.txt
vào thư mục /home/user/folder/
, chỉ sao chép nếu file file1.txt
mới hơn file folder/file1.txt
. Thêm tùy chọn -v
để hiển thị quá trình sao chép.
cp -r
: Sao chép thư mục đệ quy.
cp -r /home/user/folder1 /home/user/folder2
Lệnh trên sẽ sao chép toàn bộ nội dung của thư mục folder1
sang thư mục folder2
, bao gồm cả các thư mục và file con bên trong thư mục folder1
.