linux cd命令详解


cd是Change Directory的缩写,用于切换当前工作目录。 常用命令格式如下:
              [root@initroot ~]# cd [相对路径或绝对路径]
            
如果不加任何参数,cd命令默认将当前工作目录切换到用户的家目录,和cd ~效果相同。 我们提到过命令提示符的格式为:
              用户名@计算机名:当前工作目录$
            
所以在用cd命令切换当前工作目录的时候,我们可以通过命令提示符的变化观察当前工作目录的变化.
当前登录用户是peter,我们通过su -命令将用户身份切换到root,注意观察命令提示符的变化:
              peter@initroot:~$ pwd
              /home/peter
              peter@initroot:~$ su -
              Password: 
              root@initroot:~# pwd
              /root              
            
命令提示符中的peter,变成了root,同时$变成了#。虽然这里都是用~表示当前工作目录,但是因为已经切换了用户,用户切换前后的~已经不是同一个目录了。 一般普通用户的家目录在/home/username目录下,超级用户root的家目录在/root目录下。我们通过pwd命令可以查看当前工作目录。 现在已经是root用户身份了,我们把工作目录切换到peter的家目录下,注意敲命令的过程中,别忘了习惯性的按一下tab键,可以帮助快速补齐命令,同时检查拼写错误:
              root@initroot:~# cd ~peter/
              root@initroot:/home/peter# 
            
可以看到命令行提示符中的工作目录部分发生了变化。 为了安全起见,我们并不建议用root身份登录linux,所以用exit命令退出root吧:
              root@initroot:/home/peter# exit
              logout
              peter@initroot:~$ 
            
我们现在又恢复到peter身份了,通过观察当前工作目录为~,表示我们在peter的家目录里。 切换到上一级父目录/home:
              peter@initroot:~$ cd ..
              peter@initroot:/home$ 
            
我们从peter的家目录/home/peter,切换到了上一级目录/home,有很多种方法可以再次回到家目录中。 通过cd ~命令回到家目录:
              peter@initroot:/home$ cd ~
              peter@initroot:~$               
            
通过cd命令(不带任何参数)回到家目录:
              peter@initroot:/home$ cd
              peter@initroot:~$               
            
因为-表示前一个工作目录,所以我们也可以通过cd -回到之前的工作目录:
              peter@initroot:/home$ cd -
              peter@initroot:~$               
            
直接在cd后面加上peter参数回到家目录,别忘了随时按下tab键,可以帮助快速补齐命令名和目录名:
              peter@initroot:/home$ cd peter/
              peter@initroot:~$               
            
以上都是通过相对路径的形式回到用户家目录,我们已经知道peter的家目录是/home/peter,所以当然可以通过绝对路径的形式切换到家目录:
              peter@initroot:/home$ cd /home/peter/
              peter@initroot:~$               
            
cd命令的介绍就先介绍到这里,可以说cd命令是非常重要的,在命令行模式下,我们需要经常用到cd命令切换工作目录。 另一个经常用的命令就是pwd了。

cd是change directory的缩写,该命令用来切换当前工作目录,是shell的内置命令。
这个命令和两个环境变量息息相关,一个是CDPATH,另一个是HOME。CDPATH表示基础目录,HOME表示用户的主目录
如果cd命令后面跟的是相对路径dir,那么cd dir就可以理解为是切换到CDPATH/dir目录下,一般情况下CDPATH是个空值,如果为空值,CDPATH表示当前工作目录。
如果cd命令后面跟的是绝对路径,那么CDPATH就不起作用了,直接切换到绝对路径中。
如果cd后面什么都没有,那么就切换到HOME变量所指定的目录中,这个目录就是用户的家目录
综上,cd DIR命令可以简单理解为:
cd [CDPATH/]DIR
cd的-L和-P参数和pwd的一样,都是对软连接的处理。-L进入软连接目录,-P进入软连接指向的实际物理路径。
和pwd一样,大部分情况下在用cd命令的时候是不需要关注这些参数的,只需要简单的用cd dir就可以了

命令常用示例:

cd testdir
cd /home/initroot

1.我们先用echo命令打印一下CDPATH环境变量的值,在我的系统中,该值为空,表示当前工作目录。

                peter@peter-VirtualBox:~/Desktop$ echo $CDPATH
                peter@peter-VirtualBox:~/Desktop$
              

所以如果cd后面跟的是相对路径dir,那么就是切换到当前工作目录下的dir目录中
如下所示,当前所在的目录是/home/initroot,那么执行cd Desktop即可切换到/home/peter/Desktop目录下:

                peter@peter-VirtualBox:~$ pwd
                /home/peter
                peter@peter-VirtualBox:~$ cd Desktop
                peter@peter-VirtualBox:~/Desktop$ pwd
                /home/peter/Desktop
              

2.我们给环境变量赋值export CDPATH=/root,然后在/home/peter目录下执行cd Desktop,通过pwd会发现切换到了/root/desktop目录下。
如果cd后面跟的绝对路径,那么直接切换到绝对路径中,CDPATH不起作用:

peter@peter-VirtualBox:~$ export CDPATH=/root
peter@peter-VirtualBox:~$ echo $export                
peter@peter-VirtualBox:~$ pwd
/home/peter
peter@peter-VirtualBox:~$ cd Desktop
peter@peter-VirtualBox:~/Desktop$ pwd
/root/Desktop
peter@peter-VirtualBox:~/Desktop/vimplugin$ cd /home/peter/Desktop/vimplugin
peter@peter-VirtualBox:~/Desktop/vimplugin$ pwd
/home/peter/Desktop/vimplugin

