Linux 基础命令教程
🎯 适合零基础用户,从零开始掌握 Linux 命令行操作。 本教程基于常见 Linux 发行版(Ubuntu/CentOS),所有命令均经过实际验证。
目录
1. 初识终端与基础概念
什么是终端(Terminal)
终端是你与 Linux 系统"对话"的窗口。在图形界面中你可以打开一个叫"终端"的程序,在服务器上你通常通过 SSH 连接后直接面对命令行。
Linux 目录结构速览
Linux 一切皆文件,目录结构是一棵倒置的树,根目录用 / 表示:
/ ← 根目录,所有目录的起点
├── home/ ← 普通用户的家目录
│ └── ubuntu/ ← 用户 ubuntu 的家目录,简写为 ~
├── etc/ ← 系统配置文件
├── var/ ← 日志、缓存等经常变化的文件
├── tmp/ ← 临时文件,重启后可能清空
├── usr/ ← 用户级程序和数据
├── root/ ← root 用户的家目录
└── opt/ ← 第三方软件安装目录
路径的两种写法
- 绝对路径:从
/开始的完整路径,如/home/ubuntu/test.txt - 相对路径:相对于当前位置的路径,如
./test.txt(当前目录)或../test.txt(上级目录)
最重要的两个概念
| 符号 | 含义 |
|---|---|
~ |
当前用户的家目录,等同于 /home/你的用户名 |
. |
当前目录 |
.. |
上一级目录 |
2. 目录操作命令
pwd — 显示当前所在目录
$ pwd
/home/ubuntu
💡 当你"迷路"时,
pwd能告诉你现在在哪。
ls — 列出目录内容
# 列出当前目录的文件
$ ls
Documents Downloads readme.txt
# 显示详细信息(权限、大小、日期等)
$ ls -l
total 8
drwxr-xr-x 2 ubuntu ubuntu 4096 May 28 09:00 Documents
drwxr-xr-x 2 ubuntu ubuntu 4096 May 28 08:30 Downloads
-rw-r--r-- 1 ubuntu ubuntu 128 May 28 10:15 readme.txt
# 显示隐藏文件(以 . 开头的文件)
$ ls -la
total 24
drwxr-xr-x 4 ubuntu ubuntu 4096 May 28 10:15 .
drwxr-xr-x 3 root root 4096 May 28 08:00 ..
-rw-r--r-- 1 ubuntu ubuntu 220 May 28 08:00 .bash_logout
-rw-r--r-- 1 ubuntu ubuntu 3771 May 28 08:00 .bashrc
drwxr-xr-x 2 ubuntu ubuntu 4096 May 28 09:00 Documents
# 以人类可读的方式显示文件大小
$ ls -lh
-rw-r--r-- 1 ubuntu ubuntu 128 May 28 10:15 readme.txt
# 按时间倒序排列(最新的在前)
$ ls -lt
ls -l 输出中第一个字段的含义:
- rw- r-- r--
│ │ │ │
│ │ │ └── 其他用户权限
│ │ └────── 同组用户权限
│ └────────── 文件所有者权限
└───────────── 文件类型(- 普通文件,d 目录,l 链接)
cd — 切换目录
# 进入某个目录
$ cd /var/log
# 回到家目录(以下三种方式等价)
$ cd ~
$ cd
$ cd /home/ubuntu
# 回到上一级目录
$ cd ..
# 回到上一次所在的目录(在两个目录间反复切换)
$ cd -
mkdir — 创建目录
# 创建单个目录
$ mkdir myproject
# 创建多级目录(-p 表示递归创建)
$ mkdir -p myproject/src/main/java
# 查看创建结果
$ tree myproject
myproject
└── src
└── main
└── java
rmdir / rm — 删除目录
# 删除空目录
$ rmdir myproject
# 删除非空目录(-r 递归,-f 强制不提示)
$ rm -rf myproject
# ⚠️ 警告:rm -rf 是不可逆操作,务必确认路径正确!
# 危险示例(绝对不要执行):rm -rf /
3. 文件操作命令
touch — 创建空文件 / 更新时间戳
# 创建空文件
$ touch hello.txt
# 批量创建文件
$ touch file1.txt file2.txt file3.txt
# 更新已有文件的修改时间(不改变内容)
$ touch readme.txt
cp — 复制文件/目录
# 复制文件
$ cp source.txt dest.txt
# 复制到另一个目录
$ cp source.txt /tmp/
# 复制目录(需要 -r 递归)
$ cp -r myproject/ myproject_backup/
# 复制时保留权限和时间属性
$ cp -a source_dir/ backup_dir/
mv — 移动 / 重命名
# 重命名文件
$ mv oldname.txt newname.txt
# 移动文件到另一个目录
$ mv report.txt /home/ubuntu/Documents/
# 移动并重命名
$ mv file.txt /tmp/newname.txt
rm — 删除文件
# 删除单个文件
$ rm temp.txt
# 删除前逐一确认
$ rm -i *.log
rm: remove regular file 'app.log'? y
rm: remove regular file 'error.log'? y
# 强制删除(无提示)
$ rm -f temp.txt
cat — 查看文件内容
# 显示文件全部内容
$ cat hello.txt
Hello, Linux!
# 显示行号
$ cat -n hello.txt
1 Hello, Linux!
# 合并多个文件
$ cat file1.txt file2.txt > merged.txt
head / tail — 查看文件头尾
# 查看前 10 行(默认)
$ head /var/log/syslog
# 查看前 20 行
$ head -n 20 /var/log/syslog
# 查看最后 10 行
$ tail /var/log/syslog
# 实时追踪文件末尾(常用于看日志)
$ tail -f /var/log/syslog
# 按 Ctrl+C 退出
# 查看最后 50 行并持续追踪
$ tail -n 50 -f /var/log/app.log
find — 查找文件
# 在当前目录下查找所有 .txt 文件
$ find . -name "*.txt"
./readme.txt
./notes/todo.txt
# 在 /etc 目录下查找名为 nginx.conf 的文件
$ find /etc -name "nginx.conf"
/etc/nginx/nginx.conf
# 按大小查找(大于 100MB 的文件)
$ find / -size +100M
# 按修改时间查找(最近 7 天内修改过的文件)
$ find . -mtime -7
# 查找并执行操作(删除所有 .tmp 文件)
$ find . -name "*.tmp" -exec rm {} \;
ln — 创建链接
# 创建硬链接(指向同一份数据)
$ ln source.txt hardlink.txt
# 创建软链接(类似 Windows 快捷方式)
$ ln -s /usr/local/bin/myapp /usr/bin/myapp
# 查看软链接指向
$ ls -l /usr/bin/myapp
lrwxrwxrwx 1 root root 24 May 28 10:00 /usr/bin/myapp -> /usr/local/bin/myapp
4. 文件权限管理
理解权限体系
每个文件/目录都有三组权限,分别对应三类用户:
| 权限 | 文件含义 | 目录含义 |
|---|---|---|
r (读) |
可以查看文件内容 | 可以列出目录内容 |
w (写) |
可以修改文件内容 | 可以在目录中创建/删除文件 |
x (执行) |
可以运行文件 | 可以进入该目录 |
权限用数字表示:r=4, w=2, x=1,三者相加。
常见权限组合:
755 = rwxr-xr-x → 所有者完全控制,其他人可读和执行(目录常用)
644 = rw-r--r-- → 所有者可读写,其他人只读(文件常用)
700 = rwx------ → 仅所有者完全控制
600 = rw------- → 仅所有者可读写(密钥文件常用)
chmod — 修改权限
# 数字方式设置权限
$ chmod 755 script.sh
$ ls -l script.sh
-rwxr-xr-x 1 ubuntu ubuntu 256 May 28 10:00 script.sh
# 符号方式设置权限
$ chmod u+x script.sh # 给所有者添加执行权限
$ chmod g-w file.txt # 去掉同组的写权限
$ chmod o=r file.txt # 其他用户权限设为只读
$ chmod a+r file.txt # 所有人添加读权限
# 递归修改目录下所有文件权限
$ chmod -R 755 myproject/
chown — 修改所有者
# 修改文件所有者
$ chown ubuntu file.txt
# 修改所有者和所属组
$ chown ubuntu:ubuntu file.txt
# 递归修改目录
$ chown -R www-data:www-data /var/www/html/
chgrp — 修改所属组
$ chgrp developers project.txt
5. 文本处理命令
grep — 文本搜索
# 在文件中搜索关键词
$ grep "error" /var/log/syslog
May 28 10:15:23 server kernel: [UFW BLOCK] IN=eth0 ... error ...
# 忽略大小写
$ grep -i "error" app.log
# 显示匹配行的行号
$ grep -n "TODO" main.py
42: # TODO: 优化此处逻辑
88: # TODO: 添加错误处理
# 递归搜索目录下所有文件
$ grep -r "password" /etc/
# 反向匹配(显示不包含关键词的行)
$ grep -v "DEBUG" app.log
# 显示匹配行的上下文(前后各 3 行)
$ grep -C 3 "Exception" app.log
# 使用正则表达式
$ grep -E "^[0-9]{4}-[0-9]{2}" log.txt
2026-05-28 Server started
2026-05-28 Connected to database
sed — 流编辑器
# 替换文件中的文本(显示到屏幕,不修改原文件)
$ sed 's/old/new/' file.txt
# 直接修改原文件(-i 参数)
$ sed -i 's/old/new/g' file.txt
# g 表示替换每行中所有匹配项,不加 g 则每行只替换第一个
# 删除包含某关键词的行
$ sed -i '/DEBUG/d' app.log
# 删除空行
$ sed -i '/^$/d' file.txt
# 在指定行前插入内容
$ sed -i '3i\# 新增的注释行' config.txt
# 打印第 5 到第 10 行
$ sed -n '5,10p' largefile.txt
awk — 文本分析利器
# 按空格分隔,打印第 1 列和第 3 列
$ awk '{print $1, $3}' data.txt
# 指定分隔符
$ awk -F: '{print $1, $7}' /etc/passwd
root /bin/bash
ubuntu /bin/bash
# 带条件筛选
$ awk '$3 > 100 {print $1, $3}' scores.txt
# 计算某列总和
$ awk '{sum += $3} END {print "Total:", sum}' data.txt
# 格式化输出
$ awk '{printf "%-20s %5d\n", $1, $3}' data.txt
wc — 统计行数/词数/字节数
$ wc -l /etc/passwd
45 /etc/passwd
# 统计多个指标
$ wc readme.txt
120 580 3456 readme.txt
行数 词数 字节数
# 统计目录下有多少个文件
$ find . -type f | wc -l
234
sort 与 uniq — 排序和去重
# 排序
$ sort names.txt
Alice
Bob
Charlie
# 按数字排序
$ sort -n numbers.txt
# 去重(需先排序)
$ sort names.txt | uniq
# 统计每行出现次数
$ sort access.log | uniq -c | sort -rn | head -10
1523 192.168.1.100
876 192.168.1.50
234 10.0.0.1
diff — 比较文件差异
$ diff file1.txt file2.txt
3c3
< 这是旧内容
---
> 这是新内容
# 并排对比显示
$ diff -y file1.txt file2.txt
6. 压缩与解压
tar — 最常用的打包工具
# 打包(不压缩)
$ tar -cvf archive.tar mydir/
c: 创建归档
v: 显示过程
f: 指定文件名
# 打包并用 gzip 压缩(.tar.gz)
$ tar -czvf archive.tar.gz mydir/
# 打包并用 bzip2 压缩(.tar.bz2,压缩率更高)
$ tar -cjvf archive.tar.bz2 mydir/
# 解压 .tar.gz
$ tar -xzvf archive.tar.gz
# 解压到指定目录
$ tar -xzvf archive.tar.gz -C /tmp/extract/
# 查看压缩包内容(不解压)
$ tar -tzvf archive.tar.gz
zip / unzip
# 压缩文件
$ zip archive.zip file1.txt file2.txt
# 压缩整个目录(-r 递归)
$ zip -r archive.zip myproject/
# 解压
$ unzip archive.zip
# 解压到指定目录
$ unzip archive.zip -d /tmp/extract/
# 查看压缩包内容
$ unzip -l archive.zip
gzip / gunzip
# 压缩文件(原文件会被替换)
$ gzip largefile.txt
# 生成 largefile.txt.gz,原文件消失
# 解压
$ gunzip largefile.txt.gz
# 保留原文件的压缩
$ gzip -c largefile.txt > largefile.txt.gz
7. 进程管理
ps — 查看进程
# 查看当前终端的进程
$ ps
PID TTY TIME CMD
1234 pts/0 00:00:00 bash
5678 pts/0 00:00:00 ps
# 查看所有进程(常用组合)
$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 169436 11200 ? Ss May27 0:05 /sbin/init
root 2 0.0 0.0 0 0 ? S May27 0:00 [kthreadd]
www-data 892 0.2 1.5 345216 62400 ? S May27 1:23 nginx: worker
mysql 1024 1.2 8.0 1823456 327680 ? Sl May27 12:45 mysqld
# 查看特定进程
$ ps aux | grep nginx
# 以树状显示进程关系
$ ps -ef --forest
top / htop — 实时监控
# 进入实时监控界面
$ top
# top 界面常用快捷键:
# P — 按 CPU 使用率排序
# M — 按内存使用率排序
# k — 杀死指定进程
# q — 退出
# htop(更友好的界面,需安装)
$ htop
kill — 终止进程
# 先用 ps 或 pgrep 找到进程 PID
$ pgrep nginx
892
893
# 正常终止(发送 SIGTERM 信号,进程可优雅退出)
$ kill 892
# 强制终止(发送 SIGKILL 信号,立即杀死)
$ kill -9 892
# 按名称杀进程
$ killall nginx
# 按名称和模式杀进程
$ pkill -f "python app.py"
后台任务管理
# 将命令放到后台运行(末尾加 &)
$ long_task.sh &
[1] 12345
# 查看后台任务
$ jobs
[1]+ Running long_task.sh &
# 将后台任务调回前台
$ fg %1
# 暂停当前任务(Ctrl+Z),然后放到后台
$ bg %1
# nohup — 断开终端后继续运行
$ nohup ./server.sh > output.log 2>&1 &
systemd 服务管理
# 启动服务
$ sudo systemctl start nginx
# 停止服务
$ sudo systemctl stop nginx
# 重启服务
$ sudo systemctl restart nginx
# 查看服务状态
$ systemctl status nginx
● nginx.service - A high performance web server
Active: active (running) since Thu 2026-05-28 08:00:00 CST; 2h ago
Main PID: 892 (nginx)
# 设置开机自启
$ sudo systemctl enable nginx
# 取消开机自启
$ sudo systemctl disable nginx
# 查看所有运行中的服务
$ systemctl list-units --type=service --state=running
8. 网络命令
ping — 测试网络连通性
$ ping -c 4 google.com
PING google.com (142.250.80.46) 56(84) bytes of data.
64 bytes from 142.250.80.46: icmp_seq=1 ttl=116 time=2.34 ms
64 bytes from 142.250.80.46: icmp_seq=2 ttl=116 time=2.18 ms
64 bytes from 142.250.80.46: icmp_seq=3 ttl=116 time=2.25 ms
64 bytes from 142.250.80.46: icmp_seq=4 ttl=116 time=2.31 ms
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss
ip — 查看网络配置
# 查看网卡和 IP 地址
$ ip addr show
2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500
inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0
# 简写
$ ip a
# 查看路由表
$ ip route show
default via 192.168.1.1 dev eth0
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100
ss / netstat — 查看端口和连接
# 查看所有监听端口(推荐使用 ss)
$ ss -tlnp
State Recv-Q Send-Q Local Address:Port Process
LISTEN 0 128 0.0.0.0:22 users:(("sshd",pid=678))
LISTEN 0 511 0.0.0.0:80 users:(("nginx",pid=892))
LISTEN 0 128 0.0.0.0:3306 users:(("mysqld",pid=1024))
# 查看所有连接
$ ss -tanp
# 查看特定端口是否被占用
$ ss -tlnp | grep :80
# 旧版系统使用 netstat
$ netstat -tlnp
curl / wget — 下载与请求
# 获取网页内容(输出到终端)
$ curl https://example.com
# 下载文件
$ wget https://example.com/file.zip
# curl 下载并保存
$ curl -O https://example.com/file.zip
# 发送 POST 请求
$ curl -X POST -d "name=test&value=123" https://api.example.com/data
# 带请求头
$ curl -H "Content-Type: application/json" -d '{"key":"value"}' https://api.example.com/data
# 只看响应头
$ curl -I https://example.com
HTTP/2 200
content-type: text/html; charset=UTF-8
ssh — 远程登录
# 基本连接
$ ssh user@192.168.1.200
# 指定端口(默认 22)
$ ssh -p 2222 user@192.168.1.200
# 使用密钥文件
$ ssh -i ~/.ssh/mykey.pem user@192.168.1.200
# 远程执行命令
$ ssh user@server "df -h"
scp / rsync — 远程传输文件
# 上传文件到远程
$ scp localfile.txt user@server:/tmp/
# 从远程下载文件
$ scp user@server:/var/log/app.log ./
# 传输目录(-r 递归)
$ scp -r myproject/ user@server:/home/user/
# rsync 同步(增量传输,更高效)
$ rsync -avz myproject/ user@server:/home/user/myproject/
# 排除特定文件
$ rsync -avz --exclude='*.log' --exclude='.git' myproject/ user@server:/home/user/myproject/
dig / nslookup — DNS 查询
# 查询域名解析
$ dig example.com
;; ANSWER SECTION:
example.com. 300 IN A 93.184.216.34
# 简洁输出
$ dig +short example.com
93.184.216.34
# 查询 MX 记录(邮件服务器)
$ dig MX gmail.com
# nslookup(更简单)
$ nslookup example.com
9. 磁盘与系统信息
df — 查看磁盘使用
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 32G 16G 67% /
/dev/sdb1 200G 45G 145G 24% /data
tmpfs 7.8G 0 7.8G 0% /dev/shm
du — 查看目录/文件大小
# 查看当前目录下各子目录大小
$ du -sh *
4.0K Documents
128M Downloads
2.1G projects
# 查看当前目录总大小
$ du -sh .
2.3G .
# 排序找最大的目录
$ du -sh * | sort -rh | head -10
2.1G projects
128M Downloads
4.0K Documents
free — 查看内存
$ free -h
total used free shared buff/cache available
Mem: 15Gi 4.2Gi 8.1Gi 256Mi 3.1Gi 10Gi
Swap: 2.0Gi 0B 2.0Gi
uname — 系统信息
# 完整信息
$ uname -a
Linux server 6.8.0-100-generic #1 SMP x86_64 GNU/Linux
# 仅内核版本
$ uname -r
6.8.0-100-generic
# 查看发行版信息
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="24.04 LTS"
date — 日期时间
$ date
Thu May 28 10:30:00 CST 2026
# 自定义格式
$ date "+%Y-%m-%d %H:%M:%S"
2026-05-28 10:30:00
10. 用户与组管理
whoami / id — 查看当前用户
$ whoami
ubuntu
$ id
uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),27(sudo)
sudo — 以管理员权限执行
# 以 root 身份执行命令
$ sudo apt update
# 切换到 root 用户
$ sudo -i
# 或
$ sudo su
useradd / usermod — 用户管理
# 创建用户
$ sudo useradd -m -s /bin/bash newuser
# -m 创建家目录,-s 指定默认 shell
# 设置密码
$ sudo passwd newuser
Enter new UNIX password: ********
Retype new UNIX password: ********
# 将用户添加到 sudo 组
$ sudo usermod -aG sudo newuser
# 查看用户信息
$ id newuser
uid=1001(newuser) gid=1001(newuser) groups=1001(newuser),27(sudo)
/etc/passwd — 用户信息文件
$ cat /etc/passwd | head -3
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
# 字段含义(以 : 分隔)
# 用户名:密码占位:UID:GID:描述:家目录:默认Shell
11. 实用技巧与快捷键
命令行快捷键
| 快捷键 | 功能 |
|---|---|
Ctrl + C |
终止当前命令 |
Ctrl + Z |
暂停当前命令(可 bg 恢复到后台) |
Ctrl + L |
清屏(等同 clear) |
Ctrl + A |
光标移到行首 |
Ctrl + E |
光标移到行尾 |
Ctrl + R |
反向搜索历史命令 |
Tab |
自动补全命令/路径 |
!! |
重复上一条命令 |
!$ |
引用上一条命令的最后一个参数 |
管道与重定向
# 管道:把前一个命令的输出作为后一个命令的输入
$ cat access.log | grep "404" | wc -l
42
# 重定向:把输出写入文件(覆盖)
$ echo "hello" > output.txt
# 追加写入
$ echo "world" >> output.txt
# 将错误输出也重定向
$ command > output.txt 2>&1
# 将标准输出和错误输出分别重定向
$ command > stdout.txt 2> stderr.txt
历史命令
# 查看历史命令
$ history
1 ls -la
2 cd /var/log
3 grep "error" syslog
# 执行历史中第 42 条命令
$ !42
# 搜索历史命令(输入关键词后按 Ctrl+R)
(reverse-i-search)`grep': grep "error" /var/log/syslog
别名(alias)
# 设置别名
$ alias ll='ls -la'
$ alias cls='clear'
# 查看所有别名
$ alias
# 永久生效:写入 ~/.bashrc
$ echo "alias ll='ls -la'" >> ~/.bashrc
$ source ~/.bashrc
12. 实战场景:服务器日常运维
场景一:检查服务器健康状态
# 1. 查看系统负载
$ uptime
10:30:00 up 45 days, 2:15, 2 users, load average: 0.52, 0.48, 0.35
# load average 的三个数字分别代表 1分钟、5分钟、15分钟的平均负载
# 一般不超过 CPU 核心数就是正常的
# 2. 查看磁盘空间
$ df -h | grep -E "Filesystem|/$"
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 32G 16G 67% /
# 超过 85% 需要清理
# 3. 查看内存使用
$ free -h
# 关注 available 列,这才是真正可用的内存
# 4. 查看 CPU 使用最高的进程
$ ps aux --sort=-%cpu | head -5
场景二:排查网站无法访问
# 1. 检查 nginx 是否运行
$ systemctl status nginx
# 2. 检查 80 端口是否在监听
$ ss -tlnp | grep :80
# 3. 查看 nginx 错误日志
$ tail -n 50 /var/log/nginx/error.log
# 4. 测试本机是否能访问
$ curl -I http://localhost
# 5. 检查防火墙
$ sudo iptables -L -n | grep 80
# 或使用 ufw
$ sudo ufw status
# 6. 检查 DNS 解析
$ dig +short yourdomain.com
场景三:清理磁盘空间
# 1. 找出占用空间最大的目录
$ du -sh /* 2>/dev/null | sort -rh | head -10
5.2G /var
2.1G /usr
800M /home
# 2. 清理日志(保留最近 7 天)
$ find /var/log -name "*.log" -mtime +7 -exec rm {} \;
# 3. 清理 apt 缓存(Ubuntu/Debian)
$ sudo apt clean
$ sudo apt autoremove
# 4. 清理系统日志
$ sudo journalctl --vacuum-time=7d
# 5. 找到并删除大文件
$ find / -type f -size +500M -exec ls -lh {} \; 2>/dev/null
场景四:批量操作文件
# 批量重命名:将所有 .jpeg 改为 .jpg
$ for f in *.jpeg; do mv "$f" "${f%.jpeg}.jpg"; done
# 批量替换文件中的字符串
$ grep -rl "old-server.com" /etc/nginx/ | xargs sed -i 's/old-server.com/new-server.com/g'
# 统计某类文件数量
$ find . -name "*.py" | wc -l
# 批量修改权限
$ find /var/www -type f -exec chmod 644 {} \;
$ find /var/www -type d -exec chmod 755 {} \;
场景五:查看日志分析访问情况
# 查看访问量最高的 IP
$ awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
5234 192.168.1.100
3421 10.0.0.50
1205 172.16.0.20
# 统计 HTTP 状态码分布
$ awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn
18542 200
2341 304
456 404
23 500
# 查看每小时的请求量
$ awk '{print $4}' /var/log/nginx/access.log | cut -d: -f2 | uniq -c
场景六:安全加固基础
# 1. 查看最近的失败登录
$ sudo lastb | head -20
# 显示尝试登录失败的记录,如果数量巨大说明有人在暴力破解
# 2. 查看当前登录的用户
$ who
ubuntu pts/0 2026-05-28 08:00 (192.168.1.50)
# 3. 查看哪些端口对外开放
$ ss -tlnp
# 关注 0.0.0.0 开头的——这些是对所有网卡开放的端口
# 4. 查看定时任务(排查后门)
$ crontab -l
$ sudo crontab -l
$ ls -la /etc/cron.*
附录:常见命令速查表
| 分类 | 命令 | 用途 |
|---|---|---|
| 目录 | pwd |
显示当前路径 |
| 目录 | ls -la |
列出所有文件及详情 |
| 目录 | cd |
切换目录 |
| 目录 | mkdir -p |
递归创建目录 |
| 文件 | cp -r |
递归复制 |
| 文件 | mv |
移动/重命名 |
| 文件 | rm -rf |
强制递归删除 |
| 文件 | find |
查找文件 |
| 文件 | cat / head / tail |
查看文件内容 |
| 权限 | chmod 755 |
修改权限 |
| 权限 | chown |
修改所有者 |
| 文本 | grep |
搜索文本 |
| 文本 | sed |
流编辑替换 |
| 文本 | awk |
文本分析 |
| 压缩 | tar -czvf |
打包压缩 |
| 压缩 | tar -xzvf |
解压 |
| 压缩 | zip -r / unzip |
ZIP 压缩/解压 |
| 进程 | ps aux |
查看所有进程 |
| 进程 | top |
实时监控 |
| 进程 | kill -9 |
强制杀进程 |
| 服务 | systemctl start/stop/status |
服务管理 |
| 网络 | ping |
测试连通性 |
| 网络 | ss -tlnp |
查看监听端口 |
| 网络 | curl / wget |
下载请求 |
| 网络 | ssh / scp |
远程连接/传输 |
| 系统 | df -h |
磁盘使用 |
| 系统 | free -h |
内存使用 |
| 系统 | uname -a |
系统信息 |
| 用户 | sudo |
管理员权限 |
| 用户 | useradd / passwd |
用户管理 |
📚 学习建议
- 动手实践:在虚拟机或云服务器上实际操作,光看不练记不住
- 善用
man:man ls可以查看任何命令的完整手册,按q退出- 善用
--help:ls --help能快速查看命令用法- 从小处开始:先掌握
ls, cd, cat, cp, mv, rm, grep,再逐步扩展- 不要怕犯错:在测试环境里大胆尝试,
rm操作前多看一眼路径就行
本教程最后更新:2026年5月28日