☰
Ubuntu从入门到实战:装机、文件操作与系统管理全攻略
2026/10/8 3:37:23 网站建设 项目流程

1. 站在入门门槛前:Ubuntu装机初体验

很多朋友接触Linux的第一站就是Ubuntu,原因很简单:资料多、软件源丰富、遇到问题随便一搜就有答案。但真正从零开始跑起来的人,大概率会在装系统这一步就卡一会儿,不是镜像选错,就是双系统和虚拟机之间来回纠结。所以聊命令之前,先花点时间把系统装好这件事说透,后面敲命令才有意义。

1.1 选镜像和安装方式是第一个坑

Ubuntu镜像下载,最稳的渠道是官网和各大高校镜像站。官网的下载速度看网络情况,国内用户走阿里云、清华、中科大这些镜像站会快很多。版本上目前主流是Ubuntu 24.04 LTS,LTS意思是长期支持,桌面版支持三年,服务器版支持五年,普通学习或生产环境优先选它肯定错不了。

安装方式就比较个性化了,主要分三种:物理机单系统、双系统、虚拟机。

  • 物理机单系统:适合旧电脑改造、专门的服务器机器,U盘启动后一路Next就行。
  • 双系统:适合Windows为主但又想深度体验Linux的同学。装之前最好先在Windows里用Disk Management压缩出一块空闲分区,然后U盘启动安装时选择"Install alongside Windows",Ubuntu会自动识别缩出来的空间。
  • 虚拟机:适合只是想快速上手、不想动宿主机分区的人。VMware或VirtualBox新建虚拟机,加载ISO镜像,分配2核CPU、4GB内存、40GB磁盘就足够入门了。

虚拟机安装的坑,最常见的是"安装过程中蓝屏"或者"启动时卡在某个界面"。这类问题大多是虚拟化设置不对。以VMware为例,Ubuntu 24.04建议在虚拟机设置里开启虚拟化引擎(VirtIO或者硬件虚拟化),并且给到的内存不能低于2GB,否则安装器起不来。还有一次我遇到的奇葩情况,虚拟机里安装时选了"3D加速",结果图形界面一直黑屏,关掉这个选项重新装就正常了。

1.2 装完系统先别急着敲命令,先做三件事

系统装完进入桌面,很多人第一反应是打开终端开始敲命令,但我个人建议先做三件事,能让后续少很多折腾。

第一件事是换软件源。默认源在国外,apt安装东西动不动就卡住或者超时。打开Software & Updates,把源从"Server for United States"换成阿里云或中科大镜像,然后终端里跑一次sudo apt update && sudo apt upgrade把系统包刷新到最新。这一步做完,你后续装GCC、Docker、Python这些才会顺畅。

第二件事是配置中文输入法。很多人装完系统发现没法打中文,其实Ubuntu桌面版自带iBus输入法框架,只需要在Settings -> Keyboard -> Input Sources里添加"Chinese (Intelligent Pinyin)"就行。如果你要装搜狗输入法,那需要先安装fcitx框架,再下载搜狗Linux版安装包,然后用im-config -n fcitx切换输入法框架,注销重新登录才生效。这个坑我踩过,装了搜狗却切不过去,就是因为没有执行im-config切换。

第三件事是确认系统架构和内核版本,后面的命令都要基于这个来选。终端里执行:

uname -a uname -m lscpu

uname -m会输出x86_64(Intel/AMD 64位)或者aarch64(ARM架构,树莓派、飞腾等),这决定了你下载软件包时选x64还是arm64版本。很多人在下载Miniconda、Docker、VS Code时选错架构,装了一堆不兼容的包,根源就在于没有先看架构。

做完这三件事,系统才算真正准备好,接下来所有的命令操作都会顺畅很多。

2. 文件与目录操作:一天至少有八成的命令敲在这

文件操作是Linux命令的基础,也是每天敲得最多的部分。很多新手一上来就去学高深的grep、awk,结果最基本的ls和cd反而用不熟。我见过不少同事,连ls -lh这种最实用的组合都不认识,一看就是没认真研究过命令参数。文件操作这块,把每个命令的常用参数吃透,效率能提升一大截。

2.1 ls和cd:用参数把家底看清

ls说它是Linux里执行次数最多的命令也不夸张。裸敲ls只能看到当前目录的文件名,但实际工作中经常要看的远不止这些:

ls -l ls -a ls -lh ls -lt ls -l /etc/nginx/
  • -l长格式列出权限、属主、大小、修改时间,这是最核心的用法。
  • -a显示隐藏文件,配置文件的隐藏属性全靠它发现。
  • -h配合-l把文件大小显示为K、M、G,看着直观。
  • -t按修改时间排序,找最新改动的文件特别好用,日志目录里定位问题经常用。

