Linux: Phase 1 Mini Project——搭建个人开发环境
这是 Phase 1 的验收项目。你将综合运用前 5 课学到的全部技能——文件操作、目录导航、终端快捷键——从零搭建一个可用、规范的个人 Linux 开发环境。
📋 前置知识:需要先掌握以下内容
1. 你将学到
- 项目目录结构设计
- Shell 提示符定制(PS1)
- 别名与快捷命令
- 开发语言运行时安装
- .bashrc 配置文件管理
2. 小明的"环境一团糟"的故事
(1) 痛点:文件乱放,每次找东西都像寻宝
小明用 Linux 三个月了,但每次使用都越来越痛苦:
- 他创建的文件散落在
~家目录各处 - 每次查看日志都要敲一长串命令
- 需要查 Java 版本时,他用
java -version提示command not found——他不知道 JDK 已经装好了,只是没加到 PATH
(2) 标准化的解法
小明决定用 Phase 1 学到的技能,花 10 分钟规范自己的开发环境:标准目录 + 实用别名 + 运行时安装。之后他的终端命令从 10 键变成了 2 键。
(3) 收益:秩序带来效率
规范化的开发环境让小明不需要"思考"文件放在哪——固定的目录结构、快速命令别名、就绪的开发语言环境,让他每天节省至少 30 分钟。
3. 知识点讲解
(1) 标准项目目录结构
一个好的开发环境从目录结构开始。推荐的开发者目录布局:
~/projects/ # 所有项目
├── web/ # Web 项目
│ ├── frontend/
│ └── backend/
├── scripts/ # Shell 脚本
├── learning/ # 学习实验
├── notes/ # 笔记和文档
└── tmp/ # 临时文件(可随时清理)
(2) PS1——定制 Shell 提示符
PS1(Prompt String 1)环境变量控制你的终端提示符长什么样。
# 默认格式
# user@host:current_dir$
# 常见自定义
export PS1='\u@\h:\w\$ ' # user@host:/path/to/dir$
export PS1='\[\033[01;32m\]\u\[\033[00m\]:\w\$ ' # 带颜色
export PS1='\n\[\033[1;34m\]\w\[\033[0m\]\n\$ ' # 分两行显示
ℹ️ 说明:PS1 定制的转义字符中,
\u是用户名、\h是主机名、\w是完整路径、\W仅显示当前目录名。分两行显示(在 PS1 中加入\n)的提示符在长路径时不会压缩输入空间,非常推荐。
常用转义字符:
| 转义 | 含义 |
|---|---|
\u |
当前用户名 |
\h |
主机名(短格式) |
\w |
当前工作目录(完整路径) |
\W |
当前目录名(仅最后一级) |
\d |
日期 |
\t |
时间(24 小时制) |
\$ |
#(root)或 $(普通用户) |
\n |
换行 |
(3) alias——给你的命令起个绰号
# 基本语法
alias 短名字='长命令'
# 常用别名
alias ll='ls -la'
alias la='ls -A'
alias l='ls -CF'
alias ..='cd ..'
alias ...='cd ../..'
alias gs='git status'
alias gc='git commit'
alias gp='git push'
alias cls='clear'
> 💡 **提示**:别名(alias)最大的价值是将高频长命令缩短为两三个字母——比如 `ll` 代替 `ls -la`、`..` 代替 `cd ..`。先把最常用的 3-5 个别名配好,比一次性配几十个更实用。
(4) .bashrc 配置文件
~/.bashrc 是 bash 启动时加载的配置文件。每次打开新的终端窗口时,bash 会执行 .bashrc 中的所有命令。
# 编辑 .bashrc
nano ~/.bashrc
# 让修改立即生效(而不需要关闭终端再打开)
source ~/.bashrc
▶ 示例:创建标准目录结构
# 回到家目录
cd ~
# 创建并验证标准目录
mkdir -p ~/projects/{web,scripts,learning,notes,tmp}
# 查看效果
ls -la ~/projects
输出:
TEXT 📖 仅展示total 28 drwxr-xr-x 1 alice alice 4096 Jul 8 10:23 . drwxr-xr-x 1 alice alice 4096 Jul 8 10:23 .. drwxr-xr-x 2 alice alice 4096 Jul 8 10:23 learning drwxr-xr-x 2 alice alice 4096 Jul 8 10:23 notes drwxr-xr-x 2 alice alice 4096 Jul 8 10:23 scripts drwxr-xr-x 2 alice alice 4096 Jul 8 10:23 tmp drwxr-xr-x 2 alice alice 4096 Jul 8 10:23 web
▶ 示例:定制 PS1 提示符(临时生效)
# 在当前终端试试不同的提示符
export PS1='\u:\w\$ '
# 结果:alice:/home/alice$
export PS1='\n\[\033[1;32m\]\u@\h\[\033[0m\]\n\w\$ '
# 结果:(绿色)username@hostname
# /current/path$
输出:
TEXT 📖 仅展示alice:/home/alice$ alice@ubuntu /home/alice$
▶ 示例:添加别名(永久生效)
# 编辑 .bashrc
echo '# 我的自定义别名' >> ~/.bashrc
echo "alias ll='ls -la'" >> ~/.bashrc
echo "alias ..='cd ..'" >> ~/.bashrc
echo "alias cls='clear'" >> ~/.bashrc
echo "alias myip='curl -s ifconfig.me'" >> ~/.bashrc
# 使生效
source ~/.bashrc
# 测试
ll
myip
输出:
TEXT 📖 仅展示total 48 drwxr-xr-x 1 alice alice 4096 Jul 8 10:23 . drwxr-xr-x 1 alice alice 4096 Jul 8 10:23 .. -rw-r--r-- 1 alice alice 3771 Jul 8 10:23 .bashrc drwxr-xr-x 2 alice alice 4096 Jul 8 10:23 projects 203.0.113.42
▶ 示例:安装 Python 和 Node.js
# 安装 Python3 和 pip
sudo apt update
sudo apt install -y python3 python3-pip
# 验证
python3 --version
# 输出:Python 3.10.12
# 安装 Node.js(从 NodeSource 官方源)
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
# 验证
node --version
# 输出:v20.12.0
npm --version
输出:
TEXT 📖 仅展示Python 3.10.12 v20.12.0 10.5.0
▶ 示例:验证环境就绪
echo "=== 操作系统 ===" && lsb_release -d
echo "=== 家目录结构 ===" && ls -la ~/projects/
echo "=== Shell ===" && echo $SHELL
echo "=== Python ===" && python3 --version
echo "=== Node.js ===" && node --version
echo "=== 别名 ===" && alias | head -5
echo "=== PS1 ===" && echo $PS1
输出:
TEXT 📖 仅展示=== 操作系统 === Description: Ubuntu 22.04.3 LTS === 家目录结构 === total 28 drwxr-xr-x 2 alice alice 4096 Jul 8 10:23 learning drwxr-xr-x 2 alice alice 4096 Jul 8 10:23 notes drwxr-xr-x 2 alice alice 4096 Jul 8 10:23 scripts drwxr-xr-x 2 alice alice 4096 Jul 8 10:23 tmp drwxr-xr-x 2 alice alice 4096 Jul 8 10:23 web === Shell === /bin/bash === Python === Python 3.10.12 === Node.js === v20.12.0 === 别名 === alias cls='clear' alias la='ls -A' alias ll='ls -la' === PS1 === \[\033[1;32m\]\u\[\033[0m\]:\[\033[1;34m\]\w\[\033[0m\]\$
▶ 综合示例:完整的开发环境搭建脚本
将这个脚本保存为 ~/setup-dev.sh,一次运行即可完成全部配置:
#!/bin/bash
set -e # 遇到错误立即退出
echo "开始搭建 Linux 开发环境..."
# 1. 创建目录结构
mkdir -p ~/projects/{web,scripts,learning,notes,tmp}
echo "✅ 目录结构创建完成"
# 2. 配置 .bashrc 别名和 PS1
cat >> ~/.bashrc << 'EOF'
# ---- 自定义配置开始 ----
# 别名
alias ll='ls -la'
alias la='ls -A'
alias ..='cd ..'
alias cls='clear'
alias myip='curl -s ifconfig.me'
# PS1 提示符
export PS1='\[\033[1;32m\]\u\[\033[0m\]:\[\033[1;34m\]\w\[\033[0m\]\$ '
# ---- 自定义配置结束 ----
EOF
echo "✅ .bashrc 配置完成"
# 3. 安装开发工具
sudo apt update
sudo apt install -y build-essential curl wget git vim htop
echo "✅ 开发工具安装完成"
# 4. 验证
source ~/.bashrc
echo "=== 环境验证 ==="
echo "Python: $(python3 --version 2>/dev/null || echo '未安装')"
echo "Node.js: $(node --version 2>/dev/null || echo '未安装')"
echo "Git: $(git --version 2>/dev/null || echo '未安装')"
echo "✅ 全部完成!请执行 source ~/.bashrc 或重新打开终端"
# 运行脚本
chmod +x ~/setup-dev.sh
./setup-dev.sh
❓ 常见问题
Q:
.bashrc和.bash_profile有什么区别? A: \1
Q: alias 重启后还在吗? A: 只在当前终端会话有效(临时)。要想永久生效,必须将
alias命令写入~/.bashrc。
Q: 怎么让别名对所有用户生效? A: 写入全局配置
/etc/bash.bashrc或/etc/profile.d/custom.sh(需要 root 权限)。
Q: PS1 提示符里可以显示 Git 分支吗? A: 可以的。用
__git_ps1函数(需要安装 bash-completion)或在 PS1 中加入$(git branch 2>/dev/null | grep '*' | sed 's/* //')。
Q: 环境装坏了怎么恢复? A: 如果
.bashrc配错了,可以用bash --noprofile --norc启动裸 bash,然后编辑修复。或用cp ~/.bashrc ~/.bashrc.backup提前备份。
📖 小节
- 标准目录结构:
~/projects/{web,scripts,learning,notes,tmp} - PS1 定制提示符,
alias给命令起短名 .bashrc是持久化配置的地方,修改后执行source ~/.bashrc- 安装开发运行时:
sudo apt install python3 nodejs - 可以写一个
setup-dev.sh脚本一键完成环境搭建(这正是为什么需要学 Shell 脚本)
📝 作业
- 基础题(难度⭐):创建你的个人开发目录结构(至少包含 projects/scripts/learning),并配置 3 个实用别名(如
ll、..、cls)写入.bashrc - 进阶题(难度⭐⭐):定制 PS1 提示符显示用户名、当前目录和 Git 分支,并安装一个开发语言运行时(Python 或 Node.js)
- 挑战题(难度⭐⭐⭐):写一个
~/projects/scripts/info.sh脚本,输出系统版本、内核、磁盘和内存信息,要求加入set -e错误处理和格式化输出