目录

Ubuntu装机指南

Ubuntu 18.04 作为示范机,U 盘装机软件 LinuxLive USB Creator

Ubuntu20.04

1. 更换软件源

修改 /etc/apt/sources.list 为如下内容:

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

2. 更换 DNS

换到DNSPodPublicDNS 官方指南Ubuntu18的设置操作与指南里不同。

$ systemd-resolve --status          # 查看当前使用的 DNS Server
$ sudo vim /etc/systemd/resolved.conf
[Resolve]
DNS=119.29.29.29 182.254.116.116    # 换成DNSPod
$ sudo systemctl restart systemd-resolved.service # 重启服务

3. 设置 vim

$ sudo update-alternatives --config editor                # 默认编辑设置为vim
set nu                        " 设置行号
set hlsearch                  " 高亮查找项
set incsearch                 " 查找跟随
set ignorecase                " 查找时忽略大小写
set fdm=marker                " 设定标记折叠
set autoindent                " 设置自动缩进
set tabstop=4                 " 设置tab为4个空格
set softtabstop=4
set shiftwidth=4
set expandtab                 " tab => space
set list                      " 显示空格和tab
set listchars=tab:>-,trail:-  " 显示空格和tab的格式
syntax on                     " 语法高亮
set tabpagemax=15             " 设置最大打开的标签页数

4. 免密登录

$ scp .ssh/id_rsa.pub link@192.168.1.181:/home/link/id_rsa.pub  # PC 机执行
# 登录虚拟机,然后执行下面两句
$ ssh-keygen  # 每复制一个虚拟机,公私钥就得重置下,保证每台机器都不同
$ cat id_rsa.pub >> .ssh/authorized_keys # 公私钥的重置,不影响 authorized_keys 的值
$ chmod 600 .ssh/authorized_keys
$ sudo visudo # 设置执行 sudo 命令不需要输入密码
%sudo   ALL=(ALL:ALL) NOPASSWD:ALL

5. 设置时区sudo apt-get install -y bind9 bind9-host dnsutils bind9-doc

$ sudo apt-get install ntpdate  # 安装时间同步工具
$ sudo ntpdate cn.pool.ntp.org  # 同步时间
$ sudo hwclock --systohc        # 将同步后时间写入硬件

$ sudo tzselect   # 选择亚洲Asia,继续选择中国China,最后选择北京Beijing

# 将下面这句加入到 ~/.profile
TZ='Asia/Shanghai'; export TZ
$ date                          # 查看时间

6. 设置语言

$ sudo apt-get install -y language-pack-zh-hans # 安装中文简体语言包
$ locale -a                                     # 查看已安装的语言包

# 将下面这句写入到 ~/.bashrc 只给当前用户修改下环境变量,不需要全局
export LANG="zh_CN.utf8"

$ date # 重启后,查看下时间,就知道中文和时区已经配置好了
2020年 01月 02日 星期四 23:41:23 CST

7. 设置 hostname

$ sudo vim /etc/cloud/cloud.cfg     # 将 hostname 设置为可修改状态

preserve_hostname: true             # 修改一句

$ hostnamectl set-hostname link1    # 设置新 hostname,重启确认

8. 设置静态 IP

首先,我们需要确认下本网段内,哪些私有IP已经被使用了,以及网关地址。

的,所以我们需要修改下,启动后:$ sudo nmap -sP 192.168.13.0/24 # 先嗅探下,找出本网段中没有被使用过的私有 IP 地址
$ route -n                      # 找出网关地址

找到一个未使用的IP 比如 192.168.0.10,我们就可以开始设置了。Ubuntu 18.04使用了新软件netplan来管理IP

$ sudo vim /etc/netplan/50-cloud-init.yaml        # yaml 文件名可能有不同

设置如下,yaml文件千万要注意格式:

network:
  ethernets:
    enp0s3:
      addresses: [192.168.0.10/24]
      gateway4: 192.168.0.1
      dhcp4: no
  version: 2
$ sudo netplan apply    # 重启下网络,如果是 ssh 链接,那么执行后会掉线
$ ifconfig              # 确认下是否已经修改

复制多个Ubuntu

