0008. shell命令--cp

目录

8. shell命令--cp

功能说明

语法格式

选项说明

实践操作


8. shell命令--cp

功能说明

        cp 是 Linux 和 Unix-like 系统中用于复制文件和目录的命令。cp命令来自英文单词copy的缩写,中文译为“复制”,其功能是复制文件或目录。cp命令能够将一个或多个文件或目录复制到指定位置,亦常用于文件的备份工作。-r参数用于递归操作,复制目录时若忘记添加则会直接报错;-f参数则用于当目标文件已存在时会直接覆盖而不再询问。这两个参数尤为常用。

语法格式

cp [选项] 源文件或目录 目标文件或目录

SYNOPSIS
    cp [OPTION]... [-T] SOURCE DEST
    cp [OPTION]... SOURCE... DIRECTORY
    cp [OPTION]... -t DIRECTORY SOURCE...

选项说明

  • -a 或 --archive:此选项用于递归方式复制,且尽可能保持文件属性,等于 dpR 参数组合
  • -b 或 --backup[=CONTROL]:为每个要覆盖的文件创建备份。
  • -d 或 --no-dereference:当复制符号链接时,把链接的目的地复制过来,而不是链接本身。
  • -f 或 --force:如果目标文件已经存在,则强制覆盖它。
  • -i 或 --interactive:在覆盖文件之前提示用户。
  • -l 或 --link:对源文件创建硬链接,而非复制文件。
  • -n 或 --no-clobber:不要覆盖已经存在的文件。
  • -p 或 --preserve[=ATTRIBUTES]:保持原始文件的模式、所有权和时间戳。
  • -r 或 -R 或 --recursive:递归复制目录及其内容。
  • -s 或 --symbolic-link:对源文件创建符号链接,而非复制文件。
  • -t, --target-directory=DIRECTORY: 指定目标目录。
  • -u 或 --update:只当源文件比目标文件新,或目标文件不存在时,才复制源文件。
  • -v, --verbose: 显示详细的操作信息。

实践操作

1. 无参数和带参数 -a 的比较
mkdir -p /test/cp    #创建测试目录
cd /test/cp   #切换到测试目录
touch file1    #创建文件 file1
ll    #查看一下
date    #查看当前时间,注意当前时间与文件 file1 创建的时间不一样即可,方便后面区分
cp file1 file2    #不使用参数复制文件
cp -a file1 file3    #使用参数 -a 递归方式复制,且尽可能保持文件属性
ll    #对比结果,可以发现,有无参数对同一个文件复制的属性是不一样的

2. 使用 -i 参数的例子,(y 同意,n 不同意)
cp -i file2 file3    #参数 -i 提示是否覆盖文件,yes 表示确定,no 表示取消,可以简写
cp file2 file3    #没加参数 -i 为啥也有提示
cp -f file2 file3    #参数 -f 强制覆盖,但是也不行
alias cp    #因为系统为 cp 做了别名,为防止误操作而覆盖源文件内容
\cp file2 file3    #取消别名
which cp    #查看 cp 命令的绝对路径
/bin/cp file2 file3     #使用命令的绝对路径也可以取消别名
/usr/bin/cp file2 file3    #使用命令的绝对路径也可以取消别名

3. 使用 -r 参数复制目录
ls    #查看一下
mkdir dir1    #创建目录 dir1
ls dir1    #查看一下目录 dir1
cp file1 dir1    #将文件 file1 复制到 dir1 目录里
ls    #查看一下
ls dir1    #查看一下目录 dir1
cp file2 file3 dir1    #也可以一次将多个文件复制到 dir1 目录里
ls dir1    #查看一下目录 dir1
cp dir1 dir2    #先不加参数试试,提示:omitting directory 'dir1',意思就是没有复制成功
ls    #不信可以查看看一下,那怎么解决?
cp -r dir1 dir2    #应为要复制目录,需要使用参数 -r 
ls    #发现有了目录 dir2
ls dir2     #查看一下目录 dir2

4. 快速备份文件案例
ls /etc/ssh/ |grep sshd    #查看 /etc/ssh/ 目录下,以 sshd 为关键字的所有文件
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak    #先正常备份一下
!ls    #执行最近以 ls 开头的命令,发现复制成功了
cp /etc/ssh/sshd_config{,.bak1}    #使用这种方法可以实现快速复制
!ls    #再次查看一下
rm -f /etc/ssh/sshd_config.bak*    #删除之前备份文件,需要谨慎操作,跳过也是可以的
!ls    #查看一下

命令示例:1. 无参数和带参数 -a 的比较

mkdir -p /test/cp    
cd /test/cp   
touch file1    
ll    
date    
cp file1 file2    
cp -a file1 file3    
ll

输出结果:

[root@MineGi ~]# mkdir -p /test/cp    
[root@MineGi ~]# cd /test/cp   
[root@MineGi /test/cp]# touch file1  
[root@MineGi /test/cp]# ll    
总用量 0
-rw-r--r-- 1 root root 0 11月 24 10:33 file1
[root@MineGi /test/cp]# date  
2024年 11月 24日 星期日 10:34:33 CST
[root@MineGi /test/cp]# cp file1 file2    
[root@MineGi /test/cp]# cp -a file1 file3  
[root@MineGi /test/cp]# ll
总用量 0
-rw-r--r-- 1 root root 0 11月 24 10:33 file1
-rw-r--r-- 1 root root 0 11月 24 10:34 file2
-rw-r--r-- 1 root root 0 11月 24 10:33 file3
[root@MineGi /test/cp]#

命令示例:2. 使用 -i 参数的例子,(y 同意,n 不同意)

cp -i file2 file3    
cp file2 file3    
cp -f file2 file3    
alias cp    
\cp file2 file3    
which cp    
/bin/cp file2 file3     
/usr/bin/cp file2 file3

输出结果:

[root@MineGi /test/cp]# cp -i file2 file3 
cp:是否覆盖"file3"? n
[root@MineGi /test/cp]# cp file2 file3 
cp:是否覆盖"file3"? n
[root@MineGi /test/cp]# cp -f file2 file3 
cp:是否覆盖"file3"? n
[root@MineGi /test/cp]# alias cp 
alias cp='cp -i'
[root@MineGi /test/cp]# \cp file2 file3   
[root@MineGi /test/cp]# which cp 
alias cp='cp -i'
    /usr/bin/cp
[root@MineGi /test/cp]# /bin/cp file2 file3 
[root@MineGi /test/cp]# /usr/bin/cp file2 file3
[root@MineGi /test/cp]#

命令示例:3. 使用 -r 参数复制目录

ls    
mkdir dir1    
ls dir1    
cp file1 dir1    
ls    
ls dir1    
cp file2 file3 dir1    
ls dir1    
cp dir1 dir2    
ls    
cp -r dir1 dir2    
ls    
ls dir2

输出结果:

[root@MineGi /test/cp]# ls
file1  file2  file3
[root@MineGi /test/cp]# mkdir dir1    
[root@MineGi /test/cp]# ls dir1  
[root@MineGi /test/cp]# cp file1 dir1    
[root@MineGi /test/cp]# ls   
dir1  file1  file2  file3
[root@MineGi /test/cp]# ls dir1/
file1
[root@MineGi /test/cp]# cp file2 file3 dir1 
[root@MineGi /test/cp]# ls dir1
file1  file2  file3
[root@MineGi /test/cp]# cp dir1 dir2 
cp: 略过目录"dir1"
[root@MineGi /test/cp]# ls
dir1  file1  file2  file3
[root@MineGi /test/cp]# cp -r dir1 dir2 
[root@MineGi /test/cp]# ls
dir1  dir2  file1  file2  file3
[root@MineGi /test/cp]# ls dir2
file1  file2  file3
[root@MineGi /test/cp]#

命令示例:4. 快速备份文件案例

ls /etc/ssh/ |grep sshd    
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak    
!ls    
cp /etc/ssh/sshd_config{,.bak1}    
!ls    
rm -f /etc/ssh/sshd_config.bak*    
!ls

输出结果:

[root@MineGi /test/cp]# ls /etc/ssh/ |grep sshd 
sshd_config
[root@MineGi /test/cp]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak  
[root@MineGi /test/cp]# !ls  
ls /etc/ssh/ |grep sshd   
sshd_config
sshd_config.bak
[root@MineGi /test/cp]# cp /etc/ssh/sshd_config{,.bak1}  
[root@MineGi /test/cp]# !ls 
ls /etc/ssh/ |grep sshd    
sshd_config
sshd_config.bak
sshd_config.bak1
[root@MineGi /test/cp]# rm -f /etc/ssh/sshd_config.bak* 
[root@MineGi /test/cp]# !ls
ls /etc/ssh/ |grep sshd    
sshd_config
[root@MineGi /test/cp]#

        这只是 cp 命令的一些基本用法和选项。你可以通过 man cp 或 cp --help 命令查看更多详细信息和高级选项。

        注意:使用 cp 命令时要小心,特别是在使用 -f 选项时,因为它会无条件地覆盖目标文件,而不会给出任何提示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MineGi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值