Ubuntu 安装 NVIDIA 显卡驱动并禁止自动更新
Ubuntu 上装好 NVIDIA 驱动后,系统更新有时会顺手把驱动也升上去,版本一变就可能带来兼容性或稳定性问题。这篇分两部分:先把 NVIDIA 驱动装好,再用 APT pin 和 apt-mark 两道手段把驱动版本锁死。驱动安装与验证需要真实显卡,本文沿原文实测记录(Ubuntu 18.04 + GTX 1050)整理并更新到 Ubuntu 24.04 基线;版本锁定部分(pin 文件、apt-mark hold)不依赖显卡,已在 Ubuntu 24.04.4 容器中完整实测,输出均为实测结果。 准备工作开始之前,确保系统已备份且有 sudo 权限,然后更新系统: 1sudo apt update && sudo apt upgrade -y 确定显卡型号先弄清 NVIDIA 显卡型号,以便选择正确驱动分支: 1lspci | grep -i nvidia 输出形如 01:00.0 VGA compatible controller: NVIDIA Corporation [型号] (rev a1)。 安装 NVIDIA 驱动查看推荐驱动Ubuntu ...
用 rbash(受限 Shell)限制用户的命令执行环境
外包人员临时上机、学生机开放账号,都不能让对方在系统里随便执行命令。Linux 自带的受限 Shell(rbash)就是干这个的:把用户的登录 shell 换成 bash 的受限模式,再配合一个只装”白名单命令”的目录和收窄的 PATH,用户就只能执行你放行的命令、访问你允许的路径。配置成本很低——不装任何额外软件,三步做完——适合教育环境、企业服务器和公共访问终端这类场景。本文在 Rocky Linux 9 上完整走一遍,并逐项实测哪些操作会被拦截、哪些命令能逃逸。 实验环境 Rocky Linux 9.3 容器(RHEL 9 同源,bash 5.1.8) 关键差异:RHEL 8/9 默认不提供 /bin/rbash 文件(bash 包本身支持受限模式,需要手动建软链);CentOS 6/7 时代的 bash 包会预装 /bin/rbash,老教程里 useradd -s /bin/rbash 能直接用,搬到 RHEL 9 上会踩坑 rbash 的限制机制rbash 是 bash 的受限模式。bash 在启动时检查自...
用 logrotate 管理 Nginx 日志:配置、钩子与实测
Nginx 的访问日志和错误日志是持续增长的,不管不问迟早写满磁盘,翻历史日志时也会被巨大的单文件拖累。logrotate 就是系统自带的解法:按周期轮换、压缩、删除旧日志,配合 postrotate 钩子让 Nginx 无缝切换到新文件。这篇以 Nginx 为例走一遍完整配置,全流程在 nginx:alpine 容器实测(nginx/1.31.5 + logrotate 3.22.0),包括”漏掉 postrotate 会怎样”的对比实验。 实验环境 nginx:alpine 容器(nginx/1.31.5),apk add logrotate(3.22.0); 日志落在真实文件(镜像默认把 access.log 软链到 stdout,先删掉软链建普通文件); 周期参数(weekly 等)靠 -f 强制触发验证,无需等一周。 安装大多数发行版默认已装,没有的话用包管理器补上: 123sudo apt install logrotate # Debian/Ubuntusudo dnf install logrotate # CentOS/RHEL/R...
Rocky Linux 9 搭建 Postfix + Dovecot 邮件服务器(附 CentOS 7 差异)
需要自己掌控邮件收发——比如给内部系统发告警、给注册用户发通知——可以用 Postfix 做发送(MTA),Dovecot 做接收(IMAP/POP3),两者配合就是一套够用的自建邮件服务。本文主环境为 Rocky Linux 9,从安装、双配置检查到本机投递闭环全部在容器里实测通过:postfix check 无输出、25/143 正常监听、测试邮件在 maillog 里留下 status=sent (delivered to maildir)。 跨服务器的收发依赖 MX 记录和 25 端口连通性,这部分容器验证不了,文末标注了验证边界;老读者关心的 CentOS 7 差异集中在「历史版本差异」一节。 前置条件 Rocky Linux 9(或同系 RHEL 9 发行版),root 权限; 一个可用的域名(本文以 example.com 为例),能把 A/MX 记录指到这台机器; 25/110/143 等端口未被云厂商封禁(多数云默认封 25,发信需申请解封)。 一、安装必要的软件安装 Postfix、Dovecot,以及用于安...
Rocky Linux 9 搭建 BIND DNS:正向与反向解析配置(附 CentOS 7 差异)
内网机器一多,靠 /etc/hosts 维护域名就变成灾难,这时候该上自己的 DNS 了。这篇文章用 BIND 搭一台 DNS 服务器,把正向解析(域名到 IP)和反向解析(IP 到域名)一次配好,最后附上日常维护和排障的要点。 本文全流程在 Rocky Linux 9 容器实测通过:BIND 9.16.23-RH,两道语法检查、正反两个方向的 dig 解析、rndc reload 平滑加载全部验证,输出均来自实跑。CentOS 7 的差异集中在「历史版本差异」一节。 一、软件下载安装 BIND 主程序和查询工具,都在发行版默认仓库里: 1dnf install bind bind-utils bind:DNS 服务器主程序。 bind-utils:DNS 查询工具,包括 dig 和 nslookup。 装完确认版本并记录,实测输出 BIND 9.16.23-RH (Extended Support Version): 1named -v 二、规划动配置之前先把三件事定下来: 决定域名:例如 example.com。 规划 IP 地址:为 DNS 服...
Apache 平滑升级:从 2.4.41 到 2.4.46 的完整流程
Apache 版本要升级时,直接卸旧装新会有一段服务中断。这篇文章记录的思路是:把新版本编译安装到一个独立目录,配置迁过去、单独起个端口测一遍,确认稳定后再做切换,把升级对线上服务的影响压到最低。走完整个流程,新旧两套并存、随时可以反向切换。 双版本并行流程本次在 Rocky Linux 9 容器里重新完整实测:旧版本 2.4.41 跑 80 端口的同时,新版本 2.4.46 在 8080 独立测试,互不影响;文中版本输出与并行、切换的验证结果均来自这次实跑。历史版本从 archive 站下载在今天的网络上依然可用。 前提条件 一台装好 Apache HTTP Server 的 Linux 服务器,root 或 sudo 权限; 编译环境:gcc、make、pcre-devel、expat-devel、openssl-devel,外加下载用的 wget(RHEL 9 系一条 dnf install 装齐); 升级前已备份当前 Apache 的配置文件和关键数据。 还有一个下载层面的前提:2.4.46 这类历史版本已不在 httpd.apache.org 的主下载列表里,要从 a...
/proc/sys/vm/drop_caches 最佳实践:手动释放内核缓存
Linux 会把空闲内存拿来做文件缓存,free 里内存”占满”很多时候只是缓存在工作,并不是真的不够用——available 那一列才是应用真正能拿到的量。所以 /proc/sys/vm/drop_caches 不该天天清,但性能测试前要个干净基线、维护窗口想从干净状态开始时,它是标准工具:不用重启,往这个特殊文件里写个数字就能让内核释放对应类型的缓存。 这篇按场景讲清三个值各自清什么、怎么验证真的清了、以及那个几乎人人踩过的 sudo echo 重定向坑。全部命令在 Rocky Linux 9.3 特权容器实测(内核为 Docker Desktop VM 的 7.0.12-linuxkit,drop_caches 作用于该内核)。 它能清什么向 /proc/sys/vm/drop_caches 写入不同的值,内核清理不同范围的缓存: 写入值 清理范围 对应内存 1 页面缓存(pagecache) 最近访问过的文件内容,free 的 buff/cache 2 目录项(dentries)+ inode 缓存 文件系统元数据,/proc/...
Rocky Linux 9 安装 MySQL 8.0(附 CentOS 7 / MySQL 5.7 差异)
在 Linux 上装 Oracle 的 MySQL,两条路:走发行版默认仓库,或添加 MySQL 官方仓库装指定版本。这条岔路在两个时代给出的答案完全相反——CentOS 7 的默认仓库里只有 MariaDB、没有 MySQL;而 Rocky Linux 9 的默认仓库直接提供 MySQL 8.0,一条 dnf install 就能装上。 本文主环境为 Rocky Linux 9,从安装、初始化到建库建号的全流程在容器里实测通过(MySQL 8.0.46);CentOS 7 / MySQL 5.7 时代的入口报错与绕行办法保留在「历史版本差异」和「常见报错」,供仍在维护老机器的读者对照。 方式一:从默认仓库安装(Rocky Linux 9)1. 安装 MySQL1dnf install mysql-server el9 的 AppStream 仓库直接提供 MySQL 8.0 系列,实测装上的是 8.0.46。注意包名是 mysql-server——这与 CentOS 7 正好相反(那边同名命令会报无包,见历史版本差异)。 2. 初始化与启动真实机器上,systemd...
编写自动重启 Tomcat 的 Shell 脚本
Tomcat 跑久了难免遇到内存泄露或者需要更新部署应用的情况,一次干净的自动重启比手动登录服务器省心得多。但”重启脚本”最容易犯的错是只管拉起、不管验证——本文沿用原文的经典脚本作为起点,在 Rocky Linux 9 容器(Tomcat 10.1.59)上实测出它的一处误报缺陷,再给出修正版:优雅等待、判空、进程对比、HTTP 探活四步闭环。 环境设定对 Tomcat 安装目录有读写执行权限(本文假设安装在 /opt/tomcat),JAVA_HOME 可用,curl 在 PATH 里(探活用)。 原版脚本先停、等 10 秒、防残留强杀、拉起、对比前后 PID 判断成败: 12345678910111213141516171819202122232425262728293031323334353637383940#!/bin/bash############################################################################################## ...
Rocky Linux 9 查看网卡速率:ethtool、ifconfig、nmcli 三种方法
排查网络问题时,第一件事是确认网卡实际协商到了什么速率——链路灯亮着不代表跑在预期带宽上,千兆口协商成百兆、自协商失败降速,这类问题在机房里并不少见。Linux 下查网卡信息有三个常用入口:ethtool 看链路层速率,ifconfig(或它的现代替代 ip addr)看接口状态,nmcli 看 NetworkManager 管理下的设备详情。这篇按”想看什么”来组织,对号入座即可。 文中全部输出实测自 Rocky Linux 9.3 容器(ethtool 6.15、net-tools 2.0、iproute 6.17、NetworkManager 1.54.3,aarch64)。CentOS 7/8/9、RHEL 系上命令和字段相同,数值因环境而异。 想看协商速率和双工:用 ethtoolethtool 直接向网卡驱动查询链路层状态,是看速率的首选。Rocky Linux 9 最小安装默认不带,把这篇用到的 ethtool 和 net-tools 一起装上: 1dnf install -y ethtool net-tools 注:Rocky 9 的 d...