GNU/Linux安裝完成後,需要進行一系列的初始化配置才能滿足使用需求。本文詳細記錄各初始化操作,並用Shell腳本實現相關過程(在root模式中操作)。

GNU/Linux發行版衆多,目前有3大主流分支:RHELDebianSUSE。本文中的操作支持如下主流發行版:RHEL/CentOS/Fedora/Amazon LinuxDebian/UbuntuSUSE/OpenSUSE,暫不支持Arch LinuxGentooSlackware等發行版。

Official Documents

各發行版官方文檔頁

distribution doc
RedHat https://access.redhat.com/documentation/en/red-hat-enterprise-linux/
Debian https://www.debian.org/doc/
Ubuntu https://help.ubuntu.com
Suse https://www.suse.com/documentation/
OpenSUSE https://doc.opensuse.org
AWS https://aws.amazon.com/documentation/

本人通過Shell腳本實現下載操作,目前支持RHEL/AWS/SUSE/OpenSUSE的文檔下載。代碼託管在GitLab,通過如下命令執行

1
2
3
4
# curl -fsL / wget -qO-

# if need help info, specify '-h'
curl -fsL https://gitlab.com/MaxdSre/axd-ShellScript/raw/master/assets/gnulinux/gnuLinuxOfficialDocumentationDownload.sh | bash -s --

System Info Detection

爲快速偵測GNU/Linux系統信息,本人通過Shell腳本實現該操作過程(暫不支持對RAID磁盤的信息偵測)。代碼託管在GitLab,通過如下命令執行

1
2
3
4
# curl -fsL / wget -qO-

# if need help info, specify '-h'
curl -fsL https://gitlab.com/MaxdSre/axd-ShellScript/raw/master/assets/gnulinux/gnuLinuxMachineInfoDetection.sh | sudo bash -s --

Shell Script

系統初始化操作通過Shell腳本實現,代碼託管在GitLab,通過如下命令執行

1
2
3
4
# curl -fsL / wget -qO-

# if need help info, specify '-h'
curl -fsL https://gitlab.com/MaxdSre/axd-ShellScript/raw/master/assets/gnulinux/gnuLinuxPostInstallationConfiguration.sh | sudo bash -s --

Tips And Tricks

Bootable USB Drive

官方通常會在提供鏡像文件下載頁提供鏡像文件的Hash校驗值(通常爲sha256),出於安全考慮,建議對下載到本地的系統鏡像進行Hash校驗。通過校驗後,將系統鏡像燒錄到U盤中,通過U盤安裝系統。此處以鏡像文件~/Downloads/debian-9.4.0-amd64-DVD-1.iso爲例。

1
2
3
4
5
6
# List the partition tables for the specified devices
fdisk -l
# Disk /dev/sdb: 16.1 GB, 16131293184 bytes, 31506432 sectors

# https://www.debian.org/CD/faq/#write-usb
dd if=~/Downloads/debian-9.4.0-amd64-DVD-1.iso of=/dev/sdb bs=4M; sync

Screen Lock Hotkey

快速鎖屏幕

Desktop Command
Cinnamon Ctrl + Alt + L
GNome Command(Win) + L

X11 Forwarding Vis SSH

如果需要通過ssh調用遠程主機(Remote)中的GUI圖形化界面

在遠程主機(Remote)中進行如下配置

  1. 修改/etc/ssh/sshd_config
    • AllowTcpForwarding yes
    • X11Forwarding yes
  2. 執行startx命令;

在本地主機(Local)中進行如下配置

  1. 在文件~/.bashrc中添加export DISPLAY=:0.0

注意:如果目標主機(Remote)的~/.bashrc中存在該指令,須將其註釋掉,否則無法正常啓用GUI。

使用方法

1
ssh -Y [email protected] -p remotePort

初次連接時會提示

/usr/bin/xauth: file /home/remoteUser/.Xauthority does not exist

該文件會自動創建,無須擔心。

Rsync Synchronizing

通過rsync命令進行文件同步、備份,分別在本機和遠程主機中進行。命令使用參考Rsync(Remote Sync): 10 Practical Examples of Rsync Command in Linux

通過計劃任務(cron)進行定時操作,備份用戶家目錄/home/maxdsre

