1. 为什么我建议你认真了解一下 Ubuntu
如果你稍微接触过 Linux,那你一定绕不开 Ubuntu 这个名字。但很多刚入门的朋友对它的了解其实只停留在"听说过""好像是个操作系统"这个层面。作为用了 Ubuntu 多年的老用户,我可以明确告诉你:Ubuntu 是目前最适合从 Windows/macOS 过渡到 Linux 的发行版,没有之一。不管你是程序员、运维、数据相关从业者,还是单纯想把手头老电脑救活,Ubuntu 都值得你认真了解。
这篇文章的内容不多废话,集中在两件事:Ubuntu 到底解决了什么问题,以及日常使用中最常见的操作怎么做。我自己当年就是被 Windows 的卡顿和各种环境配置折磨够了,才真正静下心来用 Ubuntu,用了之后才发现,这玩意儿一旦上手,是真的回不去了。文章会从系统本身讲起,再到安装、常用命令、软件管理、权限机制、磁盘与网络、脚本自动化、问题排查,最后聊聊这几年我在实际使用中积累的经验和教训。无论你是零基础小白,还是有一定经验但没系统梳理过,这篇内容应该都能帮到你。
我在写的过程中会尽量说人话。很多 Linux 教程喜欢把命令一列就完事,也不解释为什么,看得人云里雾雾。这篇文章会把每个操作背后"为什么这么做"讲清楚,至少让你遇到问题时不至于完全摸不着头脑。
2. Ubuntu 到底是什么,以及它能干什么
2.1 先搞清楚 Ubuntu 在 Linux 世界里的定位
Linux 本身只是一个内核,而不是一个完整的操作系统。这句话对新手来说可能有点绕,打个比方:内核相当于发动机,光有发动机车子跑不了,还得有车身、方向盘、仪表盘,这些加起来才是能开的车。Ubuntu 就是基于 Linux 内核,把各种软件、桌面环境、驱动程序、系统工具整合在一起,做出来的一套完整操作系统。这类"整合好的系统"在 Linux 里叫发行版。
Ubuntu 之所以是众多发行版里最有名的一个,主要因为三个原因:第一,它对硬件兼容性的打磨做得比大多数发行版都到位,尤其是笔记本这种包含各种定制硬件的设备,装上基本就能用;第二,它有庞大且活跃的社区,出了问题基本上你搜到的第一条结果就能解决;第三,它的软件生态非常成熟,官方软件源里收录了大量软件,不需要像某些发行版那样到处找安装包。
我用过好几个发行版,最终长期驻留在 Ubuntu 上,不是因为别的发行版不好,而是 Ubuntu 在"省心"和"灵活"之间取得了一个很好的平衡。深度折腾的话,Arch 这类滚动更新的发行版确实更爽,但它对使用者有要求,每天滚动更新可能带来新问题。Ubuntu 的 LTS(Long Term Support,长期支持)版本走的是稳定路线,适合当桌面系统,也适合当服务器系统。
2.2 Ubuntu 能解决什么实际问题
Ubuntu 适用的场景比很多人想象得广:
- 替代 Windows 做日常桌面系统:办公、上网、看视频、写文档、处理邮件,这些需求 Ubuntu 完全可以胜任。自带 LibreOffice 处理日常文档,浏览器方面 Chromium 或 Firefox 都有,界面层面现在的 Ubuntu 桌面做得足够现代,我用下来日常使用真的没有觉得比 Windows 差在哪。
- 开发环境和编程学习:这是 Ubuntu 最核心的价值。Python、Node.js、Java、Go、C/C++ 这些开发环境在 Ubuntu 上配置起来极其方便,而且大量开源工具链天然支持 Linux。我自己负责过几个项目的部署,整个研发团队的本地开发环境都用 Ubuntu,统一了环境,问题少了不是一点半点。
- 服务器和运维:全球大量服务器跑的就是 Ubuntu Server。相比 Windows Server,它的资源占用要低得多,老旧的硬件都能带得很流畅。对做运维的朋友来说,掌握 Ubuntu 就是吃饭的本事。
- 折腾和学习 Linux 本身:Ubuntu 有很多派生版本和不同的桌面环境选项,你可以在这套系统上学会命令行、脚本、文件系统、进程管理等一系列底层知识。这也是进入大厂运维岗、后端开发岗的一条常规路径。
不同的人出发点不一样。有些人是被 Windows 的更新和弹窗逼来的,有些人是因为工作需要,有些人是想学点技术。反正不管哪种情况,Ubuntu 的入门曲线在 Linux 阵营里是最平滑的。
2.3 和 Windows 站在一起比,Ubuntu 的核心差异在哪
Ubuntu 和 Windows 用起来的差异天然存在,但这不只是"看起来很不同"的区别,而是整个设计哲学上的差异。
Windows 的核心目标是兼容和易用,什么东西都替你做好,但你也得接受它带来的封闭性。Ubuntu/Linux 的核心目标是自由和透明,几乎每个层面都可以自己控制,代价是你需要自己学一些基础操作。
具体到实际使用,差异体现在好几个方面:软件安装方式(命令行安装是主流,图形界面安装反而只是辅助)、文件系统结构(没有 C 盘 D 盘的概念,所有设备都挂载在根目录下)、权限模型(日常使用时不建议用 root 账户,而要用 sudo 来临时提升权限)、更新机制(软件包管理器统一管理,不会像 Windows 那样强制重启)。这些差异不深入了解,刚上手会很不习惯,但习惯之后你会觉得每一个设计都有它的道理。
3. 安装 Ubuntu:选版本、做启动盘到分区策略
3.1 选哪个版本,怎么决定
Ubuntu 的版本命名很直白,是由年份加月份组成的,比如 24.04 就是 2024 年 4 月发布的版本。其中带 LTS(长期支持)标识的是重点版本,官方会提供长达五年的安全和维护更新,适合大多数用户和生产环境。不带 LTS 的版本通常叫临时版本或普通版本,支持时间只有九个月,除非你是发烧友,否则不建议主力机器使用。
我个人建议,如果机器主要用来干活,直接选最新的 LTS 版本。比如 24.04 LTS 就是当前一个很稳的选择,它的软件源、桌面环境、驱动支持都比较成熟,五年内不需要操心版本过期的问题。如果你需要更新的内核和软件,也可以考虑最新的临时版本,但要做好每九个月升一次级的准备。
另外,Ubuntu 不是只有一个变体。官方除了标准的 GNOME 桌面版本,还有 Kubuntu(KDE 桌面)、Xubuntu(XFCE 桌面)、Lubuntu(LXQt 桌面)、Ubuntu Server(无桌面)等版本。如果机器配置偏低,选 Xubuntu 或 Lubuntu 会更流畅。我帮朋友的老笔记本装过 Lubuntu,原来跑 Windows 卡到开个浏览器都费劲,换了之后流畅程度像换了台机器。
3.2 制作 USB 启动盘的完整流程
安装 Ubuntu 的第一步是准备一个至少 8GB 的 U 盘,然后用工具把 Ubuntu 的 ISO 镜像写进去。注意这里不是把文件复制进去那么简单,必须要用写盘工具,推荐 Rufus(Windows 环境)、启动盘制作器(Ubuntu 自带)或者 Etcher(全平台)。
用 Rufus 的时候,最核心的一步是在"分区类型"那里选对。如果你的电脑支持 UEFI 启动,应该选 GPT 分区 + UEFI 模式;如果是老电脑,选 MBR 分区 + BIOS 模式。选错了会直接导致启动不了安装界面。我的建议是最好查一下自己电脑的启动模式,现在市面上的新电脑基本都是 UEFI,就选 GPT,老电脑才考虑 MBR。
制作完启动盘之后,需要进入 BIOS/UEFI 设置界面,把 U 盘设为第一启动项。不同品牌的快捷键不一样,常见的有 F2、F12、Del 等,开机时留意屏幕提示就行。启动时如果遇到 Windows 系统的"快速启动"干扰,有时候需要进 BIOS 暂时关掉安全启动选项,不然 Ubuntu 的引导可能无法正常进入安装界面。
3.3 磁盘分区,最容易被劝退的一步
对新手来说,安装 Ubuntu 最容易被劝退的就是分区那一步。图形界面下,Ubuntu 安装器提供了三种常见方案:第一种是"清除整个磁盘并安装 Ubuntu",适合你确定这台机器专门跑 Ubuntu,不用担心数据,直接让系统自动分区;第二种是"与 Windows 共存",安装器会自动压缩 Windows 分区,腾出空间给 Ubuntu,适合想装双系统的朋友;第三种是"手动分区",适合有自己的分区规划的老手。
我第一次装的时候直接选了清除整个磁盘,省事。但如果你有实际的数据需要保留,或者想体验双系统,我建议不要用自动方案,而是手动分。手动分区最合理的方案其实不复杂:一个/(根分区)、一个swap(交换分区)、一个/home(家目录分区)。/是系统的核心所在,所有第一层目录都在里面;/home用来存放用户文件和配置,把这两个分开后,以后系统出问题需要重装,/home里的数据不会被破坏;swap相当于 Windows 里的虚拟内存,内存不够时系统会把不常用的数据暂时挪到这里。
这里有一个关键参数需要理解:根分区的大小和 swap 的大小。根分区建议至少留 50GB,如果你的使用需求比较重度,直接给到 100GB 以上也不心疼,因为磁盘空间这东西后面用着用着就不够了。关于 swap 分区,网上很多老教程建议设置为物理内存的 1-2 倍,但这个说法已经有些过时了。现在内存普遍在 8GB 以上,默认分配一个不算大的 swap 就够用,比如 8GB 内存配 4GB swap,16GB 内存配 8GB swap。如果你的需求是休眠或者跑大型应用,适当调大一些也没问题。
提示:双系统安装时,强烈建议在 Windows 里先把"快速启动"关掉。这个功能会让 Windows 关机时保存一小部分内核状态,Ubuntu 重启后可能无法正常挂载 Windows 的 NTFS 分区,导致出现只读的情况。我第一次装双系统时吃过这个亏,折腾了半天才搞清楚。
4. 常用操作系统级操作:从开机到软件安装
4.1 首次开机的初始化配置
装完系统后,首次开机进入欢迎界面,系统会问几个问题:时区选择、用户名和密码、主机名。这几个环节要注意几个细节:时区选对,不然系统日志的时间和实际时间对不上,后面排查问题容易混乱;用户名不能用大写字母开头(这个是 Ubuntu 的硬性限制,免得后续出奇奇怪怪的问题);主机名是这台机器在网络里的名字,如果以后要搞服务器,最好起一个有辨识度的名字,方便你在一堆设备里认出它。
登录进去了,第一件事我建议是打开终端(快捷键 Ctrl+Alt+T),然后先执行系统更新。你刚装完的系统,软件包索引可能比官方源里最新的要旧一些,更新一下能让软件源信息和已安装软件都保持最新。这一步虽然不是强制要求,但很多问题其实是源太旧导致的,先更新能规避掉一大半。
sudo apt update sudo apt upgrade第一条命令是刷新软件包索引,不是真正更新软件,第二条才是真正把可升级的软件装上去。sudo的意思是以管理员权限执行,Linux 的安全模型默认不让普通用户直接改系统关键位置,必须临时借管理员身份来操作。输密码的时候,屏幕上不会显示任何字符,这不是你打错了,而是安全设计,输入完直接按回车。我第一次用的时候还以为键盘坏了,后来才知道是故意不显示。
4.2 中文输入法和字体问题,最容易忽略的细节
安装的时候语言选了中文,进入桌面后可能发现没法用中文输入法。这是因为 Ubuntu 默认没有安装输入法框架,或者安装了中文语言包但没有启用。解决办法是打开"设置 - 系统 - 区域与语言",添加输入源,在里面选择"中文(智能拼音)"或"中文(五笔)"之类的选项。如果系统里找不到这些,先装一下输入法包:
sudo apt install ibus-libpinyin装完重启一下进程或注销重新登录,一般就能调出中文输入法了。字体方面,Ubuntu 默认的中文字体状态一般,看网页和文档没什么大问题,但如果你比较在意排版,可以自己装一个。放在系统字体目录或用户字体目录都行,用户字体目录是~/.local/share/fonts或~/.fonts,把字体文件放进去后执行fc-cache -f刷新字体缓存即可。
注意:很多朋友在 Ubuntu 上装完输入法后不管用,最后发现是环境变量问题。如果你是自己用编译方式安装的输入法,需要在
~/.bashrc或/etc/environment里配置对应的环境变量并注销重新登录。用官方源装的输入法一般不用手动配置环境变量,所以新手推荐直接用官方源装。
4.3 文件系统与目录结构,帮你理解 Ubuntu 的"盘符"逻辑
Windows 里你熟悉的是 C 盘 D 盘,Ubuntu 则是把所有文件和设备都挂在根目录/下。外部硬件(比如 U 盘)不会自动分配一个盘符,而是挂载到/media/用户名/设备名下面。理解这套逻辑,是 Ubuntu 操作的基础,这里把常用目录列一下:
/home:用户家目录的上级,你的个人文件都在/home/用户名/下面,相当于 Windows 的"用户"文件夹。/etc:系统配置文件目录,几乎所有重要软件的配置都在这。/var:放日志、缓存和临时文件的地方,系统出问题排查时经常要看/var/log。/bin、/sbin:放系统启动和运行必需的命令程序。/tmp:临时文件目录,重启后会被清空。/opt:第三方软件手工安装时的推荐位置。/mnt、/media:挂载外部设备的地方,比如 U 盘、移动硬盘。
文件操作可以完全用图形界面,但在终端里操作效率高很多,也方便脚本化。最常用的命令是cd(切换目录)、ls(列出文件)、cp(复制)、mv(移动或重命名)、rm(删除)。复制文件夹时记得加-r参数,rm删除文件夹也要加-r。写过一次才知道,rm -rf是每个人都要敬畏的命令,它不给你提示,删了就真的没了,没有回收站兜底。
4.4 软件安装的三种方式,用什么、不用什么
Ubuntu 装软件和 Windows 最不一样的地方在于包管理器的存在。官方提供的软件包管理工具是apt,它可以自动处理软件依赖,不会像 Windows 那样装完一个软件还缺一堆 DLL 需要你手动找。
第一种方式是用apt安装官方源里的软件,覆盖了绝大多数常用工具。命令格式是:
sudo apt install 软件包名搜索软件包用apt search 关键字,查看已安装的软件用apt list --installed。卸载软件用sudo apt remove 软件包名,如果想连配置文件一起清掉,用purge代替remove。有时候软件会留下依赖冲突,顺手执行sudo apt --fix-broken install能解决大部分依赖问题。
第二种方式是安装.deb安装包,一些商业软件和第三方软件(比如某些输入法、浏览器、办公软件)会提供这种格式。装.deb文件可以用sudo dpkg -i 文件名.deb,但可能有依赖问题,推荐先sudo apt install ./文件名.deb,这样 apt 会自动处理依赖。
第三种方式是发行版无关的打包格式,比如 Snap 和 Flatpak。Snap 是 Ubuntu 母公司推动的格式,很多 GUI 软件在 Ubuntu 软件中心里就是 Snap 版本。Flash 格式的好处是隔离性好、更新自动,坏处是启动慢、占用空间大。如果你想要更轻量或者对软件启动速度敏感,优先从 apt 源里装,不行再考虑 Snap 或 Flatpak。
这里想多说一句:不要到网上随便找 tar.gz 包解压就丢进系统里,这种装完软件没有纳入包管理器管理,之后卸载、升级都是麻烦事,还容易和系统部件产生冲突。很多时候你搜到的问题排查教程都是针对 apt 的软件,手工安装的软件出了问题,排查路径完全不同。
5. 权限管理、用户与安全设置
5.1 理解权限模型:rwx 和 sudo
Linux 的权限模型说简单也简单,每个文件或目录都有三组权限:属主(文件所有者)、属组(所在用户组)、其他用户,每组权限由三个字符组成,r代表读,w代表写,x代表执行。列目录时看到的文件权限长这样:-rw-r--r--,依次代表:文件类型(-或d,d是目录)、属主权限、属组权限、其他用户权限。
用ls -l可以查看文件的详细权限信息。修改权限用chmod,修改所有者用chown。比如给脚本加上执行权限:
chmod +x 脚本文件.sh数字形式是chmod 755这种写法,7=rwx(读写执行),5=rx(读和执行)。755 代表属主可读写执行,属组和其他人可读执行。对普通文件来说,这个权限就够用了。如果可执行文件只是自己用,chmod 700会更安全。
sudo 机制是我觉得 Linux 在设计上比 Windows 高明的地方。Windows 的很多操作是需要管理员权限,但你登录的账户往往就是管理员,系统对每一次高危操作也没有太强烈的拦截意识。而 Ubuntu 的普通账户日常操作都不需要特殊权限,真正动系统级的东西才用sudo临时提权,这样可以避免很多误操作。
5.2 用户管理和用户组管理
用户管理常用命令有useradd、usermod、userdel。新建用户并指定家目录和 shell:
sudo useradd -m -s /bin/bash 用户名 sudo passwd 用户名-m表示创建家目录,-s指定登录 shell。不加参数的useradd只创建用户但不创建家目录,新手经常踩这个坑。给用户赋予 sudo 权限,需要把用户加入sudo组:
sudo usermod -aG sudo 用户名-aG的-a是追加,-G指定附加组,这个组合容易记混,但很关键。不加-a的话,会把用户从原来的组里踢出来,只保留新组的身份,这是一个很容易出问题的参数。
删除用户用sudo userdel -r 用户名,-r会把家目录和邮件池等信息一并删除。在 Ubuntu 上,用户组也承担了很多权限管理的工作,比如某些设备只允许特定组的用户访问。把用户加入到video、audio等组,通常是为了授予对特定硬件设备的访问权。关于用户组的管理命令,groupadd创建、groupdel删除、usermod修改用户所属组,多看man帮助页面是 Linux 用户的基本功。
5.3 SSH、防火墙和基础安全加固
Ubuntu 默认不安装 SSH 服务端,但作为一个需要远程管理的系统,这一步很重要。安装并启用 SSH 服务:
sudo apt install openssh-server sudo systemctl enable --now sshenable --now的意思是把服务设为开机自启,并且立刻启动。这是 systemd 管理服务的方法,systemctl是 systemd 的命令行工具,后面还会频繁用到。启用后就能从其他机器用ssh 用户名@IP地址连上这台机器了。
防火墙方面,Ubuntu 默认是装了 ufw 的,但可能没有开启。启用并允许 SSH:
sudo ufw allow OpenSSH sudo ufw enable我见过太多人直接把防火墙关了,理由是"内网环境没关系",结果被扫描工具扫到了不该开放的端口。其实养好习惯真不难,默认只放行自己确实用得到的端口,其他的全部拒绝,真要临时开放某个端口,用完就删掉规则。
安全方面还需要注意默认账户策略。如果这台机器是服务器,建议不要用简易密码,最好直接改成密钥登录。修改 SSH 配置在/etc/ssh/sshd_config,把PermitRootLogin改成no,把PasswordAuthentication设为no后,就只能用密钥认证,安全性会有明显提升。改完配置后记得用sudo systemctl restart ssh让配置生效,不要边改边测试到一半就断开连接,那样容易把自己锁在门外。
6. 磁盘管理、LVM 与文件系统操作
6.1 查看磁盘占用和挂载信息
日常运维里最常遇到的情况是"磁盘满了,不知道谁占了空间"。查看磁盘使用情况的命令是df,加上-h以人类可读的格式显示:
df -h这会显示所有挂载的文件系统的总大小、已用、可用和挂载点。如果想知道某个目录具体占用多少,用du -sh 目录路径,前面的-s表示只是汇总,-h便于阅读。要分析整个/根目录下到底哪些子目录占用大,可以先sudo du -sh /*扫一遍,再接个sort -h按体积排序,很快就知道大头在哪。
新硬盘接入 Ubuntu 后,需要自己完成分区、格式化、挂载三步。分区用fdisk或gparted,格式化用mkfs.ext4,挂载用mount。每次开机自动挂载还要写入/etc/fstab,一个简单的挂载操作背后其实有不少知识量。如果你是新手,第一次接新硬盘我推荐直接上网搜相关型号的教程,跟着做一遍流程,后面就好上手了。
6.2 一个靠谱的分区表与 fstab 配置示例
这里直接给一个经典示例:假设你要新增一块数据盘,装在/dev/sdb上,打算挂载到/data目录。
先用lsblk查看新磁盘的设备名,确认是/dev/sdb而不是系统盘,这个确认非常重要,操作错了会导致系统盘数据丢失。然后依次执行:
sudo parted /dev/sdb mklabel gpt sudo parted /dev/sdb mkpart primary ext4 1MiB 100% sudo mkfs.ext4 /dev/sdb1 sudo mkdir -p /data sudo mount /dev/sdb1 /data第一行给磁盘创建 GPT 分区表,第二行在磁盘上创建一个从 1MiB 到磁盘末尾的主分区,第三行把分区格式化成 ext4 文件系统,第四行创建挂载点,第五行临时挂载。此时磁盘已经能用了,但重启后会失效。要实现开机自动挂载,先查到分区的 UUID:
sudo blkid然后在/etc/fstab末尾加一行:
UUID=你的分区UUID /data ext4 defaults 0 2fstab 的六列含义分别是:设备标识、挂载点、文件系统类型、挂载参数、dump 备份参数、fsck 自检顺序。系统根分区这项自检顺序通常是 1,普通数据分区用 2,不使用 dump 就是 0。加了这行后,可以先sudo mount -a测试一下,能正常挂载说明配置没问题。
注意:fstab 写错了,系统会开机失败直接进紧急模式。遇到这种情况不用慌,输入 root 密码然后用
nano /etc/fstab把错误那行注释掉或删掉,再重启就正常了。我踩过这种坑,所以现在每次改完 fstab 都要先mount -a验证一遍,压力测试永远比慌慌张张排查舒服。
6.3 LVM 的逻辑和实际价值
LVM(逻辑卷管理)是 Linux 上另一项跟磁盘相关的核心功能,Ubuntu 默认安装时如果你选择"清除整个磁盘",安装器其实已经在背后用 LVM 了。LVM 解决的核心问题是:传统分区在分区大小上很死板,如果分区规划小了,扩容很难,LVM 则允许你把多个物理磁盘抽象成券组,再在上面灵活划分出逻辑卷,需要调整容量时非常方便。
操作层面,LVM 的核心命令有物理卷相关的pvcreate、pvdisplay,卷组相关的vgcreate、vgextend、vgdisplay,逻辑卷相关的lvcreate、lvextend、lvesize。典型问题"逻辑卷空间不足怎么办",步骤很简单:先给卷组加物理卷或者用未分配空间,再扩展逻辑卷,最后扩展文件系统。
sudo lvextend -L +20G /dev/mapper/卷组名-逻辑卷名 sudo resize2fs /dev/mapper/卷组名-逻辑卷名注意文件系统扩展和逻辑卷扩展不是一回事,如果只扩了逻辑卷不扩文件系统,df -h看到的大小不会变。这类顺序敏感的操作,建议每次动完一层就用对应的查看命令确认一遍。
7. 网络配置与远程连接的实用技巧
7.1 查看 IP 地址与基础网络排查
Ubuntu 查看 IP 地址的命令和 Windows 很不一样。不少新手一上来就打ipconfig,当然没反应。Linux 下用:
ip addr这条命令会显示所有网络接口的状态、IP 地址和 MAC 地址。日常需要知道本机 IP 时,这个是首要的方式。平面接口名阅读起来可能有点怪,比如ens33、enp0s3这种,这是现代 Linux 用设备固件信息来命名网络接口的结果,不知道是哪个接口的话,ip -br addr这个命令会显示简介版本,更方便辨认。
如果网络不通,排查思路一般是:先ping 127.0.0.1测本机网络协议栈是否正常,再ping 网关测局域网通不通,然后ping 8.8.8.8测是否能上外网,最后nslookup或dig测试 DNS 解析是否正常。按这个顺序能快速度过大部分网络问题,而不是瞎试。
7.2 静态 IP 配置的正确姿势
Ubuntu 从某个版本开始,网络配置方式变成了 netplan,配置文件在/etc/netplan/目录下,通常是.yaml结尾的文件。配置静态 IP 的示例:
network: version: 2 ethernets: enp2s0: dhcp4: false addresses: - 192.168.1.100/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: - 223.5.5.5 - 8.8.8.8配置完成后先sudo netplan try验证,如果配置有问题,它会在超时后自动回滚,避免把自己锁在系统外面。确认没问题后再sudo netplan apply应用。这一段看似简单,但缩进和键名一旦写错就会配置失败,而 YAML 对空格缩进极其敏感。我经常看到有人报"配置没生效",结果一检查是少了空格或dhcp4大小写错了。
7.3 远程管理:SSH 的日常操作和安全策略
一旦有多台电脑或云服务器,远程管理就离不开 SSH。基础知识前三节已经提过,这里补充几个 SSH 的高频操作。
复制公钥到远程服务器可以免输密码登录:
ssh-copy-id 用户名@服务器IP之后每次登录就是直接进,不用输密码。这个功能默认开启,比每次输密码方便得多,也避免了弱密码被撞库的风险。修改 SSH 配置时,建议修改默认端口到非标准端口,几十秒的事,但能让自动化扫描的绝大多数攻击工具失去意义。当然,端口别挑那种常见的服务端口,免得冲突,改完重启防火墙规则也要该改。
如果涉及到文件传输,scp命令是日常标配:
scp 本地文件 用户名@服务器IP:/目标路径scp底层走的就是 SSH,安全性和身份认证都是一套的。对于更大规模的数据同步,rsync会更加适合,它可以增量同步、断点续传,配合ssh使用效果很好。
8. 服务管理、日志分析与系统监控
8.1 systemd 服务管理:从开机到重启
现代 Ubuntu 的服务管理用的是 systemd,一切准备就绪,开发者说它的核心是"单元",每个服务、挂载点、套接字都是一个单元。管理服务的常用命令都基于systemctl:
sudo systemctl start 服务名 sudo systemctl stop 服务名 sudo systemctl restart 服务名 sudo systemctl enable 服务名 sudo systemctl disable 服务名start/stop/restart都很好理解,真正让人糊涂的是enable和disable,它们控制的是开机启动,不是当前运行状态。一个服务可以当前在运行(started),但不是开机自启(disabled),这是两套独立的状态。每次配置完服务,最稳妥的做法是sudo systemctl daemon-reload重载配置,尤其改过配置文件或新建了服务单元时,忘了这个操作,配置文件怎么改都不会生效。
查看服务的运行状态用systemctl status 服务名,除了显示当前状态,还会打印最近几行日志。如果服务起不来或者异常退出,这个命令能帮你先定位到是什么问题。如果想看完整的系统日志,用journalctl,比如查看 SSH 服务最近的日志:
journalctl -u ssh --since "today"-u指定服务单元,--since限定时间范围。journalctl还支持-r倒序输出、-n 100只看最近 100 行,组合使用排查效率会高很多。
8.2 性能监控三件套:top、free、df
系统是不是卡顿,重点要看三样:CPU负载、内存占用、磁盘 IO。top命令展示系统整体负载、每个进程的 CPU 和内存占用,按P按 CPU 排序,按M按内存排序,按q退出。htop是它的增强版,显示彩色、操作也更顺手,推荐直接装一个。
内存看free -h,重点看available列,这是真正可供新进程使用的内存量。很多人只盯着free列看内存是不是不够,误以为只剩几百 MB 就卡死了,但实际上 Linux 的设计就是尽量利用空闲内存做缓存,free列小不代表内存不够,available才是真正可以分配的量。
磁盘 IO 可以用iostat定位。服务器部署后用户反馈慢,我会同时看top、iostat、journalctl -f来定位瓶颈,一个进程如果 CPU 和内存都很低但系统响应慢,IO 是主要的怀疑对象。
8.3 日志文件在哪里,怎么查
Ubuntu 的日志集中在/var/log/目录下,常见的几类:
/var/log/syslog:系统综合日志,几乎所有服务的消息都会往这里写。/var/log/auth.log:认证日志,含登录、sudo 授权、SSH 尝试等。/var/log/kern.log:内核日志。/var/log/dpkg.log:软件包安装和升级记录。/var/log/nginx/access.log等:具体应用日志。
排查问题时要先判断问题属于哪一类,再找对应的日志文件,不要满世界的 log 翻。比如 SSH 老登录不上,直接先翻/var/log/auth.log,基本能找到拒绝原因;系统突然出现诡异卡顿,先看一眼kern.log或syslog,大概率有硬件或驱动报错。日志文件会因为自动轮转而被压缩为.gz历史文件,用zcat可以查看压缩日志,zgrep可以搜索。
9. Shell 脚本与 Ubuntu 自动化操作
9.1 从零开始写一个能用的 Shell 脚本
Ubuntu 的自动化操作几乎都离不开 Bash 脚本。Shell 脚本的本质是把一串命令按顺序或者带逻辑地组合到一个文件里,然后执行。新建一个脚本文件,通常扩展名是.sh,第一行写:
#!/bin/bash这行叫 shebang,指定解释器。然后是脚本正文,一行行写命令就行。执行方式有两种:
bash 脚本名.sh chmod +x 脚本名.sh && ./脚本名.sh第一种方式不需要执行权限,相当于让 Bash 解释这个文件,但这样文件里的相对路径会以当前所在目录为基础;第二种方式先给脚本加执行权限,然后直接运行,相对路径会以脚本所在目录为基础。这个差别在写备份脚本、部署脚本时十分关键,路径不对很容易把文件写到意外的地方。
我写脚本时的习惯是开头先写一句注释,说明"这个脚本是干啥的、需要什么环境、怎么执行",不然三个月后看自己写的东西,就像看别人留下的谜题一样。
9.2 常用脚本片段:备份、批量操作与定时任务
日常最好用、也最推荐新手自己写的一个脚本是"备份目录到另一个位置"。无论做任何修改之前,先把这个脚本写出来,后面对系统各种折腾会有安全感得多。
#!/bin/bash DATE=$(date +%Y%m%d_%H%M%S) BACKUP_DIR="/path/to/backup/$DATE" source_dir="/path/to/source" mkdir -p "$BACKUP_DIR" rsync -av --delete "$source_dir" "$BACKUP_DIR/" find "$BACKUP_DIR/.." -maxdepth 1 -type d -mtime +30 -exec rm -rf {} \;这个脚本的含义:创建一个带时间戳的备份目录,用rsync把源目录同步过去,然后用find删除 30 天前的旧备份。rsync的优势在于支持增量同步,第一次全量,后面只同步差异部分,对大目录的备份效率极高。
批量操作也是 Shell 脚本的强项。比如对当前目录所有.txt文件批量修改权限:
for file in *.txt; do chmod 644 "$file" done这种循环结构在处理大量文件时比手动一个个操作效率高得多。日常批量改名、批量压缩、批量移动都可以写在脚本里,而且可重复执行。
想要脚本定时执行,可以用 crontab:
crontab -e在打开的编辑器里加一行:
0 3 * * * /path/to/backup.sh这行代表每天凌晨 3 点执行备份脚本。cron 的时间格式是"分 时 日 月 周",五个字段的顺序不要搞反,这是新手最容易写错的地方。定时任务执行后日志输出到哪里,最好重定向到文件,不然查问题的时候两眼一抹黑。比如:
0 3 * * * /path/to/backup.sh >> /var/log/backup.log 2>&1这样标准输出和错误输出都会进同一个日志文件,排查问题时一眼就能看到记录。
心得分享:写 crontab 定时任务最容易漏看的坑是环境变量。通过 crontab 跑的脚本环境里没有你手工登录时的 PATH 等变量,所以脚本里尽量使用绝对路径,或者在脚本第一行加上
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin,否则经常会出现"手工跑正常、定时跑报错"的诡异问题。
10. 排障经验:我踩过的那些坑与解决方法
10.1 系统启动卡在"无 GRUB 引导"等问题
双系统升级或装完 Ubuntu 后,最让人头疼的问题就是开机直接进了 GRUB 命令行或者干脆黑屏。绝大部分原因出在 GRUB 没有正确找对 Linux 内核所在分区。
解决这类问题的思路:先在 GRUB 命令行里用ls查看所有分区,找到带 Linux 分区(通常是 ext4 文件系统),然后手动设置 root 和 boot 路径,尝试引导系统。进了系统后再重新生成 GRUB 配置:
sudo update-grub如果连系统都进不去,可以用 Ubuntu 安装 U 盘进入"试用"模式,chroot 进系统根分区修复 GRUB。这一套操作对新手来说难度不小,但值得专门花时间学,因为一旦掌握,遇到引导类问题就不会慌。
实测下来,很多引导类问题的根源在于安装了 Windows 后 Windows 的引导程序把 BIOS 启动顺序改了。如果系统老是无缘无故掉进 GRUB rescu 模式,优先检查fstab是不是有挂载项找不到设备。这是我的核心经验:GRUB 修复不是第一优先,先查 fstab 有没有写错。
10.2 常见错误:权限拒绝、依赖冲突、磁盘只读
"Permission denied"是新手遇到最多的报错。这个报错出现时,先看文件的属主和权限,再确认自己是不是真的需要操作这个文件。如果确实是普通用户操作系统级文件,用sudo;如果只是脚本或配置文件没执行权限,用chmod +x补上。不要遇事就sudo,因为权限系统设计出来就是为了避免误操作,每次提升权限前应该反思"我是不是真需要动它"。
"Unmet dependencies"这个报错常在混合安装软件时出现。解决办法是先用sudo apt --fix-broken install修一遍依赖,不行再检查是不是某个软件源出了问题导致依赖版本冲突。如果源里有版本过旧的软件,可以临时禁用某条其他软件源,只更新官方源,通常就能解决。
文件系统变只读也很常见,尤其在不正常关机或热拔插硬盘之后。此时典型的报错是Read-only file system,这往往意味着文件系统有错误。先用sudo dmesg查看内核日志确认是哪个设备问题,然后卸载该分区,执行sudo fsck -f /dev/分区名修复文件系统。注意在运行系统时执行fsck有额外的风险,如果分区是根分区,建议在启动阶段就操作。
10.3 软件源选对,很多问题迎刃而解
Ubuntu 的 apt 源默认是官方地址,在国内访问可能很慢,尤其在apt update时经常卡住。解决办法是换成国内镜像源,比如清华、阿里、中科大的镜像站。
以 Ubuntu 24.04 为例,修改源的方式是编辑/etc/apt/sources.list.d/ubuntu.sources文件(不同版本的文件路径有差异,较新版本已更换),把其中的http://archive.ubuntu.com/ubuntu/替换为镜像地址,然后执行:
sudo apt update注意不同 Ubuntu 版本的软件源格式不同,尤其是新版引入了deb822格式,不要盲目把老版本的源配置复制进去,否则会更新失败。
别小看这一步的作用,很多朋友安装软件报错、软件更新失败,最后排查到源头就是源太慢超时导致的。隔一段时间执行一次sudo apt update是维护习惯的基础,做得好的话,大部分软件层面的问题都能在早期就消散掉。
11. 升级与迁移:从旧版本到新版本的正确姿势
11.1 使用命令行升级而不是直接重装
Ubuntu 的大版本升级有两种方式:一种是图形界面里点击"软件更新器"的提示升级,另一种是用命令行。
命令行升级的方式:
sudo apt update sudo apt upgrade sudo apt dist-upgrade sudo do-release-upgrade前三步先把当前版本所有软件更新到最新,最后一条命令触发版本升级。do-release-upgrade会先检查是否有可用的新版本,然后下载必要的软件包。整个过程比较耗时,建议在有稳定网络和提前备份的背景下进行。
桌面系统的升级通常比升级 System 要更复杂一些,第三方软件源(PPA)有可能不兼容新版本,导致升级过程中报错。我的经验是升级之前先禁用或删除非必要的第三方源,升级完再按需添加。否则只要有一个 PPA 冲突,整个升级过程就会卡住,处理起来很费时间。
11.2 数据迁移和软硬件环境恢复
升级前必须备份的数据至少包含这几类:/home下面的个人文件、配置文件(/etc里的重要内容)、数据库数据、cron 任务列表。个人资料文件用 rsync 或者直接打包;cron 任务列表用crontab -l > /backup/crontab_backup.txt导出。
迁移到全新机器时,有一种快捷方式是把/home整个拷贝到新机器的同样位置,然后重新安装/更新软件。软件清单可以用apt list --installed > installed_packages.txt导出,新机器上再配合脚本批量还原。
环境这块我推荐一个做法:把自己的常用配置做成 dotfiles 仓库管理,放在 Git 上。这样换新机器时只需要把仓库拉下来,软链接到对应位置,几分钟就能恢复一套熟悉的终端环境。这个习惯我延续了好几年,极其省心。
12. 聊聊我这几年的使用体会与建议
12.1 最适合上手 Ubuntu 的人群
基于这些年帮不少人装过 Ubuntu 的经历,我觉得这些人群最适合从 Ubuntu 入门:
- 开发者和数据相关从业者:因为你迟早要接触 Linux 服务器,与其到服务器上才临时学,不如本地先把环境切换过来。
- 电脑配置不高但又不想换机的用户:Ubuntu 对资源的要求比 Windows 低不少,老机器装上明显轻快。
- 对系统可定制性有要求的技术发烧友:Ubuntu 提供足够的自由度,从桌面主题到内核参数都能改。
- 纯粹想学一门技术的学生:通过 Ubuntu 学到的命令行、脚本、进程管理、网络基础,在任何技术面试里都是加分项。
当然,如果你完全依赖某些只能在 Windows 上运行的专业软件(比如某类特定的 CAD 或 Adobe 全家桶重度用户),我不建议贸然换系统。蒸汽 Linux 生态虽然越来越成熟,但一些特定领域的生产力工具仍然是 Windows/macOS 的天下。对这些情况,双系统或者虚拟机运行,是很务实的选择。
12.2 装了 Ubuntu 之后,先做这几件事
根据我的实战经验,新装完系统后按这个顺序折腾,能省掉后面很多麻烦:
- 第一,执行一次
sudo apt update && sudo apt upgrade,保证系统处于最新状态。 - 第二,装好输入法和常用字体,解决中文环境的体验问题。
- 第三,安装常用开发工具(
build-essential、git、curl、vim等),后面用得到。 - 第四,配置好备份方案,至少把
/home备份逻辑想清楚。 - 第五,如果你有远程管理需求,安装并安全配置 SSH。
- 第六,把软件源设置成你访问更快的镜像源,并顺手配置好 ufw 防火墙。
- 第七,装一个快照/恢复工具,或者至少做个系统盘的镜像备份,方便折腾出问题时快速回滚。
这七件事做完,系统已经是一个"可用且相对安全"的状态了,后面再怎么折腾都不会太心疼。
12.3 从 Ubuntu 到更广阔的 Linux 世界
Ubuntu 从来不是终点。许多人在 Ubuntu 上熟练之后,会去尝试其他基于 Debian 的发行版,或者体验 Arch 系、Fedora(红帽系)等。Ubuntu 的作用更多是提供了一个平滑的入口,让你不会在第一周就被命令行和权限模型劝退。在 Ubuntu 上学的绝大多数知识,迁移到其他发行版时仍然适用,最多只是软件包管理命令不同而已。
我自己在工作电脑上用的是 Ubuntu,服务器也以 Ubuntu Server 为主,但对其他发行版的了解从来不觉得是浪费。跨发行版的经历就像学了一门方言后再学另一门,底层逻辑通了,每个新系统上手都很快。所以我建议所有想深入 Linux 的朋友,早期以 Ubuntu 为主阵地,认认真真折腾两三个月,后面再决定要不要去其他发行版看看。这条路径是我验证过的,也是最不容易走弯路的路。
如果你有条件,不妨找一台不常用的老机器,或者直接开个虚拟机,把今天文章里的命令动手敲一遍。所有教程看十遍都不如亲手装一次、踩一次坑来得实在。等你某天发现自己已经习惯在终端里完成大部分操作,不自觉地写起了 shell 脚本,恭喜你,已经跨过了 Linux 这条路上最陡的坡。