我习惯用ls -lah组合,不加任何额外输出也能把目录情况摸个八九不离十。

cd大家都会,但有两个细节非常实用。cd -能快速返回上一次所在目录,在深目录和浅目录之间来回切换时省时省力。cd ~返回当前用户家目录,比cd /home/用户名快得多。还有一个很多人不知道的技巧:cd只能进目录,如果想直接切到某个带有空格或特殊字符的目录,用Tab自动补全最靠谱,手动敲很容易出错。

2.2 增删改查四件套:mkdir、cp、mv、rm

这四个命令是文件操作的骨架,每个都有必须掌握的参数。

mkdir创建目录

mkdir test # 创建单个目录 mkdir -p a/b/c # 递归创建多级目录 mkdir -m 755 dir # 创建并指定权限

-p参数非常关键,创建多级嵌套目录时没有它直接报错。我见过一个人写部署脚本,创建/opt/app/logs这个路径时只写了mkdir /opt/app,后面又单独建logs,结果脚本跑一半就崩了,原因就是没理解-p的价值。

cp复制文件或目录

cp file.txt bak/ cp -r project/ backup/ # 复制目录必须加-r cp -a dir/ target/ # 保留权限和属性完整复制 cp file1.txt file2.txt # 复制并重命名

cp -r是复制目录的标配,不加就报omitting directory。-a是归档模式,等于-r加上保留权限、时间戳、符号链接属性,备份场景优先用。

mv移动或重命名

mv old.txt new.txt # 重命名 mv file.txt /tmp/ # 移动文件 mv /src/dir /dest/ # 移动整个目录

mv在同一个文件系统内就是改个指针的事,速度极快。跨文件系统移动时,实际是复制加删除,大文件会显得慢。我原来的同事有个经典误操作:写脚本移动日志文件,路径写错导致mv把重要日志丢到了错误位置,排查半天。后来学乖了,移动前先ls一次目标路径确认存在。

rm删除

rm file.txt rm -r dir/ rm -f file.log # 强制删除不提示 rm -rf dir/ # 最有威力也最危险

rm -rf是Linux世界里最能锻炼心态的命令。删掉重要数据的人,十个有九个都敲过它。我的建议是:不要在root用户下随意敲rm -rf,不要在参数里出现/这种绝对路径的根目录,能加-i交互提示就加-i。真要删重要目录,先用mv dir /tmp/移走观察几天再删,这个习惯救了我好几次。

2.3 高效查找文件:find才是真正的大杀器

find是查找文件的首选。它的逻辑就是"给一个起点路径,按条件往下找"。常用格式:

find /var/log -name "*.log" find /home -type f -size +100M find /etc -name "*.conf" -mtime -7 find / -name "nginx.conf" 2>/dev/null find . -type d -empty

几个关键参数:-name按文件名匹配,-type指定f(文件)或d(目录),-size +100M表示大于100MB的文件,-mtime -7表示7天内修改过的文件。每次全盘搜索之前最好加上2>/dev/null把权限报错丢掉,否则满屏的Permission denied会干扰视线。

find还能直接执行操作:

find /tmp -name "*.tmp" -exec rm {} \; find /tmp -type f -mtime +30 -delete

第一个命令把找到的临时文件逐个删除,{}代表每个匹配项;第二个直接把30天前的文件清掉。这种用法在清理日志和临时文件时非常高频。我自己写清理脚本时,固定用-mtime +30 -delete,比手动一个个删高效太多。不过还是那句老话,先跑一遍不加-delete的版本确认匹配到哪些文件,再真正执行删除。

3. 系统信息与硬件状态:先把机器摸透

新拿到一台Linux机器,或者接手一个服务器,第一步绝对不是急着跑业务,而是先把机器本身的底细摸清楚。系统什么架构、内核版本多少、CPU几核、内存多大、磁盘还剩多少、显卡有没有驱动,这些信息决定了你后续安装软件、调参、排障的方向。命令就那一两个,但看懂输出才是关键。

3.1 系统架构和内核版本

uname算是系统信息查询的"一库",最常用的组合是:

uname -a # 输出全部内核和系统信息 uname -r # 内核版本,比如6.8.0-31-generic uname -m # 机器架构,x86_64或aarch64

