系统网络配置
手动设置网络地址



Xshell远程连接
安装ssh
Ubantu默认没有ssh服务,需要手动下载
分别在终端输入sudo apt update和sudo apt install -y ssh下载完成后即可连接Xshell
系统管理操作
关闭防火墙
systemctl
基本语法:systemctl start | stop | restart | status 服务名
其中,服务名不用一个个记,查看/usr/lib/systemd/system 目录下的文件列表,该目录下每个文件都
对应一个服务

systemctl案例实操
- 查看网络服务的状态
在终端输入sudo systemctl status NetworkManager后可查看网络管理服务

此时按q可退出此状态,继续输入指令
其他操作类似
- 停止网络服务
sudo systemctl stop NetworkManager
- 启动网络服务
sudo systemctl start NetworkManager
- 重启网络服务
sudo systemctl restart NetworkManager
systemctl 设置后台服务的自启配置
查看服务开机启动状态 :systemctl list-unit-files
关掉指定服务的自动启动:systemctl disable 服务名
开启指定服务的自动启动:systemctl enable 服务名
关闭防火墙
临时关闭防火墙
查看防火墙状态:sudo systemctl status ufw
临时关闭防火墙:sudo systemctl stop ufw

长期关闭防火墙
设置开机时启动防火墙:sudo systemctl enable ufw
设置开机时关闭防火墙:sudo systemctl disable ufw

查看服务是否开机自启:sudo systemctl is-enabled ufw
关机重启命令
-
关闭系统,当前版本 Ubuntu 不会断电:
halt -
关闭系统并断电,等同于
shutdown -h now:poweroff -
重启,等同于
shutdown -r now:reboot -
shutdown [选项] 时间
① shutdown 参数说明
| 选项 | 功能 |
|---|---|
| -h | -h=halt 关机,不完全等同于 halt 命令 |
| -r | -r=reboot 重启 |
② now 参数说明
| 选项 | 功能 |
|---|---|
| now | 立刻关机 |
| 时间 | 等待多久后关机(时间单位是分钟) |
修改主机名
在终端执行:sudo hostnamectl --static set-hostname 新名字
执行完上述命令,重启后生效

通过主机名连接Xshell
找到电脑位于C:\Windows\System32\drivers\etc目录下的hosts文件,在最下方输入地址和主机名

修改完hosts文件后就可以在Xshell的连接中将主机中原本填写的地址改为自己的主机名
APT软件包
在终端输入apt即可查看apt常用命令
例如,当前需要根据名称列出软件包,就可以在终端输入sudo apt list
其中sudo表示以管理员身份执行命令
常用基本命令
帮助命令
Manual Packages
查看手册页说明文档:在终端输入man man
man 获得帮助信息
- 查看ls命令的帮助信息:
man ls
help 获取shell内建命令的帮助信息
shell 内建命令:shell 内建命令是 shell 的一部分,他们没有单独的可执行文件或手册页,这类命令的文档通过 help 命令访问。
基本语法:help 命令 (功能描述:获得 shell 内建命令的帮助信息)
例如:查看cd命令的帮助信息help cd
常用快捷键
| 常用快捷键 | 功能 |
|---|---|
| ctrl + c | 停止进程 |
| ctrl + l (这是L) | 清屏;彻底清屏是:reset |
| ctrl + q | 退出 |
| tab 键 | 提示 (更重要的是可以防止敲错) |
| 上下键 | 查找执行过的命令 |
| ctrl + u | 清除当前敲的命令 |
文件目录类
pwd 显示当前工作目录的绝对路径
pwd即print working directory 打印工作目录
显示当前工作目录的绝对路径:pwd

ls 列出目录内容
ls即list 列出目录内容
在终端输入ls列出目录的内容(LS)
| 选项 | 功能 |
|---|---|
| -a | 全部的文件,连同隐藏档 (开头为。的文件) 一起列出来 (常用) |
| -l | 长数据串列出,包含文件的属性与权限等等数据;(常用) |
显示说明:
每行列出的信息依次是:文件类型与权限 链接数 文件属主 文件属组 文件大小(用byte来表示) 建立或最近修改的时间 名字

