返回文章列表
·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 -7 | 7 天内修改过 |
-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.gz | tar -czf backup.tar.gz /path |
tar -xzf | 解压 .tar.gz | tar -xzf backup.tar.gz |
tar -cjf | 压缩为 .tar.bz2 | tar -cjf backup.tar.bz2 /path |
tar -xjf | 解压 .tar.bz2 | tar -xjf backup.tar.bz2 |
unzip | 解压 .zip | unzip file.zip |
zip | 压缩为 .zip | zip -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 |
| 切到 root | sudo -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% 新手问题。