Linux命令(13):cp命令

简介:

Linux系统中cp(copy)命令是用来复制文件或者目录的。

man cp可以获得cp的详细描述

命令格式:

      cp [OPTION]... [-T] SOURCE DEST      //cp [选项]…[-T]源目的

      cp [OPTION]... SOURCE... DIRECTORY   // cp [选项]…目录

      cp [OPTION]... -t DIRECTORY SOURCE...  // cp [选项]…-t 目录 

功能:

      Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.

       //将源文件复制至目标文件,或将多个源文件复制至目标目录。

参数:

       -a     该选项通常在拷贝目录时使用。它保留链接、文件属性,并递归地拷贝目录,其作用等于dpR选项的组合。

*      -d     复制符号链接文件本身,而非其指向的源文件

*(慎用)-f     强制的意思,删除已经存在的目标文件而不提示。 

*      -i     交互式复制,即覆盖之前提醒用户确认

       -p     此时cp除复制源文件的内容外,还将把其修改时间和访问权限也复制到新文件中。(备份常用)

*      -r     递归持续复制,用于目录的复制行为:若给出的源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件。此时目标文件必须为一个目录名。

       -l     不作拷贝,只是链接文件,而非复制文件本身

       -s     复制成符号链接文件(symbolic link),即“快捷方式”文件

       -u     若目标比来源文件旧时,才更新,常用于“备份”工作

 

命令示列:

1.-i参数示例,覆盖前会提示

1
2
3
[root@www ~] # cp ~/.bashrc /tmp/bashrc         复制和更名操作
[root@www ~] # cp -i ~/.bashrc /tmp/bashrc      由于已经复制,加入-i参数后,覆盖前会做提示
cp : overwrite ` /tmp/bashrc '? y                 按y表示确认

wKioL1cEst-jjXT5AADHjalobBk975.jpg

2.-a参数示例,把权限等都复制过来

1
2
3
4
5
[root@www ~] # cd /tmp                          进入/tmp目录
[root@www tmp] # cp /var/log/wtmp .             要想复制到当前目录,最后要加"."
[root@www tmp] # ls -l /var/log/wtmp wtmp       
-rw-rw-r--. 1 root utmp 24960 Apr  6 14:06  /var/log/wtmp
-rw-r--r--  1 root root 24960 Apr  6 14:39 wtmp

wKiom1cEsmzjQrlQAAEGX6hwS_E414.jpg

在不加任何参数的情况下,某些属性/权限会改变

文件的创建时间也不同了

如果要将文件的所有特性都一起复制过来,可以加上-a,如下所示

1
2
3
4
[root@www tmp] # cp -a /var/log/wtmp wtmp3
[root@www tmp] # ls -l /var/log/wtmp wtmp3
-rw-rw-r--. 1 root utmp 24960 Apr  6 14:06  /var/log/wtmp
-rw-rw-r--. 1 root utmp 24960 Apr  6 14:06 wtmp3

wKiom1cEsrjBE2bkAAD6zRKrpz4981.jpg

整个数据特性完全一样,这就是-a的特性

由于具有这个特性,因此当我们在进行备份的时候,某些需要特别注意的特殊权限文件, 例如密码档 (/etc/shadow) 以及一些配置档,就不能直接以 cp 来复制,而必须要加上 -a 或者是 -p 等等可以完整复制文件权限的选项才行!另外,如果你想要复制文件给其他的使用者, 也必须要注意到文件的权限(包含读、写、运行以及文件拥有者等等), 否则,其他人还是无法针对你给予的文件进行修订的动作喔!注意注意!

3.-r示例将目录下的所有目录包括子目录陆续复制到另外一个目录

1
2
3
4
[root@www tmp] # cp /etc/ /tmp          
cp : omitting directory ` /etc/ '             如果是目录,不能直接复制
[root@www tmp] # cp -r /etc/ /tmp           要加入-r才能复制目录
[root@www tmp] #

wKioL1cEtcfAHt_rAACXOU8cyTo086.jpg

4.-s,-l示例,创建软链接和硬链接

1
2
3
4
5
6
7
8
[root@www tmp] # ls -l bashrc                      
-rw-r--r-- 1 root root 206 Apr  6 14:24 bashrc
[root@www tmp] # cp -s bashrc bashrc_slink         创建软链接,就是一个快捷方式
[root@www tmp] # cp -l bashrc bashrc_hlink         创建硬链接
[root@www tmp] # ls -l bashrc*
-rw-r--r-- 2 root root 206 Apr  6 14:24 bashrc                   源文件i-node,是2
-rw-r--r-- 2 root root 206 Apr  6 14:24 bashrc_hlink             硬链接i-node,是2
lrwxrwxrwx 1 root root   6 Apr 6 15:07 bashrc_slink -> bashrc    软链接i-node,还是1