其中ls -l可以简写为ll
cd 切换目录
cd即Change Directory 切换路径
| 参数 | 功能 |
|---|---|
| cd 绝对路径 | 切换路径 |
| cd 相对路径 | 切换路径 |
| cd ~ 或者 cd | 回到自己的家目录 |
| cd - | 回到上一次所在目录 |
| cd .. | 回到当前目录的上一级目录 |
| cd -P | 跳转到实际物理路径,而非快捷方式路径 |
例如:

mkdir 创建一个新目录
mkdir即Make directory 建立目录
| 选项 | 功能 |
|---|---|
| -p | 创建多层目录 |

touch 创建一个文件

cp 复制文件或目录
基本语法:cp 源文件 目标文件 功能描述:复制源文件文件到目标文件
| 选项 | 功能 |
|---|---|
| -r | 递归复制整个文件夹 |
强制覆盖不提示的方法:\cp

rm 删除文件或目录
| 选项 | 功能 |
|---|---|
| -r | 递归删除目录中所有内容 |
| -f | 强制执行删除操作,而不提示用于进行确认 |
| -v | 显示指令的详细执行过程 |

mv 移动文件与目录或重命名
基本语法:
① mv oldNameFile newNameFile (功能描述:重命名)
② mv /temp/movefile /targetFolder (功能描述:移动文件)

注:不能用mv将文件移动到回收站,这和用rm删除没区别,文件会直接丢失,除非自己手动创建一个文件夹作为回收站
4种方式查看文件内容
cat 查看文件内容
作用:查看文件内容,从第一行开始显示
一般用于查看比较小的文件,一屏幕能显示全的
| 选项 | 功能描述 |
|---|---|
| -n | 显示所有行的行号,包括空行 |
示例:
查看文件内容并显示行号:cat -n houge.txt
more 文件内容分屏查看器
more 指令是一个基于 VI 编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容
more 指令中内置了若干快捷键,详见操作说明
| 操作 | 功能说明 |
|---|---|
| 空格键 (space) | 代表向下翻一页 |
| Enter | 代表向下翻「一行」 |
| q | 代表立刻离开 more ,不再显示该文件内容 |
| Ctrl+F | 向下滚动一屏 |
| Ctrl+B | 返回上一屏 |
| = | 输出当前行的行号 |
| :f | 输出文件名和当前行的行号 |
less 分屏显示文件内容
less 指令用来分屏查看文件内容,它的功能与 more 指令类似,但是比 more 指令更加强大,支持各种显示终端。less 指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率
| 操作 | 功能说明 |
|---|---|
| 空白键 | 向下翻动一页 |
| [pagedown] | 向下翻动一行 |
| [pageup] | 向上翻动一行 |
| / 字串 | 向下搜寻「字串」的功能;n:向下查找;N:向上查找 |
| ? 字串 | 向上搜寻「字串」的功能;n:向上查找;N:向下查找 |
| q | 离开less程序 |
tail 输出文件尾部内容
tail 用于输出文件中尾部的内容,默认情况下 tail 指令显示文件的后 10 行内容
基本语法:

| 选项 | 功能 |
|---|---|
| -n <行数> | 输出文件尾部 n 行内容 |
| -f | 显示文件最新追加的内容,监视文件变化 |
echo 输出内容到控制台
| 选项 | 功能 |
|---|---|
| -e | 支持反斜线控制的字符转换(转义字符) |
| 转义字符 | 意义 | ASCLL码值(十进制) |
|---|---|---|
| \a | 响铃(BEL) | 007 |
| \b | 退格(BS) ,将当前位置移到前一列 | 008 |
| \f | 换页(FF),将当前位置移到下页开头 | 012 |
| \n | 换行(LF) ,将当前位置移到下一行开头 | 010 |
| \r | 回车(CR) ,将当前位置移到本行开头 | 013 |
| \t | 水平制表(HT) (跳到下一个TAB位置) | 009 |
| \v | 垂直制表(VT) | 011 |
| \' | 代表一个单引号 | 039 |
| \" | 代表一个双引号字符 | 034 |
| \0 | 空字符(NUL) | 000 |
| \ddd | 1到3位八进制数所代表的任意字符 | 三位八进制 |
| \xhh | 十六进制所代表的任意字符 | 十六进制 |
示例:(记得加双引号)

