Linux安装

Ubuntu Server 24.04 LTS

以下是部分安装步骤,其他步骤请直接点击【Done】继续。

网络配置

配置ubuntu存档镜像

自定义存储布局

Ubuntu最佳分区方式:只需要两个分区 /swap 。swap 一般设置为 2 倍或 1.5 倍的 RAM。

下面创建根分区(/),不创建 swap 分区:

配置用户名密码

跳过 Ubuntu Pro

Ubuntu Pro 是 Canonical 推出的 企业级付费支持和增强服务,在普通 Ubuntu 的基础上增加了安全更新、合规性工具和长期支持等功能,主要面向企业或专业用户。

个人用户 / 小团队

  • Ubuntu Pro 对个人用户有免费额度(通常支持 5 台机器免费激活)。

企业用户 / 大规模部署

  • 需要付费订阅,可享受官方 SLA 支持、更多机器数量和附加安全服务。

开启ssh远程

常用的snap包

安装完成后重启

重启

删除安装介质

重启后,Ubuntu 会提示移除安装镜像。

具体操作:取消 虚拟机设置 中的设备 启动时连接,然后按 Enter。

安装中文环境

安装英文版ubuntu,在打开含有中文字符文件时会乱码,有需要给Ubuntu Server装中文环境

1、安装之前,执行 echo $LANG
屏幕显示:en_US.UTF-8
说明现在是英语环境,需要切换到中文环境。

2、安装中文语言包

apt-get update && apt-get install language-pack-zh-hans

3、vim /etc/default/locale
把原来英语 US 的都换成如下的内容,并且注意配置文件中不能有多余的空格

1
2
3
4
5
6
7
8
9
10
11
12
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN:zh"
LC_NUMERIC="zh_CN"
LC_TIME="zh_CN"
LC_MONETARY="zh_CN"
LC_PAPER="zh_CN"
LC_NAME="zh_CN"
LC_ADDRESS="zh_CN"
LC_TELEPHONE="zh_CN"
LC_MEASUREMENT="zh_CN"
LC_IDENTIFICATION="zh_CN"
LC_ALL="zh_CN.UTF-8"

4、vim /etc/environment
原来有一行 PATH=.. 不要动这一行
另起一行,复制粘贴以下内容,并且注意配置文件中不能有多余的空格

1
2
3
4
5
6
7
8
9
10
11
12
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN:zh"
LC_NUMERIC="zh_CN"
LC_TIME="zh_CN"
LC_MONETARY="zh_CN"
LC_PAPER="zh_CN"
LC_NAME="zh_CN"
LC_ADDRESS="zh_CN"
LC_TELEPHONE="zh_CN"
LC_MEASUREMENT="zh_CN"
LC_IDENTIFICATION="zh_CN"
LC_ALL="zh_CN.UTF-8"

5、重启机器 reboot

CentOS-8.1.1911

以下是部分安装步骤,其他步骤可以根据实际需求自行选择。

软件选择

安装目标位置(自定义分区)

网络和主机名

root密码

安装完成后重启

重启

删除安装介质

重启完成后操作:取消 虚拟机设置 中的设备 启动时连接

解锁root用户

1
2
3
4
5
6
7
sudo passwd -S root # 查看 root 状态
sudo passwd -l root # -l → Locked(锁定用户)
sudo passwd -u root # -u → unlock(解锁用户)
sudo passwd -d root # 删除 root 的密码(删除 /etc/shadow 里的加密串)
sudo passwd root # 设置root用户的密码

su root # 测试是否可以进入 root 用户

开启root用户远程登录

安装SSH

先检查是否安装

1
2
dpkg -l | grep ssh
rpm -qa | grep ssh

开放本机 SSH 服务,请安装服务端:

1
2
apt install openssh-server
dnf install openssh-server

连接远程主机,请安装客户端:

1
2
apt install openssh-client
dnf install openssh-client

查看SSH服务

1
2
3
ps -ef | grep ssh
systemctl status ssh # Ubuntu 上服务名是 ssh
systemctl status sshd # CentOS 上服务名是 sshd

SSH配置文件

ssh 有两个主要的配置文件,它们的作用和针对的对象不同

特性 ssh_config sshd_config
角色 客户端配置 服务端配置
进程 ssh (当使用 ssh 远程连接时会看到该进程) sshd (SSH Daemon 是一个守护进程,它一直在监听连接请求)
控制 客户端如何发起连接 服务器如何接受连接
位置 /etc/ssh/ssh_config~/.ssh/config 通常是 /etc/ssh/sshd_config
生效 立即生效(客户端读取) 需要重启服务 (sshd)

客户端配置手册:https://manpages.debian.org/trixie/openssh-client/ssh_config.5.en.html

服务端配置手册:https://manpages.debian.org/trixie/openssh-server/sshd_config.5.en.html

客户端常用配置项

配置项 作用 常用值/说明
Host 定义一个别名或模式,其后的配置将对该别名生效。 别名如 myserver,模式如 *192.168.1.*
HostName 远程主机的实际地址(IP 或域名)。 如果与 Host 别名不同时才需要设置。
User 连接远程主机时默认使用的用户名。 省略则使用本地用户名。
Port 远程主机的端口。 如果远程服务器端口不是默认的 22,则在此设置。
IdentityFile 用于公钥认证的私钥文件路径。 例如 ~/.ssh/id_rsa。可以为不同主机指定不同的密钥。
ServerAliveInterval 客户端向服务器发送“保活”消息的间隔时间(秒)。 设为 60 可防止本地网络闲置导致的连接中断。
ConnectTimeout SSH 连接建立的最大等待时间(秒)。 避免因网络问题导致长时间卡死。
ProxyCommand 【高级】 通过执行一个外部命令来建立与远程服务器的连接。 例如:ProxyCommand ssh -p 22 -W %h:%p jumpbox
常用于通过 SOCKS 代理或老版本跳板机。
-p 22:连接跳板机的port。
-W %h:%p转发选项,告诉 SSH 客户端:建立连接后,请在远程主机上执行一个转发操作到 %h:%p%h 是目标主机,%p 是目标端口。
jumpbox:连接的跳板机的IP
ProxyJump 【推荐】 指定一个或多个跳板机(Bastion Host)。 例如:ProxyJump jump.example.com。功能上取代了大部分 ProxyCommand 的跳板用途。

服务端常用配置项

配置项 作用 常用值/说明
Port 指定 SSH 服务监听的端口。 默认为 22。为了安全,常改为其他端口(如 2222)。
ListenAddress 指定 SSH 服务绑定的网络接口 IP。 默认为 0.0.0.0(所有接口)。可设为特定 IP 以限制访问。
PermitRootLogin 是否允许 root 用户直接通过 SSH 登录。 推荐设为 no。应使用普通用户登录后再切换到 rootsusudo)。
PasswordAuthentication 是否允许使用密码进行身份验证。 推荐设为 no。当使用公钥认证时,禁用密码可以大大提高安全性。
PubkeyAuthentication 是否允许使用 公钥 进行身份验证。 通常设为 yes。这是最安全的登录方式。
AllowUsers / DenyUsers 明确允许或拒绝某些用户登录。 例如:AllowUsers user1 user2@192.168.1.10
MaxAuthTries 每个连接允许的最大认证尝试次数。 默认为 6。较低的数值可以阻止暴力破解。
ClientAliveInterval 服务器向客户端发送“保活”消息的间隔时间(秒)。 默认为 0(不发送)。设为 3060 可防止连接因超时而被关闭。

允许Root用户远程登录

编辑服务端配置文件:vim /etc/ssh/sshd_config

找到并修改:

1
2
3
4
#PermitRootLogin prohibit-password
PermitRootLogin yes # 允许root用户登录

#PasswordAuthentication yes # 指定是否使用密码认证。此关键字的参数必须为 yes(默认值)或 no

重新加载配置:

1
2
3
systemctl reload ssh   # 仅重新加载配置,不中断现有会话
#
systemctl restart ssh # 重启服务,会断开现有会话

测试登录

