未记录事实核验 · 状态:现行内容

记录仅说明核验时间与维护状态,不保证适用于所有环境;使用前请留意正文中的版本、适用条件与风险提示。

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

文档索引

本速查表涉及的详细内容,参见各专题文档:

#Linux #速查表 #Shell #数据工程 #命令参考