认识终端
终端是一个程序,可让您通过输入命令与计算机对话。无论您使用何种操作系统(Windows、MacOS、Linux),终端都将是 CS 61A 的必备工具。
开始打开一个终端。终端可让您向计算机发出命令。试试这个命令:
echo "Hello world"
您的终端将在屏幕上回显“Hello world”。echo
命令只是告诉您的终端重复您输入的单词。目前还不太令人印象深刻,但事实证明终端可以做更多的事情!
文件系统
在 Windows 或 MacOS 上,您可能熟悉文件夹和文件,通过拖放图标与它们进行交互。今天,我们将摆脱图标,只使用终端来管理我们的文件和文件夹!
使用终端,您可以执行图形文件系统可以做的所有操作—甚至更多!
目录
我们将使用的第一个命令是ls
(字母l
和字母 s
)。尝试在终端中输入它!
user@computer:~$ ls
Desktop/ Documents/ Downloads/ ...
取决您使用的计算机,您在键入
ls
后看到的输出可能会有所不同。
ls
列出当前目录下所有的文件和文件夹。目录是文件夹的另一个名字(如Documents
文件夹)。
当您打开终端时,您将从主目录开始。请注意,您的提示符(例如user@computer:~$
)中有一个波浪号~
。您的提示符有助于告诉您当前的目录—在本例中,您的当前目录是~
,它代表主目录。
创建新目录
我们的下一个命令称为mkdir
。尝试在终端中输入以下命令:
mkdir example
mkdir
命令创建一个新目录(即创建一个新的文件夹)。请注意,与ls
不同,我们不是只键入mkdir
并按 Enter。我们还需要为命令指定一个参数(在本例中参数是example
)。对于mkdir
,参数是我们要创建的目录的名称。
某些命令总是需要参数才能工作,例如
mkdir
. 其他命令可以在不提供任何参数的情况下正常工作,例如ls
.
现在我们已经创建了我们的example
目录,让我们确保它确实存在。使用ls
命令来验证是否example
显示在我们的目录列表中。
移动到其他目录
要移动到另一个目录,我们使用cd
命令。尝试在终端中输入以下命令:
cd example
cd
命令将改变目录—换句话说,它移动到你指定的文件夹。在上面的例子中,我们选择移动到example
目录中。
请注意,您的提示符中的~
变成了~/example
. 同样,提示符将告诉您当前目录是什么。在本例中,我们位于主目录 (~
)内的example
目录中。
如果您现在使用ls
命令,您会注意到没有显示任何输出。这是有道理的,因为我们刚刚创建了example
目录,还没有向其中添加任何文件。我们稍后会回到这个话题。
现在,让我们回到我们的主目录。有几种方法可以做到这一点:
- 输入
cd ..
(两个点)。..
的意思是“父目录”。在这种情况下,example
的父目录恰好是我们的主目录,因此我们可以使用cd ..
到达上一级目录。 - 输入
cd ~
(波浪号)。请记住,~
意味着主目录,因此无论您当前在哪里,此命令都会让您的终端切换到主目录。 - 输入
cd
(即不带参数的cd
命令)。在 UNIX 中,只键入cd
是输入cd ~
的快捷方式。
删除目录
我们现在知道了如何查看、创建和进入目录。我们最后一个涉及目录的命令是使用rm
删除它们。
首先,让我们创建一个示例目录:
mkdir tmp
如果您使用ls
命令,您现在应该看到tmp
作为目录被列出。
接下来,让我们删除tmp
目录:
rm -r tmp
rm
命令将从您的文件系统中删除文件和目录。rm
命令本身(即没有-r
参数)仅删除文件。然而,由于我们正在删除目录,我们需要指定-r
到递归删除tmp
目录和tmp
可能包含的任何文件(该过程被称为“递归”,因为,为了删除tmp
,我们必须删除tmp
里面的一切)。
如您所见,某些命令需要参数,例如
mkdir
。其他命令不需要任何参数即可工作,例如ls
。此外,大多数命令也可以被赋予标志,就像rm
的-r
。标志是修改命令行为的方法—例如,rm
本身只删除文件;使用-r
告诉rm
删除目录。
目录总结
到目前为止,我们已经学习了如何对目录(文件夹)执行以下操作:
ls
:列出当前目录内的文件和文件夹mkdir
:创建新目录cd
:改变目录rm -r
:删除指定的目录
文件
如果目录不包含任何文件,则目录不是很有用。在本节中,我们将介绍更多允许您与文件交互的命令。
对于本节,让我们从主目录开始。回想一下,我们可以通过简单地在终端输入
cd
做到这一点。您的提示符现在应该显示~
.
创建文件
有许多不同的方法来创建文件。对于本课程,您通常会使用文本编辑器直接编写文件,就像在 Microsoft Word 中编辑 Word 文档一样。
现在,我们直接下载一个名为unix.txt
的文件,可在此处找到。在本课程中,您将通过下载文件来开始大多作业和项目。
学校计算机上的默认下载位置Downloads
目录。让我们使用我们的cd
命令切换到该目录。
cd ~/Downloads
您可以使用ls
命令来验证unix.txt
是否在此目录中。
移动文件
在 Windows 和 Mac 上,您与文件的大部分交互很可能是将它们从一个文件夹拖到另一个文件夹。UNIX 提供了一种使用mv
命令移动文件的方法。
请记住,我们创建了一个名为example
的目录. 让我们将unix.txt
移入example
:
mv unix.txt ~/example
mv
命令移动一个文件/目录到另一个文件/目录里。在这里,我们将unix.txt
文件移动到主目录内的example
目录中。
要验证mv
命令是否有效,请执行以下操作:
- 使用
ls
检查unix.txt
不在我们的当前目录中(这是Downloads
目录)。 - 进入
example
目录。您的提示符现在应该显示~/example
. - 使用
ls
验证unix.txt
在example
中。
读取文件:快速简单的方法
文件很有用,因为它们包含信息。让我们看看unix.txt
包含什么 。输入以下命令:
cat unix.txt
这将打印出我们迄今为止看到的所有有用的 UNIX 命令的清单。cat
命令将文件的内容打印到屏幕上。这是验证文件是否正确或读取文件内容的一种快速方法。例如,如果您忘记了本文中的任何 UNIX 命令,您可以赶快使用cat unix.txt
命令阅读它们。
重命名文件
要在 Windows 或 MacOS 上重命名文件,您可以单击文件名并输入新名称。
一开始用终端重命名文件可能有点令人困惑。在终端中输入以下命令(从example
目录中)
mv unix.txt unix_commands.txt
使用ls
,您会看到unix.txt
消失了—取而代之的是一个名为unix_commands.txt
的文件。此外,键入cat unix_commands.txt
将打印出相同的 UNIX 命令清单。
看来我们使用mv
命令将unix.txt
重命名为unix_commands.txt
!以下是如何思考这件事:
mv
将一个文件/目录的内容移动到另一个文件/目录中。在上一节中,我们将一个文件移动到一个目录中。- 这一次,我们将一个文件 (
unix.txt
)的内容移动到另一个文件 (unix_commands.txt
) 中。虽然我们在技术上是移动文件内容,但这实际上与重命名文件相同!
如果您是第一次看到它,这可能会有点令人困惑,因此请确保在进入下一节之前理解它。
注意:假设您已经有两个文件
alice.txt
和bob.txt
, 并且您发出命令:mv alice.txt bob.txt
这将用
alice.txt
!的内容覆盖bob.txt
旧的内容!UNIX 不会在覆盖时警告您,所以在使用mv
命令时要小心!
复制文件
有时,拥有一个文件的多个副本很有用。尝试以下命令:
cp unix_commands.txt new_file.txt
cp
命令复制一个文件的内容到另一个文件。使用ls
,您将看到example
目录现在包含两个文件,unix_commands.txt
和new_file.txt
. 使用cat
将证明两个文件具有相同的内容。
假设我们还想将unix_commands.txt
文件复制到我们的主目录。这里有一种方法:
-
回到主目录。(挑战:尝试在不查找命令的情况下执行此操作!)
-
接下来,使用以下命令:
cp example/unix_commands.txt .
不要忘记最后的点!
第一个参数(example/unix_commands.txt
)告诉终端在example
目录中查找unix_commands.txt
。
第二个参数.
告诉终端复制unix_commands.txt
到目录.
。正如两个点 ( ..
) 代表父目录一样,一个点 ( .
) 代表当前目录(我们现在所在的目录)。
现在我们位于主目录中,我们可以使用ls
来验证是否存在unix_commands.txt
的副本:
user@computer:~$ lsDesktop/ ... unix_commands.txt ...
使用cat unix_commands.txt
将显示相同的 UNIX 命令表单。
回顾:我们已经看到了两个特殊的目录:两个点
..
代表父目录(上一层目录),而一个点.
代表当前目录。您可以将这些特殊表达式用于任何处理目录的命令。例如,您可以使用以下命令将文件移动到当前目录mv some_file .
删除文件
回想一下我们之前介绍的rm
命令 。我们最初使用-r
标志来删除目录。现在我们将使用不带-r
的rm
删除文件。在你的终端中输入:
rm unix_commands.txt
这将删除我们当前目录(即主目录)中unix_commands.txt
的副本。一个果断的ls
会显示unix_commands.txt
已经消失了。
警告:与 Windows 和 MacOS 不同,没有友好的回收站或垃圾箱来从中恢复已删除的文件。在 UNIX 中,当您
rm
一个文件时,它就消失了。你不能“撤消”rm
,所以在使用rm
命令之前要三思而后行!。
文件总结
在本节中,我们学习了操作文件的基础知识:
cat
: 在屏幕上显示文件的内容mv
:移动文件/目录到另一个文件/目录。将一个文件移动到另一个文件时,我们实际上是在重命名文件!cp
:复制文件到另一个文件/目录。rm
:删除文件。使用-r
标志时,rm
将删除目录。
此外,我们了解了两个特殊目录:(..
父目录)和.
(当前目录)。
获得帮助
如果您遇到不熟悉的终端命令,可以使用名为man
的命令:
man ls
man
命令将显示另一个命令的手册页(参考页)。在上面的例子中,我们要求终端显示ls
命令的手册页。当您浏览手册页时,您会注意到ls
可以做的不仅仅是列出目录的内容!man
是了解新命令甚至是您认为已经知道的命令的更多信息的好方法。
注意:有些学校的计算机没有安装
man
命令,因此您可能会收到错误消息。没关系—如果man
失败,谷歌就是你的朋友!
总结
虽然 CS 61A 中的主要编程语言是 Python,但了解如何浏览 UNIX 文件系统以管理您的课堂作业很重要。您还将从终端与 Python 解释器进行交互,无论您使用的是学校计算机还是家用电脑。
另外,如果你在 61A 之后继续学习计算机科学,你肯定会更多地与 UNIX 和终端进行交互。
附录
术语
-
终端:允许用户输入命令来控制计算机的程序
-
提示符:每次终端准备接收新命令时显示的某些信息。例如,您的提示符可能如下所示:
user@computer~$
通常,提示符会告诉你当前的目录(在上面的例子中,当前目录是
~
) -
目录:与文件夹是同一个东西。目录可以包含文件以及其他目录
-
父目录:当前目录上方紧接着的目录(即上一级目录)。这在 UNIX 中表示为两个点,
..
-
当前目录:我们当前正在查看的目录。这在 UNIX 中表示为一个点,
.
-
主目录:包含所有文件和子目录的顶级目录。这在 UNIX 中表示为波浪号,
~
.
UNIX 命令
- 目录:
ls
:列出当前目录下的文件和文件夹mkdir
:创建一个新的目录。例如,mkdir example
创建一个名为example
的目录cd
:改变目录。例如,cd example
将目录更改为example
rm -r
:递归删除指定的目录。例如,rm -r example
删除example
目录以及其中的所有文件和子目录。
- 文件:
cat
:在屏幕上显示文件的内容。例如cat unix.txt
显示unix.txt
文件的内容mv
:移动一个文件/目录到另一个文件/目录。例如,mv file1 file2
将file1
的内容移动到名为file2
的文件(可能为新建的)。将一个文件移动到另一个文件时,我们实际上是在重命名文件!cp
:复制一个文件到另一个文件/目录。例如,cp file1 file2
将file1
的内容复制到名为file2
的文件rm
:删除文件。例如,rm file1
删除名为file1
的文件
- 其他:
echo
: 在屏幕上显示文字man
:显示一个指定的命令的手册页
留言