读书人

linux 系统命令学习札记(二)

发布时间: 2012-09-24 13:49:41 作者: rapoo

linux 系统命令学习笔记(二)

复制,删除,移动 cp rm mv

cp复制

[root@www ~]# cp [-adfilprsu] 来源档(source) 目标档(destination)[root@www ~]# cp [options] source1 source2 source3 .... directory选项与参数:-a  :相当於 -pdr 的意思,至於 pdr 请参考下列说明;(常用)-d  :若来源档为连结档的属性(link file),则复制连结档属性而非文件本身;-f  :为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;-i  :若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)-l  :进行硬式连结(hard link)的连结档创建,而非复制文件本身;-p  :连同文件的属性一起复制过去,而非使用默认属性(备份常用);-r  :递回持续复制,用於目录的复制行为;(常用)-s  :复制成为符号连结档 (symbolic link),亦即『捷径』文件;-u  :若 destination 比 source 旧才升级 destination !最后需要注意的,如果来源档有两个以上,则最后一个目的档一定要是『目录』才行! 

?

 范例一:用root身份,将家目录下的 .bashrc 复制到 /tmp 下,并更名为 bashrc[root@www ~]# cp ~/.bashrc /tmp/bashrc[root@www ~]# cp -i ~/.bashrc /tmp/bashrccp: overwrite `/tmp/bashrc'? n  <==n不覆盖,y为覆盖# 重复作两次动作,由於 /tmp 底下已经存在 bashrc 了,加上 -i 选项后,# 则在覆盖前会询问使用者是否确定!可以按下 n 或者 y 来二次确认呢!范例二:变换目录到/tmp,并将/var/log/wtmp复制到/tmp且观察属性:[root@www ~]# cd /tmp[root@www tmp]# cp /var/log/wtmp . <==想要复制到目前的目录,最后的 . 不要忘[root@www tmp]# ls -l /var/log/wtmp wtmp-rw-rw-r-- 1 root utmp 96384 Sep 24 11:54 /var/log/wtmp-rw-r--r-- 1 root root 96384 Sep 24 14:06 wtmp# 注意上面的特殊字体,在不加任何选项的情况下,文件的某些属性/权限会改变;# 这是个很重要的特性!要注意喔!还有,连文件创建的时间也不一样了!# 那如果你想要将文件的所有特性都一起复制过来该怎办?可以加上 -a 喔!如下所示:[root@www tmp]# cp -a /var/log/wtmp wtmp_2[root@www tmp]# ls -l /var/log/wtmp wtmp_2-rw-rw-r-- 1 root utmp 96384 Sep 24 11:54 /var/log/wtmp-rw-rw-r-- 1 root utmp 96384 Sep 24 11:54 wtmp_2# 了了吧!整个数据特性完全一模一样ㄟ!真是不赖~这就是 -a 的特性!

??

范例三:复制 /etc/ 这个目录下的所有内容到 /tmp 底下[root@www tmp]# cp /etc/ /tmpcp: omitting directory `/etc'   <== 如果是目录则不能直接复制,要加上 -r 的选项[root@www tmp]# cp -r /etc/ /tmp# 还是要再次的强调喔! -r 是可以复制目录,但是,文件与目录的权限可能会被改变# 所以,也可以利用『 cp -a /etc /tmp 』来下达命令喔!尤其是在备份的情况下!范例四:将范例一复制的 bashrc 创建一个连结档 (symbolic link)[root@www tmp]# ls -l bashrc-rw-r--r-- 1 root root 176 Sep 24 14:02 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 176 Sep 24 14:02 bashrc  <==与原始文件不太一样了!-rw-r--r-- 2 root root 176 Sep 24 14:02 bashrc_hlinklrwxrwxrwx 1 root root   6 Sep 24 14:20 bashrc_slink -> bashrc

?

范例五:若 ~/.bashrc 比 /tmp/bashrc 新才复制过来[root@www tmp]# cp -u ~/.bashrc /tmp/bashrc# 这个 -u 的特性,是在目标文件与来源文件有差异时,才会复制的。# 所以,比较常被用於『备份』的工作当中喔! ^_^范例六:将范例四造成的 bashrc_slink 复制成为 bashrc_slink_1 与bashrc_slink_2[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 176 Sep 24 14:02 bashrclrwxrwxrwx 1 root root   6 Sep 24 14:20 bashrc_slink -> bashrc-rw-r--r-- 1 root root 176 Sep 24 14:32 bashrc_slink_1       <==与原始文件相同lrwxrwxrwx 1 root root   6 Sep 24 14:33 bashrc_slink_2 -> bashrc <==是连结档!# 这个例子也是很有趣喔!原本复制的是连结档,但是却将连结档的实际文件复制过来了# 也就是说,如果没有加上任何选项时,cp复制的是原始文件,而非连结档的属性!# 若要复制连结档的属性,就得要使用 -d 的选项了!如 bashrc_slink_2 所示。范例七:将家目录的 .bashrc 及 .bash_history 复制到 /tmp 底下[root@www tmp]# cp ~/.bashrc ~/.bash_history /tmp# 可以将多个数据一次复制到同一个目录去!最后面一定是目录!

