遗憾的是我的主板坏了,我不得不从头开始组装一台新机器。我不记得我最初安装的是 32 位还是 64 位版本的操作系统 (K)ubuntu 14.04。
如果我安装现有的硬盘,是否有一个文件可以检查以确定操作系统架构?需要的不仅仅是 64 位可执行文件或库,因为这些不是确定正在运行的操作系统的可靠方法。
我无法运行,uname -a
因为这是一个已安装的磁盘,而不是正在运行的操作系统。
答案1
通过运行以下命令可以轻松确定主机操作系统是否具有 32 位或 64 位内核:
uname --machine
输出i386
表示 32 位,x86_64
输出表示 64 位。
确定应用程序是否为 i386 或 amd64 架构编译不太简单,但仍然可行,但这些都不能表明内核的架构。即使检查/sbin/init
在技术上也不够充分,因为 init 程序可以在启动时进行自定义。
确定内核架构的唯一万无一失的方法是实际启动它。幸运的是,这可以轻松使用 完成qemu
。
首先打开终端并导航到/boot
硬盘上。您将找到一个或多个压缩的内核映像,格式如下:
vmlinuz-[版本]-[类型]
例如,我的机器上有vmlinuz-3.19.0-21-generic
present 。现在,假设你有/boot
qemu-系统-x86包安装后,运行以下命令,在适当的位置替换文件名:
qemu-system-i386 -kernel <path_to_kernel>
如果您看到一长串文本滚动并最终崩溃(因为缺少根文件系统),则您安装的是 32 位内核。如果您收到类似于下面显示的错误,则您安装的是 64 位内核(无法在 x86 CPU 上启动)。
答案2
我同意,一般来说,仅仅存在某种可执行文件或库是没用的,因为可以安装多种体系结构的对象,但有些可执行文件只能拥有其中一种。 file /mnt/usr/bin/dpkg
(替换/mnt
为您安装文件系统的位置)将告诉您核心包管理器是 32 位还是 64 位,这是系统其余部分的准确指标,除非您正在从一个系统到另一个系统的就地迁移 - 您肯定会知道的!
答案3
查看旧硬盘根目录的目录组织,此方法类似于在 Windows 操作系统中查找“Program Files”和“Program Files (x86)”目录。
在 Linux 中,如果是 64 位,您将看到“lib32”和“lib64”目录,而如果是 32 位,您只会遇到 lib 目录(我现在不记得是否也会有 lib32 目录)。
如果您不信任建议的方法,或者需要更多保证,那么“file”命令看起来很有希望。查看@ColinWatson 的回答,我个人认为 /sbin/init 是更好的选择,但这些文件(dpkg 或 init)中的任何一个都会与内核架构匹配。
例如,执行file /sbin/init
将提供如下输出:
/sbin/init: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24
只需将 /sbin/init 的路径替换为旧根分区的正确挂载点,如果是现在/media/oldroot
,完整路径将变为/media/oldroot/sbin/init