wKioL1cEt43SIIadAAICLksP1qQ385.jpg

5-u示例~./bashrc/tmp/bashrc新才复制过来

1
[root@www tmp] # cp -u ~/.bashrc /tmp/bashrc       常用于备份工作

6-d示例,将bashrc_slink复制成为bashrc_slink_1与bashrc_slink_2

1
2
3
4
5
6
7
[root@www tmp] # cp bashrc_slink bashrc_slink_1
[root@www tmp] # cp -d bashrc_slink bashrc_slink_2
[root@www tmp] # ls -l bashrc bashrc_slink*
-rw-r--r-- 2 root root 206 Apr  6 14:24 bashrc
lrwxrwxrwx 1 root root   6 Apr  6 15:22 bashrc_slink -> bashrc
-rw-r--r-- 1 root root 206 Apr  6 15:22 bashrc_slink_1              与源文件相同
lrwxrwxrwx 1 root root   6 Apr  6 15:22 bashrc_slink_2 -> bashrc    是连接文件

wKioL1cEusLyfahCAAHu2MjKaCI374.jpg

这个例子也是很有趣喔!原本复制的是连结档,但是却将连结档的实际文件复制过来了

也就是说,如果没有加上任何选项时,cp复制的是原始文件,而非连结档的属性!

若要复制连结档的属性,就得要使用 -d 的选项了!如 bashrc_slink_2 所示。

7.使用zdw用户,完整复制

1
2
3
4
[zdw@www ~]$  cp  -a  /var/log/wtmp  /tmp/zdw_wtmp
[zdw@www ~]$  ls  -l  /var/log/wtmp  /tmp/zdw_wtmp   
-rw-rw-r--  1 zdw  zdw  24960 Apr  6 14:06  /tmp/zdw_wtmp
-rw-rw-r--. 1 root utmp 24960 Apr  6 14:06  /var/log/wtmp

wKiom1cEvVHwZc_OAAEstsmIhRw262.jpg

由于zdw的身份并不能随意修改文件的拥有者与群组,因此虽然能够复制wtmp的相关权限与时间等属性,但是与拥有者、群组相关的,原本zdw身份无法进行的动作,即使加上 -a 选项,也是无法达成完整复制权限的!

8.把多个数据一次复制到指定目录下

1
[root@www tmp] # cp ~/.bashrc ~/.bash_history /tmp    可以填写多个数据,复制到一个目录下

9.由于cp的别名是cp -i,在前面加\可以不使用别名

[root@bogon shell]# type cp
cp 是 `cp -i' 的别名

[root@bogon shell]# \cp 123.sh 456.sh





      本文转自cix123  51CTO博客,原文链接:http://blog.51cto.com/zhaodongwei/1871242,如需转载请自行联系原作者




相关文章
|
2月前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
184 8
|
2月前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
735 6
|
2月前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
122 3
|
2月前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
99 2
|
1月前
|
Linux Shell
Linux 10 个“who”命令示例
Linux 10 个“who”命令示例
65 14
Linux 10 个“who”命令示例
|
27天前
|
Ubuntu Linux
Linux 各发行版安装 ping 命令指南
如何在不同 Linux 发行版(Ubuntu/Debian、CentOS/RHEL/Fedora、Arch Linux、openSUSE、Alpine Linux)上安装 `ping` 命令,详细列出各发行版的安装步骤和验证方法,帮助系统管理员和网络工程师快速排查网络问题。
124 20
|
18天前
|
Linux
linux查看目录下的文件夹命令,find查找某个目录,但是不包括这个目录本身?
通过本文的介绍,您应该对如何在 Linux 系统中查看目录下的文件夹以及使用 `find` 命令查找特定目录内容并排除该目录本身有了清晰的理解。掌握这些命令和技巧,可以大大提高日常文件管理和查找操作的效率。 在实际应用中,灵活使用这些命令和参数,可以帮助您快速定位和管理文件和目录,满足各种复杂的文件系统操作需求。
46 8
|
27天前
|
网络协议 Linux 应用服务中间件
kali的常用命令汇总Linux
kali的常用命令汇总linux
58 7
|
2月前
|
Linux 数据库
Linux中第一次使用locate命令报错?????
在Linux CentOS7系统中,使用`locate`命令时出现“command not found”错误,原因是缺少`mlocate`包。解决方法是通过`yum install mlocate -y`或`apt-get install mlocate`安装该包,并执行`updatedb`更新数据库以解决后续的“can not stat”错误。
45 9
|
2月前
|
监控 网络协议 Linux
Linux netstat 命令详解
Linux netstat 命令详解