基础环境
官方虚拟机下载地址
https://www.ubuntu.com/download/server
常用命令
查看当前 Ubuntu 系统版本
1 | mac@ubuntu:~$ cat /proc/version |
1 | mac@ubuntu:~$ uname -a |
上面的方法都是根据 ubuntu 的内核版本来显示,下面可以显示 Ubuntu 的发型版本信息。1
2
3
4
5
6mac@ubuntu:~$ sudo lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.10
Release: 16.10
Codename: yakkety
主机开启 SSH 远程登录
安装 openssh-server1
sudo apt-get install openssh-server
查看 ssh-server 启动了没1
ps -e | grep ssh
启动 ssh-server1
sudo /etc/init.d/ssh start
这时,便可以使用 SSH Client 远程登录主机了
设置 yum
安装 yum
1 | sudo apt-get install yum |
设置 yum repo
说明
Ubuntu 主要使用apt-get install
的方式来进行软件安装和管理
虚拟机安装 Ubuntu
virtualbox mac
mac 主机通过 virtualbox 安装 ubuntu server 16.10 虚拟机
ssh from mac to ubuntu
安装完成以后,默认的情况下,mac 是不能通过 SSH 访问到 ubuntu 的,ping 也不行;
virtualbox 添加 vboxnet0
- 虚拟机关机的情况下,执行如下的步骤添加 vboxnet0
What is Host-Only Networking
virtualbox -> preferences -> Networks -> Host-only Networks -> 添加 -> 生成 vboxnet0;主要过程如图所示 完成以后,virtualbox 会向 mac 主机添加一个虚拟网卡 vboxnet0 - 查看 mac 主机上的 vboxnet0
ifconfig
显示 vboxnet0 虚拟网卡;
注意,这里的桥接网关地址为 “192.168.56.1”,表示 mac 主机将通过该网关与 ubuntu 虚拟机通讯
设置 virtualbox Network Adapters
virtualbox -> Settings -> Network
- 设置 Adapter 1 为桥接模式,记得选择本地的无线网卡
- 设置 Adapter 2 为 Host-only 模式
记得选择 vboxnet0
设置 ubuntu 虚拟机虚拟网卡地址
启动 ubuntu 虚拟机
- 查看虚拟机虚拟网卡信息
ifconifg -a
不过最好使用 sudo,因为不使用的情况下,有时候不会显示所有的信息,sudo ifconfig -a
或者使用简单的命令ip link
查询网卡信息,
注意,我本地 ubuntu 16.10 虚拟机没有使用名为 eth0, eth1 的虚拟网卡,取而代之使用的是 enp0s3, enp0s8;注意,enp0s8
就是 Host-Only 在虚拟机端生成的 Host-Only 虚拟网卡。 - 修改虚拟网卡信息
sudo vim /etc/network/interfaces
添加如下信息1
2
3
4
5
6
7auto enp0s3
iface enp0s3 inet dhcp
auto enp0s8
iface enp0s8 inet static
address 192.168.56.11
netmask 255.255.255.0
注意,这里添加的静态地址 192.168.56.11 依赖于上面再 mac 主机下的虚拟网卡 vboxnet0 的地址。
- 重启网络
1
sudo service networking restart
上面的步骤可以被下面的一个简单命令所替换,1
sudo ifconfig enp0s8 192.168.56.11 up
Ubuntu 安装 openssh
- 参考主机开启 SSH 远程登录章节
后记 ubuntu 虚拟机不能访问外网
- 将虚拟记得 network 改成 NAT 解决
设置 root 账户密码
1 | \# 如下步骤既是设置 root 账户的密码 |
apt-get
应用管理
安装应用
ubuntu 安装软件的命令为apt-get
,下面,以安装 nginx 为例,看看如何进行软件的安装
试图直接安装
1
2
3
4
5$ apt-get install nginx
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package nginx可以看到,报错;
apt-get
没有升级,所以没有 nginx 的安装包;升级
apt-get
1
$ apt-get update
再次安装
1
$ apt-get install nginx
查看已安装的应用
主要需要使用到命令dkpg
命令 | 描述 |
---|---|
dpkg -i package.deb | 通过 deb 安装包(二进制文件)进行安装 |
dpkg -r package | 删除包 |
dpkg -P package (或者 dpkg –purge remove package) | 删除包以及相关依赖 |
dpkg -L package | 列出与该包关联的路径和文件信息 |
dpkg -l package | 显示该安装包的信息 |
dpkg -l (或者 dpkg –list ) | 列出当前已安装的包所有信息 |
dpkg -c package.deb | 列出 deb 包的内容 |
dpkg –unpack package.deb | 解开 deb 包的内容 |
dpkg -S keyword | 搜索所属的包内容 |
dpkg –configure package | 配置包 |
重点关注两个用法dkpg -l
和dkpg -L
的用法
dkpg -l
该命令的作用是显示已安装软件的版本号,
显示所有已安装的软件的相关信息
1
$ dpkg -l
显示某一个软件的信息
1
$ dpkg -l nginx
dkpg -L
该命令的作用是显示已安装软件的安装路径
显示所有软件的相关信息
1
$ dkpg -L
显示某一个软件的相关信息
1
2
3
4
5
6
7
8$ dkpg -L nginx
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/nginx
/usr/share/doc/nginx/copyright
/usr/share/doc/nginx/changelog.Debian.gz或者使用
whereis
1
2$ whereis nginx
nginx: /usr/sbin/nginx /etc/nginx /usr/share/nginx
删除应用
1 | $ apt-get remove <package-name> |
但是这样的删除动作并不会删除相关的配置文件,使用
1 | $ apt-get --purge remove <package-name> |
实战,比如,我要删除某个 java 的安装包
首先,查找
1
2
3
4
5$ dpkg -l | grep -i jdk
rc oracle-java6-installer 6u45-0~webupd8~8 all Oracle Java(TM) Development Kit (JDK) 6
iF oracle-java7-installer 7u80+7u60arm-0~webupd8~1 all Oracle Java(TM) Development Kit (JDK) 7
ii oracle-java8-installer 8u161-1~webupd8~0 all Oracle Java(TM) Development Kit (JDK) 8
ii oracle-java8-set-default 8u161-1~webupd8~0 all Set Oracle JDK 8 as default Java然后,删除未使用的 java6-installer
1
$ sudo apt-get --purge remove oracle-java6-installer
使用 purge 命令删除
- 检查,是否已经删除,
1
2
3
4$ dpkg -l | grep -i jdk
iF oracle-java7-installer 7u80+7u60arm-0~webupd8~1 all Oracle Java(TM) Development Kit (JDK) 7
ii oracle-java8-installer 8u161-1~webupd8~0 all Oracle Java(TM) Development Kit (JDK) 8
ii oracle-java8-set-default 8u161-1~webupd8~0 all Set Oracle JDK 8 as default Java
安装源
由上述的操作可知,我们可以通过 apt-get install 命令安装应用;那么 Ubuntu 是如何知道在什么地方进行安装的呢?它又是如何进行安装的呢?那么首先,我们要知道 sources.list
sources.list
https://askubuntu.com/questions/190149/how-do-you-tell-apt-to-use-files-in-etc-apt-sources-list-d 对 sources.list 进行了完整的解释,
The package resource list is used to locate archives of the package
distribution system in use on the system
就是用来定位某个 Linux 发行版本所使用到的已归档的安装包;所以,其重要性就不言而喻了,定位应用的安装源;但是毕竟一个系统所要使用到的应用源非常的多,用一个文件来包括所有的源过于繁琐,因此,规范中又提到了另外的一种方式,就是使用 SOURCES.LIST.D,它是一个目录,但是可以将不同的 sources list 分门别类的放置到它的子文件中,比如,1
2$ ls /etc/apt/sources.list.d/
mongodb-org-3.4.list sources-aliyun-0.list sources-aliyun-0.list.save webupd8team-ubuntu-java-xenial.list
可以看到,mongodb、aliyun 和 java 的资源分别放到了三个不同 source list 子文件中,注意,这里的文件必须以 .list 结尾;下面,我们来看一个 source list 文件中的内容,比如,webupd8team-ubuntu-java-xenial.list1
2
3$ cat webupd8team-ubuntu-java-xenial.list
deb http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main
deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main
可以看到,它的内容是每一行以一个以 deb 或者 deb-src 打头的行所构成的,那么 deb 和 deb-src 又是指的是什么呢?
deb and deb-src
deb lines are relative to binary packages, that you can install with apt .
deb-src lines are relative to source packages (as downloaded by apt-get source $package ) and next compiled.
deb 是编译好的二进制包,直接可以通过 apt install 进行安装;而 deb-src 是指源码包,通过 apt-get source 进行下载然后手动进行编译;
那么 deb 和 deb-src 的包是如何定位到 sources.list 中的呢?这里面就有相关的定义规范了,还是来看上面 ubuntu java 的 sources list 的内容1
2
3$ cat webupd8team-ubuntu-java-xenial.list
deb http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main
deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main
- URI
http://ppa.launchpad.net/webupd8team/java/ubuntu - Dist
当打开 URI 以后,点击 dists 链接进入 dists 目录,然后依次点击子目录 xenial 和 main,最后,便是 java 所对应的安装包的路径,
如图,里面包含了所有主流平台的 bindary 包;同时,也包含了相应的 source/
国内源
Ubuntu 16.04 Xenial
阿里云源1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18# deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricted
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties
deb http://archive.canonical.com/ubuntu xenial partner
deb-src http://archive.canonical.com/ubuntu xenial partner
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse
切换源以后,一定要执行 apt-get udpate
更新源,否则不能正确获取源数据;
环境变量
export
通常我们可以通过 export 命令来设置某些环境变量,比如
1 | $ export DISPLAY=:0.0 |
env
通过 env 可以查看当前的环境变量信息;
unset
在设置了环境变量后,该如何删除它呢?使用 unset 命令,比如1
$ unset DISPLAY
常见错误
sudo: unable to resolve host
1 | user@iZuf6a50pk1lwxb3ock2kgZ$ sudo true |
通常在 sudo 的时候,会报这样的错误,导致这样的错误是,本地 hosts 文件中没有 host iZuf6a50pk1lwxb3ock2kgZ 的信息,因此,只要配置便好了;
1 | $ vi /etc/hosts |
添加如下的一个 entry
1 | 127.0.0.1 iZuf6a50pk1lwxb3ock2kgZ |
再次执行 sudo true,便不会再提示这个错误了,其实这是一个 warning…
add-apt-repository: command not found
在安装 Oracle JDK 1.8https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-get-on-ubuntu-16-04 的时候,执行下面的命令将会报这样的错,
1 | $ sudo add-apt-repository ppa:webupd8team/java |
修复也很简单,1
$ sudo apt-get install software-properties-common
然后再执行上面的命令就可以了;
locale
GB2312
查看 linux 常用命令中 locale 章节部分内容;
golang
我当前 Ubuntu 使用的是 16.04,默认通过 apt-get install golang 安装的是 golang 的低版本 1.6;现在很多应用都要使用到新版的 golang,那么如何升级呢?
安装 golang 1.10
卸载旧版本
1
$ dpkg -l go*
可以看到当前旧版本的 go 1.6 的安装信息,
1
2
3
4ii golang-1.6 1.6.2-0ubuntu5~16.04.4 all Go programming language compiler - metapackage
ii golang-1.6-doc 1.6.2-0ubuntu5~16.04.4 all Go programming language - documentation
ii golang-1.6-go 1.6.2-0ubuntu5~16.04.4 i386 Go programming language compiler, linker, compiled stdlib
ii golang-1.6-src 1.6.2-0ubuntu5~16.04.4 i386 Go programming language - source files执行命令删除这些安装包
1
$ apt-get remove golang-1.6* --purge
安装 golang 1.10
使用 longsleep/golang-backports PPA
https://github.com/golang/go/wiki/Ubuntu 里面提到,如果要在 16.04 中安装 Golang 要使用 longsleep/golang-backports PPA1
sudo add-apt-repository ppa:longsleep/golang-backports
安装过程中会多次报 WARNING:root:could not open file ‘/etc/apt/sources.list’,不用理会,直接安装,只要确保 longsleep/golang-backports 成功加入了 sources.list.d/ 目录中即可,如下,
1
2/etc/apt/sources.list.d$ ls
longsleep-ubuntu-golang-backports-xenial.list sources-aliyun-0.list sources-aliyun-0.list.save安装过程中可能会报错,解决办法如下,
add-apt-repository: command not found,参考常见错误中的修复方式;
ModuleNotFoundError: No module named ‘apt_pkg’
https://stackoverflow.com/questions/41720578/modulenotfounderror-in-tracebacks-with-python3-6-on-linux 中 andreas 给出了解决办法,
首先,安装 python3-apt1
sudo apt install python3-apt
然后,复制一份 apt_pkg.so 文件即可,
1
2cd /usr/lib/python3/dist-packages
sudo cp apt_pkg.cpython-34m-i386-linux-gnu.so apt_pkg.so注意,检查 apt_pkg.cpython-34m-i386-linux-gnu.so 文件的版本,我的 3.6.7 中的 python 使用的是 35m 版本的;
install
首先,加载最新的 PPA 信息,1
sudo apt-get update
然后,install
1
$ sudo apt-get install golang-go
检查
1
2$ go version
go: cannot find GOROOT directory: /usr/bin/go失败,需要设置 GOROOT,
1
$ sudo dpkg -L golang-1.10-go
从输出结果中可以看到,Go 的安装包是安装在 /usr/lib/go-1.10 中的,所以设置,
1
export GOROOT=/usr/lib/go
再次检查
1
2$ go version
go version go1.10.1 linux/386证明安装成功