Навеено темой - "23 способа получить в регистре единицу" А вот 12 способов узнать что за *nix система стоит на машине. Сильно не пинайте =) . 1)uname -a 2)cat /etc/issue(linux) 3)cat /proc/version 5)Тип ФС - fdisk [-l] //freebsd or not freebsd(может конечно быть и solaris=)) - ufs или ext3 ;Или - /dev/hda , /dev/hdb - linux , /dev/ad0s3e(нечто в этом роде) - freebsd 6)Посмотреть логи - /var/log/daemon.log,/var/bootstrap.log(linux) , /boot/loader.rc(freebsd) ,заглянуть в /boot/grub/menu.lst 7)Содержимое /usr/src/[kernel sources](если они конечно есть=)) , а точнее README.[OS](linux) or README(freebsd) 8)echo 'int main(void){return 0;}' > os.c && gcc os.c -o os && strings os Если стоит freebsd, то увидете нечто вроде $FreeBSD: src/lib/csu/i386-elf/crti.S,v 1.7 2005/05/19 07:31:06 dfr Exp $ 9)По типу установки пакетов. Присутствие директорий /usr/ports - freebsd /etc/apt - debian\ubuntu /usr/portage - gentoo откликается на rpm - redhat based , на deb или apt-get - debian\ubuntu , на emerge - gentoo , pacman - arch linux , slapt-get, swaret , slackpkg - slackware 10)Специфические файлы - /etc/rc.conf - freebsd\gentoo для остальных linux`ов rc.local,также можно посмотреть содержимое данного файла(к примеру, настройка маршрутиризации в debian`е и freebsd отличается по синтаксисиу ip) ; /etc/master.shadow - freebsd ,/etc/redhat-release - redhat or fedora , /etc/debconf.conf or /etc/debian_version - debian\ubuntu , /etc/freebsd-update.conf - freebsd , /COPYRIGHT(freebsd), позаглядывать в файлы /etc многие из них могут начинаться на # $FreeBSD: ... В /usr/share/doc тоже можно много интересного найти - /handbook(freebsd) или /ubuntu-doc 11)Если стоит web-сервак, то можно посмотреть какой message выводит сервер(но способ крайне ненадёжный) telnet localhost 80 ; GET /123123123123123123.html - <address>Apache/2.0.55 (Ubuntu) PHP/5.1.6 Server at 127.0.1.1 Port 80</address> 12)Если же ниодин из вышеперечисленных способов не помог(в чём я очень сильно сомневаюсь=)), то можно хотябы узнать версию ядра - Code: #include <stdio.h> #include <sys/utsname.h> int main(void) { struct utsname u; uname(&u); printf("%s release %s(version %s) on %s\r\n",u.sysname,u.release,u.version,u.machine); return 0; } Я не думаю что кто-то из сисадминов будет перехватывать вызов uname() =).
+17 Для всех никсов (я не должен ошибиться): dmesg | grep Linux (или grep -i bsd и т.д.) cat /etc/motd - имя машины, ос (message of the day), но если админ не идиот, то он специально напишет туда неверную информацию. Для линух, мало что даёт (2.4 уже редкость), но всё-таки: для пересборки ядра 2.6 требуется компилятор gcc 3.2 и выше. (Т.е. если стоит gcc <3.2 , то сероятнее ядро 2.4) Можно так же втупую перебрать все папки и найти все файлы в root fs, в имени которых "perl" (этот способ можно поюзать когда в меню не прописана информация о пакете или нужно найти все файлы, связанные с пакетом, но в данном случае способ нехороший): sudo find / -iname *perl*