在制作完一个干净的Ubuntu 18.04 Server后,我们完全可以以它作为源,复制出多个Server用于实验。这里利用的是Virtual Box的 “链接复制”,复制快速,节省磁盘。要注意重新生成网卡的MAC地址。

复制完后的Server,它们的公私钥、hostnameip 是一毛一样的,所以我们需要修改下,启动后:

$ ssh link@192.168.0.10 # 副本与源Server一毛一样,所以直接ssh登录副本

# SSH 登录副本后
$ ssh-keygen                                  # 重新生成公私钥
$ sudo hostnamectl set-hostname link1         # 设置新的 hostname
$ sudo vim /etc/netplan/50-cloud-init.yaml    # 修改静态 IP

addresses: [192.168.0.11/24, ]                # 修改行

$ sudo netplan apply                          # 应用生效,执行后 SSH 应该已经掉线了 ^_^

# 新开终端后
$ ssh link@192.168.0.11                       # 使用新 IP 免密登录 link1 Server

服务器都设置好后,使用“无界面启动”模式启动,然后使用ssh link@192.168.0.*登录。

确认MAC地址和product_uuid唯一

$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 08:00:27:36:3a:1a brd ff:ff:ff:ff:ff:ff
$ sudo cat /sys/class/dmi/id/product_uuid
BCCB5FF1-CA27-D040-BDA8-2D5310CF481F

私网DNS

sudo apt-get install -y bind9 bind9-host dnsutils bind9-doc
sudo netstat -tulnp | grep named # 检查是否在运行
nslookup www.qq.com # 查看该域名的DNS信息

安装服务端基础开发软件

sudo apt-get install -y apt-transport-https
sudo apt-get install -y vim git aptitude zsh tree tmux lnav
sudo apt-get install -y bash-builtins bash-completion bash-doc bash-static
sudo apt-get install -y rar unrar p7zip zip unzip          # 压缩

# 安装 c++ 开发环境
sudo apt-get install -y gcc gdb make autoconf automake libtool build-essential flex bison cmake
sudo apt-get install -y linux-headers-$(uname -r)
sudo apt-get install -y automake autoconf libtool pkg-config intltool checkinstall

# 修复因为依赖问题,安装失败的软件
apt --fix-broken install
git config --global core.quotepath false                # git 中文正确显示
git config --global core.editor vim                     # 默认编辑器 vim
git config --global user.name "link"                    # git username
git config --global user.email "link@muchenglin.com"    # git email
#!/bin/bash

lsb_release -a
cat /etc/issue
uname -a

# 安装调试软件 insight 的依赖
sudo apt-get install autoconf autogen texinfo zlib1g-dev tcl-dev tk-dev mesa-common-dev
sudo apt-get install libjpeg-dev libtogl-dev python-dev
sudo apt-get install flex bison itcl3 itk3 iwidgets4

sudo apt-get install lnav                       # 安装终端看访问日志的神器 lnav观看 [服务器端]
sudo apt-get install bless                      # 查看二进制,客户端软件

快捷键

alt + F2                # 运行一个命令
Super + L               # 锁屏,离开工作
Ctrl + Alt + T          # 开启终端
Super + tab             # 切换 App
Shift + Ctrl + Print    # 区域截图到剪贴板
Shift + Print           # 区域截图到 图片 目录
Ctrl + shift + A        # 带画笔的截图(Flameshot提供)
F5                      # 刷新

设置软件运行时语言环境

Locale 是软件在运行时的语言环境, 它包括语言Language, 地域Territory和字符集Codeset:

  • sudo vim /etc/enviroment 添加 LANG="zh_CN.UTF-8"

  • sudo locale-gen

  • sudo vim /etc/default/locale 添加 LANG=zh_CN.UTF-8

gnome-session-properties 设置开机自动运行软件

# 安装 Tab 栏目显示 CPU 和 内存使用率 工具
sudo add-apt-repository ppa:fossfreedom/indicator-sysmonitor
sudo apt-get update
sudo apt-get install indicator-sysmonitor   # 安装好后,Preferences 设置下开机运行就好
nohup indicator-sysmonitor &                # 手动启动

安装 Swoole :

