如何更改终端中的目录,并知道我在哪个目录中?

use*_*713 16 command-line

我正在按照@Ubuntu 社区帮助的指示进行操作;然而,我仍然对一些事情感到困惑。我研究了它并找到了这篇文章:使用终端更改目录,但它在我之上,我仍然不确定如何去做。我是新人,需要一些额外的指导,所以坚持我!;-) 以下是我终端的脚本:

christy@ubuntu:~$ ls
Desktop    examples.desktop     install-tl-unx.tar.gz  Pictures  Templates
Documents  install-pkgs.log     libnautilus-gksu.so    Projects  Videos
Documents  install-pkgs.log     libnautilus-gksu.so    Projects  Videos
christy@ubuntu:~$ cd/
bash: cd/: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我如何知道哪个目录中有什么以及如何导航该目录。我知道我必须遗漏一些简单的东西。

con*_*use 20

在您的会话中ls显示当前目录的内容(但不是文件名中以点开头的隐藏文件)。您可以通过键入 导航到另一个目录cd dirname。在这里,您必须将“dirname”替换为要更改为的目录名称。通常,您以您的主目录作为当前工作目录开始。在你的情况下,这是最有可能的/home/christy。如果ls向您显示一个名为“Template”的目录,您可以通过键入(注意空格)命令将其更改为“Template”(=使其成为当前工作目录):

cd Templates
Run Code Online (Sandbox Code Playgroud)

如果您当前的目录中不存在该名称的目录,您会将当前工作目录更改为“模板”或打印“没有这样的文件或目录”。键入pwd将始终为您提供当前工作目录的完整补丁,包括父目录。

您可以为每个命令提供可选参数。对于cd字符串“模板”就是这样一个可选参数。ls -a例如,如果您键入,该ls命令也会打印出隐藏文件。或者,ls Templates它将打印 Tempaltes 目录的内容,而不是您当前工作目录的内容。参数必须与命令名称以及彼此之间至少用一个空格分隔。两者之间缺少空格是您的命令不起作用的原因。

由于空格字符具有特殊含义,如果它是参数的一部分,则需要引用或转义它。因此,例如,如果您想将当前工作目录更改为“源文件”,则需要键入以下命令之一:

cd Source\ Files
cd "Source Files"
Run Code Online (Sandbox Code Playgroud)

上一行被“转义”而下一行被“引用”。

如果您想了解更多,更好的指南可能是:Linux 简介( pdf ) ( html )


编辑

好的,抱歉,我没有在那里看到您的链接。你的帖子有点误导,现在我想我明白了:

因此,您希望从您发布的“入门”指南中链接的源存档安装 tex-live 。为此,您必须首先删除任何预先存在的 tex-live 安装。你通过打开一个终端来做到这一点:

christy@ubuntu:~$ pwd 
/home/christy # <---- This is the directory you are working in
christy@ubuntu:~$ sudo apt-get remove texlive-*
[sudo] password for christy: 
Run Code Online (Sandbox Code Playgroud)

此时你必须输入你的密码,并会收到一些无聊的消息,我将在此处省略。然后,您必须下载名为的存档install-tl-unx.tar.gz(您已经这样做了,不必再次下载,但我仍会向您展示如何执行此操作,以防万一):

christy@ubuntu:~$ wget http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz

--2012-07-09 15:08:23--  http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
Resolving mirror.ctan.org... 80.237.159.15
Connecting to mirror.ctan.org|80.237.159.15|:80... connected.
HTTP request sent, awaiting response... 302 Found
# ... some more stuff like this ...
Saving to: `install-tl-unx.tar.gz'

100%[=====================================>] 2,530,831   --.-K/s   in 0.1s    

2012-07-09 15:08:23 (17.3 MB/s) - `install-tl-unx.tar.gz' saved [2530831/2530831]
Run Code Online (Sandbox Code Playgroud)

现在您已经下载了存档,您可以解压缩它

