这可能是一个愚蠢的问题,但是我最近意识到我不知道为什么 apt-get没有单用户功能。
我不想要的答案:
- “这是因为apt写入系统级目录”。这就是表面层次的原因,但是我正在寻找更深层次的层次。从根本上阻止单用户环境(la pip + virtualenv)吗?
- “您可以仅从源代码构建”。这是一种解决方法,但不能解决我的问题。我不想解决短期问题,无论如何我都可以在所有机器上拥有root用户访问权限。
这可能是一个愚蠢的问题,但是我最近意识到我不知道为什么 apt-get没有单用户功能。
我不想要的答案:
Answers:
为什么apt-get需要sudo?
不总是。您可以使用完全apt-get
没有sudo
。在某些情况下,您根本不需要sudo
,例如使用apt-get download
,将软件包下载到当前目录,apt-get source
将debian源文件下载到当前目录,changelog
下载并打印给定软件包的变更日志,以及任何包含在--simulate
/ --dry-run
/ --no-act
(在的情况下install
,你也需要--no-download
)。
这是因为这些操作/命令不需要编写系统目录。
现在,为什么apt-get
需要sudo
?其实不是。您可以抛弃apt-get,与一起下载软件包,wget
然后dpkg --extract
在您喜欢的任何目录中使用和提取软件包。还有--instdir
一个应该只对二进制包有效。
现在,为什么这不是默认值?因为这很痛苦。要执行您想要的操作,我们需要将每个程序包重新包装两次,一次以正确的方式进行包装,另一次以您想要的方式进行。在构建时,二进制文件通常需要知道它们所需的文件和库在哪里(在某些情况下,在编译时会进行硬编码)。
现在,您可以做什么呢?只需在 virtualenv chroot某个环境中,您就可以在没有root的情况下安装软件包。
总结,这不是使用apt-get的方式,而且我不知道另一个类似于apt-get的软件包管理器允许您执行此操作。归根结底,这apt-get
只是dpkg的前端,可以完成其中的一些工作。
软件包本身中的信息确定了文件的安装位置,因此您sudo
既需要写入/
软件包也要更改软件包数据库。
在安装软件包时,您将安装预构建的二进制文件以及相关的配置,元文件和脚本,它们是软件包的重要组成部分。这些脚本和配置文件与依赖关系和系统的其余部分紧密链接。除非您完全知道自己在做什么,否则您不希望轻易更改这些内容。
如果您使用的是系统,例如在工作中没有sudo
访问权限,则可以从源代码进行编译,并将安装目录设置为主目录。然后,不需要sudo
。从源安装时,通常不会更改软件包数据库。
这不是一个愚蠢的问题。
操作系统中的特权级别
Ubuntu-以及实际上任何现代操作系统-都具有针对不同软件的不同特权级别的概念。用户启动的软件通常在基于用户的特权级别下运行,出于安全原因,该特权级别没有修改系统所需的访问权限-它只能修改属于该用户的文件。
为了对操作系统进行任何可能对整个系统产生影响的修改,而不仅是对用户文件的影响,都需要更高的特权级别,在Linux中称为“超级用户”特权(或通常称为“超级用户”特权)。称为“根”)。此特权级别可以不受限制地访问整个操作系统,从而可以为所有用户修改或破坏所有文件。
apt-get的作用
通过apt-get安装软件时,将安装系统范围内可用的软件。也就是说,该软件不仅会放置在用户的主目录中,仅由该用户运行,而且会安装在系统范围的应用程序目录中(例如/ usr,/ etc,/ var等)。 ),供所有用户运行。为了修改这些目录,您需要超级用户权限。没有特权的用户不能修改这些目录,因为否则,没有特权的软件可能会干扰系统。
如果您尝试使用apt-get安装某些东西而没有赋予apt-get超级用户特权,那么它将无法克服的第一个障碍是获得一个锁,以写入其自己的软件目录。作为系统范围的实用程序,apt-get维护已安装软件的目录,该目录自然需要超级用户特权才能进行编辑,以使未特权的软件不会对其造成混乱。但是,即使您能够以某种方式克服此障碍(例如,通过更改文件权限),安装软件过程中的许多其他步骤仍将失败,因为安装例程将取决于写入多个系统目录。
使用Linux,可以在没有超级用户权限的情况下安装软件,但是您需要自己编写(例如,shell脚本)或自己编译并直接运行编译的可执行文件。如果有权限,可以使用apt-get(以及其他基于aptitude,synaptic或Ubuntu软件中心的基于APT的实用工具)在全系统范围内进行安装,这一点更加容易。
这样做的简单原因是apt-get
无法确定在何处安装软件。它由开发人员决定,并在应用程序内部进行编码。
是的,您可以安装到其他目录。对于开源软件,获取源代码,更改安装目录,编译,构建和安装。通常,随附configure
脚本中都有一个选项,可让您指定安装位置。通常是这样--prefix
。
好。仍然有一种使用apt-get进行此操作的方法,尽管对于最终用户而言这太多了。按照步骤。
$HOME
。sudo apt-get update
。apt-get install package
。是的,没有。
是的,因为有可能,某些软件使用此方法,我所知道的唯一一个方法是。Qt5
它具有一个.run文件,该文件在执行时会要求许多其他输入中的安装目录。
否,因为此方法未使用apt-get
。
apt-get
吗?我认为软件开发人员apt-get
和/或软件开发人员不会对此感兴趣,但是可以开发某些软件,这些软件仅要求安装目录即可自动执行源,更改,编译,构建,安装步骤。
我的第六感告诉我命令是
apt-dont-get install pkg1 pkg2 ...
apt-get
开发人员这样做。另外,许多现有程序都依赖于其他程序,并且在/ usr目录中搜索它们。要实现此功能,将需要对所有具有依赖项的现有软件进行更改(这无处不在)。
/opt/package
目录chmod。
$HOME/opt/
,如果他们不具备所需的权限在安装包/opt/
..
导致它编辑更改的文件,因此您无法使用它们。您也许可以修改它们,所以我不能推荐这样做