14 ví dụ về lệnh cp trên Centos / Ubuntu / Debian / Fedora
Cú pháp lệnh cp
trong Linux như sau:
$ cp [OPTIONS] <SOURCE> <DEST> $ cp [OPTIONS] <SOURCE-1> <SOURCE-2> ... <DIRECTORY>
Trong cú pháp trên, các dấu ngoặc vuông ([]) đại diện cho các đối số tùy chọn trong khi các dấu ngoặc nhọn (<>) đại diện cho các đối số bắt buộc.
Một số ứng dụng của lệnh cp
Sử dụng lệnh cp để sao chép tệp
Một trong những cách sử dụng cơ bản của lệnh cp là sao chép một tập tin vào thư mục hiện tại. Hầu hết thời gian, người dùng thực hiện thao tác này để tạo bản sao lưu của cấu hình quan trọng. Ví dụ, chúng ta thường tạo một bản sao lưu của tập tin /etc/ssh/sshd_config trước khi cập nhật cấu hình SSH. Để hiểu cách sử dụng, hãy tạo một tập tin đơn giản:
$ touch file-1.txt
Tạo một bản sao của tập tin bằng cách sử dụng lệnh sau:
$ cp file-1.txt file-2.txt
Sao chép tệp trong hệ điều hành Linux
Hiển thị tiến trình lệnh sao chép
Trong ví dụ trước, chúng ta đã sử dụng lệnh ls để kiểm tra xem thao tác sao chép tập tin có thành công hay không. Tuy nhiên, việc sử dụng một lệnh nữa chỉ để kiểm tra kết quả của các lệnh trước không có ý nghĩa.
Trong những trường hợp như vậy, chúng ta có thể kích hoạt chế độ chi tiết bằng cách sử dụng tùy chọn -v, cho phép hiển thị thông tin chẩn đoán cho mỗi tập tin đã được xử lý. Hãy tạo một bản sao của tập tin file-1.txt bằng cách sử dụng lệnh sau:
$ cp -v file-1.txt file-3.txt
Hiển thị đầu ra bản sao
Trong đầu ra trên, mũi tên đại diện cho tập tin đang được sao chép. Đối số phía trái là tập tin nguồn trong khi đối số phía phải là tập tin đích.
Sử dụng lệnh cp để copy nhiều tệp vào thư mục
Trên các ví dụ trên, chúng ta đã làm việc với một tập tin duy nhất và chỉ một thư mục làm việc hiện tại. Tuy nhiên, trong môi trường sản xuất thực tế, chúng ta phải làm việc với một số lượng lớn các tập tin. Một trong những trường hợp sử dụng phổ biến trong những môi trường như vậy là sao chép nhiều tập tin vào một thư mục duy nhất.
Tất nhiên, chúng ta có thể thực thi lệnh cp nhiều lần để thực hiện điều đó, nhưng đây không phải là cách hiệu quả nhất. Để thực hiện thao tác như vậy một cách hiệu quả, chúng ta có thể sử dụng cú pháp thay thế của lệnh cp.
Vì vậy, trước tiên, hãy tạo một thư mục mới với tên dir-1:
$ mkdir dir-1
Hãy sao chép tất cả ba tập tin vào thư mục dir-1 bằng một lệnh đơn:
$ cp -v file-1.txt file-2.txt file-3.txt dir-1
Sao chép nhiều tệp trong Linux
Đầu ra trên cho thấy tất cả các tập tin đã được sao chép vào thư mục dir- Ngoài ra, điều quan trọng cần lưu ý là để sử dụng cú pháp thay thế này, thư mục phải đã tồn tại và phải là đối số cuối cùng của lệnh.
Cách tránh ghi đè tệp
Theo mặc định, lệnh cp sẽ thay thế tập tin đích, điều này có nghĩa là nó sẽ ghi đè lên tập tin nếu tập tin cùng tên đã tồn tại ở đích. Tuy nhiên, chúng ta có thể vô hiệu hóa hành vi mặc định này bằng cách sử dụng tùy chọn -n. Hãy thử ghi đè lên tập tin hiện có:
$ cp -n -v file-1.txt file-2.txt
Trong ví dụ này, chúng ta đã sử dụng tùy chọn -v để minh họa rằng tập tin file-2.txt không bị ghi đè.
Ghi đè tệp tin với yêu cầu xác nhận
Trong ví dụ trước, chúng ta đã thấy cách tránh việc ghi đè lên tập tin đích. Tuy nhiên, đôi khi chúng ta muốn ghi đè lên tập tin đích một cách an toàn hơn.
Trong trường hợp như vậy, bạn có thể sử dụng tùy chọn -i của lệnh để thực hiện thao tác sao chép một cách tương tác. Tùy chọn này sẽ hiển thị thông báo cảnh báo và đợi xác nhận từ người dùng trước khi ghi đè lên tập tin. Hãy thử ghi đè lên tập tin hiện có:
$ cp -i file-1.txt file-2.txt cp: overwrite 'file-2.txt'?
Lúc này, lệnh đang chờ xác nhận. Tương tự như các lệnh Linux khác, chúng ta có thể sử dụng 'y' để tiếp tục hoặc 'n' để hủy bỏ thao tác.
Tuy nhiên, hành vi mặc định không tương tác của lệnh cp không an toàn. Có khả năng người dùng có thể ghi đè lên một cấu hình quan trọng một cách vô tình. Do đó, một số bản phân phối Linux áp dụng hành vi tương tác theo mặc định bằng cách sử dụng lệnh alias.
$ alias cp='cp -i'
Ghi đè lên tập tin chỉ khi nguồn mới hơn
Trong ví dụ trước, chúng ta đã thấy cách sử dụng chế độ tương tác. Tuy nhiên, đôi khi, người dùng có thể ghi đè lên tập tin mới hơn một cách không cố ý.
Để tránh các trường hợp dễ xảy ra lỗi như vậy, chúng ta có thể sử dụng tùy chọn -u, chỉ thực hiện thao tác sao chép nếu nguồn mới hơn tập tin đích hoặc nếu tập tin không tồn tại tại đích. Đầu tiên, hãy cập nhật thời gian của tập tin nguồn:
$ touch -t 10101010 file-1.txt $ ls -l file-1.txt
Trong ví dụ trên, chúng ta đã sử dụng tùy chọn -t của lệnh touch để đặt thời điểm của tập tin thành ngày 10 tháng 10 năm Tiếp theo, hãy cập nhật thời điểm của tập tin đích thành thời gian hiện tại:
$ touch file-2.txt
Bây giờ, hãy thử thực hiện thao tác sao chép bằng cách sử dụng tùy chọn -u:
$ cp -u -v file-1.txt file-2.txt
Ở đây, chúng ta có thể thấy rằng thao tác sao chép không được thực hiện vì tập tin đích mới hơn nguồn. Cuối cùng, hãy hoán đổi đối số nguồn và đích và thực hiện thao tác sao chép:
$ cp -u -v file-2.txt file-1.txt
Trong kết quả đầu ra trên, chúng ta có thể thấy rằng thao tác sao chép thành công vì tập tin nguồn mới hơn tập tin đích.
Chỉ ghi đè tệp nếu nguồn mới hơn
Sao lưu tệp trước khi ghi đè
Bạn có thể chỉ định lệnh cp tạo bản sao lưu của tập tin đích trước khi ghi đè lên nó. Để làm điều này, chúng ta có thể sử dụng tùy chọn --backup, nó sẽ thực hiện sao lưu tự động.
$ cp --backup=numbered -v file-1.txt file-2.txt
Trong ví dụ này, chúng ta đã sử dụng chính sách sao lưu theo số thứ tự. Chính sách này sử dụng các số tăng dần trong tên các tập tin sao lưu. Thực hiện lệnh trên nhiều lần và quan sát kết quả:
$ cp --backup=numbered -v file-1.txt file-2.txt $ cp --backup=numbered -v file-1.txt file-2.txt $ cp --backup=numbered -v file-1.txt file-2.txt
Sao lưu tệp tin trước khi ghi đè
Buộc sao chép để ghi đè tệp
Trong một số ví dụ trước đó, chúng ta đã thấy cách ghi đè lên tập tin một cách an toàn. Tuy nhiên, trong một số trường hợp hiếm, yêu cầu là ghi đè lên tập tin. Tuy nhiên, không có đảm bảo rằng thao tác sẽ thành công mỗi lần.
Ví dụ, thao tác sao chép sẽ thất bại nếu tập tin đích không có quyền ghi. Hãy minh họa điều này bằng một ví dụ. Trước tiên, thay đổi quyền của tập tin đích:
$ chmod 444 tệp-2.txt $ ls -l tệp-2.txt
Thử ghi đè lên tệp file-2.txt:
$cp file-1.txt file-2.txt
Trong kết quả đầu ra trên, chúng ta có thể thấy rằng lệnh đã thất bại với lỗi "permission denied" (quyền bị từ chối). Để khắc phục hạn chế này, chúng ta có thể sử dụng tùy chọn -f, nó sẽ xóa các tập tin đích và thực hiện thao tác sao chép nếu không thể mở tập tin đích. Bây giờ, hãy sử dụng tùy chọn -f để ghi đè lên tập tin một cách mạnh mẽ:
$ cp -f -v file-1.txt file-2.txt
Buộc sao chép để ghi đè tệp
Xóa tệp đích trước khi sao chép
Bên trên, chúng ta đã thấy cách xóa tập tin đích nếu có lỗi xảy ra trong quá trình thao tác. Tuy nhiên, đôi khi yêu cầu là xóa tập tin đích trước và sau đó thực hiện thao tác sao chép. Để đáp ứng yêu cầu như vậy, chúng ta có thể sử dụng tùy chọn --remove-destination. Ví dụ, hãy thử thực hiện sao chép tập tin với việc xóa tập tin đích trước:
$ cp --remove-destination -v file-1.txt file-2.txt
Xóa tệp đích trước khi sao chép
Trong kết quả đầu ra trên, chúng ta có thể thấy rằng lệnh cp trước tiên xóa tập tin đích và sau đó thực hiện thao tác sao chép.
Tạo một liên kết cứng (hard link) thay vì sao chép tập tin
Chúng ta có thể tạo liên kết cứng thay vì tạo một bản sao mới của tập tin nguồn. Tùy chọn này đóng vai trò quan trọng khi có sự khan hiếm về dung lượng đĩa. Vì vậy, hãy sử dụng tùy chọn -l để tạo một liên kết cứng như sau:
$ cp -l -v file-1.txt file-4.txt
Hãy kiểm tra số inode của cả hai tệp để xác minh các liên kết cứng:
$ ls -i1 file-1.txt file-4.txt
Tạo tệp liên kết cứng thay vì sao chép
Trong đầu ra ở trên, các số trong cột đầu tiên đại diện cho các số inode.
Tạo tệp liên kết mềm (soft link) thay vì sao chép
Tương tự, chúng ta có thể tạo một liên kết mềm thay vì tạo một bản sao mới bằng cách sử dụng tùy chọn -s như dưới đây:
$ cp -s -v file-1.txt file-5.txt
Hãy xác minh rằng liên kết tượng trưng đã được tạo thành công:
$ ls -l file-5.txt
Tạo một liên kết mềm thay vì sao chép
Ở trên, các cột cuối cùng biểu thị mối quan hệ liên kết tượng trưng.
Cách giữ nguyên các thuộc tính của tệp khi sao chép
Có nhiều thuộc tính liên quan đến tệp tin, chẳng hạn như thời gian truy cập, thời gian sửa đổi, quyền truy cập, v.v. Theo mặc định, các thuộc tính này không được bảo tồn khi sao chép tệp tin. Để ghi đè lên hành vi mặc định này, chúng ta có thể sử dụng tùy chọn -p.
Để hiểu điều này, trước tiên, hãy cập nhật thời gian của file-1.txt:
$ touch -t 10101010 file-1.txt
Tạo một bản sao của tệp tin này bằng cách bảo tồn tất cả các thuộc tính:
$ cp -p -v file-1.txt file-6.txt
Xác minh dấu thời gian của tệp file-6.txt :
$ ls -l file-6.txt
Giữ nguyên các thuộc tính tệp trong khi sao chép
Thực hiện thao tác sao chép theo cách đệ quy
Trong nhiều trường hợp, chúng ta cần sao chép tất cả các tệp tin và các thư mục con của một thư mục cụ thể. Lúc này, bạn có thể sử dụng chế độ đệ quy bằng cách sử dụng tùy chọn -r hoặc -R. Vì vậy, hãy tạo một thư mục và thêm một số tệp tin và các thư mục con vào đó:
$ mkdir -p dir-1/dir-2 $ touch dir-1/file-1.txt dir-1/dir-2/file-2.txt
Sau đó, hãy xác minh rằng cấu trúc thư mục đã được tạo thành công:
$ tree dir-1
Bây giờ, hãy sao chép thư mục dir-1 theo cách đệ quy bằng lệnh sau:
$ cp -r -v dir-1 dir-3
Cuối cùng, hãy xác minh rằng tất cả các tệp tin và thư mục con đã được sao chép thành công:
$ tree dir-3
Sao chép tệp tin theo cách đệ quy
Sao chép nhiều thư mục
Tương tự như với các tệp tin, chúng ta có thể sao chép nhiều thư mục đệ quy bằng một lệnh duy nhất. Tuy nhiên, để làm điều này, thư mục đích phải tồn tại trước đó và phải là đối số cuối cùng trong lệnh.
Trước tiên, hãy tạo một thư mục mới:
$ mkdir dir-4
Bây giờ, chúng ta hãy sao chép các thư mục dir-1 và dir-3 vào thư mục dir-4 bằng lệnh sau:
$ cp -r -v dir-1 dir-3 dir-4
Tương tự, chúng ta cũng có thể sử dụng tùy chọn -t của lệnh để đạt được kết quả tương tự. Tùy chọn này cho phép chúng ta chỉ định thư mục đích. Vì vậy, chúng ta có thể sử dụng nó như một đối số đầu tiên trong lệnh:
$ cp -t dir-4 -r -v dir-1 dir-3
Sao chép nhiều thư mục cùng lúc
Lệnh cp trong hệ điều hành Linux thường được dùng để sao chép tệp tin và thư mục. Với 14 ví dụ bên trên cùng những cách ứng dụng khác nhau hy vọng sẽ giúp ích được cho bạn trong quá trình sử dụng hệ điều hành Linux hằng ngày.
Mọi người cùng tìm kiếm: lệnh cp trong linux, cp ubuntu, lệnh cp linux, 14 lệnh trong logo, cp centos, debian cp