版本变更
20241017 更改添加系统环境变量的方式
- 重要: 在后续配置其他软件发现踩坑了,强烈建议各位有按照教程操作的,按照以下步骤修复
- 原因
原3.2中【可选】部分将/usr/sbin添加到系统环境变量方式
在执行命令会将cat >> ~/.bashrc <<EOF PATH=$PATH:/usr/sbin export PATH EOFPATH=$PATH:/usr/sbin部分的变量解析,导致添加到~/.bashrc文件的内容与预期不符 - 建议操作
删除文件被添加的部分并重新使用以下命令重新添加cat >> ~/.bashrc <<'EOF' PATH=$PATH:/usr/sbin export PATH EOF - 总结
使用单引号可以防止 Shell 在传递给 <<EOF 之前解析变量值
- 原因
系统安装
下载 ISO
https://www.debian.org/distrib/
在“下载一个安装映像”中的“较庞大的 完整安装映像:包含了更多的软件包,以便在无法连上互联网的计算机上进行安装。”选择“64 位 PC DVD-1 iso”下载
安装时需要注意的
- 使用界面安装
- 语言选择,选择 English,Location 选择 China
- 设定 root 账号密码,并按提示新建一个账号(普通用户)并设置密码
- 软件包管理,可以选择本地镜像源(如果使用 DVD 安装默认将 cdrom 作为 source,也需要配置镜像,否则可能因依赖关系报错,例如 snmp)
- 组件:默认选择 GNOME 桌面环境(需要取消)和 Standard System Utilities(保持勾选),勾选 SSH server
系统配置
配置软件源
安装的时候没有选择网络镜像,现在系统只有 cd 源,可以访问 Debian worldwide mirror sites 查看选择可用的镜像站点。
中国可以使用的源如下(可能会有变化),最好使用 ping 比较一下延迟
| 国家/地区 | 站点 | 硬件架构 |
|---|---|---|
| ftp.cn.debian.org | /debian/ | amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el riscv64 s390x |
| mirror.lzu.edu.cn | /debian/ | amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el riscv64 s390x |
| mirror.nju.edu.cn | /debian/ | amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el riscv64 s390x |
| mirror.nyist.edu.cn | /debian/ | amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el riscv64 s390x |
| mirrors.163.com | /debian/ | amd64 arm64 i386 mips64el ppc64el riscv64 |
| mirrors.bfsu.edu.cn | /debian/ | amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el riscv64 s390x |
| mirrors.jlu.edu.cn | /debian/ | amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el riscv64 s390x |
| mirror.sjtu.edu.cn | /debian/ | amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el riscv64 s390x |
| mirrors.neusoft.edu.cn | /debian/ | amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el riscv64 s390x |
| mirrors.qvq.net.cn | /debian/ | amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el riscv64 s390x |
| mirrors.tuna.tsinghua.edu.cn | /debian/ | amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el riscv64 s390x |
| mirrors.ustc.edu.cn | /debian/ | amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el riscv64 s390x |
| mirrors.zju.edu.cn | /debian/ | amd64 arm64 armel armhf i386 riscv64 |
以 上海交大源 为例
-
这时候没有 sudo,使用 su 切换到 root 用户
su - root接下来输入安装时 root 用户的密码
-
备份
cp /etc/apt/sources.list /etc/apt/sources.list.bak -
修改
/etc/apt/sources.list文件如下# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释 deb https://mirror.sjtu.edu.cn/debian/ bookworm main contrib non-free non-free-firmware # deb-src https://mirror.sjtu.edu.cn/debian/ bookworm main contrib non-free non-free-firmware deb https://mirror.sjtu.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware # deb-src https://mirror.sjtu.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware deb https://mirror.sjtu.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware # deb-src https://mirror.sjtu.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware # 以下安全更新软件源包含了官方源与镜像站配置,如有需要可自行修改注释切换 # deb https://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware deb-src https://mirror.sjtu.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware -
镜像配置好后更新下系统,如果更新时提示 SSL 错误,可以先将
sources.list中的 https 改为 http,升级完成后再改回去apt update && apt upgrade
其他常见跟镜像有关的命令
sudo apt update #更新源
sudo apt upgrade #更新已安装的包
sudo apt dist-upgrade #升级系统
sudo apt clean && sudo apt autoclean #清理下载文件的存档
关于包管理工具
| 命令功能 / 系统 | Darwin (macOS) | FreeBSD | Debian/Ubuntu | RHEL(dnf = yum) |
|---|---|---|---|---|
| 搜索和查找软件包 | brew search | pkg search | apt list | yum list |
| 查看软件包信息 | brew info | pkg info | apt show | yum info |
| 安装 | brew install | pkg install | apt install | yum install |
| 删除 | brew uninstall/remove/rm | pkg delete/remove | apt remove | yum remove |
| 删除不在使用的软件包 | brew autoremove | pkg autoremove | apt autoremove | yum autoremove |
| 更新 repo 列表 | brew update | pkg update | apt update | yum makecache |
| 更新软件包 | brew upgrade | pkg upgrade | apt upgrade | yum upgrade/update |
| 清理缓存临时文件等 | brew cleanup | pkg clean -a | apt autoclean | yum clean all |
需要注意不要做以下操作
- 在 “
/etc/apt/sources.list” 中不要包含testing或unstable。 - 在 “
/etc/apt/sources.list” 里不要在标准的 Debian 中混合使用其它非 Debian 的档案库,例如 Ubuntu。 - 不要建立 “
/etc/apt/preferences”。 - 不了解会造成的全部影响,就不要通过配置文件改变软件包管理工具的默认行为。
- 不要使用 “
dpkg -i <random_package>” 安装任何软件包。 - 绝不使用 “
dpkg --force-all -i <random_package>” 安装任何软件包。 - 不要删除或修改 “
/var/lib/dpkg/” 中的文件。 - 不要让从源码直接安装的程序覆盖系统文件。如果需要的话,将它们安装到 “
/usr/local” 或 “/opt” 中。
解决默认没有安装 sudo
-
安装 sudo:
apt install sudo -
将之前创建的普通用户添加到 sudo 组,即可获得管理员权限:
usermod -a -G sudo <username>-a = append,不改变原有附加组
-
检查配置文件
/etc/sudoers# # This file MUST be edited with the 'visudo' command as root. # # Please consider adding local content in /etc/sudoers.d/ instead of # directly modifying this file. # # See the man page for details on how to write a sudoers file. # Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" # This fixes CVE-2005-4890 and possibly breaks some versions of kdesu # (#1011624, https://bugs.kde.org/show_bug.cgi?id=452532) Defaults use_pty # This preserves proxy settings from user environments of root # equivalent users (group sudo) #Defaults:%sudo env_keep += "http_proxy https_proxy ftp_proxy all_proxy no_proxy" # This allows running arbitrary commands, but so does ALL, and it means # different sudoers have their choice of editor respected. #Defaults:%sudo env_keep += "EDITOR" # Completely harmless preservation of a user preference. #Defaults:%sudo env_keep += "GREP_COLOR" # While you shouldn't normally run git as root, you need to with etckeeper #Defaults:%sudo env_keep += "GIT_AUTHOR_* GIT_COMMITTER_*" # Per-user preferences; root won't have sensible values for them. #Defaults:%sudo env_keep += "EMAIL DEBEMAIL DEBFULLNAME" # "sudo scp" or "sudo rsync" should be able to use your SSH agent. #Defaults:%sudo env_keep += "SSH_AGENT_PID SSH_AUTH_SOCK" # Ditto for GPG agent #Defaults:%sudo env_keep += "GPG_AGENT_INFO" # Host alias specification # User alias specification # Cmnd alias specification # User privilege specification root ALL=(ALL:ALL) ALL # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL # See sudoers(5) for more information on "@include" directives: @includedir /etc/sudoers.d接下来可以切回自己的用户
关于 vim
默认自带是 vim 并不是完整版的,使用上有好多问题,需要重新安装完整版的 vim
sudo apt remove vim-common
sudo apt install vim
在使用 crontab -e 命令时注意选择 vim.basic
可以创建 ~/.vimrc 配置文件,参考如下
""""""""""""""""""""""""""""""""""""""
" vim 示例配置文件 ~/.vimrc
" by leonshaw 2024.10.12
""""""""""""""""""""""""""""""""""""""
" 编码设置释义
" vim 内部使用的字符编码方式
"set encoding=编码
"set enc=编码
" vim 当前编辑的文件的字符编码方式,保存文件时也使用
"set fileencoding=编码
"set fenc=编码
" vim 打开的文件的字符编码方式,按顺序,最前面的优先
"fileencodings 是一个用逗号分隔的列表,简写 fencs
"set fileencodings=编码
" vim 所工作的终端的字符编码方式
"set termencoding=编码
" 编码设置
set encoding=utf-8
set fileencoding=utf-8
set fencs=utf-8,gb18030,gbk,cp936,gb2312,big5
set termencoding=utf-8
" 语言设置
set langmenu=zh_CN.UTF-8
set helplang=cn
" 去掉 vi 的一致性
set nocompatible
" 显示行号
set number
" 开启语法高亮
syntax on
" 设置字体
"set guifont=Monaco:h13
" solarized 主题设置在终端下的设置
"let g:solarized_termcolors=256
" 设置不自动换行
set nowrap
" 设置以 unix 的格式保存文件(UNIX 系统下默认)
set fileformat=unix
" 自动缩进
set autoindent
set cindent
" Tab 键的宽度 = 4 个空格
set tabstop=4
" 统一缩进为 4
set softtabstop=4
set shiftwidth=4
" expandtab:缩进用空格来表示,noexpandtab:用制表符表示一个缩进
set expandtab
" 高亮显示匹配的括号
set showmatch
" 匹配括号高亮的时间(单位是十分之一秒)
set matchtime=5
" 光标移动到 buffer 的顶部和底部时保持 3 行距离
set scrolloff=3
" 启动显示状态行 (1), 总是显示状态行 (2)
set laststatus=2
" 使退格键(backspace)正常处理 indent, eol, start 等
set backspace=2
" 允许 backspace 和光标键跨越行边界
"set whichwrap+=<,>,h,l
" 可以在 buffer 的任何地方使用鼠标(类似 office 中在工作区双击鼠标定位)
set mouse=a
set selection=exclusive
set selectmode=mouse,key
" 搜索忽略大小写
set ignorecase
" 高亮显示匹配字符(回车后)
set hlsearch
" 搜索实时高亮显示所有匹配的字符
set incsearch
" 设置当文件被改动时自动载入
"set autoread
" 突出显示当前行
set cursorline
" 打开标尺,在屏幕右下角显示当前光标所处位置(设置了 statusline 可以忽略)
set ruler
" 状态行显示的内容
"set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [ENC=%{&encoding}]\ [POS=%l,%v][%p%%]\ %{strftime(\"%Y.%m.%d\ -\ %H:%M\")}
set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ %{&encoding}\ %l,%c%)\ %p%%
" 显示 Tab 键和行尾空格
set list
"set listchars=tab:→■,trail:■
"set listchars=tab:→▫,trail:□
set listchars=tab:→·,trail:□
还可以将 .vimrc 添加到默认用户配置文件
cp ~/.vimrc /etc/skel/.vimrc
开启 root 账号登录的方法
不建议开启,以下步骤仅供参考。
Debian 默认禁用 root SSH 密码登录(Pubkey 认证不受此限,默认启用),安装时候创建特定用户作为管理员帐号(通过 sudo 执行特权命令),启用 root 用户步骤如下:
- 修改 root 密码(设置密码后可以通过控制台登录)
sudo passwd root
- 修改配置文件(启用 SSH 密码登录)
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo vim /etc/ssh/sshd_config
找到下面相关配置:
# Authentication:
#LoginGraceTime 2m
#PermitRootLogin prohibit-password
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
#PubkeyAuthentication yes
# Expect .ssh/authorized_keys2 to be disregarded by default in future.
#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
修改如下:
#PermitRootLogin prohibit-password
# 增加一句
PermitRootLogin yes
补充:
PermitRootLogin prohibit-password #允许 root 登录,但禁止使用密码认证
可以配合使用 Pubkey 认证,默认 `PubkeyAuthentication yes`
- 或者直接快速配置
sudo sed -i.bak "/^#PermitRootLogin/c"PermitRootLogin""yes"" /etc/ssh/sshd_config
# 或者
sudo sed -i.bak '/^#PermitRootLogin/c\PermitRootLogin yes' /etc/ssh/sshd_config
- 重启服务生效
sudo systemctl restart ssh
网络配置
格式化网卡命名
从 Debian 9 开始,(CentOS 7 开始,Ubuntu 16.04 开始),安装好后网卡名称变成了类似 ensxxx 这种随机名称(本例为 ens32,可能是其他数字)。
-
编辑 grub 配置文件
-
手动更改
sudo vim /etc/default/grub修改 GRUB_CMDLINE_LINUX = “” 为 GRUB_CMDLINE_LINUX = “net.ifnames = 0 biosdevname = 0”
-
或者直接使用 sed 编辑
sudo sed -i "/^GRUB_CMDLINE_LINUX=""/c GRUB_CMDLINE_LINUX=\"net.ifnames=0 biosdevname=0\"" /etc/default/grub
-
-
更新 grub 配置文件
sudo update-grub -
然后编辑配置文件并重启生效
sudo vim /etc/network/interfaces将 ensxxx 修改为 eth0
-
重启系统生效
sudo reboot
配置固定 ip
- 查看 IP 地址信息:
ip address
# 简写 ip a
【可选】或者使用 ifconfig(需要安装必要包,并将 /usr/sbin 添加到系统环境变量)
# 安装 net-tools
sudo apt install net-tools
# 添加环境变量供普通用户使用
echo 'PATH=$PATH:/usr/sbin' >> ~/.bashrc
echo 'export PATH' >> ~/.bashrc
# 使生效
source ~/.bashrc
echo $PATH
Debian 11 网络配置文件为:/etc/network/interfaces
默认配置使用 DHCP,安装过程并没有手动配置提示。内容如下:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug ens32 #ens32 在格式化网卡命名修改为 eth0
iface ens32 inet dhcp #ens32 在格式化网卡命名修改为 eth0
# This is an autoconfigured IPv6 interface
iface ens32 inet6 auto #ens32 在格式化网卡命名修改为 eth0
- 修改
/etc/network/interfaces配置文件为固定 ip
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
# 如果设置的是auto,不管你插不插网线,网卡都会启用,而且运行/etc/init.d/networking restart 之后网卡能自动起来
# 如果设置的是allow-hotplug,它会在开机时启动插网线的网卡,运行/etc/init.d/networking restart之后网卡不能自动重启
# 所以建议使用auto,但是如果设置网卡为dhcp,但是又没插网线,系统在启动,或者重启网络之后,系统会一直试图通过dhcp获取ip直到超时,这会影响系统的启动,最好是使用“auto”而且为每块网卡配置好ip
#allow-hotplug eth0 # ens32 在格式化网卡命名修改为 eth0
auto eth0 # ens32 在格式化网卡命名修改为 eth0
# 如果是DHCP
#iface eth0 inet dhcp # ens32 在格式化网卡命名修改为 eth0
# 如果是静态地址
iface eth0 inet static # ens32 在格式化网卡命名修改为 eth0
address 172.16.18.100
netmask 255.255.240.0
#broadcast 172.16.31.255 # 可选,上述配置了掩码
#network 172.16.16.0 # 可选,上述配置了掩码
gateway 172.16.16.1
# 这一部分是关于DNS
#dns-domain example.com
# domain 和 search 不能共存;如果同时存在,后面出现的将会被使用。
dns-search hzlti.work
dns-nameservers 223.5.5.5 8.8.8.8 #注意 debian 12 默认没有安装 resolvconf,所以需要手动在 resolv.conf 中编辑 DNS
# 或者安装 resolvconf 后,在这里配置,将自动更新 resolv.conf
# This is an autoconfigured IPv6 interface
iface eth0 inet6 auto # ens32 在格式化网卡命名修改为 eth0
【可选】关于 DNS,如果安装 resolvconf,修改配置文件后将自动更新 resolv.conf
# 安装 resolvconf
sudo apt install resolvconf
【可选】配置多个 IP 的 /etc/network/interfaces 配置文件需要修改对应部分为这样:
auto eth0:0
iface eth0:0 inet static
address 172.16.18.100
netmask 255.255.255.0
auto eth0:1
iface eth0:1 inet static
address 172.16.18.101
netmask 255.255.255.0
【可选】添加静态路由(Linux 通用,临时,重启消失):
# route add -net <目标网络> gw <网关IP>
route add -net 10.10.11.0/24 gw 10.10.1.1
【可选】Debian 配置永久静态路由,编辑 /etc/network/interfaces 并在末尾加上:
# static routes
# up ip route add <目标网络> via <网关IP> dev <接口名>
up ip route add 10.10.11.0/24 via 10.10.1.1 dev eth0
- 所有对编辑
/etc/network/interfaces配置文件的修改后,都需要重启网络来生效
#重启网络
systemctl restart networking
修改主机名
- 设置主机名:
# 修改主机名
# hostnamectl set-hostname <you hostname> --static
hostnamectl set-hostname hadoop100 --static
- 【或者】手动编辑
/etc/hostname文件
sudo vim /etc/hostname
# 修改为主机名 debian01
debian01
- 编辑
/etc/hosts文件
127.0.0.1 localhost
#127.0.1.1 debian # 将这一行改为新主机名
127.0.1.1 hadoop100
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
其他系统配置
时区配置
# 查看时区
timedatectl | grep "Time zone"
# 设置时区
sudo timedatectl set-timezone Asia/Shanghai
配置 NTP
编辑 /etc/systemd/timesyncd.conf 文件
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it under the
# terms of the GNU Lesser General Public License as published by the Free
# Software Foundation; either version 2.1 of the License, or (at your option)
# any later version.
#
# Entries in this file show the compile time defaults. Local configuration
# should be created by either modifying this file, or by creating "drop-ins" in
# the timesyncd.conf.d/ subdirectory. The latter is generally recommended.
# Defaults can be restored by simply deleting this file and all drop-ins.
#
# See timesyncd.conf(5) for details.
[Time]
#NTP=
#FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048
#ConnectionRetrySec=30
#SaveIntervalSec=60
在末尾加上
NTP=ntp1.aliyun.com ntp2.aliyun.com
重启服务生效:
systemctl restart systemd-timesyncd
【可选】手动同步(需要安装必要包):
# 安装ntpdate必要包
sudo apt install ntpdate
# 手动同步
ntpdate -s ntp1.aliyun.com
查看同步状态:
timedatectl timesync-status
locale 设置
-
安装 locales 包
sudo apt-get install locales -
添加配置
dpkg-reconfigure locales选择
en_US.UTF-8 UTF-8和zh_CN.UTF-8 UTF-8 -
查看语言
locale
如何创建一个管理员账号
默认配置下,创建一个管理员账号
useradd -m -s /bin/bash -G sudo <username>
passwd <username>
-m 创建同名 home 目录
-s 指定 shell
-G 修改附加属组
删除用户
sudo userdel --remove-home <username>
虚机安装 VMware Tools
默认自动安装,查看状态如下:
# 查看版本
vmtoolsd -v
# 查看运行状态
systemctl status vmtoolsd
虚机会自动安装,如果未安装,执行如下命令安装:
apt install open-vm-tools
Shell 配置
命令自动补全忽略大小写
该配置针对 Bash,仅使用 Zsh 可以忽略。
echo 'set completion-ignore-case on' >> ~/.inputrc
ll 别名定义
一般 Linux 中默认定义了 ll 别名,但参数比较少,需要使用更加强大的 lll 别名。
Debian 默认并没有定义 ll 别名。
写入环境变量(当前用户优先执行)
bash:
echo 'alias ll="ls -lahF --color=auto --time-style=long-iso"' >> ~/.bashrc
zsh:
echo 'alias ll="ls -lahF --color=auto --time-style=long-iso"' >> ~/.zshrc
注意:仅仅针对当前用户,写入全局用户配置文件:/etc/skel/.bashrc 或者 /etc/skel/.zshrc
制作镜像模板前清理各种缓存
清理 apt 缓存
sudo apt clean && sudo apt autoclean #清理下载文件的存档
清理临时文件夹
rm -rf /tmp/* # 清空临时文件夹
清空历史记录
#比较完整的清空历史记录
#debian/ubuntu use auth.log
rm -f /var/log/auth.log.*
echo > /var/log/auth.log
#rm -f /var/log/audit/audit*
#echo > /var/log/audit/audit.log
rm -f /var/log/secure*
echo > /var/log/secure
rm -f /var/log/btmp*
echo > /var/log/btmp
echo > /var/log/lastlog
rm -f /var/log/wtmp*
echo > /var/log/wtmp
#以上需要 root,以下当前用户执行
echo > ~/.bash_history
echo > ~/.zsh_history
history -c
至此,Debian 的基本配置已经完成,可以制作模板了。
参考文献
- TMaize. (2024, July 21). Debian 12 安装记录. TMaize Blog. Debian 12 安装记录-TMaize Blog
- delph1s. (2024, January 26). [好玩的 Docker 项目] Debian 11 系统安装. LINUX DO. 【好玩的 Docker 项目】Debian 11 系统安装
- Sysin. (2021, August 24). Debian 11 安装指南. Sysin.org. Debian 11 “bullseye” 安装笔记 - sysin | SYStem INside | 软件与技术分享
- 鸠摩智首席音效师. (2022, October 17). 如何安装 Debian 11 (Bullseye) 图文教程. SegmentFault. https://segmentfault.com/a/1190000042631416
