cd 改变目录

Windows 操作系统中的文件夹,在Linux中称为目录。目录是包含几组文件和其他目录的容器。所有目录从根目录向下扩展,根目录用正斜杠(/)表示。例如:
/usr 是根目录(/)的一个子目录。
/usr/spool 目录是 /usr 的一个子目录。
/usr/spool/mail 目录是 /usr/spool 的一个子目录。

 

显示当前工作目录

从 shell 提示,您可以显示您所在的目录的路径名,方法是运行命令 pwd,可以通过以下方法记住这个命令:present working directory(当前工作目录)。

# pwd 
# /home/anthony

 

切换目录

语法:cd 目标目录

记住,shell 命令是区分大小写的。

 

使用绝对路径

# cd /var 
# cd /usr/spool/mail 
# cd /home/anthony

您完全可以到达任何目录 — 如果有权限的话(您需要执行权限)— 使用它的绝对路径名。
如果您进入的目录不是有效目录,或者您没有访问该目录的权限,cd 命令将报告一个错误。如果您的 cd 命令失败,那么您仍将处于原目录中。

 

每当您想检查当前工作目录时,您都可以运行pwd 命令,但还有更好的方法。只要cd 命令成功运行,新的当前工作目录将存储在环境变量$PWD(Present Working Directory)中。注意,与pwd 命令不同,这个变量是大写。因此,您可以使用echo 命令显示$PWD 的值。了解您的目录存储在一个变量中还是很有用。原因是:可以将$PWD 的值显示为shell 提示的一部分。

# echo $PWD
# /home/anthony

 

提示我的工作目录
目前为止,示例中的shell 提示都设置为正斜杠、英镑符号、或符号#。但是,如果您在shell 提示中包含$PWD,您就总是知道您当前所处的目录。然后,当您运行cd 时,变量PWD 将被更新并显示为shell 提示的一部分。
可以在您主目录的.profile 文件中设置shell 提示变量PS1。

在shell 提示中包含$PWD
PS1='${PWD} > '
export PS1

当您下次登录时,您的.profile 文件将作为登录流程的一部分执行,这将把工作目录显示为shell 提示的一部分。如果您知道如何达到您的主目录,现在就可以执行.profile 文件

使用新的shell 提示执行新的.profile
# . ./.profile
/home/anthony >

您可以定制这个提示,以包含主机名、登录名、或者一些显示字符。

 

使用相对路径

当您只想从目录树的一个分支跳转到附近的另一个分支时,使用绝对路径会有点麻烦,这就是cd 命令允许使用相对路径的原因。默认情况下,相对路径指的是相对于您所在的当前目录的路径。使用相对路径意味着更少的键击,尽管那取决于您要从哪个目录前往哪个目录。

如果您使用-a 标志运行ls 命令,将会看到两个条目:一个是.(圆点),另一个是..(点-点)。单点表示当前目录,双点表示父目录。

从/home/anthony 到/home/anthony/bin 
/home/anthony > cd bin 
/home/anthony/bin >
 
前往父目录 
/var/spool/mqueue > cd .. 
/var/spool > 
 
前往一个新的子目录 
/var/spool > cd mail 
/var/spool/mail > 
  
在一个命令中从分支到分支 
/var/spool/mqueue > cd ../mail 
/var/spool/mail > 
 
跳过几个分支
/usr/IBM/WebSphere/AppServer/profiles > cd ../../PortalServer/log 
/usr/IBM/WebSphere/PortalServer/log >

 

~(波浪号),用户主目录

每位 Linux(UNIX) 用户都有一个主目录,在创建用户时定义。可以在/etc/passwd 中或使用smit 查询主目录,但有更好的方法返回主目录。如果您想返回主目录,可以运行不带任何参数的cd 命令

使用cd 命令快速返回主目录 
/usr/IBM/WebSphere/PortalServer/log > cd 
/home/anthony > 

主目录保存在变量$HOME 中,这意味着不带参数的cd 命令相当于运行cd $HOME 
/var/spool/mail > cd $HOME 
/home/anthony > 

$HOME 变量对于了解主目录很有用,即使您现在不打算返回主目录。事实上,$HOME 变量太有用了,以至于它有一个别名:波浪号(~)。

您可能需要查看或使用主目录中的文件。如果您位于其他目录中,不必先返回主目录或者键入完整的目录路径,只需使用波浪号即可。可以从主目录之外的某个地方随意复制主目录中的.profile 文件。

$HOME 的波浪号快捷方式 
/usr/IBM/WebSphere > cp ~/.profile ~/.profile.save 

远程访问您的邻居的主目录

使用波浪号列示或处理另一个用户的主目录中的文件(如果有足够权限)。为此,执行后面带该用户登录名的波浪号命令。

波浪号是每个人的HOME 
/home/anthony > cp ~john/.profile ~john/.profile.save

这比猜想用户的主目录更安全,比在/etc/passwd 中查找更容易。

 

-(破折号),上一个目录

通常,您需要更改目录,只需运行一两个命令,然后返回上一个目录($OLDPWD)。为此,可以使用cd dashback,即cd 后面跟一个破折号(cd -)。

返回上一个目录 
/home/anthony > cd /usr/sys/inst.images 
/usr/sys/inst.images > cd - 
/home/anthony >

注意$PS1 shell 提示如何在我每次运行cd 命令时显示新目录

 

切换开关

使用这个cd dashback 的结果是:如果两次输入该命令,就可以在两个目录之间来回切换。这个功能在下面这种情况下很有用:您想在一个目录中更改一个程序或配置文件,然后在另一个目录下的日志文件中查看结果。与其他示例类似,我将跳过您在实际更改目录后可能立即会运行的命令。

在$PWD 和$OLDPWD 之间切换 
/data/log > cd /apps/config 
/apps/config > cd - 
/data/log > cd - 
/apps/config > 

 

cd 转移

我发现一个特别有用的特性是cd 转移。当两个目录路径只有一个区别(比如一个单词不同)时,这个是从旧目录切换到新目录的一种简单方法。
cd directorya directoryb
第一个参数是当前目录路径中需要替换的参数,第二个参数是替换字符串。

如果两个目录路径只有一个字符串不同,cd 转移特性比较理想。cd 转移可以在非常短的时间内为您节约数千次键击。

 

要从v7目录 切换到v8目录,只需键入cd v7 v8 
/programs/v7/reports/monthly > cd v7 v8 
/programs/v8/reports/monthly >
  
如果历史上的每年每月都有一个对应目录,cd 转移允许从一年跳到另一年 
/hist/2010/april/reports > cd 2010 2011 
/hist/2011/april/reports > 
 
切换月份目录 
/hist/2011/april/reports > cd april may 
/hist/2011/may/reports > 

 

cd 和短路

当我在脚本中使用cd 时,我总是验证更改目录命令有效后才继续下一条命令。我曾经看到一个操作系统被一个两年来每天都在运行的两行清理脚本擦除。当一个远程主机关闭时,一个NFS 加载的目录将变得不可用。cd 命令失败,清理脚本一直继续,直到系统上没有任何东西留下可以清理。在继续进行其他操作之前验证cd 命令已生效的一种简单方法是在cd 命令之后立即使用shell 短路&& 。如果cd 命令失败,下一条命令将不会继续

cd 和短路 
cd /some/dir && rm *.log