执行摘要(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
扩展为当前用户主目录的完整绝对路径。
~
符号也可以用来表示另一个用户的主目录。如果编写,则表示的主目录。~username
username
回到你以前的地方
当前所在的目录存储在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
。