Linux配置
介绍一些Linux常见的优化配置,这里以Alma9.5为例。
安装软件
Linux各个发行版都有自带的软件仓库,就像安卓的Google Play一样。
RHEL使用 dnf 自动下载和安装软件
- 设置安装时选择最快的软件仓库
echo "fastestmirror=1" >> /etc/dnf/dnf.conf
- 更新所有软件
dnf update -y
- 删除所有不需要的软件
dnf autoremove -y
- 查看一个命令属于哪个包
比如ifconfig这个命令属于net-tools
[root@rs ~]# dnf whatprovides ifconfig
Last metadata expiration check: 1:14:16 ago on Thu 02 Jan 2025 04:05:00 PM CST.
net-tools-2.0-0.64.20160912git.el9.x86_64 : Basic networking tools
Repo : @System
Matched from:
Filename : /usr/sbin/ifconfig
管理服务
Linux是个服务器系统,有很多后台运行的服务,比如ssh服务、web服务、防火墙。不像Windows这种桌面系统,我们一般用哪个软件就打开哪个软件,不用就关掉。
以ssh为例展示一下如何管理服务。
- 查询sshd状态是running。
[root@rs ~]# systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: enabled)
Active: active (running) since Tue 2024-12-31 17:08:09 CST; 18h ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 596 (sshd)
Tasks: 1 (limit: 4700)
Memory: 16.7M
CPU: 2min 57.699s
CGroup: /system.slice/sshd.service
└─596 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"
- 管理服务
# 设置服务开机启动
systemctl enable sshd
# 启动服务
systemcel start sshd
# 重启服务
systemcel restart sshd
# 停止服务
systemcel stop sshd
# 启动服务并设置为开机启动
systemcel enable --now sshd
- 查看服务日志
上下方向键滚动,ctrl+c退出。
journalctl -u sshd
下面这个命令是在终端实时显示日志最新的内容,ctrl+c才会退出。如果服务启动失败要查找原因,在终端上运行这个命令,再在另一个终端上重启服务,这个终端就可以看到最新的服务日志滚动输出。
journalctl -u sshd -f
关闭SELinux
SELinux(Security-Enhanced Linux)是Linux的安全子系统。它更加安全,也更麻烦。一般root用户对Linux具有完全的控制权,SELinux把权限分割成更细的颗粒度,随便做点啥就要授权。我曾经遇到过ssh服务是以root用户运行的,防火墙也开放了22端口,启动了SELinux之后客户端却无法登录。所以一般就将SELinux关闭。
- 临时关闭SELinux,重启后失效。
setenforce 0
- 永久关闭SELinux,重启后生效
修改/etc/selinux/config,设置SELINUX=disabled。
如果SELinux默认打开,那么当前ELinux仍是启用状态。
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
设置交换空间(Swap Area)
交换空间相当于Windows里的虚拟内存文件。当内存不足的时候,Linux会把这个交换空间当作虚拟内存使用。一般这个交换空间设置为内存大小的两倍。以前交换空间需要专门划个分区,现在创建一个文件就可以了。
- 使用如下命令可以查看内存大小。这里可以看到是768M。当交换分区启动以后才能看到Swap。
[root@rs ~]# free -h
total used free shared buff/cache available
Mem: 768Mi 183Mi 457Mi 2.0Mi 238Mi 585Mi
Swap: 2.0Gi 21Mi 2.0Gi
- 创建文件/swapfile,bs是块大小,count是多少个块,这里创建的文件大小是1M x 2048 = 2G。
dd if=/dev/zero of=/swapfile bs=1M count=2048
- 设置文件权限
chmod 0600 /swapfile
- 设置并启动交换空间
mkswap /swapfile
swapon /swapfile
- 更新交换空间信息到/etc/fstab,这样开机会自动启用交换空间。
echo "/swapfile swap swap defaults 0 0" >> /etc/fstab
安装epel
安装EPEL(Extra Packages for Enterprise Linux)软件源,提供更多额外的软件包。
dnf install -y epel-release
安装elrepo
安装elrepo软件源,这个源提供更新的Linux内核。
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
dnf install -y https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm
# 开启Linux内核仓库
dnf config-manager --set-enable elrepo-kernel
设置时区
# 设置时区为东八区
timedatectl set-timezone Asia/Shanghai
# 安装和开启网络时间同步服务
dnf install -y systemd-timesyncd
systemctl enable --now systemd-timesyncd
升级内核
elrepo提供了两个系列的内核:kernel-ml(mainline主线版)和kernel-lt(lts长期支持版)。ml版本比较新,lts版本比较老更注意稳定性。我一般安装kernel-ml。
dnf install -y kernel-ml
# 只保留最新两个版本的内核
dnf remove --oldinstallonly --setopt installonly_limit=2 kernel
# 查看内核版本
uname -r
使用bbr
bbr是Google开发的拥塞控制算法,据说可以提高网络速度。
- 配置
sysctl -w "net.core.default_qdisc=fq" >> /etc/sysctl.conf
sysctl -w "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
- 查看
sysctl net.ipv4.tcp_available_congestion_control
sysctl net.ipv4.tcp_congestion_control
防火墙
- 查看当前的防火墙规则
主要看services和ports
firewall-cmd --list-all
- 管理服务
具体服务对应的网络协议和端口可以从/etc/services查询
以ssh为例
# 添加服务到防火墙
firewall-cmd --permanent --add-service=ssh
# 删除服务
firewall-cmd --permanent --remove-service=ssh
- 管理端口
# 添加端口
firewall-cmd --permanent --add-port=22/tcp
# 删除端口
firewall-cmd --permanent --remove-port=22/tcp
- 重新加载防火墙规则
这样前面添加和删除的规则才生效
firewall-cmd --reload