Linux 档案与目录管理


一定要把绝对路径和相对路径弄清楚哦!! 
绝对路径与相对路径: 
在开始目录的切换之前,你必须要先了解一下所谓的『路径, PATH』,有趣的是:什幺是『相对路径』与『绝对路径』?如果你还记得前一章的内容的话,那幺应该还记得 Linux 里面的目录是呈现『树状目录』的情况,有就是有分支的啦!好了,假设你需要在任意一个目录下变换到根目录的 etc 底下,那幺你就应该要使用『 cd /etc 』这个情况,这也就是所谓的『绝对路径』,他是从根目录连续写上来的一个情况,所以不论你在哪一个路径现执行这一个指令,都会将你移动到该路径下。那如果我是使用『 cd etc 』呢?那表示你要切换到『目前这个目录下的 etc 目录中』,情况可是不一样的呦!通常第一次接触 Linux 的使用者常会搞错这一个路径的观念! 

绝对路径:路径的写法『一定由根目录 / 写起』,例如: /usr/share/doc 这个目录。 
相对路径:路径的写法『不是由 / 写起』,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成:『cd ../man』这就是相对路径的写法啦! 

那幺相对路径与绝对路径有什幺了不起呀!?喝!那可真的是了不起了!假设您写了一个套件,这个套件共需要三个目录,分别是 etc, bin, man 这三个目录,然而由于不同的人喜欢安装在不同的目录之下,假设甲安装的目录是 /usr/local/packages/etc, /usr/local/packages/bin 及 /usr/local/packages/man ,不过乙却喜欢安装在 /home/packages/etc, /home/packages/bin, /home/packages/man 这三个目录中,请问如果需要用到绝对路径的话,那幺是否很麻烦呢?是的!如此一来每个目录下的东西就很难对应的起来!这个时候相对路径的写法就显的特别的重要了! 

此外,如果您跟我一样,喜欢将路径的名字写的很长,好让自己知道那个目录是在干什幺的,例如:/data4/staiwan19961109/models-3/smoke 这个目录,而另一个目录在 /data4/staiwan19961109/models-3/cctm ,那幺我从第一个要到第二个目录去的话,怎幺写比较方便?当然是『 cd ../cctm 』比较方便啰!对吧! 