> 输出重定向和 » 追加
基本语法:

示例:

ln 软链接(快捷方式)和硬链接
软链接也成为符号链接,类似于 windows 里的快捷方式,有自己的数据块,主要存放了链接其他文件的路径
基本语法:
ln -s 原文件或目录 软链接名 (功能描述:给原文件创建一个软链接)
ln 原文件 目标文件 (功能描述:给原文件创建一个硬链接)
删除软链接: rm -rf 软链接名,而不是 rm -rf 软链接名/
查询:通过 ll 就可以查看,列表属性第 1 位是 l,尾部会有位置指向。
示例:

history 查看已执行的历史命令
示例:

VI/VIM 编辑器
VI 是 Unix 操作系统和类 Unix 操作系统中最通用的文本编辑器。
VIM 编辑器是从 VI 发展出来的一个性能更强大的文本编辑器。可以主动的以字体颜色辨别语法的正确性,方便程序设计。VIM 与 VI 编辑器完全兼容。
在终端中执行以下命令安装 vim:sudo apt install vim
一般模式
以 vim 打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中, 你可以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容, 也可以使用『复制、贴上』来处理你的文件数据。
| 语法 | 功能描述 |
|---|---|
| yy | 复制光标当前一行 |
| y 数字 y | 复制一段(从光标当前行到后 n 行) |
| p | 箭头移动到目的行粘贴 |
| u | 撤销上一步 |
| dd | 删除光标当前行 |
| d 数字 d | 删除光标(含)后多少行 |
| x | 剪切一个字母 (当前光标),相当于 del |
| X | 剪切一个字母 (当前光标的前一个),相当于 Backspace |
| yw | 复制一个词 |
| dw | 删除一个词 |
| shift+6(^) | 移动到行头 |
| shift+4($) | 移动到行尾 |
| 1+shift+g | 移动到页头,数字 |
| shift+g | 移动到页尾 |
| 数字 N+shift+g | 移动到目标行 |
编辑模式
在一般模式中可以进行删除、复制、粘贴等的动作,但是却无法编辑文件内容的!要等到你按下『i, I, o, O, a, A』等任何一个字母之后才会进入编辑模式。
通常在 Linux 中,按下这些按键时,在画面的左下方会出现『INSERT 或 REPLACE』的字样,此时才可以进行编辑。而如果要回到一般模式时, 则必须要按下『Esc』这个按键即可退出编辑模式。
| 按键 | 功能 |
|---|---|
| i | 当前光标前 |
| a | 当前光标后 |
| o | 当前光标行的下一行 |
| I | 光标所在行最前 |
| A | 光标所在行最后 |
| O | 当前光标行的上一行 |
指令模式
在一般模式当中,输入『 : / ?』3 个中的任何一个按钮,就可以将光标移动到最底下那一行
在这个模式当中, 可以提供你『搜寻资料』的动作,而读取、存盘、大量取代字符、离开 vi 、显示行号等动作是在此模式中达成的
| 命令 | 功能 |
|---|---|
| :w | 保存 |
| :q | 退出 |
| :! | 强制执行 |
| / 要查找的词 | n 查找下一个,N 往上查找 |
| :noh | 取消高亮显示 |
| :set nu | 显示行号 |
| :set nonu | 关闭行号 |
| :%s/old/new/g | 替换内容 |
模式间的转换图

时间日期类
基本语法:date 选项 参数
| 选项 | 功能 |
|---|---|
| -d <时间字符串> | 显示指定的 “时间字符串” 表示的时间,而非当前时间 |
| -s <日期时间> | 设置系统日期时间 |
| 参数 | 功能 |
|---|---|
| +%Y | 当前年份 |
| +%y | 当前年份的后两位 |
| +%m | 当前月份 |
| +%d | 当前哪一日 |
| +%H | 当前时 |
| +%M | 当前分 |
| +%S | 当前秒 |
| +%F | 当前年月日,中间以 : 隔开 |
| +%T | 当前时分秒,中间以 - 隔开 |
date 显示当前时间
基本语法:

