命令行是一种在没有 GUI 的情况下控制计算机的方式。在本单元中,我们将学习与计算机互动的基础命令。
重点小结
- 学生将通过命令在电脑上移动。
- 学生将创建、移动、复制和删除文件及文件夹。
什么是命令行?
大多数用户在大多数情况下都会使用图形界面 (GUI) 与计算机互动。GUI 通常依靠鼠标或触摸来操作包含图标、按钮、滚动条等的窗口。
命令行是计算机的另一种视图。命令行有时也称为“shell”“终端”“bash”或“文本界面”,它是一种:
- 一种与计算机程序交互的方式,用户通过输入命令来与程序交互。例如:
open README.txt
- 一种无需使用鼠标即可浏览和操作计算机的方式。
- 一种非图形化方式,用于创建、读取、更新、操作和删除文件及目录。例如:
mv README.txt readme.txt
GUI 和命令行看到的是同一事物!它们是与计算机交互的不同方式。
何时使用命令行?
开发者通常更喜欢使用命令行界面:
- 它们提供了一种更简洁的方式来控制程序或操作系统。为什么呢?因为所有操作都在同一窗口中进行,而且经过练习后,与使用鼠标查找和操作相比,这种方式更加省力。
- 它们可轻松显示用于控制命令的选项。为什么呢?GUI 中的菜单提供的选项数量非常少。在命令行中,有数百个命令,在命令中添加几个字符就可以让它执行许多不同的操作。例如:
ls
基本列表文件ls -a
列出所有文件,包括通常隐藏的文件ls -l
长列表,显示有关每个文件的信息ls -R
递归列出目录的内容ls -la
详细列出所有文件- 它们可让您轻松以复杂方式同时处理大量文件。
for i in *.png; do pngtogif $i `echo $i | sed s/png/gif/`; done
- 它们提供了一种对操作系统(shell 程序)进行编程的方法,例如,上面的示例是一个非常简单的 shell 程序,旨在修改文件名以
.png
结尾的图片。
命令行实战
命令行命令的组成部分
所有命令都包含三个部分:
- 命令(或实用程序)始终位于最前面。
- 标志是可选的,具体取决于您使用的实用程序。标志始终以 -(减号)开头。
- 实参是命令要处理的对象或必要信息。通常是文件名。
取景
背景信息和用途
命令行是一种在没有鼠标或 GUI(图形界面)的情况下控制计算机的方式。在 Apple Computer 开始制造带有可点击的图标和文件夹的机器之前,与计算机交互的唯一方式是通过命令行。
作为开发者,我们使用命令行是因为它比 GUI 快得多,也强大得多,无需浪费时间四处点击。通过命令行,您可以与计算机进行几乎任何互动。
由于终端是一种更简单的界面,因此当您需要通过网络链接远程连接到计算机时,它比 GUI 具有很大的优势。开发者经常会这样做,例如在旅行时。
在本课中,我们将学习一些基本命令,以便通过以下方式与计算机互动:创建文件和目录、移动文件夹、更改目录以及列出文件夹的内容。
学习目标
学生将能够
- 使用终端浏览文件和文件夹
- 列出文件夹的内容
- 在命令行中创建文件和文件夹
- 移动文件和文件夹
- 复制文件和文件夹
- 删除文件和文件夹
使用入门
访问终端
版块框架和用途
终端为操作系统提供命令行界面 (CLI)。借助它,您可以向计算机提供直接的基于文本的指令。
为此,我们需要根据您使用的系统启动终端。
终端启动时,会从您计算机的主目录(无论您将计算机命名为什么)开始。主目录用波浪号 ~
表示。
在终端中讨论我们的世界时,目录与文件夹相同(我们有时可能只称它们为目录)。
更改目录
版块框架和用途
为了在终端中与计算机对话并告知计算机我们想要做什么,我们需要使用一种通用语言。命令行可识别使用 Bash 脚本语言编写的命令。这些命令是英语单词的首字母缩略词或缩写。
打印工作目录 (pwd
)
在终端中导航时,务必要知道自己所处的位置(这在现实生活中也是如此 - 如果想去某个地方,首先必须知道自己当前的位置)。
# See your current location - abbreviation for 'print working directory'
pwd
列出可用的文件和目录
您的工作目录中可能包含多个可访问的文件。通常,我们会依靠图标等视觉提示来了解哪些内容可用,但如果我们只是猜测文件和文件夹的位置,就很难在电脑上进行导航。在命令行中,我们将使用特定命令列出我们可以从任何给定工作目录 / 任何给定位置访问的内容。
如需查看当前目录中有哪些文件或文件夹,请使用 ls
命令(list 的缩写)查看内容列表视图。
# See files and folders in current location - abbreviation for 'list'
ls
更改工作目录
如果您需要访问列表中未显示的文件或目录,不妨更改工作目录,以便更轻松地访问相应内容。
用于指示命令行切换到新目录(也称为文件夹)的语法是 cd
,后面(在同一行中)跟新文件夹的路径。
如果您要前往当前所在目录内的某个目录(即工作目录的子文件夹),请使用 cd
命令,后跟相应文件夹的名称。
# Change your current working directory (current location)
# Abbreviation for 'change directory'
cd Documents
您也可以从主目录 ~ 开始导航。
# Add a `~/` to begin from the home directory.
cd ~/Downloads
如果您已更改目录,但需要改回主目录,请使用 ~
直接返回主目录,或使用 ..
向上导航一级。
# Option 1: navigate directly to the home directory
cd ~
# Option 2: navigate back one level
cd ..
请注意,cd ..
只能向上(返回)一级,因此如果您目前已更改目录三次(向下三级),则需要使用 cd ..
三次才能完全返回主目录,但只需使用 cd ~
一次。
迷你挑战
- 使用
ls
查看当前目录中的内容。 - 返回到您的主目录,然后使用
ls
查看主文件夹的内容。 - 选择主目录中某个文件夹的名称,然后前往此新文件夹。
- 使用 list 命令查看内容。
提示:使用 tab
进行自动补全
使用 cd
命令更改目录时,一个拼写错误就会导致该命令无法正确执行。不过,使用 tab
键会自动补全当前目录中任何可用目录的名称。因此,您只需输入 cd Do
,然后按 tab
键,终端就会自动补全命令 cd Documents/
(末尾的 /
是可选的,但可让您知道目标位置是一个目录),而无需输入 cd Documents
。
自动补全功能不仅能在正常工作时节省时间,还能在无法正常工作时提供有价值的信息。如果标签页按钮未自动补全,您可能遇到了以下三个非常常见的问题之一:
- 您要前往的目录无法从当前工作目录访问。
- 有两个目录的开头名称相似(例如
Documents
和Downloads
),但您提供的信息不足,自动补全功能无法确定您想要哪个目录。再次按tab
可查看与您输入的内容匹配的目录列表。然后,再输入一些内容(足以将匹配结果限制为 1 个),并再次按tab
。 - 您已在字词的前半部分中添加了错别字。
您越早养成使用 Tab 键自动补全命令的习惯,就越有可能应对令人沮丧的情况(即命令似乎无法正常运行)。
父目录和子目录
目录和文件之间可以存在子级和父级关系。如果 directory_b
位于 directory_a
内部 ,则 directory_b
称为 directory_a
的子级。此时,directory_a
称为 directory_b
的父级。如果第三个项 my_file
位于 directory_b
内,则被视为 directory_b
的子级和 directory_a
的孙级。
这些关系通常在论坛上以文本图表的形式展示,如下所示:
directory_a/ directory_b/ my_file
请注意,目录名称以 /
结尾,而文件名则不以 /
结尾。这种分层组织方式通常称为文件系统的树状结构。
兄弟姐妹
如果同一级别有多个文件或文件夹,则这些文件或文件夹称为同级。示例:如果 file_b
和 file_c
位于 directory_a
内,则它们是同级元素。
该文本图如下所示:
directory_a/ file_b file_c
请注意,由于 file_b
和 file_c 是同级,因此它们的缩进量相同。
文件路径
以下是一个更复杂的文本图,其中包含父子关系和同级关系。
north_america/ united_states/ new_york/ new_york_city/ manhattan queens staten_island bronx brooklyn california/ mountain_view los_angeles illinois/ chicago mexico/ mexico_city
在此示例中,new_york_city/
是一个目录名称,但它也有一个路径,其中详细说明了如何到达该目录:~/north_america/united_states/new_york/new_york_city/
。
如需将目录更改为 new_york_city/,
,您可以逐步使用名称进行导航,也可以使用路径通过一个命令直接导航到该目录。
# Option 1: in four steps, using directory names.
cd ~ # navigate home, where these folders are located
cd north_america/
cd united_states/
cd new_york/
cd new_york_city/
# Option 2: in one step, using the path.
cd ~/north_america/united_states/new_york/new_york_city/
导航命令摘要
# See your current location - abbreviation for 'print working directory'
pwd
# Change to a new location - abbreviation for 'change directory'
cd ~/Downloads
# Navigates into a child directory called `some_directory`
# Only works if `some_directory` is a child of the current directory
cd some_directory
# Navigates into the parent of the current directory
# `..` is shorthand for parent.
cd ..
# Will take you back home
cd
迷你挑战
- 使用
pwd
可找出您当前所在的文件夹。 - 更改为其他目录,然后确认新位置。
- 请重试,并前往其他文件夹。使用新命令查看您的位置,并查看此目录中的文件。
创建文件和目录
版块框架和用途
作为开发者,我们需要创建包含代码的文件。为了让这些文件井井有条,我们需要创建用于存储文件的文件夹 / 目录。
在创建文件和文件夹之前,请注意您在终端中的位置。
# See your current location.
pwd
如需创建文件,请使用命令 touch
,后跟文件名。
# `touch` creates a new file.
touch style.css
创建文件时,请添加文件扩展名以指定文件类型。文件类型示例:
.js
作为 JavaScript 文件.html
创建 HTML 文件.css
创建 CSS 文件.md
创建 Markdown 文件
文件名不应包含空格。
# make a file - this will create a file in the current folder
touch my_text_file.txt
# make a file - this will create a file on the desktop
touch ~/Desktop/my_new_style_sheet.css
创建多个文件
您可以在每个名称之间添加空格,一次性创建多个文件。
# make multiple files - this will create multiple files in the current folder
touch my_new_js_file.js my_new_html_file.html my_second_html_file.html
创建目录
如需创建目录 / 文件夹,请使用 mkdir
命令(“make directory”的缩写),后跟文件夹名称。
# make a folder - this will create a directory in the current folder
mkdir my_new_folder
# make a folder - this will create a directory on your desktop
mkdir ~/Desktop/my_new_desktop_folder
创建多个目录
您可以在每个名称之间添加空格,一次性创建多个文件夹。
# make multiple folders - this will create multiple folders in the current
# directory
mkdir folder_one folder_two folder_three
迷你挑战
- 创建新文件。
- 通过一个命令创建多个文件。
- 创建一个新目录。
- 再创建几个新目录。尝试仅使用一个命令来完成此操作。
- 利用您所了解的有关浏览目录以及创建文件和文件夹的知识,在桌面上使用文件和文件夹构建一个“家庭树”。
移动和复制
移动文件和目录
版块框架和用途
我们可以在命令行中移动文件或文件夹,但始终需要指定以下三项内容:
- 我们使用
mv
命令(移动的缩写)。 - 在 move 命令后添加要移动的文件或文件夹的名称。
- 在文件名称后添加您要将文件移至的目标位置。
例如,如果您有如下文件结构:
my_child_folder/ my_parent_folder/
您可以看到,它并未按应有的方式进行整理,它们本应是父项和子项,但现在却成了同级项。使用以下命令:
# move a directory - this will move the folder `my_child_folder` into the
# folder named `my_parent_folder` that is in the current folder
mv my_child_folder/ my_parent_folder/
生成的结构将如下所示。
my_parent_folder/ my_child_folder/
以下是 mv
命令的其他一些变体:
# move a directory - this will move the folder `my_folder` into the file named
# `my_desktop_folder` that is located on the Desktop
mv my_folder ~/Desktop/my_desktop_folder
# move a file - this will move the file `my_file.txt` into the file named
# `my_folder` that is in the current folder
mv my_file.txt my_folder
# move a file - this will move the file `my_file.txt` into the file named
# `my_desktop_folder` that is located on the Desktop
mv my_file.txt ~/Desktop/my_desktop_folder
警告: mv
恰好也是使用 mv old_name new_name
语法重命名文件的命令。这意味着,如果您将文件移动到不存在的目录,或者拼错了目标位置,则系统会重命名该文件,而不是移动该文件。
迷你挑战
- 创建 5 个文本 (.txt) 文件。
- 新建一个目录。
- 将您创建的 5 个文件移至该文件夹。
- 创建一个文件夹,然后将此新文件夹移动到另一个文件夹中。
复制文件和目录
版块框架和用途
在构建 Web 应用时,我们可能希望复制文件(如果我们正在构建两个类似的网页,可能不想从头开始),并且 cp
(复制)命令的语法与 mv
语法非常相似。
复制文件
复制命令包含三个部分:
- 命令
cp
- 复制的缩写 - 要复制的文件的名称
- 副本的名称(如果留在同一文件夹中)或位置和名称(如果移动到其他文件夹中)。
# Copy a file named `my_file.txt` to a file called `my_file_copy.txt`
# The copy will be located in your Documents folder.
cp my_file.txt ~/Documents/my_file_copy.txt
# Copy a file named `my_file.txt` to a file called `my_file_copy.txt`.
# Since no directory was specified, this will occur within the same folder.
cp my_file.txt my_file_copy.txt
如果您希望副本保留与原件相同的名称,可以指定副本位置,但不指定文件名。
# Copy a file named `my_file.txt` to your Documents folder.
# The destination ends with a directory, so the copy will have the same name.
cp my_file.txt ~/Documents/
如果有很多同名文件,可能会造成混淆,因此只有在确定需要这样做时才使用此方法。
复制目录
复制文件夹或目录会稍微复杂一些,因为您可能不仅要复制文件夹,还要复制其中的所有内容。
- 命令
cp -R
- copy recursive 的缩写 - 将此命令用于空文件夹和非空文件夹 - 源名称(要移动的文件夹或文件)
- 副本的名称(如果留在同一文件夹中)或位置和名称(如果移动到其他文件夹中)。
警告:指定副本名称时,如果相应文件或文件夹之前未创建,则会在您创建副本时创建。如果该文件是在您运行复制命令之前创建的,则该命令会覆盖该文件中之前的所有内容,因此请务必小心!
# copy a directory named `my_folder` from your Desktop folder to a folder
# called `my_folder_copy` in your Documents folder
cp -R ~/Desktop/my_folder ~/Documents/my_folder_copy
# copy a file named `my_file.txt` from your Desktop folder to your Documents
# folder
cp -R my_folder my_folder_copy
注意:cp -R
的 -R
部分称为标志。标志始终以短划线开头,并与命令结合使用,以提供有关如何执行相应命令的更具体说明。
迷你挑战
- 创建名为
my_original.txt
的文件 - 在同一文件夹中创建
my_original.txt
的副本,并为其指定一个新名称。 - 新建一个目录。
- 复制该目录,但将其命名为其他名称。
- 复制您在第 2 步中复制的文件,但将其放入您在第 4 步中复制的目录中。
移除文件和文件夹
版块框架和用途
我们可以在命令行中删除文件和文件夹,但这样做是永久性的。
移除文件
如需移除某个文件,我们可以使用 rm
命令(移除的缩写),后跟文件名。
# delete a file in the working directory
rm unwanted_file.txt
# delete a file not in the working directory
rm ~/Desktop/unwanted_file.txt
移除空目录
如需移除空 目录,我们可以使用 rmdir
命令(移除目录的缩写),后跟文件夹名称。
# delete an empty folder
rmdir empty_directory
# delete an empty folder
rmdir ~/Documents/my_files/empty_directory
移除非空目录
如需移除非空文件夹,我们必须在 rm
命令后添加 -R
标志(递归的缩写),以告知计算机删除文件夹中的内容。作为快捷方式,一些开发者会使用 -Rf
标志,该标志会强制移除所有内容(否则,您可能会收到有关删除某些子文件或文件夹的提示)。
# delete a folder which contains other files or folders
rm -R directory_which_isnt_empty
# delete a folder which contains other files or folders
rm -R ~/Downloads/directory_which_isnt_empty
警告:使用 rm
命令与使用回收站或电子邮件的“已删除”部分不同,这些文件无法轻松恢复。以这种方式删除文件时,请务必格外谨慎。
迷你挑战
- 创建 4 个文件。
- 删除 2 个文件。
- 创建一个文件夹。
- 创建另一个文件夹,并在该文件夹中创建一个文件。
- 删除这两个目录。
您可以在从 GitHub 下载的学生代码库中的以下文件夹中找到此实验的代码:command-line/labs/around-the-world
背景
您即将开始海外学期,是时候开始规划您的欧洲之旅了…
在不久的将来,您将有三个月的时间好好生活,因此您希望确保充分利用每次周末旅行。
幸运的是,您不必从头开始,您的朋友已经为您提供了一些他们在海外留学期间最喜欢的活动。很遗憾,部分文件混在了一起…
别担心,借助神奇的命令行,您很快就能解决这些问题!
任务
确保每个城市都位于正确的国家/地区,并且每个城市文件夹中都有正确的地标。请务必谨慎操作,否则您可能会在阿姆斯特丹寻找埃菲尔铁塔!
如果您对自己的技能有十足的信心,可以隐藏 GUI 并直接从命令行迎接这项挑战。在执行所有这些操作时,您应始终位于“around-the-world”常规文件夹中,这意味着在引用文件夹和文件时,您应使用绝对路径!
确定一切就绪后,您就可以掌控未来几个月的日程了。集思广益,想出您必须要去的城市、国家/地区和纪念碑,然后将它们添加到文件树中!
恭喜!您已经正式学会了如何与计算机对话。准备好更进一步了吗?我们来聊聊扩展服务…
扩展程序
- 再次混排所有文件,然后前往您选择的城市。再次整理文件,同时留在该城市。
- 试试以下链接中的某款有趣的命令行游戏
Terminus Game
Advanced Game(准备好使用 Google 搜索) - 是《星球大战》的忠实粉丝?尝试在命令行中运行
telnet towel.blinkenlights.nl
并按 Enter 键...(请注意,在最新版本的 MacOS 中,telnet
命令不再默认安装;在这种情况下,可以改用nc towel.blinkenlights.nl 23
命令。)
您可以在从 GitHub 下载的学生代码库中的以下文件夹中找到此实验的代码:command-line/labs/bashing-away-repetition
准备好摆脱日常命令行使用中的重复操作了吗?太棒了,我也是!
背景
如果说程序员最讨厌什么,那就是重复。作为计算机科学家,我们的工作是让计算机尽可能多地完成我们的工作。编写 Bash 脚本有助于我们更高效地使用命令行。
首先,什么是 Bash 脚本?
这个问题问得好极了。幸运的是,我们的朋友 Ryan Chadwick(这个查找命令行教程的好地方)为我们提供了答案。
借助 Bash 脚本,我们可以定义一系列操作,然后计算机将执行这些操作,而无需我们自己输入命令。如果某个特定任务经常执行,或者 重复执行,那么脚本会是一个有用的工具。
没有重复?这就是我所说的。
教程
首先,为了能够运行脚本,您需要向计算机授予权限。为此,请运行以下命令。
chmod 755 myScript.sh
好了,现在该编写您的第一个程序了。前往 myScript.sh
(看看是否可以从命令行打开该文件)。在该文件的末尾添加:
echo "Hello World"
现在运行:
./myScript.sh
在终端中。** 成功了!** 您应该会在终端中看到“Hello World”。
您在 Bash 脚本中编写的所有内容都会像您在终端中输入的一样运行。在深入了解扩展之前,我们再来看一个示例。首先,为脚本创建一个文件,该文件可以采用任何所需的名称,但必须以 .sh
为扩展名。接下来,请确保通过在终端中输入 chmod 755
,然后输入脚本名称并按 Enter 键,为脚本授予运行权限。每次启动新的 Bash 脚本时,您都应确保完成这两个步骤。
简介挑战
现在,我们来尝试编写一个用于创建新文件夹的脚本。我们知道哪个命令可以创建新文件夹?如果您想到的是以 m
开头且以 kdir
结尾的字词,那么您的思路是正确的。在新的 .sh
文件中,编写将创建新文件夹并为其命名(名称要酷炫)的命令,然后在终端中运行该命令。
如果可以正常播放,请继续排查下方列出的其他问题。如果您仍然有点困惑,请尝试回顾一下“环游世界”实验,想想您是如何创建新的国家和城市文件夹的。
请大胆使用上面链接的教程,并准备好施展您最出色的 Google 搜索技能。编写并运行可执行以下操作的脚本:
主线任务
- 向您在上面创建的文件中添加一个命令,该命令可导航到您要创建的文件夹。(我们使用什么命令来更改目录?)
- 为新文件夹名称添加日期戳。例如,您的程序应创建一个名为“
2017-12-07my_super_cool_folder
”的文件夹
- 输出“我的当前目录是:”后跟您的工作目录,以及“这是此目录中所有内容的列表!",后跟当前目录的内容。
- 了解如何为您的 bash 脚本提供输入,并根据该输入字符串创建文件。本实验室前面部分中链接的教程在“变量”部分提供了一些很好的示例,您可以查看一下。
- 询问用户的姓名,然后打印出“很高兴认识你[在此处插入用户姓名]”
- 尝试向用户询问更多信息,并为他们创建自定义消息。
背景信息
命令行(或终端)可直接与计算机操作系统 (OS) 互动,它能执行图形用户界面 (GUI) 的所有操作,但通过文本命令实现,包括导航、创建新文件和执行脚本。命令行将用于打开文件,并在使用 Google App Engine 时启动开发环境。
命令行实战
访问终端
Mac 快捷键:
- 按 Command + 空格键打开聚焦。
- 在 Spotlight 搜索中输入终端。
浏览终端
# See your current location - abbreviation for 'print working directory'.
pwd
# Change to a new location - abbreviation for 'change directory'.
cd /Users/jsmith/Downloads
# Navigate into a child directory called `some_directory`. This only works if
# `some_directory` is a child of the current directory.
cd some_directory
# Navigate into the parent of the current directory. `..` is shorthand for parent.
cd ..
# Return home.
cd
# Change directories to a folder called `my_folder` that is within the current
# directory.
cd my_folder ```
#### File Path Shorthand `~`
The `~` is generally short for "home". Home can be configured to mean different
things for different users and across different operating systems, but in the
example above, for a Mac user named "jsmith", the `~` is short for that user's
home directory: `/Users/jsmith`.
This means that `~/Downloads` and `/Users/jsmith/Downloads` are the same for
this user. But starting with a `~` allows us to specify absolute file paths
(agnostic of your current working directory, and starting at the root `/`)
without having to write out a full path each time.
### <a id="view"></a>Viewing the Contents of Folders
```bash
# See files and folders in current location - this is an abbreviation for 'list'.
ls
创建文件和文件夹
创建文件
# Make a file - this will create a file in the current folder.
touch my_text_file.txt
# Make a file - this will create a file on the Desktop.
touch ~/Desktop/my_new_style_sheet.css
# Make multiple files - this will create multiple files in the current folder.
touch my_new_js_file.js my_new_html_file.html my_second_html_file.html
创建文件夹
# Make a folder - this will create a directory in the current folder.
mkdir my_new_folder
# Make a folder - this will create a directory on your Desktop.
mkdir ~/Desktop/my_new_desktop_folder
# Make multiple folders - this will create multiple folders in the current
# directory.
mkdir folder_one folder_two folder_three
移动文件和文件夹
移动文件
# Move a file - this will move the file `my_file.txt` into the folder named
# `my_folder` that is in the current folder.
mv my_file.txt my_folder
# Note that this will rename the file instead of moving it if the destination
# folder does not yet exist. Read below for more details on renaming.
# Move a file - this will move the file `my_file.txt` into the folder named
# `my_desktop_folder` that is located on the Desktop.
mv my_file.txt ~/Desktop/my_desktop_folder
移动文件夹
# Move a directory - this will move the folder `my_child_folder` into the
# folder named `my_parent_folder` that is in the current folder.
mv my_child_folder my_parent_folder
# Move a directory - this will move the folder `my_folder` into the folder
# named `my_desktop_folder` that is located on the Desktop.
mv my_folder ~/Desktop/my_desktop_folder
移动即重命名
请注意,mv
也是用于重命名文件或文件夹的同一命令。
# Rename a file from `old_name.txt` to `new_name.txt`.
mv old_name.txt new_name.txt
复制文件和文件夹
复制文件
# Copy a file named `my_file.txt` from your Desktop folder to your Documents
# folder.
cp ~/Desktop/my_file.txt ~/Documents
# Copy a file named `my_file.txt` to a file called `my_file_copy.txt` within
# the same folder.
cp my_file.txt my_file_copy.txt
复制文件夹
# Copy a directory named `my_folder` (and its contents) from your Desktop
# folder to a folder called `my_folder_copy` in your Documents folder.
cp -r ~/Desktop/my_folder ~/Documents/my_folder_copy
# Copy a directory named `my_folder` (and its contents) from the current
# working directory to a folder called `my_folder_copy` in the current working
# directory.
cp -r my_folder my_folder_copy
删除文件和文件夹
删除文件
# Delete a file in the current working directory.
rm unwanted_file.txt
# Delete a file using its exact location and name.
rm ~/Desktop/unwanted_file.txt
删除文件夹
# Delete an empty folder.
rmdir empty_directory
# Delete a folder which contains other files or folders.
rm -r directory_which_isnt_empty
提示和技巧
- 即使您认为自己不需要使用命令行,也要练习使用。随着时间的推移,您会越来越熟练。
tab
键将自动补全您的文件或文件夹名称(区分大小写)。- 如果只剩下一个匹配的文件或文件夹,系统会自动补全。
- 如果有多个匹配的文件或文件夹,请按两次 Tab 键以查看剩余的匹配项列表。
- 向上 / 向下箭头会循环显示您的命令历史记录,这样您就不必重新输入命令。
- 使用
clear
命令可清除终端窗口。这样可以保留您之前的所有工作内容 - 向上滚动即可查看。 - 使用
reset
重启终端。这不会让之前的任务继续显示在屏幕上,但如果终端开始以不可预测的方式运行,此操作可以解决多个问题。 - 按
option
+arrow
可按字词移动光标
最佳实践摘要
- 使用
cd
、cd ..
或cd <folder name>
浏览终端。 - 使用
ls
查看文件夹的内容。 - 使用
touch
创建文件;使用mkdir
创建文件夹。 - 使用
mv <item to move> <destination>
移动文件和文件夹。 - 使用
cp <item to copy> <destination>
复制文件和文件夹。 - 使用
rm <item to remove>
删除文件和文件夹。
问题 1
您会使用什么来识别当前工作目录?
pwd
ls
cd
mkdir
touch
问题 2
如何从当前工作目录向上移动两级?
mv ~
cd ../..
mv up/up
cd ^(2)
问题 3
您会使用哪个命令来重命名文件?
mv
cd
ls
python
rename
问题 4
为什么命令 mv script.py
会抛出错误?
- 因为“
script.py
”是无效的文件名。 - 因为
mv
命令后面不能跟任何其他信息。 - 这是一个棘手的问题;它不会抛出错误。
- 因为移动文件至少需要两个实参 - 目标和目的地
问题 5
命令 cd ~
会执行什么操作?
- 将工作目录更改为您的主目录。
- 重复上一个命令。
- 使用某种算法来确定此时最有用的命令。
- 抛出错误。
问题 6
以下哪项不是使用 Tab 键自动补全文件名的原因?
- 因为它可以节省时间。
- 因为它可以帮助消除拼写错误。
- 因为所需的处理能力更少。
问题 7
如果一位新开发者尝试创建名为“my script.py
”的文件,为什么命令 touch my script.py
会不起作用?
- 因为
touch
无法创建新文件。 - 因为
.py
不是有效的文件扩展名。 - 因为这样会创建两个文件,一个名为“
my
”,另一个名为“script.py
”,而不是只创建一个文件。 - 因为无法通过命令行创建新文件。
问题 1
您会使用什么来识别当前工作目录?
pwd
问题 2
如何从当前工作目录向上移动两级?
使用 cd ../..
可向上移动两级(每个 ..
代表上一级)。
问题 3
您会使用哪个命令来重命名文件?
mv
用于将文件从一个位置移动到另一个位置,也可用于更改文件名。
问题 4
为什么命令 mv script.py
会抛出错误?
mv
命令需要两个实参:源文件和目标文件。
问题 5
命令 cd ~
会执行什么操作?
该命令会将工作目录更改为您的主目录。特殊字符“~”用于标识当前用户的主目录。它还可以与不同的用户名结合使用:~user2 指向相应用户的主文件夹。
问题 6
以下哪项不是使用 Tab 键自动补全文件名的原因?
因为所需处理能力更低是不正确的。tab
需要少量(通常可忽略不计)处理能力来扫描文件夹,以查找要自动补全的文件名,但它可节省时间,并避免在此过程中出现拼写错误。
问题 7
如果一位新开发者尝试创建名为“my script.py
”的文件,为什么命令 touch my script.py
会不起作用?
它会创建两个文件,而不是一个。touch
命令将创建新文件。在终端中,空格是分隔符,而不是要包含在文件名中的字符。最好完全避免使用这些字符,但如果必须使用,则应将文件名用英文双引号括起来:
touch "my script.py"
问题 1
用于更改目录的终端命令是:
move
mkdir
pwd
cd
问题 2
如果您想前往当前工作目录的父文件夹,应运行什么命令?
cd up
cd .
cd ..
cd ~
问题 3
哪个命令用于创建文件?
touch
mkdir
create
pwd
问题 4
以下哪个命令会创建两个名为 index.html
和 style.css
的文件?
touch index.html, touch style.css
touch index.html, style.css
touch index.html style.css
touch index.html + style.css
问题 5
您使用哪个命令来重命名文件或文件夹?
rename
move
mv
rm
问题 6
rm
和 cp
命令需要什么标志才能处理文件夹?
-f
-r
-x
-d
问题 7
为了将 projects
移动到 ~/Documents
并将其重命名为 Projects
,必须在空白处填写哪个命令?
cd ~
mv projects ~/Documents
# fill in the blank here
mv projects Projects
pwd
cd projects
mv ~ projects
cd ~/Documents
ls
问题 8
以下命令会执行什么操作?
rm -r projects
- 删除名为
projects
的文件 - 删除名为
projects
的文件夹 - 重命名名为
projects
的文件 - 在当前目录的内容中搜索
projects
问题 1
用于更改目录的终端命令是:
用于更改目录的终端命令是 cd
。该命令本身是“change directory”(更改目录)的缩写。
问题 2
如果您想前往当前工作目录的父文件夹,应运行什么命令?
用于导航到父文件夹的命令是 cd ..
问题 3
哪个命令用于创建文件?
用于创建文件的命令是 touch
问题 4
以下哪个命令会创建两个名为 index.html
和 style.css
的文件?
命令 touch index.html style.css
将创建这两个文件。无需使用英文逗号,并且可以采用这种方式创建任意数量的文件,只需用空格分隔即可。
问题 5
您使用哪个命令来重命名文件或文件夹?
虽然 mv
代表“移动”,可用于移动文件或文件夹,但也可用于重命名文件和文件夹。
问题 6
rm
和 cp
命令需要什么标志才能处理文件夹?
rm
和 cp
命令需要 -r
标志才能对文件夹起作用,因为 -r
标志表示“递归”,并且会针对其中包含的任何文件和文件夹重新运行该命令。
问题 7
为了将 projects
移动到 ~/Documents
并将其重命名为 Projects
,必须在空白处填写哪个命令?
cd ~
mv projects ~/Documents
# fill in the blank here
mv projects Projects
由于我们从主目录开始,因此需要运行 cd ~/Documents
,才能在正确的目录中运行最终命令。
问题 8
以下命令会执行什么操作?
rm -r projects
该命令将删除名为 projects
的文件或文件夹,因为它是在 -r
(即递归标志)的情况下调用的。如果不使用该标志,此命令将仅用于删除具有该名称的文件。