我很想知道是否有可能在 Ubuntu 中保持某些软件包处于禁用状态,类似于我们如何在 Android 中冻结/禁用应用程序。
即该包已安装但直到重新激活后才可使用。
注意:我问的不仅仅是“禁用更新”,我问的是“禁用包”。
如果可能的话,我们该怎么做?
答案1
Linux 不会像 Android 那样启动您不需要的应用程序并将其保存在 RAM 中,以便它们可以接收推送消息等。因此无需冻结软件包。
对于许多应用程序来说,如果您不启动它,它就不会运行。如果您想使用它,它仍会获得更新。
如果您确实想删除某个软件包,可以将其卸载(并根据需要安装)以用于非必需应用程序,但与其他 Linux 发行版一样,Ubuntu 上的软件包依赖于其他软件包,并且有其他软件包依赖于它们,因此当您安装或删除软件包时,其他软件包可能会自动安装为依赖项(或替换项)或被删除,因为它们依赖于您删除的软件包。删除具有许多依赖项或对系统正常运行至关重要的软件包可能会严重破坏系统。所有这些都由包管理系统处理。要查看运行特定安装或删除命令时会发生什么,请使用APT 中的-s
或--simulate
选项,例如
apt remove <package> -s
这将显示将要做什么,但实际上不做任何事情。
不过,有些程序确实在后台以服务形式运行。在这些情况下,您可以使用命令systemctl
(的界面的一部分)systemd
来停止和禁用它们(禁用可防止服务在启动时启动)。再次强调,您需要小心谨慎,因为服务也可能相互依赖,停止或禁用重要服务可能会对系统的功能和稳定性产生负面影响。但是,systemd
如果其他服务依赖于您已禁用的服务,它将启动这些服务,因此这比包管理更不容易被破坏。
以下是有关如何停止、启用、禁用和启动服务的示例。
启用服务:
启用服务不会自动启动它;您需要使用
start
它,或添加--now
标志,或重新启动机器。以使其生效。sudo systemctl enable <service-name>
禁用服务:
禁用服务并不会使其立即停止,您需要使用
stop
它,或添加--now
标志,或重新启动机器。sudo systemctl disable <service-name>
启动服务:
启动服务并不会默认启用它(这是该
enable
命令的用途),但如果可以启动,它会立即启动该服务。sudo systemctl start <service-name>
停止服务:
停止服务不会禁用已启用的服务,但会暂时停止它直到下次重新启动。
sudo systemctl stop <service-name>
重新启动服务:
重新启动服务,但与
start
和stop
命令一样,不会影响服务是否在启动时加载和启动(由enable
disable
命令控制的行为)。sudo systemctl restart <service-name>
答案2
Linux 与 Android 不同,Android 在不同软件包之间有类似监狱的东西,而 Linux 在软件包之间使用共享库。如果您能够禁用某个软件包,则不清楚您要从哪些组件中删除该功能。
正如许多人已经提到的,您可以选择卸载不需要的软件包,暂时不启用它。这样,软件包及其独占使用的所有库都将被删除。其他软件包使用的库将不会被删除。
许多软件包使用服务
有一个工具可以启用或禁用服务,或者将服务设置为仅在您主动启动时运行。在正常情况下,使用服务的软件包将在安装软件包后启动服务,并且默认情况下将在启动时启用。
例如Apache2包。安装后,该服务将启动并设置为每次重新启动计算机时自动启动。
使用 systemctl 启动、停止、启用、禁用服务
您可以检查服务列表,通过列出按特定软件包名称过滤的已安装服务来查看是否要暂时禁用软件包。在此示例中,我将查找 Apache2。
(这是检查 Apache2 的安装和状态的命令和输出。它正在过滤所有已安装软件包的列表apache2
。)
$ systemctl | egrep apache2
apache2.service loaded active running LSB: Apache2 web server
可以使用以下命令检查、启动、停止或禁用服务状态:
用下列之一替换该选项:status
start
,stop
,restart
,disable
,enable
。
(命令和服务状态的输出)
$ sudo systemctrl status apache2
● apache2.service - LSB: Apache2 web server
Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: active (running) since Tue 2017-10-31 12:14:42 EDT; 2 days ago
Docs: man:systemd-sysv-generator(8)
Process: 17861 ExecReload=/etc/init.d/apache2 reload (code=exited, status=0/SUCCESS)
Process: 1864 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/apache2.service
├─ 2119 /usr/sbin/apache2 -k start
├─17909 /usr/sbin/apache2 -k start
├─21395 /usr/sbin/apache2 -k start
├─21397 /usr/sbin/apache2 -k start
├─21398 /usr/sbin/apache2 -k start
├─21399 /usr/sbin/apache2 -k start
├─21400 /usr/sbin/apache2 -k start
├─21401 /usr/sbin/apache2 -k start
├─21402 /usr/sbin/apache2 -k start
├─21403 /usr/sbin/apache2 -k start
└─31543 /usr/sbin/apache2 -k start
Oct 31 12:14:42 ubunzeus apache2[1864]: *
Oct 31 12:14:42 ubunzeus systemd[1]: Started LSB: Apache2 web server.
Nov 01 07:35:02 ubunzeus systemd[1]: Reloading LSB: Apache2 web server.
Nov 01 07:35:02 ubunzeus apache2[759]: * Reloading Apache httpd web server apache2
Nov 01 07:35:02 ubunzeus apache2[759]: *
Nov 01 07:35:02 ubunzeus systemd[1]: Reloaded LSB: Apache2 web server.
Nov 02 07:35:03 ubunzeus systemd[1]: Reloading LSB: Apache2 web server.
Nov 02 07:35:03 ubunzeus apache2[17861]: * Reloading Apache httpd web server apache2
Nov 02 07:35:04 ubunzeus apache2[17861]: *
Nov 02 07:35:04 ubunzeus systemd[1]: Reloaded LSB: Apache2 web server.
您可以对默认 Ubuntu 安装中安装和启用的 100 多个服务中的任何一个执行相同操作。或者,在您安装软件包时安装和启用,例如Apache2
,,,,,Openssh-server
等等。Mysql
Plexmedia Server
您可以通过运行以下命令来禁用ssh
而不卸载openssh-server
:
$ sudo systemctl disable sshd
登录ssh
将被禁用(冻结),直到您使用 选项重新启用enable
它systemctl
。
您可能需要查看所安装软件包的文档以了解使用该软件包启动了哪些服务。
快速回答
您可以通过禁用软件包的服务来禁用(冻结)软件包。
答案3
如果它是一个常规应用程序,您可以删除它的可执行权限,从而使其“不可用”。您可以这样做(我/usr/bin/gedit
在这里使用它作为示例):
$ sudo chmod -x /usr/bin/gedit
如果您需要再次使用它:
$ sudo chmod +x /usr/bin/gedit
对于 systemd 单元,请参阅其他答案。
答案4
不,目前 Ubuntu 没有此功能。如果您现在不使用某个软件包但将来可能会用到它,则需要先卸载它,然后在准备使用时再安装。