装好Ubuntu,第一件劝退新人的事往往不是系统本身,而是那个黑乎乎的终端。很多人看到命令行就头大,觉得都2025年了怎么还要敲命令。但你要是真在Ubuntu上用过一阵子,会发现图形界面搞不定的场景越来越多:批量改文件名、查看端口占用、排查网络不通、修复引导、装个开发环境……这些活儿在终端里几秒钟就能完成,在图形界面里反而绕半天。这篇东西我就以Ubuntu为例子,把Linux里最高频、最实用的常见命令梳理一遍。不追求把每个命令的每个参数都列全,只讲你在真实使用中遇到这些场景时,应该敲什么、为什么这么敲、踩过哪些坑。
我会按照日常使用的频率来排顺序:先文件操作,再系统信息,然后软件安装、权限、网络、配置管理,最后给一份故障排查速查表。你可以照着顺序读,也可以直接跳到正在遇到的问题对应的小节。命令这东西,光看没用,得开着终端跟着敲一遍,敲出错来反而记得更牢。
1. 文件和目录操作:每天都要打交道的基础命令
1.1 ls、cd、pwd:先搞清楚自己在哪里、旁边有什么
刚进终端,你面对的就是一个shell提示符。不管它长什么样,核心就三件事:看当前位置、看当前目录内容、切换目录。
pwd 打印当前工作目录,这个命令我建议新手没事就敲一下,尤其是在你迷路的时候。ls 列出目录内容,最常用的几个参数是 ls -l(长格式,看权限、大小、修改时间)、ls -a(显示隐藏文件,以.开头的文件)、ls -lh(人类可读大小,会显示成K、M、G而不是一串字节数)。如果你只想确认某个文件在不在,可以直接 ls /etc/nginx/nginx.conf,不用先进目录。
cd 切换目录,这里有一个特别容易混淆的点:绝对路径和相对路径。绝对路径是从根目录 / 开始写的完整路径,比如 cd /var/log;相对路径是相对于当前目录的位置,比如你当前在 /var,敲 cd log 也能进到 /var/log。我用一个生活类比解释:绝对路径就是"北京市海淀区中关村大街1号",相对路径就是"往前走两个路口右转"。新手阶段我建议多用绝对路径,路径写全,出错概率低。等习惯了目录结构再偷懒。
还有个细节,cd 不带参数直接回车,回到当前用户的家目录 /home/你的用户名,也就是 ~ 这个符号代表的位置。很多新手不知道 ~ 是家目录的缩写,结果配置文件里的路径写错。cd .. 是返回上一级目录,cd ../.. 往上跳两级,这些属于肌肉记忆,用多了自然顺。
1.2 创建、复制、移动和删除:cp、mv、rm的安全姿势
mkdir 创建目录,要创建多级目录用 mkdir -p a/b/c,这个 -p 的意思是把中间缺失的目录一并建出来。实测很多新手第一次用 mkdir 建嵌套目录失败,就是忘了 -p。
cp 复制文件,基本用法 cp 源文件 目标位置。复制整个目录必须加 -r(递归),否则报错 omitting directory。我建议直接养成习惯,凡是用 cp 处理目录就写 cp -r。还有个参数 -i,覆盖前会先询问,防止你把重要文件覆盖了。有些发行版的别名默认就带 -i,Ubuntu的 cp 默认没带,所以操作要小心。
mv 移动文件,也可以用来重命名。很多人不知道,mv 其实是"先复制再删除"的高效版本,在同一个文件系统内几乎是瞬间完成,跨分区则是复制加删除,速度会慢一些。mv 不需要 -r 就能移动目录,这一点和 cp 不一样,我见过不少人给 mv 加 -r 被系统忽略,还一脸茫然。
rm 删除文件,rm -r 删除目录。这个命令是我在所有新人教程里都要重点强调的:没有回收站。图形界面删掉的文件还能去回收站翻,终端里 rm 删掉的东西直接没了,ext4文件系统恢复起来极其痛苦。我刚工作那会儿在服务器上敲 rm -rf /var/log/nginx/ 多打了一个空格,差点酿成大祸。现在我的习惯是:删除之前先 ls 确认一遍路径,尤其是 rm -rf 这种命令,永远不要把变量、通配符和 rm -rf 组合在一起用,除非你确定要删什么。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 查看系统信息和硬件状态:别动不动就装监控软件
2.1 系统架构、内核版本和发行版信息
热词里有"ubuntu查看系统架构",这个场景很常见,比如你要下载安装包,得先搞清楚系统是x86_64还是arm64,架构错了装不上。
uname -a 能显示内核版本、主机名、架构等全套信息。只看架构可以用 arch 或 dpkg --print-architecture,x86_64位系统会输出amd64,树莓派这类ARM板子会输出arm64。想确认Ubuntu的版本号,用 lsb_release -a,这个命令会显示发行版描述和版本号。cat /etc/os-release 也能看,而且很多精简系统没有 lsb_release,但 /etc/os-release 基本都有。
判断系统是物理机还是虚拟机,可以用 systemd-detect-virt。这个命令在排查问题时挺有用,比如你在虚拟机里装NVIDIA驱动失败,很大概率就是环境识别问题,命令会输出 kvm、vmware、virtualbox 这类虚拟化类型。
2.2 内存、磁盘和CPU占用:free、df、du
Ubuntu桌面版自带系统监视器图形工具,但你在服务器上或者在纯终端环境里,就只能靠命令。free -h 查看内存使用情况,-h 是人性化显示。重点看 available 这一列,它比 free 那列更能反映真实可用内存,因为Linux会把空闲内存拿去做缓存,free 显示很小不代表不够用。
df -h 查看磁盘分区使用情况,当你遇到"磁盘空间不足"的报错时,第一件事就是执行这个命令,看看是哪个分区满了。df -h 看的是文件系统整体使用率。du -sh 目录 查看指定目录总大小,du -sh * 可以列出当前目录下每个子目录的大小,用来排查哪个目录吃掉了磁盘空间。我排查服务器磁盘满的时候,一般就是 df -h 找到满的分区,然后 du -sh * 层层往下,总会揪出那个日志文件堆积的目录。
CPU占用用 top,进去之后按 1 可以查看每个核心的负载,按 q 退出。更直观的是 htop,但有些系统默认没装,需要 sudo apt install htop。查看CPU核心数和型号,用 lscpu。这些命令组合起来,基本能满足日常性能排查。
2.3 查看显卡驱动和GPU状态
热词里有"ubuntu查看显卡驱动",这里分NVIDIA和Intel/AMD两种情况。
NVIDIA显卡:先敲 nvidia-smi,如果有输出,说明驱动已安装且正在工作,输出里能看到驱动版本、显存占用、当前运行进程。如果提示找不到命令,先装驱动或用 ubuntu-drivers devices 查看推荐版本。只看驱动版本不关心GPU状态的话,nvidia-smi --query-gpu=driver_version --format=csv 或 dpkg -l | grep nvidia-driver 都行。
Intel核显或AMD显卡,一般用 lspci | grep -i vga 查看硬件型号,驱动是否加载可以看 lsmod | grep i915 或 lsmod | grep amdgpu。我遇到过不少情况:用户觉得显示卡顿,跑去装NVIDIA驱动,结果笔记本是双显卡,装完反而黑屏。先用 lspci 确认硬件再动手,能省很多事。
3. 软件安装与包管理:apt的完整用法
3.1 apt三件套:update、upgrade、install
Ubuntu用的包管理工具是apt,它是Debian系的老牌工具。日常操作就是三条:sudo apt update 更新软件源索引,sudo apt upgrade 升级已安装的软件包,sudo apt install 包名 安装软件。
这里有个很多新手不理解的区别:update 并不会实际升级软件,它只是把软件源里的最新软件列表拉下来,就像你去超市之前先看一眼最新货架清单;upgrade 才是真正把已安装的软件升到新版本。所以正确流程永远是先 update 再 upgrade,skip掉update直接upgrade,系统会提示源的索引太旧。
apt还支持一次安装多个包,比如 sudo apt install nginx mysql-server php-fpm,一条命令搞掂整个环境。卸载用 sudo apt remove 包名 或用 purge 连配置文件一起删。清理不需要的依赖包用 sudo apt autoremove,这个命令在卸载完大型软件后跑一下,能释放不少空间。
3.2 实战案例:Ubuntu安装GCC失败的原因分析
热词里有一条"ubuntu安装gcc失败",这个我见得太多了,大部分原因可以归纳为三类:
第一类是软件源索引过期或源本身不可用,报错通常是 Unable to locate package gcc 或 404错误。解决办法:先 sudo apt update,如果还不行,检查 /etc/apt/sources.list 里的源地址。在某些网络环境下,默认的源连不上,换成国内镜像源(比如清华、阿里云)基本能解决。
第二类是系统里残留的 dpkg 中断状态,报错 dpkg was interrupted。这是因为之前有个安装过程被Ctrl+C中断了,包管理器处于锁定状态。修复方式是 sudo dpkg --configure -a。
第三类是源里软件包版本冲突,比如你已经装了某个版本的gcc又被系统部分升级了,报错依赖关系不满足。这种我一般的处理顺序:先 sudo apt --fix-broken install 修复损坏依赖,再 sudo apt install gcc。如果 --fix-broken 不行,看具体冲突的是哪个库,用 apt-cache policy 包名 查看可用版本,再决定是升级还是降级。
3.3 手动安装deb包和压缩包:dpkg与tar
apt只认软件源里的包,但你从官网下载的 .deb 文件,就得用 sudo dpkg -i 包名.deb 本地安装。dpkg安装过程中经常碰到依赖缺失,报错提示你缺少某某库。这时候不要硬刚,直接 sudo apt --fix-broken install 或者 sudo apt install -f,apt会自动补齐依赖。
从官网下载的 .tar.gz 源码包,有些需要自己编译,流程一般是解压、./configure、make、sudo make install。这里提醒一下,自己手动安装到 /usr/local 的软件,卸载的时候没有apt帮你管理,得自己删除文件,目录通常还是在 /usr/local 下。所以除非必要性很强,我一般建议优先用apt源里的版本,省心最重要。
4. 用户、权限与sudo:Linux安全模型的核心
4.1 sudo的正确理解
sudo全称是 superuser do,意思是"以超级用户身份执行"。Ubuntu默认禁用了root直接登录,需要管理员权限的命令前面加 sudo,然后输入当前用户的密码。注意,它问的是你的密码,不是root密码,很多新手在这里被搞懵。
sudo -i 或 sudo su - 可以切换到root身份,在需要连续执行多条管理员命令时方便一些,但日常我不建议长期挂在root下操作。你要是手滑执行了 rm -rf / 某个路径,root身份下没有半点保护。我的经验是:尽量用 sudo 具体命令 的方式,少用root shell。
sudo执行权限可以通过 /etc/sudoers 文件配置。查看某个用户能不能用sudo,用 sudo -l -U 用户名 或者直接看用户是否在sudo组里:groups 用户名。
4.2 别再被权限报错折磨:chmod、chown
Linux的权限设计其实很直观:每个文件和目录都有三组权限,分别对应属主(user)、属组(group)、其他人(others),每组权限又是读(r=4)、写(w=2)、执行(x=1)三个值的组合。
数字表示法就是把三组权限分别算成数字,比如 chmod 755 文件 的意思是:属主有读+写+执行(4+2+1=7),属组有读+执行(4+1=5),其他人有读+执行(4+1=5)。这和Windows里"只读、只写、可执行"的概念不一样,Linux里一个文件能不能运行看的是x位有没有设置。
常见场景:你自己创建的脚本文件,直接 ./script.sh 会提示权限不够,因为默认没有执行权限,需要 chmod +x script.sh。网上下载的.sh文件同理。目录权限要注意,目录的x权限意味着"能否进入这个目录",如果你设成 chmod 644 目录名,你会发现能列出文件名但进不去,这个坑不少人遇到过。
chown 用户名:组名 文件 修改属主和属组。经常在挂载硬盘后出现文件所有者变成root,导致普通用户无法写入,解决方式就是 sudo chown -R 你的用户名:你的组名 /挂载点。
4.3 忘记密码的急救方法
热词里有"ubuntu 忘记登录密码",这里分情况说。如果你能进入系统,只是忘了登录密码,在登录界面按Ctrl+Alt+F3切到纯命令行tty,用其他管理员账号登录后执行 passwd 用户名 来重置。如果你连其他管理员账号也没有,最稳妥的方案是Ubuntu安装U盘启动,进入Live环境,挂载系统分区后用 chroot 进去执行 passwd。具体步骤是:启动Live环境,找到系统分区(sudo fdisk -l 确认),挂载到 /mnt,然后 sudo chroot /mnt,这时你就进入了原系统的根目录,直接 passwd 用户名 重置即可。这个方法实测有效,但需要注意一点:如果系统分区是LVM或加密的,还需特殊处理,新手建议先备份数据。
5. 网络排查与配置:从"连不上"到"流畅通"的排查路径
5.1 查看IP地址和网络接口状态
Ubuntu 18.04之后用的是netplan配置网络,以前常用的 ifconfig 在最小化安装里可能不存在了,我现在基本都用 ip 系列命令。ip addr 查看所有网络接口和IP地址,ip link 查看接口状态,ip route 查看路由表(默认网关)。
ping 是用来测连通性的,但要清楚一点:ping 通只代表ICMP协议可达,不代表服务一定正常。我排查网络一般都按这个顺序:先 ping 网关 确认局域网通不通,再 ping 8.8.8.8 或 223.5.5.5 确认外网通不通,然后 nslookup 域名 或 dig 域名 确认DNS解析是否正常。DNS上出的问题相当多,比如域名解析不了,网页打不开,但IP能ping通,基本就是DNS配置问题。
查看端口监听状态,用 ss -tlnp 或 netstat -tlnp。当你装好服务却访问不了时,第一件事是确认端口有没有在监听。比如Nginx装好了,但浏览器打不开,先 ss -tlnp | grep 80,如果输出为空,说明Nginx根本没起来,问题不在防火墙而在服务本身。ss 是iproute2工具包自带的,比netstat更现代,建议直接用 ss。
5.2 curl、wget:命令行里的浏览器和下载器
curl 和 wget 是我日常高频使用的命令。curl -I https://example.com 只请求响应头,用来检查网站是否正常返回状态码,curl -v 显示详细过程,能看到DNS解析、TCP握手、TLS握手到响应全过程,排查HTTPS证书问题很有用。
下载文件用 wget 更顺手,断点续传用 wget -c,下载整个网站镜像用 wget -r。实测在服务器上往本机传文件,我经常直接 python3 -m http.server 8000 起个临时HTTP服务,然后用 wget 拉文件,比scp还省事。
5.3 实战案例:Ubuntu SSH无法连接的五步排查
热词里有"ubuntu ssh无法连接",这个场景在远程服务器上尤其要命。我按自己的排查顺序写一遍:
第一步,确认SSH服务在运行:systemctl status ssh,如果状态不是active(running),用 sudo systemctl start ssh 启动。第二步,确认端口在监听:ss -tlnp | grep 22,有输出才正常。第三步,确认防火墙放行:sudo ufw status,如果ufw是active且22端口的规则不是allow,就用 sudo ufw allow 22 或 sudo ufw allow OpenSSH。第四步,看日志找线索:sudo tail -f /var/log/auth.log,然后从另一台机器尝试连接,日志里会显示认证失败原因。第五步,检查配置文件 /etc/ssh/sshd_config 里 PermitRootLogin 和 PasswordAuthentication 这两行,如果你改了认证方式,比如只允许密钥登录,那密码登录自然被拒。
我遇到过大量所谓"SSH连不上"其实是忘了服务没启动,或者改了端口却没告诉防火墙。养成服务装好先 systemctl enable --now ssh 的习惯,能省掉很多后续麻烦。
6. 系统配置与常见应用场景
6.1 环境变量配置及错误恢复
热词里有"ubuntu环境变量配置错误",这个问题的典型症状是敲什么命令都提示 command not found,因为PATH变量被你改坏了。
环境变量分两种层级:/etc/environment 是系统级,对所有用户生效;~/.bashrc 或 ~/.profile 是用户级,仅当前用户生效。最常见的坑是你在 ~/.bashrc 里写 export PATH=/some/path,注意这个写法把原有PATH覆盖了,正确写法是追加:export PATH=$PATH:/some/path。$PATH 引用的是之前的PATH变量,冒号后面接你新增的目录。
如果不小心把PATH覆盖了,不要慌,用绝对路径执行命令来修复。比如vim没了,直接 /usr/bin/vim ~/.bashrc 改回来。如果你连 sudo 都用不了,因为sudo也在PATH之外,就用 /usr/bin/sudo 或 /bin/su 切换到root再修。改完之后 source ~/.bashrc 让配置立即生效。
还有一个细节:在新文件里设置环境变量后要重启终端或 source 生效,很多新手改了 ~/.bashrc 后说"没生效",其实只是没重新加载。记住,.bashrc 只在交互式shell启动时读取,不会实时监听文件变化。
6.2 中文输入法:fcitx与ibus的配置
热词里有"ubuntu中文输入法怎么设置",这个我很有发言权,因为我自己在Ubuntu下折腾多年的输入法。
默认Ubuntu桌面用的是ibus框架,系统设置里"Region & Language"可以直接添加中文拼音输入法。但如果你用一些非Gnome桌面,或者对输入法兼容性有更高要求,很多人会换fcitx5框架。安装方式:sudo apt install fcitx5 fcitx5-chinese-addons,然后在系统环境变量里设置 GTK_IM_MODULE=fcitx、QT_IM_MODULE=fcitx,再重启会话。注意,有的应用只认ibus,有的只认fcitx,这就是同一个系统里有的地方能输入中文有的地方不能的原因。切换输入法快捷键一般就是Ctrl+Space或Ctrl+Shift,具体在输入法配置里看。
还有一个细节:在Wayland会话和X11会话下,输入法框架的兼容性差异很大。Ubuntu新版默认Wayland,fcitx5在Wayland下的支持现在很好了,但某些老应用还是需要XWayland环境。遇到输入法无法在某些应用里唤出,优先排查框架和会话类型。
6.3 查看系统日志和排查启动问题
journalctl 是systemd时代的日志查看工具。基本用法:journalctl -b 查看本次启动的日志,journalctl -u 服务名 查看某个服务的日志,journalctl -f 实时跟踪日志输出。这些东西写到我这里,手边就浮现出以前排查运行故障时,全靠journalctl定位系统日志。
如果系统启动异常,比如到不了登录界面,在GRUB界面按 e 进入编辑模式,在 linux 那一行末尾加上 systemd.unit=rescue.target 或 single,就能进入单用户维护模式,这在修复系统配置错误时非常实用。虚拟机装Linux时如果出现蓝屏或花屏,通常和显卡驱动或内核参数有关,在GRUB启动参数里加 nomodeset 往往能解决。
开机后想调整默认启动级别,用 systemctl set-default multi-user.target(命令行模式)或 systemctl set-default graphical.target(图形模式),这个在改坏桌面环境时用来救急。
7. 常见故障排查速查表:把踩过的坑一次列全
我在实际使用中遇到的故障,90%都可以用下面这个表快速定位。整理成表格,方便你直接对照症状找解法。
| 症状 | 可能原因 | 排查命令 | 解决方式 |
|---|---|---|---|
| 软件源更新报错/404 | 源地址失效,或软件源列表里有多余条目 | sudo apt update 看具体报错 |
备份 /etc/apt/sources.list 后更换国内镜像源 |
apt提示 Could not get lock /var/lib/dpkg/lock |
有另一个apt/dpkg进程在运行 | ps aux | grep apt |
找到进程结束后再执行;或删掉 /var/lib/dpkg/lock(不建议直接删,先确认没有进程再删) |
命令提示 command not found 但确认装过 |
PATH变量被覆盖,或该命令不在当前用户PATH内 | echo $PATH,which 命令 |
用绝对路径运行;修复 ~/.bashrc |
权限不足 Permission denied |
文件权限位没有对应用户开放 | ls -l 查看权限位 |
chmod +x 或 chown 调整属主 |
| SSH连不上 | 服务未启动/端口被防火墙挡 | systemctl status ssh,ss -tlnp | grep 22,sudo ufw status |
启动服务、放行端口;检查sshd_config |
| 磁盘空间满 | 日志或临时文件堆积 | df -h,du -sh * |
清理日志:sudo journalctl --vacuum-size=200M;删无用安装包:sudo apt autoremove --purge |
| 内核更新后无法启动 | 显卡驱动与新内核不兼容 | 在GRUB高级选项里选旧内核启动 | 重新安装对应内核版本的驱动模块;或锁定内核版本 |
| 中文显示为方块/乱码 | 缺少中文字体 | fc-list | grep -i china |
sudo apt install fonts-noto-cjk |
| vmware/virtualbox虚拟机内系统卡顿 | 缺少虚拟化优化驱动 | lsmod | grep virtio |
安装open-vm-tools或virtualbox-guest-utils |
| 安装GCC报依赖不满足 | 源索引过期或依赖损坏 | sudo apt update,sudo apt --fix-broken install |
按依赖错误逐条处理;必要时手动安装缺失deb包 |
| 忘记密码无法登录 | 密码丢失或Sudo权限被误改 | 参考4.3章节 | Live U盘chroot重置,或救援模式重置 |
| IP地址配置错误导致网络不通 | netplan配置有误 | sudo netplan try(会自动回滚) |
sudo netplan apply;配置文件在 /etc/netplan/ |
这个表看起来只是一个速查,但我建议你把每一行的命令都自己敲一遍,因为排障能力的本质是对命令的熟练度。真正出了问题的时候,你越熟悉输出格式就越快定位到原因。
8. 讲点没写进教科书的小技巧
最后分享几个我自己用Ubuntu过程中觉得极其实用、但很多教程压根不提的技巧。
第一个是 history 命令。终端里敲过的命令都有记录,直接敲 history 就能看到,配合 !编号 可以快速重跑某条历史命令,Ctrl+R 反向搜索历史命令,输入关键词会自动匹配。掌握这三个操作,日常重复输入命令的时间能少一半。
第二个是alias(别名)。我桌面机的 ~/.bashrc 里加了不少alias,比如 alias ll='ls -alF'、alias la='ls -A'、alias ..='cd ..'。你自己常用的长命令,都可以设成简短别名,省得每次敲一大串。
第三个技巧是Tab补全。很多人知道按Tab能补全命令和文件名,但不知道按两下Tab会列出所有可选项。路径写到一半再按Tab,能省掉大量记忆路径的时间。
还有一个我翻了车后才学到的经验:不要轻易删除你运行中的服务所依赖的旧内核或旧库。Ubuntu的自动安全更新偶尔会保留多个内核版本,很多人觉得占空间就手动删了旧的,结果下次启动时显卡驱动和新内核不兼容,直接黑屏。删东西之前,先 uname -r 看你正在用的是哪个内核,再决定怎么清理。
学习Linux命令没有任何捷径,最好的方式就是每天强制自己在终端里待半小时,哪怕做的事在图形界面里点几下就完成。等你会用 man 命令 或者 命令 --help 自己查参数时,就说明你已经具备独立解决问题的能力了。终端这个东西,刚开始觉得束手束脚,等熟练之后,反而会觉得它给了你最大的自由度。
