红联Linux门户
Linux帮助

Linux提高,目录操作

发布时间:2008-03-03 16:39:51来源:红联作者:Travel
  出自鸟哥的Linux私房菜

  切换目录的命令是cd,还有哪些可以进行目录操作的命令呢?如建立目录、删除目录之类的。

  还有,有哪些比较特殊的目录呢?下面这些就是比较特殊的目录,要记下来:

引用:
. 表示此层目录
.. 表示上一层目录
- 表示前一个工作目录
~ 表示“当前用户身份”所在的家目录
~account 表示account用户的家目录


  在目录下面有两个目录是一定会存在的,就是 . 与 .. 。分别表示此层与上层目录。我们知道,根目录(/)是所有目录的最顶层,那么 / 有 .. 吗?可以使用ls -al / 看看,答案是“有的”。不过,也可以查到,根目录的 . 与 .. 属性完全一模一样。原来根目录的顶层(..)与它自己(.)是同一个目录。

  下面我们就来谈一谈几个常见的处理目录的命令。

  cd(切换目录)
  dmtsai用户的家目录是 /home/dmtsai,root家目录是 /root,假设以root身份在Linux系统中,这几个特殊的目录的意义是:

引用:
[root@linux ~]# cd [相对路径或绝对路径]
# 最重要的就是目录的绝对路径与相对路径,还有一些特殊目录的符号。
[root@linux ~]# cd ~dmtsai
# 表示去dmtsai用户的家目录,即 /home/dmtsai
[root@linux dmtsai]# cd ~
# 表示回到自己的家目录,即 /root目录
[root@linux ~]# cd
# 没有加上任何路径,也表示回到自己家目录。
[root@linux ~]# cd ..
# 表示去当前目录的上层目录,即 /root的上层目录。
[root@linux /]# cd -
# 表示回到刚才的目录,也就是 /root。
[root@linux ~]# cd /var/spool/mail
# 这就是绝对路径的写法。直接指定要去的完整路径名称。
[root@linux mail]# cd ../mqueue
# 这个是相对路径的写法,我们由 /var/spool/mail去 /var/spool/mqueue就这样写。


  cd是Change Directory(改变目录)的缩写,这是用来切换工作目录的命令。注意,目录名与cd命令之间有一个空格。登入Linux系统后,root会在root的家目录,即 /root下。回到上一层目录可以用“cd ..”。利用相对路径的写法必须要确认当前路径,才能正确到想要去的目录。例如上面的最后一个例子,必须要确认是在 /var/spool/mail中,并且知道在 /var/spool中有个mqueue的目录。这样才能使用cd ../mqueue到正确的目录,否则就要直接输入cd /var/spool/mqueue。

  其实,我们的提示符,即 [root@linux ~]# 中,就已经指出当前目录了,刚登入时会到自己的家目录,而家目录还有一个代码,就是“~”符号。例如,通过上面的例子可以发现,使用“cd ~”可以回到个人的家目录。另外,针对cd的使用方法,如果仅输入cd,表示“cd ~”。即回到自己的家目录。而“cd -”比较难以理解,多做几次练习就会明白了。

  还是要一再提醒,Linux的默认命令行模式(bash shell)具有文件补齐功能,要常常利用 [tab] 按键快速完整地输入目录。这是个好习惯。可以避免你按错键盘输入错字。

  pwd(显示当前所在的目录)