示例1:
示例2:
date 显示非当前时间
基本语法:(很多写法,仅展示其一)

示例:

date 设置系统时间
基本语法:date -s 字符串时间
示例:date -s "2025-01-23 23:03:20"
用户管理命令
adduser 添加新用户
基本语法:adduser 用户名
应用场景 1:企业开发,多人协同(也会有多人使用相同的一个低权限用户)。
应用场景 2:框架协同 gitlab mysql redis
示例:

passwd 设置或更改用户密码
基本语法:passwd 用户名
id 查看用户是否存在
基本语法:id 用户名
cat /etc/passwd 查看创建了哪些用户
基本语法:cat /etc/passwd
su 切换用户
su即swith user 切换用户
基本语法:
su 用户名称 (功能描述:切换用户,只能获得用户的执行权限,不能获得环境变量)
su - 用户名称 (功能描述:切换到用户并获得该用户的环境变量及执行权限)
示例:

userdel 删除用户
基本语法:

| 选项 | 功能 |
|---|---|
| -r | 删除用户的同时,删除与用户相关的所有文件 |
usermod 修改用户
基本语法:

| 选项 | 功能 |
|---|---|
| -l | 改变用户名 |
| -d | 修改家目录 |
示例:

用户组管理命令
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同。
如 Linux 下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group 文件的更新。
groupadd 新增组
基本语法:groupadd 组名
groupdel 删除组
基本语法:groupdel 组名
groupmod 修改组
基本语法:groupmod -n 新组名 老组名
usermod 修改用户主组
在 Linux 和 Unix 系统中,每个用户都有一个主组(primary group)和可能的多个附加组(secondary groups 或 additional groups)
用户的主组在用户创建时被指定,默认与用户名称相同,当用户创建一个新文件或目录时,默认情况下,这些文件或目录会被分配给用户的主组
基本语法:usermod -g 组名 用户名

查看附加组和用户的映射关系
/etc/group 文件存储了用户和附加组的映射关系,每一行对应一个用户组,第三个冒号后面是以该组作为附加组的用户列表,列表为空表示没有用户将其作为附加组。
操作:cat /etc/group
将用户添加到附加组
基本语法:usermod -aG 组名 用户名


将用户从组中移除
基本语法:deluser 用户名 组名
sudo 设置普通用户具有 root 权限
把普通用户添加进sudo组中
操作:sudo usermod -aG sudo 用户
文件权限类
文件属性
文件基本属性介绍:

如果查看到是文件:链接数指的是硬链接个数
如果查看的是文件夹:链接数指的是子文件夹个数
文件属性由从左到右的10 个字符表示
如果没有权限,就会出现减号[ - ]而已。从左至右用 0-9 这些数字来表示:
(1)0 首位表示类型
在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等
- 代表文件;d 代表目录;l代表链接文档(link file)
(2)第 1-3 位确定属主(该文件的所有者)拥有该文件的权限。—User
(3)第 4-6 位确定属组(所有者的同组用户)拥有该文件的权限,—Group
(4)第 7-9 位确定其他用户拥有该文件的权限 —Other
- rxw 作用文件和目录的不同解释
(1)作用到文件:
[ r ]代表可读(read):可以读取,查看
[ w ]代表可写(write):可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件
[ x ]代表可执行(execute):可以被系统执行
(2)作用到目录:
[ r ]代表可读(read):可以读取,ls 查看目录内容
[ w ]代表可写(write):可以修改,目录内创建+删除+重命名目录
[ x ]代表可执行(execute):可以进入该目录
示例:

chmod 改变权限
第一种方式:chmod [{ugoa}{+-=}{rwx}] 文件或目录
第二种方式:chmod [mode=对应数字 ] [文件或目录]
其中,
u:所有者 g:所有组 o:其他人 a:所有人(u、g、o 的总和)
而在第二种方式中,r=4, w=2, x=1 ,rwx=4+2+1=7
示例1:

示例2:

chown 改变所有者
基本语法:chown [选项] [最终用户] [文件或目录] (功能描述:改变文件或者目录的所有者)
| 选项 | 功能 |
|---|---|
| -R | 同时更改该文件夹内所有子文件 |
示例:

chgrp 改变所属组
基本语法:chgrp [最终用户组] [文件或目录] (功能描述:改变文件或者目录的所属组)
搜索查找类
find 查找文件或者目录
基本语法:find [搜索范围] [选项]
| 选项 | 功能 |
|---|---|
| -name <查询方式> | 按照指定的文件名查找模式查找文件 |
| -user <查询方式> | 查找属于指定用户名所有文件 |
| -size <文件大小> | 按照指定的文件大小查找文件,单位为: b —— 块(512 字节) c —— 字节 w —— 字(2 字节) k —— 千字节 M —— 兆字节 G —— 吉字节 |
示例:

grep 过滤查找及 “|” 管道符
管道符,“|”,表示将前一个命令的处理结果输出传递给后面的命令处理
基本语法:grep 选项 查找内容 源文件
| 选项 | 功能 |
|---|---|
| -n | 显示匹配行及行号。 |
示例:

压缩和解压类
gzip/gunzip 压缩
基本语法:
gzip 文件 (功能描述:压缩文件,只能将文件压缩为*.gz 文件)
gunzip 文件.gz (功能描述:解压缩文件命令)
只能压缩文件不能压缩目录,且不保留原来的文件
tar 打包
基本语法:tar [选项] XXX.tar.gz 将要打包进去的内容 (功能描述:打包目录,压缩后的文件格式.tar.gz)
| 选项 | 功能 |
|---|---|
| -c | 产生 .tar 打包文件 |
| -v | 显示详细信息 |
| -f | 指定压缩后的文件名 |
| -z | 打包同时压缩 |
| -x | 解包 .tar 文件 |
示例:

磁盘类
df 查看磁盘空间使用情况
df即disk free 空余硬盘
基本语法:df 选项 (功能描述:列出文件系统的整体磁盘使用量,检查文件系统的磁盘空间占用情况)
| 选项 | 功能 |
|---|---|
| -h | 以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示 |
示例:

du 文件和目录的磁盘使用空间
基本语法:du 目录/文件 (功能描述:统计文件或递归显示目录及子目录的磁盘使用空间)
| 选项 | 功能 |
|---|---|
| -a | 显示当前目录下所有的文件目录及子目录大小 |
示例:

进程线程类
ps 查看当前系统进程状态
ps即process status 进程状态
基本语法:
ps -aux [| grep xxx] (功能描述:查看系统中所有进程,可以过滤查找)
ps -ef [| grep xxx] (功能描述:可以查看子父进程之间的关系)
| 选项 | 功能 |
|---|---|
| -a | 选择所有进程 |
| -u | 显示所有用户的所有进程 |
| -x | 显示没有终端的进程 |
- ps -aux 显示信息说明:
| 名称 | 含义 |
|---|---|
| USER | 该进程是由哪个用户产生的 |
| PID | 进程的 ID 号 |
| %CPU | 该进程占用 CPU 资源的百分比,占用越高,进程越耗费资源 |
| %MEM | 该进程占用物理内存的百分比,占用越高,进程越耗费资源 |
| VSZ | 该进程占用虚拟内存的大小,单位 KB |
| RSS | 该进程占用实际物理内存的大小,单位 KB |
| TTY | 该进程是在哪个终端中运行的。其中 tty1 - tty7 代表本地控制台终端,tty1 - tty6 是本地的字符界面终端,tty7 是图形终端。pts/0 - 255 代表虚拟终端 |
| STAT | 进程状态。常见的状态有:R:运行、S:睡眠、T:停止状态、s:包含子进程、+:位于后台 |
| START | 该进程的启动时间 |
| TIME | 该进程占用 CPU 的运算时间,注意不是系统时间 |
| COMMAND | 产生此进程的命令名 |
- ps -ef 显示信息说明
| 名称 | 含义 |
|---|---|
| UID | 用户 ID |
| PID | 进程 ID |
| PPID | 父进程 ID |
| C | CPU 用于计算执行优先级的因子。数值越大,表明进程是 CPU 密集型运算,执行优先级会降低;数值越小,表明进程是 I/O 密集型运算,执行优先级会提高 |
| STIME | 进程启动的时间 |
| TTY | 完整的终端名称 |
| TIME | CPU 时间 |
| CMD | 启动进程所用的命令和参数 |
示例1:

