как узнать, какую версию linux я использую?

<p>есть ли способ определить, какая версия linux (я думаю, дистрибутив и версия ядра) работает (из командной строки), которая работает в любой системе linux?</p>

<p>ядро универсально определяется с помощью <code>uname</code>:</p><pre><code>$ uname -or 2.6.18-128.el5 gnu/linux на самом деле нет способа перекрестного распространения, чтобы определить, какой дистрибутив и версию вы используете. были попытки сделать это непротиворечивым, но, в конце концов, оно меняется, к сожалению. инструменты lsb предоставляют эту информацию, но по иронии судьбы не устанавливаются по умолчанию везде. пример в системе ubuntu 9.04 с установленным пакетом lsb-release:$ lsb\_release -irc distributor id: ubuntu release: 9.04 codename: jaunty </code></pre><p>в противном случае ближайший широко доступный метод - проверка файлов <code>/etc/<i>something-</i>release</code>. они существуют на большинстве распространенных платформ и на их производных (то есть red hat и centos).</p><p>вот несколько примеров.</p><p>ubuntu имеет <code>/etc/lsb-release</code>:</p><pre><code>$ cat /etc/lsb-release distrib_id=ubuntu distrib_release=9.04 distrib_codename=jaunty distrib_description="ubuntu 9.04" но у debian есть /etc/debian_version:$ cat /etc/debian\_version 5.0.2 </code></pre><p>fedora, red hat и centos имеют:</p><pre><code>fedora: $ cat /etc/fedora-release fedora release 10 (cambridge) red hat/older centos: $ cat /etc/redhat-release centos release 5.3 (final) newer centos: $ cat /etc/centos-release centos linux release 7.1.1503 (core) gentoo:$ cat /etc/gentoo-release gentoo base system release 1.12.11.1 </code></pre><p>на данный момент у меня нет системы suse, но я считаю, что это <code>/etc/suse-release</code>.</p><p>slackware имеет <code>/etc/slackware-release</code> и/или <code>/etc/slackware-version</code>.</p><p>у mandriva есть <code>/etc/mandriva-release</code>.</p><p>тогда для большинства популярных дистрибутивов</p><pre><code>$ cat /etc/{release,version} будет чаще всего работать. урезанные и пустые «серверные» установки могут не иметь установленного пакета «release» для дистрибутива.кроме того, две сторонние программы, которые вы можете использовать для автоматического получения этой информации: <a href="https://docs.chef.io/ohai.html">ohai и <a href="https://puppetlabs.com/facter">facter .обратите внимание, что во многих дистрибутивах такая информация содержится в /etc/issue или /etc/motd, но некоторые политики безопасности и <a href="http://cisecurity.org">лучшие практики указывают, что эти файлы должны содержать баннеры уведомлений о доступе.связанный: <a href="https://stackoverflow.com/q/22179193/1672723">как узнать версию программного пакета, установленного на узле? , <a href="/questions/tagged/puppet">марионетка .

вы также можете попробовать:$ cat /etc/issue </code></pre><p>обычно (хотя и не всегда) вам сообщают, какую версию вы используете. <code>/etc/issue</code> - это файл, используемый для экрана входа в систему.</p>

<p>ядро: <code>uname -a</code></p>

<pre><code>cat /etc/os-release </code></pre><p>как минимум для ubuntu, fedora и opensuse.</p><p>не работает для os x по крайней мере до 10.9 (mavericks). вместо этого используйте<strong><em> sw\_vers </em></strong>.</p><p>opensuse имел<strong><em> cat/etc/suse-release </em></strong>до 13.1, но не рекомендуется в пользу os-release.</p><p>redhat 6.1 имеет<strong> cat/etc/redhat-release </strong></p>

<p><code>lsb\_release -a</code>, когда доступно, полезно.</p>

<p><code>cat /proc/version</code> нашел меня в red hat на общем vps.</p>

<p>ядро: <code>uname -r</code></p><p>distro: <code>lsb\_release -a</code></p><p>они будут работать на большинстве систем linux</p>

<h1>один лайнер</h1><pre><code>lsb\_release -a && uname -r </code></pre>

<p>эта<strong> проблема также может быть решена </strong>с использованием<strong> <a href="https://docs.python.org/3.7/library/platform.html">python с модулем <code>platform</code></a> </strong>:</p><p>использование функции <code>platform()</code>:</p><pre><code>python -c 'import platform; print platform.platform()' # linux-4.9.0-8-amd64-x86\_64-with-debian-9.6 </code></pre><p>вышеприведенная команда <em>возвращает одну строку, идентифицирующую базовую платформу с как можно большим количеством полезной информации.</em></p><p>или используя функцию <code>uname()</code>:</p><pre><code>python -c 'import platform; print platform.uname()' # ('linux', 'debian', '4.9.0-8-amd64', '#1 smp debian 4.9.130-2 (2018-10-27)', 'x86\_64', '') </code></pre><p>вышеприведенная команда <em>возвращает <code>namedtuple()</code>, содержащую шесть атрибутов: <code>system</code>, <code>node</code>, <code>release</code>, <code>version</code>, <code>machine</code> и <code>processor</code>.</em></p><p>или используя функцию <code>dist()</code>:</p><pre><code>python -c 'import platform; print platform.dist()' # ('debian', '9.6', '') </code></pre><p>последняя команда <em>пытается определить имя имени дистрибутива ос linux</em>} \_, но она<strong> <em>устарела с python 3.5</em> </strong>и <em>будет<strong> удалено в python 3.8 </strong></em>.</p>