Linux教程 / 第 140 节
第14章:环境变量与软件管理
掌握环境配置和软件安装,打造高效开发环境
本章目标
- 理解环境变量的作用和配置方法
- 掌握PATH变量的管理
- 学会使用包管理器安装软件
- 能够编译安装源码软件
- 了解版本管理工具的使用
14.1 环境变量基础
14.1.1 什么是环境变量
环境变量是操作系统用来存储配置信息的键值对,影响程序的运行行为。
常见环境变量:
PATH: 可执行文件搜索路径HOME: 用户主目录USER: 当前用户名SHELL: 当前ShellLANG: 语言设置PWD: 当前工作目录EDITOR: 默认文本编辑器
14.1.2 查看环境变量
# 查看所有环境变量
env
# 或
printenv
# 查看特定环境变量
echo $PATH
echo $HOME
echo $USER
# 查看变量详细信息
printenv PATH
env | grep PATH
# 列出所有变量(包括Shell变量)
set
示例输出:
echo $PATH
# /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
echo $HOME
# /home/username
echo $SHELL
# /bin/bash
14.2 设置环境变量
14.2.1 临时设置(当前会话)
# 设置变量
export MY_VAR="Hello World"
# 查看变量
echo $MY_VAR
# Hello World
# 添加到PATH
export PATH=$PATH:/new/path
# 验证
echo $PATH
⚠️ 注意: 临时设置在关闭终端后失效
14.2.2 永久设置(用户级别)
编辑 ~/.bashrc (Bash):
# 编辑配置文件
nano ~/.bashrc
# 添加以下内容:
export MY_VAR="Hello World"
export PATH=$PATH:$HOME/bin
export EDITOR=vim
# 保存后重新加载
source ~/.bashrc
# 或
. ~/.bashrc
编辑 ~/.bash_profile 或 ~/.profile:
# ~/.bash_profile 在登录时执行
# ~/.bashrc 在每次打开新终端时执行
# 通常在 ~/.bash_profile 中加载 ~/.bashrc
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
Zsh用户:
# 编辑 ~/.zshrc
nano ~/.zshrc
# 添加环境变量
export MY_VAR="value"
# 重新加载
source ~/.zshrc
14.2.3 永久设置(系统级别)
# 编辑系统环境变量(需要root权限)
sudo nano /etc/environment
# 添加:
MY_VAR="value"
PATH="/usr/local/bin:/usr/bin:/bin"
# 或编辑 /etc/profile
sudo nano /etc/profile
# 添加:
export MY_VAR="value"
# 重启或重新登录生效
14.3 PATH变量管理
14.3.1 理解PATH
PATH是最重要的环境变量,定义了Shell查找可执行文件的目录列表。
# 查看PATH
echo $PATH
# /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
# PATH由多个目录组成,用冒号分隔
# Shell按顺序搜索这些目录
14.3.2 添加到PATH
# 临时添加(当前会话)
export PATH=$PATH:/new/directory
# 添加到开头(优先级更高)
export PATH=/new/directory:$PATH
# 永久添加(编辑 ~/.bashrc)
echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
source ~/.bashrc
实战场景: 添加自定义脚本目录
# 1. 创建个人bin目录
mkdir -p ~/bin
# 2. 添加到PATH
echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
source ~/.bashrc
# 3. 创建脚本
cat > ~/bin/hello.sh <<'EOF'
#!/bin/bash
echo "Hello from custom script!"
EOF
# 4. 添加执行权限
chmod +x ~/bin/hello.sh
# 5. 直接运行(无需指定路径)
hello.sh
# Hello from custom script!
14.3.3 which命令 - 查找可执行文件
# 查找命令的完整路径
which python
# /usr/bin/python
which node
# /usr/local/bin/node
# 查找所有匹配的路径
which -a python
# 查看命令类型
type python
# python is /usr/bin/python
type cd
# cd is a shell builtin
14.4 包管理器
14.4.1 apt (Ubuntu/Debian)
基本操作:
# 更新包列表
sudo apt update
# 升级所有包
sudo apt upgrade
# 升级系统(包括内核)
sudo apt full-upgrade
# 搜索包
apt search package-name
# 查看包信息
apt show package-name
# 安装包
sudo apt install package-name
# 安装多个包
sudo apt install package1 package2 package3
# 安装指定版本
sudo apt install package-name=version
# 卸载包(保留配置)
sudo apt remove package-name
# 完全卸载(删除配置)
sudo apt purge package-name
# 删除不需要的依赖
sudo apt autoremove
# 清理下载的包文件
sudo apt clean
实战示例:
# 安装开发工具
sudo apt update
sudo apt install -y build-essential git curl wget vim
# 安装Node.js
sudo apt install -y nodejs npm
# 安装Python开发环境
sudo apt install -y python3 python3-pip python3-venv
# 安装数据库
sudo apt install -y mysql-server postgresql
# 查看已安装的包
apt list --installed
# 查看可升级的包
apt list --upgradable
14.4.2 yum/dnf (CentOS/RHEL/Fedora)
# CentOS 7及以下使用yum
# CentOS 8+和Fedora使用dnf
# 更新包列表
sudo yum update
# 或
sudo dnf update
# 搜索包
yum search package-name
dnf search package-name
# 查看包信息
yum info package-name
dnf info package-name
# 安装包
sudo yum install package-name
sudo dnf install package-name
# 卸载包
sudo yum remove package-name
sudo dnf remove package-name
# 列出已安装的包
yum list installed
dnf list installed
# 清理缓存
sudo yum clean all
sudo dnf clean all
14.4.3 snap (跨发行版)
# 安装snap
sudo apt install snapd # Ubuntu
sudo dnf install snapd # Fedora
# 搜索snap包
snap find package-name
# 安装snap包
sudo snap install package-name
# 列出已安装的snap
snap list
# 更新snap包
sudo snap refresh package-name
# 更新所有snap
sudo snap refresh
# 卸载snap包
sudo snap remove package-name
# 常用snap应用
sudo snap install code --classic # VS Code
sudo snap install postman
sudo snap install docker
14.5 编译安装源码
14.5.1 安装编译工具
# Ubuntu/Debian
sudo apt install build-essential
# CentOS/RHEL
sudo yum groupinstall "Development Tools"
# 验证
gcc --version
make --version
14.5.2 典型编译流程
# 1. 下载源码
wget https://example.com/software-1.0.tar.gz
# 2. 解压
tar -xzf software-1.0.tar.gz
cd software-1.0
# 3. 配置(检查依赖,设置安装路径)
./configure --prefix=/usr/local
# 常用configure选项:
# --prefix=/path 安装路径
# --enable-feature 启用特性
# --disable-feature 禁用特性
# --with-library 使用指定库
# 4. 编译
make
# 并行编译(使用4个CPU核心)
make -j4
# 5. 安装(需要root权限)
sudo make install
# 6. 清理
make clean
实战示例: 编译安装Nginx
# 1. 安装依赖
sudo apt install -y build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
# 2. 下载源码
wget http://nginx.org/download/nginx-1.24.0.tar.gz
tar -xzf nginx-1.24.0.tar.gz
cd nginx-1.24.0
# 3. 配置
./configure \
--prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_v2_module
# 4. 编译
make -j4
# 5. 安装
sudo make install
# 6. 验证
/usr/local/nginx/sbin/nginx -v
# 7. 启动
sudo /usr/local/nginx/sbin/nginx
14.5.3 卸载编译安装的软件
# 方法1: 使用make uninstall(如果支持)
cd software-source-directory
sudo make uninstall
# 方法2: 手动删除
sudo rm -rf /usr/local/software
# 方法3: 使用checkinstall(推荐)
# 安装checkinstall
sudo apt install checkinstall
# 编译时使用checkinstall代替make install
./configure
make
sudo checkinstall
# 这会创建deb/rpm包,方便卸载
14.6 版本管理工具
14.6.1 nvm - Node.js版本管理
# 安装nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
# 重新加载配置
source ~/.bashrc
# 列出可用版本
nvm ls-remote
# 安装Node.js
nvm install 18
nvm install 16
nvm install --lts # 安装LTS版本
# 查看已安装版本
nvm ls
# 切换版本
nvm use 18
nvm use 16
# 设置默认版本
nvm alias default 18
# 查看当前版本
node --version
# 在项目中指定版本
echo "18" > .nvmrc
nvm use # 自动使用.nvmrc中的版本
14.6.2 pyenv - Python版本管理
# 安装依赖
sudo apt install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
# 安装pyenv
curl https://pyenv.run | bash
# 添加到 ~/.bashrc
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
source ~/.bashrc
# 列出可用版本
pyenv install --list
# 安装Python
pyenv install 3.11.0
pyenv install 3.10.0
# 查看已安装版本
pyenv versions
# 设置全局版本
pyenv global 3.11.0
# 设置项目版本
cd my-project
pyenv local 3.10.0 # 创建.python-version文件
# 查看当前版本
python --version
14.6.3 sdkman - Java/Kotlin/Scala版本管理
# 安装sdkman
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
# 列出可用的SDK
sdk list java
# 安装JDK
sdk install java 17.0.5-tem
sdk install java 11.0.17-tem
# 查看已安装版本
sdk list java
# 切换版本
sdk use java 17.0.5-tem
# 设置默认版本
sdk default java 17.0.5-tem
# 查看当前版本
java -version
# 安装其他SDK
sdk install gradle
sdk install maven
sdk install kotlin
14.6.4 rbenv - Ruby版本管理
# 安装依赖
sudo apt install -y git curl libssl-dev libreadline-dev zlib1g-dev \
autoconf bison build-essential libyaml-dev libreadline-dev \
libncurses5-dev libffi-dev libgdbm-dev
# 安装rbenv
curl -fsSL https://github.com/rbenv/rbenv-installer/raw/main/bin/rbenv-installer | bash
# 添加到 ~/.bashrc
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc
# 列出可用版本
rbenv install --list
# 安装Ruby
rbenv install 3.2.0
# 设置全局版本
rbenv global 3.2.0
# 查看版本
ruby --version
14.7 实战场景
场景1: 配置开发环境
#!/bin/bash
# setup-dev-env.sh - 一键配置开发环境
echo "Setting up development environment..."
# 更新系统
sudo apt update && sudo apt upgrade -y
# 安装基础工具
sudo apt install -y \
build-essential \
git \
curl \
wget \
vim \
tmux \
htop
# 安装Node.js (使用nvm)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
nvm install --lts
# 安装Python工具
sudo apt install -y python3 python3-pip python3-venv
# 安装Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
# 配置Git
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
git config --global core.editor vim
# 配置环境变量
cat >> ~/.bashrc <<'EOF'
# Custom environment variables
export EDITOR=vim
export PATH=$PATH:$HOME/bin
# Aliases
alias ll='ls -lah'
alias gs='git status'
alias gp='git pull'
alias dc='docker-compose'
EOF
source ~/.bashrc
echo "Development environment setup complete!"
场景2: 管理多个Java版本
# 安装sdkman
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
# 安装多个JDK版本
sdk install java 17.0.5-tem
sdk install java 11.0.17-tem
sdk install java 8.0.352-tem
# 项目A使用Java 17
cd ~/projects/project-a
sdk use java 17.0.5-tem
java -version
# 项目B使用Java 11
cd ~/projects/project-b
sdk use java 11.0.17-tem
java -version
# 或使用.sdkmanrc文件
cd ~/projects/project-a
echo "java=17.0.5-tem" > .sdkmanrc
sdk env # 自动切换到指定版本
场景3: 配置Python虚拟环境
# 方法1: 使用venv
cd my-project
python3 -m venv venv
# 激活虚拟环境
source venv/bin/activate
# 安装依赖
pip install -r requirements.txt
# 退出虚拟环境
deactivate
# 方法2: 使用pyenv + virtualenv
pyenv install 3.11.0
pyenv virtualenv 3.11.0 my-project-env
# 激活
pyenv activate my-project-env
# 自动激活(在项目目录)
cd my-project
pyenv local my-project-env
# 退出
pyenv deactivate
场景4: 配置别名提高效率
# 编辑 ~/.bashrc
nano ~/.bashrc
# 添加常用别名
cat >> ~/.bashrc <<'EOF'
# 导航别名
alias ..='cd ..'
alias ...='cd ../..'
alias ~='cd ~'
# ls别名
alias ll='ls -lah'
alias la='ls -A'
alias l='ls -CF'
# Git别名
alias gs='git status'
alias ga='git add'
alias gc='git commit'
alias gp='git pull'
alias gps='git push'
alias gl='git log --oneline --graph --decorate'
# Docker别名
alias d='docker'
alias dc='docker-compose'
alias dps='docker ps'
alias di='docker images'
# 系统别名
alias update='sudo apt update && sudo apt upgrade -y'
alias install='sudo apt install'
alias remove='sudo apt remove'
# 安全别名
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# 快速编辑
alias bashrc='vim ~/.bashrc'
alias vimrc='vim ~/.vimrc'
# 网络
alias myip='curl ifconfig.me'
alias ports='sudo netstat -tulpn'
# 进程
alias psg='ps aux | grep -v grep | grep -i -e VSZ -e'
EOF
# 重新加载
source ~/.bashrc
场景5: 配置开发工具路径
# 配置多个开发工具的环境变量
cat >> ~/.bashrc <<'EOF'
# Java
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
# Maven
export MAVEN_HOME=/opt/maven
export PATH=$PATH:$MAVEN_HOME/bin
# Gradle
export GRADLE_HOME=/opt/gradle
export PATH=$PATH:$GRADLE_HOME/bin
# Node.js (如果手动安装)
export NODE_HOME=/usr/local/node
export PATH=$PATH:$NODE_HOME/bin
# Go
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
# Rust
export PATH=$PATH:$HOME/.cargo/bin
# Android SDK
export ANDROID_HOME=$HOME/Android/Sdk
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
EOF
source ~/.bashrc
14.8 常见问题
Q1: 修改环境变量后不生效?
A:
# 确保重新加载配置文件
source ~/.bashrc
# 或重新登录
exit
# 重新登录
# 检查是否在正确的文件中修改
# Bash: ~/.bashrc 或 ~/.bash_profile
# Zsh: ~/.zshrc
Q2: 如何查看命令来自哪个包?
A:
# Ubuntu/Debian
dpkg -S $(which command)
# 或使用apt-file
sudo apt install apt-file
sudo apt-file update
apt-file search command
# CentOS/RHEL
rpm -qf $(which command)
# 或使用yum
yum provides command
Q3: 如何解决包依赖冲突?
A:
# Ubuntu/Debian
# 1. 尝试修复依赖
sudo apt --fix-broken install
# 2. 清理包缓存
sudo apt clean
sudo apt autoclean
# 3. 更新包列表
sudo apt update
# 4. 重新安装
sudo apt install package-name
# CentOS/RHEL
sudo yum clean all
sudo yum update
Q4: 如何卸载不需要的软件?
A:
# 完全卸载(包括配置)
sudo apt purge package-name
# 删除不需要的依赖
sudo apt autoremove
# 查找残留配置文件
dpkg -l | grep ^rc
# 清理残留配置
sudo apt purge $(dpkg -l | grep ^rc | awk '{print $2}')
Q5: PATH变量太长怎么办?
A:
# 使用函数添加到PATH(避免重复)
add_to_path() {
if [ -d "$1" ] && [[ ":$PATH:" != *":$1:"* ]]; then
export PATH="$1:$PATH"
fi
}
# 在 ~/.bashrc 中使用
add_to_path "$HOME/bin"
add_to_path "$HOME/.local/bin"
add_to_path "/usr/local/bin"
本章总结
核心命令回顾
| 命令 | 用途 | 示例 |
|---|---|---|
export | 设置环境变量 | export PATH=$PATH:/new/path |
source | 重新加载配置 | source ~/.bashrc |
which | 查找命令路径 | which python |
apt install | 安装软件(Ubuntu) | sudo apt install vim |
yum install | 安装软件(CentOS) | sudo yum install vim |
重要配置文件
| 文件 | 作用 | 生效时机 |
|---|---|---|
~/.bashrc | Bash配置 | 每次打开终端 |
~/.bash_profile | Bash登录配置 | 登录时 |
~/.zshrc | Zsh配置 | 每次打开终端 |
/etc/environment | 系统环境变量 | 系统启动 |
/etc/profile | 系统Shell配置 | 登录时 |
最佳实践
- ✅ 用户级配置放在
~/.bashrc - ✅ 使用版本管理工具(nvm、pyenv等)
- ✅ 定期更新系统和软件包
- ✅ 使用虚拟环境隔离项目依赖
- ✅ 备份重要配置文件
下一步
- 学习Shell脚本入门(第15章)
- 掌握自动化脚本编写
- 提升开发效率
练习题:
- 创建一个自定义环境变量并永久保存
- 添加
~/bin到PATH并创建一个可执行脚本 - 使用nvm安装两个不同版本的Node.js并切换
- 配置5个常用的命令别名
参考答案:
# 1.
echo 'export MY_VAR="test"' >> ~/.bashrc
source ~/.bashrc
echo $MY_VAR
# 2.
mkdir -p ~/bin
echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
source ~/.bashrc
echo '#!/bin/bash' > ~/bin/test.sh
echo 'echo "Hello"' >> ~/bin/test.sh
chmod +x ~/bin/test.sh
test.sh
# 3.
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
source ~/.bashrc
nvm install 18
nvm install 16
nvm use 18
nvm use 16
# 4.
cat >> ~/.bashrc <<'EOF'
alias ll='ls -lah'
alias gs='git status'
alias dc='docker-compose'
alias update='sudo apt update && sudo apt upgrade'
alias myip='curl ifconfig.me'
EOF
source ~/.bashrc
💡 提示: 良好的环境配置是高效开发的基础,花时间优化你的开发环境是值得的!