Ubuntu 速览

Ubuntu 速览

之前,我们在Linux 教程中已经了解过 Linux 系统的相关只是,并且了解了 Centos 的相关操作,但是其中对另一个 Linux 发行版 Ubuntu 的着墨却很少,这里就稍微了解一下 Ubuntu 并和 Centos 进行对照学习。

包管理

10. apt 及 yum 包管理工具 — [野火]嵌入式 Linux 基础与应用开发实战指南——基于 i.MX6ULL 开发板 文档

基本概念 - deb 包、dpkg 及 apt

在 Debian、Ubuntu 等 Linux 发行版中,通常使用 deb(debian)形式的软件包,如下图是 Vim 软件的 deb 安装包。

若下载了 deb 软件包,可使用如下命令进行安装,其中 xxxx.deb 为要安装的软件包的名字:

1
2
# 使用dpkg手动安装deb包的命令
sudo dpkg -i xxxx.deb

命令中的 dpkg(Debian Packager)是 Debian 专门开发的包管理工具,它可以用来安装、更新和移除软件,安装时它需要使用 deb 类型的软件包。

dpkg 是一个底层的包管理工具,主要用于对已下载到本地和已经安装的软件包进行管理。在它之上的 apt(Advanced Package Tool)包管理工具,其功能则更加丰富和方便使用,使用apt 能够自动从互联网的软件仓库中搜索、安装、升级、卸载软件,它会咨询软件仓库,并能安装软件时的模块及依赖问题

如果是使用 apt 工具安装某个软件,直接使用如下命令即可,它会自动下载并安装软件:

1
sudo apt-get install 软件名

概括起来可以这么理解,deb 是软件包,dpkg 是手动安装工具,apt 是自动安装工具。

类似地,在 RedHat,Fedora,Centos 等派系的 Linux 发行版中,通常使用 rpm(RedHat Package Manager) 形式的软件包

若下载了 rpm 软件包,可使用如下命令进行安装,其中 xxxx.rpm 为要安装的软件包的名字:

1
rpm -ivh xxxx.rpm

命令中的 rpm 与 dpkg 的功能类似,同样是主要用于对已下载到本地和已经安装的软件包进行管理。在它之上的 yum(Yellow dog Updater, Modified)包管理工具,功能与 apt 工具类似,它会咨询软件仓库,并能安装软件时的模块及依赖问题。

使用 yum 安装软件的命令如下,同样地,它会自动下载并完成安装:

1
yum install 软件名

关于这些软件包和工具,总结如下表:

Debian 派系发行版 Redhat 派系发行版
软件包 .deb .rpm
基础包管理工具 dpkg rpm
上层包管理工具 apt yum

apt 相关工具

apt 包管理工具包含了如下内容:

  • apt-get工具:主要负责软件包的的安装、卸载以及更新等事务。

  • apt-cache工具:用于查询软件包的相关信息。

  • apt-config工具:用于配置所有 apt 工具。

apt-get

  • apt-get install:使用apt-get工具安装程序的时候,需要你知道应用程序的名字。具体的命令语法:

    1
    
    sudo apt-get install 软件包名

    apt-get install会扫描本地存放的软件包更新列表/var/lib/apt/lists/,找到最新版本的软件包,然后检查软件包依赖关系,找到支持该软件正常运行的所有软件包,并从镜像源地址中下载所需的软件包,最后解压软件包,自动完成应用程序的安装和配置。

  • apt-get remove:卸载软件,具体的命令语法如下:

    1
    
    sudo apt-get remove 软件包名

注意apt-get removeapt-get purgeapt-get autoremove的区别

  1. apt-get remove :卸载软件包;

  2. apt-get autoremove :会卸载所有自动安装且不再使用的软件包,一般用来清理依赖项(慎用);

  3. apt-get purge:卸载并清除软件包的配置;

apt-cache

apt-cache是 Ubuntu 的另一个 APT 软件包管理工具。通过apt-cache工具配合对应的子命令,可以实现查找,显示软件包信息及包依赖关系等功能,见下表。

命令 作用
apt-cache showsrc 软件包名 显示软件包的相关信息,如版本信息,依赖关系等
apt-cache search 软件包名 按关键字查找软件包
apt-cache depends 软件包名 显示该软件包的依赖关系信息
apt-cache rdepends 软件包名 显示所有依赖于该软件包的软件包名字
apt-cache show 软件包名 显示指定软件包的信息,如版本号,依赖关系等。
apt-cache pkgnames 显示所有软件包的名字
apt-cache policy 软件包名 显示软件包的安装状态

例如,可通过如下命令搜索支持 ifconfig 命令的软件包:

apt-cache search ifconfig

apt-config

apt