christy@ubuntu:~$ tar xvf install-tl-unx.tar.gz
install-tl-20120701/
install-tl-20120701/readme-txt.dir/
install-tl-20120701/readme-txt.dir/README.RU-cp1251
# ... bla bla skipping over some more messages like this ...
install-tl-20120701/readme-html.dir/readme.sr.html
install-tl-20120701/readme-html.dir/readme.ru.html
install-tl-20120701/readme-html.dir/readme.de.html
Run Code Online (Sandbox Code Playgroud)

现在您已经解压了存档,您可以切换到解压后的目录。

christy@ubunut:~$ ls | grep install-tl-  # <---- with this line you find out the number
install-tl-20120701                      # <---- in this case "20120701"
install-tl-unx.tar.gz                    # <---- if just this is present with no number you did something wrong
christy@ubuntu:~$ cd install-tl-20120701 # <---- enter this number here
christy@ubuntu:~$ pwd
/home/christy/install-tl-20120701/       # <--- this is your new working directory
Run Code Online (Sandbox Code Playgroud)

数字“20120701”是一个时间戳,说明您拥有哪个版本的 tex-live。这个数字对你来说可能不同,但命令ls | grep install-t1-会告诉你改用什么。如果所有这些都有效,您可以从这里运行安装脚本:

christy@ubuntu:~$ sudo ./install-tl
[sudo] password for jan: 
Loading http://ftp.univie.ac.at/packages/tex/systems/texlive/tlnet/tlpkg/texlive.tlpdb
Installing TeX Live 2012 from: http://ftp.univie.ac.at/packages/tex/systems/texlive/tlnet
Platform: x86_64-linux => 'x86_64 with GNU/Linux'
# ... bla bla and so on bla ...
Actions:
  <I> start installation to hard disk
  <H> help
  <Q> quit

Enter command: I
# ... and so on ...
Run Code Online (Sandbox Code Playgroud)

从这里开始,只需回答安装脚本向您提出的问题,您应该没问题。


Eli*_*gan 10

执行摘要 (TL;DR)

  • 使用pwd要知道你在哪里(或之间的外观:$您的提示)。
  • 用于cd在别处更改目录。与 Windows 不同,后面cd必须始终跟一个空格;命令喜欢cd/cd..不工作,而是cd /cd ..意志。

知道你在哪里

方式一:运行pwd

您当前所在的目录是特定于 shell 的(更一般地说,是特定于应用程序的)。您可以在一个目录中运行一个 shell,而在另一个目录中运行另一个 shell。

要知道您当前所在的目录,请运行:

pwd
Run Code Online (Sandbox Code Playgroud)

例如(从我现在碰巧在我的机器上打开的外壳):

ek@Kip:~$ pwd
/home/ek
Run Code Online (Sandbox Code Playgroud)

这告诉我我在目录中/home/ek/home是(有点令人困惑)包含人类用户主目录的目录(它本身不是任何用户的主目录)。人类用户username有主目录。/home/username

root用户没有在主目录/home。相反,root的主目录是/root. 这不要与根目录混淆,即/.

方式 2:检查您的提示。

提示的默认配置是它告诉您当前所在的目录。提示是用于通知您 shell 已准备好接受命令的文本。

在您在问题中向我们展示的示例中,您的提示是:

christy@ubuntu:~$
Run Code Online (Sandbox Code Playgroud)

christy是你的用户名。该@字符将它与ubuntu计算机的主机名分开。(如果您运行的是 Live CD,则其主机名将是ubuntu,并且有些人在安装过程中也会选择该名称作为他们的计算机名称。)

:字符将它与您当前所在目录的名称分开在这种情况下,由~. ~是您的主目录的简写。当您不在主目录中时,您应该会看到完整的目录名称。例如:

ek@Kip:~$ cd /var/log
ek@Kip:/var/log$
Run Code Online (Sandbox Code Playgroud)

