返回文章列表
·19 分钟阅读

Linux 基本命令用法指南

刚接触命令行的小白,边查边用——Shell、文件、权限、进程、网络速查。

LinuxShellWSL

适用环境:WSL Ubuntu / 任意主流 Linux 发行版
目标读者:刚接触命令行的小白,边查边用
最后更新:2026-06-23


1. Shell 终端与快捷键

1.1 什么是 Shell?

Shell 是操作系统的"壳"——你输入命令,它帮你转交给内核执行。Ubuntu 默认是 Bash。

1.2 打开方式

  • WSL:任务栏搜索 Ubuntu,或 Windows Terminal 选 Ubuntu 标签
  • macOS:自带 Terminal.app / iTerm2

1.3 高频快捷键

快捷键含义
Ctrl + C强制中断当前命令(kill)
Ctrl + D退出当前 Shell / EOF
Ctrl + L清屏(清空当前屏幕)
Ctrl + Z挂起当前进程(fg 恢复 / bg 后台)
Ctrl + A光标跳到行首
Ctrl + E光标跳到行尾
Ctrl + W删除光标前一个单词
Tab自动补全文件名 / 命令
↑ / ↓查看历史命令
Ctrl + R反向搜索历史命令

1.4 目录概念速查

/                     ← Linux 根目录(一切从这里开始)
├── home              ← 用户目录
│   └── a1            ← 你的主目录(~ = /home/a1)
├── etc               ← 配置文件目录
├── var               ← 运行中变化的文件(日志 / 数据库)
├── tmp               ← 临时文件
├── usr               ← 系统程序 / 第三方工具
├── opt               ← 可选安装软件
├── root              ← 超级用户的主目录(别乱动)
└── mnt               ← WSL 挂载 Windows 盘的位置
    └── c             ← Windows C 盘(路径:/mnt/c/Users/xxx)

2. 文件目录操作

2.1 目录切换与显示

pwd               # 打印当前目录(绝对路径)
cd /path/to/dir   # 切换目录
cd ~              # 回主目录
cd -              # 回到上次所在的目录(往返切换超好用)
cd ..             # 上移一级
cd ../..          # 上移两级
ls                # 列出当前目录内容
ls -l             # 详细列表(权限 / 大小 / 时间 / 名)
ls -a             # 显示隐藏文件(包括 . 开头的)
ls -h             # 人类可读的文件大小(K/M/G)
ls -lht           # 组合:详细 + 可读 + 按时间倒序(最常用)
ll                # 很多发行版里 ls -l 的别名

2.2 目录操作

mkdir my-folder              # 新建目录
mkdir -p a/b/c               # 递归创建多层目录
rmdir my-folder              # 删除空目录(非空删不掉)
tree                         # 以树形结构展示目录(默认有时没装)
tree -L 2                    # 只看两级,装上方法:sudo apt install tree

2.3 文件操作

touch new.txt                # 新建空文件(或更新现有文件时间戳)
cp from.txt to.txt           # 复制文件
cp -r dir1 dir2              # 递归复制目录(-r = recursive)
mv old.txt new.txt           # 移动 / 重命名(同一目录就是改名)
rm file.txt                  # 删除文件
rm -r folder                 # 递归删除目录(-r)
rm -rf folder                # 强制递归删除,不管有没有内容(⚠️ 慎用)

2.4 操作示意

.
├── 创建文件夹  →  mkdir data
├── 进入文件夹  →  cd data
├── 新建文件    →  touch config.yaml
├── 复制文件    →  cp config.yaml config.bak
├── 移动/重命名 →  mv config.bak config.backup.yaml
└── 删除文件    →  rm config.backup.yaml

3. 文件查看与编辑

3.1 cat / less / head / tail

