大概每一个刚接触Linux的人,都会在“Linux安装配置”这四个字上卡过壳。网上教程一搜一大把,但要么只讲某个发行版的图形界面点下一步,要么一上来就甩一堆fdisk、grub的名词,看完更懵。我这些年帮团队搭环境、给客户做部署、带新人入职,几乎每周都要回答一遍“这个该怎么装”“那个配完为什么起不来”。所以干脆把这套东西按自己的实操路径完整梳理一遍:从发行版怎么选、虚拟机怎么做规划,到装完系统之后的基础配置,再到MySQL、Redis、JDK这类软件的通用安装套路,最后补一批日常运维常用的命令和故障排查思路。
这篇文章不偏向某个单一系统,也不假设你已经会Linux命令。所有东西都按“自己动手装一台能用、能跑服务、能排查问题的机器”这条线来走,每一步都说清“为什么这么做”,并附上我踩过的坑。适合零基础想入门的人,也适合刚转岗运维、想系统过一遍安装配置细节的同学。
1. 动手前先把方向定明白:选发行版就是选未来
很多新手上来就问“Linux怎么下载”,其实Linux不是一个系统,而是一整个家族。不同发行版之间的内核同源,但包管理、默认目录结构、启动方式、社区生态都不一样,选错了后面会走很多弯路。所以安装之前,先花十分钟把发行版问题想清楚。
1.1 不同发行版的核心差异
市面上常见的发行版基本可以分三大阵营。Debian系(包括Ubuntu、Linux Mint等)用apt作为包管理器,.deb格式的软件包,社区资料极其丰富,遇到问题基本一搜就有答案,新手翻车率最低。RedHat系(包括CentOS、Rocky Linux、AlmaLinux、Fedora)用dnf/yum作为包管理器,.rpm格式,服务器领域的老牌玩家,很多企业历史存量机器都是这个体系,但CentOS 8之后官方策略调整,现在的替代方案主要是Rocky和Alma。Arch系用pacman,滚动更新,资料最硬核,适合想彻底搞懂Linux底层的玩家,但生产环境一般不建议用滚动更新的系统。
国产Linux这几年也值得单独拿出来说,统信UOS、麒麟等基于Linux内核做了大量本地化适配,办公、政企场景迁移的非常多。如果你面对的是一台预装国产操作系统的机器,本质上还是Linux那套命令行逻辑,apt或rpm的玩法依然适用,只是软件仓库里多了一些办公套件和适配驱动。别一听名字陌生就慌,底层思路完全相通。
发行版选择速查: - 个人学习、桌面日常 -> Ubuntu / Linux Mint - 公司服务器、生产环境 -> Rocky Linux / AlmaLinux - 已有CentOS存量机器迁移 -> Rocky / Alma - 嵌入式、路由器、极简环境 -> Debian(不带桌面) - 想深入内核原理、折腾编译 -> Arch / Manjaro1.2 下载镜像时最容易忽略的一步
镜像下载地址建议直接用各大镜像站的Linux发行版目录,不要满互联网找第三方下载站,一个是版本新旧问题,另一个是被篡改的风险太大。下载之后养成做校验的习惯,特别是在一个系统要被批量部署或者要跑生产业务的时候。镜像站通常都会在ISO文件旁边放SHA256SUMS文件,下载后用sha256sum命令算一遍再和文件里的值比对,一致才说明文件完整、没被动过手脚。
我见过太多次“装到一半提示找不到文件”“安装器校验失败”的案例,最后追根溯源都是下载的ISO损坏了。这个习惯花一分钟,能省一晚上的折腾。
2. 虚拟机安装Linux的完整流程
现在的计算机资源普遍很充裕,绝大多数情况下没必要直接拿物理机去试错。我强烈推荐新手和做实验的人用虚拟机安装Linux,原因有两个:一是快照功能可以在系统搞坏之后一键回到之前的状态,二是可以随意调整硬件配置模拟不同环境。下面按VirtualBox为例讲整个流程,VMware Workstation的思路完全一样,只是界面选项叫法略有区别。
2.1 创建虚拟机之前,先把资源规划好
很多人拿到镜像就开始创建虚拟机,内存随便拉一个值,磁盘点默认,结果装完发现系统卡成幻灯片,或者磁盘空间不够。规划这一步其实值得花几分钟。我常用的规划逻辑是这样的:安装桌面版的话内存至少给4GB,否则打开个浏览器加个终端就能把内存吃满;服务器版不带图形界面的,2GB内存就很宽裕了。CPU核心数给2个以上,但要记住,你给虚拟机的CPU核心数不要超过物理机逻辑核心数的一半,否则宿主机自己会变慢。
磁盘空间的规划往往是最多人忽视的。我建议新手机器至少给40GB,最好直接给60GB。用默认的“动态分配”即可,也就是只占实际用到的空间,后面需求变大了再扩容。真正做生产模拟的时候,再考虑固定大小盘、LVM之类的方案,对性能和管理的考量不太一样。
2.2 五步创建一台能跑Linux的虚拟机
- 下载好ISO镜像,打开VirtualBox,点击“新建”,填写虚拟机名称,文件夹类型会自动识别系统类型和版本,不用手动管。
- 内存按上面说的给,直接填4GB(4096MB),不要低于2GB,太低会卡在图形安装界面。
- 虚拟硬盘选择“现在创建虚拟硬盘”,容量给到40160GB以上,选择VDI格式、动态分配。
- 在“设置”-“存储”里,把镜像挂载到光驱(控制器IDE或SATA都行),然后启动虚拟机会自动从光盘引导。
- 如果启动后黑屏或卡在启动界面,多半是EFI的问题,进设置把“启用EFI”关掉,或者反过来开启,视机器默认固件类型而定。
有个困扰很多人的问题是,安装过程非常慢,连鼠标都有延迟。这种一般不是机器性能不行,而是没有安装增强功能(Guest Additions)。系统装好后,从菜单栏的“设备”里选择“安装增强功能”,在虚拟机内挂载光盘执行VBoxLinuxAdditions.run,重启后就顺滑了。VWware里对应的叫open-vm-tools,安装后支持自适应分辨率和剪贴板共享。
2.3 安装过程中的关键选项
到了安装界面,最常见的两个选择是分区和软件包。桌面环境我一般就直接选“使用整个磁盘”加LVM,不折腾手工分区,Ubuntu默认给的方式对桌面用户完全够用。但如果是服务器用途,尤其是要做数据库、存储服务的机器,我建议手动分区,这样心里有数。
一处合理的服务器分区方案大概是这样的规格:
| 挂载点 | 大小 | 文件系统 | 说明 |
|---|---|---|---|
| /boot | 1GB | ext4 | 放内核和引导文件,不需要太大,1GB很充裕 |
| / | 剩余全部或按需预留 | ext4 或 xfs | 根分区,系统文件和日志默认都在这里 |
| /home | 按需 | ext4 | 如果是多人使用,单独分出来方便隔离数据 |
| swap | 内存的1倍左右 | swap | 大内存机器可以很小,甚至不用 |
很多人对swap的大小有争议。我的经验供参考:物理内存小于4GB的机器,swap给到内存的1.5倍没有心理负担;服务器物理内存16GB以上,swap给8GB绰绰有余,甚至直接不建swap都行,但设置了也能作为内存吃紧时的兜底。交互区文件在极端情况下能救你一次,别太抠门儿。
安装过程的最后一步会提示创建用户和设置root密码,系统一般默认不允许直接用root登录图形界面(具体策略因发行版而异)。大部分情况下保持这个默认,日常用普通用户登录,需要权限的时候用sudo。老想着切到root干活,总有一天会把系统目录权限改乱。
3. 装完系统只是开始:基础配置与用户体系
系统能开机进入桌面或者命令行控制台,只能算安装完成,还没到配置完成。这一步要解决三件事:用户体系、网络环境、软件源。把这三个弄明白,后面的软件安装才有基础。
3.1 用户管理:为什么建议日常别用root
Linux是多用户系统,每个用户有自己的家目录和权限边界。root是超级管理员,对系统拥有一切权限,这也是为什么安全最佳实践都强调不要用root干日常活。我见过一个同事为了省事,一直用root在服务器上操作,某次命令写错了,把/home底下一个放数据的目录整个删掉,恢复成本极高。
新建用户的命令很简单:
# 新建用户 useradd -m -s /bin/bash zhangsan # 设置或修改密码 passwd zhangsan # 把用户加入sudo组(Debian系) usermod -aG sudo zhangsan # RedHat系 usermod -aG wheel zhangsan-m参数是同时创建家目录,-s指定登录shell。不加-m的话,用户拿到的是一个不存在的家目录,很别扭。sudo组的作用是允许用户通过sudo执行管理员权限的命令,而不需要切换到root。需要注意,sudo的命令要输入自己的密码,不是root密码,这个很多新手会搞混。
3.2 网络与主机名:服务器被访问的基本盘
安装带桌面版的Linux,网络通常DHCP自动搞定,不需要管。但如果是在服务器机房部署,或者虚拟机网络模式改了,没网是最常见的故障,先检查这几样:
# 查看当前IP地址 ip addr show # 查看路由 ip route # 测试DNS ping -c 4 223.5.5.5没有IP就先看网卡是不是没激活。不同发行版的网络管理工具不一样,服务器版常用nmcli,桌面版有NetworkManager控制台,但核心无非两件事:网卡开启了没有、有没有分配到地址。CentOS系的早期版本网卡默认可能处于未激活状态,执行nmcli device connect eth0一类的操作就能拉起来;Ubuntu系装完系统一般就是通的。
主机名也值得顺手改掉。默认的localhost看起来都一个样,真到维护一堆机器的时候,你对着十几台全是localhost的终端逐个排查,会非常痛苦。改主机名一条命令就能实现,此处以常规systemd系统为例:
hostnamectl set-hostname web01改完之后重新登录终端就能看到新的提示符,尽量在装机初期完成这个操作,避免业务部署了再改带来不必要的细节困扰。更规范的做法是同时配置好/etc/hosts里对应的解析,让主机名在内网可以直接被找。像Hadoop、Zookeeper这类集群组件,主机名对应关系写错了会导致节点互相连不上,是很经典的错误。
3.3 包管理器与软件源
装软件的第一步其实是选对官方软件源。系统默认的源可能在官方服务器上,国内访问速度往往是龟速。换了国内更快,但也要看情况,有些公司在内网自建了镜像源,那连接内网源速度最佳。配置源的本质就是告诉包管理器“去哪个仓库找软件”,Locate文件、更新缓存等,不同发行版路径和命令不一样,但道理是一样的。
以Debian系为例,直接修改(或者若系统保留了原文件则新建)源列表文件:
sudo sed -i 's|http://archive.ubuntu.com/ubuntu|http://mirrors.aliyun.com/ubuntu|g' /etc/apt/sources.list sudo apt updateRedHat系和Debian系不太一样,它用的是仓库文件位置普遍在/etc/yum.repos.d/目录下,从CentOS 8开始转用dnf命令,基础命令风格与yum基本一致。系统初始化阶段把源配好,后边安装各种依赖包的速度是天壤之别。
我给新手一个很实用的建议:装完系统第一件事就是更新软件源并做一次系统升级,把内核和关键组件升到当前补丁水平再开始部署业务。在还没跑业务的时候升级代价最小,业务上线之后升级任何东西都要考虑影响窗口。
4. 软件安装配置方法论:从MySQL到Hadoop的通用思路
热搜词里出现了一长串“XX安装配置教程”,MySQL、Git、Node.js、JDK、Redis、Maven、Tomcat、Hadoop……如果把每个软件单独的安装教程都写一遍,篇幅得多出十倍,而且大部分步骤是重复的。所以这一章我讲方法论,把这套逻辑弄明白,面对任何软件都能举一反三。
4.1 三种安装方式,各自适用的场景
Linux装软件基本就是三条路:通过包管理器直接装、从官网下载二进制包解压配置、下载源码编译安装。
包管理器(apt/dnf)装机最快,优点是依赖自动解决,升级卸载也方便,但缺点是包仓库里的版本往往滞后。比如你在Ubuntu的默认仓库里装Redis,装到的可能是2-3年前的版本。如果只是学习或者跑一些不敏感的业务,这样最省心。
二进制包算是“中间路线”,从官网或镜像站下载一个已经编译好的tar.gz,解压到自己指定的目录就能用。JDK、Node.js、Maven这类带完整运行环境的软件,我基本都是用这种方式装,好处是版本完全可控,想换就直接换目录,缺点是依赖要自己确认,但这类软件本身依赖很少,问题不大。
源码编译就是自己动手搓了,./configure、make、make install三部曲。我的态度是:能不用就不用。编译一次要几分钟到半小时,中间还可能缺各种开发库报错。什么时候才必须用源码编译?软件仓库里没有你需要的版本,或者软件官方只提供源码包,Nginx的某些定制模块、内核模块这类场景才会选。日常用包管理器和二进制包就够了。
| 安装方式 | 优点 | 缺点 | 适合场景 |
|---|---|---|---|
| 包管理器 | 依赖自动处理、卸载干净 | 版本滞后、定制性差 | 依赖多的服务、常规部署 |
| 二进制包 | 版本新、目录可控 | 手动管依赖 | JDK、Node.js、Maven |
| 源码编译 | 最灵活、可用最新特性 | 耗时、依赖开发库 | 定制需求的场景 |
4.2 环境变量和PATH:为什么命令能直接被找到
凡是二进制包安装的软件,都会遇到环境变量配置的问题。PATH是一个环境变量,它保存了一组目录的列表,当你在终端输入一个命令名,shell会按顺序去这些目录里找对应的可执行文件。很多新手“装完了但某个命令不存在”,多半就是没有把软件的bin目录加到PATH里。
配置环境变量有多个地方可以写,优先级和作用范围不太一样。针对当前用户的配置写在~/.bashrc或者~/.profile里,只对当前用户生效;全局配置写在/etc/profile或者/etc/profile.d/目录下新建的.sh文件里,对所有用户生效。我个人的习惯是,系统级别的软件(装了全公司要用的)就丢到/etc/profile.d/,自己个人用的工具写进~/.bashrc。JDK的标准配置例子(写到/etc/profile.d/java.sh):
export JAVA_HOME=/opt/jdk-17 export PATH=$JAVA_HOME/bin:$PATH配置完要执行source /etc/profile或重新登录,当前终端才能生效。值得注意的是,JAVA_HOME在很多中间件里会用到,Tomcat、Hadoop、Maven等都要依赖这个变量,所以即使你把java命令直接放到了/usr/bin,最好也把JAVA_HOME显式配置出来。
4.3 服务类软件的安装实战:以MySQL和Redis为例
数据库、缓存这类以服务方式运行的软件,安装配置的核心套路也高度相似。以MySQL为例,不论从二进制包安装还是apt安装,装完之后几乎一定要做的事有:初始化并启动服务、设置root密码、开放或限制监听地址。二进制包的MySQL尤其要注意初始化和目录权限问题,步骤稍微复杂,但网上公开资料足够多。
实操中我强烈建议关注配置文件的两个核心项。一是监听地址bind-address,默认情况下MySQL只允许本机访问,服务器部署时想允许其他机器连,就要改成0.0.0.0,同时防火墙放行3306端口;二是配置简单些也没关系,先把坑少走完。
Redis也是同样的逻辑,但它比MySQL更“危险”。Redis默认不配置密码,而且老版本里的protected-mode(保护模式)设计初衷是为防范无认证访问带来的安全风险,部署时尤其要注意。如果把那个保护机制的参数关闭,同时又没设密码,谁都能访问这台Redis,其中存放的数据在公网环境下极易被清空。在云服务器上出于谨慎,我建议即便只在内网用,也打开密码认证:
# 在redis.conf中取消注释并设置 requirepass yourpassword设置之后,客户端连接时认证正确才能正常访问,这是很基本的操作,但真的很多公司因为这条没配被薅数据。
4.4 GIT、Node.js、Maven等重配置文件工具的注意点
Git的配置主要是user.name和user.email,提交代码时必须有这两项,否则提交会失败。全局配置一次就搞定:
git config --global user.name "你的名字" git config --global user.email "你的邮箱"Node.js安装之后要注意npm的registry源,默认源在国外,可以用镜像源来加速,常用配置命令为:
npm config set registry 一个国内镜像源地址Maven同理,它的配置文件是conf/settings.xml,里面可以指定镜像仓库和本地仓库存放路径。不配置镜像源的话,第一次拉依赖可能等得极其痛苦。本地仓库路径默认在用户目录的.m2/repository下,也可以自定义,否则C盘或系统盘空间不够时你会很想骂人。
从这里可以总结出通用规律:配置类词汇拿到手先分清两类,一类是“环境类”(PATH、JAVA_HOME、HOME),另一类是“软件自己的配置”(MySQL的my.cnf、Redis的redis.conf、Maven的settings.xml)。前者决定了软件能不能被找到、能不能正常运行,后者决定了软件行为是什么样。每次换新软件,按这两条线去排查配置问题,能少走很多弯路。
5. 日常运维必备的Linux操作与问题排查
配置完机器,日常运行阶段才是真正的考验。Linux的运维工作本质上就是几类事:看日志、查进程、看端口、管磁盘、改配置。把常用的命令练熟了,遇到问题能自己排查大半。
5.1 高频命令的分类整理
我把日常最高频的命令按场景整理成一个表,新人在实际工作中直接对着查,边用边记。
| 场景 | 命令 | 说明 |
|---|---|---|
| 查看当前目录 | pwd | 不解释,忘了在哪个目录就别开始干活 |
| 列出文件 | ls -lah | 带权限、大小、时间,一眼看明白 |
| 切换目录 | cd | 配合相对路径和绝对路径 |
| 创建目录 | mkdir -p | -p可以递归创建 |
| 复制/移动/删除 | cp/mv/rm -rf | rm -rf慎用,尤其是root |
| 查看文件 | cat/less/tail -f | tail -f看运行日志是日常最常用的 |
| 查找文件 | find /path -name "*.conf" | 忘了配置文件在哪时用它 |
| 查看磁盘 | df -h | 查看挂载点剩余空间 |
| 查看内存 | free -h | 看内存占用情况 |
| 查看进程 | ps aux | 带Grep可以过滤自己想找的进程 |
| 查看端口 | ss -tlnp | 看端口监听情况,排查服务是否启动 |
| 网络测试 | curl -v | 看接口通不通,报错信息很直观 |
其中tail -f和grep我认为是运维效率最高的两个基础操作。排错的时候基本都是先查日志,tail -f实时跟踪日志输出,grep过滤关键错误字样,配合起来能快速定位几十种常见故障。
5.2 几个经典故障的排查思路
我自己在运维过程中最常碰到的几个“经典翻车现场”值得单独记录一下。
第一个是端口被占用。服务起不来,看日志报“Address already in use”,第一反应是查谁占用了端口:
lsof -i :8080 # 或者 ss -tlnp | grep 8080找到PID之后,确认是自己要停掉的旧进程再kill,千万别误杀别人的服务。kill -9是最后手段,先尝试正常终止,进程实在僵死才用。
第二个是磁盘满了。df看到空间100%,但一时找不到是哪里占了空间,用du一层层看:
du -h --max-depth=1 /var du -h --max-depth=1 /home日志文件堆积、Docker镜像残留、临时文件没清理是硬盘满最常见的三个来源。日志这种“珍贵资产”也不能一刀切直接删,可以分析一下是否为必要留存;更重要的是配好logrotate日志轮转,让日志定期切割和压缩,才是正经的解法。
第三个是服务配置改了但没生效。这类问题的排查顺序是:确认你改的是否是正确的配置文件、确认服务是否真的重启了、确认有没有语法错误。很多服务在启动时会用默认配置而不去读你以为的那个配置文件,所以在改配置之前先确认服务进程启动命令里指定的配置路径。对配置文件改动比较大的操作,用相关命令(如nginx -t、sshd -t这类的检查命令)先做一个配置校验,一条命令就能帮你避开“改完直接重启然后服务再也起不来”的惨剧。
5.3 从安装到稳定的日常体检思路
系统稳定运行,靠的是平时细水长流的维护,而不是出问题再去救火。我给自己管理的机器定了一个简单的“体检清单”流程:
# 1. 看系统负载和负载均衡情况 uptime top # 2. 看磁盘 df -h # 3. 看内存占用 free -h # 4. 看系统日志里的可疑报错 journalctl -p err -b # 5. 自动更新和安全补丁journalctl -p err -b只看本次启动以来的错误级别日志,平时没事扫一眼,能发现很多潜在的隐患。检查的时间不用太长,每天花一两分钟看看,很多问题在变大之前就能被拦下来。负载高不一定是坏事,要结合业务类型看;磁盘空间最好不要用到85%以上,备份和日志随时需要空间。如果某个分区明明没东西但空间一直掉,用du或者lsof查正在被删除但仍被进程占用的文件,这又是一个很经典的操作。
写在最后的几个个人习惯
上面讲的方法论,很多都是在跌跌撞撞中总结出来的。我特别想强调一件事:不要因为某个发行版大家说好就用某一个,也不要因为装坏了就气馁。我第一台Linux虚拟机装了不下五遍才跑顺畅,前两遍全折在分区和软件源上。安装配置这件事没有人生下来就会,都是一步一步试出来的。
最后分享一个我个人的小习惯:每次安装和配置完一个软件,我会把这个软件涉及的配置目录、日志路径、启动命令、开放端口记录到一个简单的说明文件里,放在这台机器固定的目录下。多台机器之后,你回看这份记录,对排查问题会非常高效。祝你能顺利装出一台完全属于自己掌控的Linux主机,然后你会发现,后面那些以前觉得很难的命令和配置,都是水到渠成的事情。