?

vbird@www ~]$ cp -a /var/log/wtmp /tmp/vbird_wtmp[vbird@www ~]$ ls -l /var/log/wtmp /tmp/vbird_wtmp-rw-rw-r-- 1 vbird vbird 96384  9月 24 11:54 /tmp/vbird_wtmp-rw-rw-r-- 1 root  utmp  96384  9月 24 11:54 /var/log/wtmp

?rm 删除

[root@www ~]# rm [-fir] 文件或目录选项与参数:-f  :就是 force 的意思,忽略不存在的文件,不会出现警告信息;-i  :互动模式,在删除前会询问使用者是否动作-r  :递回删除啊!最常用在目录的删除了!这是非常危险的选项!!!范例一:将刚刚在 cp 的范例中创建的 bashrc 删除掉![root@www ~]# cd /tmp[root@www tmp]# rm -i bashrcrm: remove regular file `bashrc'? y# 如果加上 -i 的选项就会主动询问喔,避免你删除到错误的档名!范例二:透过万用字节*的帮忙,将/tmp底下开头为bashrc的档名通通删除:[root@www tmp]# rm -i bashrc*# 注意那个星号,代表的是 0 到无穷多个任意字节喔!很好用的东西!范例三:将 cp 范例中所创建的 /tmp/etc/ 这个目录删除掉![root@www tmp]# rmdir /tmp/etcrmdir: etc: Directory not empty  <== 删不掉啊!因为这不是空的目录![root@www tmp]# rm -r /tmp/etcrm: descend into directory `/tmp/etc'? y....(中间省略)....# 因为身份是 root ,默认已经加入了 -i 的选项,所以你要一直按 y 才会删除!# 如果不想要继续按 y ,可以按下『 [ctrl]-c 』来结束 rm 的工作。# 这是一种保护的动作,如果确定要删除掉此目录而不要询问,可以这样做:[root@www tmp]# \rm -r /tmp/etc# 在命令前加上反斜线,可以忽略掉 alias 的指定选项喔!至於 alias 我们在bash再谈!范例四:删除一个带有 - 开头的文件[root@www tmp]# touch ./-aaa-  <==touch这个命令可以创建空文件![root@www tmp]# ls -l -rw-r--r-- 1 root  root      0 Sep 24 15:03 -aaa-  <==文件大小为0,所以是空文件[root@www tmp]# rm -aaa-Try `rm --help' for more information.  <== 因为 "-" 是选项嘛!所以系统误判了![root@www tmp]# rm ./-aaa-

?

mv 移动

[root@www ~]# mv [-fiu] source destination[root@www ~]# mv [options] source1 source2 source3 .... directory选项与参数:-f  :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;-i  :若目标文件 (destination) 已经存在时,就会询问是否覆盖!-u  :若目标文件已经存在,且 source 比较新,才会升级 (update)范例一:复制一文件,创建一目录,将文件移动到目录中[root@www ~]# cd /tmp[root@www tmp]# cp ~/.bashrc bashrc[root@www tmp]# mkdir mvtest[root@www tmp]# mv bashrc mvtest# 将某个文件移动到某个目录去,就是这样做!范例二:将刚刚的目录名称更名为 mvtest2[root@www tmp]# mv mvtest mvtest2 <== 这样就更名了!简单~# 其实在 Linux 底下还有个有趣的命令,名称为 rename ,# 该命令专职进行多个档名的同时更名,并非针对单一档名变更,与mv不同。请man rename。范例三:再创建两个文件,再全部移动到 /tmp/mvtest2 当中[root@www tmp]# cp ~/.bashrc bashrc1[root@www tmp]# cp ~/.bashrc bashrc2[root@www tmp]# mv bashrc1 bashrc2 mvtest2# 注意到这边,如果有多个来源文件或目录,则最后一个目标档一定是『目录!』# 意思是说,将所有的数据移动到该目录的意思!

?

?

?

[root@www ~]# basename /etc/sysconfig/networknetwork         <== 很简单!就取得最后的档名~[root@www ~]# dirname /etc/sysconfig/network/etc/sysconfig  <== 取得的变成目录名了!

?

?

读书人网 >UNIXLINUX

热点推荐