zoukankan      html  css  js  c++  java
  • 复制、移动和删除:cp, rm, mv

     要复制文件,请使用cp(copy)命令。不过,cp命令的用途很多。除了单纯的复制之外,还可以建立连接文件(就是快捷方式),比较两个文件的新旧而予以更新,以及复制整个目录等等。至于移动目录与文件,则使用mv(move),这个命令也可以直接用来重命名(rename)。删除使用rm(remove)命令。下面我们就来看一看。

    cp(复制文件或目录)

    [root@linux ~]# cp [-adfilprsu] 来源文件(source) 目标文件(destination)
    [root@linux ~]# cp [options] source1 source2 source3 .... directory
    参数:
    -a : 相当于 -pdr 的意思。
    -d : 若来源文件为连接文件的属性(link file),则复制连接文件属性而非文件本身。
    -f : 强制(force)的意思,若有重复或其他疑问时,不会询问用户,而强制复制。
    -i : 若目标文件(destination)已经存在,在覆盖时会先询问是否真的操作。
    -l : 建立硬连接(hard link)的连接文件,而非复制文件本身。
    -p : 连同文件的属性一起复制,而非使用默认属性。
    -r : 递归持续复制,用于目录的复制行为。
    -s : 复制成为符号连接文件(symbolic link),即“快捷方式”文件。
    -u : 若目标文件比来源文件旧,才更新目标文件。
    最后,需要注意,如果来源文件有两个以上,则最后一个目的文件一定是“目录”。
    范例:
    范例一:将家目录下的 .bashrc复制到 /tmp下,并重命名为bashrc。
    [root@linux ~]# cd /tmp
    [root@linux tmp]# cp ~/.bashrc bashrc
    [root@linux tmp]# cp -i ~/.bashrc bashrc
    cp: overwrite `basrhc'? n
    # 重复做两次动作,由于 /tmp下面已经存在bashrc了,加上 -i参数,
    # 在覆盖前会让用户确认。可以按下n或者y。
    # 但是,反过来说,如果不想询问,则加上 -f参数来强制直接覆盖。

    范例二:将 /var/log/wtmp复制到 /tmp下。
    [root@linux tmp]# cp /var/log/wtmp . <==想要复制到当前目录,最后的 . 不要忘
    [root@linux tmp]# ls -l /var/log/wtmp wtmp
    -rw-rw-r--  1 root utmp 71808 Jul 18 12:46 /var/log/wtmp
    -rw-r--r--  1 root root 71808 Jul 18 21:58 wtmp
    # 注意到了吗?在不加任何参数的情况下,文件的拥有者会改变,连权限也跟着改变了。
    # 这是个很重要的特性。要注意。还有,文件建立时间也不一样了。
    # 如果想要将文件的所有属性都一起复制,可以加上 -a。
    [root@linux tmp]# cp -a /var/log/wtmp wtmp_2
    [root@linux tmp]# ls -l /var/log/wtmp wtmp_2
    -rw-rw-r--  1 root utmp 71808 Jul 18 12:46 /var/log/wtmp
    -rw-rw-r--  1 root utmp 71808 Jul 18 12:46 wtmp_2
    # 整个属性完全一模一样。这就是 -a的作用。

    范例三:将 /etc/ 目录下的所有内容复制到 /tmp。
    [root@linux tmp]# cp /etc/ /tmp
    cp: omitting directory `/etc'   <== 如果是目录,不能直接复制,要加上 -r参数
    [root@linux tmp]# cp -r /etc/ /tmp
    # 再次强调。-r可以复制目录,但是,文件与目录的权限会被改变。
    # 所以,也可以利用cp -a /etc /tmp来执行命令。

    范例四:将范例一复制的bashrc建立一个符号连接文件(symbolic link)
    [root@linux tmp]# ls -l bashrc
    -rw-r--r--  1 root root 395 Jul 18 22:08 bashrc
    [root@linux tmp]# cp -s bashrc bashrc_slink
    [root@linux tmp]# cp -l bashrc bashrc_hlink
    [root@linux tmp]# ls -l bashrc*
    -rw-r--r--  2 root root 395 Jul 18 22:08 bashrc
    -rw-r--r--  2 root root 395 Jul 18 22:08 bashrc_hlink
    lrwxrwxrwx  1 root root   6 Jul 18 22:31 bashrc_slink -> bashrc
    # bashrc_slink是由 -s的参数造成的,建立的是一个“快捷方式”,
    # 所以会看到在文件的最右边,会显示这个文件是“连接”到哪里的。
    # 至于bashrc_hlink。建立了这个文件之后,bashrc与bashrc_hlink
    # 所有的参数都一样,只是,第二列的link数改变成为2了。而不是原本的1。
    # 这两种连接方式的异同,我们会在下一章介绍。

    范例五:若 ~/.bashrc比 /tmp/bashrc新,则复制。
    [root@linux tmp]# cp -u ~/.bashrc /tmp/bashrc
    # -u的作用是,在目标文件与来源文件有差异时,才会复制。
    # 所以,比较常用于“备份”。

    范例6:将范例四生成的bashrc_slink复制成为bashrc_slink_2。
    [root@linux tmp]# cp bashrc_slink bashrc_slink_2
    [root@linux tmp]# ls -l bashrc_slink*
    lrwxrwxrwx  1 root root   6 Jul 18 22:31 bashrc_slink -> bashrc
    -rw-r--r--  1 root root 395 Jul 18 22:48 bashrc_slink_2
    # 这个例子也很有趣。原本复制的是连接文件,却将连接文件的实际文件复制过来了。
    # 也就是说,如果没有加上任何参数,复制的是来源文件,而非连接文件的属性。
    # 若要复制连接文件的属性,就要使用 -d或者 -a参数。

    范例7:将家目录的 .bashrc及 .bash_history复制到 /tmp下面。
    [root@linux tmp]# cp ~/.bashrc ~/.bash_history /tmp
    # 将多个数据一次复制到同一个目录。

    cp的功能很多,由于我们常常进行一些数据的复制,所以也会常常用到这个命令。一般来说,如果去复制别人的数据(当然,该文件必须要有read的权限),总是希望复制到的数据最后是我们自己的,所以,在默认条件中,cp的来源文件与目标文件的权限是不同的,目标文件的拥有者通常会是命令操作者本身。举例来说,范例二中,由于我是root身份,因此复制过来的文件拥有者与用户组就改变成为root所有了。
    由于具有这个特性,在进行备份的时候,某些需要特别注意的特殊权限文件,例如密码文件(/etc/shadow)以及一些设置文件,就不能直接以cp来复制,而必须要加上 -a或者是 -p,这些可以完整复制文件权限的参数。另外,如果想要复制文件给其他用户,也必须要注意文件的权限(包含读、写、执行以及文件拥有者),否则,其他人还是无法对你给的文件进行修改。特别要注意。
    上面的第4个范例最有趣,使用 -l及 -s都会建立所谓的连接文件(link file),但是这两种连接文件有不一样的显示。这是怎么一回事? -l就是所谓的硬连接(hard link), -s则是符号连接(symbolic link),笔者这里先不介绍,因为这涉及i-node的相关知识,我们还没有介绍到,下一章再讨论这个连接的问题。总之,由于cp有种种文件属性与权限,所以,在复制时,必须要清楚地了解到:
    • 是否需要完整地保留来源文件的信息?
    • 来源文件是否为符号连接文件(symbolic link file)?
    • 来源文件是否为特殊的文件,例如FIFO、套接字等?
    • 来源文件是否为目录?
    rm(删除文件或目录)

    [root@linux ~]# rm [-fir] 文件或目录
    参数:
    -f :就是 force 的意思,强制删除。
    -i :交互模式,在删除前会询问用户是否动作
    -r :递归删除。常用在目录的删除
    范例:
    范例一:建立一个文件后予以删除
    [root@linux ~]# cd /tmp
    [root@linux tmp]# cp ~/.bashrc bashrc
    [root@linux tmp]# rm -i bashrc
    rm: remove regular file `bashrc'? y
    # 如果加上 -i参数就会主动询问。如果不需要询问就加 -f参数。

    范例二:删除一个不为空的目录。
    [root@linux tmp]# mkdir test
    [root@linux tmp]# cp ~/.bashrc test/ <== 将文件复制到此目录去,就不是空的目录了
    [root@linux tmp]# rmdir test
    rmdir: `test': Directory not empty <== 删不掉。因为这不是空的目录。
    [root@linux tmp]# rm -rf test


    删除命令(remove)相当于DOS下的del命令。这里要注意的是,通常,在Linux系统中,为了怕文件被误删,很多版本默认有 -i参数,-i指每个文件被删除之前都会让用户确认一次,以防误删文件。如果要连目录下的内容都一起删除,例如子目录里面还有子目录,就要使用 -rf参数。不过,使用“rm -rf”命令之前,请千万注意,因为该目录或文件“肯定”会被root删除。因为系统不会再次询问是否要删除。所以这是非常重要的命令,需要特别注意。不过,如果确定该目录不要了,使用rm -rf来循环删除是不错的方式。
    mv(移动文件与目录,或重命名)

    [root@linux ~]# mv [-fiv] source destination
    [root@linux ~]# mv [options] source1 source2 source3 .... directory
    参数:
    -f :force,强制的意思,强制直接移动而不询问。
    -i :若目标文件(destination)已经存在,就会询问是否覆盖。
    -u :若目标文件已经存在,且来源文件比较新,才会更新(update)
    范例:
    范例一:复制一个文件,建立一个目录,将文件移动到目录中。
    [root@linux ~]# cd /tmp
    [root@linux tmp]# cp ~/.bashrc bashrc
    [root@linux tmp]# mkdir mvtest
    [root@linux tmp]# mv bashrc mvtest
    # 将某个文件移动到某个目录去,就是这样做。

    范例二:将刚刚的目录名重命名为 mvtest2。
    [root@linux tmp]# mv mvtest mvtest2 <== 这样就重命名了。
    # 其实,在Linux下还有个有趣的命令,名为rename,
    # 该命令专门进行文件的重命名。用途不少。可以参阅man rename。

    范例三:再建立两个文件,再全部移动到 /tmp/mvtest2中。
    [root@linux tmp]# cp ~/.bashrc bashrc1
    [root@linux tmp]# cp ~/.bashrc bashrc2
    [root@linux tmp]# mv bashrc1 bashrc2 mvtest2
    # 注意,如果有多个来源文件或目录,则最后一个目标文件一定是“目录”。
    # 意思是,将所有数据移动到该目录。

    这是移动(move)的意思。要移动文件或目录,这个命令就很重要。同样,也可以使用 -u(update)来测试新旧文件,看看是否需要移动。另外一个用途就是“更改文件名”。我们可以很轻松地使用mv来更改文件名。不过,Linux的rename命令,可以用来更改大量文件的文件名,你可以利用man rename查看一下。

  • 相关阅读:
    openldap
    Java实现 洛谷 P1200 [USACO1.1]你的飞碟在这儿Your Ride Is He…
    Java实现 洛谷 P1200 [USACO1.1]你的飞碟在这儿Your Ride Is He…
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P1567 统计天数
    Java实现 洛谷 P1567 统计天数
  • 原文地址:https://www.cnblogs.com/CHEUNGKAMING/p/4355804.html
Copyright © 2011-2022 走看看