cat file.txt                 # 全部一次性打印(适合小文件)
cat -n file.txt              # 带行号
less file.txt                # 分页查看(适合大文件,空格下一页,q 退出)
head -n 20 file.txt          # 看前 20 行
tail -n 20 file.txt          # 看最后 20 行
tail -f app.log              # 实时追踪日志(默认 10 行)
tail -f -n 100 app.log       # 追踪最后 100 行(启动时就先看最近 100 行)

3.2 统计信息

wc -l file.txt               # 统计行数
wc -w file.txt               # 统计词数(英文)
wc -c file.txt               # 统计字节数(file size)

3.3 wc 命令流式管道

docker ps | wc -l           # 数一下 Docker 跑了几条

4. 查找与搜索

4.1 find(全盘 / 目录递归查找)

find . -name "*.java"                     # 当前目录下所有 .java 文件
find /home/a1 -mtime -7                   # 7 天内改动过的文件
find . -type d                            # 只查找目录
find . -size +10M                         # 大小超过 10MB 的文件
find . -name "*.txt" -exec rm {} \;       # 找到就删({} 是找到的路径)

常用参数速记:

参数含义
-name按文件名匹配(区分大小写)
-iname按文件名匹配(不区分大小写)
-type f只找文件
-type d只找目录
-mtime -77 天内修改过
-size +10M大于 10MB
-exec cmd {} \;对每个结果执行命令

4.2 grep(内容搜索)

grep "error" app.log                       # 搜索包含 error 的行
grep -r "function" src/                    # 递归搜索某个目录下的内容
grep -n "main" Main.java                   # 显示行号
grep -i "hello" file.txt                   # 忽略大小写
grep -v "DEBUG" app.log                    # 反选(排除 DEBUG 的)
grep -c "error" app.log                    # 只看匹配行数
grep --include="*.java" "TODO" .           # 仅搜索 .java 文件

4.3 whereis / which

which docker               # 找命令的可执行文件路径(看环境变量 PATH 里)
whereis java               # 找命令 + 手册 + 源码的位置

5. 用户与权限

5.1 查看当前用户

whoami                    # 显示当前登录用户名
id                        # 显示 uid / gid / 所属组
groups                    # 显示我在哪些用户组里

5.2 切用户

su - root                 # 切到 root(输入 root 密码)
su - a1                   # 切到指定用户(需知道对方密码)
sudo su -                 # 临时变 root
sudo -i                   # 同上

5.3 权限速查

Linux 每个文件都有 所有者 / 组 / 其他用户 三类权限:

ls -l file.txt
# 输出:-rw-r--r--  1 a1  users  0 Jun 23 10:00 file.txt
#        ↑  ↑     ↑   ↑     ↑
#        |  |     |   |     └─ 组名称
#        |  |     |   └─ 所有者用户
#        |  |     └─ 其他用户权限
#        |  └─ 组权限
#        └─ 所有者权限
字符含义数值
r读4
w写2
x执行1
rwx rwx rwx = 777 (全开)
rw- r-- r-- = 644 (默认文件)
rwx r-x r-x = 755 (目录 / 可执行程序)

修改权限:

chmod 755 script.sh          # 给 script.sh 可执行权限
chmod +x script.sh           # 同上一行(按符号改)
chmod 644 file.txt           # 只读保护
chown a1:docker file.txt     # 把属主改成 a1、组改成 docker

5.4 分组场景

# 把 a1 加入 docker 组(刚学 Docker 时会用到)
sudo usermod -aG docker $USER
newgrp docker                # 本次会话立即生效(不用重启终端)

6. 进程与系统信息

6.1 查看系统信息

uname -a                    # 查看内核 / 架构
cat /etc/os-release         # 查看发行版名称与版本
hostname                    # 查看主机名
uptime                      # 系统已运行时长 + 平均负载
df -h                       # 磁盘空间(人类可读)
free -h                     # 内存占用

6.2 top / htop

top                         # 交互式进程监视器(自带)
htop                        # 更现代美观,按 q 退出
# htop 可能没装:sudo apt install htop

6.3 ps 与进程查询

