《Debian 常用命令与包管理》
本文汇总 Debian 系系统的常用操作:apt/dpkg 包管理、RPM 解包、常见开发库安装(json-c、lrzsz)、终端环境配置(bashrc)与常见问题处理。
1 apt / dpkg 包管理
# 更新软件源索引并升级
apt update && apt upgrade
# 安装 / 删除 / 彻底删除(移除配置)
apt-get install -y <package>
apt-get remove <package>
apt-get remove --purge <package>
# dpkg 解包 .deb 到指定目录(不安装)
dpkg -X my-debian-package.deb /tmp/target
# 软件清单备份与恢复
sudo dpkg --get-selections > selections
sudo dpkg --set-selections < selections && apt-get dselect-upgrade
2 常用开发工具安装
# rz / sz(终端上传下载文件)
sudo apt-get install -y lrzsz
# json-c 开发库(源码编译方式,亦可直接装 libjson-c-dev)
apt-get install libjson-c-dev
# 需要新版本时源码安装:
git clone https://github.com/json-c/json-c.git
cd json-c && sh autogen.sh
./configure
make -j$(nproc)
make install
make check
3 终端环境配置(~/.bashrc)
# 更友好的 PS1 提示符(换行显示)
PS1='\u@\h:\w\n-> '
# 支持中文
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LESSCHARSET=utf-8
启用 git 提示符(需要 bash-git-prompt):
GIT_PROMPT_START='\u@\h:\w'
GIT_PROMPT_END='\n'
GIT_PROMPT_ONLY_IN_REPO=1
source ~/.bash-git-prompt/gitprompt.sh
配置 PATH 示例(Go 环境):
export GOPATH=$HOME/work/go-workspace
export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
4 常见问题
4.1 dpkg 中断
报错 dpkg was interrupted, you must manually run 'dpkg --configure -a',执行修复:
sudo dpkg --configure -a
4.2 debconf 前端初始化失败
debconf: unable to initialize frontend: Dialog,无 TTY 环境下安装时加环境变量:
DEBIAN_FRONTEND=noninteractive apt-get install -y <package>
4.3 软件源 GPG 签名缺失
安装/更新源时报 NO_PUBKEY:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <KEY_ID>
sudo apt-get update
4.4 公共函数库位置不同(脚本兼容)
CentOS 与 Ubuntu 的 init 函数库路径不同:
# centos
/etc/rc.d/init.d/functions
# ubuntu / debian
/lib/lsb/init-functions
5 删除文件名以 - 开头的文件
rm -- -fileName
# 或
rm -f -- -fileName
cat -- -fileName
6 获取未占用端口
下列脚本在指定区间内找一个未被监听的随机端口(常用于动态分配服务端口):
#!/bin/bash
is_listening() {
TCPnum=$(netstat -an | grep ":$1 " | awk '$1 == "tcp" && $NF == "LISTEN"' | wc -l)
UDPnum=$(netstat -an | grep ":$1 " | awk '$1 == "udp" && $NF == "0.0.0.0:*"' | wc -l)
(( num = TCPnum + UDPnum ))
[ "$num" -eq 0 ] && echo 0 || echo 1
}
random_range() { shuf -i $1-$2 -n1; }
PORT=0
while [ "$PORT" -eq 0 ]; do
temp=$(random_range 8000 9000)
[ "$(is_listening $temp)" = 0 ] && PORT=$temp
done
echo "port=$PORT"
依赖
shuf(GNU coreutils)。
阅读 —
·
全站 —