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

我按照指示@ 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 

如何判断目录中的内容以及如何导航目录。 我知道我必须遗漏一些简单的事情。

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

 cd Templates 

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

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

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

 cd Source\ Files cd "Source Files" 

上线被“逃逸”而下线被“引用”。

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


编辑

好的,对不起,我没有看到你的链接。 你的post有点误导,现在我觉得我找到了你:

因此,您希望从您发布的“入门”指南中链接的源存档安装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: 

此时你必须输入密码,并会收到一些无聊的消息,我将在这里省略。 然后你将不得不下载名为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] 

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

 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 

现在您已经解压缩了存档,您可以将其更改为已解压缩的目录。

 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 

数字“20120701”是一个时间戳,表示您拥有的tex-live版本。 这个数字可能与您不同,但命令为ls | grep install-t1- 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:  start installation to hard disk  help  quit Enter command: I # ... and so on ... 

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

执行摘要(TL; DR)

  • 使用pwd知道你的位置(或者在你的提示符中查看:$ )。
  • 使用cd在其他地方更改目录。 与Windows不同, cd必须始终后跟空格; 像cd/cd..这样的命令不起作用,但cd /cd ..会。

知道你在哪里

方式1:运行pwd

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

要了解您当前所在的目录,请运行:

 pwd 

例如(在我的机器上,我碰巧现在打开了一个shell):

 ek@Kip:~$ pwd /home/ek 

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

root用户在/home中没有主目录。 相反, root的主目录是/root 。 这不应与根目录混淆,后者是/

方式2:检查你的提示。

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

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

 christy@ubuntu:~$ 

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

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

 ek@Kip:~$ cd /var/log ek@Kip:/var/log$ 

(要完成提示的每个部分的含义:对于遵循此约定的提示,要么出现$#字符。 $ ,就像在这种情况下,意味着它是普通的用户shell。 #字符意味着它是一个root shell。)

改变你的位置

为什么你的“cd”命令不起作用。

要更改目录,请使用cd命令。

你跑cd/ 。 这不起作用,因为您实际上没有运行cd命令。 在Ubuntu和其他类Unix操作系统中(实际上,在像bash这样的Unix风格的shell中,你正在使用的shell),命令的名称被认为只在空格或行尾结束。

所以不同于Windows中的命令提示符(其中cd\被解释为与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 .并不是很好cd . 虽然。 你总是待在原地。

绝对和相对路径

如果你cd/开头的东西,那么它会尝试转到当前目录中的那个目录

例如,如果你跑了

 cd var/log 

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

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

 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 

改变自己喜欢的位置

pushdpopd :目录堆栈

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

您可以通过运行以下命令任何目录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$ 

pushdpopd的使用频率远低于cd 。 它们还具有其他更高级的用途。 运行help pushdhelp popd获取详细信息。

了解更多信息并访问文档

cdpwd也有更高级的用途。 要了解它们,请运行help cdman pwd

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

例如:

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

cd -返回上一个目录。

cd /带你到根目录。

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