内核版本和架构这两项信息之所以重要,是因为很多软件安装包要对应架构和内核版本。比如CUDA工具包、NVIDIA驱动这类底层组件,版本不对轻则功能缺失,重则启动直接崩。我见过有人在x86机器上硬装arm版本的Docker镜像,跑是跑起来了,性能惨不忍睹,查了半天才发现架构选错了。另外uname -r还能辅助判断当前内核是否太旧,Ubuntu 24.04默认内核是6.8,如果你还在4.x老内核上跑,很多新特性不支持,建议直接升级系统版本。

查看发行版信息用的是:

cat /etc/os-release lsb_release -a

/etc/os-release输出NAME、VERSION、ID这些字段,脚本里判断系统类型时非常常用。比如写部署脚本时需要区分Ubuntu和CentOS,grep -i ubuntu /etc/os-release就是标准的判断方式。

3.2 内存、磁盘和CPU状态

系统性能这类问题,终端命令最直接。

内存查看

free -h

-h参数很关键,把内存数值显示成G或M级别,一眼看懂。输出里重点关注available一列,它才是真正可用的内存大小,而free列是未分配的内存,两者差很多。available接近0的时候说明内存吃紧,再跑大程序就可能触发OOM杀进程。我原来排一个Java服务频繁崩溃的问题,free -h一看available只剩几十MB,罪魁祸首是另一个进程把内存吃光了,杀掉之后服务立刻恢复。

磁盘查看

df -h

磁盘使用率的判断,df -h的输出明白人扫一眼就知道问题在哪。重点看/挂载点的Use%,超过80%就该清理了。数据库服务器如果磁盘满,直接导致写入失败甚至数据库宕机,这个是运维事故的重灾区。另外du -sh看指定目录占用,比如du -sh /var/log能快速找出哪个目录把磁盘吃光了。

CPU状态

top uptime

top命令打开后是个动态界面,按CPU占用率排序。第一行的load average三个数值分别代表1分钟、5分钟、15分钟的平均负载,经验值是数值不超过CPU核心数就基本健康,超过4倍说明系统已经忙不过来了。top里按P按CPU排序,按M按内存排序,按q退出。uptime就是快速看一眼负载和开机时长,适合写脚本或远程排查时第一眼确定机器状态。

3.3 显卡驱动:Ubuntu用户绕不开的坑

现在很多入门Linux的人是为了学习和做AI、跑深度学习来的,显卡这块是绕不过去的坎。先看有没有装驱动:

nvidia-smi lspci | grep -i nvidia

nvidia-smi能显示GPU型号、驱动版本、显存占用,如果命令报command not found,说明驱动没装好。lspci | grep -i nvidia则从硬件层面看到底有没有NVIDIA显卡被系统识别。注意lspci可能需要先安装pciutils包。

Ubuntu下安装NVIDIA驱动,最推荐的方式是:

sudo apt update sudo apt install nvidia-driver-535 sudo reboot

装完重启后执行nvidia-smi验证。也有很多人喜欢从NVIDIA官网下载.run驱动手动装,但手动装的坑极多:因内核版本和GCC版本不匹配导致编译失败,开普勒和英伟达新驱动版本不兼容,把系统搞到图形界面起不来的案例数不胜数。我的建议是,能走apt就走apt,简单、稳、卸得干净,手动方式留给有特殊需求的人。

顺手提一句,查看系统时间是否跟服务器同步,用timedatectl。输出里有NTP synchronized: yes/no字段,如果显示no,执行:

sudo timedatectl set-ntp true sudo systemctl restart systemd-timesyncd

时间不同步对日志排障和定时任务影响极大,我遇到过线上证书突然"失效"的问题,排查了半天发现是服务器时间慢了两分钟,硬生生错过证书有效期窗口。

4. 软件安装与包管理:apt这套组合拳

Ubuntu的软件管理核心就是apt。很多Windows转过来的用户一开始不太习惯"软件不是双击安装"这件事,但apt这套包管理机制的逻辑性其实更强:软件包依赖关系由系统自动处理,安装、升级、卸载都有统一接口。搞懂apt的几个核心命令,基本就能应付90%的软件需求。

4.1 apt update、install、remove的完整链路

apt最常用的命令组是:

sudo apt update sudo apt upgrade sudo apt install 包名 sudo apt remove 包名 sudo apt purge 包名 sudo apt autoremove sudo apt search 关键词

apt update是从软件源更新软件列表,它本身不装任何软件,但如果没有这一步,install的时候搜不到最新软件包。upgrade才是真正升级已安装的软件。这两者的关系,很多新人都搞混,其实记住一句话就行:update先刷新索引,upgrade再执行升级。

apt install能自动处理依赖,你装一个软件它会自动把依赖库一起装好。remove卸载软件但保留配置文件,purge连配置文件一起删干净。autoremove清理那些没用的自动安装依赖,时间久了能释放不少空间。

