一、目录和文件操作
1. 基本导航命令
pwd - 显示当前工作目录
pwd # 显示当前所在目录的绝对路径
ls - 列出目录内容
ls # 列出当前目录内容
ls -l # 详细列表格式
ls -a # 显示所有文件(包括隐藏文件)
ls -lh # 人类可读的文件大小
ls -lt # 按时间排序
ls -R # 递归列出子目录
ls /path # 列出指定目录内容
cd - 切换目录
cd # 切换到用户主目录
cd ~ # 切换到用户主目录
cd /path # 切换到绝对路径
cd .. # 切换到上级目录
cd - # 切换到上一个目录
cd ../dir # 切换到上级目录的某个子目录
2. 特殊路径符号
. # 当前目录
.. # 上级目录
~ # 当前用户的主目录
- # 上一个工作目录
/ # 根目录
二、文件管理
1. 创建目录和文件
mkdir - 创建目录
mkdir dirname # 创建单个目录
mkdir dir1 dir2 # 创建多个目录
mkdir -p parent/child # 递归创建多级目录
touch - 创建文件或更新时间戳
touch filename # 创建空文件或更新文件时间
touch file1 file2 # 创建多个文件
2. 文件查看命令
cat - 连接并显示文件
cat file # 显示整个文件内容
cat file1 file2 # 连接多个文件并显示
cat > file # 创建新文件(输入内容后Ctrl+D保存)
cat file1 >> file2 # 将file1追加到file2末尾
more - 分页显示文件
more file # 逐页显示文件内容
# 操作键:空格(下一页),Enter(下一行),q(退出)
less - 更强大的分页显示
less file # 分页显示,支持上下滚动
# 操作键:空格(下一页),b(上一页),/搜索,q(退出)
head - 显示文件开头
head file # 显示文件前10行
head -n 20 file # 显示文件前20行
head -c 100 file # 显示文件前100字节
tail - 显示文件末尾
tail file # 显示文件后10行
tail -n 20 file # 显示文件后20行
tail -f file # 实时跟踪文件变化(常用于日志)
tail -F file # 实时跟踪,文件被删除重建后继续跟踪
3. 文件操作命令
cp - 复制文件或目录
cp file1 file2 # 复制文件
cp file dir/ # 复制文件到目录
cp -r dir1 dir2 # 递归复制目录
cp -i file1 file2 # 交互式复制(覆盖前确认)
cp -v file1 file2 # 显示复制进度
mv - 移动或重命名
mv file1 file2 # 重命名文件
mv file dir/ # 移动文件到目录
mv dir1 dir2 # 移动或重命名目录
mv -i file1 file2 # 交互式移动
rm - 删除文件或目录
rm file # 删除文件
rm -r dir # 递归删除目录
rm -f file # 强制删除,不提示
rm -rf dir # 强制递归删除目录(谨慎使用!)
rm -i file # 交互式删除
三、文件查找和定位
1. 命令和文件查找
which - 查找命令位置
which ls # 显示ls命令的完整路径
which python # 显示python命令位置
find - 强大的文件查找
find /path -name "filename" # 按名称查找
find . -name "*.txt" # 查找当前目录所有txt文件
find /home -user username # 按用户查找
find /var -type f -mtime -7 # 查找7天内修改的文件
find . -size +10M # 查找大于10MB的文件
find . -name "*.log" -exec rm {} \; # 查找并删除
2. 文本处理
echo - 输出文本
echo "Hello World" # 输出文本
echo $PATH # 输出环境变量
echo -e "Line1\nLine2" # 解释转义字符
echo "text" > file # 输出重定向到文件
wc - 统计文本
wc file # 统计行数、单词数、字节数
wc -l file # 只统计行数
wc -w file # 只统计单词数
wc -c file # 只统计字节数
四、文本编辑器
1. 常用文本编辑器
vim - 强大的文本编辑器
vim file # 用vim打开文件
# 基本模式:
# 正常模式:移动光标、删除、复制等
# 插入模式:按 i 进入,输入文本
# 命令模式:按 : 进入,执行命令
# 常用命令:
# i - 进入插入模式
# Esc - 返回正常模式
# :w - 保存
# :q - 退出
# :wq - 保存并退出
# :q! - 强制退出不保存
# dd - 删除当前行
# /text - 搜索文本
nano - 简单易用的编辑器
nano file # 用nano打开文件
# 常用快捷键:
# Ctrl+O - 保存
# Ctrl+X - 退出
# Ctrl+W - 搜索
# Ctrl+K - 剪切行
# Ctrl+U - 粘贴
五、系统管理
1. 系统服务管理
systemctl - 系统服务管理
systemctl start service # 启动服务
systemctl stop service # 停止服务
systemctl restart service # 重启服务
systemctl status service # 查看服务状态
systemctl enable service # 设置开机启动
systemctl disable service # 禁用开机启动
systemctl list-units # 列出所有单元
2. 链接管理
链接命令
# 硬链接
ln source target # 创建硬链接
# 软链接(符号链接)
ln -s source target # 创建软链接
ln -s /path/file linkname # 创建指向绝对路径的软链接
# 区别:
# 硬链接:与原始文件相同的inode,删除原始文件不影响
# 软链接:不同的inode,类似Windows快捷方式,删除原始文件后失效
3. 时间日期
date - 日期时间操作
date # 显示当前日期时间
date +%Y-%m-%d # 显示年月日
date +%H:%M:%S # 显示时分秒
date -d "yesterday" # 显示昨天日期
date -d "1 week ago" # 显示一周前日期
date "+%s" # 显示时间戳
六、关机重启命令
# 10分钟后关机
shutdown -h +10
# 指定时间关机(17:30)
shutdown -h 17:30
# 立即关机
shutdown -h now
# 立即重启
shutdown -r now
# 取消已计划的关机
shutdown -c
# 立即重启
reboot
# 强制重启
reboot -f
七、打包压缩
一、核心概念区分
| 操作 | 目的 | 工具 | 效果 |
|---|---|---|---|
| 打包 | 将多个文件/目录合并为单个文件 | tar, cpio | 文件数量↓,体积基本不变 |
| 压缩 | 减小单个文件的体积 | gzip, bzip2, xz, zip | 文件体积↓,数量不变 |
最佳实践:先打包后压缩 → .tar + .gz = .tar.gz
二、打包工具详解
1. tar - 最主流的打包工具
基本语法:
tar [选项] 打包后的文件名 要打包的文件或目录...
常用选项:
-c:创建新的打包文件-x:解包-t:查看打包文件内容-v:显示详细过程-f:指定打包文件名-z:通过 gzip 过滤(压缩/解压)-j:通过 bzip2 过滤-J:通过 xz 过滤
三、压缩工具详解
压缩效率对比(通常情况)
| 工具 | 扩展名 | 压缩率 | 速度 | 资源占用 |
|---|---|---|---|---|
gzip | .gz | 中等 | 快 | 低 |
bzip2 | .bz2 | 高 | 慢 | 中 |
xz | .xz | 最高 | 最慢 | 高 |
zip | .zip | 中等 | 中等 | 低 |
四、实际使用场景大全
场景 1:基本打包与查看
# 打包目录(不压缩)
tar -cvf project.tar /path/to/project/
# 查看打包内容
tar -tf project.tar
# 解包
tar -xvf project.tar
场景 2:打包并压缩(最常用)
# 1. 使用 gzip 压缩 (.tar.gz 或 .tgz)
tar -czvf project.tar.gz /path/to/project/
# 2. 使用 bzip2 压缩 (.tar.bz2)
tar -cjvf project.tar.bz2 /path/to/project/
# 3. 使用 xz 压缩 (.tar.xz) - 压缩率最高
tar -cJvf project.tar.xz /path/to/project/
场景 3:解压各种格式
# 解压 .tar.gz
tar -xzvf project.tar.gz
# 解压 .tar.bz2
tar -xjvf project.tar.bz2
# 解压 .tar.xz
tar -xJvf project.tar.xz
# 万能解压(自动识别格式)
tar -xvf project.tar.*
场景 4:排除特定文件
# 排除 node_modules 目录和所有 .log 文件
tar -czvf project.tar.gz --exclude='node_modules' --exclude='*.log' /path/to/project/
# 从文件读取排除列表
tar -czvf project.tar.gz -X exclude_list.txt /path/to/project/
exclude_list.txt 内容:
node_modules
*.log
*.tmp
场景 5:增量备份
# 创建全量备份
tar -czvf full_backup.tar.gz /home/user/
# 创建增量备份(仅备份比指定时间新的文件)
tar -czvf incremental_backup.tar.gz --newer-mtime="2024-01-01" /home/user/
场景 6:分割大文件
# 打包压缩后分割为 100M 的文件
tar -czvf - /path/to/large_dir/ | split -b 100M - large_backup.tar.gz.part
# 合并并解压
cat large_backup.tar.gz.part* | tar -xzvf -
五、其他压缩工具
1. zip / unzip - 跨平台兼容
# 压缩
zip -r project.zip /path/to/project/
# 加密压缩
zip -r -e encrypted_project.zip /path/to/project/
# 解压
unzip project.zip
# 查看内容
unzip -l project.zip
2. 7z - 高压缩率
# 安装
sudo apt install p7zip-full # Debian/Ubuntu
sudo yum install p7zip-full # CentOS/RHEL
# 压缩
7z a project.7z /path/to/project/
# 解压
7z x project.7z
六、实用技巧和最佳实践
1. 压缩级别调整
# gzip 压缩级别(1-9,默认6)
tar -czvf -9 project.tar.gz /path/to/project/
# 使用最高压缩级别(速度最慢,体积最小)
tar -cvf project.tar /path/to/project/ && xz -9 project.tar
2. 保留文件权限和属性
# 保留所有权限、所有者等信息(通常需要root权限)
sudo tar -czpvf backup.tar.gz /etc/important_config/
# 解压时保留权限
tar -xzpf backup.tar.gz
3. 仅打包特定文件类型
# 只打包所有的 .txt 和 .pdf 文件
find /path/to/documents/ -name "*.txt" -o -name "*.pdf" | tar -czvf docs.tar.gz -T -
4. 查看压缩文件信息
# 查看压缩比等信息
gzip -l file.txt.gz
xz -l file.txt.xz
# 查看 tar 文件详细内容
tar -tvf project.tar.gz
七、常用命令速查表
| 操作 | 命令 |
|---|---|
| 打包目录 | tar -cvf name.tar /dir |
| 打包并gzip压缩 | tar -czvf name.tar.gz /dir |
| 打包并bzip2压缩 | tar -cjvf name.tar.bz2 /dir |
| 打包并xz压缩 | tar -cJvf name.tar.xz /dir |
| 解压.tar.gz | tar -xzvf file.tar.gz |
| 解压.tar.bz2 | tar -xjvf file.tar.bz2 |
| 解压.tar.xz | tar -xJvf file.tar.xz |
| 查看打包内容 | tar -tf file.tar.gz |
| zip压缩 | zip -r name.zip /dir |
| zip解压 | unzip file.zip |
| 创建加密压缩 | zip -e secure.zip file1 file2 |
八、选择指南
根据需求选择工具:
- 日常使用:
.tar.gz(速度与体积的平衡) - 最大压缩率:
.tar.xz(不关心时间,只要最小体积) - Windows兼容:
.zip(与Windows用户分享) - 配置文件备份:
.tar.gz并保留权限 - 大文件分发:分卷压缩 +
.tar.gz
八、命令组合与参数传递
一、核心概念
在 Linux 中,我们经常需要将多个命令组合使用,或者将一个命令的输出作为另一个命令的参数。主要有以下几种技术:
| 技术 | 作用 | 使用场景 |
|---|---|---|
| (管道) | 将一个命令的输出作为另一个命令的输入 | 命令流水线处理 |
xargs | 将标准输入转换为命令行参数 | 处理大量文件、参数传递 |
-exec | find 命令的内置参数处理 | 对找到的每个文件执行命令 |
` ` (反引号) | 命令替换(旧语法) | 将命令输出嵌入到其他命令中 |
$( ) | 命令替换(新语法) | 同上,更现代、更安全 |
二、| (管道) - 数据流传递
基本概念
- 将前一个命令的标准输出作为后一个命令的标准输入
- 数据流级别的传递
实用示例
1. 基础文本处理
# 查看日志并搜索特定内容
cat app.log | grep "ERROR"
# 统计当前目录文件数量
ls -la | wc -l
# 查看进程并过滤
ps aux | grep nginx
2. 多级管道处理
# 复杂的文本处理流程
cat access.log | grep "404" | awk '{print $7}' | sort | uniq -c | sort -nr
3. 实时监控
# 实时监控日志文件
tail -f app.log | grep "Exception"
# 监控网络连接
netstat -tulpn | grep :80
4. 数据转换
# 将命令输出转换为大写
echo "hello world" | tr '[:lower:]' '[:upper:]'
# JSON 格式化处理
curl -s http://api.example.com/data | jq '.results[]'
三、xargs - 参数构造器
基本概念
- 将标准输入转换为命令行参数
- 解决"参数列表过长"的问题
- 更灵活的参数控制
实用示例
1. 基础文件操作
# 查找并删除(比 -delete 更灵活)
find . -name "*.tmp" | xargs rm -f
# 查找并复制到目标目录
find . -name "*.jpg" | xargs cp -t /backup/images/
2. 控制参数数量
# 每次只传递 10 个文件给 rm(避免参数过长)
find . -name "*.log" | xargs -n 10 rm
# 一次处理一个文件(更安全)
find . -name "*.txt" | xargs -I {} echo "Processing: {}"
3. 并行处理
# 使用 4 个进程并行处理
find . -name "*.json" | xargs -P 4 -I {} jq '.' {} > /dev/null
4. 复杂参数构造
# 为每个文件构造复杂命令
find . -name "*.bak" | xargs -I {} sh -c 'mv "$1" "${1%.bak}.backup"' _ {}
# 处理带空格的文件名(安全方式)
find . -name "*.txt" -print0 | xargs -0 -I {} echo "File: {}"
5. 批量下载/处理
# 从文件列表批量下载
cat url_list.txt | xargs -n 1 wget
# 批量转换图片格式
find . -name "*.png" | xargs -I {} convert {} {}.jpg
四、-exec - find 命令的集成处理
基本概念
find命令的内置参数处理功能- 对每个找到的文件立即执行命令
- 使用
{}作为文件占位符,\;表示命令结束
实用示例
1. 基础文件操作
# 查找并删除
find . -name "*.tmp" -exec rm -f {} \;
# 查找并更改权限
find . -name "*.sh" -exec chmod +x {} \;
2. 文件内容处理
# 在多个文件中搜索文本
find . -name "*.java" -exec grep -l "public static" {} \;
# 批量替换文件内容
find . -name "*.config" -exec sed -i 's/old/new/g' {} \;
3. 复杂命令执行
# 对每个文件执行多条命令
find . -name "*.log" -exec sh -c 'echo "Processing: $1"; wc -l "$1"' _ {} \;
# 文件信息统计
find . -name "*.jpg" -exec identify {} \; | wc -l
4. + 语法优化(类似 xargs)
# 使用 + 更高效(一次性传递多个参数)
find . -name "*.txt" -exec cp {} /backup/ +
# 批量打包
find . -name "*.java" -exec tar -czf source_code.tar.gz {} +
五、命令替换:` ` 和 $( )
基本概念
- 将命令的输出结果作为其他命令的参数或变量值
$( )是现代推荐的语法` `是传统语法,存在嵌套和转义问题
实用示例
1. 变量赋值
# 将命令结果保存到变量
current_date=$(date +%Y-%m-%d)
file_count=$(ls -la | wc -l)
system_uptime=$(uptime -p)
echo "当前日期: $current_date"
echo "文件数量: $file_count"
2. 命令参数
# 使用命令输出作为其他命令的参数
tar -czf backup-$(date +%Y%m%d).tar.gz /path/to/backup
# 查找最近修改的文件
ls -t | head -n $(expr $(ls | wc -l) / 2)
3. 循环处理
# 对命令输出的每一行进行处理
for file in $(find . -name "*.txt"); do
echo "处理文件: $file"
wc -l "$file"
done
4. 复杂嵌套
# $( ) 支持嵌套,反引号不支持
total_size=$(du -sh $(find . -name "*.log" -type f) | awk '{sum+=$1} END{print sum}')
# 计算目录深度
max_depth=$(find . -type d -printf '%d\n' | sort -rn | head -1)
5. 条件判断
# 根据命令结果进行判断
if [ $(who | wc -l) -gt 2 ]; then
echo "系统中有多个用户登录"
fi
# 检查服务状态
if systemctl is-active --quiet nginx; then
echo "Nginx 正在运行"
fi
六、命令行特殊符号
1. &&
前一个命令执行成功才执行后一个命令
2. ||
前一个命令执行失败后才执行后一个命令
3. ;
不管前一个命令成功还是失败,都会执行下一个命令。
七、技术对比与选择指南
执行机制对比
| 场景 | 推荐方案 | 原因 |
|---|---|---|
| 简单的文本流处理 | | (管道) | 直接、高效 |
| 处理 find 结果 | -exec 或 xargs | 集成性好 |
| 大量文件处理 | xargs | 避免参数过长 |
| 需要并行处理 | xargs -P | 性能最优 |
| 命令结果作为参数 | $( ) | 现代、安全 |
| 嵌套命令替换 | $( ) | 唯一选择 |
性能考虑
# 慢:为每个文件启动一次 rm
find . -name "*.tmp" -exec rm {} \;
# 快:一次性传递多个文件(类似 xargs)
find . -name "*.tmp" -exec rm {} +
# 最快:使用 xargs 并行处理
find . -name "*.tmp" | xargs -P 4 rm
安全性考虑
# 危险:可能处理带空格的文件名错误
find . -name "*.txt" | xargs rm
# 安全:处理带空格和特殊字符的文件名
find . -name "*.txt" -print0 | xargs -0 rm
# 最安全:使用 -exec
find . -name "*.txt" -exec rm {} \;
七、高级技巧与实战案例
1. 组合使用技巧
# 查找大文件并交互式删除
find . -size +100M -type f | xargs -p rm
# 批量重命名文件
find . -name "*.jpeg" -exec bash -c 'mv "$1" "${1%.jpeg}.jpg"' _ {} \;
2. 错误处理
# 忽略处理中的错误
find . -name "*.txt" -exec some_command {} \; 2>/dev/null
# xargs 错误处理
find . -name "*.log" | xargs -I {} sh -c 'process "$1" || echo "Failed: $1"' _ {}
3. 性能监控
# 带时间统计的处理
time find . -name "*.java" -exec javac {} \;
# 比较不同方法的性能
time find . -name "*.tmp" -delete
time find . -name "*.tmp" | xargs rm
4. 复杂流水线
# 完整的日志分析流水线
find /var/log -name "*.log" -mtime -7 -type f | \
xargs -P 4 -I {} sh -c 'echo "Processing: $1"; grep "ERROR" "$1" | wc -l' _ {} | \
awk '{sum+=$1} END{print "Total errors:", sum}'
八、速查表
| 需求 | 命令示例 |
|---|---|
| 简单文本过滤 | cat file | grep pattern |
| 查找并删除 | find . -name "*.tmp" -exec rm {} \; |
| 批量处理文件 | find . -name "*.txt" | xargs -I {} command {} |
| 命令结果作为变量 | count=$(ls | wc -l) |
| 并行处理 | find . -name "*.jpg" | xargs -P 4 convert |
| 安全文件名处理 | find . -print0 | xargs -0 command |
| 嵌套命令 | size=$(du -sh $(find . -name "*.log")) |
Comments NOTHING