ubuntu 基础环境配置

基础环境

官方虚拟机下载地址

https://www.ubuntu.com/download/server

常用命令

查看当前 Ubuntu 系统版本

1
2
mac@ubuntu:~$ cat /proc/version
Linux version 4.8.0-22-generic (buildd@lgw01-11) (gcc version 6.2.0 20161005 (Ubuntu 6.2.0-5ubuntu12) ) #24-Ubuntu SMP Sat Oct 8 09:15:00 UTC 2016
1
2
mac@ubuntu:~$ uname -a
Linux ubuntu 4.8.0-22-generic #24-Ubuntu SMP Sat Oct 8 09:15:00 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

上面的方法都是根据 ubuntu 的内核版本来显示,下面可以显示 Ubuntu 的发型版本信息。

1
2
3
4
5
6
mac@ubuntu:~$ sudo lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.10
Release: 16.10
Codename: yakkety

主机开启 SSH 远程登录

安装 openssh-server

1
sudo apt-get install openssh-server

查看 ssh-server 启动了没

1
ps -e | grep ssh

启动 ssh-server

1
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
    7
    auto 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

后记 ubuntu 虚拟机不能访问外网

  • 将虚拟记得 network 改成 NAT 解决

设置 root 账户密码

1
2
3
4
5
\# 如下步骤既是设置 root 账户的密码
$ sudo passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

apt-get

应用管理

安装应用

ubuntu 安装软件的命令为apt-get,下面,以安装 nginx 为例,看看如何进行软件的安装

  1. 试图直接安装

    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 的安装包;

  2. 升级apt-get

    1
    $ apt-get update
  3. 再次安装

    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 -ldkpg -L的用法

dkpg -l

该命令的作用是显示已安装软件的版本号,

  1. 显示所有已安装的软件的相关信息

    1
    $ dpkg -l
  2. 显示某一个软件的信息

    1
    $ dpkg -l nginx

dkpg -L

该命令的作用是显示已安装软件的安装路径

  1. 显示所有软件的相关信息

    1
    $ dkpg -L
  2. 显示某一个软件的相关信息

    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. 首先,查找

    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
  2. 然后,删除未使用的 java6-installer

    1
    $ sudo apt-get --purge remove oracle-java6-installer

    使用 purge 命令删除

  3. 检查,是否已经删除,
    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.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

可以看到,它的内容是每一行以一个以 deb 或者 deb-src 打头的行所构成的,那么 deb 和 deb-src 又是指的是什么呢?

deb and deb-src

https://unix.stackexchange.com/questions/20504/the-difference-between-deb-versus-deb-src-in-sources-list

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

  1. URI
    http://ppa.launchpad.net/webupd8team/java/ubuntu
  2. Dist
    当打开 URI 以后,点击 dists 链接进入 dists 目录,然后依次点击子目录 xenialmain,最后,便是 java 所对应的安装包的路径,
    deb ubuntu java source list.png
    如图,里面包含了所有主流平台的 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
2
user@iZuf6a50pk1lwxb3ock2kgZ$ sudo true
sudo: unable to resolve host iZuf6a50pk1lwxb3ock2kgZ

通常在 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
2
$ sudo add-apt-repository ppa:webupd8team/java
sudo: add-apt-repository: command not found

修复也很简单,

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. 卸载旧版本

    1
    $ dpkg -l go*

    可以看到当前旧版本的 go 1.6 的安装信息,

    1
    2
    3
    4
    ii  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
  2. 安装 golang 1.10

    1. 使用 longsleep/golang-backports PPA
      https://github.com/golang/go/wiki/Ubuntu 里面提到,如果要在 16.04 中安装 Golang 要使用 longsleep/golang-backports PPA

      1
      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-apt

        1
        sudo apt install python3-apt

        然后,复制一份 apt_pkg.so 文件即可,

        1
        2
        cd /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 版本的;

    2. install
      首先,加载最新的 PPA 信息,

      1
      sudo apt-get update

      然后,install

      1
      $ sudo apt-get install golang-go
    3. 检查

      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

      证明安装成功