Skip to content

速查 04 · 命令行 / Shell ​

按问题索引。Windows 用户注意:本文以 Git Bash / Linux 语法为主,PowerShell 差异单独标注。

目录 ​


文件与目录 ​

bash
pwd                          # 当前路径
ls -la                       # 详细列表(含隐藏文件)
cd /d/path                   # Git Bash 进入 D 盘路径(重要!不是 D:)
cd ~                         # 家目录
cd -                         # 回到上一个目录

mkdir -p a/b/c               # 递归创建
touch file.txt               # 创建空文件 / 更新时间戳
cp a.txt b.txt               # 复制文件
cp -r dir1 dir2              # 复制目录
mv a.txt b.txt               # 移动 / 重命名
rm file.txt                  # 删除文件
rm -rf dir                   # 递归强制删除 ⚠️ 危险

# 批量重命名(把 .jpeg 改成 .jpg)
for f in *.jpeg; do mv "$f" "${f%.jpeg}.jpg"; done

# 查看
cat file.txt                 # 全文
less file.txt                # 分页查看(q 退出)
head -20 file.txt            # 前 20 行
tail -20 file.txt            # 后 20 行
tail -f app.log              # 实时跟踪日志(排障神器)
wc -l file.txt               # 行数
du -sh dir                   # 目录大小
df -h                        # 磁盘剩余

查找与搜索 ​

bash
# 按文件名找
find . -name "*.dart"                        # 当前目录下所有 .dart
find . -name "*.md" -not -path "*/node_modules/*"

# 按内容找(最强工具)
grep -rn "关键词" .                           # 递归搜索并显示行号
grep -rn "TODO" --include="*.dart" .          # 限定文件类型
grep -rn "关键词" . --exclude-dir=node_modules
grep -i "keyword" file                        # 忽略大小写
grep -v "排除词" file                         # 反向匹配
grep -A3 -B3 "关键词" file                    # 显示前后 3 行上下文

# 找大文件(清理磁盘时实用)
find . -type f -size +100M

# 找最近修改的文件
find . -type f -mmin -60                     # 60 分钟内改过的

文本处理 ​

bash
# sed 替换(批量改内容很常用)
sed -i 's/old/new/g' file.txt                       # Linux
sed -i '' 's/old/new/g' file.txt                    # macOS(需空参数)
sed -i 's/old/new/g' $(grep -rl "old" .)            # 批量替换目录下所有

# awk 取列
awk '{print $1}' file                               # 第 1 列
awk -F',' '{print $2}' data.csv                     # 按逗号分割取第 2 列

# 排序去重统计
sort file | uniq -c | sort -rn                      # 出现次数排行
cut -d',' -f1 data.csv                              # 按分隔符取字段

# 管道组合(统计代码行数)
find . -name "*.dart" | xargs wc -l | tail -1

# 编码转换(Windows 常见:GBK → UTF-8)
iconv -f GBK -t UTF-8 file.txt > file_utf8.txt

进程与端口 ​

bash
# 查看端口占用(开发最常用)
# Linux / Git Bash:
netstat -ano | grep 5173
lsof -i :5173
# Windows PowerShell:
netstat -ano | findstr 5173

# 杀掉占用端口的进程
# Windows(PID 从上一条命令最后一列拿到):
taskkill /PID 12345 /F
# Linux / Git Bash:
kill -9 12345

# 进程查看
ps aux | grep node                          # 找进程
top / htop                                  # 实时资源占用

# 后台运行与日志
nohup npm run dev > out.log 2>&1 &

Flutter 构建卡住时:

bash
# 常见原因:有僵尸 flutter 进程占用锁
ps aux | grep flutter
kill -9 <PID>
rm -f $FLUTTER_ROOT/bin/cache/lockfile

权限 ​

bash
chmod +x script.sh           # 加执行权限(脚本跑不了多半是缺这个)
chmod -R 755 dir
chown user:group file        # 改所有者
sudo command                 # 以管理员执行(Linux/macOS)

Windows 无 chmod;Git Bash 中脚本若提示 Permission denied,用 bash script.sh 直接调 bash 执行。


压缩与传输 ​

bash
# 打包
tar -czf archive.tar.gz dir/               # 压缩
tar -xzf archive.tar.gz                    # 解压
tar -tzf archive.tar.gz                    # 查看内容不解压
zip -r a.zip dir/  /  unzip a.zip

# 远程
ssh user@host
scp file.txt user@host:/path/              # 上传
scp user@host:/path/file.txt ./            # 下载
rsync -avz src/ user@host:/dst/            # 增量同步(推荐)

Git Bash 与 PowerShell 差异 ​

场景Git BashPowerShell
进入 D 盘cd /d/projectcd D:\project 或 Set-Location
环境变量export VAR=1$env:VAR='1'
查看环境变量echo $VAR$env:VAR
命令连接&&;(PS7 支持 &&)
删除rm -rf dirRemove-Item -Recurse -Force dir
找进程ps aux | grepGet-Process
查找文本grepSelect-String / findstr
家目录~$HOME

中文处理:PowerShell 默认 GBK,处理 UTF-8 中文易乱码。涉及中文(尤其 git 提交)优先用 Git Bash。

powershell
# 本机 Git Bash 路径(非默认安装位置)
& "D:\sortware\Git\bin\bash.exe"

开发常用 ​

bash
# Node / npm
npm install                  # 装依赖
npm ci                       # 按 lock 文件精确安装(CI 用)
npm run <script>             # 跑脚本
npm outdated                 # 查看可升级
npx <pkg>                    # 临时执行(不装到项目)

# Flutter(本项目统一加 fvm 前缀,见 16 篇)
fvm flutter pub get
fvm flutter run
fvm flutter analyze lib
fvm flutter test
fvm dart run build_runner build --delete-conflicting-outputs

# 端口占用导致启动失败
lsof -ti:5173 | xargs kill -9     # 一键杀掉 5173 端口占用

# 查看命令位置与版本
which node
node -v / flutter --version

实用的小技巧 ​

bash
# 上一条命令(会忘,务必记住)
sudo !!          # 上条命令加 sudo 重跑(Linux/macOS)
!$               # 上条命令的最后一个参数
!!               # 上一条命令

# 历史命令搜索
Ctrl + R         # 反向搜索历史命令(输入关键词)
history | grep npm

# 别名(写入 ~/.bashrc 永久生效)
alias ll='ls -la'
alias gs='git status'

相关:Git 速查 | 正则速查 | 返回速查区