DevOps 入门系列 :Linux 基础 —— 你每天都会用到的服务器操作

无需 Linux 前置经验,学习完成后可掌握:

  1. 理解 Linux 系统定位、文件系统架构

  2. 熟练使用高频基础命令,完成文件/目录日常操作

  3. 掌握用户、权限、进程、端口、服务、磁盘、日志的基础管理能力


一、什么是 Linux?为什么 DevOps 必须会它?

1.1 Linux 是什么?

Linux 本质是操作系统内核(操作系统核心组件),和 Windows、macOS 属于同类型产品。

日常工作中提到的「Linux」,一般指 Linux 发行版,例如 Ubuntu、CentOS、Debian、Red Hat。发行版在内核基础上整合了各类应用软件,构成一套完整可直接使用的操作系统。

1.2 互联网服务器首选 Linux 的原因

  • 免费:无需支付商业授权费用

  • 稳定:可连续运行数年无需重启

  • 安全:权限体系严格,官方漏洞修复响应快

  • 轻量:极低硬件资源即可正常运行(数百 MB 内存即可)

  • 开源:内核代码开放,可按需定制(常规运维无需修改)

互联网后端服务、网站、数据库、中间件几乎全部部署在 Linux 服务器。DevOps 日常需要远程登录服务器、排查日志、监控资源、发布项目,因此 Linux 命令是必备技能。

1.3 搭建 Linux 学习环境(任选其一)

  1. 虚拟机:VirtualBox + Ubuntu 镜像

  2. Windows 内置:WSL(Windows 适用于 Linux 的子系统)

  3. 云服务器:阿里云、腾讯云等平台免费试用机型

  4. Mac 终端:大部分命令与 Linux 通用

本文示例环境统一使用 Ubuntu


二、文件系统:Linux 文件组织规则

2.1 树形目录结构

Linux 没有 Windows 的 C 盘、D 盘分区概念,整套文件体系是唯一树形结构,树根为 /(根目录),所有文件、目录都挂载在根目录下。

基础目录示例:

  • /:根目录,整个文件系统起点

  • /home:所有普通用户家目录统一存放位置

  • /home/zhangsan:用户 zhangsan 的个人家目录,可简写为 ~

2.2 绝对路径与相对路径

  1. 绝对路径:以根目录 / 开头,全路径唯一,无论当前在哪个目录,指向位置不变。
    示例:/home/devops/file.txt

  2. 相对路径:基于当前所在目录定位文件

    • \. 代表当前目录

    • \.\. 代表上一级目录
      示例:当前在 /home/devops\.\./alice/file.txt 等价于 /home/alice/file.txt

2.3 核心目录速查表

日常运维高频目录,无需死记,使用时查阅即可:

目录用途说明
/根目录,所有目录的起点
/home普通用户家目录(例:/home/zhangsan
/rootroot 超级管理员用户的家目录
/etc系统、应用配置文件目录(Nginx、MySQL 配置均在此)
/var动态变化数据目录(日志、缓存、邮件等)
/tmp临时文件目录,系统重启后内容大概率清空
/usr系统预装/用户安装程序、依赖库(类似 Windows 的 Program Files)
/bin/sbin系统基础命令存放目录(ls、cp、mv 等)

三、最常用 Linux 基础命令(详解+示例)

3.1 pwd — 查看当前所在目录

作用:Print Working Directory,打印当前工作目录路径
使用场景:不清楚自己当前处于哪个文件夹

pwd
# 输出示例:/home/devops

3.2 ls — 列出目录内容

作用:List,查看当前目录下的文件、子目录
常用参数

  • ls:简单展示文件/目录名

  • ls -l:详细展示(权限、大小、修改时间、所属用户)

  • ls -a:展示所有文件,包含 \. 开头的隐藏文件

  • ls -la:组合参数,运维最常用

# 查看 /home 目录详细内容
ls -la /home

3.3 cd — 切换工作目录

作用:Change Directory,跳转目录

# 绝对路径跳转
cd /etc/nginx

# 回到上一级目录
cd ..

# 回到当前用户的家目录
cd ~

# 回到上一次所在的目录(快速切换)
cd -

3.4 mkdir — 创建目录

作用:Make Directory,新建文件夹
核心参数\-p 递归创建多级目录(父目录不存在时自动创建)

# 创建单个目录
mkdir my_folder

# 递归创建多级目录 project/src/css
mkdir -p project/src/css

3.5 touch — 创建空文件 / 更新文件时间戳

作用:文件不存在则创建空文件;文件已存在则更新文件修改时间为当前时间
使用场景:快速新建空白配置文件、脚本文件

touch config.ini

3.6 cp — 复制文件/目录

作用:Copy,复制文件或文件夹
核心参数-r 递归复制目录(复制文件夹必须加此参数)

# 复制文件 file1.txt 为 file2.txt
cp file1.txt file2.txt

# 递归复制整个目录 mydir 到 newdir
cp -r mydir/ newdir/

3.7 mv — 移动文件 / 重命名

作用:Move,同一目录下使用为重命名,跨目录使用为移动文件

# 重命名:oldname.txt → newname.txt
mv oldname.txt newname.txt

# 移动文件到 /tmp 临时目录
mv file.txt /tmp/

3.8 rm — 删除文件/目录

作用:Remove,删除文件或目录

⚠️ 重要提醒:Linux 无回收站,删除后数据极难恢复,操作务必谨慎!

# 删除单个文件
rm file.txt

# 递归删除目录及内部所有内容(交互式询问)
rm -r mydir/

# 强制删除(不询问、直接删除),高危命令,谨慎使用
rm -rf mydir/

3.9 cat / less / head / tail — 查看文件内容

四类命令分工不同,根据文件大小、使用场景选择:

  • cat:一次性输出全部内容,适合小文件

  • less:分页查看,适合大文件(空格翻页,q 退出)

  • head:查看文件开头内容

  • tail:查看文件末尾内容,tail -f实时跟踪日志(运维核心用法)

# 查看系统版本文件
cat /etc/os-release

# 分页查看系统日志
less /var/log/syslog

# 查看文件前 10 行
head -10 /var/log/syslog

# 查看文件最后 20 行
tail -n 20 /var/log/syslog

# 实时跟踪 Nginx 访问日志(日志新增内容会实时输出)
tail -f /var/log/nginx/access.log

3.10 grep — 文本搜索/内容筛选

(重要!!!shell脚本中常用)

作用:Global Regular Expression Print,在文件/输出流中匹配指定关键词
使用场景:筛选日志错误信息、查找配置文件中的指定内容

# 在 Nginx 错误日志中搜索 error 关键词
grep "error" /var/log/nginx/error.log

# 递归搜索 /etc/nginx 目录下所有包含 localhost 的文件
grep -r "localhost" /etc/nginx/

3.11 man — 查看命令帮助手册

作用:Manual,查看命令官方详细文档(英文),q 退出手册页面
使用场景:忘记命令参数、需要查询命令完整用法

# 查看 ls 命令完整手册
man ls

四、文件权限:Linux 安全核心机制

4.1 权限的作用

Linux 是多用户操作系统,服务器会多人共用。权限体系用于:

  1. 隔离用户文件,禁止他人随意查看、修改

  2. 保护系统核心文件,防止误删、篡改

  3. 限制配置文件的编辑权限,仅管理员可修改

4.2 查看权限信息

执行 ls -l 可查看文件完整权限,示例输出:

-rwxr-xr-- 1 alice devops 1234 Mar 10 10:00 script.sh

权限字段拆解(首位 + 三组权限位):

  1. 第一个字符:文件类型

    • -:普通文件

    • d:目录

  2. 后续 9 个字符分为 3 组,每组 3 位:

    • 第 2~4 位:文件属主(所有者) 权限

    • 第 5~7 位:所属用户组 权限

    • 第 8~10 位:其他所有用户 权限

  3. 单字符含义:

    • r:可读

    • w:可写

    • x:可执行(目录需要 x 权限才能进入)

    • -:无对应权限

示例解析 rwxr-xr--

  • 属主:rwx → 可读、可写、可执行

  • 属组:r-x → 可读、不可写、可执行

  • 其他人:r-- → 可读、不可写、不可执行

4.3 chmod — 数字方式修改权限

权限可换算为数字:r=4w=2x=1,每组权限数值相加得到最终权限码。

数字权限组合说明
74+2+1 = rwx可读、可写、可执行
64+2 = rw-可读、可写、不可执行
54+1 = r-x可读、不可写、可执行
44 = r--仅可读
00 = ---无任何权限

chmod 后跟 三位数字,依次对应:属主、属组、其他用户。

# 属主:rwx,属组:r-x,其他人:r-x
chmod 755 script.sh

# 仅文件所有者可读写,其他用户无任何权限(密钥、私密配置常用)
chmod 600 secret.key

# 仅所有者可进入目录、操作目录内容
chmod 700 private_dir

4.4 chown — 修改文件属主/属组

用于变更文件的所有者和所属用户组,一般需要管理员权限:

# 将 file.txt 属主改为 alice
sudo chown alice file.txt

# 将 file.txt 属组改为 devops
sudo chown :devops file.txt

# 将 file.txt 属主改为 alice,属组改为 devops
sudo chown alice:devops file.txt

五、用户和组:服务器账号管理

5.1 用户分类

  1. root 超级管理员:UID=0,拥有系统最高权限,可执行所有操作。日常禁止直接登录 root,仅紧急场景使用。

  2. 普通用户:手动创建的业务用户,权限受限,日常运维主力账号。

  3. 系统用户:后台服务专属用户(如 www-data、mysql),仅运行进程,不允许登录系统。

5.2 常用用户管理命令

# 创建普通用户 zhangsan
# -m:自动创建家目录 /home/zhangsan
# -s:指定登录终端 shell
sudo useradd -m -s /bin/bash zhangsan

# 为用户设置登录密码
sudo passwd zhangsan

# 切换到 zhangsan 用户(加载用户环境变量)
su - zhangsan

# 退出当前用户,返回上一级账号
exit

# 查看当前登录的用户名
whoami

5.3 sudo 提权

sudo 允许普通用户临时借用 root 权限执行单条命令,前提是该用户已加入 sudo 权限组。
执行时需要输入当前普通用户密码

# 以管理员权限更新软件源
sudo apt update

六、进程管理:监控运行中的程序

6.1 进程概念

程序运行后就会转化为进程,系统会为每个进程分配唯一 PID(进程 ID),操作系统通过 PID 管理进程。
通俗理解:进程 = 服务器上正在运行的「任务」(Nginx、MySQL、脚本等)。

6.2 查看进程:ps / top

ps:静态查看进程快照
# 查看系统所有进程详细信息
# a:所有用户进程  u:展示详情  x:展示后台无终端进程
ps aux

# 筛选出 Nginx 相关进程(管道 + grep 组合,运维高频用法)
ps aux | grep nginx
top / htop:动态监控进程
# 实时刷新进程状态(CPU、内存占用排序),按 q 退出
top

# 界面更友好的增强版 top(需手动安装)
htop

6.3 kill — 终止进程

根据场景区分两种终止方式,优先使用普通 kill

# 优雅终止进程(PID 为示例值)
# 发送关闭信号,进程可保存数据、释放资源后正常退出
kill 1234

# 强制杀死进程(不推荐常规使用)
# 直接强制终止,进程无清理时间,可能造成数据损坏、服务异常
kill -9 1234

6.4 ss — 查看端口监听

作用:Socket Statistics,查看服务器端口占用、服务监听状态,排查端口冲突、外网访问问题。

# 查看 TCP/UDP 监听端口、占用进程
# -t:TCP 端口  -u:UDP 端口  -l:仅监听端口  -n:纯数字端口  -p:显示进程
sudo ss -tulnp

输出解读示例:

LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=789,fd=3))
  • 含义:SSH 服务(sshd)监听 22 端口,0\.0\.0\.0 代表允许所有网络地址访问

  • 补充:127\.0\.0\.1:3306 代表仅本机可访问,外网无法连接(数据库默认配置)


七、systemd 服务管理:后台服务管控

7.1 systemd 介绍

systemd 是现代 Linux 主流初始化系统,相当于服务器「服务管家」,核心能力:

  1. 系统开机时按顺序启动各类后台服务

  2. 运行中监控服务状态,支持异常自动重启

  3. 提供统一命令实现服务启动、停止、日志查看

主流发行版(Ubuntu、CentOS 7+、Debian)均默认使用 systemd。

7.2 systemctl — 服务管理核心命令

# 查看服务运行状态(是否启动、开机自启、PID、日志简要)
systemctl status nginx

# 启动服务
sudo systemctl start nginx

# 停止服务
sudo systemctl stop nginx

# 重启服务(先停止再启动,会断开现有连接)
sudo systemctl restart nginx

# 重载配置(不中断连接,仅加载新配置,优先使用)
sudo systemctl reload nginx

# 设置服务开机自启
sudo systemctl enable nginx

# 取消服务开机自启
sudo systemctl disable nginx

# 查看系统所有已加载的服务
systemctl list-units --type=service

说明:只有注册为 systemd 单元的程序(存放在 /etc/systemd/system//lib/systemd/system/)才能用 systemctl 管理,Nginx、MySQL、Docker 等常用服务均已内置配置。

7.3 journalctl — 查看服务日志

systemd 统一收集所有服务日志,使用 journalctl 查看:

# 查看 Nginx 完整运行日志
sudo journalctl -u nginx

# 实时跟踪 Nginx 日志(等同于 tail -f)
sudo journalctl -u nginx -f

# 仅查看今日 Nginx 日志
sudo journalctl -u nginx --since today

# 查看系统内核日志
journalctl -k

八、磁盘与日志:存储空间运维

8.1 磁盘与挂载

Linux 会将物理磁盘划分为多个分区,再把分区挂载到指定目录,目录即为分区的访问入口。
示例:

  • 磁盘分区 /dev/sda1 挂载到根目录 /

  • 磁盘分区 /dev/sda2 挂载到 /home

日常需要监控磁盘使用率,避免磁盘写满导致服务宕机。

8.2 df — 查看全局磁盘使用率

# -h:人性化单位展示(GB/MB),查看所有挂载分区空间
df -h

输出解读:展示每个分区总大小、已用空间、剩余空间、使用率、挂载目录。

8.3 du — 查看目录/文件占用空间

用于定位大文件、大目录,排查磁盘占用过高问题:

# 查看 /var/log 目录总占用大小
# -s:仅统计总和  -h:人性化单位
du -sh /var/log

# 排序查看 /var 下所有子目录大小,快速定位大文件夹
sudo du -sh /var/* | sort -h

8.4 系统日志说明

日志是应用/系统的运行记录,服务报错、异常排查优先查看日志。

常用日志路径(Ubuntu)
  • /var/log/syslog:系统综合日志

  • /var/log/nginx/access\.log:Nginx 访问请求日志

  • /var/log/nginx/error\.log:Nginx 错误日志

  • /var/log/mysql/error\.log:MySQL 数据库错误日志

日志查看常用组合
# 查看日志最后 50 行
tail -50 /var/log/syslog

# 实时跟踪日志输出
tail -f /var/log/syslog

# 筛选日志中的错误关键词
grep "ERROR" /var/log/nginx/error.log

8.5 logrotate 日志轮转

日志会持续增长,长期运行会占用大量磁盘空间。Linux 内置 logrotate 机制:

  • 自动分割、压缩、归档旧日志

  • 限制日志保留份数,避免磁盘被日志撑满
    运维一般无需手动配置,了解其作用即可。


九、包管理:在线安装软件

9.1 包管理器介绍

包管理器是 Linux 的「软件商店」,可自动下载、安装、卸载软件,并自动解决软件依赖关系。
不同发行版工具不同:

  • Ubuntu / Debian:apt

  • CentOS / RHEL:yum / dnf

9.2 apt 常用命令(Ubuntu 专属)

# 更新软件源索引(安装软件前建议先执行)
sudo apt update

# 升级系统所有已安装软件
sudo apt upgrade

# 搜索指定软件包
apt search nginx

# 查看软件包详细信息
apt show nginx

# 安装软件  -y:自动确认安装(无需手动交互)
sudo apt install -y nginx

# 卸载软件(保留配置文件)
sudo apt remove nginx

# 彻底卸载(删除软件 + 所有配置文件)
sudo apt purge nginx

# 自动清理无用的依赖包
sudo apt autoremove

十、综合实操练习(建议在 WSL/虚拟机/云服务器完成)

按照步骤依次操作,巩固所有知识点:

  1. 创建目录 ~/devops_practice,并进入该目录
mkdir -p ~/devops_practice && cd ~/devops_practice
  1. 在目录内创建 3 个文件:app.pyconfig.iniREADME.md
touch app.py config.ini README.md
  1. 执行 ls -la 查看文件权限,将 config.ini 权限改为 600
ls -la
chmod 600 config.ini
  1. app.py 写入内容 print("Hello DevOps"),并查看内容
echo 'print("Hello DevOps")' > app.py
cat app.py
  1. 后台运行 sleep 300 命令,查找 PID 并终止进程
sleep 300 &
ps aux | grep sleep
kill [对应PID]
  1. 查看服务器整体磁盘空间
df -h
  1. 实时跟踪系统日志(按 Ctrl + C 退出)
tail -f /var/log/syslog
  1. 安装 htop 并运行查看进程(按 F10 退出)
sudo apt install -y htop
htop
  1. 安装 Nginx,使用 systemctl 查看服务状态
sudo apt install -y nginx
systemctl status nginx

文档小结

本章节覆盖 DevOps 实习生必备 Linux 核心能力,也是后续 Docker、Kubernetes 学习的基础:

  1. 文件系统:树形目录、绝对/相对路径、核心系统目录

  2. 文件操作:pwdlscdmkdirtouchcpmvrm

  3. 内容查看与筛选:catlessheadtailgrep

  4. 权限管理:chmod 数字权限、chown

  5. 用户管理:普通用户创建、su 切换、sudo 提权

  6. 进程与端口:pstopkillss

  7. 服务管理:systemctljournalctl

  8. 磁盘与日志:dfdu、日志查看、logrotate

  9. 软件安装:apt 包管理工具

更多推荐