Linux Ubuntu 手册
2026-03-04 13:47:09 1 举报AI智能生成
Linux白皮书,主要包含 Ubuntu 使用和操作技巧。包括环境变量,权限设置,硬件内存,硬盘文件等操作。
linux
ubuntu
bash
命令行
操作系统
模版推荐
作者其他创作
大纲/内容
shell
三剑客
awk
awk '{print $1}' data.txt
grep
在文本中查找指定字符串
grep "an" data.txt<br>
在文本中查找字符串,且忽略大小写
docker ps -a | grep -i 'Chatapi'
sed
要将文件中的"world"替换为"everyone",可以使用sed<br>
sed 's/world/everyone/' data.txt
删除所有 | 字符,输出到屏幕,不修改原文件<br>
sed 's/|//g' filename
直接修改原文件(推荐先备份)<br>
sed -i 's/|//g' filename
删除每行第一个 |<br>
sed 's/|//' filename
Shell基础概念
Shell简介
定义与功能
命令行界面
脚本自动化
Shell类型
Bourne Shell (sh)
Bash (Bourne Again SHell)
C Shell (csh) & TC Shell (tcsh)
Shell环境配置
环境变量设置
路径与权限管理
Shell命令基础
命令格式与语法
命令名
选项与参数
命令执行与输出
标准输入/输出/错误
管道与重定向
命令查找与帮助
which与whereis
man与info
其他技巧
sort
sort file.txt<br>
sort -r file.txt<br>
docker ps -a | sort -V
du -m -d 1 | sort -n
du -m -d 1 | sort -k 2
cut
sudo sh -c 'echo 1 > /proc/sys/vm/drop_caches'
sudo sh -c 'echo 2 > /proc/sys/vm/drop_caches'
输入法安装
tar
打包多个文件
tar -cvf archive.tar file1.txt file2.txt directory/
打包并且压缩成tgz
tar -czvf archive.tgz directory/<br>
打包排除特定文件<br>
tar -czvf archive.tar.gz --exclude="*.tmp" --exclude="logs/" directory/
解包
tar -xvf archive.tar<br>
解压 gzip 压缩包<br>
tar -xzvf archive.tgz
解压 xz 压缩包<br>
tar -xJvf archive.tar.xz
Shell编程
Shell脚本结构
脚本文件创建与执行
脚本文件命名与保存
执行权限与方式
脚本头部声明
Shebang (#!)
注释与文档
变量与数据类型
变量声明与赋值
数据类型与操作
流程控制
文件操作
文件读写
cat, echo, read
重定向与追加
文件与目录管理
ls, cd, pwd
mkdir, rm, cp, mv
文本处理
grep, sed, awk
sort, uniq, cut
条件判断
if语句
case语句
循环结构
for循环
while循环
until循环
函数定义与调用
函数声明
参数传递与返回值
Shell实践案例
系统管理脚本
系统监控与报警
CPU与内存使用率监控
磁盘空间与I/O监控
自动化备份与恢复
定时备份任务
数据恢复策略
网络管理脚本
网络配置与诊断
IP地址与子网掩码设置
ping与traceroute命令
自动化部署与更新
应用版本管理
批量服务器配置同步
数据处理与分析
日志分析与报警
日志格式解析
异常日志检测
数据清洗与转换
数据格式转换
无效数据过滤
环境变量
配置环境变量有多种方法,具体取决于环境变量的作用范围(全局或用户级别)以及生效的时间(临时或永久)。
用户环境
.bashrc: 这个文件主要用于交互式的非登录shell。当你启动一个新的终端窗口或标签页时,通常会加载.bashrc文件。<br>
.profile: 这个文件则主要应用于登录shell。当通过SSH登录到机器,或者使用诸如su -这样的命令切换到另一个用户时,系统会启动一个登录shell,并读取.profile文件(如果存在)。<br>
用户级别
永久环境变量
修改 ~/.bashrc 文件<br>~/.bashrc 是每个用户专属的配置文件,适用于交互式非登录 shell。<br>
export PYTHONPAHT="/home/peter/Projects/project_name"<br>
全局级别<br>
永久环境变量<br>
修改 /etc/environment 文件<br>/etc/environment 是一个系统级配置文件,用于定义全局环境变量。<br>如果希望环境变量对所有用户都生效,可以将其添加到全局配置文件中。<br>
软件安装/卸载
查询安装软件名称
dpkg -l | grep -i clash<br>
apt list --installed | grep -i clash
安装软件
sudo dpkg -i software_name.deb
执行卸载<br>
# 卸载软件但保留配置文件
sudo apt remove <软件包名><br>
# 完全卸载软件并删除配置文件(推荐用于彻底清理)<br>
sudo apt purge <软件包名>
端口管理
查看端口号
natstat
使用netstat命令查看所有端口的详细参数:<br>netstat -tuln<br>
lsof
使用lsof命令查看指定端口的应用详细参数:<br>lsof -i :端口号<br>
查看某端口的进程
netstat
netstat -tunlp | grep 80
ufw
检查防火墙设置
sudo ufw status<br>
查看防火墙状态<br>
sudo ufw status verbose<br>
查看防火墙规则<br>
sudo ufw enable
启用防火墙
sudo ufw allow ssh
如果防火墙开启了SSH端口(默认为22),可以使用以下命令允许SSH连接<br>
80端口服务:<br>sudo ufw allow 80/tcp<br><br>对于UDP协议:<br>sudo ufw allow 53/udp<br><br>若要允许来自特定IP地址的连接到某个端口(如SSH端口22):<br>sudo ufw allow from 192.168.1.100 to any port 22
sudo ufw delete [规则编号]
如果防火墙设置了其他规则导致SSH连接受阻,可以使用以下命令删除相应规则<br>
ip link<br>
查看网卡状态
ip address
查看网卡的ip地址信息
curl 命令是一个用于传输数据的工具,支持多种协议(HTTP、HTTPS、FTP)<br>
curl -X POST -H "Authorization: Bearer token" -d "username=user&password=pass" -i https://www.example.com/login
进程管理
top<br>
top
htop
top -p id
ps -ef | grep xxx
查看XXX进程
文件系统格式
FAT32(File Allocation Table 32)<br>
FAT32格式通常用于移动设备和存储设备,如U盘、SD卡等。<b><i>几乎所有操作系统都支持FAT32格式。</i></b>
是一种较为古老的文件系统格式
兼容性极好,几乎被所有操作系统支持。<br>
支持最大单个文件4GB,最大磁盘容量为2TB。
exFAT(Extended File Allocation Table)
exFAT格式通常用于大容量移动硬盘、闪存卡等设备。<b><i>Windows、macOS和Linux </i></b>等操作系统都支持exFAT格式。
一种针对移动设备和闪存存储设备设计的文件系统格式
支持单个文件大小达到16EB,最大磁盘容量为128PB。
NTFS(New Technology File System)<br>
NTFS格式支持文件加密、压缩、权限控制等功能。Windows操作系统完全支持NTFS格式,其他操作系统 <b><i>macOS, Linux 可以读取 </i></b>NTFS格式的磁盘。
是Windows操作系统中常用的文件系统格式
支持单个文件大小达到16TB,最大磁盘容量为256TB。
HFS+(Hierarchical File System Plus)
HFS+格式在macOS系统中得到完全支持,但在Windows和Linux系统中需要安装额外的驱动程序才能读取HFS+格式的磁盘。
是苹果公司开发的文件系统格式,用于Mac OS X操作系统。
Win不支持
HFS+支持单个文件大小达到8EB,最大磁盘容量为8EB。
ex3:
Linux的文件系统,比较老了。
在Linux下支持跨平台的大文件系统exFAT
sudo apt install exfat-fuse
sudo mkfs.exfat /dev/sdX 专用于大文件和移动设备
ext4:<br>
Linux最常用的文件系统,是ext3的改进版。<br>
支持日志功能,大文件和大分区,性能稳定。<br>
Windows默认不支持,需要安装第三方驱动。
XFS:<br>
高性能日志文件系统,特别适合大文件和高并发I/O。<br>
在Linux中广泛使用,但Windows默认不支持。
分配单元大小<br>
是指在磁盘上分配存储空间的最小单位。选择合适的单元大小可以影响磁盘的性能和空间利用率。<br>
原理:分配单元大小的选择会影响文件系统的存储效率。
对于大容量的磁盘,可以选择较大的单元大小,以减少碎片化;
对于小容量的磁盘,可以选择较小的单元大小,以提高空间利用率。常见的分配单元大小有4KB、8KB、16KB等。
资源管理
磁盘管理
查看磁盘空间
df -h
df 默认以 <i>K </i> 计算大小
结构和分区
结构,总结
lsblk
查看磁盘分区
parted /dev/sdc print
修改磁盘分区大小,扩容
parted /dev/sdc
管理磁盘
磁盘详情
fdisk -l
管理磁盘/dev/nvme0n1
fdisk /dev/nvme0n1
注意添加,删除磁盘的分区都是不可逆操作!
p -> Print current partition table, verify free space exists
n -> New a partition.
t -> Change partition type.
挂载磁盘
格式化磁盘
sudo mkfs -t ext4 /dev/sdb<br>
临时/测试 挂载到目录
sudo mount /dev/sdb /data
如果 /data 目录不存在,需要使用 sudo mkdir /data 创建
自动挂载 指定目录案例
/etc/fstab 是 Linux 系统中的一个重要配置文件,定义系统启动时挂载
sudo blkid 命令获取分区的UUID
使用UUID比使用设备名(如 /dev/sdb1)更可靠
自动挂载/models案例<br>
测试fstab配置:使用 sudo mount -a 命令立即测试fstab配置是否正确。
迁移docker到挂载盘案例
内存管理
sync:将内存中的数据同步到磁盘中,确保数据的完整性。这个命令通常用于在关机之前执行,以确保数据已经保存到磁盘中。<br>
echo 1 > /proc/sys/vm/drop_caches<br>
清空页缓存,即释放被占用的内存。但需要注意的是,这个命令只会清空页缓存,不会清空缓冲区和缓存区。<br>
echo 2 > /proc/sys/vm/drop_caches
清空页缓存和目录项缓存,释放缓存占用的内存。<br>
free -h && sync && echo 3 > /proc/sys/vm/drop_caches && free -h
一个综合性的清理内存命令:会先显示当前内存使用情况,然后执行sync命令将数据同步到磁盘中,接着清空缓存,最后再次显示内存使用情况。
Linux内存管理的基本概念
物理内存与虚拟内存
物理内存的定义和作用
虚拟内存的定义和作用
物理内存与虚拟内存的关系
虚拟内存的优势
内存分页与分段
内存分页的原理
内存分段的原理
分页与分段的区别
分页与分段的应用场景
内存地址空间
用户空间与内核空间
地址空间的布局
地址转换机制
内存保护机制
Linux内存管理的核心机制
伙伴系统(Buddy System)
伙伴系统的原理
伙伴系统的分配策略
伙伴系统的碎片问题
伙伴系统的优化方法
Slab分配器
Slab分配器的原理
Slab分配器的数据结构
Slab分配器的优势
Slab分配器的应用场景
内存回收机制
页面回收(Page Reclaim)
页面回收的触发条件
页面回收的算法
页面回收的性能影响
页面回收的调优方法
交换空间(Swap)
交换空间的作用
交换空间的配置
交换空间的性能影响
交换空间的优化建议
Linux内存的监控与诊断
内存使用情况查看工具
free命令的使用
top命令的使用
vmstat命令的使用
/proc/meminfo文件解析
内存泄漏检测
内存泄漏的定义
内存泄漏的常见原因
内存泄漏检测工具
内存泄漏的解决方法
内存性能分析
内存带宽测试
内存延迟测试
内存瓶颈诊断
内存性能优化建议
OOM(Out of Memory)处理
OOM的触发机制
OOM Killer的工作原理
OOM的预防措施
OOM的应急处理
权限管理
用户管理
adduser:用于添加新用户<br>
常用参数:<br>-m:创建用户的同时创建用户的家目录。<br>-g:指定用户所属的初始用户组。<br>
usermod:用于修改用户属性<br>
常用参数:<br>-aG:将用户添加到指定的用户组。<br>-l:修改用户名。
对于基于 Debian 的系统(如 Ubuntu),使用:<br>sudo usermod -aG sudo peter<br><br>对于基于 Red Hat 的系统(如 CentOS),使用:<br>sudo usermod -aG wheel peter
deluser:用于删除用户
常用参数:<br>--remove-home:删除用户的同时删除用户的家目录。<br>passwd:用于修改用户密码。
su:切换用户
sudo:以超级用户权限执行命令。
whoami:显示当前登录用户的用户名。
groups:显示当前用户所属的用户组。
id:显示用户的 UID 和 GID。<br>
组管理
addgroup:用于添加新用户组
groupadd:同addgroup,用于添加新用户组<br>
delgroup:用于删除用户组
groupdel:同delgroup,用于删除用户组
usermod:用于修改用户属性,包括用户所属的用户组
常用参数:<br>-g:修改用户的初始用户组。<br>-aG:将用户添加到指定的用户组。
usermod -aG root<br>
groups:显示用户所属的用户组
权限管理 permision
含义
最前面 - 代表的是类型<br>中间那三个 rwx 代表的是所有者(user)<br>然后那三个 rw- 代表的是组群(group)<br>最后那三个 r-- 代表的是其他人(other)
权限
r 表示文件可以被读(read)<br>w 表示文件可以被写(write)<br>x 表示文件可以被执行(如果它是程序的话)<br>- 表示相应的权限还没有被授予<br>
其中:rwx也可以用数字来代替<br>r ------------4<br>w -----------2<br>x ------------1<br>- ------------0
操作
其中:<br>u 代表所有者(user)<br>g 代表所有者所在的组群(group)<br>o 代表其他人,但不是u和g (other)<br>a 代表全部的人,也就是包括u,g和o<br>
<br>chmod a+r xxx.xx<br>表示给所有人读取xxx.xxx这个文件的权限<br>
chmod u+rwx xxx.xx<br>表示给所有者 添加读写执行的权限
<br>chmod go-rw xxx.xx<br>表示删除xxx.xxx中组群和其他人的读和写的权限
其他常用样例
sudo chmod 600 ××× (只有所有者有读和写的权限) <br>sudo chmod 700 ××× (只有所有者有读和写以及执行的权限) <br>sudo chmod 644 ××× (所有者有读和写的权限,组用户只有读的权限) <br>sudo chmod 666 ××× (每个人都有读和写的权限) <br>sudo chmod 777 ××× (每个人都有读和写以及执行的权限)<br>sudo chmod -R 777 文件或文件夹的名字(若分配给某个文件所有权限)<br>
时区的查看和管理
查看当前时区<br>
timedatectl<br>
样例输出
设置当前时区
timedatectl list-timezones | grep Shang<br>sudo timedatectl set-timezone Asia/Shanghai<br>
Asia/Shanghai
手动设置(传统方法)<br>
1. 查看当前时区软链接:<br>
sudo ls -l /etc/localtime<br>
2. 手动创建软链接到 /usr/share/zoneinfo/ 中的某个时区:<br>
sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
网络地址
网络地址介绍<br>
ifconfig
<span style="font-weight: normal;">inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255</span><br>inet 172.20.10.6 netmask 255.255.255.240 broadcast 172.20.10.15<br>
一个NAT, 一个Brige
inet 172.20.10.6 (IP地址)<br>
这是你这台 Linux 机器在当前局域网中的地址。相当于你在网络中的门牌号。<br>
172.20.10.6 属于 私有 IP 地址范围(具体在 172.16.0.0/12 范围内,即 172.16.0.0 到 172.31.255.255)。这类地址通常用于家庭、学校或公司的内部网络,无法直接在公网上路由。
netmask 255.255.255.240 (子网掩码)<br>
这是理解这个网络规模的关键。<br>将其转换为二进制是:11111111.11111111.11111111.11110000。<br>这意味着前 28 位 是网络号,后 4 位 是主机号。<br>
计算可用主机数:2^4 - 2 = 16 - 2 = 14 台。<br>减去的一个是全0的网络地址172.20.10.0,一个是全1的广播地址172.20.10.16
broadcast 172.20.10.15 (广播地址)<br>
这是该局域网的广播地址。<br>172.20.10.15 是这个子网的最后一个 IP。<br>
当你的机器想向网段内的所有设备发送消息时(如在 ARP 地址解析协议请求中寻找另一台机器 MAC 地址),它会往这个地址发送数据包。
<b>局域网拓扑范围</b>
网关地址
ip route show
# 输出类似:default via 172.20.10.1 dev wlan0<br>
# 这表示网关通常是 172.20.10.1
default via 10.0.2.2 dev enp0s3 proto dhcp metric 100 <br>default via 172.20.10.1 dev enp0s8 proto dhcp metric 101 <br>10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15 metric 100 <br>169.254.0.0/16 dev enp0s3 scope link metric 1000 <br>172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 <br>172.18.0.0/16 dev br-e6ebd80d6f8c proto kernel scope link src 172.18.0.1 linkdown <br>172.19.0.0/16 dev br-d4a598acef3a proto kernel scope link src 172.19.0.1 linkdown <br>172.20.10.0/28 dev enp0s8 proto kernel scope link src 172.20.10.6 metric 101
enp0s3:IP 地址 10.0.2.15/24(从 10.0.2.0/24 路由条目可知)。这个地址很典型,通常是 VirtualBox 或类似虚拟化软件中的 NAT 网络。<br>
网关 <b>10.0.2.2</b> 一般指向宿主机,允许虚拟机通过宿主机访问互联网。
metric 100 的默认路由(通过 enp0s3)优先级更高。<br>
enp0s8:IP 地址 172.20.10.6/28(从 172.20.10.0/28 条目可知)。这正是你之前提到的局域网,很可能是手机热点或另一个私有网络。
网关 <b>172.20.10.1</b> 是这个网络的出口。
metric 101 的默认路由(通过 enp0s8)作为备用。
docker0 是 Docker 默认创建的网桥,用于容器通信。你的容器可能会获得 172.17.0.0/16 范围内的 IP。<br>
另外两个网桥(br-e6ebd80d6f8c 和 br-d4a598acef3a)状态为 linkdown,可能是以前创建的 Docker 自定义网络,当前没有容器使用,所以接口处于 down 状态,不影响路由。
链路本地地址<br>169.254.0.0/16 是当 DHCP 失败时系统自动分配的地址,这里它关联到 enp0s3,但 metric 很高(1000),基本不会被使用,可以忽略。
收藏
立即使用
收藏
立即使用
收藏
立即使用
收藏
立即使用
Collect
Get Started
Collect
Get Started
Collect
Get Started
Collect
Get Started
评论
0 条评论
下一页