sudo apt-get install libmcrypt-dev libiconv-hook-dev libxml2-dev libmysqlclient-dev libcurl4-openssl-dev
sudo apt-get install libjpeg8-dev libpng-dev libfreetype6-dev
sudo apt install php-pear
sudo apt install php7.2-dev     # 这里要确定自己安装的版本号
sudo pecl install swoole

需要将extension=swoole.so添加到php.ini文件(通过phpinfo()确认路径)中,开启Swoole拓展。

然后重启php-fpm:

sudo systemctl restart php7.2-fpm.service
sudo systemctl restart nginx.service
# apt-get 命令
apt-cache search keyword        搜寻软件
apt-cache show package          软件包信息
apt-get install package         安装软件
apt-get remove package          删除软件
apt-get --purge remove package  彻底删除

更强大的 aptitude

# aptitude 更强大的的 apt-get 命令
sudo apt-get install aptitude           安装aptitude
sudo aptitude                           打开软件包字符操作界面
sudo aptitude search package            搜索
sudo aptitude install package           安装软件
sudo aptitude remove package            删除软件
sudo aptitude purge package             彻底删除 连配置一起删除
sudo aptitude update                    更新软件源
sudo aptitude upgrade                   更新软件

使用第三方源 安装软件

sudo add-apt-repository ppa:ppsspp/stable    添加ppa源, 在source.list里添加 ppa 源了,同时完成导入key
sudo aptitude update                         更新源
sudo aptitude search ppsspp                  搜索下刚刚添加的第三方源的软件
sudo aptitude install ppsspp                 安装它
sudo aptitude purge ppsspp                   删除它
sudo add-apt-repository -r ppa:ppsspp/stable 删除ppa源
sudo aptitude update                         再次更新源

dpkg 管理 Debian 软件包

dpkg -l                         列出系统安装的所有debian包
dpkg -c package.deb             列出 deb 包的内容
dpkg -ivh <.deb file name>      安装软件
dpkg -L package                 用此命令查看软件安装到什么地方
dpkg -r package                 移除软件(保留配置)
dpkg -P package                 移除软件(不保留配置)
dpkg -s package                 查找包的详细信息
dpkg –unpack package.deb        解开 deb 包的内容
dpkg -S keyword                 搜索所属的包内容
dpkg –configure package         配置包
dpkg–reconfigure package        重新配置包

编译安装软件

sudo aptitude install libxml2-dev libgtk2.0-dev libnotify-dev libglib2.0-dev libevent-dev
sudo aptitude install libcurl4-openssl-dev libssl-dev # 先安装依赖
sudo apt-get build-dep wireshark # 安装编译wireshark工具
# 在 wireshark 源码文件夹下执行
./configure
make
sudo checkinstall # 构建debian包并且安装

截图工具

自带的截图软件,使用 shift + printscreen 截图,自动保存到指定文件夹,也挺好的!

Linux 上好用的截图工具 flameshot,这一款是带画笔工具的,非常好用,唯一就是每次都需要选定保存的文件夹。
Flameshot 一个简洁但功能丰富的截图工具

解决软件包版本太高问题

E:无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系 解决办法 就是这个提示

解决办法: Ubuntu 解决包依赖关系

方案就是使用aptitude

  • 执行命令sudo aptitude install build-essential

  • 在展示1) build-essential [未安装的]等保持原样,并且询问 是否接受该解决方案?[Y/n/q/?] 时,填入 n,表示不接受

  • 在继续展示 降级 下列软件包:1) gcc-7-base [7.3.0-21ubuntu1~16.04 (now) -> 7.3.0-16ubuntu3 (bionic)], 并询问是否接受该解决方案?[Y/n/q/?]时,填入Y 表示接受软件包降级,这样问题就解决了

特殊权限

000 , --- , 0 , 不使用任何特殊权限
001 , --t , 1 ,
010 , -s- , 2 ,
011 , -st , 3 ,
100 , s-- , 4 ,
101 , s-t , 5 ,
110 , ss- , 6 ,
111 , sst , 7 ,
➜  ~ ls -alh /bin/su
-rwsr-xr-x 1 root root 40K 5月  16 10:28 /bin/su
  • s 特殊权限

  • 只对二进制程序有效 , 执行者拥有该程序的执行权限,且只在执行该程序的过程中有效

  • 执行者将具有该程序拥有者的权限,比如 su 的 s 权限,可以让用户暂时拥有 root 用户的权限

  • 通过 chmod u+s file 或者 chmod 4755 file 来设置

