1. shell 基础概念
定义与起源:shell 是用户与操作系统最原始、基本的交互方式,早期计算机没有图形界面,用户通过它与系统交互,因其类似操作系统的外壳而得名,如今常被称为命令行。
存在意义:图形界面虽简洁直观,但 shell 仍有不可替代的作用。服务器管理、树莓派与主机通信常用 shell,因为它占用系统资源少、对网络带宽要求低,且本身是脚本语言,可实现自动化任务,如定时关机、批量处理图片等。
种类:shell 种类繁多,Linux 生态圈有 bash、born shell 等,Windows 有命令提示符、power shell 等,本文以应用广泛、语法易懂的 bash 为例进行讲解。
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子目录。特殊用法:
cd或cd ~回到用户主目录;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:若c、b、a均为空目录,会从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.txt和file2.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 | uniq:cat file.txt输出文件内容,经管道给sort排序,排序结果再给uniq去除重复行。
4.总结展望
本篇仅介绍了 shell 的基础内容,shell 的功能强大,可完成网络管理、系统设置等几乎所有计算机操作,后续可能会出新的文章进一步讲解。