Linux 基础指令详解 ------ 从入门到熟练
📌 本文适合 Linux 初学者,涵盖最常用的 20+ 条指令,配合示例帮助快速上手。
1. ls
作用: 列出目录中的文件和子目录信息。
cpp
ls [选项] [目录]
| 选项 | 作用 |
|---|---|
-l |
显示详细信息(权限、大小、时间等) |
-a |
显示所有文件,包括隐藏文件(. 开头) |
-h |
文件大小以 KB/MB 显示,更易读 |
-t |
按修改时间排序,最新优先 |
-R |
递归显示子目录内容 |
常用示例:
cpp
ls -l # 详细列表
ls -a # 显示隐藏文件
ls -lh # 详细 + 易读大小
ls -lhS # 按文件大小排序(大→小)
ls *.txt # 只列出 .txt 文件
ls -l 输出解读:
cpp
-rw-r--r-- 1 user group 4096 Jun 10 10:00 file.txt
| 字段 | 含义 |
|---|---|
-rw-r--r-- |
文件类型 + 权限(所有者/组/其他) |
1 |
硬链接数 |
user / group |
所有者 / 所属组 |
4096 |
文件大小(字节) |
Jun 10 10:00 |
最后修改时间 |
file.txt |
文件名 |
💡 小技巧:
.(当前目录)和..(父目录)是文件系统的标准组成部分,ls -a时会显示。
2. pwd
作用: 显示当前所在的完整路径。
cpp
pwd
# 输出示例:/home/user/projects
3. cd
作用: 切换工作目录。
cd [目录]
| 命令 | 效果 |
|---|---|
cd .. |
返回上一级目录 |
cd ~ |
进入当前用户家目录 |
cd - |
返回上次所在目录 |
cd /home/user/ |
绝对路径跳转 |
cd ../day02/ |
相对路径跳转 |
💡 Linux 目录结构是一棵倒置的树,根节点为
/,所有文件和目录都挂载在其下。
4. touch
作用: 创建空文件,或更新已有文件的时间戳。
touch [选项] 文件名
cpp
touch file.txt # 创建空文件(已存在则更新时间戳)
touch a.txt b.txt c.txt # 同时创建多个文件
touch -a file.txt # 只更新访问时间
touch -m file.txt # 只更新修改时间
5. mkdir
作用: 创建目录(文件夹)。
mkdir [选项] 目录名
| 选项 | 作用 |
|---|---|
-p |
递归创建多级目录(不存在则自动创建父目录) |
-m |
创建时指定权限 |
-v |
显示创建过程 |
mkdir new_folder # 创建单个目录
mkdir dir1 dir2 dir3 # 同时创建多个目录
mkdir -p a/b/c # 递归创建多级目录
mkdir -p project/{src,doc,test} # 一次创建多个子目录
⚠️ 直接
mkdir a/b/c若a不存在会报错,加上-p即可解决。
6. rmdir / rm
rmdir ------ 删除空目录
rmdir 目录名 # 删除空目录
rmdir -p dir1/dir2 # 递归删除(若父目录也为空则一起删)
rm ------ 删除文件或目录
rm [选项] 文件或目录
| 选项 | 作用 |
|---|---|
-r |
递归删除目录及其内容 |
-f |
强制删除,不提示 |
-i |
删除前逐一询问确认 |
rm file.txt # 删除文件
rm -r dir1 # 删除目录(含子文件)
rm -i *.txt # 交互式删除所有 .txt 文件
❌ 严禁执行:
rm -rf /,这会删除系统所有文件,造成灾难性后果!
| 对比 | rmdir | rm |
|---|---|---|
| 操作对象 | 仅空目录 | 文件或目录 |
| 安全性 | 高 | 低(需谨慎) |
7. cp
作用: 复制文件或目录。
cp [选项] 源 目标
| 选项 | 作用 |
|---|---|
-r |
递归复制目录(复制目录必须加) |
-i |
覆盖前询问确认 |
-v |
显示复制过程 |
-p |
保留原文件权限、时间戳等属性 |
-u |
仅复制比目标更新的文件(增量备份) |
cp file.txt backup.txt # 复制并重命名
cp notes.txt ~/Documents/ # 复制到指定目录
cp -r project/ project_backup/ # 递归复制整个目录
cp *.jpg /photos/ # 复制所有 jpg 文件
cp -p -r website/ /var/www/ # 保留权限和时间戳
8. mv
作用: 移动文件/目录,或重命名。
mv [选项] 源 目标
| 选项 | 作用 |
|---|---|
-i |
覆盖前提示确认 |
-v |
显示操作过程 |
-n |
禁止覆盖已有文件 |
-b |
覆盖前自动备份(追加 ~ 后缀) |
mv file.txt /target_dir/ # 移动文件
mv old_name.txt new_name.txt # 重命名文件
mv old_dir/ new_dir/ # 重命名目录
mv *.png ~/images/ # 批量移动文件
💡 mv vs cp+rm: 在同一文件系统内,
mv只修改路径指向,不复制数据,速度更快;跨文件系统时等同于cp + rm。
9. cat
作用: 查看文件内容(适合短文件)。
cat [选项] 文件
| 选项 | 作用 |
|---|---|
-n |
对所有行显示行号 |
-b |
只对非空行显示行号 |
-s |
合并连续空行为一行 |
cat file.txt # 查看文件
cat -n file.txt # 显示行号
10. more / less
more ------ 基础分页查看
more 文件名
| 按键 | 功能 |
|---|---|
空格 |
向下翻一页 |
Enter |
向下翻一行 |
q |
退出 |
less ------ 增强版分页查看(推荐)
less [选项] 文件名
| 选项 | 作用 |
|---|---|
-N |
显示行号 |
-i |
搜索时忽略大小写 |
-S |
禁止自动换行 |
+F |
实时追踪文件末尾(类似 tail -f) |
交互操作:
| 按键 | 功能 |
|---|---|
空格 / PageDown |
向下翻页 |
b / PageUp |
向上翻页 |
/keyword |
向下搜索关键词 |
?keyword |
向上搜索关键词 |
G |
跳到文件末尾 |
gg |
跳到文件开头 |
q |
退出 |
💡 推荐用 less 替代 more,因为 less 支持上下翻页和文本搜索,功能更完整。
11. head / tail
head ------ 查看文件开头
head [选项] 文件
head file.txt # 默认显示前 10 行
head -n 5 file.txt # 显示前 5 行
head -c 100 file.txt # 显示前 100 字节
tail ------ 查看文件末尾
tail [选项] 文件
| 选项 | 作用 |
|---|---|
-n |
指定显示行数 |
-f |
实时跟踪文件更新(监控日志必备) |
-c |
指定显示字节数 |
tail file.txt # 默认显示最后 10 行
tail -n 20 file.log # 显示最后 20 行
tail -f /var/log/nginx/error.log # 实时监控日志(Ctrl+C 退出)
组合技巧 ------ 提取文件中间部分:
head -n 20 file.log | tail -n 10 # 提取第 11~20 行
| 命令 | 查看位置 | 典型用途 |
|---|---|---|
head |
文件开头 | 预览文件结构、CSV 表头 |
tail |
文件末尾 | 监控日志、查看最新记录 |
12. date / cal
date ------ 显示或设置系统时间
date # 显示当前时间
date +"%Y-%m-%d" # 格式化输出:2024-06-11
date +"%Y-%m-%d %H:%M:%S" # 完整日期时间
date -d "3 days ago" # 计算 3 天前的日期
date +%s # 输出 Unix 时间戳
常用格式符:
| 符号 | 含义 | 示例 |
|---|---|---|
%Y |
四位年份 | 2024 |
%m |
月份 | 06 |
%d |
日期 | 11 |
%H:%M:%S |
时分秒 | 14:30:45 |
%A |
星期全称 | Tuesday |
cal ------ 查看日历
cal # 显示当月日历
cal 2025 # 显示 2025 年全年日历
cal -3 # 显示上月、本月、下月
cal -y # 显示当年日历
13. find
作用: 在目录中递归搜索文件,支持按名称、大小、时间、权限等多种条件过滤。
find [路径] [条件] [操作]
按名称搜索:
find /etc -name "*.conf" # 搜索 .conf 文件(区分大小写)
find . -iname "readme*" # 搜索(不区分大小写)
按类型/大小/时间搜索:
find ~ -type f -size +1M # 家目录下大于 1MB 的文件
find /tmp -size -100k # /tmp 下小于 100KB 的文件
find /backup -mtime +30 # 30 天前修改过的文件
限制搜索深度:
find . -maxdepth 2 -name "*.conf" # 仅搜索当前目录和一级子目录
14. grep
作用: 在文件或输入流中搜索匹配指定模式的文本行,支持正则表达式。
grep [选项] "搜索模式" [文件]
| 选项 | 作用 |
|---|---|
-i |
忽略大小写 |
-v |
反向匹配(显示不含该模式的行) |
-n |
显示行号 |
-r |
递归搜索子目录 |
-c |
统计匹配行数 |
-A NUM |
显示匹配行及后 N 行 |
-w |
全词匹配 |
grep -i "error" /var/log/syslog # 忽略大小写搜索
grep -n "main()" program.c # 显示行号
grep -r "TODO" ~/projects/ # 递归搜索目录
grep -v "^#" /etc/nginx/nginx.conf # 过滤注释行
grep -i -A 2 "error" error.log # 显示错误及后 2 行
ps aux | grep -v "grep" | grep "nginx" # 查找 nginx 进程
常用正则:
| 模式 | 含义 |
|---|---|
^ |
行首 |
$ |
行尾 |
. |
任意单个字符 |
* |
前一字符 0 次或多次 |
[abc] |
匹配 a、b 或 c |
15. zip / unzip / tar
zip ------ 创建压缩包
zip [选项] 压缩包.zip 文件或目录
zip notes.zip notes.txt # 压缩单个文件
zip -r website.zip /var/www/html/ # 递归压缩目录
zip -e secure.zip private.txt # 加密压缩(会提示输入密码)
zip -r project.zip src/ -x "*.tmp" # 排除 .tmp 文件
unzip ------ 解压文件
unzip archive.zip # 解压到当前目录
unzip project.zip -d ~/projects/ # 解压到指定目录
unzip -l backup.zip # 查看压缩包内容(不解压)
unzip -P mypassword secure.zip # 解压加密文件
tar ------ 打包 / 解包(Linux 首选)
tar [选项] 归档文件名 [文件或目录]
常用操作:
# 打包并压缩(gzip)
tar -czvf backup.tar.gz /data/
# 解压到当前目录
tar -xzvf backup.tar.gz
# 解压到指定目录
tar -xzvf backup.tar.gz -C /backup/
# 查看归档内容
tar -tzvf backup.tar.gz
选项含义:
| 选项 | 作用 |
|---|---|
-c |
创建归档 |
-x |
解压归档 |
-t |
查看归档内容 |
-z |
使用 gzip 压缩 |
-j |
使用 bzip2 压缩 |
-v |
显示过程 |
-f |
指定归档文件名 |
压缩格式对比:
| 格式 | 选项 | 压缩率 | 速度 |
|---|---|---|---|
.tar |
-cf |
无压缩 | 最快 |
.tar.gz |
-czf |
中等 | 较快 |
.tar.bz2 |
-cjf |
高 | 慢 |
.tar.xz |
-cJf |
最高 | 最慢 |
💡 选哪个? Linux 系统管理优先用
tar;需要跨平台(Windows/macOS 兼容)用zip。
16. 常用快捷键
| 快捷键 | 功能 | 使用场景 |
|---|---|---|
Tab |
自动补全命令/路径 | 输入 ls /et 按 Tab 自动补全为 ls /etc/ |
Ctrl+C |
强制终止当前进程 | 停止卡住或不想等的命令 |
Ctrl+D |
退出终端或结束输入 | 相当于输入 exit |
其他常用命令:
uname -a # 查看系统信息(内核版本、主机名等)
man ls # 查看 ls 命令的详细手册
sudo reboot # 重启系统
sudo shutdown -h now # 立即关机
sudo shutdown -r +10 # 10 分钟后重启
sudo shutdown -c # 取消计划的关机
17. Shell 运行原理
Shell 是什么?
Shell 是用户与 Linux 内核之间的桥梁,本质是一个命令行解释器。
用户无法直接操作内核(太底层、太危险),Shell 负责:
- 解析用户输入的命令
- 转交给内核执行
- 返回执行结果给用户
📌 类比理解: 内核像汽车发动机,用户是驾驶员,Shell 就是方向盘和油门------把你的简单动作翻译成发动机能执行的指令。
ls 命令的执行流程
用户输入 ls -l
↓
Shell 解析命令参数
↓
Shell 调用 execve() 系统调用启动 ls 程序
↓
内核执行 ls,访问文件系统
↓
内核返回文件列表
↓
Shell 格式化输出到终端
输出重定向
| 符号 | 作用 |
|---|---|
> |
覆盖写入文件 |
>> |
追加写入文件 |
2> |
错误信息覆盖写入 |
2>> |
错误信息追加写入 |
/dev/null |
丢弃输出(黑洞) |
echo "hello" > file.txt # 覆盖写入
echo "world" >> file.txt # 追加写入
ls /no_exist 2>/dev/null # 错误信息不显示
管道符 |
管道将前一个命令的输出 作为后一个命令的输入,实现命令的串联协作。
ls -l /usr/bin | more # 分页查看目录列表
tail -f app.log | grep "ERROR" # 实时过滤日志中的错误
ps aux | grep "nginx" # 查找 nginx 进程
✅ 总结: 掌握本文中的命令,已经能应对绝大多数 Linux 日常操作。建议在虚拟机或云服务器中逐一练习,熟能生巧。
如有问题欢迎评论区留言交流!觉得有帮助的话点个赞 👍