即使您已经使用cd命令多年,您可能会对它的某些功能感到惊讶。 毕竟,您上次运行man cd
什么? (有关cd命令文档的链接,请参阅参考资料 。)cd命令有一些小技巧,可以节省许多不必要的输入。 考虑到必须多久更改一次目录,这对您来说是个好消息。
本文着眼于UNIX®目录结构,并展示了如何查看当前目录路径并将目录添加到Shell提示符。 在看了一些简单的CD示例之后,本文解释了绝对路径和相对路径的含义以及何时使用它们。 然后,我分享一些我最喜欢的省时CD快捷方式,例如如何进入您的主目录以及如何标识任何用户的主目录。 我展示了如何在两个目录之间来回切换,并提供了一个关于cd的鲜为人知的宝石,我称之为cd shuffle 。 这是在两个相似目录路径之间移动的简单方法。
但是,在查看更改目录之前,了解有关UNIX目录结构的一点很重要。
根目录树
在Windows®操作系统中可能称为文件夹的 目录在UNIX中称为目录 。 目录是包含文件和其他目录组的容器。
UNIX中的所有目录都从根目录向下分支,用正斜杠( /
)表示。 例如:
- 目录/ usr是根目录(
/
)的子目录。 - / usr / spool目录是/ usr的子目录。
- / usr / spool / mail目录是/ usr / spool的子目录。
。 。 。 等等。
我在哪个目录中?
在shell提示符下,您可以通过运行清单1所示的命令pwd
显示所在目录的路径名。 记住这个命令作为p怨恨w ^ d工作会有irectory。
清单1.显示当前的工作目录(pwd)
# pwd
# /home/anthony
cd的abc
要更改到另一个目录,请使用cd,后跟一个空格,然后选择要转到的目录。 请记住,UNIX命令区分大小写,因此,除非目录名称中实际包含大写字母,否则都将其全部小写。 在清单2的示例中,我要更改的每个目录都以斜杠( /
)开头,因为我使用的是绝对路径 ,从根目录一直跟踪目录的路径。
清单2.使用绝对路径的cd命令
# cd /var
# cd /usr/spool/mail
# cd /home/anthony
如果您具有权限(需要执行权限),则可以使用其绝对路径名访问任何目录。 清单2中的命令是作为示例提供的。 通常,您不会连续运行两个cd命令,因为更改工作目录的目的是在其中进行一些工作,而不是立即移动到其他地方。
如果您输入的目录不是有效目录,或者您没有访问该目录的权限,则cd命令将报告错误。 如果您的cd命令失败,那么您将停留在从其开始的目录中。
我在哪里?
好的。 您的cd命令没有报告任何故障,因此您认为它可以工作。 但是最好知道您现在位于哪个目录中。
当然,您可以在每次需要检查当前工作目录时运行pwd
命令,但是有更好的方法。 只要您成功运行cd命令,新的工作目录就会存储在环境变量$ PWD(当前工作目录)中。 请注意,与pwd
命令不同,此变量以大写字母表示。 因此,您可以使用echo
显示$ PWD的值,如清单3所示 。
清单3.显示$ PWD
# echo $PWD
# /home/anthony
似乎比运行您之前看到的pwd
命令容易得多,是吗? 不过,知道目录存储在变量中还是有帮助的。 原因如下:您可以在shell提示中显示$ PWD的值。
提示我的工作目录
在目前为止使用的示例中,shell提示符设置为井号(或井#
)( #
)。 但是,如果在外壳程序提示符中包含$ PWD,则始终知道您所在的目录。然后,在运行cd时,变量PWD将被更新并显示为外壳程序提示符的一部分。
通过添加清单4中所示的行,可以在主目录的.profile中设置shell提示变量PS1。
清单4.在shell提示符中包含$ PWD
PS1='${PWD} > '
export PS1
下次登录时,您的.profile应该作为登录过程的一部分执行,这应该在shell提示中显示工作目录。 如果您知道如何访问主目录,则可以立即执行.profile(请参见清单5 )。
清单5.用新的shell提示执行新的.profile
# . ./.profile
/home/anthony >
您可以调整提示以包括主机名,您的登录名或其他一些显示字符。 有关增强shell提示的详细信息,请参阅参考资料中指向文章“技巧:提示魔术”的链接 。
比较好
当您只想从树的一个分支跳转到附近的另一个分支时,使用绝对路径会比较麻烦。 这就是为什么cd允许您使用相对路径的原因。 默认情况下,相对路径是指相对于您当前所在目录的目录。使用相对路径通常意味着击键次数更少,尽管这取决于您要访问的目录和要访问的目录。
例如,要从/ home / anthony转到/ home / anthony / bin,您不必输入目标目录的绝对路径(/ home / anthony / bin); 只需输入相对于您已有的路径的新路径即可,如清单6所示 。
清单6.使用相对路径的cd命令
/home/anthony > cd bin
/home/anthony/bin >
注意shell提示如何显示$ PWD的新值。
拜访你的父母
如果使用-a
标志运行ls
命令,则可以看到的条目.
(点),另一个代表..
(点)。 单点表示当前目录。 两个点用于父目录,即您所在目录正上方的一个点。
当您想通过cd升级时,使用上级目录很方便。 清单7显示了如何。
清单7.使用cd命令转到父目录(点-点)
/var/spool/mqueue > cd ..
/var/spool >
然后,您可以转到一个新的子目录(请参见清单8 )。
清单8.使用cd进入子目录
/var/spool > cd mail
/var/spool/mail >
或者,您可以在单个命令中完成所有这些操作,如清单9所示 。
清单9.在一个命令中分支到分支
/var/spool/mqueue > cd ../mail
/var/spool/mail >
您甚至可以跳几级,然后跳几级,如清单10所示。
清单10.跳转分支
/usr/IBM/WebSphere/AppServer/profiles > cd ../../PortalServer/log
/usr/IBM/WebSphere/PortalServer/log >
一旦习惯了使用相对路径,它便成为第二天性。
捷径之家
每个UNIX用户都有一个创建该用户时定义的主目录。 您可以在/ etc / passwd中查找主目录或使用smit
,但是有一种更好的返回主目录的方法。
直接使用cd回家
如果要进入自己的主目录,请使用不带任何参数的cd命令,如清单11所示。
清单11.带有CD的快速入门家
/usr/IBM/WebSphere/PortalServer/log > cd
/home/anthony >
您的主目录存储在变量$ HOME中。 这意味着不带参数的cd命令等效于键入cd $HOME
(请参见清单12 )。
清单12. cd $ HOME
/var/spool/mail > cd $HOME
/home/anthony >
$ HOME变量对于知道您的主目录很有用,即使您现在还没有到那里。 实际上,$ HOME变量非常有用,以至于有了别名:波浪号( ~
)。
叫回家,波浪号
您可能要查看或处理主目录中的文件。 如果您在其他目录中,则无需先回家或键入完整的目录路径。 只需使用波浪号字符即可。 在清单13中 ,我在自己的主目录中复制了.profile的副本,所有这些都从其他地方轻松完成。
清单13. $ HOME的Tilde快捷方式
/usr/IBM/WebSphere > cp ~/.profile ~/.profile.save
远程访问邻居的家
您也可以使用代字号列出或使用其他用户主目录中的文件(如果权限允许)。 为此,只需使用tilde后跟用户的登录名,如清单14所示。
清单14.蒂尔德是每个人的家
/home/anthony > cp ~john/.profile ~john/.profile.save
这比猜测用户的主目录更安全,比在/ etc / passwd中查找目录更容易。
冲回来
通常,您只需要更改目录即可运行一两个命令,然后返回到先前所在的目录($ OLDPWD)。 为此,请使用cd dashback。 那是cd,后跟一个破折号( cd -
)。 在清单15中 ,请注意,每次运行cd时,$ PS1 shell提示符如何显示新目录。
清单15.返回上一个目录
/home/anthony > cd /usr/sys/inst.images
/usr/sys/inst.images > cd -
/home/anthony >
拨动开关
此cd dashback的结果是,如果您输入两次,则可以在两个目录之间来回切换。 如果要更改一个目录中的程序或配置文件,并在另一个目录的日志文件中查看结果,则此功能可能很有用。 清单16显示了两个目录之间的切换。 与其他示例一样,在实际更改目录之后,我将跳过您可能立即运行的命令。
清单16.在$ PWD和$ OLDPWD之间切换
/data/log > cd /apps/config
/apps/config > cd -
/data/log > cd -
/apps/config >
CD随机播放
我发现特别有用的功能是cd shuffle。 当两个目录路径只有一个差异(例如单个单词)时,这是从旧目录切换到新目录的一种简单方法。
如果UNIX旧手从未使用过该语法,那么它们可能看起来很奇怪,但是它可以工作。 参见清单17 。
清单17. cd shuffle语法
cd directorya directoryb
第一个参数是您要在当前目录路径中替换的字符串。 第二个参数是替换字符串。 例如,要从v7迁移到v8,只需输入cd v7 v8
,如清单18所示 。
清单18.使用cd shuffle
/programs/v7/reports/monthly > cd v7 v8
/programs/v8/reports/monthly >
该命令已保存19次击键! 这比上三个父目录然后返回目录树或使用绝对路径要简单得多。
此两参数cd命令具有许多用途:在相似的目录路径之间交换,唯一的区别是数据库实例名称,分支名称或日期。 cd随机播放可以在很短的时间内为您节省数千次的击键。
翻阅历史
如果您有一个目录,可以记录每年的历史记录和每个月的历史记录,那么cd shuffle允许您从一年跳转到另一年。 在清单19中查看它的工作方式。
清单19.新年
/hist/2010/april/reports > cd 2010 2011
/hist/2011/april/reports >
如果要在同一年内更改为其他月份,请使用cd shuffle,其参数为from month和to month,如清单20所示。
清单20.交换月目录
/hist/2011/april/reports > cd april may
/hist/2011/may/reports >
如果两个目录路径只有一个字符串不同,那么cd shuffle是理想的选择。
cd可以吗?
当我在脚本中使用cd时,在继续执行下一个命令之前,我始终会验证change目录是否起作用。 我曾经看到一个每天被运行两年的两行清理脚本清除了一个操作系统。 当远程主机关闭时,已安装NFS的目录不可用。 cd命令失败,并且清理脚本仍然继续,直到系统上没有剩余要清理的东西为止。
在继续进行其他操作之前,验证cd正常工作的一种简单方法是在cd命令之后立即使用外壳短路&&
。 如果cd命令失败,则下一个命令将不会继续。 参见清单21 。
清单21. cd和短路
cd /some/dir && rm *.log
结论
在本文中,您了解了cd命令。 您了解了如何使用绝对路径和相对路径来更改目录,并且学习了如何显示您所在的工作目录以及如何在两个目录之间来回切换。 您看到了不同的引用主目录的方式,并且了解了鲜为人知的cd shuffle,该CD shuffle允许您在当前路径中替换字符串并切换到新路径。
cd命令在命令行上是如此重要,并且它的使用频率很高,因此值得了解其中的许多快捷方式。
翻译自: https://www.ibm.com/developerworks/aix/library/au-directorytree/index.html