Ubuntu 作为一个Linux的发行版,在桌面环境的易用性上做了很多改善,对推动Linux的推广做了很大的贡献。同时,它作为服务器的操作系统也越来越多的被使用。当然,服务器端可能更多的人在使用Redhat、CentOS等系统。Linux的发行版本很多,基本命令都差不多,但是一些系统配置上,也存在着各种各样的差异。笔者结合Ubuntu的多年使用经验,总结一下Ubuntu系统的一些配置要点。
1. 网络的配置
Ubuntu在安装过程中会自动寻找网络连接并配置网络IP等,但是好多情况下,安装系统时不需要或不方便配置网络。那么,等我们安装完系统,就要先配好网络才能继续安装、配置其它软件。Ubuntu的网卡名称在几年前(大约14.04之前的版本)都是这样命名的:
有线网卡为eth0(多个网卡序号增大:eth1, eth2…),无线网卡是wlan0。
但是到了16.04的版本,网卡的命名做了非常大的改动,名称从eth0变为en开头的,为什么改名呢?
可预测的网络接口命名
自从 v197 systemd/udev 开始,系统可以为本地的Ethernet、WLAN和WWAN接口自动地分配可预测的、稳定的网络接口名称。该规范脱离了传统的命名机制(eth0,eth1,wlan0等),但是修复了许多问题。
原因
在传统的网络接口命名规则下,是由内核简单地从eth0开始为可被驱动探索到的设备分配名字(eht0,eth1…)。由于这些驱动不能够被现在技术所预测,意味着多个网络接口都可以被分配名为“eth0”、“eth1”这样的名字,这种方式存在一种隐患,就是一种接口可能是以“eth0”启动,但是结束时就变成了“eth1”.不可预测的命名规则存在着严重的安全威胁。 为了修复这个问题,许多方案被提出和实现。很长一段时间,udev都是根据Mac地址来分配永久了“ethX”名字。这导致了很多问题:这需要一个可写的但是通常不允许的root目录;由于系统的无边界性,当root一个OS镜像的时候可能会改变镜像的配置信息;许多系统的Mac地址并不是固定的。其中最大的问题是用户空间和系统内核对设备命名的冲突。 另一种解决方案就是“biosdevname”,该方案通过找到固件中固定的拓扑信息然后利用它们分配固定的接口。这个命名机制同/dev/*/by-path/ symlinks的方式很相似。大多数情况下,biosdevname 从底层的内核设备定位机制中分离了出来。 最后,许多观点迟滞根据用户选择的名字对接口重新命名,切断同Mac和物理位置的联系。这是一个非常好的选择,但是存在一个隐藏的问题就是用户获得了选择和分配这些名字的权利。 我们相信由“biosdevname”机制已领的泛化机制是一个很好的选择。基于固件、拓扑和位置信息分配固定的名字有一个巨大的优势,名字是全自动地、可预测的,即使硬件添加或删除也不影响。
V197添加了什么
systemd 197为许多命名策略新增了许多本地化的支持到 systemd/udevd 并实现了一个类似于“biosdevname”的机制。五种网络接口的命名机制通过udev得到了支持。
/* * Two character prefixes based on the type of interface: * en — Ethernet * sl — serial line IP (slip) * wl — wlan * ww — wwan * * Type of names: * b — BCMA bus core number * c — CCW bus group name, without leading zeros [s390] * o[d] — on-board device index number * s[f][d] — hotplug slot index number * x — MAC address * [P]ps[f][d] * — PCI geographical location * [P]ps[f][u][..][c][i] * — USB port number chain */
上面一段是systemd源码的注释,意思是:
en代表以太网卡
p3s0代表PCI接口的物理位置为(3, 0), 其中横座标代表bus,纵座标代表slot
那么如何查看我的机器上的网卡名称是什么呢?可以通过以下命令来查看:
ls /sys/class/net/docker0 enp0s31f6 enx30b49e09b81e lo zt0
可以看到我的机器上有5个网卡设备。知道了网卡名称就可以配置网络IP了。这里,我们用vim编辑网络配置文件:
vim /etc/network/interfaces
如果你的网络是通过dhcp自动获取IP,可以这样编写配置文件:
auto lo # 代表127.0.0.1,即localhostiface lo inet loopback auto enp0s31f6 # 这是网卡名称iface enp0s31f6 inet dhcp
如果你的网络有静态IP,则这样编写配置文件:
auto lo # 代表127.0.0.1,即localhostiface lo inet loopbackauto enp0s31f6 # 这是网卡名称iface enp0s31f6 inet static address 10.1.40.240 gateway 10.1.40.254 netmask 255.255.255.0
如果你的网卡需要绑定多个IP,则增加的IP这样写:
auto enp0s31f6:0 # 这是虚拟出的网卡名称,加了:0,如果有更多IP,可以:1, :2, ...iface enp0s31f6:0 inet static address 192.168.1.100 gateway 192.168.1.1 netmask 255.255.255.0
配置文件编辑完成后,重启一下网络,使配置生效:
sudo /etc/init.d/networking restart# 或者用service命令:sudo service networking restart
2. 更改源列表
源列表(sources.list)是Ubuntu的包管理软件apt-get获取软件的网址列表。该列表文件位于: /etc/apt/sources.list。由于Ubuntu官方的源地址在国外,国内访问速度很慢,所以,我们需要改成国内的镜像服务器,这样下载安装软件包的时候就可以很快了。比如,可以使用阿里云的镜像:
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
除了阿里云的镜像,国内还有清华大学镜像、中科大镜像等等,可以根据自己的网络连接情况选择镜像源。
随着 Ubuntu 16.04 LTS 的发布,Ubuntu 的软件包管理命令也发生了变化,新系统采用了 Debian 项目中所使用的 APT(Advanced Package Tool)来完成各种的不同的任务,APT 命令全面取代了我们之前在 Linux 软件包管理基本操作入门中所介绍的 apt-get、apt-cache 等功能。下面是新的apt和旧的apt-get、apt-cache的不同:
Ubuntu 16.04 LTS | 老版本Ubuntu |
---|---|
apt install 包名 | 替代 apt-get install 包名 |
apt remove 包名 | 替代 apt-get remove 包名 |
apt search 包名 | 替代 apt-cache search 包名 |
apt show 包名 | 替代 apt-cache show 包名 |
apt update | 替代 apt-get update |
apt upgrade | 替代 apt-get upgrade |
apt list –installed |
|
apt list –upgradable | apt-get -u upgrade –assume-no |
apt edit-sources |
|
apt autoremove | 替代 apt-get autoremove |
apt purge 包名 | 替代 apt-get purge 包名 |
3. 永久更改ulimit
ulimit限制着程序打开文件的数目,默认情况下为1024,作为服务器使用时,这个数字往往非常偏小。Ubuntu要修改这个限制,稍微有点复杂。以下步骤我们把限制数修改为:65536。
(1)修改系统限制
abc@ubuntu:~$ sudo vim /etc/sysctl.conf
文件最后增加一行:
fs.file-max = 65536
(2)修改limits.conf
sudo vim /etc/security/limits.conf
增加:
* soft nproc 65536* hard nproc 65536* soft nofile 65536* hard nofile 65536 root soft nproc 65536 root hard nproc 65536 root soft nofile 65536 root hard nofile 65536
(3)修改common-session
sudo vim /etc/pam.d/common-session
增加:
session required pam_limits.so
(4)编辑/etc/profile,加入
ulimit -SHn 65536
重启系统,再次通过命令ulimit -n 查看,该数字已经变成65536了。
4. 修改MySQL的存储路径datadir
Ubuntu通过apt install mysql-server 安装的MySQL的默认路径是 /var/lib/mysql。作为服务器,我们往往把MySQL的数据盘单独出来,而不是和系统盘混在一起。比如,我们希望MySQL放在/database 这个数据盘上,则需要以下配置:
#0. 停止MySQL服务
sudo service mysql stop
#1.复制原有数据(-a 选项保持mysql目录的原始权限)cp -ra /var/lib/mysql/ /database/
#2.修改MySQL配置文件
vim /etc/mysql/my.cnf datadir = /database/mysql
#3.修改apparmor启动文件
vim /etc/apparmor.d/usr.sbin.mysqld#把/var/lib/mysql r /var/lib/mysql/** rwk#修改成/database/mysql r /database/mysql/** rwk,
#4.重启apparmor/etc/init.d/apparmor restart
#5. 启动MySQL
sudo service mysql start