未记录事实核验 · 状态:现行内容
记录仅说明核验时间与维护状态,不保证适用于所有环境;使用前请留意正文中的版本、适用条件与风险提示。
warning 适用边界与维护说明
本表适用于 Linux 环境下的基础命令回忆和独立操作参考,不是可直接套用的生产脚本;部分选项依赖 GNU 工具或具体发行版,示例路径、主机、接口和软件环境须按实际情况替换。逗号分列仅适用于无字段内逗号、无字段内换行的简单文本,行数统计、表头处理及日志列位置和时间格式应遵循第十、十一节已注明的条件;awk 模式范围不能作为严格时间窗口。删除、覆盖、递归权限变更、进程终止及 rsync --delete 等操作须先确认目标和影响范围。本次仅作全文结构审阅,未执行命令或外部核验链接、接口及环境可用性。
数据工作常用命令速查 - 按场景分类
abstract 使用说明
这是一份按数据工作场景分类的命令速查表,不追求完整,只收录真正会用到的命令。 忘记命令时直接翻这里,找到之后去对应章节看详细用法。
一、基础导航与文件操作
# 查看当前位置
pwd
# 切换目录
cd /data/warehouse # 绝对路径
cd ../logs # 相对路径,上一级的 logs 目录
cd ~ # 回到家目录
cd - # 回到上次目录(在两个目录间反复横跳)
# 列出文件
ls -lh # 详细列表 + 人类可读大小
ls -lt # 按时间排序(最新在前)
ls -lhS # 按大小排序(最大在前)
ls -la # 显示隐藏文件
# 创建目录
mkdir -p /data/output/2026-03-18 # 递归创建多级目录
# 删除(谨慎!)
rm file.txt # 删除文件
rm -rf /data/old/ # 递归强制删除目录(危险!)
# 复制
cp -a /data/src/ /backup/ # 保留所有属性复制目录
cp file.conf file.conf.bak # 修改配置前先备份
# 移动/重命名
mv old_name.csv new_name.csv
mv /tmp/result.csv /data/output/
# 查看文件大小
du -sh /data/warehouse/ # 目录总大小
du -sh /data/* # 各子目录大小
df -h # 磁盘使用情况
二、文件查看与搜索
# 查看文件内容
cat config.txt # 小文件直接看
head -20 data.csv # 看前 20 行
tail -50 app.log # 看最后 50 行
tail -f app.log # 实时跟踪日志(监控必备!)
less data.csv # 翻页查看大文件
# 统计行数
wc -l data.csv
cat data.csv | wc -l
# 搜索文件内容
grep "ERROR" app.log # 搜索含 ERROR 的行
grep -i "error" app.log # 大小写不敏感
grep -n "ERROR" app.log # 显示行号
grep -v "DEBUG" app.log # 显示不含 DEBUG 的行
grep -c "ERROR" app.log # 只显示匹配行数
grep -C 3 "NullPointer" app.log # 同时显示前后 3 行上下文
grep -r "config_key" /etc/ # 递归搜索目录
# 搜索文件
find /data -name "*.csv" # 按名称查找
find /data -name "*.log" -mtime -1 # 一天内修改的日志
find /data -size +1G # 大于 1GB 的文件
find /tmp -name "*.tmp" -mtime +7 -exec rm {} \; # 删除 7 天前的临时文件
三、文本处理(grep/sed/awk)
# grep 搜索
grep -E "ERROR|WARN" app.log # 多模式匹配(或)
grep "^2026-03-18" access.log # 以特定日期开头的行
tail -f app.log | grep "ERROR" # 实时过滤日志
# sed 替换
sed 's/old/new/g' file.txt # 替换(输出到终端)
sed -i 's/old/new/g' file.txt # 直接修改文件
sed -i.bak 's/old/new/g' file.txt # 修改前备份
sed '/^$/d' file.txt # 删除空行
sed '/^#/d' config.txt # 删除注释行
sed 's/\r//' windows.csv > linux.csv # 去掉 Windows 换行符
# awk 列处理
awk '{print $1}' data.txt # 提取第 1 列(空格分隔)
awk -F',' '{print $1, $3}' data.csv # 提取第 1、3 列(逗号分隔)
awk -F',' 'NR>1 {sum+=$5} END {print sum}' orders.csv # 求第 5 列总和
awk -F',' '$5>1000 {print}' orders.csv # 过滤第 5 列大于 1000 的行
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10 # TOP 10 IP
四、管道与重定向
# 管道
cat data.csv | grep "北京" | awk -F',' '{print $2}'
ls -lt /data/logs/ | head -10 # 查看按修改时间排序的列表前 10 行(可能含 total 行和目录,不保证是 10 个日志文件)
# 输出重定向
command > output.txt # 覆盖写入
command >> output.txt # 追加写入
command 2> error.txt # 错误信息写入文件
command > all.log 2>&1 # 所有输出(含错误)写入文件
command 2>/dev/null # 丢弃错误信息
# tee:同时输出到终端和文件
./etl.sh 2>&1 | tee etl_$(date +%Y%m%d).log
# Here Document
cat > config.sh << 'EOF'
export JAVA_HOME=/usr/java/jdk1.8.0_281
export HADOOP_HOME=/opt/hadoop
EOF
五、文件权限
# 查看权限
ls -l file.sh
# 修改权限
chmod +x script.sh # 添加执行权限(未指定权限类别时受 umask 影响)
chmod 755 script.sh # rwxr-xr-x(所有者可写,其他用户可读和执行;按访问需求选择)
chmod 644 data.csv # rw-r--r--(其他用户可读;不适合需要限制读取的敏感数据)
chmod 600 ~/.ssh/id_rsa # rw-------(仅所有者可读写,常用于限制私钥访问)
chmod -R 755 /data/scripts/ # 递归修改目录
# 修改所有者
chown alice:data data.csv
chown -R alice:data /data/
# 临时提权
sudo chmod 755 /opt/hadoop/
sudo vim /etc/hosts
六、进程与任务管理
# 查看进程
ps aux | grep python # 找 Python 进程
ps aux | grep -v grep | grep java # 找 Java 进程(去掉 grep 自身)
top # 实时监控(M 按内存,P 按 CPU)
htop # 更好用的 top(需安装)
# 终止进程
kill 1234 # 优雅终止(先试这个)
kill -9 1234 # 强制终止(最后手段)
pkill -f "etl.py" # 按名称终止
# 后台运行
nohup python etl.py > etl.log 2>&1 & # SSH 断开后继续跑
jobs # 查看当前 Shell 的后台任务
# tmux(推荐!)
tmux new -s etl_job # 创建会话
tmux a -t etl_job # 重新接入会话
tmux ls # 查看所有会话
# Ctrl+B d 暂时离开,Ctrl+B c 新建窗口,Ctrl+B % 分屏
# 系统资源
free -h # 内存使用
df -h # 磁盘使用
uptime # 系统负载
七、网络与数据传输
# 下载数据
curl -o data.json "https://api.example.com/data?date=2026-03-18"
curl -H "Authorization: Bearer TOKEN" https://api.example.com/data
wget https://example.com/dataset.csv
wget -c https://example.com/large_file.tar.gz # 断点续传
# 传文件(服务器间)
scp data.csv alice@server:/data/input/ # 上传
scp alice@server:/data/output.csv ./ # 下载
scp -r /scripts/ alice@server:/home/alice/ # 上传目录
# rsync 增量同步(大量文件的最佳选择)
rsync -avz /data/local/ alice@server:/data/remote/
rsync -avz --delete /data/ backup-server:/backup/ # 同步并删除多余文件
# 检查端口
ss -tlnp | grep :8080 # 查看 8080 端口是否监听
nc -zv server 3306 # 测试 MySQL 端口是否可达
ping server.company.com # 测试网络连通性
八、定时任务
# 管理 crontab
crontab -e # 编辑定时任务
crontab -l # 查看定时任务
# 常用时间表达式
# 0 2 * * * 每天凌晨 2:00
# */30 * * * * 每 30 分钟
# 0 8 * * 1-5 工作日 8:00
# 0 0 1 * * 每月 1 号
# 查看执行历史
grep CRON /var/log/cron | tail -20 # CentOS
grep CRON /var/log/syslog | tail -20 # Ubuntu
九、包管理与软件安装
# CentOS
sudo yum install -y package_name
sudo yum remove package_name
sudo yum search keyword
sudo yum install -y epel-release # 添加 EPEL 源
# Ubuntu
sudo apt update && sudo apt install -y package_name
sudo apt search keyword
# Python 环境(conda)
conda create -n myenv python=3.9 # 创建环境
conda activate myenv # 激活环境
conda deactivate # 退出环境
conda env list # 查看所有环境
conda install pandas # 安装包
pip install package_name # conda 没有时用 pip
conda env export > environment.yml # 导出环境
十、日志分析常用组合
以下命令依赖具体日志格式:按天统计假设第 1 列为日期,错误类型统计假设第 4 列为类型,HTTP 状态码统计假设第 9 列为状态码,每小时统计假设第 4 列具有示例所需的时间格式。合并后直接 sort 仅在行首时间格式及字典序与时间顺序一致时可用于时间排序。
# 统计每天的错误数量
grep "ERROR" app.log | awk '{print $1}' | sort | uniq -c
# 找出最频繁的错误类型
grep "ERROR" app.log | awk '{print $4}' | sort | uniq -c | sort -rn | head -10
# 按匹配行范围提取日志(从匹配 09: 的行到匹配 10: 的行,含端点;不是严格时间窗口)
awk '/2026-03-18 09:/,/2026-03-18 10:/' app.log
# 统计 HTTP 状态码分布
awk '{print $9}' access.log | sort | uniq -c | sort -rn
# 找出响应最慢的请求(假设第 7 列是耗时)
sort -t' ' -k7 -rn access.log | head -20
# 合并多个日志文件并按时间排序
cat /var/log/app/app.log.* app.log | sort > all_logs.txt
# 统计每小时请求量
awk '{print substr($4,1,14)}' access.log | sort | uniq -c
十一、数据文件处理常用组合
以下逗号分列命令仅适用于无字段内逗号、无字段内换行的简单分隔文本,不是通用 CSV 解析器。行数统计假设有一行表头且各记录以换行结束;整文件排序和去重会将表头一起处理,需要保留表头时应将其单独处理。
# 查看 CSV 结构(列数和前几行)
head -3 data.csv
head -1 data.csv | tr ',' '\n' | nl # 列出每列的名称和序号
# 统计 CSV 行数(排除表头)
echo $(($(wc -l < data.csv) - 1))
# 提取 CSV 指定列(第 1、3、5 列)
cut -d',' -f1,3,5 data.csv
# CSV 去重
sort -u data.csv > deduped.csv
# CSV 按第 3 列排序
sort -t',' -k3,3 data.csv > sorted.csv
# CSV 按第 5 列数值从大到小排序
sort -t',' -k5 -rn data.csv
# 合并多个 CSV(同结构,去重表头)
head -1 file1.csv > merged.csv
tail -n +2 file1.csv >> merged.csv
tail -n +2 file2.csv >> merged.csv
# 过滤 CSV 中某列满足条件的行(保留表头)
head -1 orders.csv > filtered.csv
awk -F',' 'NR>1 && $5>1000' orders.csv >> filtered.csv
# 快速计算某列总和
awk -F',' 'NR>1{sum+=$5}END{print sum}' orders.csv
# 去掉 Windows 换行符(数据从 Windows 传来时)
sed -i 's/\r//' data.csv
# 或
tr -d '\r' < windows.csv > linux.csv
十二、系统排查常用命令
# 磁盘满了怎么办
df -h # 查看哪个分区满了
du -sh /data/* | sort -rh # 找最大的目录
find /data -name "*.log" -size +1G # 找大文件
# CPU 高怎么办
top -c # 查看 CPU 使用率高的进程(c 显示完整命令)
ps aux --sort=-%cpu | head -10 # 按 CPU 使用率排序
# 内存高怎么办
free -h # 查看内存总体情况
ps aux --sort=-%mem | head -10 # 按内存使用率排序
# 端口被占用
ss -tlnp | grep :8080 # 查看占用 8080 端口的进程
lsof -i :8080 # 查看文件和端口占用
# Java 应用相关
jps # 查看 Java 进程(JDK 工具)
jstack 1234 > thread_dump.txt # 线程 dump,分析 Java 死锁
十三、Shell 脚本常用片段
# 获取当前日期
today=$(date +%Y-%m-%d)
yesterday=$(date -d "yesterday" +%Y-%m-%d)
# macOS 用:yesterday=$(date -v-1d +%Y-%m-%d)
# 检查文件是否存在
if [ -f "$file" ]; then echo "exists"; fi
# 检查目录是否存在,不存在则创建
[ -d "$dir" ] || mkdir -p "$dir"
# 检查命令是否成功
command || { echo "命令失败"; exit 1; }
# 遍历目录下所有 CSV 文件
for file in /data/*.csv; do
echo "处理: $file"
# 处理逻辑
done
# 记录日志
echo "$(date '+%Y-%m-%d %H:%M:%S') INFO: 任务开始" >> /var/log/etl.log
# 计算脚本耗时
start_time=$(date +%s)
# ... 执行操作 ...
end_time=$(date +%s)
echo "耗时: $((end_time - start_time)) 秒"
tip 忘了参数怎么办?
# 方法 1:man 命令
man grep
# 方法 2:--help
grep --help
# 方法 3:tldr(简洁版,需安装)
tldr grep
文档索引
本速查表涉及的详细内容,参见各专题文档:
- 03-文件系统与目录操作 - 文件操作详解
- 04-文件查看与编辑 - cat/head/tail/vim
- 05-文件权限与用户管理 - chmod/chown/sudo
- 06-文本处理三剑客 - grep/sed/awk
- 07-管道与重定向 - 管道和重定向
- 08-Shell脚本基础 - Shell 脚本编程
- 09-进程与任务管理 - 进程和 tmux
- 10-网络与数据传输 - curl/wget/rsync
- 11-定时任务crontab - 定时任务
- 12-包管理与软件安装 - yum/apt/conda
#Linux #速查表 #Shell #数据工程 #命令参考