容易理解,shell 是一种接受键盘命令并将其传递给操作系统执行的软件。以前,它是类 Unix 系统(如 Linux)上唯一的用户界面。现在,我们有图形用户界面(GUI)和命令行界面(CLI),例如 shell。
大多数 Linux 系统上的 shell 应用程序称为 bash(Bourne Again Shell,是 Steve Bourne 原始 Unix shell 程序 sh 的扩展版本)。除了 bash,Linux 系统上还有各种 shell 程序,包括 ksh、tcsh 和 zsh。
介绍
Bash Shell 脚本是一种强大的方式来自动化任务和高效管理系统。本指南将通过使用 Git Bash 讲解 Bash 脚本的基础知识,使即使是新手也能轻松理解。
什么是终端?
理解终端
终端是一个名为终端仿真器的程序。这是一个打开窗口并让你与 shell 交互的程序。终端是一个基于文本的界面,使用户能够与操作系统交互、执行命令、运行程序和管理文件,而不需要图形用户界面(GUI)。与图形用户界面(GUI)不同,终端需要你输入命令来执行任务,这使它成为一个强大的工具。
命令行界面
图形用户界面
为什么使用 Git Bash?
Git Bash 是一个 Windows 终端仿真器,提供了 Bash 命令行体验。它允许你在 Windows 操作系统上使用 Git 命令和 Bash 脚本,弥合了 Windows 和 Unix/Linux 环境之间的差距。
开始我们的终端
我们将使用 Git bash 作为我们的终端。查看这个视频以安装 Git bash 到你的 PC 上。 安装后,右键单击鼠标并点击 Open Git Bash here。你应该会看到如下界面:
好的,现在尝试输入一些乱码字符并按 Enter 键。
我们应该会收到一条错误消息,说明无法理解命令。
太棒了!现在按上箭头键。观察之前的命令 ghdghkdhfoihsgkjndjkgnkj 如何响应。是的,我们有一个命令历史记录。当我们按下箭头键时,会返回到空行。如果需要,使用上箭头键重新调用 ghdghkdhfoihsgkjndjkgnkj 命令,然后尝试左右箭头键。文本光标可以在命令行的任何位置移动,使修复错误变得简单。
使用鼠标
尽管 shell 是一个命令行界面,但鼠标仍然很有用。
除了滚动终端窗口的内容外,鼠标还可以用于复制文本。按住左键拖动鼠标选择一些文本(例如,浏览器窗口中的 ghdghkdhfoihsgkjndjkgnkj)。文本会被高亮显示。释放左键并将鼠标指针移到终端窗口,然后点击中键(或如果使用触摸板,则同时按下左键和右键)。浏览器窗口中高亮的内容应被复制到命令行中。
在终端中导航
对于不熟悉命令行的人来说,这部分内容需要特别关注,因为这些原则需要一些时间来掌握。
与 Windows 一样,Linux 系统上的文件按层次结构组织。这意味着它们以树状结构组织,目录(在其他系统中称为文件夹)可能包含文件和子目录。根目录是文件系统中的初始目录。根目录包含文件和子目录,子目录中又包含其他文件和子目录,依此类推。大多数图形环境都包含一个文件管理工具,允许你查看和控制文件系统的内容。我们经常看到文件系统如下图所示。
学习在终端中导航就像学习在新城市中导航一样。以下是一些基本命令以帮助你入门:
-
基本命令
- pwd(打印工作目录):显示当前所在的目录。
- ls:列出当前目录中的文件和目录。
- cd:更改目录。要更改工作目录,我们使用 cd 命令。为此,键入 cd 后跟目标工作目录的路径名。路径名是我们在文件树中从根目录到达目标目录的路径。路径名可以分为两种类型:绝对路径名和相对路径名。我们先从绝对路径名开始。
绝对路径名从根目录开始,沿着树的每个分支逐步前进,直到路径到达目标目录或文件。例如,大多数文档保存在系统中的某个目录中。该目录的路径名是 /Onedrive/Documents。这表示从根目录(由路径名中的开头斜杠表示),有一个名为 "
Onedrive" 的目录,其中包含另一个名为 "Documents" 的目录。 我们来看看:现在我们可以看到我们已将当前工作目录移动到 /OneDrive/Documents,其中充满了文件。注意到 shell 提示符已更改了吗?它通常配置为显示当前工作目录的名称,方便使用。
绝对路径名从根目录开始,并通向目标,而相对路径名则从工作目录开始。为了实现这一点,它使用一些特殊的符号来表示文件系统树中的相对位置。这些特殊符号包括 "."(点)和 ".."(点点)。
"." 符号指代工作目录本身,而 ".." 符号指代其父目录。它是这样工作的。让我们再次将工作目录更改为 /OneDrive/Documents。
那么,假设我们想将工作目录切换到 /OneDrive/Documents 的父目录,即 /OneDrive。我们可以用两种不同的方式来实现。首先使用绝对路径名:
或者使用相对路径名:
这两种不同的方法得到了相同的结果。我们应该使用哪种方法?你认为打字最少的那个! 类似地,我们可以用两种不同的方式将工作目录从 /OneDrive 移动到 /OneDrive/Documents。首先使用绝对路径名:
或者使用相对路径名:
你需要注意的是,有一点非常重要。在大多数情况下,我们可以省略 "./"。这是建议的做法。键入:
将会执行相同的操作。一般来说,如果我们没有提供路径名,系统会默认使用当前工作目录。
更多 Bash 导航命令
-
mkdir(创建目录) 创建新目录: 在当前目录下创建一个新文件夹。mkdir new_folder -
rmdir(删除目录) 删除空目录: 删除一个不包含任何文件的文件夹。rmdir old_folder -
rm(删除) 删除文件: 删除当前目录中的一个文件。rm file.txt删除目录及其内容: 删除目录及其中的所有内容。
rm -r folder_name -
cp(复制) 复制文件: 将一个文件从一个位置复制到另一个位置。cp source.txt destination.txt复制目录: 复制一个目录及其内容。
cp -r source_folder/ destination_folder/ -
mv(移动或重命名) 移动文件或目录: 将文件或目录移动到不同的位置。mv file.txt /path/to/destination/重命名文件或目录: 更改文件或目录的名称。
mv old_name.txt new_name.txt -
touch创建空文件: 创建一个新的空文件或更新现有文件的时间戳。touch newfile.txt -
cat(连接) 查看文件内容: 在终端中直接显示文件的内容。cat file.txt -
less逐页查看文件内容: 打开文件,一次查看一页。less file.txt- 使用
q退出。
- 使用
-
find搜索文件和目录: 按名称查找文件或目录。find . -name "filename.txt"- 在特定目录中搜索:
find /path/to/search -name "filename.txt" -
grep在文件中搜索: 查找文件中的特定字符串。grep "search_term" file.txt- 递归搜索目录中的所有文件:
grep -r "search_term" /path/to/directory
这些命令是 Bash 中文件系统导航的基础。理解并练习这些命令将大大提高你在终端中工作的效率。