ps aux                      # 查看所有进程(最完整)
ps -ef                      # 另一种格式
ps -ef | grep java          # 找 Java 进程(grep 会把自己也列出来)
ps -ef | grep java | grep -v grep   # 过滤掉 grep 自身

6.4 kill / killall

kill 12345                  # 优雅结束 PID 12345(发 SIGTERM)
kill -9 12345               # 强制结束(类似 Windows 结束任务)
killall java                # 杀掉所有叫 java 的进程

7. 网络与连接

7.1 IP 与路由

ip addr                     # 查看网卡信息(类似 ifconfig)
hostname -I                 # 只打印 IP 地址
ping baidu.com              # 测试连通性
curl ifconfig.me            # 查看本机公网出口 IP

7.2 端口与连接

ss -tulnp                   # 查看端口监听情况(最现代,替代 netstat)
netstat -tlnp               # 同上,有些老环境还在用
# 端口被占用的常见排查:
ss -tulnp | grep 8080

7.3 下载与远程操作

curl https://example.com/file.tar.gz -o file.tar.gz   # 下载
wget https://example.com/file.tar.gz                   # 同上(更简单)
scp file.txt user@host:/path/                         # 从本机拷到远程
ssh user@host                                         # SSH 连接到远程

7.4 Docker 相关的几个端口技巧

# 查看 WSL IP,Windows 浏览器访问 Docker 服务时用到
hostname -I | awk '{print $1}'

8. 压缩与解压

命令操作示例
tar -czf压缩为 .tar.gztar -czf backup.tar.gz /path
tar -xzf解压 .tar.gztar -xzf backup.tar.gz
tar -cjf压缩为 .tar.bz2tar -cjf backup.tar.bz2 /path
tar -xjf解压 .tar.bz2tar -xjf backup.tar.bz2
unzip解压 .zipunzip file.zip
zip压缩为 .zipzip -r folder.zip folder/
# 把 /opt/data 打包到 ~/backup.tar.gz(保留目录结构)
tar -czf ~/backup.tar.gz -C /opt data

# 切割(默认 gzip,适用于 4G 限制 FAT32 等老文件系统)
tar -czf - /path | split -b 4G - backup.tar.gz.part

解压时常用 -C 指定解压目标目录:

tar -xzf backup.tar.gz -C /restore/path

9. 输入输出与管道

9.1 重定向

echo "hello" > file.txt     # 清空覆盖写入(新建或重写)
echo "world" >> file.txt    # 追加到末尾(不覆盖)
command 2> error.log        # 把标准错误重定向到文件
command > all.log 2>&1      # 标准输出 + 错误一起写入同一文件
command > /dev/null 2>&1    # 完全丢弃输出(静默)

9.2 管道(|)

# 把前一个命令的输出交给下一个命令
docker ps -a | grep xxx
ls -la /data | wc -l
cat app.log | grep "ERROR" | tail -20

9.3 环境变量

echo $HOME                  # 打印环境变量
printenv                    # 列出所有环境变量
export PORT=8080            # 设置一个环境变量(本次会话有效)
env | grep PORT             # 确认一下
history                     # 查看历史命令记录
history | grep docker       # 搜一下我最近敲过哪些 docker 命令

10. Vim 极简入门

Vim 是 Linux 自带的极简编辑器,不需要 install。虽然你可能会用 VS Code / nano,但懂 Vim 至少不会被困住。

10.1 三种模式

┌──────────┐    按 i      ┌──────────┐    按 Esc     ┌──────────┐
│ Normal   │ ───────────> │ Insert   │ ───────────> │ Normal   │
│ (命令)   │              │ (输入)    │              │ (命令)   │
└──────────┘              └──────────┘              └──────────┘
       ↑                      ↑                       ↑
    起始状态               可以打字了               ← 打字完回到这里

10.2 最小够用集合

在 Normal 模式:

i    # 进入 Insert 模式(开始输入)
Esc  # 回到 Normal 模式(什么输入都停了)

:w   # 保存
:q   # 退出
:wq  # 保存后退出
:x   # 保存后退出(和 :wq 几乎等价)
:q!  # 不保存强行退出

dd   # 删除整行
yy   # 复制一行
p    # 粘贴到下一行
u    # 撤回上一步(Undo)
Ctrl+r # 重做

10.3 实战:编辑配置文件

# 打开一个文件
vim /etc/hostname

# 进入 → 按 i 开始改 → Esc → :wq 保存退出
# 改了一半想放弃 → :q!

如果你实在受不了 Vim,先这么办:

# 装 nano(对新手友好)
sudo apt install nano

# 用 nano 打开(Ctrl+O 保存,Ctrl+X 退出)
nano myfile.txt

11. 常用速查表

场景命令
看当前目录在哪pwd
看目录里有哪些文件ls -lht
切到主目录cd ~
上移一级cd ..
新建目录mkdir -p a/b/c
改名mv old new
删除rm -rf folder
复制cp -r from to
看看文件前半段head -n 50 file.log
实时看日志tail -f app.log
搜索文件内容grep -rn "TODO" src/
找文件位置find . -name "*.jar"
看权限ls -l file.txt
改权限chmod 755 script.sh
看系统信息uname -a
看磁盘df -h
看内存free -h
看进程ps aux | grep java
杀掉进程kill -9 12345
看端口占用ss -tulnp
下载wget url
打包tar -czf backup.tar.gz folder/
解包tar -xzf backup.tar.gz
清屏clear 或 Ctrl+L
查看历史history
切到 rootsudo -i

12. 常见排障

12.1 命令提示 "command not found"

# 原因:命令不在当前 PATH 里,或者没装

which command_name       # 看看系统有没有
apt search command_name  # 搜一下仓库里有没有
sudo apt install command_name

12.2 Permission denied

# 两种解法:

# 1. 加执行权限
chmod +x script.sh
./script.sh

# 2. 用 sudo 提权(注意不推荐塞 to 生产脚本)
sudo command

12.3 sudo 报错 "user is not allowed to run sudo"

# 你是普通用户,但没被加到 sudo 组
# 切回一个能 sudo 的账户:
su - a1
# 或者让 a1:
usermod -aG sudo a1

12.4 WSL 磁盘占用大 / 释放空间

# 查看占用
du -sh /home/a1/* | sort -rh | head -20

# 清理 apt 缓存
sudo apt clean
sudo apt autoremove

# 清理 Docker 垃圾
docker system prune -a --volumes

# 清理日志
sudo journalctl --vacuum-size=100M

12.5 中文乱码

# 临时改
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8

# 永久改
echo 'export LANG=zh_CN.UTF-8' >> ~/.bashrc
source ~/.bashrc

# 让 apt 也能看中文(先装字体)
sudo apt install fonts-wqy-zenhei

附录:一键自测

把下面脚本保存成 self_check.sh,运行一下,不会再用就记下来:

#!/bin/bash
echo "=== 日期 ==="; date
echo "=== 用户 ==="; whoami
echo "=== 主机名 ==="; hostname
echo "=== 当前目录 ==="; pwd
echo "=== 系统 ==="; uname -a
echo "=== 发行版 ==="; cat /etc/os-release | head -5
echo "=== 磁盘 ==="; df -h / /home
echo "=== 内存 ==="; free -h
echo "=== 网卡 ==="; ip addr | grep "inet " | head -3
echo "=== 当前 PATH ==="; echo $PATH
echo "=== 历史命令前 5 条 ==="; history | head -5
echo "=== 最后命令行 ==="; history | tail -1
chmod +x self_check.sh
./self_check.sh

学习建议:日常用 WSL 时,强迫自己少用 Windows 图形工具,多用命令行完成目录打开 / 文件复制 / 进程启动。一周后自然就熟了。遇到卡住,Tab 补全 + Ctrl+C 中断 + history 回查,大概能解决 80% 新手问题。

Linux 基本命令用法指南 — Aohs