安装完成后,如果想看某个软件能提供哪些文件,用:

dpkg -L 包名

比如dpkg -L nginx会列出nginx安装后所有的文件路径。排查"配置文件在哪"这个问题时,这条命令比到处翻目录高效多了。

4.2 安装编译工具链:GCC失败的经典解法

装GCC是Linux入门者的必经之路,但很多人都会遇到安装失败的情况。最常见的失败场景是:

sudo apt install build-essential

然后终端输出一长串依赖错误,或者提示Unable to locate package build-essential。前一种情况基本是软件源列表没更新:

sudo apt update sudo apt install build-essential

如果update之后还是提示找不到包,检查一下软件源配置文件/etc/apt/sources.list,确认源地址没写错。我遇到过源被改成了无效地址,update时一堆404错误,改了源马上就好了。

更复杂的一种失败是"依赖关系炸了":

sudo apt --fix-broken install sudo dpkg --configure -a

这类情况通常是之前某个安装中断导致的,--fix-broken尝试修复破损的依赖,dpkg --configure -a重新配置所有未完成的安装。执行完再跑一次apt install基本能解决。如果还不行,检查是否安装了不该装的第三方源软件包,用apt remove卸了再装。

验证GCC安装成功:

gcc --version grep --version

能正常输出版本号,说明编译链可用。我个人的习惯是装完build-essential后立刻顺手装make、cmake、git,后面写代码、拉项目、编译第三方库都用得上,省得每次缺什么都现装。

4.3 中文输入法和常用软件的安装思路

中文输入法这个事,前面提过一嘴,这里展开说说。Ubuntu桌面版不自带拼音输入法,需要手动加。最省心的是先把语言包补上:

sudo apt install language-pack-zh-hans

然后设置里添加输入源就行。如果你更喜欢搜狗输入法,流程是:先装fcitx框架,再下载搜狗Linux版deb包,sudo dpkg -i 文件名.deb安装,最后用im-config -n fcitx切换。但这里有个大坑:搜狗输入法的安装包对Ubuntu 24.04这种新版本的兼容性不一定好,装上之后可能无法启动图形界面输入,我在24.04上就吃过这个亏。当时我卸载搜狗、把输入法框架切回iBus,重新添加拼音源,才恢复正常。

Ubuntu生态里还有很多软件需求,比如微信、同花顺这类国产软件。微信有Linux官方版,直接在官网下载deb包安装,用起来基本功能没问题。同花顺也有Linux版,但体验和Windows版有差距,如果只是看行情,浏览器走网页版也够用。至于Windows独占的软件,想跑起来只能靠Wine,但Wine的兼容性实在一言难尽,装个简单的小工具还行,大型软件就别指望了。我的建议是:日常主力软件尽量找原生Linux版,找不着就用网页版或虚拟机兜底,别在Wine上浪费时间。

还有一个软件安装的热门场景是Docker。现在很多项目都容器化了,Ubuntu下装Docker官方推荐用社区版源:

sudo apt update sudo apt install ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

这一串命令就是先把Docker官方源加进去,再导入GPG密钥,然后apt install docker-ce docker-ce-cli containerd.io。装完用systemctl status docker确认服务状态,再跑一个docker run hello-world验证。Docker的安装命令有点多,我一般直接复制官方文档的步骤,但加源时确实要确认Ubuntu版本代号要和源对应上,不然404报错。

5. 网络配置与远程连接:SSH上不去的自救流程

Linux服务器几乎都是拿SSH远程管理的,网络配置和SSH掉线是日常最头疼的问题之一。很多新手第一次接触云服务器或虚拟机时,配置完网络发现SSH连不上,第一反应是重装系统,其实大多数问题都能靠几条命令定位出来。

5.1 查IP和网关的基本命令

查看当前系统IP和网络状态:

ip addr ip route ip link

ip addr查看所有网络接口的IP地址,重点看ens33或eth0这类接口下的inet字段。ip route看默认路由,默认网关就在default via后面。ip link查看接口状态,UP表示接口已启用,DOWN则说明网络接口被关闭了。

老牌的ifconfig现在很多系统已经不默认安装了,需要额外装net-tools才有。我个人的习惯是用ip命令,输出更清晰,而且新系统都自带。

测试网络连通性:

ping -c 3 baidu.com

注意ping不能无限制地跑,-c 3限制次数。如果域名不通但IP通,说明DNS解析出问题,检查/etc/resolv.conf里的nameserver配置。

DNS查询工具dig和nslookup也很好用,但有些系统不自带,需要apt install dnsutils。排查域名解析问题、确认解析记录生效,应该优先用它们。

