📄 0220filemanager.htm
字号:
</div>
<!-- 本文的正式部分 -->
<hr><a NAME="dir"></a><img src="images/penguin-m.gif" alt="大标题的图示" height="34" width="25" align="middle" /><span class="text_h1">目录与路径∶</span><br />
<div class=block1>
由前一章节『<a href="0210filepermission.php">Linux 的档案权限与目录配置</a>』中约略了解到
Linux 的『树状目录』概念之后,接下来就得要实际的来搞定一些基本的路径问题了!这些目录的问题当中,
最重要的莫过于『绝对路径』与『相对路径』的意义啦!赶紧来了解一下!<br /><br />
<hr><a name="dir_pathway"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>相对路径与绝对路径∶</span>
<div class=block2>
在开始目录的切换之前,你必须要先了解一下所谓的『<span class=text_import2>路径 (PATH)</span>』,
有趣的是∶什么是『<span class=text_import2>相对路径</span>』与『<span class=text_import2>绝对路径</span>』?
虽然前一章已经稍微针对这个议题提过一次,不过,这里不厌其烦的再次的强调一下!<br /><br />
如果你还记得前一章的内容的话,那么应该还记得 Linux 里面的目录是呈现『<span class=text_import2>树状目录</span>』
的情况,就是有分支的啦!好了,假设你需要在任意一个目录下变换到根目录的
etc 底下,那么你就应该要使用『 <span class=text_import2>cd /etc</span> 』这个情况,
这也就是所谓的『<span class=text_import2>绝对路径</span>』,他是从根目录连续写上来的一个情况,
所以不论你在哪一个路径现执行这一个指令,都会将你移动到该路径下。那如果我是使用
『<span class=text_import2>cd etc </span>』呢?那表示你要切换到『<span class=text_import2>目前这个目录下的
etc 目录中</span>』,情况可是不一样的呦!通常第一次接触 Linux 的使用者常会搞错这一个路径的观念!
<ul>
<li><span class=text_import1>绝对路径</span>∶路径的写法『<span class=text_import2>一定由根目录
/ 写起</span>』,例如∶ /usr/share/doc 这个目录。
<li><span class=text_import1>相对路径</span>∶路径的写法『<span class=text_import2>不是由
/ 写起</span>』,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成∶
『cd ../man』这就是相对路径的写法啦!相对路径意指『相对于目前工作目录的路径!』</li></ul>
那么相对路径与绝对路径有什么了不起呀!?喝!那可真的是了不起了!假设您写了一个套件,
这个套件共需要三个目录,分别是 etc, bin, man 这三个目录,然而由于不同的人喜欢安装在不同的目录之下,
假设甲安装的目录是 /usr/local/packages/etc, /usr/local/packages/bin 及 /usr/local/packages/man
,不过乙却喜欢安装在 /home/packages/etc, /home/packages/bin, /home/packages/man
这三个目录中,请问如果需要用到绝对路径的话,那么是否很麻烦呢?是的!
如此一来每个目录下的东西就很难对应的起来!这个时候相对路径的写法就显的特别的重要了!<br /><br />
此外,如果您跟鸟哥一样,喜欢将路径的名字写的很长,好让自己知道那个目录是在干什么的,例如∶
/data4/staiwan19961109/models-3/smoke 这个目录,而另一个目录在
/data4/staiwan19961109/models-3/cctm ,那么我从第一个要到第二个目录去的话,怎么写比较方便?
当然是『 cd ../cctm 』比较方便棉!对吧!<br /><br />
但是对于档案的正确性来说,『<span class=text_import2>绝对路径的正确度要比较好~</span>』。
一般来说,鸟哥会建议您,如果是在写程式 (shell scripts) 的条件下,务必使用绝对路径的写法。
怎么说呢?因为绝对路径的写法虽然比较麻烦,但是可以肯定这个写法绝对不会有问题。
如果使用相对路径在程式当中,则可能由于您执行的工作环境不同,导致一些问题的发生。
这个问题在例行性命令当中尤其重要!这个现象我们在 shell script 时,会再次的提醒您喔! ^_^<br />
</div>
<hr><a name="dir_opdir"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>目录的相关操作∶</span>
<div class=block2>
在之前我们稍微提到这个变换目录的指令是 cd ,还有哪些可以进行目录操作的指令呢?
例如建立目录啊、删除目录之类的~还有,得要先知道的,就是有哪些比较特殊的目录呢?
举例来说,底下这些就是比较特殊的目录,得要用力的记下来才行∶<br />
<table class="term"><tr><td class="term"><pre>
<span class=term_write>. 代表此层目录
.. 代表上一层目录
- 代表前一个工作目录
~ 代表『目前使用者身份』所在的家目录
~account 代表 account 这个使用者的家目录</span>
</pre></td></tr></table>
而<span class=text_import1>在目录底下有两个目录是一定会存在的!那就是 . 与 .. 棉~</span>
分别代表此层与上层目录的意思。那我们在前一章 <a href=0210filepermission.php>Linux 档案属性与目录配置</a>
里面也知道根目录 (/) 是所有目录的最顶层,那么 / 有 .. 吗?!您可以使用 ls -al / 去看看,
答案是『有的!』不过,您也可以查阅到,根目录的 . 与 .. 属性完全一模一样,哈哈!
<span class=text_import1>原来根目录的顶层 (..) 与他自己 (.) 是同一个目录啦</span>! ^_^<br /><br />
底下我们就来谈一谈几个常见的处理目录的指令吧∶<span class=text_import2>
<ul><li>cd∶变换目录
<li>pwd∶显示目前的目录
<li>mkdir∶建立一个新的目录
<li>rmdir∶删除一个空的目录</ul></span>
<hr><li><a name="cd"></a><span class=text_import1>cd (变换目录)</span></li>
<div class=block2>
我们知道 dmtsai 这个使用者的家目录是 /home/dmtsai ,而 root 家目录则是 /root ,假设我以 root 身份在
Linux 系统中,那么简单的说明一下这几个特殊的目录的意义是∶<br />
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>cd [相对路径或绝对路径]</span>
<span class=term_say># 最重要的就是目录的绝对路径与相对路径,还有一些特殊目录的符号棉!</span>
[root@linux ~]# <span class=term_command>cd ~dmtsai</span>
<span class=term_say># 代表去到 dmtsai 这个使用者的家目录,亦即 /home/dmtsai</span>
[root@linux dmtsai]# <span class=term_command>cd ~</span>
<span class=term_say># 表示回到自己的家目录,亦即是 /root 这个目录</span>
[root@linux ~]# <span class=term_command>cd</span>
<span class=term_say># 没有加上任何路径,也还是代表回到自己家目录的意思喔!</span>
[root@linux ~]# <span class=term_command>cd ..</span>
<span class=term_say># 表示去到目前的上层目录,亦即是 /root 的上层目录的意思;</span>
[root@linux /]# <span class=term_command>cd -</span>
<span class=term_say># 表示回到刚刚的那个目录,也就是 /root 棉~</span>
[root@linux ~]# <span class=term_command>cd /var/spool/mail</span>
<span class=term_say># 这个就是绝对路径的写法!直接指定要去的完整路径名称!</span>
[root@linux mail]# <span class=term_command>cd ../mqueue</span>
<span class=term_say># 这个是相对路径的写法,我们由 /var/spool/mail 去到 /var/spool/mqueue 就这样写!</span>
</pre></td></tr></table>
cd 是 Change Directory 的缩写,这是用来变换工作目录的指令。注意,目录名称与 cd 指令之间存在一个空格。
一登入 Linux 系统后,root 会在 root 的家目录,亦即 /root 下,OK!那回到上一层目录可以用『 cd .. 』。
利用相对路径的写法必须要确认您目前的路径才能正确的去到想要去的目录。例如上表当中最后一个例子,
您必须要确认您是在 /var/spool/mail 当中,并且知道在 /var/spool 当中有个 mqueue 的目录才行啊~
这样才能使用 cd ../mqueue 去到正确的目录说,否则就要直接输入 cd /var/spool/mqueue 棉~<br /><br />
其实,我们的提示字元,亦即那个 [root@linux ~]# 当中,就已经有指出目前的目录了,
刚登入时会到自己的家目录,而家目录还有一个代码,那就是『 ~ 』符号!
例如上面的例子可以发现,使用『 cd ~ 』可以回到个人的家目录里头去呢!
另外,针对 cd 的使用方法,如果仅输入 cd 时,代表的就是『 cd ~ 』的意思喔~
亦即是会回到自己的家目录啦!而那个『 cd - 』比较难以理解,请自行多做几次练习,
就会比较明白了。<br />
<div style="padding: 10 0 10 0 ;" align="right"><table width="90%"><tr><td><b>Tips:</b><br /><span style="font-style: italic; color : darkgreen"> 还是要一再地提醒,我们的 Linux 的预设指令列模式 (bash shell) 具有档案补齐功能,
您要常常利用 [tab] 按键来达成您的目录完整性啊!这可是个好习惯啊~
可以避免您按错键盘输入错字说~ ^_^
</span></td><td><img src="../images/vbird_face.gif" /></td></tr></table></div> </div>
<hr><a name="pwd"></a><li><span class=text_import1>pwd (显示目前所在的目录)</span></li>
<div class=block2>
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>pwd [-P]</span>
<span class=term_say>参数∶
-P ∶显示出确实的路径,而非使用连结 (link) 路径。
范例∶</span>
[root@linux ~]# <span class=term_command>pwd</span>
/root <span class=term_note><== 显示出目录啦~</span>
[root@linux ~]# <span class=term_command>cd /var/mail</span>
[root@linux mail]# <span class=term_command>pwd</span>
/var/mail
[root@linux mail]# <span class=term_command>pwd -P</span>
/var/spool/mail <span class=term_note><== 怎么回事?有没有加 -P 差很多~</span>
[root@linux mail]# <span class=term_command>ls -l /var/mail</span>
lrwxrwxrwx 1 root root 10 Jun 25 08:25 /var/mail -> spool/mail
<span class=term_say># 看到这里应该知道为啥了吧?因为 /var/mail 是连结档,连结到 /var/spool/mail
# 所以,加上 pwd -P 的参数后,会不以连结档的资料显示,而是显示正确的完整路径啊!</span>
</pre></td></tr></table>
pwd 是 Print Working Directory 的缩写,也就是显示目前所在目录的指令,
例如在上个表格最后的目录是 /var/mail 这个目录,但是提示字元仅显示 mail,
如果你想要知道目前所在的目录,可以输入 pwd 即可。此外,由于很多的套件所使用的目录名称都相同,例如
/usr/local/etc 还有 /etc ,但是通常 Linux 仅列出最后面那一个目录而已,这个时候你就可以使用 pwd
来知道你的所在目录棉!免得搞错目录,结果┅┅<br /><br />
其实有趣的是那个 -P 的参数啦!他可以让我们取得正确的目录名称,而不是以连结档的路径来显示的。
如果您是 Fedora Core 4 的话,刚刚好, /var/mail 是 /var/spool/mail 的连结档,
所以,透过到 /var/mail 下达 pwd -P 就能够知道这个参数的意义棉~ ^_^<br /><br />
</div>
<hr><a name="mkdir"></a><li><span class=text_import1>mkdir (建立新目录)</span></li>
<div class=block2>
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>mkdir [-mp] 目录名称</span>
<span class=term_say>参数∶
-m ∶设定档案的权限喔!直接设定,不需要看预设权限 (umask) 的脸色~
-p ∶帮助你直接将所需要的目录递回建立起来!
范例∶</span>
[root@linux ~]# <span class=term_command>cd /tmp</span>
[root@linux tmp]# <span class=term_command>mkdir test</span> <span class=term_note><== 建立一名为 test 的新目录</span>
[root@linux tmp]# <span class=term_command>mkdir test1/test2/test3/test4</span>
mkdir: cannot create directory `test1/test2/test3/test4':
No such file or directory <span class=term_note><== 没办法直接建立此目录啊!</span>
[root@linux tmp]# <span class=term_command>mkdir -p test1/test2/test3/test4</span>
<span class=term_say># 加了这个 -p 的参数,可以自行帮您建立多层目录!</span>
[root@linux tmp]# <span class=term_command>mkdir -m 711 test2</span>
[root@linux tmp]# <span class=term_command>ls -l</span>
drwxr-xr-x 3 root root 4096 Jul 18 12:50 test
drwxr-xr-x 3 root root 4096 Jul 18 12:53 test1
drwx--x--x 2 root root 4096 Jul 18 12:54 test2
<span class=term_say># 仔细看上面的权限部分,如果没有加上 -m 来强制设定属性,系统会使用预设属性。
# 那么您的预设属性为何?这要透过底下介绍的 <a href="#umask">umask</a> 才能了解喔! ^_^</span>
</pre></td></tr></table>
如果想要建立新的目录的话,那么就使用 mkdir (make directory) 吧! 不过,请注意呦!在预设的情况下,
<span class=text_import2>你所需要的目录得一层一层的建立才行</span>!例如∶假如你要建立一个目录为
/home/bird/testing/test1,那么首先必须要有 /home 然后 /home/bird ,再来 /home/bird/testing
都必须要存在,才可以建立 /home/bird/testing/test1 这个目录!假如没有 /home/bird/testing
时,就没有办法建立 test1 的目录棉!不过,现在有个更简单有效的方法啦!那就是加上 -p
这个参数喔!你可以直接下达∶『 <span class=text_import2>mkdir -p /home/bird/testing/test1</span> 』
则系统会自动的帮你将 /home, /home/bird, /home/bird/testing 依序的建立起目录!并且,
<span class=text_import2>如果该目录本来就已经存在时,系统也不会显示错误讯息喔</span>!挺快乐的吧! ^_^<br /><br />
另外,有个地方您必须要先有概念,那就是『预设权限』的地方。我们可以利用 -m 来强制给予一个新的目录相关的属性,
例如上表当中,我们给予 -m 711 来给予新的目录 drwx--x--x 的属性。不过,如果没有给予 -m 属性时,
那么预设的新建目录属性又是什么呢?这个跟 <a href="#umask">umask</a> 有关,我们在后头会加以介绍的。<br /><br />
</div>
<hr><a name="rmdir"></a><li><span class=text_import1>rmdir (删除『空』的目录)</span></li>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -