Linux基础命令教程

教程简介

零基础Linux命令行完整教程,涵盖目录操作、文件操作、权限管理、进程管理、网络命令、压缩解压、文本处理等核心技能,配有丰富实战运维场景和命令速查表,适合服务器运维初学者。

Linux 基础命令教程

🎯 适合零基础用户,从零开始掌握 Linux 命令行操作。 本教程基于常见 Linux 发行版(Ubuntu/CentOS),所有命令均经过实际验证。


目录

  1. 初识终端与基础概念
  2. 目录操作命令
  3. 文件操作命令
  4. 文件权限管理
  5. 文本处理命令
  6. 压缩与解压
  7. 进程管理
  8. 网络命令
  9. 磁盘与系统信息
  10. 用户与组管理
  11. 实用技巧与快捷键
  12. 实战场景:服务器日常运维

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 用户管理

📚 学习建议

  1. 动手实践:在虚拟机或云服务器上实际操作,光看不练记不住
  2. 善用 manman ls 可以查看任何命令的完整手册,按 q 退出
  3. 善用 --helpls --help 能快速查看命令用法
  4. 从小处开始:先掌握 ls, cd, cat, cp, mv, rm, grep,再逐步扩展
  5. 不要怕犯错:在测试环境里大胆尝试,rm 操作前多看一眼路径就行

本教程最后更新:2026年5月28日

内容声明

本文内容为AI技术学习教程,仅供学习参考。如涉及技术问题,欢迎通过 xurj005@163.com 与我们交流。

目录