《Debian 常用命令与包管理》

《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)。

阅读 — · 全站 —
🎸 我的歌单 0 首