前面的文章,介绍了pwd命令,现在介绍cd命令,前面有一个实践使用到了。一般人认为cd命令没有选项,就改变工作目录左右,实则不然,cd命令还有一些选项。而且cd命令涉及到一些变量,这些问题我们还是接下来的学习中去探究一二。
cd 是Change Directory 的缩写,这是用来变换工作目录的指令
cd [-L|[-P [-e]]] [dir]
短选项 | 含义(作用) |
---|---|
-L | 如果要切换的目标目录是一个符号的连接,直接切换到字符连接名代表的目录,而非符号连接所指向的目标目录。 |
-P | 果要切换到的目标目录是一个符号连接,直接切换到符号连接指向的目标目录 |
-e | 如果提供-p选项,当改变要转到一个正确的目录(确定是的可以成功的目录),这时当前工作目录确定并没有正确的转到,则返回非0状态(不成功状态)。 |
默认情况下,使用cd命令和指定-L选项的执行结果一致。
退出状态:
如果当前工作目录被改变,则返回0状态。其他情况下为非0状态;
绝对路径和相对路径在后面阶段会详细讲解,如果还不知道的话,后面在过来看本节应用
cd /var
cd /usr/spool/mail
cd /home/anthony
您完全可以到达任何目录 — 如果有权限的话(您需要执行权限)— 使用它的绝对路径名。
如果您进入的目录不是有效目录,或者您没有访问该目录的权限,cd 命令将报告一个错误。如果您的 cd 命令失败,那么您仍将处于原目录中。
当您只想从目录树的一个分支跳转到附近的另一个分支时,使用绝对路径会有点麻烦,这就是cd 命令允许使用相对路径的原因。默认情况下,相对路径指的是相对于您所在的当前目录的路径。使用相对路径意味着更少的键击,尽管那取决于您要从哪个目录前往哪个目录。
如果您使用-a 标志运行ls 命令,将会看到两个条目:一个是.(圆点),另一个是..(点-点)。单点表示当前目录,双点表示父目
# 从/etc 到/etc/init.d
[tqw@localhost etc]$ pwd
/etc
[tqw@localhost etc]$ cd init.d/
[tqw@localhost init.d]$ pwd
/etc/init.d
# 前往父目录
[tqw@localhost init.d]$ pwd
/etc/init.d
[tqw@localhost init.d]$ cd ../
[tqw@localhost etc]$ pwd
/etc
# 在一个命令中从分支到分支
[tqw@localhost lpd]$ pwd
/var/spool/lpd
[tqw@localhost lpd]$ cd ../mail/
[tqw@localhost mail]$ pwd
/var/spool/mail
每位 Linux(UNIX) 用户都有一个主目录,在创建用户时定义。可以在/etc/passwd 中或使用smit 查询主目录,但有更好的方法返回主目录。如果您想返回主目录,可以运行不带任何参数的cd 命令
# 转到用户主目录
[tqw@localhost mail]$ cd
[tqw@localhost ~]$ pwd
/home/tqw
[tqw@localhost ~]$ cd /var/
[tqw@localhost var]$ cd $HOME
[tqw@localhost ~]$ pwd
/home/tqw
[tqw@localhost ~]$ echo $HOME
/home/tqw
[tqw@localhost ~]$ cd /var/
[tqw@localhost var]$ cd ~
[tqw@localhost ~]$ pwd
/home/tqw
HOME变量
$HOME 变量对于了解主目录很有用,即使您现在不打算返回主目录。事实上,$HOME 变量太有用了,以至于它有一个别名:波浪号(~)。
您可能需要查看或使用主目录中的文件。如果您位于其他目录中,不必先返回主目录或者键入完整的目录路径,只需使用波浪号即可。可以从主目录之外的某个地方随意复制主目录中的.bash_profile文件(ubuntu中是.profile)。
使用波浪号列示或处理另一个用户的主目录中的文件(如果有足够权限)。为此,执行后面带该用户登录名的波浪号命令。
# 波浪号是每个人名
[tqw@localhost ~]$ cp ~tqw/.bashrc ~tqw/Desktop/test/
这比猜想用户的主目录更安全,比在/etc/passwd 中查找更容易。
通常,您需要更改目录,只需运行一两个命令,然后返回上一个目录($OLDPWD)。为此,可以使用cd dashback,即cd 后面跟一个破折号(cd -)。
# OLOPWD的验证
[tqw@localhost ~]$ cd /home/tqw/Desktop/test/
[tqw@localhost test]$ cd -
/home/tqw
[tqw@localhost ~]$ echo $OLDPWD
/home/tqw/Desktop/test
[tqw@localhost ~]$ cd -
/home/tqw/Desktop/test
[tqw@localhost test]$ pwd
/home/tqw/Desktop/test
[tqw@localhost test]$ echo $OLDPWD
/home/tqw
[tqw@localhost test]$ cd /var/mail/
[tqw@localhost mail]$ echo $OLDPWD
/home/tqw/Desktop/test
OLDPWD变量
此变量值为上一次cd所进入的当前目录。并不是上一级目录的意思(父目录)。
使用这个cd dashback 的结果是:如果两次输入该命令,就可以在两个目录之间来回切换。这个功能在下面这种情况下很有用:您想在一个目录中更改一个程序或配置文件,然后在另一个目录下的日志文件中查看结果。与其他示例类似,我将跳过您在实际更改目录后可能立即会运行的命令。
(上一个已经展示了,所以不进行实例了)
cd !$
不进行示例了,有兴趣可以试试看。
本处引用我认为比较好的实例技能的文章介绍的内容
如果你需要经常使用Linux cd命令跳转到某一特定父目录下的多个子目录的话,可以考虑把CDPATH这个环境变量设置为该父目录。
比如,经常操作/etc目录下的若干个子目录的时候,我们就把CDPATH设置为/etc,这样,每次转到/etc下的子目录时就不必加上/etc前缀。
# pwd
/home/topsage
#cd ssh
-bash: cd: ssh: No such file or direcotry
#! 代码:
# export CDPATH=/etc
#cd ssh
#! 这个时候cd ssh命令就会在基础目录/etc中找寻ssh子目录:
# pwd
/etc/ssh
#! 如果想把基础目录永久改变,把下载的代码加入你的~/.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命令的操作呢。
提醒一下哦,我们的 Linux 的默认指令列模式 (bash shell) 具有档案补齐功能, 要常常利用 [tab] 按键来达成你的目录完整性啊! 可以避免你按错键盘输入错字,而且对于长名字的目录能减少很多输入时间
我觉得cd命令解释到这里也就差不多了,能让大家了解了cd命令。
关于Linux下用shopt命令来帮我们自动纠错输入cd 错误的扩展,大家可以去百度搜索,一搜就得了。主要是依赖于cdable_vars变量的作用。