5.2 SSH无法连接的排查思路

SSH连不上是Linux日常报障中最常见的场景。我的排查顺序是固定的:

第一步,看服务端有没有开SSH服务。

sudo systemctl status ssh

如果显示inactive (dead),先启动:

sudo systemctl start ssh sudo systemctl enable ssh

第二步,确认端口和防火墙状态。

sudo ss -tlnp | grep 22 sudo ufw status

ss显示监听端口,如果22端口没监听,说明服务没起来或被改到别的端口。ufw status是Ubuntu自带的防火墙管理工具,如果显示active,需要放行22端口:

sudo ufw allow 22/tcp

第三步,检查SSH配置文件。/etc/ssh/sshd_config里的Port字段是否改成了非22端口、PermitRootLogin是否设置为prohibit-password等。改完配置要重启服务:

sudo systemctl restart ssh

还有一种常见情况是云服务器的安全组规则没放行22端口,这个就要去云厂商控制台排查,终端里看不到问题。我遇到过虚拟机怎么都连不上,最后发现是宿主机的安全组忘了配入站规则,这种情况终端命令帮不了忙,只能去控制台改。

排查完上面这些,八成问题都能定位。很多人一SSH失败就重装系统,其实多数情况就是服务没启动或者防火墙拦了,十几秒就能修好。

5.3 系统时间和网络时间同步那点事

日志同步和定时任务依赖正确的时间,时间错乱会导致各种诡异现象。查看当前时间和时区:

date timedatectl

timedatectl输出里看Time zone和NTP synchronized两项。时间不对时,先执行:

sudo timedatectl set-timezone Asia/Shanghai sudo timedatectl set-ntp true sudo systemctl restart systemd-timesyncd

设置完再用date验证。时间同步这块还有个小技巧:排查问题时要养成看服务器时间的习惯,我几次排查线上故障,最终根因都是服务器时间偏了好几秒,导致证书校验不过、日志时间对不上号。把时间同步做好,这些问题可以在源头避免。

6. 用户、权限与安全:sudo不是万能钥匙

Linux是多用户系统,用户和权限管理是系统安全的基础。很多新人都习惯sudo一把梭,所有操作都用管理员身份执行,短时间内很爽,但带来的隐患很明显:误删系统文件、修改错误配置、日志审计无从下手。真正的老手会主动管理用户、按需分配权限,sudo只在必要时刻才用。

6.1 用户管理和切换

创建新用户:

sudo adduser zhangsan

adduser是交互式向导,自动创建家目录、设置密码、填写用户信息,比useradd这种底层命令更适合日常使用。还有一种情况是创建系统用户用于运行服务:

sudo useradd -r -s /usr/sbin/nologin appuser

-r创建系统用户,-s指定登录Shell为nologin,禁止这个用户登录终端,是服务运行账号的标准做法。

切换用户:

su - zhangsan

su -后面加横线会加载目标用户的环境变量并切换到其家目录,不加横线则保留当前环境。这两者的区别是初学者容易混的点,但实际影响很大。还有一种切换用户执行单条命令的方式:

sudo -u zhangsan whoami

sudo -u指定以某个用户身份执行命令,不切换登录会话。写脚本时需要在不同用户权限下执行操作,这个命令是利器。

sudo的权限配置在/etc/sudoers里,改动时必须用visudo命令打开编辑器,因为它会做语法检查,坏掉的文件会导致所有sudo操作失效。给用户添加管理员权限,在sudoers文件里加一行:

zhangsan ALL=(ALL:ALL) ALL

不过我更推荐把用户加入sudo组:

sudo usermod -aG sudo zhangsan

这样zhangsan自动获得sudo权限,省得手动改配置文件。

6.2 chmod和chown:权限改错了会出大事

Linux的权限模型用三组rwx表示属主、属组、其他人的读、写、执行权限。查看权限用ls -l,第一列类似drwxr-xr-x,d表示目录,后面九个字符是三组权限。

修改权限的基本操作:

chmod 755 script.sh chmod +x tool.sh chmod -R 777 /var/www/html/

数字法里,r=4,w=2,x=1。755表示属主可读写执行、属组和其他人可读可执行,是常见的可执行文件权限。chmod +x是给文件添加执行权限。-R递归应用于目录下所有文件。

777权限是最容易被新手拿来"解决问题"的万能药,把目录改成777,写入报错立刻消失。但这个习惯非常危险,任何用户都可以修改目录内容,等于把系统敞开给所有人。我见过一台测试服务器上,网站目录被改成777,被人拿webshell直接上传了恶意文件。正确的解法是搞清楚哪些用户需要什么权限,然后精准分配。比如Nginx需要读取网站目录,那就chown -R www-data:www-data /var/www,然后目录权限755、文件权限644,这才是合理的配置。

