📄 0220filemanager.htm
字号:
参数,还有用来查阅不同时间的动作的 --time=atime 等参数。而这些参数的存在都是因为 Linux
档案系统记录了很多有用的资讯的缘故。那么 Linux 的档案系统中,这些与权限、属性有关的资料放在哪里呢?
放在 i-node 里面。关于这部分,我们会在下个章节继续跟您作比较深入的介绍啊!<br /><br />
无论如何, ls 最常被使用到的功能还是那个 -l 的参数,为此,很多 distribution 在预设的情况中,
已经将 ll (L 的小写) 设定成为 ls -l 的意思了!其实,那个功能是 Bash shell 的 alias 功能呢~
也就是说,我们直接输入 ll 就等于是输入 ls -l 是一样的~关于这部分,我们会在第三章 bash shell
时再次的强调滴~<br /><br />
</div>
<hr><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>复制、移动与删除∶ cp, rm, mv</span>
<div class=block2>
要复制档案,请使用 cp (copy) 这个指令即可~不过, cp 这个指令的用途可多了~
除了单纯的复制之外,还可以建立连结档 (就是捷径棉),比对两档案的新旧而予以更新,
以及复制整个目录等等的功能呢!至于移动目录与档案,则使用 mv (move),
这个指令也可以直接拿来作更名 (rename) 的动作喔!至于移除吗?那就是 rm (remove)
这个指令棉~底下我们就来瞧一瞧先~<br /><br />
<hr><li><a name=cp></a><span class=text_import1>cp (复制档案或目录)</span></li>
<div class=block2>
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>cp [-adfilprsu] 来源档(source) 目的档(destination)</span>
[root@linux ~]# <span class=term_command>cp [options] source1 source2 source3 .... directory</span>
<span class=term_say>参数∶
-a ∶相当于 -pdr 的意思;
-d ∶若来源档为连结档的属性(link file),则复制连结档属性而非档案本身;
-f ∶为强制 (force) 的意思,若有重复或其他疑问时,不会询问使用者,而强制复制;
-i ∶若目的档(destination)已经存在时,在覆盖时会先询问是否真的动作!
-l ∶进行硬式连结 (hard link) 的连结档建立,而非复制档案本身;
-p ∶连同档案的属性一起复制过去,而非使用预设属性;
-r ∶递回持续复制,用于目录的复制行为;
-s ∶复制成为符号连结档 (symbolic link),亦即『捷径』档案;
-u ∶若 destination 比 source 旧才更新 destination !
最后需要注意的,如果来源档有两个以上,则最后一个目的档一定要是『目录』才行!
范例∶</span>
<span class=term_hd>范例一∶将家目录下的 .bashrc 复制到 /tmp 下,并更名为 bashrc</span>
[root@linux ~]# <span class=term_command>cd /tmp</span>
[root@linux tmp]# <span class=term_command>cp ~/.bashrc bashrc</span>
[root@linux tmp]# <span class=term_command>cp -i ~/.bashrc bashrc</span>
cp: overwrite `basrhc'? <span class=term_command>n</span>
<span class=term_say># 重复作两次动作,由于 /tmp 底下已经存在 bashrc 了,加上 -i 参数,
# 则在覆盖前会询问使用者是否确定!可以按下 n 或者 y 呢!
# 但是,反过来说,如果不想要询问时,则加上 -f 这个参数来强制直接覆盖!</span>
<span class=term_hd>范例二∶将 /var/log/wtmp 复制到 /tmp 底下</span>
[root@linux tmp]# <span class=term_command>cp /var/log/wtmp .</span> <span class=term_note><==想要复制到目前的目录,最后的 . 不要忘</span>
[root@linux tmp]# <span class=term_command>ls -l /var/log/wtmp wtmp</span>
<span class=term_write>-rw-rw-r--</span> 1 root <span class=term_write>utmp</span> 71808 Jul 18 12:46 /var/log/wtmp
<span class=term_write>-rw-r--r--</span> 1 root <span class=term_write>root</span> 71808 Jul 18 21:58 wtmp
<span class=term_say># 注意到了吗?!在不加任何参数的情况下,档案的所属者会改变,连权限也跟著改变了~
# 这是个很重要的特性!要注意喔!还有,连档案建立的时间也不一样了!
# 如果您想要将档案的所有特性都一起复制过来,可以加上 -a 喔!</span>
[root@linux tmp]# <span class=term_command>cp -a /var/log/wtmp wtmp_2</span>
[root@linux tmp]# <span class=term_command>ls -l /var/log/wtmp wtmp_2</span>
-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
<span class=term_say># 了了吧!整个资料特性完全一模一样ㄟ!真是不赖~这就是 -a 的特性!</span>
<span class=term_hd>范例三∶复制 /etc/ 这个目录下的所有内容到 /tmp 底下</span>
[root@linux tmp]# <span class=term_command>cp /etc/ /tmp</span>
cp: omitting directory `/etc' <span class=term_note><== 如果是目录,不能直接复制,要加上 -r 的参数</span>
[root@linux tmp]# <span class=term_command>cp -r /etc/ /tmp</span>
<span class=term_say># 还是要再次的强调喔! -r 是可以复制目录,但是,档案与目录的权限会被改变~
# 所以,也可以利用 cp -a /etc /tmp 来下达指令喔!</span>
<span class=term_hd>范例四∶将范例一复制的 bashrc 建立一个连结档 (symbolic link)</span>
[root@linux tmp]# <span class=term_command>ls -l bashrc</span>
-rw-r--r-- 1 root root 395 Jul 18 22:08 bashrc
[root@linux tmp]# <span class=term_command>cp -s bashrc bashrc_slink</span>
[root@linux tmp]# <span class=term_command>cp -l bashrc bashrc_hlink</span>
[root@linux tmp]# <span class=term_command>ls -l bashrc*</span>
-rw-r--r-- <span class=term_write>2</span> root root 395 Jul 18 22:08 bashrc
-rw-r--r-- <span class=term_write>2</span> root root 395 Jul 18 22:08 bashrc_hlink
lrwxrwxrwx 1 root root 6 Jul 18 22:31 bashrc_slink -> bashrc
<span class=term_say># 那个 bashrc_slink 是由 -s 的参数造成的,建立的是一个『捷径』,
# 所以您会看到在档案的最右边,会显示这个档案是『连结』到哪里去的!
# 至于那个 bashrc_hlink 有趣了!建立了这个档案之后, bashrc 与 bashrc_hlink
# 所有的参数都一样,只是,第二栏的 link 数改变成为 2 了~而不是原本的 1 喔!
# 这两种连结的方式的异同,我们会在下一章里面进行介绍的!</span>
<span class=term_hd>范例五∶若 ~/.bashrc 比 /tmp/bashrc 新才复制过来</span>
[root@linux tmp]# <span class=term_command>cp -u ~/.bashrc /tmp/bashrc</span>
<span class=term_say># 这个 -u 的特性,是在目标档案与来源档案有差异时,才会复制的。
# 所以,比较常被用于『备份』的工作当中喔! ^_^</span>
<span class=term_hd>范例六∶将范例四造成的 bashrc_slink 复制成为 bashrc_slink_2</span>
[root@linux tmp]# <span class=term_command>cp bashrc_slink bashrc_slink_2</span>
[root@linux tmp]# <span class=term_command>ls -l bashrc_slink*</span>
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
<span class=term_say># 这个例子也是很有趣喔!原本复制的是连结档,但是却将连结档的实际档案复制过来了
# 也就是说,如果没有加上任何参数时,复制的是原始档案,而非连结档的属性!
# 若要复制连结档的属性,就得要使用 -d 或者 -a 的参数了!</span>
<span class=term_hd>范例七∶将家目录的 .bashrc 及 .bash_history 复制到 /tmp 底下</span>
[root@linux tmp]# <span class=term_command>cp ~/.bashrc ~/.bash_history /tmp</span>
<span class=term_say># 可以将多个资料一次复制到同一个目录去!</span>
</pre></td></tr></table>
这个 cp 的功能很多,而由于我们常常在进行一些资料的复制,所以也会常常用到这个指令的。
一般来说,我们如果去复制别人的资料 (当然,该档案您必须要有 read 的权限才行啊! ^_^) 时,
总是希望复制到的资料最后是我们自己的,所以,<span class=text_import2>在预设的条件中, cp
的来源档与目的档的权限是不同的,目的档的拥有者通常会是指令操作者本身</span>。举例来说,
上面的范例二中,由于我是 root 的身份,因此复制过来的档案拥有者与群组就改变成为 root 所有了!
这样说,可以明白吗?! ^_^<br /><br />
由于具有这个特性,因此,当我们在进行备份的时候,某些需要特别注意的特殊权限档案,
例如密码档 (/etc/shadow) 以及一些设定档,就不能直接以 cp 来复制,而必须要加上 -a 或者是 -p
等等可以完整复制档案权限的参数才行!另外,如果您想要复制档案给其他的使用者,
也必须要注意到档案的权限(包含读、写、执行以及档案拥有者等等),
否则,其他人还是无法针对您给予的档案进行修订的动作喔!注意注意!<br /><br />
至于上面的范例当中,第四个范例是最有趣的,使用 -l 及 -s 都会建立所谓的连结档 (link file),
但是这两种连结档确有不一样的展现情况。这是怎么一回事啊?
那个 -l 就是所谓的 hard link ,至于 -s 则是 symbolic link ,鸟哥这里先不介绍,
因为这个涉及 i-node 的相关知识,我们还没有介绍到,下一章再来讨论这个 link 的问题喔!
总之,由于 cp 有种种的档案属性与权限的特性,所以,在复制时,您必须要清楚的了解到∶
<ul><span class=text_import2>
<li>是否需要完整的保留来源档案的资讯?
<li>来源档案是否为连结档 (symbolic link file)?
<li>来源档是否为特殊的档案,例如 FIFO, socket 等?
<li>来源档是否为目录?</ul></span>
</div>
<hr><li><a name=rm></a><span class=text_import1>rm (移除档案或目录)</span></li>
<div class=block2>
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>rm [-fir] 档案或目录</span>
<span class=term_say>参数∶
-f ∶就是 force 的意思,强制移除;
-i ∶互动模式,在删除前会询问使用者是否动作
-r ∶递回删除啊!最常用在目录的删除了
范例∶</span>
<span class=term_hd>范例一∶建立一档案后予以删除</span>
[root@linux ~]# <span class=term_command>cd /tmp</span>
[root@linux tmp]# <span class=term_command>cp ~/.bashrc bashrc</span>
[root@linux tmp]# <span class=term_command>rm -i bashrc</span>
rm: remove regular file `bashrc'? <span class=term_command>y</span>
<span class=term_say># 如果加上 -i 的参数就会主动询问喔!那么如果不要询问呢?就加 -f 参数啊!</span>
<span class=term_hd>范例二∶删除一个不为空的目录</span>
[root@linux tmp]# <span class=term_command>mkdir test</span>
[root@linux tmp]# <span class=term_command>cp ~/.bashrc test/</span> <span class=term_note><== 将档案复制到此目录去,就不是空的目录了</span>
[root@linux tmp]# <span class=term_command>rmdir test</span>
rmdir: `test': Directory not empty <span class=term_note><== 删不掉啊!因为这不是空的目录!</span>
[root@linux tmp]# <span class=term_command>rm -rf test</span>
<span class=term_hd>范例三∶删除一个带有 - 开头的档案</span>
[root@linux tmp]# <span class=term_command>ls *aa*</span>
-rw-r--r-- 1 root root 0 Aug 22 10:52 -aaa-
[root@linux tmp]# <span class=term_command>rm -aaa-</span>
rm: invalid option -- a
Try `rm --help' for more information. <span class=term_say><== 因为 "-" 是参数嘛!</span>
[root@linux tmp]# <span class=term_command>rm ./-aaa-</span>
</pre></td></tr></table>
这是移除的指令( remove ),相当于 dos 下的 del 指令!这里要注意的是,通常在 Linux
系统下,为了怕档案被误杀,所以很多 distributions 都已经预设有 -i 这个参数, -i
是指每个档案被杀掉之前都会让使用者确认一次,以预防误杀档案!而如果要连目录下的东西都一起杀掉的话,
例如子目录里面还有子目录时,那就要使用 -rf 这个参数了!<span class=text_import2>不过,使用『
rm -rf 』这个指令之前,请千万注意了,因为,该目录或档案『肯定』会被 root
杀掉</span>!因为系统不会再次询问你是否要砍掉呦!所以那是个超级严重的指令下达呦!
得特别注意!不过,如果你确定该目录不要了,那么使用 rm -rf 来循环杀掉是不错的方式!<br /><br />
另外,范例三也是很有趣的例子,我们在之前就谈过,档名最好不要使用 "-" 号开头,
因为 "-" 后面接的是参数,因此,单纯的使用『 rm -aaa- 』系统的指令就会误判啦!
那如果使用后面会谈到的正规表示法时,还是会出问题的!所以,只能用避过首位字元是 "-" 的方法啦!
就是加上本目录『 ./ 』即可!如果 man rm 的话,其实还有一种方法,那就是『 rm -- -aaa-
』也可以啊!<br /><br />
</div>
<hr><li><a name=mv></a><span class=text_import1>mv (移动档案与目录,或更名)</span></li>
<div class=block2>
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>mv [-fiu] source destination</span>
[root@linux ~]# <span class=term_command>mv [options] source1 source2 source3 .... directory</span>
<span class=term_say>参数∶
-f ∶force 强制的意思,强制直接移动而不询问;
-i ∶若目标档案 (destination) 已经存在时,就会询问是否覆盖!
-u ∶若目标档案已经存在,且 source 比较新,才会更新 (update)
范例∶</span>
<span class=term_hd>范例一∶复制一档案,建立一目录,将档案移动到目录中</span>
[root@linux ~]# <span class=term_command>cd /tmp</span>
[root@linux tmp]# <span class=term_command>cp ~/.bashrc bashrc</span>
[root@linux tmp]# <span class=term_command>mkdir mvtest</span>
[root@linux tmp]# <span class=term_command>mv bashrc mvtest</span>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -