【Linux】一步一步学Linux——cp命令(31)
00. 目錄
文章目錄
- 00. 目錄
- 01. 命令概述
- 02. 命令格式
- 03. 常用選項
- 04. 參考示例
- 05. 附錄
01. 命令概述
cp命令可以理解為英文單詞copy的縮寫,其功能為復制文件或目錄。
cp命令可以將多個文件復制到一個具體的文件名或一個已經存在的目錄下,也可以同時復制多個文件到一個指定的目錄中。
02. 命令格式
用法:cp [選項]... [-T] 源文件 目標文件或:cp [選項]... 源文件... 目錄或:cp [選項]... -t 目錄 源文件... Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.03. 常用選項
長選項必須使用的參數對于短選項時也是必需使用的。-a, --archive 等于-dR --preserve=all--attributes-only 只拷貝文件屬性,不拷貝文件內容--backup[=CONTROL 為每個已存在的目標文件創建備份-b 類似--backup 但不接受參數--copy-contents 在遞歸處理是復制特殊文件內容-d 等于--no-dereference --preserve=links-f, --force 如果目標文件無法打開則將其移除并重試(當 -n 選項存在時則不需再選此項)-i, --interactive 覆蓋前詢問(使前面的 -n 選項失效)-H 跟隨源文件中的命令行符號鏈接-l, --link 鏈接文件而不復制-L, --dereference 總是跟隨符號鏈接-n, --no-clobber 不要覆蓋已存在的文件(使前面的 -i 選項失效)-P, --no-dereference 不跟隨源文件中的符號鏈接-p 等于--preserve=模式,所有權,時間戳--preserve[=屬性列表 保持指定的屬性(默認:模式,所有權,時間戳),如果可能保持附加屬性:環境、鏈接、xattr 等-c same as --preserve=context--sno-preserve=屬性列表 不保留指定的文件屬性--parents 復制前在目標目錄創建來源文件路徑中的所有目錄-R, -r, --recursive 遞歸復制目錄及其子目錄內的所有內容--reflink[=WHEN] 控制克隆/CoW 副本。請查看下面的內如。--remove-destination 嘗試打開目標文件前先刪除已存在的目的地文件 (相對于 --force 選項)--sparse=WHEN 控制創建稀疏文件的方式--strip-trailing-slashes 刪除參數中所有源文件/目錄末端的斜杠-s, --symbolic-link 只創建符號鏈接而不復制文件-S, --suffix=后綴 自行指定備份文件的后綴-t, --target-directory=目錄 將所有參數指定的源文件/目錄復制至目標目錄-T, --no-target-directory 將目標目錄視作普通文件-u, --update copy only when the SOURCE file is newerthan the destination file or when thedestination file is missing-v, --verbose explain what is being done-x, --one-file-system stay on this file system-Z, --context=CONTEXT set security context of copy to CONTEXT--help 顯示此幫助信息并退出--version 顯示版本信息并退出默認情況下,源文件的稀疏性僅僅通過簡單的方法判斷,對應的目標文件目標文件也 被為稀疏。這是因為默認情況下使用了--sparse=auto 參數。如果明確使用 --sparse=always 參數則不論源文件是否包含足夠長的0 序列也將目標文件創文 建為稀疏件。 使用--sparse=never 參數禁止創建稀疏文件。當指定了--reflink[=always] 參數時執行輕量化的復制,即只在數據塊被修改的 情況下才復制。如果復制失敗或者同時指定了--reflink=auto,則返回標準復制模式。備份文件的后綴為"~",除非以--suffix 選項或是SIMPLE_BACKUP_SUFFIX 環境變量指定。版本控制的方式可通過--backup 選項或VERSION_CONTROL 環境 變量來選擇。以下是可用的變量值:none, off 不進行備份(即使使用了--backup 選項)numbered, t 備份文件加上數字進行排序existing, nil 若有數字的備份文件已經存在則使用數字,否則使用普通方式備份simple, never 永遠使用普通方式備份有一個特別情況:如果同時指定--force 和--backup 選項,而源文件和目標文件 是同一個已存在的一般文件的話,cp 會將源文件備份。04. 參考示例
4.1 復制文件
[deng@localhost test]$ cp /etc/passwd passwd [deng@localhost test]$ ls a passwd [deng@localhost test]$4.2 復制一個文件到目錄中
[deng@localhost test]$ ls a passwd [deng@localhost test]$ cp passwd a/**注意:**和 mv 命令不同的是:cp 拷貝,而mv相當于剪切。
4.3 拷貝多個文件到指定目錄中
[deng@localhost test]$ cp a b c d dir/ [deng@localhost test]$ tree dir dir ├── a ├── b ├── c └── d0 directories, 4 files [deng@localhost test]$4.4 遞歸復制目錄及其子目錄內的所有內容
[deng@localhost test]$ cp -r /etc/systemd ./ [deng@localhost test]$ ls a b c d dir systemd [deng@localhost test]$注意:要拷貝一個目錄,需要添加 -r 或者 -R 選項來遞歸實現。
4.5 創建文件的硬鏈接,而不是拷貝
[deng@localhost test]$ ls -i a 204100129 a [deng@localhost test]$ cp -l a aa [deng@localhost test]$ ls -i a aa 204100129 a 204100129 aa [deng@localhost test]$拷貝文件意味著必須使用一些存儲空間來儲存拷貝的文件。有時候出于某種原因,可能想要創建“快捷方式”或者鏈接到文件,而不是拷貝。要做到這一點,可以使用 -l 選項。
4.6 只創建符號鏈接而不復制文件
[deng@localhost test]$ cp -s a a_link [deng@localhost test]$ ls -l 總用量 0 -rw-rw-r-- 2 deng deng 0 7月 13 21:42 a -rw-rw-r-- 2 deng deng 0 7月 13 21:42 aa lrwxrwxrwx 1 deng deng 1 7月 13 21:47 a_link -> a -rw-rw-r-- 1 deng deng 0 7月 13 21:42 b -rw-rw-r-- 1 deng deng 0 7月 13 21:42 c -rw-rw-r-- 1 deng deng 0 7月 13 21:42 d drwxrwxr-x 2 deng deng 42 7月 13 21:42 dir drwxr-xr-x 4 deng deng 151 7月 13 21:44 systemd [deng@localhost test]$**注意:**創建符號鏈接只能在當前目錄下進行。
4.7 不跟隨源文件中的符號鏈接
只拷貝符號鏈接文件,可以用 -P 選項來實現。當對符號鏈接使用 cp 命令,它默認會拷貝它自身。
[deng@localhost test]$ ls -l a_link lrwxrwxrwx 1 deng deng 1 7月 13 21:47 a_link -> a [deng@localhost test]$ cp -P a_link a_link2 [deng@localhost test]$ ls -l a_link* lrwxrwxrwx 1 deng deng 1 7月 13 21:47 a_link -> a lrwxrwxrwx 1 deng deng 1 7月 13 21:51 a_link2 -> a [deng@localhost test]$顯然,cp 命令照原樣拷貝 debug_link.log 自身,文件類型仍然是一個符號鏈接。
4.8 總是跟隨符號鏈接
可以試一下 -L 選項。基本上,這個剛好與上面的 -P 選項相反。也是cp默認的行為。
[deng@localhost test]$ ls -l a_link lrwxrwxrwx 1 deng deng 1 7月 13 21:47 a_link -> a [deng@localhost test]$ cp -L a_link a_link3 [deng@localhost test]$ ls -l a_link3 -rw-rw-r-- 1 deng deng 0 7月 13 21:53 a_link3 [deng@localhost test]$4.9 拷貝目錄,符號鏈接也會被拷貝
[deng@localhost test]$ ls -l dir/ 總用量 0 -rw-rw-r-- 1 deng deng 0 7月 13 21:42 a lrwxrwxrwx 1 deng deng 1 7月 13 21:47 a_link -> a lrwxrwxrwx 1 deng deng 1 7月 13 21:51 a_link2 -> a -rw-rw-r-- 1 deng deng 0 7月 13 21:53 a_link3 -rw-rw-r-- 1 deng deng 0 7月 13 21:42 b -rw-rw-r-- 1 deng deng 0 7月 13 21:42 c -rw-rw-r-- 1 deng deng 0 7月 13 21:42 d [deng@localhost test]$ cp -r dir dir1 [deng@localhost test]$ ls -l dir1 總用量 0 -rw-rw-r-- 1 deng deng 0 7月 13 21:56 a lrwxrwxrwx 1 deng deng 1 7月 13 21:56 a_link -> a lrwxrwxrwx 1 deng deng 1 7月 13 21:56 a_link2 -> a -rw-rw-r-- 1 deng deng 0 7月 13 21:56 a_link3 -rw-rw-r-- 1 deng deng 0 7月 13 21:56 b -rw-rw-r-- 1 deng deng 0 7月 13 21:56 c -rw-rw-r-- 1 deng deng 0 7月 13 21:56 d [deng@localhost test]$4.10 詳細顯示命令執行的操作
默認情況下,當拷貝成功時,僅會再次看到命令提示符。如果想了解拷貝過程,可以用 -v 選項。
[deng@localhost test]$ cp -v b c d dir1/ "b" -> "dir1/b" "c" -> "dir1/c" "d" -> "dir1/d" [deng@localhost test]$4.11 覆蓋前詢問(使前面的 -n 選項失效)
[deng@localhost test]$ cp -i b dir1/ cp:是否覆蓋"dir1/b"? y [deng@localhost test]$4.12 蓋已存在的文件目標前將目標文件備份
當目標目錄已經含有同名文件,默認情況下 cp 命令會覆蓋目標目錄下的同名文件。使用 --backup 選項,cp 命令會為每一個現有的目標文件做一個備份。
[deng@localhost test]$ cp -bv b dir1/ "b" -> "dir1/b" (備份:"dir1/b~") [deng@localhost test]$ ls -l dir1/ 總用量 0 -rw-rw-r-- 1 deng deng 0 7月 13 22:02 b -rw-rw-r-- 1 deng deng 0 7月 13 22:00 b~ -rw-rw-r-- 1 deng deng 0 7月 13 21:59 c -rw-rw-r-- 1 deng deng 0 7月 13 21:59 d [deng@localhost test]$波浪符號(~)意味著文件是備份文件。從屬性中可以看到,備份b~文件比b 要舊。
4.13 只拷貝文件屬性,不拷貝文件內容
選項 --attributes-only,只會拷貝文件名及其屬性,不會拷貝任何數據。
[deng@localhost test]$ cp --attributes-only /etc/passwd passwd [deng@localhost test]$ ls -l /etc/passwd passwd -rw-r--r-- 1 root root 2376 7月 12 17:32 /etc/passwd -rw-r--r-- 1 deng deng 0 7月 13 22:04 passwd [deng@localhost test]$拷貝的文件只有 0 字節大小,這是因為文件內容并沒有拷貝。
4.14 強制拷貝文件
使用 -f 選項會強制進行拷貝操作。如果目標文件不能打開,可以用 -f 嘗試。
[deng@localhost test]$ cp -fv /etc/passwd passwd "/etc/passwd" -> "passwd" [deng@localhost test]$05. 附錄
參考:【Linux】一步一步學Linux系列教程匯總
總結
以上是生活随笔為你收集整理的【Linux】一步一步学Linux——cp命令(31)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Linux】一步一步学Linux——m
- 下一篇: 【Linux】一步一步学Linux——r