很多同学第一次接触 Linux,卡住的地方往往不是命令,而是“装不上”:镜像下载错了、U 盘做坏了、BIOS 里找不到启动项、分区把 Windows 搞没了、装完黑屏进不去系统。这篇就把从选版本、做启动盘、虚拟机安装、实体机安装、分区规划,到装完之后的换源、SSH、中文环境、常用命令和排错,完整走一遍。零基础可以照着一步步做,有经验的开发者也可以直接翻到分区方案和排错清单那几节当速查表。
需要先说明一点:Linux 发行版更新节奏比较快,本文所有涉及版本号、镜像地址、包名的地方,都只是示例写法,实际安装时请以你下载页面上当前提供的稳定版本为准,配置项也要按自己机器的实际情况调整。重点在于把思路和流程讲透,版本差异不影响整体操作逻辑。
1. Linux 是什么:从概念到安装方式全景
在动手之前,先把几个容易概念混淆的名词理清楚,后面看安装向导才不会一头雾水。
1.1 内核、发行版与桌面环境的关系
严格来说,Linux 只是“内核”(Kernel),它负责管理 CPU 调度、内存分配、磁盘读写、网络收发这些最底层的事情。你在安装界面看到的图形化安装程序、装完之后的桌面、终端里的 ls、cd、apt 命令,都不是内核本身提供的,而是由内核之上的各种软件组合出来的。
于是就有了“发行版”(Distribution)这个概念:把 Linux 内核 + GNU 工具集 + 包管理器 + 桌面环境 + 一堆常用软件打包在一起,做成一个可以直接安装使用的完整操作系统。Ubuntu、Debian、CentOS Stream、Rocky Linux、Fedora、openSUSE、Arch Linux 都是发行版,它们的内核是同一个来源,区别在于软件版本策略、包管理工具和默认配置。
再往上一层是“桌面环境”(Desktop Environment),比如 GNOME、KDE Plasma、Xfce。桌面环境决定了你看到的窗口、任务栏、文件管理器长什么样。同一个发行版可以装不同的桌面环境,服务器上通常干脆不装桌面,只保留命令行,这样占用资源少、攻击面小。
理解了这三层关系,你就会明白为什么网上的教程经常“对不上”:有人用 apt,有人用 dnf,有人用 yum,这不是谁写错了,而是发行版的包管理器不同。
1.2 主流发行版怎么选
选择发行版没有绝对的对错,主要看你的使用场景。下面这张表把常见选择做个对比,方便你快速定位:
| 发行版 | 包管理器 | 版本策略 | 适合人群与场景 |
|---|---|---|---|
| Ubuntu LTS | apt / deb | 长期支持,更新稳 | 新手入门、桌面办公、AI 与开发环境 |
| Debian | apt / deb | 极其稳定,软件偏旧 | 追求稳定的服务器、个人自建服务 |
| Rocky Linux / AlmaLinux | dnf / rpm | 与 RHEL 生态兼容 | 企业服务器、需要 RHEL 兼容性的场景 |
| CentOS Stream | dnf / rpm | 滚动跟随 RHEL 上游 | 需要较新企业级特性的测试环境 |
| Fedora | dnf / rpm | 版本新,迭代快 | 想体验新特性、桌面用户 |
| Arch Linux | pacman | 滚动更新 | 喜欢折腾、想深入理解系统的用户 |
对绝大多数第一次安装的人来说,选一个 Ubuntu LTS 版本是最省心的:资料多、驱动兼容好、遇到问题一搜就有答案。如果你是为了学服务器运维、准备考证或者对接企业环境,那就优先选 Rocky Linux 这类与 RHEL 兼容的发行版。
这里提醒一句:网上有些“精简版”“优化版”“一键装机版”的第三方镜像,删掉了包管理器和大量依赖,装完想装个软件都费劲,还可能夹带不明脚本。安装包请一律从发行版官方网站或官方镜像站下载,这是最基本的安全底线。
1.3 四种安装方式的取舍
“安装 Linux”其实有四种完全不同的路径,搞清楚它们的差别能省下大量时间:
第一种是虚拟机安装。用 VMware Workstation Player、VirtualBox 或者系统自带的虚拟化功能,在一台物理机上虚拟出一台电脑。优点是零风险、可以随时删掉重来、能打快照,缺点是有性能损耗,显卡直通之类的场景不好搞。强烈推荐新手从这条路开始。
第二种是实体机单系统安装。整块硬盘只装 Linux,性能最好,但会清空原有系统,操作前必须确认数据已经备份。
第三种是实体机双系统安装。保留原有系统,划出一块空闲分区给 Linux,通过引导菜单选择启动。这是最容易出事故的方式,分区操作稍有不慎就会破坏原有系统。
第四种是子系统或容器方式。比如在 Windows 上启用 WSL,或者用 Docker 跑一个容器。这种方式几分钟就能得到一个命令行环境,适合只想学命令、跑脚本的人,但它不是完整的操作系统,服务管理、内核模块这些内容体验不到。
建议的学习路径是:先用虚拟机把安装流程和基础命令跑通,熟悉之后再考虑实体机双系统,最后在真实服务器上做生产部署。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 安装前的环境与硬件准备
安装失败的一大半原因,其实在按下“开始安装”之前就已经埋下了。这一节把准备工作做扎实。
2.1 硬件与固件检查
先确认你的机器能跑起来。桌面版 Linux 建议至少 4 核 CPU、8GB 内存、25GB 以上磁盘空间;服务器版(不带桌面)2 核 2GB 内存、20GB 磁盘就能跑,但要跑数据库、容器之类就得多留资源。
几个容易被忽略的点:
- 磁盘空间要留余量。分区时如果只给根分区 20GB,用几个月日志和缓存就能把它撑满,系统会直接进不去桌面。桌面使用建议根分区 40GB 起步。
- 无线网卡和独立显卡是兼容性重灾区。部分较新的无线网卡需要额外固件,安装过程中可能连不上网;NVIDIA 独显在安装时可能需要加启动参数才能进图形界面。如果你的机器是这类配置,建议先在虚拟机里熟悉流程,或者准备好有线网络。
- 确认固件模式是 UEFI 还是 Legacy BIOS。这决定了后面分区时要不要单独建 EFI 分区。开机进固件设置界面(通常是开机时按 Del、F2、F10 或 F12)就能看到,也可以在系统信息里查。
- 关闭快速启动和休眠。如果机器上已有系统,安装前务必关闭它的“快速启动”功能,否则文件系统处于未完全卸载状态,分区操作和引导写入都可能出问题。
2.2 镜像下载与校验
镜像文件通常以 .iso 结尾,体积在 2GB 到 6GB 之间。下载时优先选择官方站点或官方镜像站,速度快且不会被篡改。
下载完成后一定要做完整性校验。传输过程中出现一位比特翻转,就可能导致安装程序在解压阶段莫名报错,而这种错误极难排查。官方页面一般会提供 SHA256 校验值,拿到之后在本地算一遍比对即可。
在 Linux 或 macOS 上:
bash复制# 计算镜像的 SHA256 值
sha256sum ubuntu-xx.xx-desktop-amd64.iso
# 与官方公布的校验值比对,输出一致说明文件完整
在 Windows 的 PowerShell 中:
powershell复制# 文件路径:按实际下载位置替换
Get-FileHash -Algorithm SHA256 "D:\iso\ubuntu-xx.xx-desktop-amd64.iso"
两边的输出都是十六进制字符串,逐位比对即可。如果对不上,不要凑合,重新下载。
2.3 制作启动 U 盘
实体机安装需要把镜像写入 U 盘,让 U 盘变成可引导的安装介质。这里有两个关键前提:U 盘里的原有数据会被全部清空,操作前请先备份;写入工具要选对,直接把 iso 文件复制粘贴到 U 盘里是不行的,必须做扇区级写入。
图形化工具比较多,Windows 上可以用 Rufus 或 balenaEtcher,Linux 上可以用 Startup Disk Creator,选择镜像文件和目标 U 盘后点开始即可。这些工具界面操作,不需要记命令。
如果你在 Linux 上想用命令行写入,可以用 dd。这条命令威力很大,写错目标设备会直接毁掉那块磁盘的数据,务必先确认设备名:
bash复制# 第一步:查看当前所有磁盘,确认 U 盘对应的设备名(如 /dev/sdb)
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT
# 第二步:写入镜像。of 参数必须是 U 盘设备,写错就是灾难
sudo dd if=/path/to/xxx.iso of=/dev/sdX bs=4M status=progress oflag=sync
# 第三步:刷新缓冲区并查看结果
sync
if 是输入文件,of 是输出设备(注意是整块设备如 /dev/sdb,不是分区 /dev/sdb1),bs=4M 是块大小,status=progress 显示进度,oflag=sync 保证数据真正落盘。写完后再执行一次 sync,等命令返回并且 U 盘指示灯不再闪烁,才能拔出。
判断写入是否成功有个简单办法:重新插拔 U 盘,用 lsblk 看它的分区结构,正常的启动盘会有一个小的 FAT 分区(UEFI 引导用)和主数据区,而不是原来那个空盘。
3. 虚拟机方式安装 Linux(零风险练手)
这一节按虚拟机方式来完整走一遍安装流程。选这条路的最大好处是:装坏了删掉重来,不影响你机器上原有的任何东西。
3.1 创建虚拟机与资源分配
打开 VMware Workstation Player 或 VirtualBox,选择“新建虚拟机”,指向你下载好的 iso 文件。安装程序一般能自动识别出系统类型,识别不出来就手动选 Linux。
资源分配有几个经验值:
- 内存:桌面版给 4GB 以上,服务器版 2GB 也能跑。但不要超过物理内存的一半,否则宿主机自己会卡。
- CPU:给 2 到 4 核即可,注意虚拟机的核数不要超过物理机的逻辑核数。
- 磁盘:选中“拆分成多个文件”或“动态分配”,这样磁盘文件按需增长,不会一上来就吃掉 50GB。给 40GB 比较宽裕。
- 网络:默认的 NAT 模式最容易用,虚拟机能上网但不占用局域网 IP;如果你想从宿主机以外的机器访问这台虚拟机,就用桥接模式。
创建完成后先别急着启动,进设置检查一下“启动顺序”里光驱/镜像是否排在硬盘前面,否则可能出现“找不到可引导设备”。
3.2 安装向导逐步操作
启动虚拟机,会进入安装程序的引导菜单,选默认项回车。随后的典型步骤是这样的:
第一步,选择语言。选中文或英文都行。如果选中文,安装完成后桌面和部分软件会是中文界面,但终端里的报错信息还是英文的,这两种情况都要能看懂。
第二步,选择安装类型。通常会看到“清除整个磁盘并安装”和“手动分区”两个选项。虚拟机里选“清除整个磁盘”完全没问题,因为虚拟磁盘是独立的,不会影响宿主机。这也是新手最该练习的选项——先体验一遍全自动流程,再学手动分区。
第三步,确认磁盘。这一步务必看清楚列出的磁盘容量是不是你分配给虚拟机的那块。曾经有人在这个界面选错了物理磁盘,把宿主机的数据清空了,所以“看清楚目标磁盘”这个习惯要从虚拟机阶段就养成。
第四步,设置用户和密码。用户名建议全小写、不用空格和特殊字符。密码要记牢,Linux 的普通用户密码同时也是 sudo 提权密码。很多发行版会问你要不要用同一个密码作为 root 密码,个人练手环境可以设同一个,服务器上则建议禁用 root 直接登录、只用 sudo。
第五步,等待安装。这个过程会从镜像里解压系统文件、安装引导程序,几分钟到十几分钟不等。期间不要强制关闭虚拟机,中断安装会留下一个半成品系统。
第六步,重启并移除安装介质。看到“安装完成,请重启”的提示后,重启前先把虚拟机的光驱断开或把 iso 从虚拟光驱里弹出,否则会再次进入安装界面。
3.3 首次登录与界面认知
重启后进入登录界面,输入刚才设置的用户名密码。如果是服务器版,登录后直接就是一个黑底白字的命令行,别慌,这就是它的完整形态。
登进去先做一次基础确认,把下面几条命令跑一遍,能快速判断系统状态:
bash复制# 查看系统版本信息
cat /etc/os-release
# 查看内核版本
uname -r
# 查看磁盘使用情况(单位人类可读)
df -h
# 查看内存使用情况
free -h
# 查看当前登录用户
whoami
/etc/os-release 是各发行版通用的版本信息文件,比记 lsb_release 之类的专用命令更靠谱。uname -r 输出的内核版本可以帮助你在装驱动、编译模块时对号入座。
然后在虚拟机里打一个快照,命名为“刚装完的干净系统”。这个习惯非常值钱:后面你改配置、装软件、折腾分区,一旦搞崩了,几秒钟就能回滚到干净状态,不用重装。
4. 实体机安装:分区方案与安装流程
虚拟机跑通之后,就可以考虑在真实机器上装了。这一节讲的是风险最高的部分,请逐字看完再动手。
4.1 分区方案设计
Linux 的分区不像 Windows 那样分 C 盘 D 盘,它是一棵从根 / 开始的目录树。分区就是把树上的某个目录单独挂到一块磁盘空间上。
常见挂载点及其作用:
| 挂载点 | 作用 | 建议大小 |
|---|---|---|
/ |
根目录,除以下单独挂载的都在这里 | 40GB 起 |
/boot |
内核和引导文件,UEFI 模式下常为 /boot/efi |
512MB ~ 1GB |
swap |
交换分区,内存不足时的兜底 | 内存的 1~2 倍或固定 4~8GB |
/home |
用户家目录,个人数据 | 剩余空间大部分 |
对于新手,最省事的方案是三个分区:/boot/efi 给 512MB(仅 UEFI 模式需要)、/ 给 60~100GB、剩下的给 /home。swap 在现代机器上可以用 swap 文件代替,不必单独分区。
几个必须记住的原则:
- UEFI 模式必须有一个 EFI 系统分区,文件系统为 FAT32,大小 300MB 以上,挂载到
/boot/efi。漏了它,装完开不了机。 - 已有其他系统时,绝对不要选“清除整个磁盘”。必须在安装程序里选“其他选项”或“手动分区”,只在你提前腾出来的空闲空间上建分区。
- 分区操作前先备份。这不是客套话,分区表被改写后,恢复数据是个专业活。
- 不要在安装程序里格式化你不认识的分区。尤其是标着 NTFS 的、容量很大的分区,那多半是别人系统的数据盘。
如果你打算双系统,先在原有系统里用磁盘管理工具压缩出一个足够大的未分配空间(建议 80GB 以上),不要在里面建任何分区,留给 Linux 安装程序用。这一步做完再重启进安装介质。
4.2 固件设置与启动项
把做好的 U 盘插上,重启,开机时按对应的功能键进入启动菜单(常见是 F12、F11、Esc,具体看开机画面提示),选择 U 盘启动。
如果菜单里看不到 U 盘,按顺序排查:
- 换一个 USB 接口,优先插机箱后面的 USB 2.0 接口,部分机器对 USB 3.0 启动支持不好。
- 进固件设置,关掉“快速启动”(Fast Boot),这个选项会让机器跳过 USB 设备的初始化。
- 关掉“安全启动”(Secure Boot)。有些发行版的引导程序没有签名,安全启动会直接拦住它。装完之后如果发行版支持,可以再手动开启。
- 确认启动模式(UEFI / Legacy)与你做启动盘时的模式一致。
进到安装程序的引导菜单说明第一步已经成功,接下来就是走安装向导。
4.3 安装向导的关键选择
实体机安装的向导步骤和虚拟机的差别主要在磁盘那一步。前面几步(语言、键盘、网络)按实际情况选即可,重点看磁盘:
选择“手动分区”后,你会看到一个分区列表。这时候要做的第一件事是认领你的空闲空间——列表里会显示一块“free space”或“可用空间”,容量和你之前腾出来的差不多。
接下来依次创建:
text复制分区 1:大小 512MB,类型 EFI 系统分区,挂载点 /boot/efi,文件系统 fat32
分区 2:大小 60GB,类型 主分区,挂载点 /,文件系统 ext4
分区 3:剩余全部,类型 主分区,挂载点 /home,文件系统 ext4
这里用文字描述而不是贴命令,是因为不同发行版的安装程序界面差异较大,但底层逻辑是一样的:先给引导分区,再给根分区,剩下的给人目录。部分安装程序还要求你指定“引导程序安装位置”,一般默认装到整块磁盘(如 /dev/nvme0n1 或 /dev/sda)即可,不要选到某个分区上。
安装过程中还会问时区,选你所在时区;问是否下载更新,网络好的话可以勾上,但会拉长安装时间;问是否安装第三方驱动,有独显的机器建议勾上,能省掉装完黑屏的麻烦。
4.4 双系统引导与常见翻车点
双系统最容易出问题的地方是引导。安装程序一般会自动检测到原有系统并把它加进引导菜单,重启后你会看到一个选择界面。如果没有出现,或者默认直接进了其中一个系统,可以按下面的顺序处理:
情况一:装完直接进 Linux,看不到原有系统。 先别慌,原有系统的分区数据通常还在。在 Linux 里执行 sudo os-prober 看能不能探测到,能探测到就重新生成引导配置。Debian/Ubuntu 系用 sudo update-grub,RHEL 系用 sudo grub2-mkconfig -o /boot/grub2/grub.cfg。
情况二:装完直接进原有系统,看不到 Linux。 这说明固件里的启动顺序被改回去了,或者引导项没写进固件。进固件设置把 Linux 的启动项调到第一位,或者用 efibootmgr 命令查看和调整启动顺序。
情况三:两个系统都进不去,卡在 grub 命令行。 这通常是引导配置指向了错误的分区。可以从安装介质启动进入“试用模式”,挂载根分区后用 chroot 进去重装引导。这一步操作比较重,操作前建议先拍照记录当前的分区结构,避免二次误操作。
还有一个容易被忽略的坑:Windows 和 Linux 的时间不一致。这是因为 Windows 默认把硬件时钟当本地时间,Linux 默认当 UTC。解决办法是在 Linux 里执行 timedatectl set-local-rtc 1,或者在 Windows 注册表里改时钟设置。两种方案选一种,不要两边都改。
5. 安装后的基础配置实战
系统装完只是起点,接下来要把它变成一台“能用”的机器。这一节的配置在国内网络环境下几乎是必做的。
5.1 系统更新与软件源配置
刚装完的系统,软件包索引是旧的,第一件事就是更新:
bash复制# Debian / Ubuntu 系
sudo apt update
sudo apt upgrade -y
# RHEL / Rocky / Fedora 系
sudo dnf makecache
sudo dnf upgrade -y
apt update 只更新“软件包清单”,不装任何东西;apt upgrade 才真正升级已安装的软件。很多人只跑第一条,然后疑惑为什么装软件还是旧版本,就是漏了第二条。
官方源在国内速度可能较慢,可以换成国内的镜像源。以 Ubuntu 为例,配置文件在 /etc/apt/sources.list。修改前务必先备份:
bash复制# 备份原配置,出问题可以立刻还原
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 编辑源列表(用你熟悉的编辑器替换 nano)
sudo nano /etc/apt/sources.list
把文件内容替换成镜像站提供的地址,保存退出后再执行 sudo apt update。如果更新时报 404 或“Release file 未找到”,说明源地址和你当前系统版本不匹配——这是换源最常见的错误,解决办法是去镜像站页面找对应你系统代号(如 jammy、noble)的配置,不要直接抄别人的整段内容。
RHEL 系换源的位置在 /etc/yum.repos.d/ 目录下,同样是先备份再替换 baseurl:
bash复制# 查看当前仓库配置
ls /etc/yum.repos.d/
# 备份某个仓库文件
sudo cp /etc/yum.repos.d/xxx.repo /etc/yum.repos.d/xxx.repo.bak
换源之后可以用 sudo dnf repolist 确认仓库是否正常加载,用 sudo dnf makecache 测试能否拉到元数据。
5.2 用户、sudo 与 SSH 远程登录
Linux 的最小权限原则很明确:日常操作不用 root,需要提权时用 sudo。新建一个普通用户并授予 sudo 权限:
bash复制# 创建用户并同时创建家目录
sudo useradd -m -s /bin/bash devuser
# 设置密码
sudo passwd devuser
# Debian / Ubuntu:加入 sudo 组
sudo usermod -aG sudo devuser
# RHEL / Rocky:加入 wheel 组
sudo usermod -aG wheel devuser
注意 usermod -aG 里的 -a 必须有,漏掉它会覆盖用户原有的附加组,可能导致用户失去其他权限。
然后配置 SSH,方便从自己的电脑远程连过去。先确认服务已安装并启动:
bash复制# 安装 SSH 服务(Debian/Ubuntu)
sudo apt install -y openssh-server
# 启动并设置开机自启
sudo systemctl enable --now ssh
# 查看服务状态,active (running) 表示正常
sudo systemctl status ssh
配置文件是 /etc/ssh/sshd_config。生产环境建议改几项:把 PermitRootLogin 设为 no 禁止 root 直接登录;把 PasswordAuthentication 设为 no 改为只用密钥登录。改完配置必须重启服务才生效,而且重启前先保持一个已登录的会话不要关,万一配置写错导致连不上,还能用这个会话改回来。
bash复制# 改完配置后重启服务
sudo systemctl restart ssh
密钥登录的做法是在客户端生成密钥对,把公钥追加到服务器的 ~/.ssh/authorized_keys 文件里。这一步涉及权限,目录必须是 700,文件必须是 600,否则 SSH 会以“权限过于开放”为由拒绝使用密钥,这是新手最常踩的坑之一。
5.3 中文环境与时区时间同步
如果装的是服务器版,默认可能没有中文字体,终端里中文会显示成方块。安装语言包和字体:
bash复制# Debian / Ubuntu
sudo apt install -y locales fonts-noto-cjk
# 生成中文语言环境
sudo locale-gen zh_CN.UTF-8
时区设置用 timedatectl:
bash复制# 查看当前时区与时间状态
timedatectl
# 设置为中国时区
sudo timedatectl set-timezone Asia/Shanghai
# 开启网络时间同步
sudo timedatectl set-ntp true
set-ntp true 会让系统通过时间服务自动校准时间。如果这条命令报错,通常是 systemd-timesyncd 服务没装或者被禁用,可以先 sudo systemctl status systemd-timesyncd 看一眼,再决定是启用它还是改用 chrony。时间不准会导致日志时间错乱、证书校验失败、数据库主从同步异常,属于“平时不管,出事很难查”的那类问题。
5.4 常用开发环境安装示例
装完系统后,最常见的需求是搭一套开发环境。以 Python 和常用工具为例:
bash复制# 更新索引并安装基础工具
sudo apt update
sudo apt install -y git curl wget vim build-essential
# 安装 Python3、pip 和虚拟环境模块
sudo apt install -y python3 python3-pip python3-venv
# 验证版本
python3 --version
git --version
这里有个实践建议:不要用 pip 直接往系统 Python 里装包。较新的发行版会启用 PEP 668 保护,直接 pip install 会报“externally-managed-environment”错误,强行加 --break-system-packages 参数虽然能绕过,但会把系统包管理搞乱。正确做法是用虚拟环境隔离:
bash复制# 在项目目录下创建虚拟环境
python3 -m venv .venv
# 激活虚拟环境,命令行前面会出现 (.venv) 标识
source .venv/bin/activate
# 在虚拟环境内安装依赖,不会污染系统环境
pip install requests
# 退出虚拟环境
deactivate
如果你要跑数据库或者容器,建议先确认内核参数和防火墙状态。默认的防火墙在部分发行版上是开启的,会导致你以为服务跑起来了但外部连不上,排查时先用 sudo systemctl status firewalld 或 sudo ufw status 看一眼。
6. 必备命令速查与实操演练
装完系统之后,真正决定你用得顺不顺的,是对基础命令的熟悉程度。这一节按使用频率组织,每条都配了示例和说明。
6.1 目录结构与文件操作
Linux 的目录结构是有标准的,几个关键位置记牢能少走很多弯路:
| 路径 | 用途 |
|---|---|
/etc |
几乎所有系统级配置文件的存放地 |
/var/log |
日志目录,排查问题时第一站 |
/home |
普通用户的家目录 |
/usr/bin、/usr/sbin |
可执行程序 |
/tmp |
临时文件,重启后可能被清空 |
/opt |
第三方大型软件的安装位置 |
常用文件操作:
bash复制# 查看当前所在目录的绝对路径
pwd
# 列出目录内容,-l 详细格式,-a 包含隐藏文件,-h 人类可读大小
ls -lah
# 切换目录,~ 表示家目录,- 表示上一次所在目录
cd /var/log
cd ~
cd -
# 创建多级目录,-p 表示父目录不存在时自动创建
mkdir -p /data/app/logs
# 复制目录,-r 递归,-a 保留权限与时间戳
cp -a /data/app /backup/app
# 移动或重命名
mv old_name.txt new_name.txt
# 删除文件(谨慎使用,Linux 没有回收站)
rm -f temp.log
# 删除目录,先加 -i 逐个确认,确认无误再换 -rf
rm -ri /data/old_dir
关于 rm -rf,只说一句:在脚本里使用它之前,务必先用 echo 打印出要删的路径,确认变量拼出来的路径正确。路径变量为空时,rm -rf $DIR/ 这种写法可能变成 rm -rf /,这是真实发生过的事故。
6.2 权限与用户管理
Linux 的权限分三组:所有者(u)、所属组(g)、其他人(o),每组有读(r=4)、写(w=2)、执行(x=1)三种权限。
bash复制# 查看文件权限,第一列形如 -rw-r--r--
ls -l script.sh
# 给所有者加执行权限
chmod u+x script.sh
# 用数字方式设置:所有者 rwx,组 r-x,其他 r-x
chmod 755 script.sh
# 递归修改目录权限
chmod -R 755 /data/www
# 修改所有者与所属组
sudo chown -R www-data:www-data /data/www
chmod 777 是最常见的错误做法,它意味着任何用户都能修改这个文件,在服务器上等同于关掉了防护。正确的思路是:文件给 644,目录给 755,需要写入的目录才给所属组 775,由组权限来控制访问。
6.3 软件包管理与服务管理
不同发行版的包管理命令对照如下,记不住可以收藏这张表:
| 操作 | Debian/Ubuntu (apt) | RHEL/Rocky (dnf) |
|---|---|---|
| 更新软件清单 | apt update |
dnf makecache |
| 安装软件 | apt install 包名 |
dnf install 包名 |
| 卸载软件 | apt remove 包名 |
dnf remove 包名 |
| 搜索软件 | apt search 关键字 |
dnf search 关键字 |
| 查看已装包 | apt list --installed |
dnf list installed |
| 查看包信息 | apt show 包名 |
dnf info 包名 |
服务管理现在基本统一用 systemd:
bash复制# 启动服务
sudo systemctl start nginx
# 设置开机自启
sudo systemctl enable nginx
# 启动并同时设置开机自启,最常用
sudo systemctl enable --now nginx
# 停止服务
sudo systemctl stop nginx
# 查看服务状态,按 q 退出
sudo systemctl status nginx
# 查看服务日志(-f 实时跟踪,-u 指定服务,-n 显示行数)
sudo journalctl -u nginx -f -n 100
systemctl enable 和 start 的区别要分清:前者只是建立开机自启的软链接,后者才是真正启动进程。只 enable 不 start,服务当前仍然没跑;只 start 不 enable,重启机器后服务就没了。所以 enable --now 这个组合是最常用的。
6.4 磁盘、网络与日志排查命令
这几个命令是排错时的主力:
bash复制# 查看磁盘空间,-h 人类可读;重点看 Use% 列
df -h
# 查看目录占用大小,-s 汇总,-h 人类可读,--max-depth 控制深度
du -sh /var/log/*
sudo du -h --max-depth=1 /var | sort -hr | head -20
# 查看内存
free -h
# 查看监听端口(需要安装 iproute2 或 net-tools)
ss -tlnp
# 查看网络连通性
ping -c 4 8.8.8.8
# 查看路由
ip route
# 查看网卡地址
ip addr show
# 实时查看系统日志
sudo journalctl -f
# 查看最近的登录记录
last -n 10
磁盘满是最常见的线上故障之一,df -h 显示 100% 之后,用 du 逐层往下找大文件(/var/log、/var/cache、容器目录是重灾区)。如果 df 显示满但 du 加起来对不上,很可能是某个进程删除了文件却还持有句柄,用 sudo lsof | grep deleted 能查出来,重启对应进程即可释放。
7. 常见问题与排查思路
下面按“安装阶段”和“安装后”两段整理高频问题。遇到报错时,强烈建议先把完整的错误信息复制出来搜,不要只看最后一行——最后一行往往是“失败”的结论,真正的原因在上面几行。
7.1 安装阶段高频问题
问题一:U 盘插上后启动菜单里找不到设备。 可能原因依次是:USB 接口兼容性、固件快速启动未关、启动盘制作失败、U 盘本身损坏。排查顺序建议是:换机箱后置 USB 2.0 接口试 → 关闭固件快速启动和安全启动 → 用另一台电脑验证 U 盘能否认出启动项 → 重新制作启动盘。很多人以为是兼容性问题,最后发现是写入工具中途失败了。
问题二:卡在引导菜单,选完项就黑屏。 常见于独显机器或较新的硬件。可以在引导菜单里编辑启动项,在内核参数行末尾加上 nomodeset,先禁掉图形驱动进到系统,装完显卡驱动再恢复。如果是虚拟机,检查是否开启了 3D 加速但宿主机不支持。
问题三:安装过程中提示“没有足够空间”或分区表不识别。 如果是双系统,通常是因为磁盘分区表是 MBR 且主分区已经用满四个。解决方式是把一个主分区转为逻辑分区,或者把磁盘转为 GPT(转换前必须备份,这一步风险较高)。虚拟机的话,检查创建时磁盘是否分配得太小。
问题四:装完重启,进不去系统,直接进了原有系统。 这是引导顺序问题,不是系统没装成功。先进固件设置看有没有 Linux 的启动项,有就调整顺序;没有就用安装介质进试用模式,用 efibootmgr 检查引导项是否写入。
7.2 安装后高频问题
问题五:apt update 报错 “404 Not Found” 或 “Release file is not valid yet”。 前者是源地址和系统版本不匹配,后者通常是系统时间不对导致签名校验失败。前者按本文 5.1 节找对应版本的源,后者先 timedatectl set-ntp true 校准时间再重试。
问题六:Permission denied 频繁出现。 出现场景有两种:一是忘记加 sudo,二是文件权限确实不对。先用 ls -l 看权限和目标用户,再判断是提权还是改权限。注意不要养成“所有操作都加 sudo”的习惯,那会带来一堆由 root 创建的文件,后续普通用户反而改不了。
问题七:SSH 连不上,报 “Connection refused” 或 “Connection timed out”。 前者一般是服务没起或者端口不对,用 systemctl status ssh 和 ss -tlnp | grep 22 检查;后者多是网络不通或防火墙拦截,用 ping 和 sudo firewall-cmd --list-all(或 sudo ufw status)检查。
问题八:磁盘空间莫名其妙满了。 按 df -h 定位到具体挂载点 → du 逐层缩小范围 → 重点看 /var/log、/var/lib/docker、用户家目录的缓存 → 清理时优先删旧日志和缓存,不要碰 /etc 和 /usr。
问题九:系统启动变慢,开机要等很久。 用 systemd-analyze blame 看各服务耗时,用 systemd-analyze critical-chain 看关键路径。常见元凶是某个等待网络的服务、被禁用的 swap 挂载,或者磁盘健康度下降。
7.3 一份可打印的排查清单
把下面这份清单收藏起来,遇到问题按顺序过一遍,能覆盖八成以上的情况:
| 检查项 | 命令 | 期望结果 |
|---|---|---|
| 系统版本是否匹配文档 | cat /etc/os-release |
与教程一致或兼容 |
| 磁盘是否还有空间 | df -h |
各分区 Use% 低于 85% |
| 内存是否吃紧 | free -h |
available 列有合理余量 |
| 服务是否在跑 | systemctl status 服务名 |
active (running) |
| 端口是否监听 | ss -tlnp |
目标端口存在 LISTEN |
| 网络是否通 | ping -c 4 目标IP |
无丢包 |
| 防火墙是否放行 | firewall-cmd --list-all 或 ufw status |
目标端口在放行列表 |
| 最近错误日志 | journalctl -xe -n 100 |
定位到具体报错行 |
| 时间是否准确 | timedatectl |
时间误差在秒级内 |
| SELinux 是否拦截 | getenforce、ausearch -m avc |
排查是否有拒绝记录 |
最后一行特别说明一下:在 RHEL 系系统上,很多“明明配置对了就是不生效”的问题都是 SELinux 造成的。不要第一反应就去 setenforce 0 关掉它,正确做法是看审计日志里具体的拒绝记录,然后用 semanage fcontext 或 setsebool 做精确放行。直接关掉等于放弃了这层防护,在正式环境里是不可接受的操作。
8. 最佳实践与学习路线
安装这件事,做一次就够;但把系统用得住、用得久,靠的是习惯。
8.1 安装环节的工程规范
不管是自己练手还是给公司装机器,下面几条建议都值得坚持:
镜像只从官方渠道获取,并且做校验。 这条没有例外。第三方“优化镜像”无法审计,出了问题也找不到人负责。
装完立刻打快照或做备份。 虚拟机打快照,实体机用 dd 或专业工具做整盘镜像。刚装完的干净系统是最宝贵的“还原点”。
分区时给根分区留足余量,/home 和 /var 尽量独立。 日志暴涨把 /var 撑满时,如果它和根分区在一起,整个系统会进入只读状态,连 SSH 都可能登不上。
服务器一定要禁用 root 直接登录,改用密钥认证。 密码登录会持续遭受自动化尝试,改成密钥之后这类噪音基本消失。同时用 fail2ban 这类工具做登录失败次数限制,是很划算的投入。
改动任何系统级配置前先备份。 /etc 下随便一个文件的错误都可能导致系统起不来。改之前执行 cp xxx xxx.bak 只需要两秒,事后救回来可能要两小时。
8.2 日常运维的几个实用习惯
用脚本记录你的环境。 把装系统之后的所有命令写进一个 setup.sh,下次重装直接跑一遍。这不只是为了省事,更是为了让环境可复现——半年后你至少知道当时装了什么。
给重要服务做监控。 不用一上来就上完整的监控体系,先写个脚本定时检查端口和磁盘,超阈值就告警。磁盘满、进程挂、证书过期这三类问题,提前发现和事后救火完全是两个量级的成本。
日志要有轮转策略。 /var/log 无限增长是定时炸弹。检查 /etc/logrotate.d/ 下的配置,确保有 rotate 和 maxsize 设置。
变更要在测试环境验证。 尤其是升级内核、改网络配置、调整防火墙规则这三类操作,在远程机器上直接做,一旦出错就是失联。稳妥的做法是保留一个备用访问通道,或者安排在有人值守的时间窗口操作。
8.3 从装系统到真正会用
装完系统只是获得了入场券。接下来的学习路径,建议按这个顺序推进:
第一阶段,把常用命令练到不用查。文件操作、权限、进程管理、包管理、systemd,这几块是地基。每天花二十分钟在虚拟机里敲一遍,比看十篇文章管用。
第二阶段,理解系统是怎么起来的。搞清楚引导流程、systemd 的 unit 文件、网络配置在哪、日志怎么流转。这一层懂了,遇到“服务起不来”你就能自己顺藤摸瓜。
第三阶段,动手搭一个真实可用的服务。比如用 Nginx 挂一个静态站点、用 Docker 跑一个数据库、配置 HTTPS 证书。从“能装”到“能提供服务”,中间隔着的就是这一层。
第四阶段,学自动化和容器。用 Ansible 批量配置机器、用 Docker 打包应用、了解 Kubernetes 的调度模型。到这个阶段,你已经能把“装一台 Linux”变成“管理一批 Linux”。
学习过程中遇到问题,最快的路径永远是:先看日志,再看官方文档,最后才搜索。日志里写的原因往往比搜索结果精确得多,而官方文档能告诉你这个配置项到底是什么意思,而不是“抄了就对了”。
最后留一个小建议:给自己准备一台永远不删的虚拟机,随便折腾。所有的实验、踩坑、误删,都在里面发生。真正重要的东西,不要放在你还没摸熟的系统上——这条经验,比任何一条命令都值钱。
