Skip to content

Linux ​

导航目录 ​

基础操作篇 ​

查看与搜索篇 ​

权限与用户篇 ​

系统与服务篇 ​

网络与运维篇 ​


日常操作命令 ​

核心概念

Linux 的基础命令是日常运维的起点。掌握"当前在哪、系统状态、谁在操作"这几类命令,是排查问题的第一步。

命令作用
pwd查看当前所在工作目录
date查看系统当前时间
whoami查看当前登录用户
who查看当前在线用户
last查看最近登录历史
uname -a查看系统内核与架构信息
history查看命令历史记录
clear清屏(等价 Ctrl+L)

效率技巧

  • Tab 键自动补全命令/路径;连按两次列出所有候选。
  • Ctrl+R 反向搜索历史命令。
  • !! 重复上一条命令,sudo !! 用 root 重跑上一条。
  • cd - 快速返回上一个目录。

文件系统操作 ​

核心概念

文件和目录的增删改查是 Linux 最高频的操作。理解相对路径(相对当前目录)与绝对路径(以 / 开头)的区别是基础。

查看文件和目录 ​

bash
ls /            # 查看根目录下的内容
ls -al          # -a 显示隐藏文件,-l 详细列表
ls -lh          # -h 以人类可读格式显示文件大小
ls -lt          # 按修改时间排序

创建 / 删除目录 ​

bash
mkdir aaa               # 创建单个目录
mkdir -p aaa/bbb/ccc    # 递归创建多级目录
rmdir aaa               # 删除空目录
rm -r aaa               # 递归删除目录及内容
rm -rf aaa              # 强制递归删除(危险!)

高危提醒

rm -rf 不可恢复,尤其禁止 rm -rf / 或变量为空时的 rm -rf $VAR/。建议先 ls 确认路径,或用 rm -i 逐个确认。

创建文件与写入 ​

bash
touch somefile              # 创建空文件
echo "hello" > somefile     # 写入内容(> 覆盖)
echo "world" >> somefile    # 追加内容(>> 不覆盖)

重定向

> 覆盖写入,>> 追加写入;2> 重定向错误输出,&> 同时重定向标准输出和错误输出(如 cmd &> /dev/null 丢弃全部输出)。

移动 / 重命名 / 拷贝 ​

bash
mv aaa bbb              # 重命名(或移动)
mv somefile /home/      # 移动到指定目录
cp somefile /home/      # 拷贝文件
cp -r dir1 dir2         # 递归拷贝目录

使用 vi/vim 文本编辑器 ​

核心概念

vi/vim 是 Linux 内置的文本编辑器,采用「模式化」编辑。核心是三种模式的切换:一般模式、编辑模式、底行命令模式。

模式切换流程 ​

一般模式 --(i/a/o)--> 编辑模式 --(Esc)--> 一般模式 --(:)--> 底行命令模式
  1. 打开文件:vi somefile(默认进入一般模式)。
  2. 按 i 进入编辑模式,输入内容。
  3. 按 Esc 回到一般模式,按 : 进入底行命令,输入 wq 保存退出。

常用快捷键 ​

分类快捷键作用
插入i / a / A光标前 / 光标后 / 行末插入
插入I / o行首插入 / 下方新建一行
导航gg / G跳到首行 / 末行
导航0 / $跳到行首 / 行尾
删除dd / 5dd删除当前行 / 删除 5 行
删除x / u删除字符 / 撤销
复制yy / 3yy / p复制当前行 / 复制 3 行 / 粘贴
选择v / Shift+v / Ctrl+v字符 / 行 / 块选择模式

底行命令 ​

命令作用
:wq / :x保存并退出
:q!不保存强制退出
:w仅保存
:set nu显示行号
/keyword查找关键字(n 下一个,N 上一个)
:%s/old/new/g全文替换 old 为 new(g 全局)

说明

%s/old/new/g 中 % 表示全文,g 表示每行所有匹配都替换(不加则每行仅替换第一个);加 c 会逐个确认。


查看文件内容 ​

核心概念

根据文件大小与查看需求,Linux 提供了多种查看命令:小文件用 cat,大文件用 less,日志跟踪用 tail -f。

命令适用场景
cat file一次性输出整个文件到控制台(小文件)
more file分页查看(空格下翻,q 退出)
less file交互式查看(可上下翻页、/ 搜索),大文件首选
head -n 10 file查看文件头部 10 行
tail -n 10 file查看文件尾部 10 行
tail -f file实时跟踪文件新增内容(看日志常用)
wc -l file统计文件行数

tail -f 与 tail -F

tail -f 跟踪文件的 inode,文件改名后仍跟踪原文件;tail -F 按文件名跟踪,文件被日志轮转(logrotate)重建后能继续跟踪新文件。看会滚动的日志推荐 -F。


grep 与管道 ​

核心概念

管道 | 把前一个命令的输出作为后一个命令的输入,是 Linux "组合小工具解决大问题"哲学的体现。grep 用于文本搜索,二者组合威力巨大。

grep 常用 ​

bash
grep "error" app.log            # 搜索包含 error 的行
grep -i "error" app.log         # 忽略大小写
grep -n "error" app.log         # 显示行号
grep -r "error" ./logs/         # 递归搜索目录
grep -v "debug" app.log         # 反向匹配(不含 debug 的行)
grep -c "error" app.log         # 统计匹配行数
grep -A 3 -B 2 "error" app.log  # 显示匹配行的后 3 行、前 2 行

管道组合实战 ​

bash
# 查看某进程是否存在
ps -ef | grep nginx

# 统计某关键字出现次数
cat access.log | grep "404" | wc -l

# 查看占用内存最高的 5 个进程
ps aux | sort -k4 -nr | head -5

# 实时过滤日志中的错误
tail -f app.log | grep --line-buffered "ERROR"

常用文本工具搭配

  • awk '{print $1}':按列提取(默认空格分隔)。
  • sed 's/old/new/g':流式替换。
  • sort / uniq -c:排序与去重计数(统计日志 IP 频次:awk '{print $1}' log | sort | uniq -c | sort -nr)。

find 文件查找 ​

核心概念

find 用于在目录树中按条件查找文件,支持按名称、类型、时间、大小等条件,并可对结果执行操作。

bash
find /var/log -name "*.log"          # 按名称查找
find . -iname "readme*"              # 忽略大小写
find . -type f                       # 只找文件(d 为目录)
find . -size +100M                   # 查找大于 100M 的文件
find . -mtime -7                     # 查找 7 天内修改过的文件
find . -name "*.tmp" -delete         # 查找并删除
find . -name "*.log" -exec rm {} \;  # 对结果执行命令

find 与 locate

find 实时遍历磁盘,准确但慢;locate 基于预建数据库查询,速度快但需 updatedb 更新(可能有延迟)。查最新文件用 find,快速定位用 locate。


软链接与硬链接 ​

核心概念

链接是 Linux 中"指向文件"的机制。软链接(符号链接)类似 Windows 快捷方式;硬链接是同一文件的多个入口。理解 inode 是理解二者区别的关键。

bash
ln -s /path/to/file linkname    # 创建软链接(-s)
ln /path/to/file hardlink       # 创建硬链接
对比项软链接(Symbolic)硬链接(Hard)
本质存储目标路径的独立文件指向同一 inode 的另一个文件名
跨文件系统可以不可以
链接目录可以不可以
源文件删除链接失效(悬空)链接仍可用(inode 引用计数减 1)
inode与源文件不同与源文件相同

应用场景

软链接常用于版本切换(如 current -> release-v2)、简化长路径;部署时把 nginx.conf 软链到版本目录,切换版本只改链接指向即可。


文件权限操作 ​

核心概念

Linux 权限控制"谁能对文件做什么"。每个文件对「所有者(u)、所属组(g)、其他人(o)」三类角色分别设置「读(r)、写(w)、执行(x)」三种权限。

权限描述格式 ​

drwxr-xr-x
│└┬┘└┬┘└┬┘
│ │  │  └─ 其他人(o) 权限:r-x
│ │  └──── 所属组(g) 权限:r-x
│ └─────── 所有者(u) 权限:rwx
└───────── 文件类型:d 目录 / - 文件 / l 链接
权限字母数字对文件对目录
读r4查看内容列出目录内容
写w2修改内容增删目录内文件
执行x1运行进入目录(cd)

rwxr-xr-x = 111 101 101 = 755。

修改权限 ​

bash
# 字母方式
chmod u+x file          # 给所有者加执行权限
chmod g-w file          # 去掉组的写权限
chmod o-rw file         # 去掉其他人的读写权限
chmod a+r file          # 所有人加读权限

# 数字方式
chmod 755 file          # rwxr-xr-x(常用于脚本/目录)
chmod 644 file          # rw-r--r--(常用于普通文件)
chmod -R 770 dir/       # 递归修改目录

# 修改所有者/组(需 root)
chown user:group file   # 改所有者和组
chown -R user dir/      # 递归修改

常见坑

目录若无 x 权限则无法 cd 进入,即使有 r 也只能看名字不能访问内容;脚本无 x 权限无法直接执行(./run.sh 报 Permission denied)。


用户管理 ​

核心概念

Linux 是多用户系统。用户管理涉及创建用户、设置密码、分配权限(sudo)。root 是超级管理员,日常应避免直接用 root 操作。

bash
useradd angela              # 创建用户
passwd angela               # 设置/修改密码
userdel -r angela           # 删除用户及其家目录
usermod -aG docker angela   # 将用户加入 docker 附加组
id angela                   # 查看用户 UID/GID/所属组
su - angela                 # 切换到某用户

配置 sudo 权限 ​

bash
# 方式一:加入 sudo/wheel 组(推荐)
usermod -aG wheel angela        # CentOS
usermod -aG sudo angela         # Ubuntu

# 方式二:编辑 sudoers(建议用 visudo,含语法校验)
visudo
# 添加一行:
# angela  ALL=(ALL)   ALL

最佳实践

  • 用 visudo 而非直接 vi /etc/sudoers,前者保存时会做语法检查,避免写错导致 sudo 不可用。
  • 日常用普通用户 + sudo,比直接登录 root 更安全(有操作审计、防误操作)。
  • 免密 sudo(谨慎):angela ALL=(ALL) NOPASSWD: ALL。

进程管理 ​

核心概念

进程是运行中的程序实例。掌握查看进程、定位资源占用、结束进程,是排查"服务卡死、CPU/内存飙高"等线上问题的核心技能。

bash
ps -ef                  # 查看所有进程(完整格式)
ps aux                  # 查看所有进程(含 CPU/内存占用)
ps -ef | grep nginx     # 查找指定进程
top                     # 实时监控进程资源(q 退出)
htop                    # top 增强版(更直观,需安装)
kill 1234               # 正常终止进程(发 SIGTERM)
kill -9 1234            # 强制杀死进程(发 SIGKILL)
kill -9 $(pgrep node)   # 按名称杀进程
命令作用
top / htop实时查看 CPU、内存、进程排名
ps aux --sort=-%cpu | head查 CPU 占用最高的进程
ps aux --sort=-%mem | head查内存占用最高的进程
pgrep -l node按名称查进程 PID
nohup cmd &后台运行且忽略挂断信号
jobs / fg / bg查看/切换前后台任务

kill -9 慎用

kill(默认 15/SIGTERM)会通知进程"优雅退出",进程可做清理;kill -9(SIGKILL)强制杀死,进程无法保存状态、可能丢数据。优先用普通 kill,无效再用 -9。


网络排查 ​

核心概念

网络问题排查围绕"端口通不通、连接建立了吗、DNS 解析对吗"展开。新系统推荐用 ss、ip 命令(netstat、ifconfig 已逐渐废弃)。

bash
# 端口与连接(ss 替代 netstat)
ss -tunlp               # 查看监听端口(t=TCP u=UDP n=数字 l=监听 p=进程)
netstat -tunlp          # 老系统等价命令
ss -tn | grep :80       # 查看 80 端口的连接

# 网络配置(ip 替代 ifconfig)
ip addr                 # 查看网卡 IP
ip route                # 查看路由表

# 连通性测试
ping example.com        # 测试连通性
telnet host 3306        # 测试端口是否可达
curl -I http://host     # 查看 HTTP 响应头
nslookup example.com    # DNS 解析查询
dig example.com         # DNS 详细查询
traceroute example.com  # 追踪路由路径

排查思路

"访问不了服务"排查顺序:① ping 看主机通不通 → ② telnet host port 看端口通不通 → ③ ss -tunlp 看服务是否监听 → ④ 查防火墙/安全组 → ⑤ curl -v 看应用层响应。


systemctl 服务管理 ​

核心概念

现代 Linux(CentOS 7+/Ubuntu 16+)用 systemd 管理服务,命令为 systemctl,替代了老的 service 和 chkconfig。

操作systemctl(新)service/chkconfig(旧)
启动systemctl start nginxservice nginx start
停止systemctl stop nginxservice nginx stop
重启systemctl restart nginxservice nginx restart
重载配置systemctl reload nginx—
查看状态systemctl status nginxservice nginx status
开机自启systemctl enable nginxchkconfig nginx on
取消自启systemctl disable nginxchkconfig nginx off
查看是否自启systemctl is-enabled nginx—
bash
systemctl list-units --type=service   # 查看所有运行中的服务
systemctl daemon-reload               # 修改 .service 文件后重载
journalctl -u nginx -f                # 查看服务日志(-f 实时跟踪)

reload vs restart

reload 不中断服务、仅重新加载配置(Nginx 平滑生效);restart 会停止再启动,有短暂不可用。改配置优先用 reload。


磁盘与空间统计 ​

核心概念

磁盘空间不足是常见线上故障(日志占满 /)。df 看分区整体使用率,du 看具体目录/文件占用。

bash
df -h                       # 查看各分区磁盘使用情况(人类可读)
df -i                       # 查看 inode 使用情况
du -sh /var/log            # 查看目录总大小
du -sh *                    # 查看当前目录下各项大小
du -h --max-depth=1 /var    # 只看一层子目录大小
free -h                     # 查看内存使用情况

磁盘满排查

磁盘 100% 时:df -h 定位满的分区 → du -h --max-depth=1 /path | sort -rh | head 逐层找大目录 → 定位大文件(常见是日志)。注意:删了正被进程占用的文件,空间不会立即释放,需重启该进程或 > file 清空。


SSH 远程登录 ​

核心概念

SSH(Secure Shell)是加密的远程登录协议,是运维连接服务器的标准方式。核心是"密码登录"与更安全的"密钥登录"。

bash
ssh user@host                   # 默认 22 端口登录
ssh -p 2222 user@host           # 指定端口
ssh user@host "ls /var/log"     # 远程执行单条命令

免密登录(密钥对) ​

bash
# 1. 本地生成密钥对(一路回车)
ssh-keygen -t rsa -b 4096

# 2. 把公钥拷贝到服务器(自动追加到 authorized_keys)
ssh-copy-id user@host

# 3. 之后即可免密登录
ssh user@host

原理与配置

公钥(~/.ssh/id_rsa.pub)放服务器,私钥(id_rsa)留本地。可在 ~/.ssh/config 配置别名简化连接:

Host myserver
  HostName 1.2.3.4
  User root
  Port 22

之后直接 ssh myserver 即可。


scp / rsync 文件传输 ​

核心概念

scp 基于 SSH 加密传输文件,适合简单拷贝;rsync 支持增量同步、断点续传,适合大量文件或频繁同步。

bash
# scp(本地 ↔ 远程)
scp file.txt user@host:/path/           # 上传文件
scp user@host:/path/file.txt ./         # 下载文件
scp -r dir/ user@host:/path/            # 上传目录

# rsync(增量同步,更高效)
rsync -avz dir/ user@host:/path/        # 归档+压缩+详细
rsync -avz --delete dir/ user@host:/path/  # 同步并删除目标多余文件
rsync -avz --progress big.zip user@host:/path/  # 显示进度

scp vs rsync

scp 每次全量拷贝;rsync 只传输差异部分(增量),中断可续传,重复同步时快得多。日常部署/备份推荐 rsync。


tar 压缩与解压 ​

核心概念

tar 用于打包(归档)文件,配合 gzip/bzip2 实现压缩。记住核心参数:c 创建、x 解压、z gzip、f 指定文件、v 显示过程。

bash
# 压缩
tar -czvf archive.tar.gz dir/     # 打包并 gzip 压缩
tar -cjvf archive.tar.bz2 dir/    # 打包并 bzip2 压缩(更小更慢)

# 解压
tar -xzvf archive.tar.gz          # 解压 gzip
tar -xzvf archive.tar.gz -C /tmp  # 解压到指定目录
tar -tzvf archive.tar.gz          # 只查看包内文件不解压

# zip / unzip
zip -r archive.zip dir/           # 压缩为 zip
unzip archive.zip -d /tmp         # 解压 zip 到指定目录
参数含义
c / x创建 / 解压
z / jgzip / bzip2 压缩
f指定归档文件名(必须紧跟文件名)
v显示处理过程
-C指定目标目录

记忆口诀

压缩记「czf」(create-zip-file),解压记「xzf」(extract-zip-file),加 v 看过程。.tar.gz 用 z,.tar.bz2 用 j。


YUM 源替换 ​

核心概念

替换默认 YUM 源为国内镜像(如阿里云)可大幅提升软件包下载速度。以 CentOS 7 为例。

bash
# 1. 进入 YUM 配置目录
cd /etc/yum.repos.d/

# 2. 备份原配置
mv CentOS-Base.repo CentOS-Base.repo.bak

# 3. 下载阿里云镜像源
wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 若无 wget:yum -y install wget

# 4. 更新缓存
yum clean all && yum makecache && yum update

其他系统

Ubuntu/Debian 用 apt,换源改 /etc/apt/sources.list(可换清华/阿里镜像),改完执行 apt update。CentOS 8+/Rocky 用 dnf(yum 的下一代,命令基本兼容)。


防火墙配置 ​

核心概念

防火墙管理端口访问权限。CentOS 7+ 用 firewalld(firewall-cmd),Ubuntu 常用 ufw,底层都是 iptables。

bash
# firewalld(CentOS 7+)
firewall-cmd --state                                    # 查看状态
systemctl start firewalld                               # 启动防火墙
firewall-cmd --zone=public --add-port=8080/tcp --permanent  # 开放端口(永久)
firewall-cmd --reload                                   # 重载生效
firewall-cmd --list-ports                               # 查看已开放端口
firewall-cmd --zone=public --remove-port=8080/tcp --permanent  # 关闭端口

# ufw(Ubuntu)
ufw allow 8080/tcp        # 开放端口
ufw status               # 查看状态

云服务器注意

云服务器(阿里云/腾讯云等)除了系统防火墙,还有安全组这一层。端口不通时,除了检查 firewalld,务必同时检查云控制台的安全组规则是否放行。