(完成提示的每个部分的含义:对于遵循此约定的提示,出现a$#字符。$在本例中,表示它是普通用户 shell。#字符表示它是一个rootshell。)

改变你的位置

为什么您的“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
Run Code Online (Sandbox Code Playgroud)

移动到您的主目录

要转到您的主目录,请在cd不带任何参数的情况下自行运行:

cd
Run Code Online (Sandbox Code Playgroud)

有些人更喜欢明确命名他们的主目录。你可以使用它的全名,或者

cd ~
Run Code Online (Sandbox Code Playgroud)

cd本身就足够了。

上移一个目录

要将目录更改为当前目录的父目录(即包含它的目录),请使用:

cd ..
Run Code Online (Sandbox Code Playgroud)

..代表当前目录的父目录。如果您在根目录 ( /) 中,则有一个例外:..仅代表/. 因此,cd ..当在任何地方运行时,运行会向上移动一个目录/;当运行时/,你留在/

每个目录都包含一个..条目。它们也都包含一个.指向当前目录本身的条目。cd .不过也不太好跑。你总是呆在原地。

绝对路径和相对路径

如果您cd访问的内容以 a 开头/,则它会尝试转到当前目录中的该目录

例如,如果你跑了

cd var/log
Run Code Online (Sandbox Code Playgroud)

然后它会尝试进入var您当前所在位置的子目录,然后进入该log子目录。除非两者都存在,并且在那些地方,该cd命令将失败(并且您将保持原来的状态)。

如果要转到根目录log子目录的var子目录,请改为运行:

cd /var/log
Run Code Online (Sandbox Code Playgroud)

只有当你目前在/cd var/log等同于cd /var/log

以 开头的路径/是绝对路径。解决它的方式并不取决于您当前所在的位置。

路径~也是绝对路径,因为它(本质上)是$HOME. HOME是一个环境变量,表达式$HOME扩展为当前用户主目录的完整绝对路径。

~符号也可用于表示另一个用户的主目录。如果你写,这代表的主目录。~usernameusername

回到原来的地方

您当前所在的目录存储在PWD环境变量中。您所在的最后一个目录存储在OLDPWD环境变量中。您可以OLDPWD像查看任何环境变量一样查看:

echo $OLDPWD
Run Code Online (Sandbox Code Playgroud)

因为这些信息被存储,cd所以能够有一种特殊的、快速和简单的方式回到你以前的位置。正如pst007x 所说,要转到您所在的最后一个目录,请运行:

cd -
Run Code Online (Sandbox Code Playgroud)

如果您在该 shell中从未有任何更早的目录,则OLDPWD环境变量将不会被设置,并且尝试运行cd -将导致错误(并且您将留在原处):

ek@Kip:~$ cd -
bash: cd: OLDPWD not set
Run Code Online (Sandbox Code Playgroud)

像老板一样改变你的位置

pushdpopd:目录堆栈

想象一下一堆目录名称。通过堆栈,我的意思是当你添加一些东西时它会放在顶部,并且你一次只能删除一个东西,并且你删除的东西总是当前在顶部的东西。

您可以通过运行以下命令任何目录dir推入堆栈:

pushd dir
Run Code Online (Sandbox Code Playgroud)

如果要将当前目录压入栈顶,可以使用.(如上文所述,始终代表当前目录):

pushd .
Run Code Online (Sandbox Code Playgroud)

然后您就可以开展您的业务,随心所欲地更改目录。当您想返回到使用 压入堆栈的最后一个目录时pushd,请运行:

popd
Run Code Online (Sandbox Code Playgroud)

这将转到该目录,并将其从堆栈中弹出。现在堆栈缩短了一个目录。如果那是堆栈上唯一的目录,那么堆栈现在是空的。

您可以拥有大于 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$
Run Code Online (Sandbox Code Playgroud)

pushd并且popd使用频率远低于cd。它们还有其他更高级的用途。运行help pushdhelp popd了解详情。

了解更多信息并访问文档

cd并且pwd还有更高级的用途。要了解它们,请运行help cdman pwd

help用于shell 内置函数。man用于独立命令——作为独立进程运行并作为独立可执行文件存在的命令。该type命令显示命令是否为内置 shell,如果不是,则显示它运行的程序所在的位置。例如,您可以运行type helptype typetype man


pst*_*07x 5

例如:

cd Desktop/ 如果您在主目录中,则转到桌面目录。

cd - 返回上一个目录。

cd / 带你到根目录。

cd ~/Desktop 无论您身在何处,都会带您进入桌面目录。