➜  ~ ls -alh /usr/bin/mlocate
-rwxr-sr-x 1 root mlocate 39K 11月 18  2014 /usr/bin/mlocate
  • SGID 权限,与 s 权限相同,不同的是,SGID 在执行过程中还会得到该程序的用户组的支持

  • 对于设置了 SGID 权限的目录来说,用户拥有 r x 权限时,可以进入该目录,用户在此目录下的有效用户变为该目录的用户,创建的文件的所属用户也是该目录的用户

  • 使用 chmod g+s file 来添加此权限

➜  / ls -alh / |grep tmp
drwxrwxrwt  16 root root 4.0K 6月   3 13:01 tmp
  • SBIT 权限, --t ,该权限只对目录有效,用户在该目录下创建的文件或目录,权限默认为-rw-r--r--,即只有该用户和 root 可以删除

  • 使用命令 chmod o+t /tmp 来添加此权限

限制用户进程数

/etc/security/limits.conf 文件后面添加上下面代码,限制用户进程数为 200

*   hard    nproc   200

笔记本 fn 键问题

fn + Esc切换功能键与F1~F12

Ubuntu 防火墙

$ sudo ufw status
$ sudo ufw allow 80
$ sudo ufw allow 443
$ sudo ufw allow 3306
$ sudo ufw allow 22

中文输入法

使用开源的Rime输入法:

sudo apt-get install ibus-rime # 安装

设置:

$ ibus-setup   # 设置水平显示词语
$ ibus restart # 配置生效

如果上面的没有生效,请尝试在~/.config/ibus/rime/build/ibus_rime.yaml,添加下面内容:

style:
  horizontal: true
Ctrl + space 组合键来切换输入法

改改默认配置:只留下中文简体、每页词语数为10

vim .config/ibus/rime/default.yaml 

禁用ipv6协议

编辑 /etc/sysctl.conf 文件,在最后面添加:

net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1

终端执行,让配置生效,然后重启电脑。

$ sudo sysctl -p

禁用NetworkManager

Ubuntu 默认使用 /etc/network/interfaces 来设置网络,参考如下:

# interfaces(5) file used by ifup(8) and ifdown(8)
# 回环网卡
auto lo
iface lo inet loopback

# 系统硬件网卡 设置成静态IP配置
auto enp4s0
iface enp4s0 inet static
address 192.168.31.124
netmask 255.255.255.0
gateway 192.168.31.1

而Ubuntu Desktop版本,使用了NetworkManager来再次接管网络设置,常常发生莫名其妙的网络问题,所以建议禁用NetworkManager,只保留 interfaces 机制来配置网络。

# 查看网卡硬件,包括虚拟出来的
$ sudo lshw -C network                         
  *-network                 
                  ...
       logical name: enp4s0 # 真实网卡
       ...
  *-network DISABLED # 这个就是未启用状态
                 ...
       logical name: virbr0-nic # KVM 虚拟出来的
       serial: 52:54:00:1d:c6:ac

$ sudo systemctl stop network-manager.service # 关闭服务
$ sudo rm /var/lib/NetworkManager/NetworkManager.state # 删除当前运行状态
$ sudo systemctl disable network-manager.service # 禁止开机启动

$ sudo vim /etc/NetworkManager/NetworkManager.conf # 修改配置文件
# 设置为 managed=false 

$ sudo systemctl restart networking.service # 重启系统网络

netplan使用

使用 /etc/network/interfaces 来直接设置网卡的方式,已经渐渐的被主流淘汰了,Ubuntu 从 18.04开始,就使用 netplan 来管理网络.

https://netplan.io/ 官网

image-20210308012422145

一份 Ubuntu Server 服务器配置参考:

network:
  version: 2
  ethernets:
    enp0s8:
      dhcp4: yes
    enp0s3:
      addresses: [10.0.2.15/24]
      gateway4: 10.0.2.2
      dhcp4: no
$ sudo netplan -d apply # 更新网络
$ sudo systemctl restart systemd-networkd.service # 重启 networkd
$ sudo systemctl restart networking.service # 重启网络