阶段零:AI 开发必备命令行基础教程
·
AI 开发必备命令行基础教程
目录
1. 为什么命令行对 AI 开发至关重要
1.1 现实场景
| 场景 | 图形界面 | 命令行 |
|---|---|---|
| 在云服务器上训练模型 | ❌ 无法使用 | ✅ SSH 连接 |
| 批量处理 10000 张图片 | 逐个点击 | 一行命令搞定 |
| 查看 GPU 实时状态 | 需要安装监控软件 | nvidia-smi 直接看 |
| 管理 Conda 环境 | 不方便 | conda activate 秒切 |
| 自动化训练流程 | 手动操作 | Shell 脚本自动运行 |
1.2 AI 开发中命令行的核心作用
数据预处理 → 模型训练 → 超参调优 → 模型部署 → 监控运维
↓ ↓ ↓ ↓ ↓
grep/awk python watch docker nvidia-smi
sed/cut conda tmux kubectl htop
2. 终端基础概念
2.1 什么是 Shell?
Shell 是用户与操作系统内核之间的接口,负责解释你输入的命令。
| Shell 类型 | 特点 | 默认于 |
|---|---|---|
| bash | 最常用,功能强大 | Linux/macOS 默认 |
| zsh | 更现代,插件丰富 | macOS Catalina+ 默认 |
| fish | 用户友好,自动建议 | 需手动安装 |
| PowerShell | Windows 原生 | Windows |
查看当前 Shell:
echo $SHELL
# /bin/bash
2.2 命令结构
command -option argument
↓ ↓ ↓
命令 选项 参数
# 示例
ls -la /home/user
| 部分 | 说明 | 示例 |
|---|---|---|
| command | 要执行的程序 | ls, cd, python |
| -option | 修改命令行为 | -l(长格式), -a(显示隐藏) |
| argument | 命令作用的对象 | 文件名、路径、URL |
2.3 路径概念
# 绝对路径:从根目录开始
/home/user/project/data.csv
# 相对路径:从当前位置开始
./data.csv # 当前目录
../data.csv # 上级目录
../../data.csv # 上上级目录
# 特殊目录符号
. # 当前目录
.. # 上级目录
~ # 用户主目录 (/home/username)
/ # 根目录
2.4 快捷键(必须记住)
| 快捷键 | 作用 | 场景 |
|---|---|---|
Ctrl+C |
终止当前命令 | 训练卡死时强制停止 |
Ctrl+Z |
暂停当前命令 | 临时挂起,用 fg 恢复 |
Ctrl+D |
退出终端 | 相当于输入 exit |
Ctrl+L |
清屏 | 等同于 clear |
Ctrl+A |
跳到行首 | 修改长命令开头 |
Ctrl+E |
跳到行尾 | 修改长命令结尾 |
Ctrl+U |
删除光标前所有字符 | 快速清空输入 |
Ctrl+K |
删除光标后所有字符 | 删除后半部分 |
Ctrl+R |
搜索历史命令 | 快速找到之前用过的命令 |
Tab |
自动补全 | 文件/命令名补全,最常用! |
↑ / ↓ |
浏览历史命令 | 重复执行之前命令 |
3. 文件系统操作命令
3.1 导航命令
# pwd - 打印当前工作目录(Print Working Directory)
pwd
# /home/username/project
# ls - 列出目录内容(List)
ls # 列出当前目录
ls -l # 详细列表格式
ls -a # 显示隐藏文件(以 . 开头)
ls -la # 组合:详细 + 隐藏
ls -lh # 人类可读的文件大小(K, M, G)
ls -lt # 按修改时间排序
ls -lS # 按文件大小排序
# cd - 切换目录(Change Directory)
cd /home/user # 切换到绝对路径
cd project # 切换到相对路径
cd .. # 返回上级目录
cd ~ # 返回用户主目录
cd - # 返回上一个目录
3.2 文件操作
# 创建文件
touch file.txt # 创建空文件
touch file1.txt file2.txt # 创建多个文件
> output.txt # 创建空文件(重定向方式)
# 创建目录
mkdir dir_name # 创建单层目录
mkdir -p a/b/c/d # 递归创建多层目录
mkdir project/{data,scripts,outputs} # 批量创建多个目录
# 复制文件/目录
cp source.txt dest.txt # 复制文件
cp -r source_dir dest_dir # 递归复制目录
cp -i source.txt dest.txt # 覆盖前询问
cp -u source.txt dest.txt # 仅当源文件更新时复制
# 移动/重命名
mv old.txt new.txt # 重命名
mv file.txt /home/user/ # 移动文件
mv -i file.txt dest/ # 覆盖前询问
# 删除
rm file.txt # 删除文件
rm -r dir_name # 递归删除目录
rm -rf dir_name # 强制删除(危险!)
rm -i file.txt # 删除前确认
# 安全删除建议:使用 trash-cli
trash file.txt # 移到回收站,而非直接删除
# 链接(软链接类似 Windows 快捷方式)
ln -s /path/to/target link_name # 创建软链接
ln original hard_link # 创建硬链接
3.3 通配符(Wildcards)
* # 匹配任意多个字符
? # 匹配单个字符
[] # 匹配括号内任一字符
# 示例
ls *.py # 列出所有 Python 文件
rm data_?.csv # 删除 data_1.csv, data_2.csv...
cp train_[0-9].jpg ./ # 复制 train_0.jpg 到 train_9.jpg
ls [abc]*.txt # 列出 a/b/c 开头的 txt 文件
4. 文件查看与编辑
4.1 查看文件内容
# cat - 连接并显示(适合小文件)
cat file.txt
cat file1.txt file2.txt # 合并显示多个文件
# less - 分页查看(适合大文件,按 q 退出)
less large_log.txt
# 快捷键:空格(下一页) b(上一页) /(搜索) n(下一个匹配)
# head - 显示文件开头
head file.txt # 默认前10行
head -n 20 file.txt # 前20行
# tail - 显示文件结尾(查看日志最常用)
tail file.txt # 默认后10行
tail -n 50 file.txt # 后50行
tail -f training.log # 实时追踪文件更新(训练时看日志)
# wc - 统计行数、字数
wc -l file.txt # 行数
wc -w file.txt # 单词数
4.2 文本搜索(grep - AI 开发必用)
# 基本搜索
grep "error" log.txt # 查找包含 error 的行
grep -i "error" log.txt # 忽略大小写
grep -n "error" log.txt # 显示行号
grep -v "debug" log.txt # 反向查找(不含 debug 的行)
# 正则表达式搜索
grep "^2024-01" log.txt # 以 2024-01 开头的行
grep "loss:[0-9]\+\.[0-9]\+" log.txt # 匹配 loss: 数字
# 递归搜索目录
grep -r "TODO" ./src/ # 搜索目录下所有文件
grep -r --include="*.py" "import torch" ./ # 只搜索 py 文件
# 常用选项组合
grep -rni "error" ./logs/ # 递归 + 忽略大小写 + 显示行号
4.3 命令行文本编辑(nano - 最易学)
# 打开文件
nano file.txt
# nano 快捷键
Ctrl+O # 保存
Ctrl+X # 退出
Ctrl+W # 搜索
Alt+W # 下一个匹配
Ctrl+K # 剪切整行
Ctrl+U # 粘贴
vim 极简版(服务器标配):
vim 的详细使用教程可以查看我的这篇文章 linux 下vim的使用教程
vim file.txt
# 模式切换
i # 进入插入模式(开始编辑)
ESC # 退出插入模式
:wq # 保存并退出
:q! # 不保存强制退出
/pattern # 搜索 pattern
n/N # 下一个/上一个匹配
5. 进程管理
5.1 查看进程
# ps - 查看进程快照
ps # 当前终端的进程
ps aux # 所有进程(详细)
ps aux | grep python # 查找 Python 进程
# top - 动态查看进程(实时)
top # 交互式进程查看器
# 快捷键:q(退出) k(杀死进程) P(按CPU排序) M(按内存排序)
# htop - top 的增强版(需安装)
htop # 更美观,支持鼠标
# pgrep - 按名称查找进程ID
pgrep python # 查找所有 python 进程ID
pgrep -f "train.py" # 匹配完整命令行
5.2 终止进程
# kill - 发送信号
kill PID # 正常终止进程
kill -9 PID # 强制杀死(SIGKILL)
kill -15 PID # 优雅终止(SIGTERM)
# pkill - 按名称终止
pkill python # 终止所有 python 进程
pkill -f "train.py" # 终止特定脚本
# killall - 按名称终止所有
killall python3
5.3 后台运行(AI 训练必备)
# 在命令末尾加 & 让进程后台运行
python train.py &
# 查看后台任务
jobs
# 将后台任务调到前台
fg %1
# 将前台任务挂起(Ctrl+Z)后放后台
bg %1
# nohup - 退出终端后继续运行
nohup python train.py > train.log 2>&1 &
# 2>&1 说明:将错误输出(2)重定向到标准输出(1)
5.4 会话管理(tmux - 神器!)
# 安装 tmux
sudo apt install tmux # Ubuntu
brew install tmux # macOS
# 基本操作
tmux new -s training # 创建名为 training 的会话
tmux ls # 列出所有会话
tmux attach -t training # 重新连接会话
tmux kill-session -t training # 杀死会话
# tmux 内部快捷键(前缀 Ctrl+B)
Ctrl+B D # 脱离会话(detach)
Ctrl+B C # 创建新窗口
Ctrl+B N/P # 下一个/上一个窗口
Ctrl+B % # 垂直分屏
Ctrl+B " # 水平分屏
Ctrl+B 方向键 # 切换分屏
AI 开发典型场景:
# SSH 登录服务器后
tmux new -s training
conda activate pytorch
python train.py --epochs 100
# 按 Ctrl+B D 脱离
# 关闭 SSH 连接,训练继续在后台跑
# 下次连接后:tmux attach -t training
6. 权限管理
6.1 查看权限
ls -l file.txt
# -rw-r--r-- 1 user group 1234 Apr 12 10:00 file.txt
# ↑权限 ↑所有者 ↑组 ↑大小
# 权限解读
# 第1个字符:-文件 d目录 l链接
# 后面9个字符:所有者(u) 组(g) 其他人(o)
# r=读(4) w=写(2) x=执行(1)
6.2 修改权限
# chmod - 修改权限
chmod +x script.sh # 添加执行权限
chmod 755 script.sh # rwxr-xr-x
chmod 600 private.txt # rw-------
# 数字含义
# 7 = 4+2+1 = rwx
# 6 = 4+2 = rw-
# 5 = 4+1 = r-x
# chown - 修改所有者
sudo chown user:group file.txt
sudo chown -R user:group directory/ # 递归修改
6.3 sudo - 超级用户权限
sudo command # 以 root 权限执行
sudo -i # 切换到 root 用户
sudo -u username command # 以指定用户执行
7. 网络与远程连接
7.1 SSH 远程连接(云服务器必用)
# 基本连接
ssh username@hostname
ssh root@192.168.1.100
ssh -p 2222 user@server.com # 指定端口
# 密钥登录(免密码)
ssh-keygen -t rsa -b 4096 # 生成密钥对
ssh-copy-id user@server # 复制公钥到服务器
# 配置文件 ~/.ssh/config
Host myserver
HostName 192.168.1.100
User ubuntu
Port 22
IdentityFile ~/.ssh/mykey
# 之后只需
ssh myserver
7.2 文件传输
# scp - 安全复制
scp file.txt user@server:/path/ # 上传文件
scp user@server:/path/file.txt ./ # 下载文件
scp -r directory/ user@server:/path/ # 递归上传目录
# rsync - 增量同步(更高效)
rsync -avz local/ user@server:/remote/ # 同步目录
rsync -avz --delete local/ remote/ # 删除目标多余文件
# 下载文件
wget https://example.com/file.zip # 下载
wget -c https://example.com/file.zip # 断点续传
curl -O https://example.com/file.zip # curl 下载
7.3 网络诊断
# ping - 测试连通性
ping google.com
ping -c 4 8.8.8.8 # 只发4个包
# curl - 测试 API 接口
curl https://api.example.com/data
curl -X POST -d '{"key":"value"}' -H "Content-Type: application/json" https://api.example.com
# 查看端口占用
netstat -tlnp # 查看监听端口
lsof -i :8888 # 查看谁占用了8888端口
# 查看 GPU 服务器网络
nvidia-smi # 查看 GPU 状态
watch -n 1 nvidia-smi # 每秒刷新一次
8. 包管理与环境配置
8.1 apt(Ubuntu/Debian)
# 更新软件源
sudo apt update
# 升级已安装软件
sudo apt upgrade
# 搜索软件
apt search python
# 安装软件
sudo apt install python3-pip
# 卸载软件
sudo apt remove package_name
sudo apt purge package_name # 删除配置文件
8.2 pip(Python 包管理)
# 安装包
pip install torch
pip install numpy==1.24.0
pip install "requests>=2.28"
# 从 requirements.txt 安装
pip install -r requirements.txt
# 查看已安装
pip list
pip show torch
# 升级
pip install --upgrade pip
pip install -U torch
# 卸载
pip uninstall package_name
# 国内镜像加速
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple torch
8.3 Conda(AI 开发首选)
# 环境管理
conda create -n myenv python=3.10
conda activate myenv
conda deactivate
conda env list
conda env remove -n myenv
# 包管理
conda install numpy pandas matplotlib
conda install -c conda-forge pytorch
conda update --all
conda list
# 环境导出/导入
conda env export > environment.yml
conda env create -f environment.yml
8.4 环境变量
# 查看环境变量
echo $PATH
env # 显示所有环境变量
# 设置临时环境变量
export CUDA_VISIBLE_DEVICES=0,1
export PYTHONPATH=/path/to/module:$PYTHONPATH
# 永久设置(写入 ~/.bashrc)
echo 'export CUDA_VISIBLE_DEVICES=0' >> ~/.bashrc
source ~/.bashrc # 重新加载配置
9. Shell 高级技巧
9.1 重定向与管道
# 重定向
> # 输出重定向(覆盖)
>> # 输出重定向(追加)
< # 输入重定向
2> # 错误输出重定向
2>&1 # 错误输出合并到标准输出
# 示例
python train.py > train.log 2>&1 # 所有输出写入日志
python train.py >> train.log # 追加到日志
python train.py 2> error.log # 只保存错误
# 管道 - 连接命令(AI 开发最常用)
command1 | command2 | command3
# 实战示例
cat log.txt | grep "loss" | tail -n 10
ps aux | grep python | awk '{print $2}' | xargs kill
ls -la | sort -k5 -rn | head -10 # 最大的10个文件
9.2 文本处理三剑客
# grep - 查找(已介绍)
# sed - 流编辑器(替换)
sed 's/old/new/g' file.txt # 替换所有 old 为 new
sed -i 's/old/new/g' file.txt # 直接修改文件
sed -n '10,20p' file.txt # 打印10-20行
# awk - 文本处理语言
awk '{print $1}' file.txt # 打印第一列
awk -F',' '{print $2}' data.csv # CSV 第二列
awk '$3 > 0.9 {print $1}' log.txt # 第3列>0.9 打印第1列
# 实战:从训练日志提取准确率
grep "accuracy:" train.log | awk '{print $2}' | tail -n 5
9.3 管道组合示例
# 统计错误类型
grep "ERROR" app.log | awk '{print $5}' | sort | uniq -c
# 找出占用内存最大的5个进程
ps aux | sort -k4 -rn | head -5
# 统计代码行数
find . -name "*.py" | xargs wc -l | tail -1
# 监控 GPU 温度
watch -n 2 nvidia-smi --query-gpu=temperature.gpu --format=csv
9.4 别名与函数
# 设置别名(写入 ~/.bashrc 永久生效)
alias ll='ls -la'
alias gpu='watch -n 1 nvidia-smi'
alias activate='conda activate'
alias python='python3'
# 带参数的函数
gpu_usage() {
echo "GPU: $1"
nvidia-smi --id=$1 --query-gpu=utilization.gpu --format=csv
}
# 使用
gpu_usage 0
9.5 历史命令管理
history # 查看历史
!! # 重复上一条命令
!123 # 执行历史中第123条命令
!python # 执行最近以 python 开头的命令
^old^new # 替换上条命令的字符串
# 搜索历史(Ctrl+R)
(reverse-i-search)`tra': python train.py --epochs 100
10. AI 开发实战命令场景
10.1 场景一:数据准备
# 下载数据集
wget https://dataset.com/imagenet.zip
unzip imagenet.zip -d data/
tar -xzf dataset.tar.gz
# 查看数据集信息
ls -lh data/ | head -10
du -sh data/ # 查看总大小
find data/ -name "*.jpg" | wc -l # 统计图片数量
# 数据预处理
# 批量重命名
for f in *.png; do
mv "$f" "${f%.png}.jpg"
done
# 按比例划分数据集
ls images/ | shuf | head -n 1000 > train.txt
ls images/ | shuf | head -n 200 > val.txt
10.2 场景二:模型训练
# 创建虚拟环境
conda create -n pytorch python=3.10
conda activate pytorch
# 安装依赖
pip install -r requirements.txt
# 后台训练(关键!)
nohup python train.py --config config.yaml > train.log 2>&1 &
# 查看训练进程
ps aux | grep train.py
# 实时监控训练日志
tail -f train.log
# 监控 GPU
watch -n 1 nvidia-smi
# 训练时挂起(Ctrl+Z),然后放后台
bg
disown # 脱离终端
10.3 场景三:超参数调优
# 批量运行实验
for lr in 0.001 0.0001 0.00001; do
for bs in 32 64 128; do
python train.py --lr $lr --batch_size $bs > logs/lr${lr}_bs${bs}.log
done
done
# 并行运行(使用 & 和 wait)
python train.py --config config1.yaml &
python train.py --config config2.yaml &
python train.py --config config3.yaml &
wait
echo "所有实验完成"
# 使用 tmux 管理多个实验
tmux new -d -s exp1 "python train.py --config config1.yaml"
tmux new -d -s exp2 "python train.py --config config2.yaml"
tmux ls
10.4 场景四:结果分析
# 从多个日志提取最佳准确率
for log in logs/*.log; do
echo -n "$log: "
grep "Best accuracy" "$log" | tail -1 | awk '{print $3}'
done
# 生成统计报告
grep "loss:" train.log | awk '{print $4}' > losses.txt
awk '{sum+=$1; count++} END {print "平均loss:", sum/count}' losses.txt
# 筛选 TensorBoard 日志
tensorboard --logdir runs/ --port 6006 &
# 浏览器打开 http://localhost:6006
10.5 场景五:模型部署
# 导出模型
python export_onnx.py --checkpoint model.pth --output model.onnx
# 用 Docker 部署
docker build -t mymodel .
docker run --gpus all -p 8080:8080 mymodel
# 查看容器状态
docker ps
docker logs container_id
# 使用 systemd 管理服务
sudo systemctl start mymodel.service
sudo systemctl status mymodel.service
sudo journalctl -u mymodel.service -f
10.6 场景六:远程服务器工作流
# 本地 -> 服务器传输代码
rsync -avz --exclude 'data/' --exclude 'logs/' ./ user@server:~/project/
# SSH 登录并启动 tmux 训练
ssh user@server
tmux new -s train
cd ~/project
conda activate pytorch
python train.py
# Ctrl+B D 脱离
# 第二天查看结果
ssh user@server
tmux attach -t train
# 下载结果到本地
scp -r user@server:~/project/logs ./logs/
10.7 场景七:调试技巧
# 查看 Python 路径
which python
python -c "import torch; print(torch.__version__)"
# 查看环境变量
env | grep CUDA
# 测试 GPU 是否可用
python -c "import torch; print(torch.cuda.is_available())"
# 查看文件编码
file -i data.csv
# 比较两个文件差异
diff file1.txt file2.txt
# 实时监控系统资源
htop
iostat -x 1 # 磁盘 IO
11. 命令速查表
基础命令(必须掌握)
| 命令 | 作用 | 示例 |
|---|---|---|
ls |
列出文件 | ls -la |
cd |
切换目录 | cd project/ |
pwd |
当前路径 | pwd |
cp |
复制 | cp a.txt b.txt |
mv |
移动/重命名 | mv old new |
rm |
删除 | rm -rf dir/ |
mkdir |
创建目录 | mkdir -p a/b/c |
cat |
查看文件 | cat file.txt |
less |
分页查看 | less big.log |
grep |
搜索文本 | grep -r "error" ./ |
ps |
查看进程 | ps aux |
kill |
终止进程 | kill -9 PID |
chmod |
修改权限 | chmod +x script.sh |
ssh |
远程连接 | ssh user@host |
scp |
远程复制 | scp file user@host:/ |
AI 开发高频命令
| 命令 | 作用 | 场景 |
|---|---|---|
watch -n 1 nvidia-smi |
监控 GPU | 训练时看显存 |
tail -f train.log |
实时看日志 | 监控训练进度 |
conda activate env |
切换环境 | 换模型框架 |
nohup python train.py & |
后台训练 | 断开终端继续跑 |
tmux new -s name |
会话管理 | 远程训练神器 |
grep "loss" log | tail |
提取信息 | 分析训练结果 |
rsync -avz local remote |
同步代码 | 上传到服务器 |
du -sh * |
查看大小 | 检查数据集 |
管道组合速查
# 查找并杀死进程
ps aux | grep python | awk '{print $2}' | xargs kill -9
# 统计日志中错误数量
grep -c "ERROR" app.log
# 查看最大的5个文件
find . -type f -exec du -h {} + | sort -rh | head -5
# 实时监控并高亮关键词
tail -f log.txt | grep --color=always "error\|warning"
# 批量替换文件内容
find . -name "*.py" -exec sed -i 's/old_name/new_name/g' {} \;
12. 学习路线建议
第1周:掌握基础
- 每天练习
ls,cd,cp,mv,rm - 学会使用
Tab补全和↑历史命令 - 能够用
nano编辑文件
第2周:文本处理
- 熟练使用
grep搜索 - 掌握
|管道组合命令 - 学会
tail -f看日志
第3周:环境配置
- 独立完成 Conda 环境创建
- 会用
pip安装包 - 配置
~/.bashrc别名
第4周:远程与后台
- 学会 SSH 连接服务器
- 掌握
tmux会话管理 - 能用
nohup后台训练
第5周:实战整合
- 完整跑通一个训练流程
- 会用
grep和awk分析日志 - 写出第一个自动化脚本
13. 常见问题与解决方案
| 问题 | 原因 | 解决 |
|---|---|---|
command not found |
命令未安装或 PATH 错误 | which command 检查 |
Permission denied |
无执行权限 | chmod +x file |
| 训练中断 | SSH 断开 | 用 tmux 或 nohup |
| 端口被占用 | 已有进程占用 | lsof -i:端口 查杀 |
| 磁盘满了 | 日志太多 | du -sh * 找大文件清理 |
| Conda 环境混乱 | 未激活正确环境 | conda activate 明确指定 |
总结
核心命令(80%场景够用):
ls, cd, pwd, cp, mv, rm, mkdir
cat, less, grep, tail -f
ps, kill, top, htop
ssh, scp, rsync
pip, conda, tmux, nvidia-smi
|, >, >>, &, nohup
学习建议:
- 不要死记硬背,用多了自然记住
- 遇到不会的命令:
command --help或man command - 多写小脚本自动化重复工作
- 养成
Ctrl+R搜索历史的习惯
AI 开发者的命令底线:
能够在云服务器上创建 Conda 环境、启动 tmux 会话、用 nohup 后台训练、用 tail -f 看日志、用 grep 分析结果。
掌握这些,你就不会因为"不会用命令行"而在 AI 学习中卡住了。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)