注意目標路徑的owner,使用ssh進行文件傳輸時須指定ssh key。

相關命令

  • crontab -e:修改、更新計劃任務
  • crontab -l:查看已存在的計劃任務

執行crontab -e,寫入如下信息

1
2
3
4
5
# Back up to local directory /opt/Backup/
*/20 * * * * rsync --bwlimit=2048 -avz --delete /home/maxdsre /opt/Backup/

# Back up to remote host DataBack /opt/Backup/, 'DataBack' is defined in file ~/.ssh/config
*/30 */2 * * * rsync --bwlimit=800 --delete -avze "ssh -i /home/maxdsre/.ssh/id_ed25519" /home/maxdsre DataBack:/opt/Backup/

GNOME Desktop Setting

Recent Files

GNome 3桌面環境中,默認會記錄當前用戶打開的文件,在 Recent 窗口中列出。

信息存放路徑爲~/.local/share/recently-used.xbel

1
[[ -f ~/.local/share/recently-used.xbel ]] && rm -f ~/.local/share/recently-used.xbel

但刪除後仍會自動創建。

方案1: 禁止Recent按鈕出現,參考鏈接,通過gsettings設置

1
2
gsettings get org.gnome.desktop.privacy remember-recent-files
gsettings set org.gnome.desktop.privacy remember-recent-files false

方案2:通過GNome Extension Recent Items手動清理,參考鏈接

可將二者結合起來使用。

CustomCorner

CustomCorner是GNome的一個擴展,用於在屏幕的四個角落創建快捷功能,代碼託管在Gitlab

注意: 該擴展不支持GNome 3.14及之前的版本。

根據說明編寫操作命令,通過如下命令安裝擴展

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
fileSavaPath='/tmp/archive.tar.gz'
curl -s https://gitlab.com/eccheng/customcorner/repository/archive.tar.gz?ref=master -o $fileSavaPath

