root [~]# uname -m
i686
root [~]# perl -MPOSIX -le '@a=POSIX::uname(); print pop @a'
x86_64
root [~]#
root [~]# strace -e uname -vvFf -s 4096 uname -m
uname({sysname="Linux", nodename="TRUNCATED", release="2.6.9-023stab033.1-smp", version="#1 SMP Mon Oct 23 21:43:16 MSD 2006", machine="x86_64"}) = 0
uname({sysname="Linux", nodename="TRUNCATED", release="2.6.9-023stab033.1-smp", version="#1 SMP Mon Oct 23 21:43:16 MSD 2006", machine="x86_64"}) = 0
Process 5784 attached
[pid 5784] uname({sysname="Linux", nodename="TRUNCATED", release="2.6.9-023stab033.1-smp", version="#1 SMP Mon Oct 23 21:43:16 MSD 2006", machine="x86_64"}) = 0
Process 5784 detached
--- SIGCHLD (Child exited) @ 0 (0) ---
i686
root [~]# strace -e uname -vvFf -s 4096 perl -MPOSIX -e 'POSIX::uname()'
uname({sysname="Linux", nodename="TRUNCATED", release="2.6.9-023stab033.1-smp", version="#1 SMP Mon Oct 23 21:43:16 MSD 2006", machine="x86_64"}) = 0
uname({sysname="Linux", nodename="TRUNCATED", release="2.6.9-023stab033.1-smp", version="#1 SMP Mon Oct 23 21:43:16 MSD 2006", machine="x86_64"}) = 0
root [~]#
root [~]# file /lib/ld-2.3.3.so
/lib/ld-2.3.3.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), not stripped
root [~]#
root [~]# for i in $(ls /lib); do file $i; done | grep 64
root [~]# for i in $(ls /usr/lib); do file $i; done | grep 64
root [~]#
root [/boot]# cat /boot/kernel.h | grep type
/* Kernel type i686 */
root [/boot]#
uname Get name of current operating system.
($sysname, $nodename, $release, $version, $machine) = POSIX::uname();
Note that the actual meanings of the various fields are not that well standardized, do not expect any great portability. The $sysname
might be the name of the operating system, the $nodename might be the name of the host, the $release might be the (major) release number of
the operating system, the $version might be the (minor) release number of the operating system, and the $machine might be a hardware iden-
tifier. Maybe.