我正在按照@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
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
. 这不要与根目录混淆,即/
.
提示的默认配置是它告诉您当前所在的目录。提示是用于通知您 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。#
字符表示它是一个root
shell。)
要更改目录,请使用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
扩展为当前用户主目录的完整绝对路径。
~
符号也可用于表示另一个用户的主目录。如果你写,这代表的主目录。~username
username
您当前所在的目录存储在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)
pushd
和popd
:目录堆栈想象一下一堆目录名称。通过堆栈,我的意思是当你添加一些东西时它会放在顶部,并且你一次只能删除一个东西,并且你删除的东西总是当前在顶部的东西。
您可以通过运行以下命令将任何目录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 pushd
并help popd
了解详情。
cd
并且pwd
还有更高级的用途。要了解它们,请运行help cd
和man pwd
。
help
用于shell 内置函数。man
用于独立命令——作为独立进程运行并作为独立可执行文件存在的命令。该type
命令显示命令是否为内置 shell,如果不是,则显示它运行的程序所在的位置。例如,您可以运行type help
,type type
或type man
。
例如:
cd Desktop/
如果您在主目录中,则转到桌面目录。
cd -
返回上一个目录。
cd /
带你到根目录。
cd ~/Desktop
无论您身在何处,都会带您进入桌面目录。