在 Ubuntu 16.04 中引入了 apt 命令,并且越来越多 Linux 发行版也开始鼓励用户使用 apt 而不是apt-get。前面我们提到,apt-cacheapt-config 等命令包含众多了功能,但对于 Linux 用户来说可能永远都不会使用到。apt 命令出现就是为了解决上述的问题,它包括了 apt-get 命令使用最广泛的功能选项,还包含了 apt-cacheapt-config 等命令中很少用到的功能,也就是说 apt 是集apt-getapt-cacheapt-config 各工具之所长的工具。不仅如此,使用 apt 命令安装或删除程序时,会有进度条显示当前的进度。

命令 作用
apt install 软件包名 安装指定的软件包
apt remove 软件包名 卸载指定的软件包
apt update 更新软件源列表
apt search 软件包名 根据关键字搜索对应的软件包
apt show 软件包名 显示软件包的相关信息
apt list 根据名称列出所有的软件包

软件源及其修改

Ubuntu 的软件源配置文件为/etc/apt/sources.list,建议在修改软件源前,使用如下复制命令对原文件进行备份:

1
2
# 复制一份sources.list文件的内容,以sources_bk.list的名字进行备份。
cp /etc/apt/sources.list /etc/apt/sources_bk.list

然后替换为阿里云的源:

1
sed -i 's/http:\/\/archive.ubuntu.com/http:\/\/mirrors.aliyun.com/g' /etc/apt/sources.list

上面的命令会将/etc/apt/sources.list中的http://archive.ubuntu.com/替换成http://mirrors.aliyun.com/

用户一旦修改了软件源配置文件/etc/apt/sources.list,需要运行apt-get update命令来更新软件源中的所有软件列表。

apt-get update命令会扫描每一个软件源地址,并为该软件源地址所具有软件包资源建立索引文件,存放在本地的/var/lib/apt/lists/目录下。

1
apt-get update

防护墙

Ubuntu18 默认使用 UFW 管理防火墙,即 Uncomplicated Firewall,是基于 iptables 实现的防火墙管理工具,旨在简化配置防火墙的过程,所以实际上 UFW 修改的是 iptables 的规则。

Ubuntu 防火墙 UFW 常见命令

安装 ufw

1
2
3
4
5
#查看Ubuntu版本
root@localhost:~# lsb_release -a

#安装ufw
root@localhost:~# apt-get install ufw

查看 ufw 版本

1
root@localhost:~# ufw --version

查看 ufw 是否被安装

1
root@localhost:~# dpkg -l | grep ufw

查看防火墙状态

1
2
#Status: inactive说明防火墙关闭
root@localhost:~# ufw status

关闭防火墙

1
root@localhost:~# ufw disable 

启动防火墙

1
root@localhost:~# ufw enable 

UFW 重新加载配置文件

1
root@localhost:~# ufw reload 

重置 UFW

1
ufw reset

Ubuntu 防火墙 UFW 常见命令

防火墙开启/禁用语法

1
root@localhost:~# ufw allow|deny [service]

默认情况下,UFW 将阻止所有传入连接并允许所有出站连接。这意味着任何试图访问您的服务器的用户都将无法连接,除非您专门打开该端口,而服务器上运行的所有应用程序和服务都将能够访问外部世界。默认策略在/etc/default/ufw 文件中定义,可以使用 sudo ufw default。

1
2
#关闭所有外部对本机的访问,但本机访问外部正常
root@localhost:~# ufw default deny

打开或关闭某个端口

1
2
3
4
5
6
7
8
ufw allow 8000:8100/tcp # 允许端口范围
ufw allow smtp # 允许所有的外部IP访问本机的25/tcp (smtp)端口
ufw allow 22/tcp # 允许所有的外部IP访问本机的22/tcp (ssh)端口
ufw allow 53 # 允许外部访问53端口(tcp/udp)
ufw allow from 192.168.1.100 # 允许此IP访问所有的本机端口
ufw deny proto tcp from 10.0.0.0/8 to 192.168.0.1 port # 要拒绝所有的流量从TCP的10.0.0.0/8 到端口22的地址192.168.0.1
ufw deny smtp # 禁止外部访问smtp服务
ufw delete allow smtp # 删除上面建立的某条规则

查看端口状态

1
2
3
root@localhost:~# lsof -i:22

root@localhost:~# netstat -antup | grep 22

列出服务器上可用的所有应用程序配置文件

1
root@localhost:~# ufw app list

修改系统时间

在 Centos 中如何修改系统时间:date 指令 - 虾说全栈

Ubuntu 中有三种方式修改系统时间:

  • date --set="YYYY-MM-DD HH:MM:SS"

  • timedatectl set-time "YYYY-MM-DD HH:MM:SS"

修改系统时间之后,需要将系统时间跟硬件时间同步hwclock --hctosys,这样系统重启之后,时间设置才能依旧保持。

或者你也可以直接设置硬件时间hwclock --set "YYYY-MM-DD HH:MM:SS"

与 Centos 的对比

参考博客:后台技术分享

使用习惯和命令区别

Centos 与 Ubuntu 的使用习惯和命令上有很多的不同,下面简单列举一下:

  1. centos 中新建的非 root 用户是没有 sudo 的权限的,如果需要使用 sudo 权限必须在/etc/sudoers 中加入账户和权限,所以切换到 root 账号的时候只需要输入 su,加入 root 账号的密码即可;在 Ubuntu 中,一般使用 sudo+ 命令,如果是第一次使用会提示输入当前用户的密码(而不是 root 的密码)。

  2. 在线安装软件中,centos 使用的是 yum 命令,而 ubuntu 中使用的是apt-get命令(最新推荐的是 apt 命令)。除此之外 yum 中还有一个从软件源中搜索某个软件的方法yum search +软件名

  3. centos 是来自于 redhat,所以 centos 支持 rpm 格式的安装,而 ubuntu 显然是不支持的。

  4. 毕竟是不同的公司做的不同的发行版,很多配置文件的位置和默认的文件路径都有很大区别,这个需要使用过程中慢慢体会了。

服务管理区别

命令区别总结如下表所示:

任务 RedHat(CentOS) Ubuntu(Debian)
服务管理(以 nginx 为例)
启动服务 systemctl start nginx systemctl start nginx
停止服务 systemctl stop nginx systemctl stop nginx
重启服务 systemctl resart nginx systemctl resart nginx
设置开机自启动 systemctl enable nginx systemctl enable nginx
禁止开机自启动 systemctl disable nginx systemctl disable nginx
基本信息
软件包后缀 *.rpm *.deb
软件源配置文件 /etc/yum.conf /etc/apt/sources.list
安装、删除、升级软件包
更新软件包列表 每次运行 yum 时自动更新 apt-get update
从软件仓库安装软件 yum install package apt-get install package
安装已下载的软件包 yum install pkg.rpm 或 rpm -ivh pkg.rpm dpkg -i pkg.deb
删除软件包 yum -e package apt-get remove package
升级软件包 yum update 或 rpm -Uvh [args] apt-get upgrade
升级整个系统 yum upgrade apt-get dist-upgrade

服务管理区别

软件包信息区别:

任务 RedHat(CentOS) Ubuntu(Debian)
软件包信息
获取某软件包信息 yum search package apt-cache show package
获取所有软件包信息 yum list available apt-chche dumpavail
显示所有已安装软件 yum list installed 或者 rpm -qa dpkg -l 或者 dpkg –list
获取某个已安装软件信息 yum info package 或者 rpm -qi package dpkg –status package
列出某个已安装软件所包含的文件列表 rpm -ql package dpkg –listfiles package
列出某个已安装软件所包含的文档 rpm -qd package
列出某个已安装软件所包含的配置文件 rpm -qc package
显示某个软件包所依赖的软件包列表 rpm -qR package apt-cache depends package
显示某个软件包的反向依赖关系 rpm -q -whatrequires [args] apt-cache rdepends package

软件包文件信息区别

示例:Ubuntu 系统搜索/sbin/lsmod是由哪个软件包安装的

1
2
3
#kmod: /sbin/lsmod表示/sbin/lsmod由kmod软件包安装的
root@k8scludes3:~# dpkg -S /sbin/lsmod
kmod: /sbin/lsmod
任务 RedHat(CentOS) Ubuntu(Debian)
软件包文件信息
获取某个软件包文件的信息 rpm -qpi pkg.rpm dpkg –info pkg.deb
列出某个软件包文件所包含的文件列表 rpm -qpl pkg.rpm dpkg –contents pkg.deb
列出某个软件包所包含的文档 rpm -qpd pkg.rpm
列出某个软件包所包含的配置文件 rpm -qpc pkg.rpm
软件包解压缩 rpm2cpio pkg.rpm | cpio -vid dpkg-deb –extract pkg.deb
搜索某个文件是由哪个软件包安装的 rpm -qf /file/name dpkg -S /file/name 或 dpkg –search /file/name
搜索所提供的某个文件的软件包 yum provides /file/name apt-file search /file/name
杂项
显示软件包缓存状态 apt-cache status
校验所有已安装的软件 rpm -Va debsuns
删除本地缓存软件包 yum clean packages apt-get clean
仅删除本地缓存中过时的软件包 apt-get autoclean
删除所有软件包信息(以便下次重新安装) yum clean headers apt-file purge

0%