Appearance
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)--> 一般模式 --(:)--> 底行命令模式- 打开文件:
vi somefile(默认进入一般模式)。 - 按
i进入编辑模式,输入内容。 - 按
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 链接| 权限 | 字母 | 数字 | 对文件 | 对目录 |
|---|---|---|---|---|
| 读 | r | 4 | 查看内容 | 列出目录内容 |
| 写 | w | 2 | 修改内容 | 增删目录内文件 |
| 执行 | x | 1 | 运行 | 进入目录(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 nginx | service nginx start |
| 停止 | systemctl stop nginx | service nginx stop |
| 重启 | systemctl restart nginx | service nginx restart |
| 重载配置 | systemctl reload nginx | — |
| 查看状态 | systemctl status nginx | service nginx status |
| 开机自启 | systemctl enable nginx | chkconfig nginx on |
| 取消自启 | systemctl disable nginx | chkconfig 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 / j | gzip / 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,务必同时检查云控制台的安全组规则是否放行。