新手问的一个关于软件的问题

新手问的一个关于软件的问题

我几乎确信这会被标记为重复,但我确实需要一些有条理的答案。

在 Windows 中,应用程序都是 .exe 类型。很简单。

在 Ubuntu 中,我见过 3 种类型。

  1. 我从 USC 下载的应用程序。

  2. 我通过终端获得的应用程序。

  3. 我通过浏览器下载的“便携式”应用程序。

有什么不同 ?

有没有办法可以像在 Windows 中一样将所有应用程序放在一个管理器中?

答案1

在 Windows 中,应用程序都是 .exe 类型。很简单。

让我打个比方, Windows 下的.exe文件是二进制文件,而脚本则是二进制.bat文件。*nix 系统中也存在同样的情况,但是 Linux/Unix 并不一定依赖扩展来定义可执行文件。您可能偶尔会发现.run来自专有软件供应商的脚本,但实际上它们都是文本文件。大多数情况下,扩展是开发人员的选择。例如,我.sh为 shell 脚本添加了扩展,但这不是必需的 - 只是我自己的偏好。因为我用gcc编译器编译 C 程序,所以默认情况下二进制文件带有.out扩展名,但如果我愿意,也可以不带扩展名保存它。

例如,如果你 ls -l $(which gnome-terminal)在终端中运行命令(其中which命令找到 gnome-terminal 然后ls列出其属性),你将看到以下内容:

-rwxr-xr-x 1 root root 3511 Apr 8 10:34 /usr/bin/gnome-terminal*

没有扩展名,但文件本身是可执行的。更重要的是,如果我们尝试确定该文件的类型,我们会发现一些有趣的东西:

$ file $(which gnome-terminal)
/usr/bin/gnome-terminal: Python script, ASCII text executable

这是一个脚本!这是一个您可以查看的文本文件!

但是上面的脚本中还调用了另一个文件/usr/bin/gnome-terminal.real。这file告诉我们什么?

$ file /usr/bin/gnome-terminal.real
/usr/bin/gnome-terminal.real: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=3ad9f22b9c39e314bc13cdd74f5917711986ca4d, stripped

因此,python 脚本实际上为实际的可执行文件设置了环境。

注意 `ls $(which gnome-terminal) 输出中的部分-rwxr-xr-x。看到 rwx 了吗?这是所有者的读写执行权限,所有者所在组和其他用户的读取执行权限(从左到右阅读)。如果我们删除组和其他用户的 x 权限,应用程序仍然是一个可运行的应用程序,但除了其所有者(root 用户)之外,没有人能够执行它。它可能类似于 Windows 中的本地组策略

至于 USC 和终端的软件(我假设您使用apt-get),它们几乎相同,大部分是二进制文件。便携式应用程序(例如 Firefox 的插件和附加组件)很可能使用 javascript。但我对这些不太了解,所以我不能肯定地说。

有没有办法可以像在 Windows 中一样将所有应用程序放在一个管理器中?

从技术上讲,在 Linux 下您已经有一个程序管理器 - 它们被称为包管理器e.g. apt-get, yum。在 Windows 上,您可以安装从网上下载的 exe 文件,对吗?在 Linux 上您可以这样做,但更常见的是通过ppa存储库来完成。apt-get在网络上有一个来源列表。当您安装某个东西时,比如sudo apt-get install someprog,我们会检查这些来源,如果程序存在,则apt-get下载它以及所需的库和程序,然后将它们提供给dpkg,然后安装它们。Ubuntu 软件中心做同样的事情,事实上,它apt-get在幕后使用。但这apt-get是 Ubuntu 的东西。如果您看看 Red Hat 或 Fedora,他们使用yum。同样的想法 - 使用存储库来搜索和安装软件。

答案2

在 Linux 中,任何特定文件的可执行性(您可能称之为“可执行性”)并不编码在文件名 ( .exe) 中,而是编码在文件权限位中。请了解有关 Linux 的更多信息。

如果您将自己限制为使用 Debian/Ubuntu 包管理系统安装的应用程序(例如,,dpkg是使用它的工具),那么同一组工具可以列出您使用这些工具安装的内容。但是,如果您从中下载某些东西并安装它(或按照随附的说明进行任何操作),则您只能自己处理。您必须自己跟踪这些事情。 apt-getsynapticevil.example.orgsudo

有一些工具可以让你监视诸如将可执行文件添加到目录中之类的事情$PATH,例如 Bastille-Linux读这个 但也读或 Lynis这里,但它们似乎超出了这个答案的范围。

答案3

在 Ubuntu(以及基本上所有其他版本的 Linux)中,大多数软件都是通过软件存储库安装的,软件存储库只是一个可以下载软件的统一地方。Ubuntu 默认从多个存储库中提取软件包,但您也可以从终端或系统设置程序手动添加或删除存储库。任何时候运行sudo apt-get install <package name>,您都在从存储库下载和安装。如果您从 Ubuntu 软件中心下载,情况也是一样,我认为它是 Ubuntu 存储库的图形表示,尽管我确信它在某些方面有所不同。这两者都有许多好处,特别是更安全的软件在发布前经过审查,以及直接与所有其他软件更新一起提供的更新。换句话说,使用 USC 或apt-get终端真的没什么不同。

但并非所有软件都可以从软件存储库获得。或者有时下载文件并以此方式安装更简单。我认为 .deb 最接近 Ubuntu 中的 .exe 安装程序。但它有点不同。.deb 将打开 USC 进行安装,并且至少在某些情况下,引用软件存储库,因此它也将更新您的所有其他软件。Google Chrome 就是一个很好的例子。

不幸的是,并非所有软件都可通过 Debian 友好的 .deb 安装程序或软件存储库获取。这些软件通常以 .tar.gz 格式提供,这只是一种压缩文件夹格式。make如果我没记错的话,这些软件需要用户从终端手动编译源代码。我使用这种方法安装的程序不多,所以我对此不太了解,但我不希望它们通过软件更新程序进行更新。

至于组织应用程序,所有程序都应显示在 Unity Dash 中(通过“Super”键激活,上面可能有 Windows 徽标)。这样,任何程序都可以固定到启动器或 Dock 上。但是,就带有友好“卸载”按钮的综合列表而言,我不知道有什么方法可以将您从所有这些不同来源安装的软件统一到一个屋檐下。USC 有一个“已安装”选项卡,您可以从中查看所有已安装的软件,这些软件按下拉菜单中列出的存储库排序。但您自己编译的任何软件很可能不会出现在该列表中。

我希望这个解释对你有帮助。我也希望我没有给你们灌输错误的信息,所以各位 Linux 专家,如果我对这方面有任何误解,请纠正我。

相关内容