1. shell 基础概念

  • 定义与起源:shell 是用户与操作系统最原始、基本的交互方式,早期计算机没有图形界面,用户通过它与系统交互,因其类似操作系统的外壳而得名,如今常被称为命令行。

  • 存在意义:图形界面虽简洁直观,但 shell 仍有不可替代的作用。服务器管理、树莓派与主机通信常用 shell,因为它占用系统资源少、对网络带宽要求低,且本身是脚本语言,可实现自动化任务,如定时关机、批量处理图片等。

  • 种类:shell 种类繁多,Linux 生态圈有 bash、born shell 等,Windows 有命令提示符、power shell 等,本文以应用广泛、语法易懂的 bash 为例进行讲解。

  1. bash 的安装与启动

    • Windows 系统:可安装 WSL(Windows 的 Linux 子系统),按照微软官方文档步骤操作;也可直接安装 git 客户端,其自带轻量级 bash。

    • Mac 和 Linux 系统:系统自带 terminal 程序,打开即可进入 bash。Windows 下除系统默认终端,还可使用 Windows Terminal 等。

2. bash 基本命令操作

2.1 文件管理命令

ls 是常用命令,用于列出目录内容。

  • 语法ls [选项] [目录]

  • 常用选项

    • -l:长格式显示,展示文件权限、所有者、大小、修改时间等详细信息。

    • -a:显示所有文件,包含隐藏文件(以 . 开头)。

    • -h:搭配 -l 使用,以易读格式显示文件大小(如 KB、MB)。

    • -R:递归显示指定目录及其子目录下的所有内容。

  • 示例

    • ls:列出当前目录可见文件和文件夹。

    • ls -la:以长格式列出当前目录所有文件。

    • ls -lh /tmp:以易读长格式列出 /tmp 目录内容。

我们甚至可以在列举文件的时候使用通配符(Wildcards),比如说 ls a* 会显示所有 a 开头的文件,*会匹配0个或多个任意字符。

2.2 文件及目录操作命令

2.2.1 pwd 用于显示工作路径,即 “print working directory” 的缩写。

  • 用途:显示当前所在工作目录的完整路径。

  • 语法:直接输入 pwd 即可执行,无需额外选项参数。

  • 示例:执行 pwd 后,系统会返回类似 /home/user/documents 这样的绝对路径,明确告知用户当前所处的具体目录位置。

通常命令提示符的左边是我们的当前目录,当前路径又被称作工作路径这也是为什么叫working directory的原因,需要注意的是在bash或者说是unix的衍生系统下路径的分隔符是“/”,这和在Windows下使用的“\”是不一样的。

2.2.2 cd 用于切换工作目录。

  • 语法cd [目录路径]

  • 常见用法

  • 绝对路径cd /home/user/Documents ,直接切换到指定的完整路径目录。

  • 相对路径cd../ ,返回上一级目录;cd subdir ,进入当前目录下的 subdir 子目录。

  • 特殊用法cdcd ~ 回到用户主目录;cd - 切换到上一次所在的目录。

2.2.3 mkdir 用于创建目录。

  • 语法mkdir [选项] 目录名

  • 常用选项

    • -p:递归创建目录,当父目录不存在时会一并创建。

    • -m:创建目录时同时设置其权限。

  • 示例

  • mkdir newdir:在当前目录下创建名为 newdir 的目录。

  • mkdir -p a/b/c:递归创建目录结构 a/b/c

  • mkdir -m 700 secret:创建 secret 目录并设置权限为 700

2.2.4 rmdir 用于删除空目录。

  • 语法rmdir [选项] 目录名

  • 常用选项

    • -p:递归删除目录,当父目录为空时也一并删除。

  • 示例

    • rmdir emptydir:删除当前目录下名为 emptydir 的空目录。

    • rmdir -p a/b/c:若 cba 均为空目录,会从 c 开始依次删除,直到 a 也被删除。
      需要注意,rmdir 只能删除空目录,若目录非空,可使用 rm -r 命令,但使用时要谨慎,因为它会删除目录及其所有内容。

2.2.5 touch 文件操作命令,主要有两大功能:

  • 创建文件:如果指定的文件不存在,touch 会创建一个新的空文件。例如 touch newfile.txt 会在当前目录下创建名为 newfile.txt 的空文件。

  • 更新文件时间戳:若文件已存在,它会更新该文件的访问时间和修改时间为当前时间。语法为 touch 文件名,如 touch oldfile.txt 会更新 oldfile.txt 的时间戳。

此外,touch 还支持同时操作多个文件,如 touch file1 file2 file3 能同时处理多个文件。

2.2.6 cp用于复制文件或目录

  • 语法格式cp [选项] 源文件或目录 目标文件或目录

  • 常用选项

    • -r-R:递归复制目录及其内容,用于复制整个目录结构。

    • -f:强制复制,若目标文件已存在则覆盖,不提示。

    • -i:交互模式,在覆盖目标文件前提示用户确认。

    • -v:显示复制过程中的详细信息,如正在复制的文件名等。

  • 使用示例

  • 复制文件cp file1.txt file2.txt,将file1.txt复制为file2.txt

  • 复制目录cp -r dir1 dir2,把dir1目录及其所有内容复制到dir2

