Как обнаружить, какой дистрибутив Linux используется

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

24
задан Peter Mortensen 19 February 2012 в 10:27
поделиться

10 ответов

lsb_release -i может работать на Вас.

[еще 114] деталь доступна с lsb_release -a

Некоторое обсуждение в http://etbe.coker.com.au/2007/08/30/identifying-the-distribution-of-a-linux-system/

26
ответ дан Adam Liss 28 November 2019 в 22:40
поделиться
cat /etc/*release

Большинство дистрибутивов помещают файл релиза в /etc/ (например, /etc/redhat-release, /etc/gentoo-release и т. Д.), В котором обычно есть номер версии вашего дистрибутива.

25
ответ дан Peter Mortensen 28 November 2019 в 22:40
поделиться

Это - раздражающе, более трудная проблема, чем это появляется.

Для систем Linux, используйте lsb_release.

$ lsb_release --all
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 8.04.1
Release:        8.04
Codename:       hardy
$ lsb_release -i
Distributor ID: Ubuntu

Это имеет ограничение, что lsb_release работает только на релизы Linux.

Для всех систем Unix, можно также проанализировать uname.

$ uname -a
Linux blue-laptop 2.6.24-21-generic #1 SMP Tue Oct 21 23:43:45 UTC 2008 i686 GNU/Linux

можно найти некоторую информацию о системах и дистрибутивах в uname страница .

Wikipedia
7
ответ дан Charles Merriam 28 November 2019 в 22:40
поделиться

Вы должны спросить себя, действительно ли вам нужно знать, какой дистрибутив используется (возможно, потому что вы хотите собрать пакет, специфичный для этого дистрибутива). Во многих других случаях это гораздо лучшая идея, просто протестировать и посмотреть, есть ли нужные вам функции или нет. Это может показаться намного больше работы, потому что вы должны тестировать каждую функцию по очереди, но таким образом, ваше программное обеспечение становится гораздо более гибким.

3
ответ дан WMR 28 November 2019 в 22:40
поделиться

Я обнаружил, что в / etc / issue обычно есть что-то о используемом дистрибутиве.

Но я не знаю о его доступности во всех дистрибутивах.

1
ответ дан Peter Mortensen 28 November 2019 в 22:40
поделиться

В моем .cshrc у меня есть

setenv DISTRO `sed -e 's/.*(//' -e 's/)).*//' /proc/version`

Для пользователей ksh / Bash , я предполагаю, что это переводится как

export DISTRO=`sed -e 's/.*(//' -e 's/)).*//' /proc/version`

и, конечно, это может не сработать для вашего любимого дистрибутива. (У меня были проблемы с Oracle Unbreakable Linux , дающим что-то похожее на Redhat, но это было достаточно для моих целей.)

Обновление август 2016 г. Я не использовал Linux таким образом какое-то время (2008 год давно). Кажется, что это больше не работает для систем, которые у меня сейчас есть.

1
ответ дан hoijui 28 November 2019 в 22:40
поделиться

Можно использовать 'uname':

[anton@localhost ~]$ uname -a
Linux localhost 2.6.26-ARCH #1 SMP PREEMPT Tue Aug 26 21:15:43 UTC 2008 i686 AMD Athlon(tm) 64 Processor 3000+ AuthenticAMD GNU/Linux
0
ответ дан Yojik 28 November 2019 в 22:40
поделиться
uname -r

должен распечатать версию ядра, в настоящее время работающую (по крайней мере, она делает для Linux, не знайте, является ли это то же для *BSD или другие). Это не то же как дистрибутив, но версия ядра часто включает имя дистрибутива, если это настраивается, как "2.6.27 хинду r1" или что-то.

Init часто печатает что-то при начальной загрузке, но это не много пользы, когда это работает.

Иначе, насколько я знаю, нет ничего универсального.

0
ответ дан Peter 28 November 2019 в 22:40
поделиться

Попробуйте uname -a

-1
ответ дан matt b 28 November 2019 в 22:40
поделиться

Файловая система proc: Каталог в Linux со всей информацией аппаратного уровня. Поэтому просто наберите

cd /proc/

Там вы найдете золотую жилу информации, хранящуюся в текстовом файле для всей произвольной информации о системе.

1
ответ дан 28 November 2019 в 22:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: