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 为要安装的软件包的名字:
# 使用dpkg手动安装deb包的命令
sudo dpkg -i xxxx.deb
命令中的 dpkg(Debian Packager)是 Debian 专门开发的包管理工具,它可以用来安装、更新和移除软件,安装时它需要使用 deb 类型的软件包。
dpkg 是一个底层的包管理工具,主要用于对已下载到本地和已经安装的软件包进行管理。在它之上的 apt(Advanced Package Tool)包管理工具,其功能则更加丰富和方便使用,使用apt 能够自动从互联网的软件仓库中搜索、安装、升级、卸载软件,它会咨询软件仓库,并能安装软件时的模块及依赖问题。
如果是使用 apt 工具安装某个软件,直接使用如下命令即可,它会自动下载并安装软件:
sudo apt-get install 软件名
概括起来可以这么理解,deb 是软件包,dpkg 是手动安装工具,apt 是自动安装工具。
类似地,在 RedHat,Fedora,Centos 等派系的 Linux 发行版中,通常使用 rpm(RedHat Package Manager) 形式的软件包
若下载了 rpm 软件包,可使用如下命令进行安装,其中 xxxx.rpm 为要安装的软件包的名字:
rpm -ivh xxxx.rpm
命令中的 rpm 与 dpkg 的功能类似,同样是主要用于对已下载到本地和已经安装的软件包进行管理。在它之上的 yum(Yellow dog Updater, Modified)包管理工具,功能与 apt 工具类似,它会咨询软件仓库,并能安装软件时的模块及依赖问题。
使用 yum 安装软件的命令如下,同样地,它会自动下载并完成安装:
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
工具安装程序的时候,需要你知道应用程序的名字。具体的命令语法:sudo apt-get install 软件包名
apt-get install
会扫描本地存放的软件包更新列表/var/lib/apt/lists/
,找到最新版本的软件包,然后检查软件包依赖关系,找到支持该软件正常运行的所有软件包,并从镜像源地址中下载所需的软件包,最后解压软件包,自动完成应用程序的安装和配置。 -
apt-get remove
:卸载软件,具体的命令语法如下:sudo apt-get remove 软件包名
注意 apt-get remove
,apt-get purge
,apt-get autoremove
的区别
-
apt-get remove
:卸载软件包; -
apt-get autoremove
:会卸载所有自动安装且不再使用的软件包,一般用来清理依赖项(慎用); -
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-cache
、apt-config
等命令包含众多了功能,但对于 Linux 用户来说可能永远都不会使用到。apt 命令出现就是为了解决上述的问题,它包括了 apt-get
命令使用最广泛的功能选项,还包含了 apt-cache
和 apt-config
等命令中很少用到的功能,也就是说 apt 是集 apt-get
、apt-cache
和 apt-config
各工具之所长的工具。不仅如此,使用 apt 命令安装或删除程序时,会有进度条显示当前的进度。
命令 | 作用 |
---|---|
apt install 软件包名 | 安装指定的软件包 |
apt remove 软件包名 | 卸载指定的软件包 |
apt update | 更新软件源列表 |
apt search 软件包名 | 根据关键字搜索对应的软件包 |
apt show 软件包名 | 显示软件包的相关信息 |
apt list | 根据名称列出所有的软件包 |
软件源及其修改
Ubuntu 的软件源配置文件为 /etc/apt/sources.list
,建议在修改软件源前,使用如下复制命令对原文件进行备份:
# 复制一份sources.list文件的内容,以sources_bk.list的名字进行备份。
cp /etc/apt/sources.list /etc/apt/sources_bk.list
然后替换为阿里云的源:
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/
目录下。
apt-get update
防护墙
Ubuntu18 默认使用 UFW 管理防火墙,即 Uncomplicated Firewall,是基于 iptables 实现的防火墙管理工具,旨在简化配置防火墙的过程,所以实际上 UFW 修改的是 iptables 的规则。
Ubuntu 防火墙 UFW 常见命令
安装 ufw
#查看Ubuntu版本
root@localhost:~# lsb_release -a
#安装ufw
root@localhost:~# apt-get install ufw
查看 ufw 版本
root@localhost:~# ufw --version
查看 ufw 是否被安装
root@localhost:~# dpkg -l | grep ufw
查看防火墙状态
#Status: inactive说明防火墙关闭
root@localhost:~# ufw status
关闭防火墙
root@localhost:~# ufw disable
启动防火墙
root@localhost:~# ufw enable
UFW 重新加载配置文件
root@localhost:~# ufw reload
重置 UFW
ufw reset
Ubuntu 防火墙 UFW 常见命令
防火墙开启/禁用语法
root@localhost:~# ufw allow|deny [service]
默认情况下,UFW 将阻止所有传入连接并允许所有出站连接。这意味着任何试图访问您的服务器的用户都将无法连接,除非您专门打开该端口,而服务器上运行的所有应用程序和服务都将能够访问外部世界。默认策略在/etc/default/ufw 文件中定义,可以使用 sudo ufw default。
#关闭所有外部对本机的访问,但本机访问外部正常
root@localhost:~# ufw default deny
打开或关闭某个端口
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 # 删除上面建立的某条规则
查看端口状态
root@localhost:~# lsof -i:22
root@localhost:~# netstat -antup | grep 22
列出服务器上可用的所有应用程序配置文件
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 的使用习惯和命令上有很多的不同,下面简单列举一下:
-
centos 中新建的非 root 用户是没有 sudo 的权限的,如果需要使用 sudo 权限必须在
/etc/sudoers
中加入账户和权限,所以切换到 root 账号的时候只需要输入 su,加入 root 账号的密码即可;在 Ubuntu 中,一般使用 sudo+ 命令,如果是第一次使用会提示输入当前用户的密码(而不是 root 的密码)。 -
在线安装软件中,centos 使用的是 yum 命令,而 ubuntu 中使用的是
apt-get
命令(最新推荐的是 apt 命令)。除此之外 yum 中还有一个从软件源中搜索某个软件的方法yum search +软件名
-
centos 是来自于 redhat,所以 centos 支持 rpm 格式的安装,而 ubuntu 显然是不支持的。
-
毕竟是不同的公司做的不同的发行版,很多配置文件的位置和默认的文件路径都有很大区别,这个需要使用过程中慢慢体会了。
服务管理区别
命令区别总结如下表所示:
任务 | 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
是由哪个软件包安装的
#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 |