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


15

我遵循@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

我如何知道哪个目录以及如何浏览该目录。我知道我一定会遗漏一些简单的东西。


4
您总是需要在命令后加上一个空格,例如“ cd”。如果输入“ cd /”,您的命令将起作用,并将移至根目录。
马蒂·弗里德

太好了,马蒂!非常感谢您的协助。;-)
user74713

Answers:


19

在您的会话中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


编辑

好的,很抱歉,我在此处没有看到您的链接。您的帖子有点误导,现在我想我知道了:

因此,您想从发布的“入门”指南中链接的源归档文件中安装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-会告诉您使用什么。如果所有这些都起作用,则可以从此处运行安装脚本:

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 ...

从这里开始,只需回答安装脚本询问的问题,就可以了。


// @ con-f-use:好信息!现在,参考我原始帖子中的终端脚本:install-tl-unx.tar.gz位于哪个目录中,如何运行它?我熟悉安装命令,但是我想我需要安装软件包吗?解压tarball的命令是@ ubuntu-manual.org / getinvolved / editors。如果您能指出正确的方向……非常感谢。您一直非常了解情况。
user74713 '07年

没问题。我不确定您的最终目标是什么,因此在没有更多信息的情况下很难帮助您。显然,您正在尝试从档案“ install-tl-unx.tar.gz”安装TeX-Live。为此,您必须首先解压缩归档文件,然后再运行安装脚本。我将在上面编辑我的帖子,并提供一些说明以尽快完成该操作。
con-f-use

10

执行摘要(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

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

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

~符号也可以用来表示另一个用户的主目录。如果编写,则表示的主目录。~usernameusername

回到你以前的地方

当前所在的目录存储在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$

pushd并且popd使用频率比少cd。它们还有其他甚至更高级的用途。运行help pushdhelp popd获取详细信息。

了解更多信息并访问文档

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

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


5

例如:

cd Desktop/ 如果您位于主目录中,请转到桌面目录。

cd - 返回上一个目录。

cd / 带您到根目录。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.