从远程机器执行:

1
ssh root@服务器IP

卸载无用的系统服务

1
2
3
4
# 查看所有正在运行的服务
systemctl list-units --type=service --state=running
# 查看开机启动的服务
systemctl list-unit-files --type=service --state=enabled

禁用swap分区

https://man.archlinux.org/man/swapoff

https://man.archlinux.org/man/swapon

临时禁用(立即生效,重启失效)

1
2
3
4
cat /proc/swaps
swapoff -a # 禁用 /proc/swaps 中的所有 swaps
swapon --show
free -h

永久禁用 Swap 自动挂载

1
2
3
4
# 编辑 /etc/fstab 文件
vim /etc/fstab
# 找到包含 swap 关键字的行,并注释掉。
#/swap.img none swap sw 0 0

删除Swap分区

略…

删除Swap文件(针对 Swap 文件用户)

1
2
3
# 如果您的Swap不是一个分区,而是一个文件(例如 /swap.img),您还需要删除该文件。
# 如果Swap是一个分区,您也可以尝试删除它,但这可能需要更复杂的LVM 操作。
rm -rf /swap.img

换源

https://developer.aliyun.com/mirror/ubuntu

https://developer.aliyun.com/mirror/centos

ubuntu 查看源

1
2
3
4
5
cat /etc/apt/sources.list                                   # 主配置文件
cat /etc/apt/sources.list.d/ubuntu.sources # 主配置文件,24.04 之后
ll /etc/apt/sources.list.d/*.sources # 主配置文件+额外软件源(第三方 PPA、软件商提供的源)
grep -rh "URIs:" /etc/apt/sources.list.d/*.sources # 查看已启用的软件源文件
apt-cache policy # 查看已配置的所有源(启用+禁用)

centos 查看源

1
2
3
4
ll /etc/yum.repos.d/*.repo  # 仓库配置文件
dnf repolist --help
dnf repolist --enabled # 显示已经启用的仓库(默认)
dnf repolist --all # 显示所有的软件仓库(启用+禁用)

更新和升级

ubuntu

1
2
3
4
5
6
7
8
9
10
11
12
apt-get update               # 从配置的软件源获取最新的软件包列表信息(元数据),更新本地的软件包索引和缓存。

apt-get upgrade # 只更新已安装的软件包。会安装新的依赖包。如果升级某个包需要移除其他已安装的包,会跳过升级,避免破坏现有系统环境。
apt-get dist-upgrade # 升级时智能处理依赖关系。会安装新的依赖包、移除不再需要/冲突的包、更换核心软件包。用于跨版本升级或内核升级。

apt-get autoclean # 清除旧的已安装的包缓存文件
apt-get autoremove --purge # 移除不再需要的软件包及其配置文件。--purge 参数的作用是同时删除残留配置文件
apt-get clean # 清除所有已下载的包缓存文件

# apt 选项 --purge:可和 remove、autoremove 等组合,用于卸载软件并删除残留配置文件
# apt 子命令 purge:卸载软件并删除残留配置文件
apt purge pkg 等价于 apt remove --purge pkg

centos

1
2
3
4
5
6
7
8
9
dnf makecache           # 下载软件包仓库中的软件包列表和其他元数据到本地缓存,以便快速查找和安装软件。是一个准备操作

dnf check-upgrade # 查询系统已安装的软件包在仓库中是否有新版本。不下载、不安装,只显示更新信息。
dnf -y update # 更新系统中已经安装的软件包到可用的最新版本。默认只升级已经安装的软件,不会删除任何包。请使用 upgrade。
dnf -y upgrade # 与 update 不同的是,它会处理包依赖变化,有时会自动移除不需要的旧包。“更彻底的更新”。推荐!!!

dnf clean packages # 删除所有缓存的软件包文件(通常是 .rpm 文件)。
dnf clean metadata # 删除所有仓库的元数据文件(XML 格式,包含软件包列表、版本、依赖关系等信息)。
dnf clean all # 清理所有缓存文件,包括软件包、元数据 等等。

发行版

/etc/*-release 文件,它们用来 识别和描述操作系统发行版信息

1
2
find /etc | grep -E ".*-release"
cat /etc/os-release # 现代 Linux 统一标准文件(systemd 之后几乎都有)

内核

1
2
3
4
# 查看当前使用的内核版本
uname -r # 仅显示内核版本号(最常用)。
uname -a # 显示所有内核信息,包括内核版本、操作系统、主机名、架构等。
cat /proc/version # 这个文件记录了 Linux 内核的版本、用于编译内核的 gcc 的版本、内核编译的时间,以及内核编译者的用户名。

内核清理

ubuntu

1
2
3
4
5
6
7
8
# 查看系统已安装的内核
dpkg -l | grep linux-image
dpkg --get-selections | grep linux-image

# 删除旧内核
apt-get autoremove --purge # 系统一般会保留 2~3 个旧内核以防万一
# 手动删除
apt-get purge linux-image-6.8.0-45-generic linux-headers-6.8.0-45-generic

centos

1
2
3
4
5
6
7
8
9
# 查询系统已安装的内核
rpm -qa | grep kernel
dnf list installed | grep kernel

# 删除旧内核
dnf autoremove
dnf remove --oldinstallonly # 一键删除旧内核
# 手动删除
dnf remove kernel-modules-core-5.14.0-522.el9.x86_64 kernel-core-5.14.0-522.el9.x86_64

网关、IP、DNS

1
2
3
4
5
6
7
8
9
ip route                                  # 查看网关地址
ip addr show # 显示系统中所有网络接口的IP地址和相关配置信息,包括MAC地址、接口状态和网络配置。

# resolvectl 是一个在较新的Linux系统中用于管理和查询系统DNS解析配置的命令行工具,它是 systemd-resolved 服务的一部分。
resolvectl status # 显示每个网络接口(网卡)的详细配置。全面状态
resolvectl dns # 是 resolvectl status 输出内容的子集。聚焦DNS服务器
resolvectl dns <interface> <DNS server> # 为指定的网络接口(例如 ens33)设置静态DNS 服务器地址(例如 8.8.8.8)
resolvectl query www.baidu.com # 执行DNS查询,获取百度的IP地址,它会报告查询使用的协议和网络接口。
resolvectl flush-caches # 清除DNS缓存。当DNS记录发生变化时,使用此命令清楚本地DNS缓存,强制系统重新查询DNS服务器。

从DHCP改为固定IP

使用 ip addr 命令查看您的网络接口名称(例如 eth0ens33)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
root@localhost:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:7d:6c:a0 brd ff:ff:ff:ff:ff:ff
altname enp2s1
inet 192.168.0.102/24 metric 100 brd 192.168.0.255 scope global dynamic ens33
valid_lft 6189sec preferred_lft 6189sec
inet6 fe80::20c:29ff:fe7d:6ca0/64 scope link
valid_lft forever preferred_lft forever
root@localhost:~#
root@localhost:~# ls /etc/netplan
50-cloud-init.yaml

备份原配置 sudo cp /etc/netplan/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml.bak

编辑 Netplan 配置文件 sudo vim /etc/netplan/50-cloud-init.yaml 内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 保持缩进正确:Netplan 使用 YAML 格式,缩进必须用空格,不能用 Tab
network:
version: 2
ethernets:
ens33: # 网卡名称
dhcp4: no
addresses:
- "192.168.0.7/24" # /24 是CIDR表示法,表示子网掩码,也就是该IP所在网络的大小。将IPv4转换为32位整数值,前24位是网络号,剩下的8位是主机号。
routes:
- to: "default" # default 是 0.0.0.0/0 的简写,表示 IPv4 默认路由,“匹配所有目的地址的流量”,即所有未匹配到其他路由的包都走这里”
via: "192.168.0.101" # 查看网关 ping tplogin.cn
metric: 100 # 路由优先级,数字越小优先级越高。如果系统存在多条默认路由,内核会根据 metric 选择哪条路由发送流量。默认写 100 就可以,一般不需要改动,除非你有 多网卡 / 多路由策略。
nameservers:
addresses:
- 114.114.114.114
- 114.114.115.115
search: [] # 默认DNS搜索域

保存文件后执行

1
2
3
4
# 系统会应用新的网络设置,可通过 ip addr 或 ping -c 4 www.runoob.com 测试网络是否可用
netplan apply
# 如果 apply 出错,请重启网络服务
systemctl restart systemd-networkd

修改hostname

主机名是用于标识网络上设备的标签,在同一网络上,你不应有两台或更多台具有相同主机名的计算机。

hostnamectl

hostnamectl 是 systemd 系统和服务管理器套件的一部分,用于查询和修改系统主机名。

Linux 系统通常涉及三种不同类型的主机名,hostnamectl 可以分别或同时进行管理:

  • 静态主机名 (Static hostname): 这是保存在配置文件(通常是 /etc/hostname)中的标准主机名。它在系统启动时被初始化。永久的。
  • 瞬态主机名 (Transient hostname): 由内核在运行时维护的主机名。DHCP 客户端、云平台(比如 OpenStack、AWS)分配主机名时常用它。临时的,重启失效。默认与静态主机名相同
  • “美观”主机名 (Pretty hostname): 一个更友好、供人类阅读的主机名,可以包含空格和特殊字符(例如:”My Laptop”)。保存在 /etc/machine-info

你可以使用 --static--transient--pretty 选项来单独查询或设置这些主机名。

1
2
3
4
5
6
7
hostnamectl --help 
hostnamectl status # 查看系统主机名

hostnamectl set-hostname halbin-dev-zhaolq.halbin.mars.com # 会同时更新 静态主机名 和 瞬态主机名
hostnamectl set-hostname halbin-dev-zhaolq.halbin.mars.com --static # 静态主机名,永久的
hostnamectl set-hostname halbin-dev-zhaolq.halbin.mars.com --transient # 瞬态主机名,临时的,重启失效
reboot

hostname 是一个传统的命令行工具,属于 inetutilsnet-tools 包。它修改的是 瞬态主机名

1
2
hostname                                      # 查看系统主机名
hostname halbin-dev-zhaolq.halbin.mars.com # 瞬态主机名,临时的,重启失效

修改配置文件(老方法)

1
2
3
cat /etc/hostname
cat /etc/hosts
reboot

防火墙

192.168.0.0/24:表示一个包含 256 个地址(从 192.168.0.0192.168.0.255)的子网,其中 192.168.0.0 是网络地址,192.168.0.255 是广播地址,192.168.0.1192.168.0.254 是可分配的设备 IP 地址。

192.168.0.1/24:表示子网 192.168.0.0/24 中的第一个有效 IP 地址,通常被分配给网关或路由器。

Ubuntu

在 Ubuntu 系统中,最常用和推荐的防火墙管理工具是 UFW (Uncomplicated Firewall)

UFW 是一个对标准 Linux 防火墙工具 iptables 进行封装的前端工具,它大大简化了配置规则的复杂性,让用户可以轻松管理网络连接。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#************************************ UFW 状态检查与管理
ufw status # 查看 UFW 的当前状态(active 或 inactive)和已配置的规则。
ufw status verbose # 显示更详细的信息,包括默认策略和日志级别。
ufw enable # 启用 UFW,系统启动时会自动运行。注意:在启用前,请确保您已允许 SSH 端口,以防失去远程连接。
ufw disable # 完全禁用 UFW。
ufw reset # 清除所有规则,将默认策略设置为拒绝 (deny),并将状态设置为禁用 (inactive)。谨慎使用!

#************************************ 配置默认策略
ufw default deny incoming # 拒绝所有传入的连接(入站规则)。服务器和安全桌面的标准配置。这意味着除了您明确允许的端口(如 SSH、HTTP、HTTPS)外,所有外部或内部尝试连接您的机器的请求都会被拒绝。
ufw default allow incoming
ufw default deny outgoing # 拒绝所有传出的连接(出站规则)。严格安全环境或特定应用服务器。这会阻止您的机器主动发起任何网络连接,除非您明确允许(例如,允许您的服务器连接到外部 DNS 或更新服务器)。这通常会使日常桌面使用变得困难。
ufw default allow outgoing # 允许所有传出的连接(出站规则)。服务器和安全桌面的标准配置。

#************************************ 添加允许(Allow)规则(拒绝请使用deny)
# 基于 服务名、端口号、协议 来允许流量通过。
ufw allow ssh # 按服务名。允许 SSH 连接(自动解析为 TCP 端口 22)。
ufw allow 80 # 按端口号。允许所有协议(TCP/UDP)的 80 端口(HTTP)流量。
ufw allow http # 允许 80/tcp
ufw allow https # 允许 443/tcp
ufw allow 443/tcp # 按端口和协议。仅允许 TCP 协议的 443 端口(HTTPS)流量。
ufw allow 6000:6007/udp # 按端口范围。允许 6000 到 6007 之间的 UDP 端口。
ufw allow from 192.168.0.0/24 # 特定子网。允许来自 192.168.0.0/24 子网的所有传入(Incoming)连接。
ufw allow from 192.168.0.100 # 特定IP地址。允许来自特定 IP 地址的所有流量。
ufw allow from 192.168.0.100 to any port 25 # IP和端口。仅允许该 IP 地址访问本机的 25 端口(SMTP)。

#************************************ 添加拒绝(Deny)和限制(Limit)规则
ufw deny 23 # 拒绝所有尝试连接到 23 端口(Telnet)的流量。
ufw limit ssh # 允许 SSH 连接,但在 30 秒内如果同一 IP 尝试连接超过 6 次,则阻止该 IP 地址。这是防止暴力破解的推荐做法。
ufw reject 143/tcp # 拒绝连接请求,但发送一个拒绝响应(如 ICMP port unreachable),而不是直接丢弃数据包(deny行为)。

#************************************ 删除规则
# 按规则内容删除 (推荐):直接在命令前加上 delete 关键字,内容与添加规则时完全相同。
ufw delete allow 80/tcp # 删除允许 80 端口的规则
# 按编号删除 (适用于规则多且复杂的情况)
ufw status numbered # 先查看带有编号的规则列表
sudo ufw delete 2 # 然后使用编号删除

Centos

CentOS 7及更高版本默认使用 firewalld 作为防火墙管理工具,它采用**区域(Zone)**的概念来管理网络连接和接口的信任级别。

以下是使用 firewall-cmd 命令管理防火墙的一些常用操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#************************************ firewalld 服务管理
systemctl status firewalld # 检查 firewalld 服务是否正在运行。
systemctl start firewalld # 启动 firewalld 服务。
systemctl stop firewalld # 停止 firewalld 服务。
systemctl enable firewalld # 设置 firewalld 开机自启。
systemctl disable firewalld # 禁止 firewalld 开机自启。

#************************************ 常用防火墙配置命令
firewall-cmd --help # 查看帮助
firewall-cmd --version # 查看版本
firewall-cmd --get-default-zone # 查看当前默认的区域(通常是 public)。
firewall-cmd --get-active-zones # 查看区域信息
firewall-cmd --get-zone-of-interface=eth0 # 查看指定接口所属区域信息
firewall-cmd --list-all # 查看默认区域的运行时所有规则(服务、端口等)。
firewall-cmd --zone=public --list-all # 查看 public 区域的所有运行时规则。
firewall-cmd --reload # 应用永久配置,使更改立即生效,且不中断现有连接。

#************************************ 区域(Zone)概念
# 区域是 firewalld 的核心概念,用于根据网络环境定义不同的信任级别:
# 区域名称 信任级别 默认行为
# trusted(信任) 最高 允许所有网络连接。
# home(家庭) 中高 信任网络上的大多数计算机,允许少量入站连接。
# work(工作) 中 信任工作环境中的计算机,允许少量入站连接。
# public(公共) 低 默认区域,不信任网络上的其他计算机,只接受选定的入站连接(例如您手动开放的服务)。
# drop(丢弃) 最低 丢弃所有入站数据包,不回复任何信息,只允许出站连接。
firewall-cmd --set-default-zone=public # 修改默认区域

#************************************ 开放/关闭端口或服务,默认情况在 public 区域进行配置
# firewalld 的配置分为 运行时(runtime)和永久(permanent) 两种。
# 运行时配置立即生效,但在服务重启或系统重启后会丢失。
# 永久配置需要使用 --permanent 标志,并且需要重新加载防火墙才能生效。!!!!!!
firewall-cmd --zone=public --add-service=ssh --permanent # 添加服务(永久生效)
firewall-cmd --zone=public --remove-service=ssh --permanent # 关闭服务(永久生效)
firewall-cmd --zone=public --list-ports # 查看指定区域所有开放的端口号
firewall-cmd --zone=public --add-port=80/tcp --permanent # 开放端口(永久生效)
firewall-cmd --zone=public --remove-port=80/tcp --permanent # 关闭端口(永久生效)
firewall-cmd --zone=public --add-port=18881:65534/tcp --permanent # 开放指定范围的端口号

#************************************ 紧急模式
# 紧急模式是一个极端的安全措施,用于在系统检测到攻击或严重威胁时,立即丢弃(drop)所有网络数据包。
firewall-cmd --panic-on # 开启紧急模式。立即丢弃所有传入和传出的网络数据包。通常在系统遭受拒绝服务(DoS)攻击或检测到严重入侵企图时使用,以完全隔离服务器。
firewall-cmd --panic-off # 关闭紧急模式。停止丢弃所有数据包,恢复到正常运行时的防火墙规则。在安全威胁解除后,用于恢复正常的网络连接。
firewall-cmd --query-panic # 查询紧急模式状态。检查 firewalld 当前是否处于紧急模式。返回 yes 或 no。

Git环境变量

参考官网,编译安装

1
2
3
4
5
grep -qxF 'export PATH=/data/local/git/bin:$PATH' /etc/profile || \
echo 'export PATH=/data/local/git/bin:$PATH' >> /etc/profile

source /etc/profile
git -v

JDK环境变量

1
2
3
4
5
6
7
8
9
10
11
12
13
# 若存在 JAVA_HOME 行就替换,不存在就添加
grep -q "^export JAVA_HOME=" /etc/profile \
&& sed -i 's|^export JAVA_HOME=.*|export JAVA_HOME=/data/local/java/jdk-17.0.14+7|' /etc/profile \
|| echo 'export JAVA_HOME=/data/local/java/jdk-17.0.14+7' >> /etc/profile

# -q: 找到匹配项后不会向标准输出打印任何内容。
# -x: 强制仅匹配整行。这意味着模式必须匹配从行首到行尾的全部内容,该行的前后不会有任何其他内容。
# -F: 确保搜索模式中的所有字符(特别是 $、/、: 等)都按字面意思匹配,而不是被误认为是正则表达式的特殊含义。
grep -qxF 'export PATH=$JAVA_HOME/bin:$PATH' /etc/profile || \
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile

source /etc/profile
java -version

Maven环境变量

1
2
3
4
5
grep -qxF 'export PATH=/data/local/apache-maven-3.9.11/bin:$PATH' /etc/profile || \
echo 'export PATH=/data/local/apache-maven-3.9.11/bin:$PATH' >> /etc/profile

source /etc/profile
mvn -v

Gradle环境变量

https://gradle.org/install/

1
2
3
4
5
grep -qxF 'export PATH=/data/local/gradle-7.6.6/bin:$PATH' /etc/profile || \
echo 'export PATH=/data/local/gradle-7.6.6/bin:$PATH' >> /etc/profile

source /etc/profile
gradle -v

执行环境变量脚本

1
2
3
4
5
6
7
grep -qxF 'source /data/local/env/ideps-env.sh' /etc/profile || \
echo 'source /data/local/env/ideps-env.sh' >> /etc/profile

grep -qxF '. /data/local/env/ideps-env.sh' /etc/profile || \
echo '. /data/local/env/ideps-env.sh' >> /etc/profile

source /etc/profile