修改属主和属组:

chown -R zhangsan:zhangsan /home/zhangsan/project

chown第一个zhangsan是属主,第二个zhangsan是属组。Recursive操作时-R必加,不然只改顶层目录。这个命令在编译源码时尤其常用:源码目录属主如果不是当前用户,编译生成的文件会写不进去,执行前先把整个目录chown给当前用户,能省去大量权限报错。

一个常见的坑是:用户明明有权限,但操作还是提示Permission denied,原因可能是SElinux在捣乱,也可能是文件在挂载的特殊文件系统上(比如NTFS分区默认权限受限)。这时候先mount | grep 挂载点看看有没有noexec或user选项,再考虑权限本身的问题。

6.3 忘记密码后的恢复套路

忘记登录密码是每个Linux用户都会遇到的时刻。Windows忘记密码重装系统,Linux有更优雅的恢复办法。

Ubuntu系统在GRUB启动界面时,选择要启动的内核,按e进入编辑模式,找到以linux开头的那一行,在末尾加上:

init=/bin/bash

然后按Ctrl+X或F10启动,系统会直接进入root的bash,不用密码。接下来重新挂载根文件系统为读写模式:

mount -o remount,rw / passwd username

输入两次新密码,然后重启系统即可。实测在Ubuntu 24.04上用这个方法恢复密码完全可行。但要注意的是,如果磁盘是全盘加密的(LUKS),没密码进不了解密环节,这个方法就没用。这种时候只能靠备份密钥或者重装了。

这个恢复方式也暴露了一个安全问题:任何能物理接触到机器的人,按下e就能改内核启动参数进入root。所以生产服务器一定要设置BIOS/UEFI密码,并且开启GRUB密码保护(用grub-mkpasswd-pbkdf2生成加密密码,写入/etc/grub.d/40_custom配置)。日常使用中,倒是没必要过度恐惧,但意识到"物理接触=完全控制"这一点很重要。

7. 进程、服务与系统日志:系统出问题就看这里

服务器变慢、服务崩溃、程序异常退出,这些都是Linux运维的高频故障。处理这些问题靠的就是进程管理、服务管理和日志排查这三板斧。把这三块命令用熟,很多疑难杂症都能快速定位。

7.1 进程查看和终结

查看进程最常用的命令是ps:

ps aux ps -ef ps aux | grep nginx

ps aux会以用户格式显示所有进程,包含CPU、内存占用和启动命令。ps -ef显示所有进程的完整信息,配合grep过滤是定位特定进程的标准组合拳。这里我要特别强调管道符|的作用:把左边命令的输出当作右边命令的输入。ps aux | grep nginx就是把进程列表交给grep筛选出nginx相关的行。这是Linux命令操作的基本功,后面所有命令的组合都离不开它。

动态查看进程状态用top,实时刷新CPU和内存占用。top里还支持按P按CPU排序、按M按内存排序,直接找出"谁在吃资源"。不过更推荐的现代工具是htop,显示效果更友好,支持鼠标操作和树状进程关系,没装的话sudo apt install htop装一下。

终止进程用kill:

kill PID kill -9 PID pkill -f 进程名

kill默认发送TERM信号,请求进程正常退出;kill -9发送KILL信号,强制杀死进程。先尝试TERM,不行再KILL,这是标准操作顺序。pkill -f nginx按进程名匹配杀掉所有相关进程,批量操作时很省事。但pkill -f有个风险:匹配的是一整条命令行,如果误匹配到无关进程就麻烦了。我在生产环境从来都是先用ps aux | grep确定PID,再kill PID,宁可多敲几条命令,也不冒误杀的风险。

7.2 systemctl管理服务

现代Ubuntu的服务管理已经全面转向systemd,日常操作命令是systemctl:

sudo systemctl start 服务名 sudo systemctl stop 服务名 sudo systemctl restart 服务名 sudo systemctl status 服务名 sudo systemctl enable 服务名 sudo systemctl disable 服务名

start和stop是启停,restart重启,但status才是排障时最重要的入口,它会显示服务当前状态、最近日志和进程PID。服务启动失败时,第一件事永远是systemctl status,它会提示你错误原因,大多数人忽略了这个关键信息。

enable设置开机自启,disable取消开机自启。我经常遇到的问题是:服务手动启动没问题,重启机器后服务没了,这就是因为漏了enable。记住一句话,start只管当前,enable管的是以后每次开机。

查看所有运行中的服务:

systemctl list-units --type=service --state=running