好了,既然要谈到目录这个东西,自然就需要了解一下有哪些常用的目录『符号』代表的意义啦! 
.   代表此层目录 
..  代表上层目录 
~   代表自己的家目录 
~user 代表到 user 这个人的家目录 
底下我们要来谈一谈目录与路径的几个常用的指令:
cd   变换目录 
pwd  显示目前的目录 
mkdir 建立一个新目录 
rmdir 删除一个里面是空的空目录 
cd 与 pwd 
这两个指令主要是在『变换目前目录』与『显示目前所在目录』的工作,底下说一说他们的用途与语法吧! 
cd 
语法: [root @test /root ]# cd [相对路径或绝对路径] 
参数说明: 
路径有『相对路径』与『绝对路径』的分别,请千万小心啰! 
范例: 
[root @test /root]# cd ..       <==回到上一层目录 
[root @test /root]# cd ../home     <==相对路径的写法 
[root @test /root]# cd /var/www/html  <==绝对路径的写法 
[root @test /etc]# cd         <==回到使用者的家目录 
[root @test /etc]# cd ~         <==回到使用者的家目录! 
[root @test /etc]# cd ~test      <==回到 test 这个使用者的家目录 
说明: 
cd 是 change directory 的缩写,这是用来变换工作路径的指令。注意,路径与 cd 指令之间存在一个空格!一登入 Linux 系统后,root 会在 root 的家目录,亦即 /root 下,至于使用者会在预设的 /home/username 底下,例如鸟哥的 ID 为 vbird ,则以 vbird 的身份登入后,会到 /home/vbird 这个路径下。OK!那回到上一层可以用『 cd .. 』而到相对路径可到『 cd ../bird』,至于绝对路径则是 cd /usr/sbin !注意喔,在前面的提示字元会改变路径名称!此外,家目录还有一个代码,那就是『 ~ 』符号!例如上面的例子可以发现,使用『 cd ~ 』可以回到个人的家目录里头去呢!此外,如果你的 Linux 主机当中有个 testing 的帐号,你要到他的家目录去,可以下达『 cd ~testing』立刻去到 testing 的家目录啰! 
pwd 
语法: [root @test /root ]# pwd 
范例: 
[root @test root]# cd /home/test 
[root @test test]# pwd 
/home/test       <==显示目前你所在的目录呦! 
说明: 
pwd 是 print working directory 的缩写,也就是显示目前所在目录的指令,例如在上个表格最后的目录是 /home/test 这个目录,但是提示字元仅显示 test ,如果你想要知道目前所在的目录,可以输入 pwd 即可: 
此外,由于很多的套件所使用的目录名称都相同,例如 /usr/local/etc 还有 /etc ,但是通常 Linux 仅列出最后面那一个目录而已,这个时候你就可以使用 pwd 来知道你的所在目录啰!免得搞错目录,结果…… 
mkdir 与 rmdir 管理目录: 
那幺要如何建立删除目录呢?很简单呀!就用 mkdir 与 rmdir ,看出来了吗?没错啦!就是 make/remove directory 的缩写说!看要怎幺用吧! 
mkdir 
语法: [root @test /root ]# mkdir [-mp] [目录名称] 
参数说明: 
-m :设定档案的权限喔!直接设定,不需要看 umask 这个内容的脸色! 
-p :帮助你直接将上面的目录递回建立起来! 
范例: 
[root @test /root]# cd tmp 
[root @test /tmp]# mkdir test<==建立名称为 test 的目录 
[root @test /tmp]# mkdir -p test1/test2/test3/test4 <==直接建立 test2...等上层目录 
[root @test /tmp]# mkdir -m 711 testqq <==建立权限为 711 的目录! 
[root @test /tmp]# ll test* 
drwxrwxr-x  2 test  test    4096 Feb 6 20:47 test/ 
drwxrwxr-x  3 test  test    4096 Feb 6 20:48 test1/ 
drwx--x--x  2 test  test    4096 Feb 6 20:48 testqq/ 
说明: 
如果想要建立新的目录的话,那幺就使用 mkdir 吧! 不过,请注意呦!在预设的情况下,你所需要的目录得一层一层的建立才行!例如:假如你要建立一个目录为 /home/bird/testing/test1,那幺首先必须要有 /home 然后 /home/bird ,再来 /home/bird/testing 都必须要存在,才可以建立 test1 这个目录!假如没有 /home/bird/testing 时,就没有办法建立 test1 的目录啰!不过,现在有个更简单有效的方法啦!那就是加上 -p 这个参数喔!你可以直接下达:『 mkdir -p /home/bird/testing』则系统会自动的帮你将 /home, /home/bird, /home/bird/testing 依序的建立起目录!并且,如果该目录本来就已经存在时,系统也不会显示错误讯息喔!挺快乐的吧! ^_^ 
rmdir 
语法: [root @test /root ]# rmdir [-p] [目录名称] 
参数说明: 
-p :将上层的目录也删除吧! 
范例: 
[root @test /root]# rmdir test<==删除名称为 test 的目录 
[root @test tmp]# ll 
drwxrwxr-x  3 test  test    4096 Feb 6 20:48 test1/ 
[root @test tmp]# rmdir test1 
rmdir: `test1': Directory not empty 
[root @test tmp]# rmdir -p test1/test2/test3/test4 
[root @test tmp]$ ll 
说明: 
如果想要建立删除旧有的目录时,就使用 rmdir 吧!例如将刚刚建立的 test 杀掉,使用 rmdir test 即可!请注意呦!目录需要一层一层的删除才行!而且被删除的目录里面必定不能还有其他的目录或档案!那如果要将所有目录下的东西都杀掉呢?!这个时候就必须使用 rm -rf test 啰!不过,还是使用 rmdir 比较不危险!不过,你也可以尝试以 -p 的参数加入,来删除上层的目录喔! 
环境变数 PATH 
在提过了绝对路径、相对路径与指令的下达方式之后,您应该会稍微注意到一件事情,那就是:『为什幺我可以在 /root 底下执行 /bin/ls 这个档案呢?』对呀!为什幺我可以直接执行 ls 就一定可以显示出一些讯息而不会说找不到该档案呢?这是因为环境变数 PATH 的帮助所致呀!当我们在执行一个指令的时候,系统会依照 PATH 的设定去每个 PATH 定义的路径下搜寻档案,先搜寻到的指令档案先被执行之!现在,请下达 echo $PATH , echo 有『显示、印出』的意思,而 PATH 前面加的 $ 表示后面接的是变数,所以即会显示出目前的 PATH 了! 
[root@test root]# echo $PATH 
/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin 
注意到了吗?对啦! /bin 在 PATH 的设定之中,所以自然就可以找的到 ls 啦! 
如果你将 ls 移动到 /root 底下的话,然后你自己本身也在 /root 底下,但是当你执行 ls 的时候,他就是不理你?怎幺办?这是因为 PATH 没有 /root 这个目录,而你又将 ls 移动到 /root 底下了,自然系统就找不到可执行档了,因此就会告诉你, command not found !那幺该怎幺克服这种问题呢?有两个方法,其一:直接将 /root 的路径加入 PATH 当中!如何增加?可以使用: 
PATH=”$PATH”:/root
这种方式来增加即可!另一种方式则是使用完整档名,亦即直接使用相对或绝对