示例2:

kill 终止进程
基本语法:
kill [选项] 进程号 (功能描述:通过进程号杀死进程)
killall 进程名称 (功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)
| 选项 | 功能 |
|---|---|
| -9 | 表示强迫进程立即停止 |
查看服务器总体内存
基本语法:free -m (功能描述:查看服务器总体内存,单位为兆M)
top 查看系统健康状态
(现在一般用软件监控)
基本命令:top [选项]
选项说明:
| 选项 | 功能 |
|---|---|
| -d 秒数 | 指定 top 命令每隔几秒更新 |
| -i | 使 top 不显示任何闲置或者僵死进程 |
| -p | 通过指定监控进程 ID 来仅仅监控某个进程的状态 |
操作说明:
| 操作 | 功能 |
|---|---|
| P | 以 CPU 使用率排序,默认就是此项 |
| M | 以内存的使用率排序 |
| N | 以 PID 排序 |
| q | 退出 top |
查询结果字段解释:
(1)第一行信息为任务队列信息

(2)第二行为进程信息

(3)第三行为 CPU 信息

(4)第四行为物理内存信息

(5)第五行为交换分区(swap)信息

netstat 显示网络统计信息和端口占用情况
基本语法:
netstat -anp | grep 进程号 (功能描述:查看该进程网络信息)
netstat -nlp | grep 端口号 (功能描述:查看网络端口号占用情况)
| 选项 | 功能 |
|---|---|
| -n | 拒绝显示别名,能显示数字的全部转化成数字 |
| -l | 仅列出有在 listen(监听)的服务状态 |
| -p | 表示显示哪个进程在调用 |
crontab 系统定时任务
crontab 服务管理
重新启动 crond 服务:sudo systemctl restart cron
crontab 定时任务设置
基本语法:crontab [选项]
| 选项 | 功能 |
|---|---|
| -e | 编辑 crontab 定时任务 |
| -l | 查询 crontab 任务 |
| -r | 删除当前用户所有的 crontab 任务 |
输入EDITOR=vim crontab -e后,打开如下文件,在最后写入命令即可
Shell
Shell概述
Shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核
Shell还是一个功能相当强大的编程语言,易编写、易调试、灵活性强
Shell入门
脚本格式
脚本以#!/bin/bash 开头(指定解析器)
创建并执行一个脚本
要创建并执行一个Shell脚本,需要先在终端输入vim hello.sh创建并编辑一个Shell脚本
在hello.sh中输入如图内容(按’a’开始编辑,按’esc’退出编辑,输入’:wq’保存并退出,忘记了看笔记VIM编辑器部分)

编辑成功后,有两种运行方式
方法一:不赋予脚本执行权限时,用sh 脚本或bash 脚本即可运行(效果一样)

方法二:赋予脚本执行权限,可直接执行

变量
系统变量
常用系统变量有HOME、PWD、SHELL、USER 等
一般系统变量都是由全大写字母构成,所以自定义变量的时候尽量避免全部用大写字母
要获取变量的值可以用$变量名,$和变量名之间不能有空格
示例:

自定义变量
基本语法:
(1)定义变量:变量名=变量值,注意,=号前后不能有空格。(起名的时候不用加$)
(2)撤销变量:unset 变量名。
(3)声明静态变量:readonly 变量,注意:不能 unset。
变量定义规则:
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
(2)等号两侧不能有空格。
(3)在 bash 中,变量默认类型都是字符串类型,无法直接进行数值运算。
(4)变量的值如果有空格,需要使用双引号或单引号括起来。
示例:


特殊变量
$n
基本语法:
$n (功能描述:n 为数字,$0 代表该脚本名称,$1-$9 代表第一到第九个参数,十以上的参数需要用大括号包含,如${10})
示例:

$#
$# (功能描述:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及加强脚本的健壮性)
示例:

$* 和 $@
基本语法:
$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体。)
$@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待。)
(具体区别会在后续学习中了解)
示例:

$?
基本语法:
$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定,表示错误代码),则证明上一个命令执行不正确了)
示例:

运算符
基本语法:
$((运算式))或$[运算式]
示例:计算 (2 + 3)× 4 的值

条件判断
基本语法:
test 条件或[ 条件 ] (注意条件前后有空格)
注意:条件非空即为 true,[ atguigu ]返回 true,[ ] 返回 false
常用判断条件
示例1:

示例2:

示例3:多条件判断(&& 表示前一条命令执行成功时,才执行后一条命令,|| 表示上一条命令执行失败后,才执行下一条命令)

流程控制
if判断
基本语法:


注意事项:
① [ 条件判断式 ],中括号和条件判断式之间必须有空格
② if 后要有空格
示例:

case 语句
基本语法:

注意事项:
(1)case 行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
(2)双分号“;;”表示命令序列结束,相当于 C 中的 break。
(3)最后的“*)”表示默认模式,相当于 C 中的 defaul。
示例:


for 循环
基本语法1:

基本语法2:

示例1:

示例2:打印所有输入参数


比较$*和$@的区别
- $*和$@都表示传递给函数或脚本的所有参数,不被双引号
“”包含时,都以$1 $2 …$n的形式输出所有参数。
在for3.sh中写入如下内容
|
|
如下执行:

- 当它们被双引号“”包含时,$*会将所有的参数作为一个整体,以“$1 $2 …$n”的形式输出所有参数;$@会将各个参数分开,以“$1” “$2”…“$n”的形式输出所有参数。
在for4.sh中写入如下内容
|
|
如下执行:

while 循环
基本语法:

示例:从 1 加到 100
在while.sh中写入如下内容
|
|
执行:

read 读取控制台输入
基本语法:read (选项) (参数)
选项:
-p:指定读取值时的提示符。
-t:指定读取值时等待的时间(秒)如果-t 不加表示一直等待。
参数
变量:指定读取值的变量名。
示例:
|
|
如下执行:

函数
系统函数
basename取文件名
基本语法:
basename [string / pathname] [suffix] (功能描述:basename 命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
basename 可以理解为取路径里的文件名称。
suffix 为后缀,如果 suffix 被指定了,basename 会将 pathname 或 string 中的 suffix 去掉。
示例:

dirname取路径
基本语法:
dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))
dirname 可以理解为取文件路径的绝对路径名称。
示例:

自定义函数
基本语法:

(1)必须在调用函数地方之前,先声明函数,shell 脚本是逐行运行。不会像其它语言一样先编译。
(2)函数返回值,只能通过$?系统变量获得,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。return 后跟数值 n(0-255),运行成功返回0,其他均为失败
示例:
在fun.sh中如下写入
|
|
如下执行:

Shell工具
cut 工具的使用
cut 的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。
基本用法:
cut [选项参数] filename 说明:默认分隔符是制表符
| 选项参数 | 功能 |
|---|---|
| -f | 列号,提取第几列 |
| -d | 分隔符,按照指定分隔符分割列,默认是制表符“\t” |
| -c | 按字符进行切割 后加加 n 表示取第几列 比如 -c 1 |
示例:

awk 工具的使用
一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。
基本用法:
awk [选项参数] ‘/pattern1/{action1} /pattern2/{action2}...’ filename
pattern:表示 awk 在数据中查找的内容,就是匹配模式。
action:在找到匹配内容时所执行的一系列命令。
| 选项参数 | 功能 |
|---|---|
| -F | 指定输入文件的分隔符 |
| -v | 赋值一个用户定义变量 |
正则表达式入门
常用特殊字符
1)特殊字符:^

2)特殊字符:$

3)特殊字符:.

4)特殊字符:*

5)特殊字符:[ ]

6)特殊字符:\

经典正则表达式
|
|
补充
该笔记基于尚硅谷课程
https://www.bilibili.com/video/BV1JF4m1A7mN/
虚拟机代理配置
https://blog.csdn.net/weixin_63594197/article/details/138069939
链接失效时可以看下方视频
设置使用sudo时不需要密码
在终端输入:sudo vim /etc/sudoers
找到文件最下面,修改为如图所示的样子:

\ 在下一行继续输入
示例:
