【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有必要学吗?学linux有什么作用,学linux能干什么
Linux是一种自由和开放源码的类UNIX操作系统.Linux有必要学吗?学Linux有什么作用,学Linux能干什么?Linux最大的作用就是提高效率.当你习惯在Linux命令行下工作,再回到win ...
- LINUX学习之路(学LINUX必看)
很多同学接触Linux不多,对Linux平台的开发更是一无所知.而现在的趋势越来越表明,作为一 个优秀的软件开发人员,或计算机IT行业从业人员,掌握Linux是一种很重要的谋生资源与手段.下来我将会结 ...
- linux学习需要什么基础,学linux需要什么基础?
近几年来,随着计算机网络的发展,越来越多的人学习 linux.对于想要从事运维工作或者从事智能开发方面的同学来说,学习 linux 是必要的.linux 的学习并不简单,那么这篇文章 w3cschoo ...
- 分享--linux 学习之路(学linux必看)
很多同学接触Linux不多,对Linux平台的开发更是一无所知. 而现在的趋势越来越表明,作为一个优秀的软件开发人员,或计算机IT行业从业人员, 掌握Linux是一种很重要的谋生资源与手段. 下来我将 ...
- Linux基础系列4(ls,cp命令详解)
Linux系统操作离不开命令,基础命令更显得尤为重要,下面几个让我们来一一尝试 ls:列出当前目录的内容或指定目录 用法:ls [options] [files_or_dirs] ls -a包含隐藏文 ...
- 英语不好学linux运维难吗,学Linux系统难吗?学好Linux运维需要多久
随着近年来经济的快速发展,企业对Linux人才的需求也越来越高.许多人认为,Linux是一个非常简单的行业,然而,Linux行业是一个综合了云计算.Linux运维.Linux开发.Linux编程等多方 ...
- 不会linux的php难找工作,学linux系统难吗
这是 Linux初学者经常会问的问题,其实Linux和Windows一样都属于操作系统,对于大部分人来说,对Windows操作系统十分熟悉,而对Linux操作系统没有使用过,所以觉得很难,其实,只要熟 ...
- linux lamp实验报告,新手学Linux--构建lamp
本人前不久开始学习Linux,俗话说得好,好记性不如烂笔头,于是决定将平日所学所做实验,记录下来,以备回顾.由于本人是个初学者,所以借鉴了很多网上的资料,但在此处写出来的都是经过本人思考和多次实验的记 ...
- Linux其实没那么难学
互联网技术总是更新迭代的,因为2020年的一场疫情,影响着中国乃至整个世界,就在这一年,网络直播,远程办公,在线教育等等的互联网产物进入了众多人的世界,当然,这其中离不开程序员的功劳. 李开复曾经说过 ...
最新文章
- 转、转、转——陀螺的梦话
- 【612页】Android 大厂面试题及解析大全(中高级)
- python中的浅拷贝和深拷贝
- 微型计算机的分类有,微型计算机的分类
- java runtime类高级,java入门 -- RunTime类
- [翻译]在GC上加入DPAD
- 笔记本电脑锁_2020年双11有哪些值得选购的笔记本电脑?(全能本/便携高性能笔记本电脑/设计本)...
- Java实例练习——基于UDP协议的多客户端通信
- JavaScript——JQuery原理介绍及模拟
- 基于层序+中序遍历序列构建二叉树
- Oracle安装图文详解!
- ⑤初识java:打印日历
- VLAN链路类型和接口类型
- android回溯机制,Android事件分发机制全面解析
- 零信任嵌入式安全沙箱技术,企业应用软件的技术底座
- Market Research/ Desk Research免费二手数据渠道整理
- html ajax传参数 20,jQuery Ajax传参
- CoderHelper 是怎样实现添加模块信息以及函数说明信息的?
- 上古卷轴5:重制版AFT管理随从导致瑟拉娜Serana有关的MOD眼睛变金色的问题解决
- 2014广东计算机一级试题及答案,广东计算机一级试题2014版
热门文章
- java生成可执行文件的方法总结
- java从入门到精通_python精通后能赚多少?平均情况。普通智商,刚毕业朝九晚五工作,每天4到5小时学多久精通?...
- 7-28 超市贴花 (5 分)
- c++函数题-牛牛与好数
- sqlserv已生成用于更新的结果集。_ML.NET API 和工具八月更新
- Java黑皮书课后题第5章:**5.33(完全数)如果一个正整数等于除它它本身外其他所有除数之和。就称之为完全数。如6是第一个完全数,因为6=1+2+3。10000以下的完全数有4个,编写程序找出
- SQL SERVER CLR Trigger功能
- 1 python基础
- E. 存储过程(procedure)
- MySql连接——内连接、外连接(左连接、右连接、全连接)