targetPath="~/.local/share/gnome-shell/extensions/[email protected]"
[[ -d "$targetPath" ]] && rm -rf "$targetPath"/* || mkdir -p "$targetPath"

tar xf $fileSavaPath -C "$targetPath" --strip-components=1

gnomeShellVersion=$(gnome-shell --version | sed -n -r '[email protected] Shell (.*)@\[email protected]')

sed -i -r '/shell-version/[email protected]("shell-version": \[\").*(\"\],)@\1'"$gnomeShellVersion"'\[email protected]' "$targetPath"/metadata.json

[[ -f $fileSavaPath ]] && rm -f $fileSavaPath
unset fileSavaPath
unset targetPath
unset gnomeShellVersion

通過組合命令Alt + F2重啓GNome Shell,在桌面窗口左上側依次點擊 Applications –> System Tools –> Tweak Tool –> Extensions中找到 Customcorner ,根據個人需求進行設置。

SELinux

SELinux配置文件路徑/etc/selinux/config,其模式分爲3種:disabled, enforcing, permissive,默認爲permissive

RHEL/CentOS默認安裝有SELinux,修改配置文件即可。

對於SLES/OpenSUSE,只能先設置爲permissive重啓系統後才能修正爲enforcing,否則會出現無法問題。

不建議在Debian/Ubuntu中使用SELinux,配置過於繁瑣。

對於如何配置,此處不做討論。具體見本人Shell腳本funcSELinuxConfigurationfuncSELinuxSemanageOperation函數。

重要:如果對SELinux不瞭解,建議將模式調爲permissive,否則會出現因配置不當而導致應用無法正常使用的情況。

User Management

Config File

  1. /etc/security/pwquality.conf 用於設置密碼生成策略
  2. /etc/login.defs 用於設置有效期,加密方式等

sudo privilege

爲普通用戶添加sudo權限

默認配置文件爲/etc/sudoers,若不存在,則須先安裝sudo安裝包。

注意:Debian系(Debian/Ubuntu)使用的sudo用戶組名爲sudo,RHEL/SUSE使用的則是wheel

1
2
3
4
5
6
7
8
# disable sudo su - / sudo su root
sudo_config_path='/etc/sudoers'

# - For using group 'sudo' (Debian/Ubuntu)
sed -r -i '[email protected]#*[[:space:]]*(%sudo[[:space:]]+ALL=\(ALL:ALL\)[[:space:]]+ALL)@# \[email protected];/%sudo ALL=NOPASSWD:ALL/d;/group sudo/a %sudo ALL=NOPASSWD:ALL,!/bin/su' "${sudo_config_path}"

# - For using group 'wheel'
sed -r -i '[email protected]#*[[:space:]]*(%wheel[[:space:]]+ALL=\(ALL\)[[:space:]]+ALL)@# \[email protected];[email protected]#*[[:space:]]*(%wheel[[:space:]]+ALL=\(ALL\)[[:space:]]+NOPASSWD: ALL).*@\1,!/bin/[email protected]' "${sudo_config_path}"

爲用戶賦權

1
2
3
4
5
6
7
8
sudo_group_name='sudo'    # for group 'sudo'
sudo_group_name='wheel'    # for group 'wheel'

# - For existed user
usermod -a -G "${sudo_group_name}" "${username}"

# - For new user
usedadd -mN -G "${sudo_group_name}" "${new_username}"

New User

創建新用戶

1
useradd -mN "${new_username}"

設置新密碼

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# Debian/SUSE not support --stdin

# - For apt-get
# https://debian-administration.org/article/668/Changing_a_users_password_inside_a_script
echo "${new_username}:${new_password}" | chpasswd

# - For dnf/yum
echo "${new_password}" | passwd --stdin "${new_username}"

# - For Zypper
# https://stackoverflow.com/questions/27837674/changing-a-linux-password-via-script#answer-27837785
echo -e "${new_password}\n${new_password}" | passwd "${new_username}"

設置密碼失效時間

1
2
# setting user password expired date
passwd -n "${pass_change_minday}" -x "${pass_change_maxday}" -w "${pass_change_warnningday}" "${new_username}"

設置第一次登錄時強制重置密碼

1
2
# new created user have to change passwd when first login
chage -d0 "${new_username}"

TimeZone

時區如Asia/Singapore, America/New_York, Europe/Berlin等,文件存放在目錄/usr/share/zoneinfo/中。

若存在timedatectl命令

1
2
3
timedatectl set-timezone "${new_timezone}"
timedatectl set-local-rtc false
timedatectl set-ntp true

若不存在timedatectl命令,分兩種情況:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# - Condition 1: For Debian/Ubuntu using apt-get
echo "${new_timezone}" > /etc/timezone
dpkg-reconfigure -f noninteractive tzdata

# - Condition 2:
# For RHEL/OpenSUSE
ln -fs "/usr/share/zoneinfo/${new_timezone}" /etc/localtime

# For CentOS6 or older
sed -r -i '/^ZONE=/{[email protected]^([^=]+=).*@\1"'"${new_timezone}"'"@g;}' /etc/sysconfig/clock

HostName

設置主機名

如果命令hostnamectl存在,執行

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# The static hostname is stored in /etc/hostname, see hostname(5) for more information. The pretty hostname, chassis type, and icon name are stored in /etc/machine-info, see machine-info(5). -- man hostnamectl

# --static, --transient, --pretty
hostnamectl set-hostname "${new_hostname}"
hostnamectl --pretty set-hostname "${new_hostname}"
hostnamectl --static set-hostname "${new_hostname}"

# - set-deployment
# Debian Jessie has no set-deployment
hostnamectl set-deployment [development|integration|staging|production]

# hostnamectl set-location "${current_location}"

如果命令hostnamectl不存在

1
2
3
4
5
6
7
8
# temporarily change, when reboot, it will recover
hostname "${new_hostname}"

# For /etc/sysconfig/network exists (RHEL)
sed -r -i '/^HOSTNAME=/[email protected]^(HOSTNAME=).*@\1'"${new_hostname}"'@g' /etc/sysconfig/network

# For /etc/hostname exists (Debian/OpenSUSE)
echo "${new_hostname}" > /etc/hostname

注意:修改主機名後,須在文件/etc/hosts中添加

1
2
127.0.0.1 "${new_hostname}"
::1 "${new_hostname}"

否則執行sudo時會出現如下報錯

sudo: unable to resolve host AWS-Xenial

Software Management

配置文件路徑

  • yum: /etc/yum.conf
  • dnf: /etc/dnf/dnf.conf
  • apt-get: /etc/apt/apt.conf.d
  • zypper: /etc/zypp/zypp.conf, /etc/zypp/zypper.conf

軟件源配置路徑

  • yum/dnf: /etc/yum.repos.d/
  • apt-get: /etc/apt/sources.list, /etc/apt/sources.list.d/
  • zypper: etc/zypp/repos.d/

其中CentOS需要單獨安裝epel-release

各包管理器支持週期性更新配置,但此處不作敘述,詳細配置見本人Shell腳本funcAutomaticPackageUpdate函數。

Essential Packages

一些必要的安裝包

  • bash-completion: Tab自動補全
  • chrony:時間同步

Kernel

通常系統中的軟件源提供的Kernel並不是最新版本,如果需要安裝最新版本的kernel,須進行相關設置。

For Debian/Ubuntu

1
2
3
4
5
6
# For Ubuntu
apt-get -yq -f install $(apt-cache search linux-generic-hwe 2> /dev/null | sed -r -n '1{[email protected]^([^[:space:]]+).*[email protected]\[email protected];p}')


# For Debian
apt-get -t $(lsb_release -cs)-backports -y -q upgrade

For OpenSUSE

1
2
3
4
5
# http://pvdm.xs4all.nl/wiki/index.php/How_to_have_the_latest_kernel_in_openSUSE
# multiversion = provides:multiversion(kernel)
# multiversion.kernels = latest,latest-1,running
zypper ar -fcg http://download.opensuse.org/repositories/Kernel:/HEAD/standard/ kernel-repo
zypper dup -r kernel-repo

For CentOS

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# ELRepo /etc/yum.repos./elrepo.repo

# version_id=7    # CentOS 7
# version_id=6    # CentOS 6
elrepo_info=$(curl -fsL https://elrepo.org/tiki/tiki-index.php | sed -r -n '/rpm (--import|-Uvh)/{[email protected]<[^>]*>@@g;[email protected]*(http.*)[email protected]\[email protected];p}' | sed ':a;N;$!ba;[email protected]\[email protected]|@g;')

rpm --import "${elrepo_info%%|*}" 2> /dev/null
elrepo_info="${elrepo_info#*|}"
case "${version_id}" in
    7 ) elrepo_info="${elrepo_info%%|*}" ;;
    6 ) elrepo_info="${elrepo_info##*|}" ;;
esac

yum -y -q install "${elrepo_info}"

# Long term support kernel package name is kernel-lt version
# Mainline stable kernel package name is kernel-ml version

# yum --disablerepo='*' --enablerepo='elrepo-kernel' list available
# yum --disablerepo='*' --enablerepo='elrepo-kernel' -y -q install kernel-lt
yum --disablerepo='*' --enablerepo='elrepo-kernel' -y -q install kernel-ml

case "${version_id}" in
    7 )
        # egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'
        grub2-set-default 0 2> /dev/null
    ;;
    6 )
        [[ -s '/etc/grub.conf' ]] && sed -r -i '/default=/{[email protected]^([^+]+=).*[email protected]\[email protected];}' /etc/grub.conf
    ;;
esac

Input Methods

如果需要安裝中文輸入法,可通過ibusfcitx框架實現。

推薦使用RIME | 中州韻輸入法引擎,具體安裝說明見RimeWithIBus

Via ibus

使用ibus(Intelligent Input Bus)作為輸入法框架。可通過如下命令查看相關軟件包的名稱

1
apt-cache search -n ^ibus | awk '{print $1}'
1
sudo apt-get install -y ibus-rime ibus-pinyin ibus-cangjie ibus-sunpinyin

安裝完成後執行如下命令配置ibus

1
sudo ibus-setup

出現提示信息

The IBus daemon is not running. Do you wish to start it?

選擇Yes後出現如下提示信息

IBus has been started! If you cannot use IBus, add the following lines to your $HOME/.bashrc; then relog into your desktop. export GTK_IM_MODULE=ibus export [email protected]=ibus export QT_IM_MODULE=ibus

IBus Preferences窗口中選Input Method選項卡,點擊Add按鈕,選擇Chinese,可看到已經安裝的輸入法,選擇需要的輸入法,點擊Add添加。

在窗口左上角的Applications中找到Settings(通常在System Tools中),打開All Settings窗口後,找到Region&Language圖標點擊進去,在Input Reources下方點+(加號),點擊More(三個豎點那欄),在其中搜索chinese,可列出已安裝的中文輸入法。

此處選擇Chinese(Rime),點擊窗口右上角的Add按鈕進行添加。操作完成後即可在桌面右上角看到輸入法圖標,可點擊進行切換。也可通過按鍵Super+Space(Win鍵+空格鍵)進行輸入法的切換。

Rime輸入法支持多種輸入方案,可通過如下方式進行切換 1. 功能鍵F4 2. 組合按鍵Ctrl+` (鍵盤左上角的反引號)

:可能需要退出重新登入系統才能使用。

Via Fcitx

fcitx官方文檔 Install and Configure

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# - For Debian/Ubuntu
sudo apt-get install fcitx fcitx-rime -y

# - For OpenSUSE
# search
sudo zypper ref
zypper se fcitx*
# install fcitx and rime
sudo zypper in -y fcitx fcitx-rime
# This overwrites the system default set in /etc/sysconfig/language
sed -i '/^INPUT_METHOD=/d' ~/.profile
echo "INPUT_METHOD=\"fcitx\"" >> ~/.profile
1
2
3
4
5
6
7
8
9
# 選擇input method
im-config

# 點符號 + 添加rime,取消勾選 Only Show Current Language後查詢
fcitx-config-gtk3

# 重啓fcitx
# https://fcitx-im.org/wiki/Install_input_method
fcitx -r

退出當前登錄狀態,重新登錄。通過組合按鍵Ctrl+Space啓用Rime輸入法,通過按鍵L Shift臨時切換輸入法。

Web Browser

Google Chrome

Google Chrome官網爲 https://www.google.com/chrome/,點擊頁面的 Download now 按鈕,會跳出彈框提示需要下載何種安裝包,主要兩種

在GNome Desktop環境中,/usr/bin/x-www-browser用於設置系統默認瀏覽器,以下是Google Chrome在安裝過程中的配置記錄

1
2
3
update-alternatives: using /usr/bin/google-chrome-stable to provide /usr/bin/x-www-browser (x-www-browser) in auto mode
update-alternatives: using /usr/bin/google-chrome-stable to provide /usr/bin/gnome-www-browser (gnome-www-browser) in auto mode
update-alternatives: using /usr/bin/google-chrome-stable to provide /usr/bin/google-chrome (google-chrome) in auto mode

Google Chrome的配置文件(如登錄信息、設置、插件等)目錄爲

1
~/.config/google-chrome

安裝成功後,即可在Menu菜單中找到Google Chrome應用程序(通常是Applications->Internet)。

在瀏覽器地址欄中輸入如下地址,可顯示對應功能、信息

1
2
3
4
5
6
7
8
#瀏覽器版本信息
chrome://version

#Experiments功能控制
chrome://flags

#清除瀏覽歷史
chrome://settings/clearBrowserData

Plugins

在瀏覽器地址欄中輸入

1
chrome://plugins/

禁用不需要的插件,如Chrome PDF Viewer

啟用Do Not Track (Setting–>Privacy中)

Extensions

出於某些需要,安裝如下擴展

Mozilla Firefox

系統自帶的Mozilla Firefox版本較低,若要使用最新版本,需從Mozilla Firefox官網下載,FTP路徑。Mozilla Firefox默認未安裝Adobe Flash Player無法播放視頻,需從Adobe官網下載Adobe Flash Player後手動安裝,按需選擇下載格式,此處選擇.tar.gz格式。

Extensions

出於某些需要,安裝如下擴展

SRWare Iron

SRWare Iron官方網站 https://www.srware.net/en/介紹頁面下載頁面

其中Linux版本下載頁的鏈接可通過如下命令獲取

1
curl -s https://www.srware.net/en/software_srware_iron_download.php | sed -n '/Iron for Linux/p' | sed -r -n '[email protected]*href="(.*)" .*@\[email protected];' | sed -r '[email protected]\&amp\;@\&@g'

Change Logs

  • 2016.06.17 11:30 Fri Asia/Shanghai
    • 初稿完成
  • 2018.04.24 17:03 Tue America/Boston
    • 勘誤,更新,遷移到新blog