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 的功能强大,可完成网络管理、系统设置等几乎所有计算机操作,后续可能会出新的文章进一步讲解。