执行摘要(TL; DR)
- 使用
pwd要知道你在哪里(或之间的外观:和$您的提示)。
- 用于
cd在其他地方更改目录。与Windows不同,cd必须始终跟一个空格。像cd/和这样的命令cd..不起作用,但是cd /和cd ..会。
知道你在哪里
方式1:运行pwd。
您当前所在的目录是特定于Shell的(更常见的是特定于应用程序的)。您可能在一个目录中运行一个shell,而在另一个目录中运行另一个shell。
要知道您当前所在的目录,请运行:
pwd
例如(从我刚打开的外壳上,我的机器上):
ek@Kip:~$ pwd
/home/ek
这告诉我我在目录中/home/ek。/home是(有些令人困惑)包含人类用户主目录的目录(它本身不是任何用户的主目录)。该用户username具有主目录。/home/username
该root用户没有在主目录/home。相反,其root主目录为/root。这是不是与混淆的根目录,这是/。
方式2:检查您的提示。
提示符的默认配置是告诉您当前位于哪个目录。提示符是显示的文本,用于通知您外壳已准备好接受命令。
在您向我们展示的问题示例中,您的提示是:
christy@ubuntu:~$
christy是您的用户名。该@字符将其与ubuntu计算机的主机名分开。(如果您正在运行实时CD,则其主机名将为ubuntu,并且某些人在安装过程中也将其作为计算机的名称。)
该:字符将其与您当前所在目录的名称分开。在这种情况下,用表示~。~是您的主目录的简写。当您不在主目录中时,应该会看到完整的目录名称。例如:
ek@Kip:~$ cd /var/log
ek@Kip:/var/log$
(完成提示各部分的含义是:对于遵循此约定的提示,将显示a $或#字符。$在这种情况下,表示它是普通用户外壳程序。#字符将表示它是root外壳程序。)
改变你的位置
为什么您的“ cd”命令不起作用。
要更改目录,请使用cd命令。
你跑了cd/。这是行不通的,因为您实际上没有运行cd命令。在Ubuntu和其他类似Unix的操作系统中(实际上,在Unix风格的shell中,如bash您正在使用的shell),命令名称被认为仅以空格或行尾结尾。
因此,与Windows中的命令提示符(其中cd\解释与相同,cd \并且cd..解释为与cd ..)不同,在bash(您在Ubuntu中使用的shell)中,cd/该命令不是有效命令。您必须使用cd /。
cd/表示“当前目录中的条目,其名称是cd并且也是目录”。无论是否存在这样的子目录,都无法将其作为命令运行,因此无论哪种方式都会出现错误(尽管所得到的错误会有所不同):
ek@Kip:~$ cd/
bash: cd/: No such file or directory
ek@Kip:~$ mkdir cd
ek@Kip:~$ cd/
bash: cd/: Is a directory
移至主目录
要转到您的主目录,请cd自己运行而不带任何参数:
cd
有些人喜欢显式命名其主目录。您可以使用其全名,或者
cd ~
但是cd,仅此一项就足够了。
上移一个目录
要将目录更改为当前目录的父目录(即包含该目录的目录),请使用:
cd ..
..表示当前目录的父目录。如果您位于根目录(/)中,则有一个例外:..仅代表/。因此cd ..,在任何地方运行时,运行都会向上移动一个目录/;当跑步时/,你会留在/。
每个目录都包含一个..条目。它们还都包含一个.引用当前目录本身的条目。虽然不是很运行cd .。您总是待在原地。
绝对路径和相对路径
如果您cd输入的内容不是以a开头的/,则它将尝试转到当前目录中的该目录。
例如,如果您跑了
cd var/log
然后它将尝试进入var您当前所在的子目录,并进入该log子目录。除非两者同时存在,否则在这些地方,该cd命令将失败(并且您将保留在原来的位置)。
如果要转到根目录的log子目录的var子目录,请运行以下命令:
cd /var/log
只有当你目前在/为cd var/log等同于cd /var/log。
开头的路径/是绝对的。解决方法不取决于您当前所在的位置。
路径~也是绝对的,因为(基本上)是的简写$HOME。HOME是一个环境变量,该表达式$HOME扩展为当前用户主目录的完整绝对路径。
~符号也可以用来表示另一个用户的主目录。如果编写,则表示的主目录。~usernameusername
回到你以前的地方
当前所在的目录存储在PWD环境变量中。您所在的最后一个目录存储在OLDPWD环境变量中。您可以OLDPWD使用与查看任何环境变量相同的方式查看:
echo $OLDPWD
由于此信息已存储,cd因此能够以一种特殊,快速和简便的方式返回到以前的位置。正如pst007x所说,要转到您所在的最后一个目录,请运行:
cd -
如果您在该shell中没有以前的目录,则OLDPWD不会设置环境变量,并且尝试运行cd -将导致错误(您将留在原处):
ek@Kip:~$ cd -
bash: cd: OLDPWD not set
改变你像老板的位置
pushd和popd:目录堆栈
想象一堆目录名。通过一个栈,我的意思是一些地方,当你添加的东西它会在顶部,而你只能一次删除一件事,你删除的东西永远是目前什么是顶部。
您可以通过运行以下命令将任何目录压入dir堆栈:
pushd dir
如果要将当前目录推送到堆栈的顶部,可以使用.(如上所述,该目录始终代表当前目录):
pushd .
然后,您可以开展业务,并根据需要更改目录。当您想返回使用推入堆栈的最后一个目录时pushd,运行:
popd
这将转到该目录,并且还将其弹出堆栈。现在,堆栈缩短了一个目录。如果那是堆栈上的唯一目录,则堆栈现在为空。
您可以拥有一个大于1的堆栈。也就是说,您可以使用单独的pushd命令将多个目录压入堆栈。每个后续popd命令将转到(然后弹出,即从堆栈中删除)尚未弹出的最新推送目录。
这是一个例子:
ek@Kip:~$ cd /etc/apt/sources.list.d
ek@Kip:/etc/apt/sources.list.d$ pushd .
/etc/apt/sources.list.d /etc/apt/sources.list.d
ek@Kip:/etc/apt/sources.list.d$ pushd /home/ek
~ /etc/apt/sources.list.d /etc/apt/sources.list.d
ek@Kip:~$ cd /var/log/apt
ek@Kip:/var/log/apt$ pushd .
/var/log/apt /var/log/apt /etc/apt/sources.list.d /etc/apt/sources.list.d
ek@Kip:/var/log/apt$ cd
ek@Kip:~$ popd
/var/log/apt /etc/apt/sources.list.d /etc/apt/sources.list.d
ek@Kip:/var/log/apt$ popd
/etc/apt/sources.list.d /etc/apt/sources.list.d
ek@Kip:/etc/apt/sources.list.d$ cd /
ek@Kip:/$ pushd usr
/usr / /etc/apt/sources.list.d
ek@Kip:/usr$ cd
ek@Kip:~$ popd
/ /etc/apt/sources.list.d
ek@Kip:/$ popd
/etc/apt/sources.list.d
ek@Kip:/etc/apt/sources.list.d$ popd
bash: popd: directory stack empty
ek@Kip:/etc/apt/sources.list.d$
pushd并且popd使用频率比少cd。它们还有其他甚至更高级的用途。运行help pushd并help popd获取详细信息。
了解更多信息并访问文档
cd并pwd具有更高级的用途。要了解它们,请运行help cd和man pwd。
help用于shell内置。man适用于独立命令-作为独立进程运行并作为独立可执行文件存在的命令。该type命令显示命令是否是内置的Shell,如果不是,则显示其运行程序所在的位置。例如,您可以运行type help,type type或type man。