cd 是 change directory 的缩写, 是linux中最最常用的命令之一。与上一章介绍过的参数众多的ls不同,cd命令只需要一个参数:你想要前往的路径名称。


如果我们想要前往根目录,则输入 cd /


mateo21@mateo21-desktop:~$ cd /
mateo21@mateo21-desktop:/$ pwd
/

我们看到命令提示符中的 "~" 变成了 "/" ,如果对结果还有所怀疑,可以使用以前提到的 pwd 命令来验证。


由于博客中显示不了颜色,所以用 ls -F 看一下根目录下都有哪些文件:


mateo21@mateo21-desktop:/$ ls -F
bin/    dev/   initrd/          lib/         mnt/   root/  sys/  var/
boot/   etc/   initrd.img@      lost+found/  opt/   sbin/  tmp/  vmlinuz@
cdrom@  home/  initrd.img.old@  media/       proc/  srv/   usr/  vmlinuz.old@

我们可以看到根目录下包括了我们在目录结构中提到的那些重要文件。


我们进入 usr 目录


mateo21@mateo21-desktop:/$ cd usr


再用 ls -F 查看该目录下的文件列表


mateo21@mateo21-desktop:/usr$ ls -F
bin/  games/  include/  lib/  local/  sbin/  share/  src/  X11R6/


再用 cd 进入 games 目录


mateo21@mateo21-desktop:/usr$ cd games
mateo21@mateo21-desktop:/usr/games$


在命令行界面中,我们就是通过 ls 与 cd 的组合使用来找到自己需要的文件。下图形象的描述了我们刚才的操作。


Linux入门 Part2: 目录操作(4) - cd 切换路径_ tab


在目录结构一章中,我们提到 ".." 代表父目录,它与 cd 一起使用就可以让我们回到当前目录的父目录下。


返回上一层目录:cd ..

继续刚才的例子,此时我们身处 games 目录,如果想回到 /usr 目录下,就可输入 cd ..


mateo21@mateo21-desktop:/usr/games$ cd ..
mateo21@mateo21-desktop:/usr$

用图来表示就是


Linux入门 Part2: 目录操作(4) - cd 切换路径_linux_02


".." 代表上层目录,如果我们想返回上上层目录,也就是从 games 目录直接返回至 / 目录,可以输入 cd ../..


mateo21@mateo21-desktop:/usr/games$ cd ../..
mateo21@mateo21-desktop:/$

以此类推,如果想返回上三层,就是 cd ../../.. 不过这个用的比较少



绝对路径和相对路径

继续上面的例子,我们发现通过 cd ../.. 我们又回到了根目录,和直接执行 cd / 得到了一样的结果。这是怎么回事呢?


实际上,我们可以通过两种方式来改变路径:在 cd 后加上绝对路径,或在 cd 后加上相对路径


相对路径 (relative path)

所谓相对,指的是相对你当前所处的位置。如上例中,当我们处在 /usr 目录下时,为了进入 games 目录,我们输入了 cd games。这里就使用了相对目录,因为 games 的完整目录是 /usr/gmaes。如果我们在 / 下使用 cd games, 由于 games 目录并不直接属于根目录,会出现找不到目录的情况。


ateo21@mateo21-desktop:/$ cd games
bash: cd: games: Aucun fichier ou répertoire de ce type

此时,usr 直接属于根目录,所以正确的进入 games 目录的方法是:cd usr/games(注意 usr 前面没有斜杠)


mateo21@mateo21-desktop:/$ cd usr/games
mateo21@mateo21-desktop:/usr/games$


绝对路径 (absolut path)

绝对路径指的是文件的完整路径。绝对路径始终以代表根目录的 / 开头,这是因为 Linux 的文件系统采用了级层式的树状目录结构,其中最上层是根目录 (root, /),  其他所有目录都包含在根目录中


如果我在当前用户的主目录下,想要使用绝对路径进入 games 文件夹,应该这样写


mateo21@mateo21-desktop:~$ cd /usr/games
mateo21@mateo21-desktop:/usr/games$

执行时,系统首先回到根目录,然后再根据给定的路径寻找文件,示意图如下

Linux入门 Part2: 目录操作(4) - cd 切换路径_ cd_03


上例中,如果我们使用相对路径,则应该这样写:


mateo21@mateo21-desktop:~$ cd ../../usr/games/
mateo21@mateo21-desktop:/usr/games$

其首先回到 ~ 的上层目录 (/home),再回到/home 的上层目录,也就是根目录。然后再依次找到 usr 和 games 目录,示意图如下:


Linux入门 Part2: 目录操作(4) - cd 切换路径_ cd_04



绝对路径的好处的完整,不会出错,缺点是有时过于冗长。相对路径的优势是灵活,缺陷在于对环境有依赖,如果写在文件中,随着文件位置的移动,相对路径可能会失效,从而导致路径错误。


返回当前用户主目录

我们已提到过多次,~ 代表当前用户主目录。这里 ~ 其实是一个绝对路径 (/home/user_name),因此不论身处哪个目录下,使用 cd ~ 就可以直接回到当前用户的主目录。还有更简单的,直接输入 cd 不加任何参数,也会直接回到主目录。


自动补全路径

前面章节中提到过 tab 补全命令,tab 和 cd 一起运用还可以用来补全路径。用法和补全命令类似,以 cd /usr/games 为例,如果每次都要打一遍路径名,那效率也太低了。利用 tab 键,只需打 cd /u 再按下 tab,bash 就会自动为你补全到 cd /usr/ 再输入一个 g 再次按下 tab 键,就得到了 cd /usr/games 的结果。操作相当简答,一试就明白。


与命令补全一样,如有多种可能性,bash 会列出所有可选项,比如在 /usr 目录下输入 cd l 再按下 tab 结果如下:


mateo21@mateo21-desktop:/usr$ cd l
lib/   local/
mateo21@mateo21-desktop:/usr$ cd l

此时在多打一个 o 随后再按一次 tab 就会自动补全 local 目录