引用:
[root@linux ~]# pwd [-P]
参数:
-P : 显示出实际路径,而非使用连接(link)路径。
范例:
[root@linux ~]# pwd
/root <== 显示出目录。
[root@linux ~]# cd /var/mail
[root@linux mail]# pwd
/var/mail
[root@linux mail]# pwd -P
/var/spool/mail <== 怎么回事?有没有加 -P差很多。
[root@linux mail]# ls -l /var/mail
lrwxrwxrwx 1 root root 10 Jun 25 08:25 /var/mail -> spool/mail
# 看到这里应该知道原因了吧?因为 /var/mail是连接文件,连接到 /var/spool/mail
# 所以,加上pwd -P的参数后,会不以连接文件的数据显示,而是显示正确的完整路径。


  pwd是Print Working Directory(显示工作目录)的缩写,也就是显示当前所在目录,例如,上面的列表中,最后的目录是 /var/mail,但提示符仅显示mail,如果想要知道当前所在的目录,可以输入pwd。此外,由于很多套件所用的目录名都相同,例如 /usr/local/etc,还有 /etc,但通常Linux仅列出最后一个目录而已,这个时候就可以使用pwd来知道所在目录,以免搞错目录。

  通过-P参数,可以获取正确的目录名,而不是以连接文件的路径来显示。如果是使用Fedora Core 4,/var/mail就是 /var/spool/mail的连接文件,所以,通过到 /var/mail使用pwd -P就能够知道这个参数的意义。

  mkdir(建立新目录)

引用:
[root@linux ~]# mkdir [-mp] 目录名
参数:
-m : 设置文件的权限。直接设置,不要管默认权限。
-p : 帮助你直接建立所需要的目录递归。
范例:
[root@linux ~]# cd /tmp
[root@linux tmp]# mkdir test <== 建立一名为test的新目录
[root@linux tmp]# mkdir test1/test2/test3/test4
mkdir: cannot create directory `test1/test2/test3/test4':
No such file or directory <== 直接建立此目录。
[root@linux tmp]# mkdir -p test1/test2/test3/test4
# 加了这个 -p的参数,可以自行建立多层目录。
[root@linux tmp]# mkdir -m 711 test2
[root@linux tmp]# ls -l
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
# 仔细看上面的权限部分,如果没有加上 -m来强制设置属性,系统会使用默认属性。
# 那么,你的默认属性是什么?这要通过下面介绍的umask才能了解。


  如果想要建立新目录,就使用mkdir(make directory,生成目录)。请注意,在默认情况下,目录需要一层一层的建立。例如,假如要建立一个目录为 /home/bird/testing/test1,那么,首先必须要有 /home,然后是 /home/bird,还有 /home/bird/testing,这些都必须存在,才可以建立 /home/bird/ testing/test1目录。假如没有 /home/bird/testing,就没有办法建立test1目录。不过,现在有个更简单有效的方法,就是加上 -p参数。直接使用命令:“mkdir -p /home/bird/testing/test1”,系统会自动帮你将 /home、/home/bird、/home/bird/testing按顺序建立起目录。并且,如果该目录本来就已经存在时,系统也不会显示错误信息。

  另外,还要知道“默认权限”的概念。我们可以利用 -m强制给一个新目录相关的属性,例如上面的列表中,通过 -m 711给新目录赋予drwx--x--x属性。不过,如果没有给予 -m属性,默认的新建目录属性是什么呢?这与umask有关,稍后介绍。

  rmdir(删除“空”目录)

引用:
[root@linux ~]# rmdir [-p] 目录名
参数:
-p : 连同上层“空的”目录也一起删除
范例:
[root@linux tmp]# ls -l
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
[root@linux tmp]# rmdir test
[root@linux tmp]# rmdir test1
rmdir: `test1': Directory not empty
[root@linux tmp]# rmdir test1/test2/test3/test4
[root@linux tmp]# ls -l
drwx--x--x 2 root root 4096 Jul 18 12:54 test2
# 利用 -p这个参数,立刻就可以将test1/test2/test3/test4一次删除。
# 不过要注意的是,这个rmdir仅能“删除空的目录”。


  如果想要删除现有目录,就使用rmdir。例如,要删除test,使用rmdir test即可。请注意,目录需要一层一层删除才行。而且被删除的目录里,必定不能有其他目录或文件。这也是空目录(empty directory)的含义。如果要将所有目录下的东西都删除,就必须使用rm -rf test。不过,还是使用rmdir危险性小些。也可以尝试通过 -p参数来删除上层目录。
文章评论

共有 0 条评论