美文网首页
Linux 命令 & shell 脚本之01(cp命令)

Linux 命令 & shell 脚本之01(cp命令)

作者: 轻飘飘D | 来源:发表于2020-09-25 18:21 被阅读0次

Linux cp命令主要用于复制文件或目录

1.语法

cp [options] source dest

or

cp [options] source... directory

2.参数说明

-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
-d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
-f:覆盖已经存在的目标文件而不给出提示。
-i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。
-p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
-l:不复制文件,只是生成链接文件

3.案例
3.1. cp 命令基本用法

#把源文件不改名复制到 mytestdir/ 目录下
[root@MYSQL8 ~]# mkdir mytestdir
[root@MYSQL8 ~]# touch testcp.txt
[root@MYSQL8 ~]# pwd
/root
[root@MYSQL8 ~]# cp testcp.txt /root/mytestdir/
[root@MYSQL8 ~]# cd mytestdir/
[root@MYSQL8 mytestdir]# ls
testcp.txt

#改名复制,则命令如下
[root@MYSQL8 ~]# pwd
/root
[root@MYSQL8 ~]# ls test*
testcp.txt
[root@MYSQL8 ~]# cp testcp.txt /root/mytestdir/testcp_new.txt
[root@MYSQL8 ~]# ls /root/mytestdir/testcp_new*
/root/mytestdir/testcp_new.txt

#复制的目标位置已经存在同名的文件,则会提示是否覆盖,因为 cp 命令默认执行的是“cp -i”的别名
[root@MYSQL8 ~]# pwd
/root
[root@MYSQL8 ~]# ls testcp*
testcp.txt
[root@MYSQL8 ~]# cp testcp.txt /root/mytestdir/
cp: overwrite ‘/root/mytestdir/testcp.txt’? yes

3.2 复制目录

[root@MYSQL8 ~]# pwd
/root
[root@MYSQL8 ~]# mkdir /root/dir1 -p
[root@MYSQL8 ~]# mkdir /root/dir1/subdir1 -p
[root@MYSQL8 ~]# touch /root/dir1/testcp2.txt
[root@MYSQL8 ~]# ls -R /root/dir1/
/root/dir1/:
subdir1  testcp2.txt
/root/dir1/subdir1:

[root@MYSQL8 ~]# mkdir /root/dir2 -p

[root@MYSQL8 ~]# cp -r /root/dir1/ /root/dir2/

[root@MYSQL8 ~]# ls -R /root/dir2/
/root/dir2/:
dir1

/root/dir2/dir1:
subdir1  testcp2.txt
/root/dir2/dir1/subdir1:

3.3 复制软链接文件

[root@MYSQL8 ~]# mkdir /root/source -p
[root@MYSQL8 ~]# touch /root/source/source_file.txt
[root@MYSQL8 ~]# mkdir /root/source_slink -p
##建立一个测试软链接文件 source_file_slink.txt
[root@MYSQL8 ~]# ln -s /root/source/source_file.txt /root/source_slink/source_file_slink.txt
[root@MYSQL8 ~]# ll /root/source_slink/s*
lrwxrwxrwx 1 root root 28 Sep 12 00:38 /root/source_slink/source_file_slink.txt -> /root/source/source_file.txt

#复制软链接文件,但是不加"-d"选项(实际复制的是 软链接的源文件,而不是软链接文件)
[root@MYSQL8 ~]# cp /root/source_slink/source_file_slink.txt /root/mytestdir/source_file_new.txt
[root@MYSQL8 ~]# ll /root/mytestdir/source_file_new*
-rw-r--r-- 1 root root 0 Sep 12 00:44 /root/mytestdir/source_file_new.txt

#复制软链接文件,加"-d"选项,则会复制软链接文件
[root@MYSQL8 ~]# cp -d /root/source_slink/source_file_slink.txt /root/mytestdir/source_file_slink_new.txt
[root@MYSQL8 ~]# ll /root/mytestdir/source_file_slink_new*
lrwxrwxrwx 1 root root 28 Sep 12 00:47 /root/mytestdir/source_file_slink_new.txt -> /root/source/source_file.txt

3.4. 保留源文件属性复制

#在执行复制命令后,目标文件的时间会变成复制命令的执行时间,而不是源文件的时间。例如
#注意源文件的时间和所属组
[root@MYSQL8 ~]# ll testcp.txt
-rw-r--r-- 1 root root 0 Sep 12 00:07 testcp.txt

[root@MYSQL8 ~]# cp testcp.txt /root/dir2/testcp_new2.txt
[root@MYSQL8 ~]# cp testcp.txt /root/dir2/
[root@MYSQL8 ~]# ll /root/dir2/testcp*
-rw-r--r-- 1 root root 0 Sep 12 21:45 /root/dir2/testcp_new2.txt
-rw-r--r-- 1 root root 0 Sep 12 21:46 /root/dir2/testcp.txt
#由于复制命令由root用户执行,所以目标文件的所属组为了root,而且时间也变成了复制命令的执行时间

#而当我们执行备份、曰志备份的时候,这些文件的时间可能是一个重要的参数,这就需执行 "-p" 选项了。
#这个选项会保留源文件的属性,包括所有者、所属组和时间。例如:
[root@MYSQL8 ~]# cp -p testcp.txt /root/dir2/testcp_new3.txt

[root@MYSQL8 ~]# ll /root/dir2/testcp_new3.txt 
-rw-r--r-- 1 root root 0 Sep 12 00:07 /root/dir2/testcp_new3.txt
#源文件和目标文件的所有属性都一致,包括时间

#之前讲过,"-a" 选项相当于 "-d、-p、-r" 选项,这几个选项我们已经分别讲过了。
#所以,当我们使用 "-a" 选项时,目标文件和源文件的所有属性都一致,包括源文件的所有者,所属组、时间和软链接性。
#使用 "-a" 选项来取代 "-d、-p、-r" 选项更加方便。

3.5. "-l" 和 "-s" 选项

#如果使用 "-l" 选项,则目标文件会被建立为源文件的硬链接;而如果使用了 "-s" 选项,则目标文件会被建立为源文件的软链接。
#这两个选项和 "-d" 选项是不同的,"d" 选项要求源文件必须是软链接,目标文件才会复制为软链接;
#而 "-l" 和 "-s" 选项的源文件只需是普通文件,目标文件就可以直接复制为硬链接和软链接。例如:

[root@MYSQL8 ~]# mkdir /root/source_hlink -p
[root@MYSQL8 ~]# cd /root/source
[root@MYSQL8 source]# ll -i source_file.txt 
51646850 -rw-r--r-- 1 root root 0 Sep 12 00:36 source_file.txt
[root@MYSQL8 source]# cp -s /root/source/source_file.txt  /root/source_slink/source_file_slink2.txt

[root@MYSQL8 source]# cp -l /root/source/source_file.txt  /root/source_hlink/source_file_hlink2.txt

[root@MYSQL8 source]# ll -i /root/source_slink/source_file_slink2.txt /root/source_hlink/source_file_hlink2.txt
51646850 -rw-r--r-- 2 root root  0 Sep 12 00:36 /root/source_hlink/source_file_hlink2.txt
  594268 lrwxrwxrwx 1 root root 28 Sep 12 21:59 /root/source_slink/source_file_slink2.txt -> /root/source/source_file.txt

4.cat

[root@MYSQL8 ~]# cat testdata.txt 
data1  100

data2  200
data3  300

data4  400

# -n参数会给所有的行加上行号
[root@MYSQL8 ~]# cat -n testdata.txt 
     1  data1  100
     2  
     3  data2  200
     4  data3  300
     5  
     6  data4  400

#只想给有文本的行加上行号,可以用-b参数
[root@MYSQL8 ~]# cat -b testdata.txt
     1  data1  100

     2  data2  200
     3  data3  300

     4  data4  400

相关文章

  • Linux 命令 & shell 脚本之01(cp命令)

    Linux cp命令主要用于复制文件或目录 1.语法 2.参数说明 3.案例3.1. cp 命令基本用法 3.2 ...

  • shell脚本基础

    shell介绍 shell命令: 在linux终端能被解析的命令,就是shell命令。 shell脚本: 多个sh...

  • [Linux]Shell

    shell:命令解释器,驱动linux内核;应用程序调用shell命令 1.Shell脚本的执行方式 脚本格式要求...

  • Fabric01-1

    一:shell脚本基础 1.shell命令 : 在linux终端能够被解析出来的命令2.shell脚本 : 多个s...

  • Linux shell编程模板

    只要会写Linux命令,就可以写shell脚本。 之前基本上写的shell脚本都是Linux命令的组合,最多加入i...

  • 自动化脚本实践(Shell + Expect)

    Linux Shell脚本入门: Linux awk 命令 | 菜鸟教程 Shell 教程 | 菜鸟教程 lin...

  • 17. Interview-Linux

    1 用过哪些Linux命令? 2 写过shell脚本吗?shell脚本基本格式? 3 Linux I/O读写方式 ...

  • Linux Shell 基本语法

    Linux Shell 基本语法 一. Linux基本命令 1.1. cp命令 该命令的功能是将给出的文件或目录拷...

  • Linux学习(02) - linux常用的shell命令

    linux今晚进行了第一次shell命令。 shell命令指的是脚本命令,这个是linux操作中最基本的,适用于任...

  • linux学习笔记-09shell脚本

    shell脚本 Shell脚本是将各种命令通过逻辑语句组合而成的程序 脚本每行写一条Linux命令。并且一个完整的...

网友评论

      本文标题:Linux 命令 & shell 脚本之01(cp命令)

      本文链接:https://www.haomeiwen.com/subject/czyiektx.html