你可能和我一样——我用了 20 年的电脑,从来没有碰过命令提示符。我对此一无所知,我认为这是那些高级用户才知道的事情。当我必须使用一些基本命令行的情况时,我发现它是多么有用和容易的。
学习使用命令行将给您带来更多的乐趣——它在 Web 开发和编程中无疑是必不可少的,但是对于普通用户在日常工作中也会同样受益。按照本教程进行操作,您将看到它的易用性和强大的功能。
如果您从未使用过命令行,那么本文将对您非常有帮助。如果您对命令行有基本或中级知识,您可能会学到一些新的提示和技巧。
Apple macOS 和大多数 Linux 服务器使用几乎所有完全相同的命令,因此本教程适用于两者。即使您使用的是 Windows PC,这对学习也很有用,因为您的网站可能托管在 Linux 服务器上。
前提要求- 这篇文章没有前提要求——只要你有基本的计算机知识,你就可以学习
- 了解什么是命令行界面以及它与您的计算机的关系
- 学习一些与命令行相关的基本术语
- 学习最常见、最有用的命令
- 显示当前目录和目录内容
- 在目录之间移动
- 创建文件和目录
- 将文本写入文件
- 查看文件的内容
- 删除文件和目录
- 复制和粘贴文件和目录
- 移动/剪切文件和目录
- 运行多个命令
- 更改权限
- 以管理员身份运行
- 连接到另一台计算机或服务器
- 一些更有用的命令
- 使用基本的文本编辑器
这是要了解的最重要的内容,当我最终了解它时,它完全让我大吃一惊。
Windows、macOS——无论你使用什么操作系统——只是你计算机的视觉表现。这称为图形用户界面 (GUI)。当去掉文件资源管理器、桌面、图标和所有其他图形,你就剩下命令行了。您只能键入命令符,而不是拖放、指向和单击,这就是界面和命令行的最大区别。
我真的想重申这一点,您可以通过命令行访问您的整个计算机或执行所有操作。
在 Mac 上,如果我打开 Finder,可以看到一个名称为taniarascia的文件夹,这是我的主文件夹。
我可以通过网络浏览器访问相同的文件。
如果我打开 Google Chrome 并输入/Users/taniarascia,会看到显示同一个地方。
命令行界面也是如此。我将通过打开 Spotlight搜索(command spacebar) 并输入Terminal ,打开Terminal.app。
就像我在 Google Chrome 和 Finder 中“进入”文件夹一样,我现在通过命令提示符/终端“进入”同一个文件夹。我将在终端中输入pwd命令,然后按 Enter 回车键来证明这一点。pwd 命令的意思是当前的工作目录,并且会在任何时候准确地告诉我 “当前在那个目录”。
这是我输入的内容。
$ pwd
这是输出(打印)到屏幕上的内容。
NolBook:~ taniarascia$ pwd
/Users/taniarascia
屏幕显示的 /Users/taniarascia 就是我当前的工作目录。但是我怎么知道这个目录下有什么内容?我如何与这些文件和目录进行交互?这时我将使用ls命令,它将在终端显示当前目录下的所有内容列表。
$ ls
这是输出(打印)到屏幕上的内容。
NolBook:~ taniarascia$ ls
Desktop Documents Library Music Private Sites
Dev Downloads Movies Pictures Public Songs
现在我可以看到与我在 Finder 和 Chrome/网络浏览器中相同的内容了!
现在您应该明白,您从命令行访问的文件和文件夹与从计算机上的任何界面程序访问的文件和文件夹相同。如果还不太理解它,请继续进行,我保证很快就会理解命令行。如果您认为这非常简单,那说明您非常聪明。
在编程中,print 意思是“在屏幕上显示”,不要与“发送到打印机”混淆。
理解命令行语法当我打开终端时,我看到了这个。
NolBook:~ taniarascia$
您可能会看到其他不一样内容,但~和$仍将保留。以下是具体的说明:
- 计算机名称(NolBook) - 这只是我给计算机起的名称。
- 目录(~) - 冒号后面显示您正在工作的当前目录。~代表主目录,即我的taniarascia文件夹。
- 用户名 (taniarascia) - 这可能有点令人困惑,因为我的主文件夹和用户名都是 taniarascia,但这是专门指计算机用户。
- READY ( $) - 美元符号表示提示已准备好接受您的命令。您无需键入$,它就在那里。在 Windows 计算机上,这由一个>符号表示。
终端或命令提示符是运行 Shell 的程序(命令行界面),它解释命令。
命令符我们将学习如何使用鼠标或键盘快捷键在计算机上执行许多常规操作。我们将在目录之间移动、创建文件和文件夹、删除它们、移动它们、复制和粘贴它们以及编辑文件。您也可以随时按下clear以擦除所有历史记录并拥有干净的屏幕。
到目前为止,我们已经学到了三件事。
命令 |
意义 |
描述 |
pwd |
显示工作目录 |
显示当前在那个目录 |
ls |
列出目录内容 |
查看您当前目录位置的文件列表 |
clear |
清除 |
清除终端屏幕 |
永远记得在写任何命令之前输入pwd,以确保你知道你当前在哪个目录。
默认情况下,如果你退出终端,你最终会回到你的主目录。
在目录之间移动现在,我在我的主文件夹中。如果我想移动到其他地方,我将使用cd命令 -更改目录。我将移动到music文件夹,然后检查我的位置。键入这些命令,然后在每个命令后按 enter。
$ cd music
pwd
ls
这是显示结果。
NolBook:~ taniarascia$ cd music
NolBook:music taniarascia$ pwd
/Users/taniarascia/music
NolBook:music taniarascia$ ls
Audio Music Apps GarageBand iTunes
首先,我移动到music文件夹。不管大小写,终端都会认为是一个目录,所以我可以写music或Music。如您所见,它说NolBook:music而不是NolBook:~,所以我知道我现在在不同的目录中。我确认了我当前的位置,然后列出了当前目录下的内容。
这很好,但我真的不想在Music文件夹中做任何事情。我怎么返回?在终端中,一个点(.)代表当前目录,两个点(..)代表上级目录,或者更靠近根目录。
我想回到一个目录,比如回到我的主文件夹。
$ cd ..
显示结果
NolBook:~ taniarascia$
目录和文件名中如果有空格
如果您尝试移动到有空格的目录,您可能会遇到问题。例如,在我的Music文件夹中,有一个名为Audio Music Apps的目录。但是,如果我尝试简单地输入..
$ cd Audio Music Apps
显示结果
-bash: cd: Audio: No such file or directory
终端认为我正在尝试进入Audio而不是Audio Music Apps,因为它无法识别空格。有两种方法可以解决这个问题。
- 使用双引号
$ cd "Audio Music Apps"
- 使用反斜杠\
$ cd Audio\ Music\ Apps/
命令 |
意义 |
描述 |
cd |
更改目录 |
在目录之间移动 |
您可以随时通过按 control C 来结束命令
创建文件和目录您可以从命令行创建文件和文件夹。
- 创建目录
让我们使用 mkdir 命令创建一个用于练习的名叫Shell的文件夹。
$ mkdir Shell
恭喜,您创建了一个目录!如果我输入ls,我将在主文件夹中看到我新创建的目录。我也可以通过 Finder 看到这一目录。
现在您可以通过输入cd shell 进入Shell目录。
NolBook:~ taniarascia$ cd shell
NolBook:shell taniarascia$ pwd
/Users/taniarascia/shell
2.创建文件
现在让我们创建一个文件。您可以使用touch命令执行此操作。
$ touch test.html
我的示例名称并不是很独特,因此我将其命名为test.html。当您输入此代码时,它不会输出任何表示命令成功的信息。您可以输入ls查看它,或在 Finder 中检查您已创建的 .html 文件。
您也可以同时创建多个文件。
$ touch one.txt two.txt three.txt
我们曾经使用 touch 创建一个空文件,但我们甚至可以使用 echo 快速将文本写入到一个文件。
$ echo "Hello World" > hello.txt
现在我有一个名为hello.txt的纯文本文件,其中包含的内容是 Hello World。
查看文件的内容我可以通过从 Finder 打开并查看文件内容,但我也可以通过终端使用cat命令查看内容。
$ cat hello.txt
显示结果
NolBook:shell taniarascia$ cat hello.txt
Hello World
此时,我建议您创建更多文件和目录,并在它们之间移动以便更加熟悉这些命令。
这些命令 - touch、cat和echo- 可以做得比我在这些快速示例中展示的要多得多。
命令 |
意义 |
描述 |
mkdir |
创建目录 |
创建一个新目录 |
touch |
创建文件 |
创建一个新文件 |
cat |
查看 |
查看文件的内容 |
echo "x" > |
写入 |
快速将文本写入到文件中 |
现在您会看到在测试文件夹中弄得一团糟的文件和目录,所以我们可以开始清理它了。
1.删除文件
使用rm命令删除文件。
$ rm hello.txt
请注意,这将永久删除文件 - 它不会发送到垃圾箱/回收站。
星号 ( *) 在编程中被称为通配符。我可以选择使用通配符删除某种类型的所有文件。例如,如果我将许多文件保存为 .png,我可以运行 rm *.png 批量删除整个 .png 文件。
2.删除目录
现在,假设您 mkdir goodbye 创建了一个名为goodbye的新目录,并尝试使用 rm goodbye 删除它。你会发现到如下错误。
NolBook:shell taniarascia$ rm goodbye
rm: goodbye: is a directory
此时,我们需要使用 rmdir 命令将其删除。
$ rmdir goodbye
如果要删除其中包含文件的目录,则必须运行稍微不同的命令。
$ rm -r goodbye
就像使用 touch 一样,我们可以同时删除多个文件或文件夹。
$ rm one.txt two.txt three.txt
命令 |
意义 |
描述 |
rm |
删除 |
删除文件 |
rmdir |
删除目录 |
删除目录 |
我们还可以通过命令行使用 cp 命令复制和粘贴文件。只需键入cp source(要复制的文件)和destination(要复制到的位置)。
$ cp source destination
我在我的Shell文件夹中。假设我 mkdir websites 创建了一个名为website的新目录。现在我可以将我test.html文件从/Users/taniarascia/shell 复制到 /Users/taniarascia/shell/websites.
$ cp test.html websites
这与复制和粘贴(command C)相同。
要复制整个目录,请使用该-R选项。我可以将网站目录及其所有内容复制到新目录。
$ cp -R websites websites2
您还可以在同一文件夹中复制文件。
$ cp test.html test2.html
您可以使用 mv 命令移动文件,和复制文件一样。
$ mv source destination
这类似于剪切和粘贴(command X)。
命令 |
意义 |
描述 |
cp |
复制 |
复制文件 |
cp -R |
复制目录 |
复制目录及其所有内容 |
mv |
移动 |
移动(剪切和粘贴)文件和目录 |
我们可以使用双&号 ( &&) 运算符运行多个命令。只要第一个命令成功,后面的就会运行。
$ touch newfile.txt && mv newfile.txt websites
我刚刚创建了一个新文件并将其移动到不同的目录。
更改权限当您是 Windows 或 Mac 的临时用户时,通常不会考虑文件权限,但如果您曾经在 Web 服务器上工作过,您可能对权限有所了解。您可以使用 chmod 命令更改权限。
$ chmod 644 test.html
我已授予644(由所有者读取和写入)对 test.html 的权限,这是文件的常见权限。
以管理员身份运行sudo代表超级用户执行命令。您可能会遇到您登录的当前用户没有足够的权限来执行任务的情况。sudo只要您有管理员密码,您就可以以管理员身份运行该命令。当您输入密码时,它不会显示任何星号来表示您已输入任何内容。
$ sudo chmod 775 directory
您也可以切换到管理员用户。这不是你应该经常做的事情,但知道它很有用。有时您需要以管理员身份登录才能在受限目录之间移动。
$ sudo su
现在我的终端看起来不同了——它有一个#而不是$,表示我以超级用户身份登录。
sh-3.2#
因为我真的不想以管理员身份登录,所以我可以使用 exit 命令,使我返回到我的常规用户帐户。
$ exit
如果您是 Web 开发人员或设计师,您将熟悉通过 FTP 或 SFTP 连接到 Web 服务器。您可以使用 ssh 通过命令行实现安全连接。
您使用与通过 FileZilla 或 Transmit 等 GUI 进行连接时相同的信息连接到服务器。
$ ssh username@host
输入密码后,您现在就“进入”了另一台服务器。您的控制台很可能看起来像这样:
[username@host ~]$
我们已经学习的所有命令也可以在您的虚拟主机上运行。您可以使用exit命令退出服务器并返回到您自己的计算机。
其它几个有用的命令有时,想查看当前系统用户id。
$ whoami
NolBook:~ taniarascia$ whoami
taniarascia
在迁移网站时,我经常需要检查给定域的 IP 地址。我可以使用 dig (DNS Lookup ) 命令来做到这一点。
$ dig google.com
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 279 IN A 216.58.192.238
如果我忘记了什么,我还可以使用man( Manual )查看命令行的帮助指南。
$ man touch
NAME
touch -- change file access and modification times
要退出手册页,只需按 q。
使用基本的文本编辑器您可能听说过 Vim 或 Emacs 等程序。这些是基于终端的文本编辑器。这两个程序都有一些学习曲线。大多数(如果不是全部)Mac 和基于 Linux 的计算机都安装了一个名为Nano的程序,这是一个非常简单的文本编辑器。
我可以使用nano命令打开带有Nano的文件。
首先,我将创建一个新文件。
$ touch index.html
然后我会用nano.
$ nano index.html
现在我的终端屏幕看起来像这样。
在顶部,我可以看到我正在编辑的文件 ( index.html ),在底部是我可以执行的各种命令。^代表控制。除了复制文件的内容之外,您将无法使用鼠标四处移动或执行任何操作。
所以我只会输入一些独特的东西。
现在要保存我的文件,我将按 control O(字母),然后输入确认。此时我可以通过输入 control X 退出Nano,然后我会回到开始的地方。
现在我可以通过 cat 检查index.html的内容以确保一切正常。
NolBook:shell taniarascia$ cat index.html
<html>
<head>
<title>Hello, World!</title>
</head>
<body>
<h1>Hello, World!</h1>
</body>
</html>
这是我今天讲到的所有命令。
命令 |
意义 |
描述 |
pwd |
显示工作目录 |
显示您当前的工作目录 |
ls |
列出目录内容 |
查看您当前目录位置下的文件和目录 |
clear |
清除 |
清除终端屏幕 |
cd |
更改目录 |
在目录之间移动 |
mkdir |
创建目录 |
创建一个新目录 |
touch |
创建文件 |
创建一个新文件 |
cat |
查看 |
查看文件的内容 |
echo "x" > |
写入并创建 |
快速将文本写入到文件中 |
rm |
删除 |
删除目录条目 |
rmdir |
删除目录 |
删除目录 |
cp |
复制 |
复制文件 |
cp -R |
复制目录 |
复制目录及其所有内容 |
mv |
移动 |
移动(剪切和粘贴)文件和目录 |
&& |
且 |
运行多个命令 |
whoami |
我是谁 |
显示当前用户id |
dig |
查询 |
DNS 查询 |
man |
手动的 |
打开手册(帮助)页面 |
nano |
一个编辑器 |
自由文本编辑程序 |