二、命令行与终端:程序员的“第二语言”
2.1 为什么需要命令行?
2.2 终端基础命令
# ===== 文件与目录操作 =====
# 查看当前位置
pwd # /Users/username/projects
# 列出文件
ls # 简单列表
ls -la # 详细信息(包括隐藏文件)
ls -lh # 人类可读的文件大小
ls -ltr # 按时间排序
# 切换目录
cd ~ # 回家目录
cd / # 到根目录
cd - # 回到上一个目录
cd ../.. # 上两级目录
# 创建文件/文件夹
touch file.txt # 创建空文件
mkdir folder # 创建文件夹
mkdir -p parent/child/grandchild # 创建多级目录
# 删除
rm file.txt # 删除文件
rm -rf folder # 强制删除文件夹(危险!)
rmdir empty_folder # 删除空文件夹
# 复制
cp source.txt dest.txt # 复制文件
cp -r source_dir dest_dir # 复制文件夹
# 移动/重命名
mv old.txt new.txt # 重命名
mv file.txt ../ # 移动
# 查看文件内容
cat file.txt # 完整输出
less file.txt # 分页查看(q 退出)
head -20 file.txt # 前20行
tail -20 file.txt # 后20行
tail -f log.txt # 实时跟踪文件变化
# 查找文件
find . -name "*.js" # 查找所有 JS 文件
find . -type f -size +100M # 大于 100M 的文件
find . -mtime -7 # 7天内修改的文件
# 搜索文件内容
grep "error" log.txt # 在文件中搜索
grep -r "TODO" ./src # 递归搜索目录
grep -n "function" app.js # 显示行号
grep -i "hello" file.txt # 忽略大小写
# ===== 系统与进程 =====
# 查看进程
ps aux # 所有进程
ps aux | grep node # 查找 node 进程
top # 实时监控
htop # 更友好的 top
# 杀死进程
kill -9 1234 # 强制杀死 PID 1234
killall node # 杀死所有 node 进程
# 查看端口占用
lsof -i :3000 # 查看 3000 端口
netstat -an | grep 3000
# 磁盘使用
df -h # 磁盘分区使用情况
du -sh * # 当前目录各文件夹大小
du -sh . # 当前目录总大小
# ===== 网络相关 =====
# 网络诊断
ping google.com # 测试连通性
curl https://api.example.com/users # 发送 HTTP 请求
wget https://example.com/file.zip # 下载文件
# SSH 远程连接
ssh user@192.168.1.100 # 连接远程服务器
ssh -i key.pem user@server # 使用密钥文件
# 传输文件
scp local.txt user@server:/remote/path # 上传
scp user@server:/remote/file local.txt # 下载
# ===== 压缩解压 =====
# tar(最常用)
tar -czvf archive.tar.gz folder/ # 压缩
tar -xzvf archive.tar.gz # 解压
# zip
zip -r archive.zip folder/ # 压缩
unzip archive.zip # 解压
2.3 管道与重定向
管道 | 是命令行的超能力,可以把一个命令的输出作为另一个命令的输入。
# 基础管道
ls -la | grep "README" # 列出文件并筛选
cat log.txt | wc -l # 统计行数
ps aux | grep node | wc -l # 统计 node 进程数
# 重定向
echo "hello" > file.txt # 覆盖写入
echo "world" >> file.txt # 追加写入
cat < file.txt # 从文件读入
# 组合应用
# 找出最常用的 10 个命令
history | awk '{print $2}' | sort | uniq -c | sort -rn | head -10
# 统计访问日志中的 IP
cat access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -20
# 查找最近修改的文件
find . -type f -mtime -1 | xargs ls -lt
2.4 Shell 脚本基础
#!/bin/bash
# 文件名:setup-project.sh
# 变量
PROJECT_NAME=$1
if [ -z "$PROJECT_NAME" ]; then
echo "用法: ./setup-project.sh <项目名>"
exit 1
fi
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m' # No Color
echo -e "${GREEN}开始创建项目: $PROJECT_NAME${NC}"
# 创建目录结构
mkdir -p $PROJECT_NAME/{src,test,docs}
cd $PROJECT_NAME
# 初始化 Git
git init
echo "# $PROJECT_NAME" > README.md
# 创建 .gitignore
cat > .gitignore << EOF
node_modules/
dist/
.env
.DS_Store
EOF
# 根据参数选择模板
if [ "$2" == "react" ]; then
npm init -y
npm install react react-dom
echo "React 项目创建完成"
elif [ "$2" == "node" ]; then
npm init -y
echo "Node.js 项目创建完成"
else
echo "普通项目创建完成"
fi
echo -e "${GREEN}✅ 项目创建完成!${NC}"
2.5 终端增强工具
# 1. Oh My Zsh(让终端更好用)
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# 2. 常用插件(.zshrc)
plugins=(
git # Git 别名
zsh-autosuggestions # 命令建议
zsh-syntax-highlighting # 语法高亮
autojump # 快速跳转目录
history # 历史命令搜索
)
# 3. 效率命令
j project-name # 跳转到项目目录(autojump)
ctrl+r # 搜索历史命令
ctrl+a / ctrl+e # 行首/行尾
ctrl+u / ctrl+k # 删除到行首/行尾