这个命令能快速看到机器上到底跑了哪些服务,排查"多出来的进程"是什么时候启动的非常有用。

7.3 日志排障的关键命令

日志是排障的最终依据。Ubuntu的日志主要走journald,同时很多服务也会把日志写到/var/log/目录。

查看系统日志:

sudo journalctl -xe sudo journalctl -u nginx.service sudo journalctl -u nginx.service -f sudo journalctl --since "1 hour ago"

-xe是"最近错误并解释"的组合参数,故障发生时先跑它,能直接看到最近的错误日志。-u指定服务查看单个服务的日志,-f是实时跟踪模式,服务启动卡住时开一个终端挂着看日志、开另一个终端操作服务,非常实用。--since按时间范围过滤日志,排查半夜发生的崩溃,用journalctl --since "2024-11-20 02:00:00" --until "2024-11-20 03:00:00"这种写法很高效。

传统日志文件也值得留意:

tail -f /var/log/syslog tail -n 50 /var/log/syslog grep "error" /var/log/syslog

/var/log/syslog是系统级日志,所有程序的消息都会写进去。/var/log/auth.log记录登录认证事件,排查暴力破解和登录异常时必看。tail -f实时跟踪日志输出,是"边操作边看日志"的核心工具。

日志排障有个很重要的经验:遇到问题时先看journalctl -xe,这个命令会给出错误提示,然后顺着提示去找对应服务的日志,通常不用十分钟就能定位根因。有一次我排查一个数据库无法启动的问题,journalctl -u mysql提示磁盘空间不足,df -h一看确实满了,清理日志后数据库立刻恢复正常。整个过程一分钟都没花到。

8. 文本处理与脚本化:从当面敲到批量跑

Linux的另一个核心能力是文本处理。日志分析、配置修改、数据提取,全都离不开文本处理三剑客:grep、sed、awk。再进一步,把常用命令写成脚本,一键执行,效率又上升一个台阶。这块内容对于入门者来说可能稍微有点门槛,但学下来的回报非常可观。

8.1 grep:在命令行里找线索

grep在文件里搜索匹配文本,是日志分析的基础工具。常用写法:

grep "error" /var/log/syslog grep -i "error" /var/log/syslog # 忽略大小写 grep -rn "listen 80" /etc/nginx/ # 递归搜索目录 grep -v "^#" /etc/ssh/sshd_config # 排除空行和注释 grep -E "error|warning" /var/log/syslog # 正则匹配多个词

-r递归搜索目录,-n显示行号,-i忽略大小写,-v反选,-E启用扩展正则。组合起来能实现很强大的搜索。排查日志时,grep -i error是第一步操作。

grep配合管道使用场景极多,比如:

ps aux | grep python journalctl -u nginx | grep "error" history | grep apt

从进程列表里找python进程、从nginx日志里筛错误、在命令历史里回溯之前的操作,全是靠这种组合完成的。可以说grep和管道符是Linux命令操作的双轮,缺一个都不转。

8.2 sed和awk:处理文本的顺手工具

sed被称为流编辑器,用来替换和修改文本。最经典的用法是替换:

sed -i 's/old/new/g' file.txt

-i是直接修改原文件,s/是替换命令,g是全局替换。修改配置文件、批量替换代码里的版本号,它都是首选工具。但-i误用会把文件改坏,所以我的习惯是先不加-i跑一遍看输出结果,确认无误再加-i真正修改。这个教训是被一次删掉配置文件关键内容逼出来的,从那以后每次都"先看后改"。

awk是文本分析和数据处理工具。最常用的场景是按列提取:

awk '{print $1}' access.log awk '{print $2, $4}' access.log awk -F ":" '{print $1}' /etc/passwd

默认按空白分隔,$1是第一列,$2是第二列,-F指定分隔符。从日志里提取IP、从/etc/passwd里提取用户名,都是awk的经典应用。awk还能配合条件过滤:

awk '$9 >= 500 {print $1, $9}' access.log

找出HTTP状态码大于等于500的请求对应的IP和状态码,这在分析访问日志、定位异常请求时非常好用。虽然awk的完整语法很复杂,但入门阶段掌握"按列提取+条件过滤"这两个能力就够用。

8.3 把常用命令写成脚本

当命令敲多了,就会发现很多组合是固定重复的。把这些组合写进脚本,一条命令就能完成一堆工作。最简单的脚本就是一个可执行文件,里面放一组命令。写个清理临时文件的脚本:

#!/bin/bash # 清理超过7天的临时文件 TMP_DIR="/tmp/cleanup" find "$TMP_DIR" -type f -mtime +7 -delete echo "清理完成: $(date '+%Y-%m-%d %H:%M:%S')"

