1 linux系统安装+远程登录
1.1 系统安装
1.1.1 常见的linux内核
- Redhat家族
- RHEL(红帽商业版)
- Centos/Rokey
- Fedora
- OpenEuler
- RHEL(红帽商业版)
- Debian家族
- Ubuntu
- openKylin
- Kali
- Ubuntu
1.1.2 系统安装
略
1.1.3 命令行界面/终端/控制台的几种形式
- 物理终端:键盘+显示器,直接连接在计算机上的物理输入输出设备
- 虚拟终端:操作系统(linux内核)模拟的多用户登录界面,通过Ctrl+Alt+F1~F7进行切换,适合图形化界面异常后切换终端进行调试
- 伪终端:软件模拟的终端(如 xshell、Mobaxterm、powershell等终端模拟器),用于远程或图形界面下的终端窗口。
1.1.4 不同终端的承载文件名(命令tty查看)
linux中一切皆文件,所以不同终端对应的文件名表示如下:
- 控制台终端(早起的管理员终端):/dev/console
- 串行终端(通过串口连接到主机的终端):/dev/ttyS数字
- 虚拟终端tty: /dev/tty数字
- 伪终端pty:/dev/pts数字
1.2 远程登录
使用任意远程管理工具通过ssh协议连接,本文使用Mobaxterm;或是直接执行“ssh 用户@主机地址”命令进行登录
- 首先确认安装linux操作系统时是否默认安装了ssh服务,如果未安装如下命令安装
sudo apt update && sudo apt install openssh-server # ubuntu
sudo yum install openssh-server # Rokey/CentOS
- 确保ssh服务开启,并设置开机自启
sudo systemctl status ssh
sudo systemctl start ssh
sudo systemctl enable ssh # (Debian/Ubuntu)sudo systemctl start sshd
sudo systemctl enable sshd # (Rokey/CentOS)
- 尽量关闭防火墙或是放行22端口
sudo ufw disbale # Debiansudo systemctl stop firewalld # Redhat
sudo systemctl disable firewalld
sudo ufw allow ssh # Debiansudo firewall-cmd --add-service=ssh --permanent # RHEL
sudo firewall-cmd --reload
- 查询主机ip后使用Moba远程连接,可配置定制的用户的信息实现永久登录
1.3 调整终端命令行提示符显示样式
命令行提示符和变量PS1相关,修改PS1可调整提示符的颜色、显示信息等
PS1常用的符号和含义
符号 | 含义与功能 |
---|---|
\u |
显示当前用户名 |
\h |
显示主机名(第一个. 之前的短名称) |
\H |
显示完整的主机名 |
\w |
显示当前工作目录的完整路径(用户家目录会缩略为 ~ 显示) |
\W |
显示当前工作目录的最后一级目录名 |
\$ |
根据用户权限显示提示符:root用户为 # ,普通用户为 $ |
\t |
显示24小时制格式的当前时间(HH:MM:SS) |
\T |
显示12小时制格式的当前时间 |
\@ |
显示12小时制带AM/PM的当前时间 |
\d |
显示日期,格式为 "Weekday Month Date"(例如 "Mon May 06") |
\n |
换行符,用于将提示符分成多行显示 |
\# |
显示当前命令的序号(在历史记录中是第几条命令) |
\! |
显示该命令在历史记录中的编号 |
\v |
显示 Bash 的版本信息 |
\s |
显示当前运行的 Shell 的名字(如 "bash") |
\[ 和 \] |
非常重要:用于包围任何不打印的字符序列(如颜色代码)。确保Bash正确计算提示符的可见长度,避免行编辑错乱。 |
- 临时修改
# 直接在命令行下修改PS1变量值
[wch@wch-rokey-9 ~]$ echo $PS1 # 查看PS1变量值
[\u@\h \W]\$
[root@wch-rokey-9 ~]# PS1="\[\033[01;35m\]\D{%H:%M:%S}\[\033[00m\]-\[\033[01;34m\][当前目录:\w]\[\033[00m\]\n\[\033[01;32m\][\u@\h]\[\033[00m\]\[\033[01;93m\]\$ \[\033[00m\]" # 直接命令行下修改PS1,但临时有效果,新开一个终端后失效
10:45:49-[当前目录:~]
[root@wch-rokey-9]$
- 永久修改
# 在.bashrc文件中修改
[root@wch-rokey-9 ~]# echo "PS1='\[\033[01;35m\]\D{%H:%M:%S}\[\033[00m\]-\[\033[01;34m\][当前目录:\w]\[\033[00m\]\n\[\033[01;32m\][\u@\h]\[\033[00m\]\[\033[01;93m\]\$ \[\033[00m\]'" >> .bashrc # 把自定义的PS1新增到.bashrc文件中
[root@wch-rokey-9 ~]# source .bashrc # 让bashrc文件立即生效
10:51:09-[当前目录:~]
[root@wch-rokey-9]$
2 linux系统基础命令+文件操作命令
2.1 常见命令
2.1.1 查看当前登录用户信息的基础命令
last # 显示上次登录的用户列表信息
who # 显示当前所有登录到系统的用户信息
whoami # 查看当前登录的用户
who am i # 仅显示当前终端登录系统的用户名+终端+登录时间+来源主机,‘i’可以是任意字符,等同于who -m
[wch@wch-rokey-9 ~]$ whoami
wch
[wch@wch-rokey-9 ~]$ who am i
wch pts/1 2025-09-03 08:51 (10.0.0.1)
[wch@wch-rokey-9]$ who
root tty1 2025-09-03 09:45
wch pts/0 2025-09-03 10:54 (10.0.0.1)
id # 查看当前用户的所有信息
su 用户 # 切换用户,切换后保存上一个用户的信息
su - 用户 # 切换一个全新的用户,切换后在新用户的家目录下
w # 显示当前系统登录的用户和活动状态
[wch@wch-rokey-9 ~]$ w09:32:04 up 2:26, 2 users, load average: 0.00, 0.00, 0.00
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
wch pts/0 二10 22:09m 0.06s 0.06s sshd: wch [priv]
wch pts/1 08:51 2.00s 0.03s 0.00s w
2.1.2 简单的shell命令
Shell:操作系统和应用程序之间的命令翻译工具
echo $SHELL # 查看当前系统的shell
cat /etc/shells # 查看当前系统支持的shell
[wch@wch-rokey-9 ~]$ echo $SHELL
/bin/bash
[wch@wch-rokey-9 ~]$ cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash/bin/bash 脚本 # 执行脚本文件
2.1.3 变量相关命令
echo $变量名 # 查看变量
env # 查看系统变量
变量名="/path/to/file" # 临时定义变量
2.1.4 查看系统信息的命令
lscpu # 查看cpu
free # 查看内存
arch # 查看系统架构
uname -r # 查看内核信息
cat /etc/redhat-release # 查看系统发行版本信息(Rokey)
cat /etc/os-release # 查看系统发行版本信息
cat /etc/lsb-release # 查看系统发现版本(Ubuntu)
2.1.5 进程基本命令查看
# PS
ps aux # 常见搭配,列出所有进程,并列出属主
ps -ef # 常见搭配,列出所有进程,并列出属主
ps -eFH # 详细格式列出所有进程
pstree # 树状图的形式直观的显示进程和子进程
2.1.6 历史命令
# 命令行上下箭头可找历史命令
ctrl+p # 显示上一条命令,上箭头一个效果
history # 显示历史命令
history -c # 清除历史命令
!! # 重复执行上一条命令
!n # 执行history的第n条命令
!string # 重复前一个以“string”开头的命令
ctrl+r # 进入历史命令的模式下搜索命令
ctrl+g # 退出搜索模式
2.1.7 命令行快捷键
ctrl+A # 光标回行首
ctrl+E # 光标回行尾ctrl+k # 删除光标到行尾内容
ctrl+u # 删除光标到行首内容
ctrl+y # 粘贴删除的内容
ctrl+c # 终止执行的命令
Esc+b/Alt+b # 移动到单词开头
Esc+f/Alt+f # 移动到单词结尾
2.1.8 命令帮助
# whatis借助linux内部的命令数据库文档显示命令的简单描述# man命令可以获取对应命令的详细手册# --help绝大多数命令都支持该选项,显示对应命令的基本用法# info命令:类似man,但显示的结果更加结构化,包含更多示例(看发行版)
2.2 文件与目录命令
ls # 不加目录默认显示当前目录下文件,加目录显示该目录下文件信息
tree dir # 以树形结构显示dir目录结构
mkdir dir # 创建dir目录
mkdir -p /dir/dir1/dir2 # 递归创建目录
cd dir # 进入到dir目录
cd ~ # 进入到家目录
cd - # 进入到上一次访问的目录下
cd . # 进入当前所在目录
cd .. # 进入上一级目录
pwd # 打印当前所在绝对路径
cp sour_file dest_file # 文件复制
cp file dir1 # 把文件复制到目录,文件可以是多文件
cp -r dir1 dir2 # 复制目录
mv file1 file2 # 同目录下移动相当于重命名,不同目录则实现文件转移
touch file1 # 创建文件
rm -rf file|dir # 删除文件|目录;-f是强制删除,-r是删目录
cat/tac/rev命令
cat -n [file] # 查看文件内容,显示行号
cat -A [file] # 显示所有不可见字符的可见形式
cat -E [file] # 显示结尾符号$
cat -b [file] # 空行不显示行号
cat -s [file] # 压缩连续空行为一行
# tac命令逆向显示文件内容,cat的反义
# rev命令逆向显示文件内容,区别tac,rev行内容也逆向
head/tail命令
head -n N [file] # 显示文件的前N行内容
[wch@wch-rokey-9]$ head -n 3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
head -c N [file] # 显示文件的前N个字符(截取字符)
# tail是head的反向命令
tail -n 10 [file] # 显示文件后十行内容
tail -f # 实时监控文件,常用监控日志记录
[wch@wch-rokey-9]$ sudo tail -n1 -f /var/log/messages
[sudo] wch 的密码:
Sep 15 06:20:30 wch-rokey-9 systemd-logind[806]: Removed session 1.
# head和tail可配合获取文件中某一行内容
[wch@wch-rokey-9]$ head -n10 /etc/passwd | tail -n1
operator:x:11:0:operator:/root:/sbin/nologin
echo/printf命令
# 将内容显示到默认的输出设备
echo "hello world!" # 将hello world输出到终端命令行
echo "hello world" >> ./hello # 将字符串hello world追加到文件hello中
echo -e [string] # 启用转义字符的解析
[wch@wch-rokey-9]$ echo -e "The 2021 State of DevOps Report\n\t- is here" # 将\n和\t转换为换行符和tab
The 2021 State of DevOps Report- is here
echo -n [string] # 信息输出是不换行
[wch@wch-rokey-9]$ echo -n "hello world!"
hello world!07:37:29-[当前目录:~]
# printf类似C语言的printf函数,可格式化显示一些信息
[wch@wch-rokey-9]$ printf "hello world\n"
hello world
08:21:05-[当前目录:~]
[wch@wch-rokey-9]$ printf "hello world" # 区别于echo,printf默认不换行,需要加\n
hello world08:21:13-[当前目录:~]
[wch@wch-rokey-9]$ printf "姓名:%s, 语文:%d, 数学:%d\n" "张三" 89 98 # printf占位符
姓名:张三, 语文:89, 数学:98
[wch@wch-rokey-9]$ printf "(%d %s)\n" 1 张三 2 李四 3 王五 # 批量化输出信息
(1 张三)
(2 李四)
(3 王五)
wall/write命令
# wall用于给多用户广播发送消息,一般用于系统管理向登录到系统的用户广播通知
wall "message-hello" # 将该信息发送给所有系统已登录用户
wall message.txt # 将该文件内容发送给所有系统已登录用户
# write区别于wall,write可指定具体用户发送消息
write [用户名] [ttyname]
[wch@wch-rokey-9]$ echo "hello wch pts/0" | write wch pts/0
[wch@wch-rokey-9]$
wch@wch-rokey-9.6 于 pts/1 在 08:07 发的消息...
hello wch pts/0
EOF
3 网络基础知识+web基础知识+部署Server
3.1网络基础
3.1.1 OSI七层模型
# 一种理论上的网络通信模型,实践中未应用;从底层到上层分别是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
* 物理层:物理介质传输比特流,如电缆、光缆
* 数据链路层:相邻节点(点对点)间提供可靠的帧级数据传输服务,如通过流量控制、差错控制技术
* 网络层:实现跨网络的逻辑寻址与路由选择
* 传输层:为应用程序提供端到端的通信服务,保证数据传输过程中的可靠性和完整性
* 会话层:建立、管理和终止会话,实现数据同步
* 表示层:数据的各种编码转换,确保数据在不同系统之间的兼容
* 应用层:为应用软件提供网络服务
3.1.2 TCP/IP四层模型
# 实际网络通信中所用的模型,从底层到上层分别是物理层、数据链路层、网络层、传输层、应用层
3.1.3 以太网
# 一种基于分组交换技术的局域网通信标准,以数据帧的形式传输,数据帧包含:目的地址、源地址、数据、校验码;目的地址和源地址标识发送方和接收方,数据包含实际传输的信息,校验码检测数据在传输过程中是否发生错误
3.1.4 网关和路由器的区别
网关 | 路由器 | |
---|---|---|
功能 | 不同协议网络的连接和转换 | 主要是同类型网络的数据转发 |
工作层级 | 网络层->应用层之间 | 网络层 |
应用场景 | 不同协议网络的连接,如智能家居(蓝牙、wifi等协议)、企业网络(内部专网和运营商网络)、物联网(传感器和云端sss) | 同类型网络的互联 |
3.1.5 集线器、中继器、交换机的区别
中继器 | 集线器 | 交换机 | |
---|---|---|---|
工作层级 | 物理层 | 物理层;相当于多端口的中继器 | 数据链路层 |
核心功能 | 放大物理信号 | 放大物理信号;无差别转发数据,共享带宽 | 根据Mac地址智能转发数据帧 |
应用场景 | 延长物理距离 | 局域网核心设备 |
3.2 web基础
3.2.1 HTTP协议
# 超文本传输协议,属于应用层协议,作用于客户端和服务端之间进行信息交互,有如下显著特点:
1 无连接:完成一次数据传输后主动断开,不会一直保持连接状态,下次重连
2 无状态:每个请求独立且完整,服务器不记录历史请求;协议本身不保留客户端和服务器之间的交互状态
3 请求-响应模型:客户端发起请求,服务端根据请求内容响应
# http报文-请求报文
- 起始行:(start line),开始行,请求行,描述了请求的基本信息
- 头部字段合集:(header),首部行,使用 key: value 格式详细的说明报文
- 消息正文:(entity),实体(body),请求数据,可以没有
# http报文-相应报文
- 起始行:(start line),开始行,状态行,描述了响应的基本信息
- 头部字段合集:(header),首部行,使用 key: value 格式详细的说明报文
- 消息正文:(entity),实体(body),响应数据,可以没有
3.2.2 Socket套接字
# 网络编程中的一个概念,介于应用层和传输层之间的编程接口,用于实现不同主机间的通信
3.2.3 浏览器访问网站的简单过程
- 浏览器输入地址
- DNS解析域名得到目标服务器ip地址
- 浏览器和服务器基于TCP的三次握手协议建立连接
- 浏览器组织报文发送服务器
- 服务器收到报文后处理请求,拼接好回复报文后返给浏览器
- 浏览器解析报文,然后渲染显示
- 关闭连接,释放资源
3.2.4 https协议
# https协议=http协议+SSL/TLS协议 相当于在原有http协议基础上进行了加密处理
3.2.5 常见的前端开发框架
1. React:一款由Facebook开发的JavaScript库,最大的特点是采用组件化的开发方式,允许开发者
将用户界面拆分为可复用的独立组件,通过虚拟DOM技术优化性能,是构建大型、高性能Web应用
的首选。
2. Vue:一款轻量级、渐进式的JavaScript框架,最大的特点是提供了响应式数据绑定和双向数据绑定
的特性,能够自动追踪数据的变化并更新视图,适合构建中小型应用,学习曲线平缓,易于上手。
3. Angular:由Google维护的一款JavaScript框架,最大的特点是提供了构建Web应用所需的所有工
具,包括数据绑定、路由、表单处理、HTTP客户端等,是一个完整的解决方案,适合构建复杂的单
页应用。
4. jQuery:一款简化JavaScript操作的库,最大的特点是提供了一系列的便捷方法,使得DOM操作、
事件处理、动画效果等变得更加简单和高效。
5. Bootstrap:一个开源的前端框架,最大的特点是提供了丰富的CSS和JavaScript组件,用于快速构
建响应式网页,内置了多种样式和组件,大大简化了前端开发工作。
3.3 Server部署
3.3.1 网络配置文件
# ubuntu
/etc/netplan/*.yaml
wch@ubuntu-server-24-04:~$ ls /etc/netplan/ # ubuntu-server版,默认只有5050-cloud-init.yaml
50-cloud-init.yaml
wch@wch-ubuntu-desktop-24:~$ ls /etc/netplan/ # ubuntu-desktop版,默认只有01*.yaml和50*yaml,两个90*yaml文件是在图形化界面修改网卡信息留下的配置文件
01-network-manager-all.yaml 90-NM-14f59568-5076-387a-aef6-10adfcca2e26.yaml
50-cloud-init.yaml 90-NM-3fc91611-2585-3063-ac16-0d3e7c50d8c3.yaml
# 解读
- 1-network-manager-all.yaml(desktop版无该文件):由 Ubuntu中网络配置和管理的工具networkManager服务使用,该文件可能包含NetworkManager动态生成的配置信息。通俗讲:01-network-manager-all.yaml文件告诉Netplan使用NetworkManager来管理系统上的所有网络设备。这意味着可以通过NetworkManager的图形界面或命令行工具来配置、监控和管理网络连接,而不用直接编辑Netplan的配置文件
- 50-cloud-init.yaml:Ubuntu 24.04及更高版本的默认网络配置文件
- 90-NM-xxx.yaml(desktop版无该文件):该文件是NetworkManager为手工图形创建网络设备时候添加的配置文件,会覆盖01-network-manager-all.yaml或50-cloud-init.yaml中的全局设置
# 注:在Ubuntu系统中,可以有多个Netplan配置文件,但通常只有一个会被用作活动配置。Netplan会根据文件名的数字前缀(在这个例子中是01-)来确定哪个文件是活动配置。数字越小,优先级越高。如果存在多个配置文件,Netplan将合并它们的内容,但如果有冲突,优先级高的文件将覆盖优先级低的文件中的设置
3.3.2 静态IP和动态IP配置⭐️
# 在ubuntu-server主机下修改ip信息
[wch@ubuntu-server-24-04]$ sudo cat /etc/netplan/50-cloud-init.yaml
network:version: 2ethernets:ens33:dhcp4: true
18:30:11-[当前目录:~]
[wch@ubuntu-server-24-04]$ vim /etc/netplan/50-cloud-init.yaml
network:version: 2ethernets:ens33:dhcp4: noaddresses:- "10.0.0.16/24"nameservers:addresses:- 10.0.0.2routes:- to: defaultvia: 10.0.0.2
sudo netplan apply # 让修改后的网卡信息生效
# 给ubuntu-server新增一张虚拟网卡,并配置相应网络地址信息# 首先是在VMware中给Ubuntu-server主机新增一个虚拟网卡,然后查看虚拟网卡名称后进行如下配置
[wch@ubuntu-server-24-04]$ sudo vim /etc/netplan/50-cloud-init.yaml
network:version: 2ethernets:ens33:dhcp4: noaddresses:- "10.0.0.16/24"nameservers:addresses:- 10.0.0.2routes:- to: defaultvia: 10.0.0.2ens37: # 新增一张名为ens37的虚拟网卡dhcp4: noaddresses:- "10.0.0.111/24"nameservers:addresses:- 10.0.0.2routes:- to: defaultvia: 10.0.0.2
sudo netplan apply
[wch@ubuntu-server-24-04]$ ifconfig ens37 # 查看ens37网卡信息
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 10.0.0.111 netmask 255.255.255.0 broadcast 10.0.0.255inet6 fe80::20c:29ff:fe69:a492 prefixlen 64 scopeid 0x20<link>ether 00:0c:29:69:a4:92 txqueuelen 1000 (Ethernet)RX packets 4 bytes 295 (295.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 14 bytes 1096 (1.0 KB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
3.3.3 网络配置相关命令
3.3.3.1 主机名配置
# 临时修改主机名 -> hostname命令
[wch@ubuntu-server-24-04]$ hostname # 显示当前主机名
ubuntu-server-24-04
19:42:42-[当前目录:~]
[wch@ubuntu-server-24-04]$ hostname temp
hostname: you must be root to change the host name
19:42:49-[当前目录:~]
[wch@ubuntu-server-24-04]$ sudo hostname temp # 临时修改主机名
[sudo] password for wch:
19:43:00-[当前目录:~]
[wch@ubuntu-server-24-04]$ hostname
temp
19:43:48-[当前目录:~]
[wch@ubuntu-server-24-04]$ exec /bin/bash # 立即生效
19:45:02-[当前目录:~]
[wch@temp]$ # 可看到当前显示主机名temp
19:42:03-[当前目录:~]
[wch@ubuntu-desktop-24]$ # exit退出后再进入temp主机名失效# 永久修改主机名 -> hostnamectl命令
[wch@ubuntu-desktop-24]$ hostnamectl status # 输出主机信息,同hostnamectl命令效果Static hostname: wch-ubuntu-desktop-24.04
Transient hostname: ubuntu-desktop-24Icon name: computer-vmChassis: vm 🖴Machine ID: 3c2aae15fbeb42ad9f34197b061f6fe5Boot ID: 3e850da7ff184a3d9aca2945f1606f4cVirtualization: vmwareOperating System: Ubuntu 24.04 LTSKernel: Linux 6.8.0-31-genericArchitecture: x86-64Hardware Vendor: VMware, Inc.Hardware Model: VMware Virtual PlatformFirmware Version: 6.00Firmware Date: Thu 2020-11-12Firmware Age: 4y 10month 1w 1d
[wch@ubuntu-desktop-24]$ hostnamectl hostname # hostname子命令显示当前主机名
ubuntu-desktop-24
[wch@ubuntu-desktop-24]$ hostnamectl set-hostname xxxxxxxxxxxxxx # set-hostname子命令用于永久修改主机名,目前已被废弃,使用hostname子命令
==== AUTHENTICATING FOR org.freedesktop.hostname1.set-static-hostname ====
Authentication is required to set the statically configured local hostname, as well as the pretty hostname.
Authenticating as: wch
Password:
==== AUTHENTICATION COMPLETE ====
19:54:11-[当前目录:~]
[wch@ubuntu-desktop-24]$ exec /bin/bash
19:54:25-[当前目录:~]
[wch@xxxxxxxxxxxxxx]$
[wch@xxxxxxxxxxxxxx]$ sudo hostnamectl hostname Ubuntu-Desktop-24 # 使用hostname子命令永久修改主机名
[sudo] wch 的密码:
19:56:08-[当前目录:~]
[wch@xxxxxxxxxxxxxx]$ exec /bin/bash
19:56:15-[当前目录:~]
[wch@Ubuntu-Desktop-24]$
3.3.3.2 net-tools相关命令
# ifconfig
[wch@Ubuntu-Server-24]$ ifconfig # 查看所有启用的网卡信息,-a参数可多显示被禁用的网卡
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 10.0.0.16 netmask 255.255.255.0 broadcast 10.0.0.255inet6 fe80::20c:29ff:fe69:a488 prefixlen 64 scopeid 0x20<link>ether 00:0c:29:69:a4:88 txqueuelen 1000 (Ethernet)RX packets 267021 bytes 235336964 (235.3 MB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 224173 bytes 24827183 (24.8 MB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 10.0.0.111 netmask 255.255.255.0 broadcast 10.0.0.255inet6 fe80::20c:29ff:fe69:a492 prefixlen 64 scopeid 0x20<link>ether 00:0c:29:69:a4:92 txqueuelen 1000 (Ethernet)RX packets 22 bytes 2693 (2.6 KB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 25 bytes 1890 (1.8 KB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen 128 scopeid 0x10<host>loop txqueuelen 1000 (Local Loopback)RX packets 402 bytes 42892 (42.8 KB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 402 bytes 42892 (42.8 KB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
# route
[wch@Ubuntu-Server-24]$ route # 查看路由表 (0.0.0.0表示默认路由)
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default _gateway 0.0.0.0 UG 0 0 0 ens33
default _gateway 0.0.0.0 UG 0 0 0 ens37
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 ens37
20:09:00-[当前目录:~]
[wch@Ubuntu-Server-24]$ route -n # 以ip格式查看路由表
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.0.2 0.0.0.0 UG 0 0 0 ens33
0.0.0.0 10.0.0.2 0.0.0.0 UG 0 0 0 ens37
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 ens37
3.3.3.3 IP命令
可取代ifconfig和route命令,主要用于管理和配置网络接口和路由表,在没有安装net-tools包就可以使用该命令
# 命令格式:ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS]]
格式解读: OPTIONS: 一些修改ip行为或者改变其输出的选项,以“-”字符开头,分为长、短两种形式。 例如,-V(或--Version)用于打印ip的版本并退出,。 OBJECT: 要管理或者获取信息的对象, 如link(网络设备)、address(设备的协议地址)、route(路由表条目)等。 COMMAND: 对指定对象执行的具体命令,如show(显示信息)、set(设置属性)等。 ARGUMENTS: 命令的附加参数,用于进一步指定命令的行为。
# 案例
[wch@Ubuntu-Server-24]$ ip addr show # 显示所有网卡信息
[wch@Ubuntu-Server-24]$ ip addr show ens33 # 显示指定网卡信息
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:69:a4:88 brd ff:ff:ff:ff:ff:ffaltname enp2s1inet 10.0.0.16/24 brd 10.0.0.255 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe69:a488/64 scope linkvalid_lft forever preferred_lft forever
[wch@Ubuntu-Desktop-24]$ ip route list # 列出当前路由表信息
default via 10.0.0.2 dev ens33 proto static metric 100
10.0.0.0/24 dev ens33 proto kernel scope link src 10.0.0.13 metric 100
3.3.3.4 网络连接状态查看
# netstat命令(用于显示网络连接、路由表、接口统计、伪装连接和多播成员资格等信息)
[wch@Ubuntu-Server-24]$ netstat -tnulp # -t:显示tcp端口数据 -u:显示udp端口数据 -n:以数字形式显示ip和端口 -p:显示相关进程和pid -l:仅显示监听状态的端口
(No info could be read for "-p": geteuid()=1000 but you should be root.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.54:53 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN -
tcp6 0 0 ::1:6010 :::* LISTEN -
tcp6 0 0 :::80 :::* LISTEN -
udp 0 0 127.0.0.54:53 0.0.0.0:* -
udp 0 0 127.0.0.53:53 0.0.0.0:* -
[wch@Ubuntu-Server-24]$ netstat -r # 显示路由表信息
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default _gateway 0.0.0.0 UG 0 0 0 ens33
default _gateway 0.0.0.0 UG 0 0 0 ens37
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 ens37# ss命令
Socket Statistics的缩写,主要用于获取系统中socket的统计信息,可以帮助系统管理员诊断和排查网络问题,包括检查当前网络连接及端口状态、搜索网络问题、统计网络情况等;可代替netstat命令
[wch@Ubuntu-Server-24]$ ss -tnulp # 选项参数和netstat类似
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
udp UNCONN 0 0 127.0.0.54:53 0.0.0.0:*
udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:*
tcp LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:*
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
tcp LISTEN 0 4096 127.0.0.54:53 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:6010 0.0.0.0:*
tcp LISTEN 0 128 [::1]:6010 [::]:*
tcp LISTEN 0 511 [::]:80 [::]:*
3.3.4 Web站点环境部署
3.3.4.1 常见的Web server软件
- Apache
- Tomcat
- Nginx
3.3.4.2 Ubuntu环境部署Nginx
[wch@Ubuntu-Server-24]$ apt list nginx -a # 列出nginx所有可用版本
Listing... Done
nginx/noble-updates,noble-security,now 1.24.0-2ubuntu7.5 amd64 [installed]
nginx/noble 1.24.0-2ubuntu7 amd64
sudo apt install nginx -y # 安装nginx
# 推荐安装的命令是: apt install nginx nginx-core fcgiwrap nginx-doc
[wch@Ubuntu-Server-24]$ systemctl is-active nginx.service # 查看nginx服务的启动状态,也可使用命令systemctl status nginx查看
active
[wch@Ubuntu-Server-24]$ sudo netstat -tunlp | grep nginx # 使用netstat命令查看nginx端口
[sudo] password for wch:
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 834/nginx: master p
tcp6 0 0 :::80 :::* LISTEN 834/nginx: master p
浏览器访问:
# 若无法访问web页面,尝试关闭防火墙:sudo systemctl disable --now ufw.service
3.3.4.3 Nginx⭐️
# 1 nginx首页的配置目录:/var/WWW/html/
# 2 nginx相关命令
[wch@Ubuntu-Server-24]$ nginx -v # 查看nginx版本
nginx version: nginx/1.24.0 (Ubuntu)
-V: #在显示基础版本信息的基础上,额外输出编译时的详细配置参数(如编译器版本、依赖库信息、启用模块、安装路径等)
-h #显示帮助信息
-t #检查并测试配置文件
-q #在配置文件测试期间禁止显示非错误消息
# 3 Nginx配置文件
-nginx.conf:nginx的主配置文件
-conf.d:nginx的其他配置文件,会导入到主配置文件使用
-default.d:nginx的其他配置文件,会导入到主配置文件使用(存在于rokey系统)
-modules-available:nginx的其他配置文件,会导入到主配置文件使用(存在于ubuntu系统)
-sites-enabled:nginx的其他配置文件,会导入到主配置文件使用(存在于ubuntu系统)
......
3.3.4.4Nginx配置结构解读⭐️
# 1 Server配置段内的关键信息:
-listen:指定server监听的ip地址和端口
-root:请求的根目录路径
...
# 2 location配置段的关键信息:
-try-files:根据顺序查找文件,如:$uri $uri/ =404;这个执行顺序表示先查找请求的文件,找不到再找请求的目录下的默认index.html,还找不到返回404错误
3.3.4.5 Nginx web实践
# 基于端口号实现多server# 1 首先删除nginx下默认的配置文件:/etc/nginx/sites-enabled/default
[wch@Ubuntu-Server-24]$ sudo rm -f /etc/nginx/sites-enabled/default
# 2 定制3个站点的web页面
[wch@Ubuntu-Server-24]$ sudo mkdir -p /data/server/nginx/web{1..3} # 创建3个站点的资源目录
[wch@Ubuntu-Server-24]$ sudo chmod -R o+w /data/server/nginx # 增加其他用户对该文件夹所有文件的写权限
16:47:27-[当前目录:~]
[wch@Ubuntu-Server-24]$ ll /data/server/nginx
total 20
drwxr-xrwx 5 root root 4096 Sep 22 16:36 ./
drwxr-xr-x 3 root root 4096 Sep 22 16:36 ../
drwxr-xrwx 2 root root 4096 Sep 22 16:36 web1/
drwxr-xrwx 2 root root 4096 Sep 22 16:36 web2/
drwxr-xrwx 2 root root 4096 Sep 22 16:36 web3/
16:47:37-[当前目录:~]
[wch@Ubuntu-Server-24]$ sudo echo "nginx web1" > /data/server/nginx/web1/index.html # 定制化web首页内容
16:48:08-[当前目录:~]
[wch@Ubuntu-Server-24]$ sudo echo "nginx web2" > /data/server/nginx/web2/index.html
16:48:20-[当前目录:~]
[wch@Ubuntu-Server-24]$ sudo echo "nginx web3" > /data/server/nginx/web3/index.html
# 3 定制配置文件,实现端口号访问多server
[wch@Ubuntu-Server-24]$ sudo vim /etc/nginx/conf.d/vhost.conf # 编辑配置文件
server { listen 80; root /data/server/nginx/web1;
}
server { listen 81;
root /data/server/nginx/web2;
}
server { listen 82; root /data/server/nginx/web3;
}
# 4 重启nginx服务进行验证
[wch@Ubuntu-Server-24]$ sudo nginx -t # -t参数验证配置文件的语法格式是否正确
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
17:12:24-[当前目录:~]
[wch@Ubuntu-Server-24]$ sudo systemctl restart nginx.service # 重启nginx服务
17:12:50-[当前目录:~]
[wch@Ubuntu-Server-24]$ curl 10.0.0.16:80 # 访问不同端口对应的默认站点页面
nginx web1
17:13:07-[当前目录:~]
[wch@Ubuntu-Server-24]$ curl 10.0.0.16:81
nginx web2
17:13:10-[当前目录:~]
[wch@Ubuntu-Server-24]$ curl 10.0.0.16:82
nginx web3