2.2.7 mv 是个实用命令,具备两种主要功能:

  • 移动文件或目录

可以将文件或目录从一个位置移动到另一个位置。语法为 mv 源文件/目录 目标位置。例如 mv test.txt /home/user/documents ,会把 test.txt 移动到 /home/user/documents 目录下。

  • 重命名文件或目录

对文件或目录进行重命名操作。语法是 mv 原名称 新名称。例如 mv oldname.txt newname.txt ,会将 oldname.txt 重命名为 newname.txt

此外,mv 命令默认会覆盖目标位置同名文件,使用时需谨慎。

2.2.8 rm 用于删除文件或目录,使用时需谨慎,因为删除操作通常不可恢复。

  • 语法rm [选项] 文件或目录

  • 常用选项

    • -r-R:递归删除,用于删除目录及其包含的所有内容。

    • -f:强制删除,不提示确认,即使文件是只读的也尝试删除。

    • -i:交互模式,删除前询问用户确认。

  • 示例

    • rm file.txt:删除 file.txt 文件。

    • rm -r dir:删除 dir 目录及其所有子内容。

    • rm -i *.log:删除所有 .log 文件,删除前会逐一询问。

2.3 文件内容查看命令

2.3.1 cat 是 Bash 中常用的命令,全称为 “concatenate”,主要有以下用途:

  • 显示文件内容:直接在终端输出指定文件的全部内容,语法为 cat 文件名,如 cat test.txt 会将 test.txt 文件内容显示在屏幕上。

  • 合并文件:可以把多个文件合并成一个文件,语法是 cat 文件1 文件2 > 目标文件,例如 cat file1.txt file2.txt > combined.txt 会把 file1.txtfile2.txt 的内容合并到 combined.txt 中。

  • 创建文件:结合标准输入,能快速创建新文件,如 cat > newfile.txt 后输入内容,按 Ctrl + D 结束输入并创建 newfile.txt 文件。

文件内容长时可以使用以下命令来查看文件内容:

2.3.2 head 用于查看文件开头内容。

  • 语法head [选项] 文件名

  • 常用选项

    • -n:指定显示的行数,如 head -n 5 file.txt 会显示 file.txt 的前 5 行。若不指定 -n,默认显示前 10 行。

    • -c:指定显示的字节数,例如 head -c 20 file.txt 显示 file.txt 的前 20 个字节。

  • 用途:当文件较大时,可快速查看文件开头部分内容,了解文件大致信息。

2.3.3 tail 主要用于查看文件末尾部分内容。

  • 语法tail [选项] 文件名

  • 常用选项

    • -n:指定显示的行数,如 tail -n 5 file.txt 显示 file.txt 的最后 5 行。若不指定,默认显示最后 10 行。

    • -c:指定显示的字节数,例如 tail -c 20 file.txt 显示 file.txt 的最后 20 个字节。

    • -f:实时跟踪文件的新增内容,常用于查看日志文件,文件有新内容添加时会自动显示出来,按 Ctrl + C 停止跟踪。

  • 用途:适用于快速了解文件末尾信息,监控日志文件的实时变化。

2.3.4 grep 强大的文本搜索工具,用于在文件或输入流中查找匹配特定模式的行。

  • 语法grep [选项] 模式 文件名

  • 常用选项

    • -i:忽略大小写进行匹配。

    • -r-R:递归搜索指定目录下的所有文件。

    • -n:显示匹配行的行号。

    • -v:反向匹配,即显示不包含指定模式的行。

  • 示例

    • grep "apple" fruits.txt:在 fruits.txt 中查找包含 "apple" 的行。

    • grep -i "banana" fruits.txt:不区分大小写,在 fruits.txt 中查找包含 "banana" 的行。

    • grep -r "error" /var/log:递归搜索 /var/log 目录下所有文件中包含 "error" 的行。

2.4 命令帮助获取

可在命令后加 --help 查看帮助信息(如 ls --help),也可使用 man 命令(如 man ls)查看操作手册。

3.管道(重定向)特性

在 Bash 中,管道(pipe)是一种强大的功能,用竖线 | 表示。

功能

它能将一个命令的标准输出作为另一个命令的标准输入,让多个命令可以协同工作,依次处理数据,避免了创建临时文件来传递数据,使数据处理更高效和简洁。

语法

命令格式为 命令1 | 命令2 | 命令3...,数据会按照从左到右的顺序依次被各命令处理。

示例

  • ls -l | grep ".txt"ls -l 列出当前目录详细内容,结果通过管道传给 grep ".txt",筛选出文件名含 .txt 的行。

  • cat file.txt | sort | uniqcat file.txt 输出文件内容,经管道给 sort 排序,排序结果再给 uniq 去除重复行。

4.总结展望

本篇仅介绍了 shell 的基础内容,shell 的功能强大,可完成网络管理、系统设置等几乎所有计算机操作,后续可能会出新的文章进一步讲解。