3.使用cd ~快速切换到主目录,如果HOME环境变量已设置,也可直接敲cd,不带任何参数,直接切换到主目录:

peter@peter-VirtualBox:~/Desktop$ pwd
/home/peter/Desktop
peter@peter-VirtualBox:~/Desktop$ cd ~
peter@peter-VirtualBox:~$ pwd
/home/peter
peter@peter-VirtualBox:~$ 
peter@peter-VirtualBox:~/Desktop$ echo $HOME
/home/peter
peter@peter-VirtualBox:~$ cd Desktop
peter@peter-VirtualBox:~/Desktop$ pwd
/home/peter/Desktop
peter@peter-VirtualBox:~/Desktop$ cd
peter@peter-VirtualBox:~$ pwd
/home/peter

4.使用cd -可以快速切换回上个目录,比如刚才我们在/home/peter/Desktop目录下,用cd切换到了主目录下,再用cd -即可切换会刚才的目录:

peter@peter-VirtualBox:~/Desktop$ pwd
/home/peter/Desktop
peter@peter-VirtualBox:~/Desktop$ cd
peter@peter-VirtualBox:~$ pwd
/home/peter
peter@peter-VirtualBox:~$ cd -
/home/peter/Desktop
peter@peter-VirtualBox:~/Desktop$ pwd
/home/peter/Desktop

5.如果目录是一个软链接,使用cd -L切换到软连接目录,使用cd -P切换到软链接链接的真实物理路径,我们通过一个实例查看-L和-p的区别:
在我的/home/peter/Desktop目录下,tovimplugin是指向vimplugin目录的软连接

peter@peter-VirtualBox:~/Desktop$ ls -al
total 1087400
drwxr-xr-x  8 peter peter      4096 Oct 10 11:42  .
drwxr-xr-x 38 peter peter      4096 Oct  9 23:06  ..
lrwxrwxrwx  1 peter peter         9 Oct 10 11:42  tovimplugin -> vimplugin
drwxrwxr-x  5 peter peter      4096 Oct 10 11:41  vimplugin
peter@peter-VirtualBox:~/Desktop$ cd tovimplugin
peter@peter-VirtualBox:~/Desktop/tovimplugin$ pwd
/home/peter/Desktop/tovimplugin
peter@peter-VirtualBox:~/Desktop/tovimplugin$ cd ..
peter@peter-VirtualBox:~/Desktop$ cd -L tovimplugin
peter@peter-VirtualBox:~/Desktop/tovimplugin$ pwd
/home/peter/Desktop/tovimplugin
peter@peter-VirtualBox:~/Desktop/tovimplugin$ cd ..
peter@peter-VirtualBox:~/Desktop$ cd -P tovimplugin
peter@peter-VirtualBox:~/Desktop/vimplugin$ pwd
/home/peter/Desktop/vimplugin

如上示例,通过cd ..可切换到上级目录。.表示本目录,..表示上级目录。

如果想把基础目录永久改变,把下载的代码加入你的~/.bash_profile中即可:
vi ~./bash_profile
export CDPATH=/etc
和PATH变量类似,可以在CDPATH变量加入多个路径(用英文分号:分隔多个目录),这样就更方便了。
export CDPATH=.:~:/etc:/var
这个技巧在使用Linux cd命令跳转到某一特定父目录下的情况下非常有帮助:
Oracle DBA经常在$ORACLE_HOME目录下做一些设置,这个时候CDPATH中加Oracle的根目录就方便多了。
类Unix系统管理员经常修改/etc中有配置文件,可以把/etc加入CDPATH中。
程序开发人员,经常工作在如/home/projects的项目目录里,这个时候CDPATH也能帮上大忙。
终端用户(普通帐号用户)经常在自己的home目录里进行日常操作,可以考虑把 ~ 加入CDPATH变量。
使用CDPATH变量可以加快Linux cd命令的操作呢!

Usage:
cd [-L|[-P [-e]] [-@]] [dir]
切换shell当前工作目录,cd是change directory的缩写
将当前工作目录变更到DIR,DIR默认值为shell环境变量HOME
环境变量CDPATH定义了cd命令的搜索路径的起点,CDPATH中的路径以分号(:)分割。比如我们想要将目录 切换到/etc/ssh目录,CDPATH环境变量的值为/etc,只需要在命令行中输入cd ssh即可切换到/etc/ssh目录中,
也可以输入绝对路径直接切换到/etc/ssh中:cd /etc/ssh。如果CDPATH变量为空,则表示当前目录。
比如你当前所在的目录为/home/peter,CDPATH为空,在该目录下输入cd desktop则切换到cd /home/peter/desktop 目录中。可以简单的理解为cd [CDPATH]/DIR,如果DIR以/号开头,即DIR为绝对路径,那么CDPATH不起作用
If the directory is not found, and the shell option `cdable_vars' is set, the word is assumed to be a variable name. If that variable has a value, its value is used for DIR.
Options:
-L - force symbolic links to be followed: resolve symbolic links in DIR after processing instances of `..'
-P - use the physical directory structure without following symbolic links: resolve symbolic links in DIR before processing instances of `..'
-e - if the -P option is supplied, and the current working directory cannot be determined successfully, exit with a non-zero status
-@ - on systems that support it, present a file with extended attributes as a directory containing the file attributes
The default is to follow symbolic links, as if `-L' were specified. `..' is processed by removing the immediately previous pathname component back to a slash or the beginning of DIR.
Exit Status:
Returns 0 if the directory is changed, and if $PWD is set successfully when -P is used; non-zero otherwise.

initroot编辑整理,转载请注明www.initroot.com

100次点赞 100次阅读