第一行#!/bin/bash是shebang,指定解释器;注释以#开头;$()是命令替换,把date的输出放到echo里。写完脚本后赋予执行权限:

chmod +x cleanup.sh ./cleanup.sh

执行脚本直接./cleanup.sh。如果脚本在PATH里,也可以直接输名字运行。代码风格上,变量加双引号是必须的,防止路径带空格时出问题。

脚本里还会用到几个逻辑控制结构。if判断:

if [ -f "/etc/nginx/nginx.conf" ]; then echo "配置文件存在" else echo "配置文件不存在" fi

for循环:

for user in zhangsan lisi wangwu; do sudo useradd "$user" echo "用户 $user 已创建" done

这些结构的语法细节记不住没关系,网上资料很多,但写多了自然就熟练了。我最常写的就是备份脚本和日志清理脚本,把原来手动敲5分钟的操作变成一行./backup.sh,效果立竿见影。

另外一个建议是,写下脚本前先手动敲一遍命令确保正确,再用history把命令捞出来整理成脚本。这样做能减少大量试错。

9. 常见问题速查:这些都是我踩过的坑

这一节是给所有看完前面内容的读者准备的一份速查表。问题都来自真实使用场景,把现象、命令和解决思路放在一起,用到的时候查起来方便。我挑的是出现频率最高、最典型的一批。

问题现象排查命令解决思路
apt安装软件报依赖错误sudo apt --fix-broken install先修复依赖,再dpkg --configure -a重配未完成安装
安装gcc提示找不到包cat /etc/apt/sources.list先apt update刷新索引,确认源地址正确且未失效
SSH连不上,卡在超时systemctl status ssh、ss -tlnp | grep 22确认sshd运行、22端口监听、防火墙和云安全组放行
磁盘满导致服务写入失败df -h、du -sh /var/log定位大目录,清日志或迁移数据,启用日志轮转
PATH配置错误导致命令找不到/usr/bin/ls、export PATH=/usr/bin:/bin用绝对路径恢复正常操作,重新修正环境变量配置
忘记登录密码GRUB编辑加init=/bin/bash进入单用户模式重新passwd
中文输入法切不出来im-config -n fcitx检查输入法框架切换,注销重登,必要时删配置重新配置
系统时间偏差大timedatectl开启NTP自动同步,重置时区
显卡驱动不生效nvidia-smi、lspci | grep -i nvidiaapt安装对应版本驱动,重启,避免手动.run包踩坑
服务开机不自启systemctl enable 服务名启停只对当前会话生效,enable才是设开机自启

还有一个容易忽略的点,就是环境变量配置错误会导致终端命令大面积失效。PATH这个东西如果写错了,比如export PATH=/wrong/path,连ls、sudo都会变成command not found。遇到这种情况先别慌,用绝对路径修复:

/usr/bin/export PATH=/usr/bin:/bin:/usr/sbin:/sbin

然后把错误配置从~/.bashrc或/etc/environment里改回来。这种问题看似吓人,其实修复方式很简单,真正难的是要意识到"可以用绝对路径绕开PATH问题"。

虚拟机安装Linux蓝屏这个问题,我也被问过很多次。点开虚拟机设置,把内存加到4GB以上,关闭3D加速,关闭嵌套虚拟化以外的奇怪选项,再把系统镜像重新校验一下MD5,绝大多数蓝屏都能解决。装的时候记得用官方镜像,别用网上来路不明的精简版,精简版镜像缺什么组件不好说,出了问题很难排查。

Ubuntu下查看系统架构这个需求,其实用uname -m一行就搞定了。但很多人会把它和"查看CPU型号"混淆,查看CPU详细信息用lscpu,里面Model name、Architecture写得清清楚楚。这两个命令各管各的,别搞混。

配套参考站点方面,我常用的有:Ask Ubuntu(英文问答社区)、Ubuntu官方文档、Linux命令大全网站、以及各类个人博客。遇到问题时先自己想清楚描述,再去搜,效率最高。另外,man命令本身就是最好的帮助文档:man ls会输出ls的所有参数解释,信息最权威也最完整。所有"看到命令不会用"的瞬间,第一选择都应该是man而不是打开浏览器搜索。

最后再分享一个个人习惯:我在终端里敲命令的时候,从不盲目复制网上的长命令,尤其涉及rm -rf、curl ... | bash这类危险操作时,会先拆开看每一段在干什么。这个习惯帮我在各种"一键脚本"遍布的年代避免了好几次灾难。Linux的可爱之处就在于,它给你绝对的自由,同时也要求你为自己的每一个操作负责。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询