第一周作业
1.0 下载VMware Wworkstation Pro
VMware Workstation Pro 的软件介绍及其作用:VMware Workstation Pro 的是行业标准桌面 Hypervisor,属于 64 位的托管型 Hypervisor,可在 Windows 或 Linux 桌面上创建和管理多个虚拟机,让用户能够在单台物理计算机上同时运行 Windows、Linux 和 BSD 等多种不同的操作系统。VMware Workstation Pro 凭借强大的性能、灵活的功能和广泛的兼容性,成为开发、测试和企业级虚拟化的首选工具。其免费个人使用政策进一步降低了技术门槛,而企业版则提供了专业的管理和安全功能。无论是技术爱好者还是企业 IT 部门,均可通过这款软件高效地构建和管理虚拟环境。
VMware 的官网地址是:https://www.vmware.com/
其中文官网是:https://www.vmware.com/cn.html。
下载之后会看到欢迎界面后,接受许可协议直接点击【下一步】继续安装向导。

这里可以更改默认地址,最好不要用c盘空间

继续点下一步

此时系统会显示安装进度条,耐心等待安装完成即可

1.1 Ubuntu Linux 系统安装:
安装完之后然后打开之后就是这个样子

然后点击左上角的新建,然后新建虚拟机
这里有两种类型配置
典型:可以快速部署标准系统,安装linux主流linux发行版本,自动分配CPU核心数、内存和磁盘,无需关注底盘硬件细节,一键生成虚拟机
自定义:这里可以向下兼容旧版(如ESXi 6.7、workstation12),有特殊的硬件、系统安装要求、资源精细化控制
新手选择典型配置:

安装映像:
这里的安装程序光盘映像(iso)(M): 需要下载虚拟机的光盘映像文件,我们这里选择的是ubuntu,可以去官网下载:
桌面版:https://cn.ubuntu.com/download/desktop,可在此下载适合桌面 PC 和笔记本的版本。
服务器版:https://ubuntu.com/download/server,适用于服务器相关场景
rocly的官网下载:https://rockylinux.org/download/
清华大学开源软件镜像站:https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/。
阿里云开源镜像站:https://mirrors.aliyun.com/ubuntu-releases/
ubuntu选择安装光盘映像文件

点击下一步:

这里的磁盘容量可以修改大一点
这里优先选择单文件,除非需频繁迁移虚拟机到FAT32或主机磁盘剩余空间分散

内存为4G两个处理器,网络适配器为NAT

安装完成之后虚拟机会自动打开,会提示选择语言

选择不连接网络会下载快一点

直接安装ubuntu

新手推荐交互安装,图形化引导,适用于单次安装

应用程序选择 “默认集合”,点击 “下一步”

分区选择 “擦除磁盘并安装 Ubuntu”,点击 “下一步”。

设置用户名、密码等信息,点击 “下一步”。

选择上海时区,点击 “下一步”。
检查设置准备安装,点击 “下一步”。
等待安装完成就可以了
1.2 Rocky Linux系统的安装:
创建新的虚拟机步骤:
点击创建虚拟机

给虚拟机命名,选着下载好的镜像文件地址


虚拟磁盘为单个地址,设置磁盘大小

设置内存和处理器,检查网络适配器,这里最好使用NAT

鼠标点击linux系统屏幕,选择install

选择语言类型

点击安装目标位置会自动分区,点击完成
点击网络与主机名,这里看网络是否打开也可以自己设置主机名
点击创建用户,设置用户名跟密码,点击完成




等待下载安装即可

1.3 Xshell远程登录
xshell官网:https://www.xshell.com/zh/free-for-home-school/
使用ip a命令查看本机的ip地址

然后打开ssh点击文件然后新建

输入刚刚查看的ip地址点击连接,然后输入在虚拟机上的用户和密码



2.0 什么是 Shell?
Shell 是用户与操作系统内核之间的桥梁,本质上是一个 命令行解释器(Command-Line Interpreter)。它的核心功能是:
交互接口:接收用户输入的命令,解析后传递给内核执行,并将执行结果返回给用户。
脚本编程:支持编写 Shell 脚本,将多条命令按逻辑组合,实现自动化任务(如批量处理、系统管理等)。
环境管理:提供变量、别名、作业控制等机制,定制用户工作环境。
2.1 常见的 Shell 类型
Bourne Shell(sh)
特点:
语法简洁,兼容性强,几乎所有 Unix/Linux 系统都包含 /bin/sh(通常为其他 Shell 的符号链接,如 bash)。
功能有限,不支持命令补全、数组、复杂流程控制等现代特性。
应用场景:作为基础脚本执行环境(如 POSIX 标准脚本),适合对兼容性要求极高的场景。
2.Bash(Bourne Again Shell,bash)
特点:
完全兼容 sh 语法,扩展了大量功能:命令历史、自动补全、作业控制、别名、数组、条件判断、循环等。
社区支持广泛,文档丰富,是大多数 Linux 发行版(如 Ubuntu、CentOS)的默认 Shell,也曾是 macOS 直到 Catalina 版本的默认 Shell。
应用场景:日常交互、脚本编写(尤其是系统管理脚本),适合大多数用户。
应用场景:日常交互、脚本编写(尤其是系统管理脚本),适合大多数用户。
3.Z Shell(zsh)
特点:
强大补全:支持路径、命令选项、历史记录、拼写纠正等智能补全,可通过插件(如 zsh-autosuggestions)进一步增强。
高度定制:支持主题(如 Oh My Zsh)、插件系统(如语法高亮、Git 集成),适合极客和高级用户。
兼容 bash 语法,同时支持数组、哈希表、协程等高级特性。
应用场景:追求效率和个性化的用户(尤其是 macOS 和 Linux 开发者),自 macOS Catalina 起成为默认 Shell。
Korn Shell(ksh)
特点:
支持高级编程特性(如数组、关联数组、函数递归、协程),性能高效。
在商业 Unix 系统(如 AIX、HP-UX)中广泛使用,部分 Linux 系统也提供 ksh93 版本。
应用场景:需要高性能脚本或复杂逻辑处理的企业环境。
C Shell(csh)/ TENEX C Shell(tcsh)
特点:
语法类似 C 语言(如 if、switch 语句),吸引熟悉 C 的用户。
支持命令别名、历史替换(如 !$ 引用上一条命令参数)、作业控制,但语法复杂且存在设计缺陷(如变量作用域问题)。
应用场景:早期 Unix 系统(如 BSD),目前逐渐被 bash/zsh 取代,仅在特定 legacy 环境中使用。
Fish Shell(fish)
特点:
用户友好:语法简洁(无分号、关键字更直观),支持实时语法高亮、自动建议(根据历史命令预测)、强大的补全界面。
无需配置即可拥有优秀体验,适合新手或追求易用性的用户。
不兼容 bash 语法,脚本功能相对较弱。
应用场景:日常交互,尤其是对美观和易用性要求高的用户。
Shell 的关键系统调用
fork():创建子进程。
execvp():在子进程中执行命令(搜索 $PATH 路径)。
waitpid():父进程等待子进程完成。
read() / fgets():获取用户输入。
strtok():解析输入字符串。
环境变量(export VAR=value):存储变量,影响 Shell 进程行为。
重定向(>、<、>>):输入输出文件操作。
管道(|):连接多个命令,如 ls | grep txt。
后台执行(&):sleep 10 & 后台运行进程。
Shell 脚本(#!/bin/bash):编写自动化任务脚本。
3.0 man命令
help
在 Linux 的 Bash Shell 中,help 是一个内置命令,专门用于查看其他 Shell 内置命令的简要帮助信息。
基本用法:help
例如:help cd
help -k 搜索包含关键字的帮助主题(类似 man -k)
help -d 显示命令的功能描述(不显示具体用法)
help -s 仅显示命令的语法摘要(无详细描述)
注意:help无法显示外部命令,需要改成man
man
man 是 “manual” 的缩写,通过 man 命令可以查看系统中几乎所有命令的帮助手册。
用法如下:
基本格式:man command_name,
例如要查看 ls 命令的帮助文档,输入 man ls,按下回车键后,会进入 man 页面,显示 ls 命令的详细说明,包括命令的功能、选项、参数等信息。
按q键即可退出
man -a # 显示命令在所有章节中的手册(如 printf 可能在章节1和3)
whatis # 显示命令的简要描述及所在章节
man -w # 显示手册页的文件路径
man -k # 搜索所有手册页中包含关键字的描述
man -f # 同 whatis,显示命令的简要描述
man -i # 搜索时忽略大小写
man
直接跳转到指定章节
例如:man 8 systemctl # 直接查看 systemd 的 systemctl 命令手册
type echo # 确认是否为内置命令
内置帮助:
help echo
外置帮助:
man echo # 调用外部命令手册
4.0 linux文件系统目录结构和目录的功能

根目录 /
功能:所有文件系统的起点,其他目录均为其子目录。
关键子目录:
/bin:基础用户命令(如 ls, cp)。
/sbin:系统管理命令(如 ifconfig, reboot)。
/lib:系统库文件(支持 /bin 和 /sbin)。
/boot:启动文件(内核镜像 vmlinuz、GRUB 配置)。
/dev:设备文件(如 /dev/sda 硬盘、/dev/tty 终端)。
/etc:系统配置文件(如 /etc/passwd, /etc/fstab)。
/home:普通用户主目录(如 /home/user)。
/var:可变数据(日志 /var/log、邮件 /var/mail)。
/usr:用户程序和共享库(如 /usr/bin, /usr/lib)。
/tmp:临时文件(重启可能清空)。
/opt:第三方软件(如 Oracle 数据库)。
/srv:服务数据(如网站文件)。
/mnt:临时挂载点(手动挂载设备)。
/media:自动挂载可移动设备(如 USB)。
/proc:虚拟文件系统,动态显示进程和内核信息(如 /proc/cpuinfo)。
/sys:内核与硬件信息(如 /sys/devices)。
/root:超级用户(root)主目录。
-+found:文件系统恢复目录(fsck` 修复文件存放处)。
单一根目录:所有路径从 / 开始,避免多根结构。
静态与动态分离:静态目录(如 /bin)内容稳定,动态目录(如 /var)频繁变化。
etc
功能:存放系统级配置文件,影响全局行为。
关键子目录:
/etc/init.d:System V 初始化脚本(旧版服务管理)。
/etc/systemd/system:systemd 服务单元文件。
/etc/X11:X Window 系统配置。
典型文件:
/etc/passwd:用户账户信息(用户名、UID、主目录等)。
/etc/group:用户组信息。
/etc/fstab:文件系统挂载表。
/etc/hosts:主机名与 IP 映射。
/etc/resolv.conf:DNS 解析配置。
/etc/profile:全局 Shell 环境变量配置
home
功能:普通用户的主目录,每个用户独立子目录(如 /home/alice)。
关键文件:
~/.bashrc:用户级 Bash 配置。
~/.profile:用户登录时执行的脚本。
~/.config:应用程序配置文件(如 ~/.config/gedit)。
权限:默认用户拥有完全权限,其他用户不可访问(除非显式设置)。
var
功能:存储运行时变化的数据(日志、缓存、邮件等)。
关键子目录:
/var/log:系统日志(如 /var/log/syslog, /var/log/auth.log)。
/var/cache:应用程序缓存(如包管理器缓存 /var/cache/apt/archives)。
/var/spool:队列目录(如邮件队列 /var/spool/mail)。
/var/lib应用程序状态数据(如 MySQL 数据库文件 /var/lib/mysql)。
/var/tmp:临时文件(重启后不清空)。
####usr
功能:用户级程序和共享资源,分为多个子目录:
/usr/bin:非必需(如 gcc, python3)。
/usr/sbin:非必需系统管理命令(如 nginx, apache2)。
/usr 和 /usr/lib64`:共享库文件。
/usr/share:共享数据(如文档、图标、字体)。
/usr/local:本地安装的软件(非包管理器安装)。
/usr/src:内核源代码(部分发行版)。
dev
功能:设备文件接口,通过文件操作硬件设备。
关键文件:
/dev/null:空设备(丢弃所有写入数据)。
/dev/zero:提供无限零字节流。
/dev/sda:SCSI/SATA 硬盘设备。
/dev/tty:终端设备。
/dev/random 和 /dev/urandom:随机数生成器。
boot
功能:存放启动相关文件。
关键文件:
vmlinuz:压缩的内核镜像。
initrd.img:初始 RAM 磁盘(加载驱动和模块)。
grub:GRUB 引导加载程序配置目录。
设计意图:独立分区以提高启动可靠性(建议 1GB 以上)。
opt
功能:第三方软件安装目录(非系统包管理器安装)。
典型结构:
/opt/google:Google 软件(如 Chrome)。
/opt/docker:Docker 安装目录。
优势:避免与系统软件冲突,便于卸载。
/tmp 和 /var/tmp
功能:临时文件存储。
区别:
/tmp:所有用户可写,重启后清空(部分系统通过 systemd-tmpfiles 管理)。
/var/tmp:保留更久,重启后不清空。
安全建议:避免存储敏感文件,定期清理。
虚拟与动态目录
/proc
功能:虚拟文件系统,动态显示内核和进程信息。
关键子目录:
/proc/cpuinfo:CPU 信息。
/proc/meminfo:内存信息。
/proc/[pid]:进程详细信息(如 /proc/1234/status)。
用途:实时监控系统状态(如 cat /proc/loadavg 查看负载)。
/sys
功能:内核与硬件信息,基于 sysfs 文件系统。
关键子目录:
/sys/devices:硬件设备树。
/sys/bus:总线信息(如 USB、PCI)。
/sys/class:设备分类(如 net 网络设备)
特殊目录
/run
功能:运行时数据,存储进程 PID 和套接字文件。
子目录:
/run/systemd:systemd 运行时数据。
/run/user/[uid]:用户会话数据(如 wayland 显示服务器套接字)。
特点:基于内存,重启后清空。
/srv
功能:服务数据存储(如 Web 服务器网页、FTP 文件)。
示例:
/srv/www:Apache/Nginx 网页根目录。
/srv/nfs:NFS 共享目录
5.0 文件操作常见的命令和文件夹常见操作和命令(多练习)
touch:创建文件
touch [选项] 文件名
| 选项 | 功能说明 | 示例 |
|---|---|---|
-a |
仅更新文件的访问时间(atime) |
touch -a file.txt |
-m |
仅更新文件的修改时间(mtime) |
touch -m file.txt |
-t |
指定时间戳(格式:YYYYMMDDhhmm.ss),精确到毫秒 |
touch -t 202504161530.00 file |
-c |
不创建文件,仅尝试更新时间戳(若文件不存在则无操作) | touch -c non_existent_file |
-r |
使用参考文件的时间戳(atime 和 mtime)更新目标文件 |
touch -r ref.txt target.txt |
-d |
使用自然语言时间字符串(如 "2025-04-16 15:30")设置时间戳 | touch -d "2025-04-16 15:30" file |
touch file_{1..5}.txt # 批量创建 file_1.txt 到 file_5.txt
cat 主要用于:
1.查看文件内容:快速输出文件全文到终端。
2.合并文件:将多个文件内容按顺序拼接成新文件。
3.创建/追加文件:通过重定向生成新文件或向现有文件添加内容。
4.格式化输出:显示行号、特殊字符(如制表符、换行符)等
| 选项 | 功能说明 | 示例 |
|---|---|---|
-A 或 --show-all |
显示所有不可见字符(如制表符 ^I、行尾 $) |
cat -A file.txt |
-n 或 --number |
为所有行添加行号(包括空行) | cat -n log.txt |
-b 或 --number-nonblank |
仅对非空行编号 | cat -b config.txt |
-s 或 --squeeze-blank |
合并连续空行为一个空行 | cat -s article.txt |
-E 或 --show-ends |
在每行末尾显示 $ 符号 |
cat -E data.csv |
-T 或 --show-tabs |
将制表符显示为 ^I |
cat -T script.sh |
-v 或 --show-nonprinting |
显示不可打印字符(如退格符 ^H) |
cat -v raw_data.txt |
cat /etc/passwd # 查看系统用户配置文件
cat -n error.log # 定位日志中的问题行
cat file1.txt file2.txt > combined.txt # 合并为 combined.txt
cat additional.txt >> existing.txt # 将 additional.txt 追加到 existing.txt
cat > newfile.txt # 输入内容后按 Ctrl+D 保存
cat template.txt > report.txt # 复制 template.txt 内容到 report.txt
cat -s long_text.txt # 合并多余空行,提升可读性
cat file_{1..3}.log # 依次显示 file_1.log 到 file_3.log 的内容
rm: 永久删除文件或目录 的命令
rm [选项] 文件或目录
| 选项 | 功能说明 | 示例 |
|---|---|---|
-f 或 --force |
强制删除,忽略不存在的文件、无权限提示及确认请求 | rm -f file.txt |
-i 或 --interactive |
删除前逐一确认(默认交互模式) | rm -i file.txt |
-r/-R 或 --recursive |
递归删除目录及其子目录和文件 | rm -r dir/ |
-v 或 --verbose |
显示删除过程的详细信息 | rm -v *.log |
-I 或 --ignore-missing |
忽略不存在的文件,避免因文件缺失中断操作 | rm -I file1 file2 |
--preserve-root |
禁止删除根目录 /(默认启用,需显式关闭) |
rm --no-preserve-root / |
rm file.txt # 直接删除(无确认)
rm -i file.txt # 删除前确认
rm *.tmp # 删除所有 .tmp 文件
rm file_{1..5}.log # 删除 file_1.log 到 file_5.log
rmdir empty_dir # 仅删除空目录
rm -r dir/ # 递归删除目录及内容
rm -rf dir/ # 强制递归删除(慎用!)
rm -rf .hidden_dir/ # 删除以 . 开头的隐藏目录
sed:是用于 非交互式文本处理 的核心工具,支持替换、删除、插入、打印等操作。
sed [选项] '脚本命令' 输入文件
sed 's/apple/orange/' file.txt # 替换每行第一个 "apple" 为 "orange"
sed 's/apple/orange/g' file.txt # 全局替换所有 "apple"
sed 's/[0-9]\+/NUM/g' file.txt # 将所有数字替换为 "NUM"
sed '3d' file.txt # 删除第3行
sed '/^#/d' file.sh # 删除以 # 开头的注释行
sed '//d' file.txt # 删除所有空行
正则表达式元字符
| 字符 | 含义 | 示例 |
|---|---|---|
^ |
行首 | /^root/ 匹配以 root 开头的行 |
$ |
行尾 | /end$/ 匹配以 end 结尾的行 |
. |
任意单字符 | /s.d/ 匹配 "sad" 或 "sed" |
* |
前导字符零次或多次 | /a*/ 匹配 "a", "aa", "aaa" |
[] |
字符集合 | /[0-9]/ 匹配数字 |
\ |
转义字符 | /\*/ 匹配 "*" |
chmod :赋予权限
Linux 文件权限分为 3 类用户 和 3 种权限:
用户类别:
u(User):文件所有者
g(Group):所属组用户
o(Other):其他用户
a(All):所有用户(默认等价于 ugo)
权限类型:
r(Read):读取文件内容或列出目录内容(需配合 x 权限)
w(Write):修改文件内容或创建/删除目录内文件(需配合 x 权限)
x(Execute):执行文件或进入目录
chmod [选项] 模式 文件/目录
| 选项 | 作用 | |
|---|---|---|
-R |
递归修改目录及其子内容权限 | |
-c |
仅显示实际修改的权限变化 | |
-v |
显示详细操作过程 | |
--reference |
将权限设置为参考文件的权限 | |
| 通过 用户类别+操作符+权限 的格式操作: |
chmod [ugoa][+-=][rwx] 文件
chmod u+x script.sh # 给所有者添加执行权限
chmod g-w data.txt # 移除所属组写权限
chmod a=rwx /tmp # 所有用户设为 rwx
用 八进制数 表示权限(r=4, w=2, x=1, 无权限=0):
三位数:分别对应 u、g、o 的权限值
chmod 755 file # u: rwx (4+2+1), g/o: rx (4+1)
chmod 644 file # u: rw-, g/o: r--
chown:修改文件或目录的 所有者(用户)。
chown [选项] 用户名[:组名] 文件或目录
chgrp:修改文件或目录的 所属组。
chgrp [选项] 组名 文件或目录
| 选项 | 功能说明 | 示例 |
|---|---|---|
-R 或 --recursive |
递归修改目录及其子目录下所有文件的所有者/所属组 | chown -R user:group dir/ |
-c 或 --changes |
仅显示实际修改的权限变化 | chgrp -c group file.txt |
-v 或 --verbose |
显示详细操作过程 | chown -v user file.txt |
--reference=REF |
将目标文件权限设置为参考文件 REF 的权限 |
chown --reference=config file |
chown user1 file.txt # 将文件所有者改为 user1
chown -R user2:group2 dir/ # 递归修改目录所有者及所属组
sudo chown -R $(whoami):$(whoami) /path/to/imported/data
chgrp config /etc/app.conf
chgrp logs /var/log/app.log
chown user:group file.txt # 同时修改所有者和所属组
chown :group file.txt # 仅修改所属组(需配合 `chgrp` 更清晰)
ls:是 Linux 中 最基础的目录内容查看命令
ls [选项] [目录/文件]...
| 选项 | 功能说明 | 示例 |
|---|---|---|
-a 或 --all |
显示所有文件(包括隐藏文件,以 . 开头) |
ls -a |
-l 或 --long |
长格式显示(权限、所有者、大小、时间等) | ls -l |
-h 或 --human |
与 -l 配合,以人类可读格式显示大小(如 K/M/G) |
ls -lh |
-R 或 --recursive |
递归列出子目录内容(慎用,大目录易卡顿) | ls -R /project |
-t 或 --time |
按修改时间排序(最新文件在前) | ls -lt |
-S 或 --size |
按文件大小排序(从大到小) | ls -lS |
-r 或 --reverse |
反向排序(配合 -t/-S 使用) |
ls -lr |
-d 或 --directory |
仅显示目录本身(不展开内容) | ls -d */ |
-i 或 --inode |
显示文件的 inode 编号 | ls -li |
ls -d */ # 列出当前目录下的所有子目录
ls filename # 若存在则显示名称,否则报错
ls -l /etc/passwd # 查看系统配置文件权限及所有者
cd:是 Linux 中 切换工作目录 的核心命令
cd [目录路径]
cd ~ # 等效于 cd /home/用户名
cd # 不带参数默认返回主目录
cd .. # 返回上一级目录
cd ../../ # 返回上两级目录
cd Documents # 进入当前目录下的 Documents 子目录
cd - # 切换到上一次访问的目录(如:/home → /var → 再次 cd - 返回 /home)
cd / # 无论当前目录在哪,直接切换到根目录
mkdir:创建目录 mkdir -p 创建多个目录
mkdir dirname{1..5} # 批量创建dirname1到dirname5
root@ubuntu24:~# mkdir /dir1/dir2/dir3
mkdir: 无法创建目录 "/dir1/dir2/dir3": 没有那个文件或目录
root@ubuntu24:~# mkdir /dir1/dir2/dir3 -p
查看创建的目录
root@ubuntu24:~# ls /dir1/dir2/
dir3
cp:是 Linux 中 复制文件/目录 的核心命令
cp [选项] 源路径 目标路径
cp -a /var/www/html /backup/2024_site # 复制目录及所有子内容
mv:是 Linux 中 移动文件/目录或重命名 的核心命令
mv [选项] 源路径 目标路径
| 选项 | 功能说明 | 示例 |
|---|---|---|
-i |
交互式操作,覆盖前询问确认 | mv -i file.txt backup/ |
-f |
强制覆盖,不提示 | mv -f newfile existing/ |
-v |
显示详细操作过程 | mv -v *.log /var/log |
-n |
不覆盖已存在文件 | mv -n updated.txt old/ |
mv /path/to/file /dest/ # 移动文件到目标目录
mv oldname.txt newname.txt # 原地改名
mv src_dir /backup/ # 移动目录到目标位置
mv file1.txt file2.log /dest/ # 同时移动多个文件
mv *.txt /backup/ # 移动所有 .txt 文件
du,df
功能定位
| 命令 | 全称 | 核心功能 |
|---|---|---|
du |
Disk Usage | 递归统计文件/目录的磁盘占用,显示具体文件或子目录的空间分配情况 |
df |
Disk Free | 查看文件系统整体空间使用情况,包括已用、可用、挂载点等宏观信息 |
| du [选项] [目录/文件] | ||
| 选项 | 功能说明 | 示例 |
| --------------- | ---------------------------------- | -------------------------- |
-h |
人类可读格式(如 KB/MB/GB) | du -h /var/log |
-s |
仅显示总计(汇总模式) | du -sh /home |
-a |
显示所有文件和目录的详细占用 | du -a /etc |
--max-depth=N |
限制递归深度(N=1 显示一级子目录) | du -h --max-depth=1 /opt |
| df [选项] [挂载点/设备] | ||
| 选项 | 功能说明 | 示例 |
| ---- | -------------------------------------------- | --------- |
-h |
人类可读格式 | df -h |
-T |
显示文件系统类型(如 ext4/xfs) | df -T / |
-i |
显示 inode 使用情况(非磁盘块) | df -i |
-a |
显示所有文件系统(包括虚拟文件系统如 /proc) | df -a |
| 区别 | ||
| 维度 | du |
df |
| :----------: | :----------------------------: | :--------------------------------------: |
| 数据来源 | 遍历文件/目录逐层统计 | 直接读取文件系统元数据 |
| 统计范围 | 指定目录或文件 | 整个文件系统 |
| 实时性 | 高(反映实际文件占用) | 中等(可能滞后于文件删除操作) |
| 典型场景 | 定位大文件/目录、清理磁盘 | 快速查看磁盘余量、监控文件系统健康状态 |
| 特殊处理 | 不统计已删除但被进程占用的文件 | 统计已分配但未释放的空间(如被删除文件) |
# 查看当前目录下各子目录大小(按降序排列)
du -h --max-depth=1 | sort -hr
# 查找 /var 目录下最大的 10 个文件
du -a /var | sort -n -r | head -n 10
# 每天记录根目录使用情况
df -h / >> /var/log/disk_usage.log
# 检查 inode 使用率(预防小文件过多导致空间耗尽)
df -i /
tail:是 Linux 中 显示文件末尾内容 的核心命令
tail [选项] [文件]
| 参数 | 功能说明 | 示例 |
|---|---|---|
-n NUM |
显示文件末尾 NUM 行(默认 10 行) |
tail -n 20 log.txt |
-f |
实时追踪文件新增内容(持续输出) | tail -f app.log |
-c NUM |
显示文件末尾 NUM 个字节 |
tail -c 500 largefile.dat |
-q |
静默模式(不显示文件名) | tail -q file1 file2 |
-F |
追踪文件并自动处理轮换(文件删除/重命名后重新打开) | tail -F /var/log/messages |
| 功能 | 命令示例 | |
| :------------------: | :---------------------------------: | |
| 显示最后 15 行 | tail -n 15 file.txt |
|
| 实时监控日志 | tail -f /var/log/syslog |
|
| 追踪轮换日志 | tail -F /var/log/nginx/access.log |
|
| 静默显示最后 10 行 | tail -q -n 10 file.txt |
|
结合 grep 过滤错误 |
`tail -f app.log | |
| pwd: Linux 中 显示当前工作目录绝对路径 的核心命令 | ||
| pwd [选项] | ||
| 选项 | 功能说明 | 示例 |
| ----------- | ------------------------------------------------------------ | --------------- |
-L |
显示逻辑路径(包含符号链接的路径,依赖 $PWD 环境变量) |
pwd -L |
-P |
显示物理路径(解析所有符号链接,通过系统调用 getcwd() 获取真实路径) |
pwd -P |
--help |
显示帮助信息 | pwd --help |
--version |
显示命令版本信息 | pwd --version |
ln -s /var/log /tmp/mylog # 创建符号链接
cd /tmp/mylog
pwd -L # 输出:/tmp/mylog
pwd -P # 输出:/var/log
clear:清屏
grep:是 Linux 系统中强大的文本搜索工具,支持正则表达式匹配,广泛用于日志分析、代码调试和文本处理
grep [选项] 模式 [文件名]
| 参数 | 说明 |
|---|---|
-i |
忽略大小写(如 grep -i "hello" 匹配 "Hello" 和 "HELLO")2****4 |
-v |
反向匹配,显示不包含模式的行(如 grep -v "error")2****4 |
-n |
显示匹配行的行号(便于定位)2****3 |
-c |
仅统计匹配行数(如 grep -c "error" log.txt)4 |
-r |
递归搜索目录下的所有文件4 |
-w |
精确匹配整个单词(如 grep -w "grep" 不匹配 "grepper")3****4 |
| 基础元字符 |
- ^:行首(如 ^grep 匹配以 "grep" 开头的行)
- $:行尾(如 grep$ 匹配以 "grep" 结尾的行)
- .:匹配任意非换行符字符(如 gr.p 匹配 "grp" 或 "grip")
- :匹配前一个字符零次或多次(需结合 -E 使用,如 a)
- []:字符范围(如 [A-Z] 匹配大写字母)
扩展正则表达式(需 -E 或 egrep) - +:匹配前一个字符一次或多次(如 [a-z]+able 匹配 "enable")
- ?:匹配前一个字符零次或一次
- |:逻辑或(如 cat|dog 匹配含 "cat" 或 "dog" 的行)
grep -i "KeepAlive" /etc/httpd.conf # 忽略大小写检查配置项
ps aux | grep "ssh" # 查找 SSH 进程[8](@ref)
grep -c "error" access.log # 统计错误日志数量[4](@ref)
find:是 Linux 系统中功能强大的文件搜索工具,支持通过文件名、类型、大小、时间等条件精准定位文件,并可直接对搜索结果执行操作
find [搜索路径] [匹配条件] [操作]
| 选项 | 说明 | 示例 |
|---|---|---|
-name |
按文件名精确匹配(区分大小写) | find /home -name "file.txt" |
-iname |
按文件名匹配(不区分大小写) | find . -iname "*.jpg" |
-type |
按文件类型匹配(f文件,d目录,l符号链接) |
find /var -type d |
-size |
按文件大小匹配(支持 c字节、kKB、MMB、GGB) |
find . -size +100M |
-mtime |
按修改时间匹配(-n:n天内,+n:n天前) |
find /backup -mtime +7 |
-exec |
对匹配文件执行命令({}代表文件,\;结束) |
find . -name "*.tmp" -exec rm {} \; |
-delete |
直接删除匹配文件(慎用) | find /tmp -name "*.bak" -delete |
find /etc -name "*.conf" # 查找所有配置文件
find ~ -iname "temp*" # 家目录中名称含 "temp" 的文件(不区分大小写)
find /etc -name "*.conf" # 查找所有配置文件
find ~ -iname "temp*" # 家目录中名称含 "temp" 的文件(不区分大小写)
find /var -type d # 查找所有目录
find . -type l # 查找符号链接
find / -size +500M # 查找系统中大于500MB的文件
find . -size -10k # 当前目录中小于10KB的文件
tree:查看目录结构 例如: tree /var/spool
root@ubuntu24:~# tree /var/spool
/var/spool
├── anacron
│
├── cron.daily
│
│
├── cron.monthly
└── cron.weekly
├── cron
│
└── crontabs
├── cups
│
└── tmp
│
usr
var
└── cups-dbus-notifier-lockfile
├── mail -> ../mail
└── rsyslog
head:是 Linux 系统中用于查看文件开头的常用命令,默认显示文件的前 10 行内容
head [选项] [文件名]
| 参数 | 说明 | 示例 |
|---|---|---|
-n N |
显示前 N 行(N 为正整数) |
head -n 5 file.txt |
-c N |
显示前 N 个字节(支持负数,如 -c -5 表示排除最后 5 字节) |
head -c 100 file.log |
-q |
隐藏文件名(处理多个文件时有效) | head -q file1.txt file2.txt |
-v |
强制显示文件名(即使单个文件也显示) | head -v file.txt |
--help |
显示帮助信息 | head --help |
head file.txt # 默认显示前 10 行
head -n 5 file.txt # 显示前 5 行
head -c 50 file.log # 显示前 50 字节内容
head -c -100 file.log # 显示除最后 100 字节外的内容
head file1.txt file2.txt # 每个文件前 10 行,默认显示文件名
head -q file1.txt file2.txt # 隐藏文件名,仅显示内容
tac:是 Linux 系统中用于逆序输出文件内容的命令,其名称是 cat 的倒写
tac [选项] [文件名...]
| 选项 | 说明 | 示例 |
|---|---|---|
-b |
在每行输出前插入空行(适用于分隔不同文件内容) | tac -b file1.txt file2.txt |
-r |
按正则表达式匹配行分隔符(默认按换行符分割) | tac -r '分隔符' file.txt |
-s |
指定自定义分隔符(默认为换行符) | tac -s ',' file.csv |
-h |
显示帮助信息 | tac --help |
tac /var/log/syslog | grep "error" # 逆序搜索错误日志
tac file1.txt file2.txt > merged_reverse.txt
cat file.txt | tac # 完全逆序显示
tac fileA.txt fileB.txt # 先输出 fileB 的逆序,再输出 fileA 的逆序
tar: 是 Linux 系统中用于打包、压缩和解压归档文件的核心工具,支持多种压缩算法(如 gzip、bzip2、xz),广泛应用于备份、传输和存储管理
tar [选项] [归档文件名] [文件/目录]
| 选项 | 说明 | 示例 |
| ----------- | ------------------------ | ----------------------------------------- |
| `-c` | 创建新的归档文件 | `tar -cvf archive.tar file1` |
| `-x` | 解压归档文件 | `tar -xvf archive.tar` |
| `-t` | 列出归档文件内容 | `tar -tvf archive.tar` |
| `-v` | 显示详细操作信息(可选) | `tar -cvvf archive.tar` |
| `-f` | 指定归档文件名(必选) | `tar -cvf backup.tar` |
| `-z` | 使用 gzip 压缩/解压 | `tar -czvf file.tar.gz` |
| `-j` | 使用 bzip2 压缩/解压 | `tar -cjvf file.tar.bz2` |
| `-J` | 使用 xz 压缩/解压 | `tar -cJvf file.tar.xz` |
| `-C` | 解压到指定目录 | `tar -xzvf file.tar.gz -C /tmp` |
| `--exclude` | 排除指定文件或目录 | `tar -czvf backup.tar.gz --exclude=*.log` |
```cpp
tar -czvf project.tar.gz src/ config/ # 压缩 src 和 config 目录为 gzip 格式
tar -cjvf logs.tar.bz2 *.log # 压缩所有 .log 文件为 bzip2 格式
tar -xzvf backup.tar.gz # 解压 gzip 压缩包
tar -xJvf data.tar.xz # 解压 xz 压缩包
tar -tvf archive.tar.gz # 列出压缩包内文件列表
6.0 总结文件元数据相关的知识点,包含硬链接和软连接的区别等知识
文件元数据(Metadata)
查看文件元数据的命令
ls -l:显示文件的基本元数据,像文件权限、所有者、所属组、文件大小、修改时间等。
stat:提供更详尽的文件元数据,除基本信息外,还包含文件的 inode 号、访问时间、更改时间等。
文件元数据是关于文件的描述性信息,存储在文件系统的 inode(索引节点)中,具体包含以下常见信息:
文件所有者(User):指明文件归哪个用户所有,影响文件的访问权限。
文件所属组(Group):文件所属的用户组,用于权限管理,同组用户可能具有不同的访问权限。
文件权限(Permissions):分为读(r)、写(w)、执行(x)权限,分别针对文件所有者、所属组和其他用户设置。
文件大小(Size):以字节为单位表示文件所占用的存储空间。
文件类型(Type):如普通文件、目录、符号链接、设备文件等。
修改时间(mtime):文件内容最后一次被修改的时间。
访问时间(atime):文件最后一次被访问(读取)的时间。
状态改变时间(ctime):文件的元数据(如权限、所有者等)最后一次被改变的时间。
可以使用 ls -l 命令查看文件的部分元数据信息,使用 stat 命令查看更详细的文件元数据。
硬链接和软连接的区别等知识
硬链接(Hard Link)
硬链接是指向同一个 inode 的多个文件名。当创建硬链接时,实际上是为文件增加了一个新的文件名,它们共享相同的文件数据和 inode 信息。
特点:
1.与原文件具有相同的 inode 号,即指向同一个文件实体。
2.无法跨文件系统创建硬链接,因为不同文件系统有独立的 inode 编号。
3.删除原文件,只要还有其他硬链接存在,文件数据依然保留,不影响其他硬链接的访问。
4.硬链接不能链接目录,只能链接普通文件。
5.创建命令:使用 ln 命令创建硬链接,例如 ln oldfile newfile,其中 oldfile 是原文件,newfile 是新创建的硬链接。
软连接(符号链接,Symbolic Link)
软连接是一个包含指向目标文件或目录路径的特殊文件。访问软连接时,系统会根据其中的路径信息找到目标文件或目录。
特点:
1.有自己独立的 inode 号,与目标文件的 inode 不同。
2.可以跨文件系统创建,因为它只是存储了一个路径指向。
3.删除目标文件后,软连接成为 “无效链接”(也称为 “断链”),访问时会提示文件或目录不存在。
4.可以链接文件或目录。
5.创建命令:使用 ln -s 命令创建软连接,例如 ln -s oldfile newlink,其中 oldfile 是目标文件,newlink 是新创建的软连接。
区别:
| 比较项 | 硬链接 | 软连接 |
|---|---|---|
| inode 号 | 与原始文件共享同一个 inode 号 | 有自己独立的 inode 号 |
| 跨越文件系统 | 不可以 | 可以 |
| 原始文件删除后 | 仍然有效 | 变为无效链接 |
| 元数据 | 与原始文件相同 | 可以和原始文件不同 |
7.0 总结开放系统互联OSI模型,每层作用及对应的协议

第7层 应用层
作用:是 OSI 模型的最高层,直接为用户的应用程序提供服务,如文件传输、电子邮件、远程登录、网页浏览等。
常见协议:HTTP(超文本传输协议,用于网页浏览)、FTP(文件传输协议)、SMTP(简单邮件传输协议,用于发送邮件)、POP3(邮局协议版本 3,用于接收邮件)、IMAP(互联网邮件访问协议)、Telnet(远程登录协议)、SNMP(简单网络管理协议)等。
第6层 表示层
作用:对数据进行转换、加密和压缩等处理,确保不同系统之间能够正确理解和处理数据的表示形式。
常见协议:JPEG(图像压缩标准)、MPEG(音视频压缩标准)、SSL/TLS(安全套接层 / 传输层安全,用于数据加密)、ASCII(字符编码标准)等。
第5层 会话层:
作用:负责建立、管理和终止应用程序之间的会话连接,包括会话的建立、同步和释放等功能。
常见协议:NetBIOS(网络基本输入输出系统,用于局域网中会话管理)、ZIP(区域信息协议,用于 AppleTalk 网络中会话管理)等。
第4层 传输层:
作用:为源主机和目的主机的应用进程之间提供端到端的可靠或不可靠的数据传输服务,处理数据包的分段、重组、流量控制和差错恢复等。
常见协议:TCP(传输控制协议,提供可靠的面向连接的服务)、UDP(用户数据报协议,提供不可靠的无连接服务)等。
第3层 网络层:
作用:负责将数据从源节点通过网络路由到目的节点,进行逻辑地址(如 IP 地址)的寻址和路由选择,实现不同网络之间的互联。
常见协议:IP(网际协议)、ICMP(互联网控制报文协议,用于网络诊断)、IGMP(互联网组管理协议,用于多播管理)、ARP(地址解析协议,将 IP 地址映射为 MAC 地址)、RARP(逆地址解析协议,将 MAC 地址映射为 IP 地址)等。
第2层 数据链路层:
作用:在物理层提供的比特流服务基础上,将比特组合成帧,进行差错控制、流量控制和链路管理,确保数据在相邻节点间可靠传输。
常见协议:以太网协议(Ethernet)、PPP(点到点协议,用于拨号上网等)、HDLC(高级数据链路控制协议,常用于广域网)等。
第1层 物理层:
作用:是 OSI 模型的最底层,负责在物理介质(如电缆、光纤、无线)上传输原始的比特流,定义了物理设备的电气、机械、功能和规程特性,确保数据能在物理介质上正确传输。
常见协议:EIA/TIA-232(串口通信标准)、RJ45(以太网接口标准)、IEEE 802.3(以太网物理层标准)等。
8.0 总结TCP包头结构,TCP三次握手,4次挥手。
8.1 TCP包头结构

TCP包头结构(固定部分20字节 + 选项)
- 源端口(Source Port)
长度:16位(2字节)
作用:标识发送方的应用程序端口号。
示例:HTTP服务通常使用80端口。 - 目的端口(Destination Port)
长度:16位(2字节)
作用:标识接收方的应用程序端口号。 - 序列号(Sequence Number)
长度:32位(4字节)
作用:标识数据段的第一个字节的序号,用于数据重组和确认机制。
示例:建立连接时,初始序列号(ISN)随机生成。 - 确认号(Acknowledgment Number)
长度:32位(4字节)
作:当ACK标志置1时有效,表示接收方期望收到的下一个字节的序号。
规则:确认号 = 收到的序列号 + 数据长度 + 1。 - 数据偏移(Data Offset)
长度:4位
作用:指示TCP头部长度(以4字节为单位),最小值为5(20字节),最大值为15(60字节)。 - 保留(Reserved)
长度:4位(原RFC 793为6位,部分位被后续扩展占用)
作用:保留未使用,通常置0。部分位被用于扩展功能(如ECN)。 - 控制标志(Control Flags)
长度:8位(原RFC 793为6位,扩展后新增CWR和ECE)
作用:控制连接状态和数据传输行为。各标志位如下:
URG(紧急指针有效):指示紧急数据需优先处理。
ACK(确认号有效):表示确认号字段有效。
PSH(推送数据):要求接收方立即将数据提交应用层。
RST(重置连接):强制终止异常连接。
SYN(同步序列号):发起连接请求。
FIN(结束连接):正常关闭连接。
CWR(拥塞窗口减少):发送方降低发送速率(ECN相关)。
ECE(ECN回显):指示网络拥塞(ECN相关)。 - 窗口大小(Window Size)
长度:16位(2字节)
作用:接收方通告的可用缓冲区大小,用于流量控制。单位是字节。 - 校验和(Checksum)
长度:16位(2字节)
作用:检测头部和数据在传输中的错误,覆盖伪头部、TCP头部和数据。 - 紧急指针(Urgent Pointer)
长度:16位(2字节)
作用:当URG标志置1时有效,指向紧急数据末尾的偏移量。 - 选项(Options)
长度:可变(最多40字节)
作用:扩展功能,常见选项包括:
MSS(最大报文段长度):协商数据传输的最大长度。
SACK(选择性确认):允许确认不连续的数据块。
时间戳:计算往返时间(RTT)和防止序列号回绕。 - 填充(Padding)
作用:确保TCP头部长度为4字节的整数倍,填充值为0。
关键字段详解
序列号与确认号
序列号确保数据有序传输,确认号实现可靠交付(通过ACK机制)。
示例:若发送方发送序列号为100、长度为20的数据,接收方回复的确认号为121。
控制标志
SYN和FIN:三次握手(SYN, SYN-ACK, ACK)和四次挥手(FIN-ACK)。
RST:强制终止连接(如端口未开放或异常断开)。
窗口大小
动态调整发送速率,避免接收方缓冲区溢出(滑动窗口机制)。
选项字段
MSS协商:通常在三次握手时交换,避免分片
时间戳:用于高带宽网络中的序列号回绕保护和精确RTT计算
8.2 三次握手:

初始阶段,客户端是CLOSE状态,服务端需要监听服务所在端口,因此处于LISTEN状态
客户端发来SYN分组,到达了服务器,此时客户端会从CLOSE状态立即变为SYN-SENT状态
SYN到达服务端,在服务器内核中,会将"根据SYN分组内容创建的内核数据结构实例"放入SYN队列中,同时会
发送一个SYN+ACK数据分组给客户端,此时服务端从LISTEN状态变为SYN-RECEIVED状态
客户端收到SYN+ACK分组,会给服务端发送ACK分组,并从SYN-SENT状态变为ESTABLISTED状态
服务端收到ACK分组后会从SYN-RECEIVED状态转换为ESTABLISHED状态,但实际在内核中,会把之前放入
SYN队列中的数据结构实例移出,放入ACCEPT队列中,然后由应用程序调用accept方法从ACCEPT队列中将该
数据结构实例取出,并返回一个新的文件描述符,供应用程序进行后续数据处理和通信。该文件描述符对应的是
一个新的 socket,通过它,应用程序可以继续与客户端进行数据收发。
8.3 四次挥手:

当客户端决定关闭连接时,它会发送一个 FIN(Finish)包给服务器,表示它不再有数据要发送。发送 FIN
包后,客户端的连接状态从 ESTABLISHED 变为 FIN-WAIT-1,等待服务器的确认。
服务器收到客户端的 FIN 包后,向客户端发送一个 ACK 包,确认收到 FIN。发送 ACK 后,服务器的状态
从 ESTABLISHED 变为 CLOSE-WAIT,表示它知道客户端已停止发送数据,但服务器可能还有数据要发送。
当服务器确认不再有数据需要发送时,它会向客户端发送一个 FIN 包,请求关闭连接。发送 FIN 后,服务器
的状态从 CLOSE-WAIT 变为 LAST-ACK,等待客户端的最后确认。
客户端收到服务器的 FIN 包后,向服务器发送一个 ACK 包 进行确认
发送完 ACK 包后,客户端的状态变为 TIME-WAIT,并进入一个计时等待阶段(2*MSL),以确保服务器能够
收到这个 ACK。
如果在 TIME-WAIT 定时器超时后未收到服务器的重传请求,客户端最终进入 CLOSED 状态,正式关闭连
接
9.0 总结主机到主机的包传递过程。
应用层
数据生成:应用程序(如浏览器、邮件客户端)生成原始数据(如HTTP请求、文件内容)。
协议封装:应用层数据通过传输层接口(如Socket API)传递,触发TCP连接建立或直接发送UDP数据
传输层
应用层数据传递给传输层,传输层协议(如 TCP 或 UDP)会为数据添加传输层头部。TCP 会为数据建立可靠的连接,进行分段、排序和确认等操作;UDP 则提供无连接的简单数据传输服务,主要用于对实时性要求高但对数据准确性要求相对较低的应用,如音频视频流。添加头部后的数据包称为段(TCP)或用户数据报(UDP)。
网络层
IP封装:TCP段被封装为IP数据包,添加IP头部(源/目标IP、TTL、校验和等)。
路由选择:
同网段:直接通过ARP解析目标MAC地址,通过交换机传输。
跨网段:主机将数据包发送至默认网关(路由器),路由器根据路由表选择下一跳地址
数据链路层
帧封装:IP数据包被封装为数据帧,添加源/目标MAC地址。
ARP解析:若目标MAC未知,主机发送ARP广播请求,目标主机回复ARP应答。
物理层
比特流传输:数据帧转换为电信号或光信号,通过物理介质(网线、光纤)传输到主机
中间设备转发:
如果数据包需要经过多个网络节点(如路由器、交换机),这些中间设备会根据其自身的功能和配置对数据包进行处理。路由器在网络层根据 IP 地址进行路由选择和转发,交换机在数据链路层根据 MAC 地址进行帧的转发。
目的主机接收处理:
当数据包到达目的主机时,会从物理层开始逐层解封装。物理层将物理信号转换为数据帧,数据链路层检查帧的完整性并去除帧头部和尾部,将 IP 数据报传递给网络层。网络层检查 IP 头部,根据目的 IP 地址将数据报传递给传输层。传输层检查段或用户数据报的头部,根据端口号将数据传递给相应的应用层程序。应用层程序接收到数据后,进行相应的处理,如显示网页内容、保存文件等。
10.0 总结IP地址 A, B, C, D 类,并解析IP地址的组成
IP 地址是互联网协议地址,用于在网络中标识设备的位置。根据网络规模和应用场景的不同,IP 地址分为 A、B、C、D 等几类,以下是相关总结及 IP 地址组成的解析:
IP 地址的分类
A 类地址
范围:1.0.0.0 - 126.255.255.255。
特点:首位为 0,网络号占 1 个字节,主机号占 3 个字节。A 类地址用于大型网络,每个网络可容纳多达224-2台主机。
B 类地址
范围:128.0.0.0 - 191.255.255.255。
特点:前两位为 10,网络号占 2 个字节,主机号占 2 个字节。适用于中等规模网络,每个网络最多可包含216-2台主机。
C 类地址
范围:192.0.0.0 - 223.255.255.255。
特点:前三位为 110,网络号占 3 个字节,主机号占 1 个字节。常用于小型网络,每个网络能容纳28-2台主机。
D 类地址
范围:224.0.0.0 - 239.255.255.255。
特点:前四位为 1110,D 类地址用于多播组,不用于标识单个主机,而是用于标识一组主机。
IP 地址的组成
IP 地址由网络号和主机号两部分组成。
网络号:用于标识设备所在的网络,同一网络中的设备具有相同的网络号。路由器等网络设备根据网络号来转发数据包,以确定数据要发送到哪个网络。
主机号:用于区分同一网络中的不同设备,在一个网络内部,每个设备的主机号必须是唯一的。
例如,对于 IP 地址 192.168.1.100,假设它是一个 C 类地址,那么 192.168.1 就是网络号,标识了该设备所在的特定网络;而最后的 100 就是主机号,用于在这个网络中唯一地标识该设备。子网掩码可以用来区分 IP 地址中的网络号和主机号,通过将 IP 地址与子网掩码进行逻辑与运算,可得到网络号。
11.0 201.222.200.111/18计算主机数?子网掩码?说明计算方法。
根据IP地址的子网掩码,可以确定网络地址和主机地址的范围。子网掩码是一个32位的二进制数,其中前面的连续位是网络地址,后面的连续位是主机地址。
子网掩码
给定IP地址:11.0.201.222.200.111/18
将子网掩码转换为二进制:
18个1,后面是14个0:11111111.11111111.11000000.00000000
将其转换为十进制形式,子网掩码为255.255.192.0。
主机数
根据子网掩码的二进制,可以确定网络地址和主机地址的范围:
主机数的计算方法是根据子网掩码中 0 的位数来确定的。在这个例子中,子网掩码后 14 位为 0,所以主机数为214-2=16382
所以,该子网的主机数是16382个
子网掩码:255.255.192.0
12.0 当A(10.0.1.1/16)与B(10.0.2.2/24)通信,A如何判断是否在同一个网段?A和B能否通信?
A 判断是否在同一网段的方法
要判断两个 IP 地址是否在同一网段,需要将 IP 地址和子网掩码进行逻辑与运算,得到网络地址,然后比较两个网络地址是否相同。若相同,则在同一网段;若不同,则不在同一网段。具体步骤如下
A和B是否在同一个网段可以通过比较它们的网络地址和子网掩码来判断。
A的IP地址是10.0.1.1/16,子网掩码是255.255.0.0,转换为十进制为:
10.0.1.1 00001010.00000000.00000001.00000001。
255.255.0.0 11111111.11111111.00000000.00000000
B的IP地址是10.0.2.2/24,子网掩码是255.255.255.0,转换为点分十进制形式为
10.0.2.2 00001010.00000000.00000010.00000010。
255.255.255.0 11111111.11111111.11111111.00000000
进行逻辑与运算得到网络地址:
A 的网络地址:00001010.00000000.00000001.00000001与11111111.11111111.00000000.00000000进行与运算,结果是00001010.00000000.00000000.00000000,即10.0.0.0。
B 的网络地址:00001010.00000000.00000010.00000010与11111111.11111111.11111111.00000000进行与运算,结果是00001010.00000000.00000010.00000000,即10.0.2.0。
比较网络地址:
由于10.0.0.0不等于10.0.2.0,所以 A 认为 B 与自己不在同一网段。
A 和 B 能否通信
A 和 B 是可以通信的,不过需要借助路由器。当 A 判断出 B 与自己不在同一网段时,A 会把数据包发送给默认网关(路由器)。路由器依据自身的路由表,把数据包转发到 B 所在的网络,最终 B 就能接收到数据包。同理,B 向 A 发送数据包时也会经过路由器的转发。
13.0 如何将10.0.0.0/8划分32个子网?求每个子网的掩码,主机数。
子网掩码
已知原始网络前缀为/8,要划分成 32 个子网。因为25<\sup>=32,所以需要从主机位中借用 5 位来表示子网。
那么新的子网掩码就是在原来/8的基础上,再加上 5 位,即/13。
转换为十进制形式为255.248.0.0。
计算每个子网的主机数
子网掩码为/13,则主机位有
32−13=19位。
每个子网的主机数为219<\sup>-2=524286。这里减去 2 是因为要去掉网络地址(全 0)和广播地址(全 1)。
14.0 安装nodejs,并且使用npm完成hexo的安装,安装nginx,并且完成hexo博客页面的部署
安装Node.js
sudo apt update #更新系统软件包
sudo apt install nodejs npm #安装 Node.js 和 npm:
# 使用该命令来验证安装
node -v
npm -v
#全局安装 Hexo:
sudo npm install -g hexo-cli
# 创建一个新的博客项目
hexo init my-blog
cd my-blog
npm install
# 生成静态文件
hexo generate
# 启动本地服务预览博客
hexo server

在浏览器中访问 http://localhost:4000 查看博客
localhost:是虚拟机上的ip地址
# 安装 Nginx
sudo apt install nginx
# 安装完成后,启动 Nginx 服务并设置开机自启:
sudo systemctl start nginx
sudo systemctl enable nginx
# 将 Hexo 生成的静态文件复制到 Nginx 的默认网站目录 /var/www/html:
sudo cp -r public/* /var/www/html/
# 配置 Nginx 访问权限:
sudo chown -R www-data:www-data /var/www/html
# 现在,在浏览器中访问服务器的 IP 地址,就能看到你的 Hexo 博客页面了。

15.0 总结http协议常见的状态码和一次http请求的完整流程(面试常用)
HTTP协议常见状态码总结
HTTP状态码是服务器对客户端请求的响应状态标识,分为五类(1xx-5xx),以下是常见状态码分类及描述:
1. 信息性状态码(1xx)
100 Continue:服务器已收到部分请求,客户端可继续发送剩余数据。
101 Switching Protocols:服务器同意客户端协议切换(如HTTP/2)
2. 成功状态码(2xx)
200 OK:请求成功,返回请求的资源或操作结果。
201 Created:资源创建成功(如POST请求)。
204 No Content:请求成功,但无返回内容(如DELETE请求)。
206 Partial Content:范围请求成功,返回部分内容(如视频分片加载)。
3. 重定向状态码(3xx)
301 Moved Permanently:资源永久迁移至新URL。
302 Found:资源临时迁移至新URL。
304 Not Modified:资源未修改,可使用缓存版本。
4. 客户端错误状态码(4xx)
400 Bad Request:请求语法错误或无效。
401 Unauthorized:需身份验证。
403 Forbidden:服务器拒绝访问资源。
404 Not Found:请求的资源不存在。
405 Method Not Allowed:请求方法不被允许(如GET请求禁用)。
5. 服务器错误状态码(5xx)
500 Internal Server Error:服务器内部错误。
503 Service Unavailable:服务器暂时不可用(如过载或维护)。
一次HTTP请求的完整流程
HTTP请求流程分为客户端与服务器交互的多个阶段,结合TCP连接与协议处理:
DNS解析
客户端输入域名(如www.baidu.com),通过DNS查询转换为服务器IP地址。
过程包括本地缓存查询、根域名服务器→顶级域名服务器→目标域名服务器的迭代查询。
建立TCP连接(三次握手)
客户端发送SYN包请求连接,服务器回复SYN-ACK确认,客户端再发送ACK完成连接
发送HTTP请求
客户端通过Socket发送请求报文,包含:
请求行:方法(GET/POST)、URL、协议版本(如GET /index.html HTTP/1.1)。
请求头:Host、User-Agent、Accept等元数据。
请求体:POST请求时携带表单数据或JSON。
服务器处理请求
解析请求行与头部,定位资源(如静态文件或动态接口)。
执行业务逻辑(如数据库查询、文件读取)。
构建并发送HTTP响应
响应行:状态码(如200 OK)及协议版本。
响应头:Content-Type(数据类型)、Content-Length(数据长度)等。
响应体:包含HTML、JSON等实际数据。
关闭TCP连接
HTTP/1.0默认短连接,响应后关闭;HTTP/1.1支持持久连接(Keep-Alive),可复用连接发送多个请求。
客户端处理响应
渲染页面(如浏览器解析HTML/CSS/JS)或处理API返回数据。

浙公网安备 33010602011771号