İşletim sisteminin adını nasıl güvenilir bir şekilde alabilirim?


69

Uzak bir sisteme giriş yaptığımı, ne işe yaradığını nasıl bilebilirim? Çoğu modern Linux'ta (Linuces?) Şu lsb_releasekomutu veriyorsunuz :

$ lsb_release -ic    
Distributor ID: LinuxMint
Codename:       debian

Söyleyebileceğim kadarıyla sadece aynı bilgi verir /etc/lsb-release. Ya bu dosya yoksa? lsb_releaseKomutun nispeten yeni olduğunu hatırlıyor gibiyim, peki ya eski bir sistemin işletim sistemine sahip olursam?

Her durumda, bunun lsbanlamı Linux Standard BaseLinux olmayan Unices'de işe yaramayacağını farz ediyorum. Bildiğim kadarıyla bu bilgiyi almanın bir yolu yok, bu unameyüzden kullanmayan sistemlerde bunu nasıl alabilirim lsb_release?


1
Linux için unix.stackexchange.com/questions/6345/… . uname -sLinux dışında yeterli olmalıdır (BSD'ler için muhtemelen bekleyin).
Mat 24:13

Çıkış yaptın mı facter? çalışmak için yapılan facter operatingsystemtüm sistemlerde ne istersen yapmalısın facter.
Joseph R.,

@JosephR. iyi görünüyor ancak varsayılan olarak yüklenmemiş.
terdon

1
facterPastebin'de işletim sistemi adını alan kodu yapıştırdım . Burada bulun . Adı güvenilir bir şekilde almak için birçok farklı dosyayı kontrol eder.
Joseph R.

@JosephR. Vay, bu çok fazla dosya. Şans bulduğumda bash için taşıyacağım, bu yeterince taşınabilir olmalı. Teşekkürler!
terdon

Yanıtlar:


72

lsb_release -a Muhtemelen bu bilgiyi bulmak için en iyi seçenek olacak ve bunu tutarlı bir şekilde yapabilmeniz mümkün olacaktır.

LSB Tarihçesi

Bu lsbkomut , Linux Vakfı'nın sponsorluğunu yaptığı ve çeşitli Linux dağıtımlarında temel şeyler yapmak için genel yöntemler sağlayan bir şemsiye proje olan Linux Standartları Bazını ifade eder.

Proje isteğe bağlıdır ve satıcılar projeye yalnızca bir kullanıcı olarak ve ayrıca farklı Linux dağıtımlarında standardizasyonu sağlamada yardımcı olan farklı modüllerin etrafındaki çeşitli özelliklerin kolaylaştırıcıları olarak katılabilirler.

sözleşmeden alıntı

LSB çalışma grubunun, asıl amacı olarak, bu iki kaygıyı ele alması gerekir. Bir dağıtımın desteklemesi gereken asıl API setini tanımlayan bir standart yayınlıyoruz, ana dağıtım satıcılarıyla istişare içinde. Ayrıca, standart için desteği ölçen ve uygulama geliştiricilerin ortak kümeyi hedeflemelerini sağlayan testler ve araçlar sunuyoruz. Son olarak, test çalışmalarımız sayesinde dağıtımlar arasında gereksiz yere ayrışmayı önlemeye çalışıyoruz.

LSB ile ilgili faydalı linkler

eleştiriler

Debian gibi dağıtımlarda LSB ile ilgili sorunlu kılan bazı sorunlar var. RPM'nin zorunlu kullanımı birdir. Konuyla ilgili daha fazla bilgi için Wikipedia makalesine bakın .

Novell

Arama yaparsanız, muhtemelen başlıklı oldukça tarihli bir görünen sayfaya rastlarsınız: Alttaki Linux Distro'yu Novell'den Algılama . Bu, belli başlı dağıtımların birkaçını ve gerçekte ne kullandığınızı nasıl tespit edebileceğinizi gösteren gerçek bir liste gördüğüm yerlerden biri.

alıntı

Novell SUSE         /etc/SUSE-release
Red Hat             /etc/redhat-release, /etc/redhat_version
Fedora              /etc/fedora-release
Slackware           /etc/slackware-release, /etc/slackware-version
Debian              /etc/debian_release, /etc/debian_version,
Mandrake            /etc/mandrake-release
Yellow dog          /etc/yellowdog-release
Sun JDS             /etc/sun-release
Solaris/Sparc       /etc/release
Gentoo              /etc/gentoo-release
UnitedLinux         /etc/UnitedLinux-release
ubuntu              /etc/lsb-release

Aynı sayfa, sadece vanilya unamekomutlarını kullanarak yukarıdakileri kodlamaya çalışan kullanışlı bir komut dosyası ve yukarıdaki dosyalardan birinin varlığını da içerir.

NOT: Bu liste tarihlidir, ancak Mandrake gibi tarihli dağıtımları kolayca listeden çıkarabilir ve alternatiflerle değiştirebilirsiniz. Solaris ve Linux değişkenlerinin büyük bir bölümünü desteklemeye çalışıyorsanız, bu tür bir komut dosyası bir yaklaşım olabilir.

Linux Mafyası

Daha fazla arama, Linuxmafia.com sitesinde tutulan ve aşağıdaki muhtelif Linux (ve diğer Unix) dağıtımları için / etc / release denkleri başlıklı aşağıdaki sayfayı açacaktır . Bu muhtemelen şu ana kadar gördüğüm en kapsamlı liste. Bu listeyi bir case / switch ifadesi ile kodlayabilir ve yazılım dağıtımınızın bir parçası olarak ekleyebilirsiniz.

Aslında o sayfanın altında tam olarak bunu yapan bir betik var. Böylece senaryoyu yazılım dağıtımına üçüncü taraf olarak indirebilir ve kullanabilirsin.

senaryo

#!/bin/sh
# Detects which OS and if it is Linux then it will detect which Linux
# Distribution.

OS=`uname -s`
REV=`uname -r`
MACH=`uname -m`

GetVersionFromFile()
{
    VERSION=`cat $1 | tr "\n" ' ' | sed s/.*VERSION.*=\ // `
}

if [ "${OS}" = "SunOS" ] ; then
    OS=Solaris
    ARCH=`uname -p` 
    OSSTR="${OS} ${REV}(${ARCH} `uname -v`)"
elif [ "${OS}" = "AIX" ] ; then
    OSSTR="${OS} `oslevel` (`oslevel -r`)"
elif [ "${OS}" = "Linux" ] ; then
    KERNEL=`uname -r`
    if [ -f /etc/redhat-release ] ; then
        DIST='RedHat'
        PSUEDONAME=`cat /etc/redhat-release | sed s/.*\(// | sed s/\)//`
        REV=`cat /etc/redhat-release | sed s/.*release\ // | sed s/\ .*//`
    elif [ -f /etc/SuSE-release ] ; then
        DIST=`cat /etc/SuSE-release | tr "\n" ' '| sed s/VERSION.*//`
        REV=`cat /etc/SuSE-release | tr "\n" ' ' | sed s/.*=\ //`
    elif [ -f /etc/mandrake-release ] ; then
        DIST='Mandrake'
        PSUEDONAME=`cat /etc/mandrake-release | sed s/.*\(// | sed s/\)//`
        REV=`cat /etc/mandrake-release | sed s/.*release\ // | sed s/\ .*//`
    elif [ -f /etc/debian_version ] ; then
        DIST="Debian `cat /etc/debian_version`"
        REV=""

    fi
    if [ -f /etc/UnitedLinux-release ] ; then
        DIST="${DIST}[`cat /etc/UnitedLinux-release | tr "\n" ' ' | sed s/VERSION.*//`]"
    fi

    OSSTR="${OS} ${DIST} ${REV}(${PSUEDONAME} ${KERNEL} ${MACH})"

fi

echo ${OSSTR}

NOT: Bu senaryo tanıdık gelmeli, Novell'in güncel bir sürümü!

Legroom betiği

Kullandığım bir diğer yöntem, yukarıdaki Novell yöntemine benzer olan ancak bunun yerine LSB'yi kullanan kendi komut dosyanızı döndürmektir. Bu makalede: Linux (veya UNIX) Dağıtım Adını Belirlemeye Genel Yöntem , böyle bir yöntem gösterilmektedir.

# Determine OS platform
UNAME=$(uname | tr "[:upper:]" "[:lower:]")
# If Linux, try to determine specific distribution
if [ "$UNAME" == "linux" ]; then
    # If available, use LSB to identify distribution
    if [ -f /etc/lsb-release -o -d /etc/lsb-release.d ]; then
        export DISTRO=$(lsb_release -i | cut -d: -f2 | sed s/'^\t'//)
    # Otherwise, use release info file
    else
        export DISTRO=$(ls -d /etc/[A-Za-z]*[_-][rv]e[lr]* | grep -v "lsb" | cut -d'/' -f3 | cut -d'-' -f1 | cut -d'_' -f1)
    fi
fi
# For everything else (or if above failed), just use generic identifier
[ "$DISTRO" == "" ] && export DISTRO=$UNAME
unset UNAME

Bu kod parçası, bir sistemin içine /etc/bashrcveya daha sonra ortam değişkenini ayarlayacak bir dosyaya dahil edilebilir $DISTRO.

gcc

İster inanın ister inanmayın başka bir yöntem kullanmaktır gcc. Komutu sorgularsanız, gcc --versiongcc'nin yapıldığı dağıtımı elde edersiniz, bu, üzerinde çalıştığı sistemle aynıdır.

Fedora 14

$ gcc --version
gcc (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4)
Copyright (C) 2010 Free Software Foundation, Inc.

CentOS 5.x

$ gcc --version
gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-54)
Copyright (C) 2006 Free Software Foundation, Inc.

CentOS 6.x

$ gcc --version
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3)
Copyright (C) 2010 Free Software Foundation, Inc.

Ubuntu 12.04

$ gcc --version
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.

TL; DR;

Peki hangisini kullanmalıyım? lsb_release -aSık kullanacağım herhangi bir Linux dağıtımı için gitmeye meyilliyim (RedHat, Debian, Ubuntu, vs.). Desteklemediğiniz sistemleri desteklediğiniz durumlar lsb_releaseiçin, yukarıdaki komut dosyalarından birine benzer şekilde, sağladığım yazılım dağıtımının bir parçası olarak kendimi atacağım.

GÜNCELLEME # 1: SuSE ile takip

Aşağıdaki açıklamalarda @Nils ile konuşurken, SLES11'in LSB'nin varsayılan olarak kurulmasını engellediği görülmüştür. Yalnızca bu tür bir anahtar özellik sağlayan bir paket için sayaç gibi görünen isteğe bağlı bir kurulumdu.

Bu yüzden, nedenini anlamak için OpenSuSE projesinden birisiyle bağlantı kurma fırsatını yakaladım.

e-postanın alıntı

Hi Rob,

I hope you don't mind me contacting you directly but I found your info here: 
https://en.opensuse.org/User:Rjschwei. I participate on one of the StackExchange 
sites, Unix & Linux and a question recently came up regarding the best option 
for determining the underlying OS.

http://unix.stackexchange.com/questions/92199/how-can-i-reliably-get-the-operating-systems-name/92218?noredirect=1#comment140840_92218

In my answer I suggested using lsb_release, but one of the other users mentioned 
that this command wasn't installed as part of SLES11 which kind of surprised me. 
Anyway we were looking for some way to confirm whether this was intentionally 
dropped from SLES or it was accidental.

Would you know how we could go about confirming this one way or another?

Thanks for reading this, appreciate any help and/or guidance on this.

-Sam Mingolelli
http://unix.stackexchange.com/users/7453/slm

İşte Rob'un cevabı

Hi,

On 10/01/2013 09:31 AM, Sam Mingo wrote:
- show quoted text -

lsb_release was not dropped in SLES 11. SLES 11 is LSB certified. However, it 
is not installed by default, which is consistent with pretty much every other
distribution. The lsb_release command is part of the lsb-release package.

At present almost every distribution has an entry in /etc such as 
/etc/SuSE-release for SLES and openSUSE. Since this is difficult for ISVs and 
others there is a standardization effort going on driven by the convergence to 
systemd. The standard location for distribution information in the future will 
be /etc/os-release, although Ubuntu will probably do something different.

HTH,    
Robert

--  Robert Schweikert                           MAY THE SOURCE BE WITH YOU    
SUSE-IBM Software Integration Center                   LINUX    
Tech Lead    
Public Cloud Architect 

1
Not: Sadece AIX ve SunOS bulunan makinelerde hızlıca bir kontrol yaptım. Lsb_release kurulu gibi görünmüyorlar (ve sonuçta, bu Unix değil Linux yığını). Gcc ile ilgili sorun şu ki bazı ppl'ler şimdi clang kullanmaya başlıyor. Ayrıca hangi gcc'nin kullanıldığını asla bilemezsiniz (birlikte çalıştığım sistemlerde her birinde en az birkaç sürüm vardır). Bu yüzden benim oyum, Python çözümüne, varsayılan olarak her yere kuruluyor gibi görünüyor.
elmo

@elmo - evet LSB Linux Standard Base, bu yüzden AIX veya SunOS'un olmasını beklemiyorum. SunOS ile olan deneyimim 15 yıldan fazla ve bununla uğraştığım üreticilerin çoğunluğu genellikle yukarıda bahsettiğim yazılımlara benzer bir kabuk komut dosyası sağlayacaktır. Solaris 11'e kadar Python bir seçenek değildi. Ve işte bu, çatlamasını zorlaştıran bir şeydir. Solaris 9, 10, 11, AIX ve birkaç Linux dağıtımında (SUSE, Ubntu ve RHEL) çalışması gereken yazılımlar sağlarsanız ne yaparsınız? Python bir seçenek değildir, bu yüzden bir el kodlu kabuk betiği ile kalırsınız.
slm

@elmo - gcc olsa da, bir seçenek de bana çekici gelmiyor. Çok fazla sorunla dövme görünüyor, sadece bir seçenek olarak gösterdim.
slm

@elmo - bu işlevin arkasındaki koda bakın, hg.python.org/cpython/file/2.7/Lib/platform.py#l259 . Büyük sürpriz, LSB kullanıyor!
slm

@slm: SunOS 5.10 ile makinenize erişebiliyorum (listenizde 10 olduğunu varsayıyorum - Sun'ın sürüm numaralarına / sözleşmelerine aşina değilim) ve bir Python'u var. Makineye AIX 7 ile erişebiliyorum ve Python var. Linux makineleri belli ki buna da sahip. Bu yüzden hala Python en taşınabilir seçenek gibi görünüyor. 10'un altındaki Sun'a gelince neden Python'un kurulmasına izin vermeyeceğinden emin değilim (kuşkusuz şu anki kurulum eksik; yani ncurses ve ctypes, yani kim bilir). LSB kullanan Python'a gelince, eğer varsayılan yaklaşım ise Linux için hiç şaşırtıcı değil.
elmo

16

Muhtemelen facteruzaktaki bir sunucuya kuramayacağınız için , işletim sistemi adını bulmak için ne yaptığını taklit edebilirsiniz. Gerçek için Ruby kodu pastebin'de buradaoperatingsystem bulunabilir . Temel olarak, işletim sistemi adını belirlemek için farklı dosyalara ve diğerlerine bakar .*-release

Baktığı dosyalardan bazıları:

/etc/debian_version
/etc/gentoo-release
/etc/fedora-release
/etc/mandriva-release
/etc/mandrake-release
/etc/meego-release
/etc/arch-release
/etc/oracle-release
/etc/enterprise-release
/etc/ovs-release
/etc/vmware-release
/etc/redhat-release
/etc/SuSE-release
/etc/bluewhite64-version
/etc/slamd64-version
/etc/slackware-version
/etc/alpine-release
/etc/system-release
/etc/centos-release

Üzgünüm, bu listede iki kopya bulursanız, birlikte hazırladım grep. Bunu bir POSIX kabuk betiğine yerleştirmek (biraz sıkıcı olsa da) oldukça kolay olmalı.


5
“Bu listede çiftleri bulursanız özür dilerim, çabucak grep ile hazırladım.” ... | uniq?
new123456

@ new123456 Doğru. Teşekkürler. Buradaki anahtar kelime "hızlıca" :)
Joseph R.

Bunu kabul etmediğim için üzgünüm ama @ slm'in cevabı yoksaymak için çok kapsamlı :).
terdon

3
Peki ya / etc / os-release?
Yauhen Yakimovich

1
@ new123456 Teknik olarak, bu olmalıdır ... | sort -u. uniqsadece bitişik benzersiz elemanları bulur.
Parthian

9

Kurmuş olmanız durumunda python(Python 3 veya Python 2'nin önemi yoktur), tekerleği yeniden icat etmeden dağıtım adını öğrenebilirsiniz :

python -c "import platform;print(platform.linux_distribution()[0])"

Bu seçeneği kullanmak istiyorsanız, işletim sisteminizin desteklendiğinden emin olun: hg.python.org/cpython/file/2.7/Lib/platform.py#l259 . Listeye daha fazlasını ekleyemezseniz: coderwall.com/p/cwrenq
slm

1
Bu eski Linux dağıtımlarıyla çalışmaz. Örneğin: SuSE 7.0 Python 1.5.2'ye sahipti ve platform modülü 2003'te Python 2.3'ün ortaya çıkmasından önce eklenmedi ;-)
pefu

6

/etc/issuesürüm bilgilerini içermelidir. Solaris sistemlerinde gördüğümden kesinlikle eminim. İşte modern bir Debian sistemindeki dosya:

$ cat /etc/issue
Debian GNU/Linux 7 \n \l

$ 

/ etc / issue , "isteğe bağlı" olmasına rağmen , FHS'de de belirtilmiştir (yalnızca Linux sistemleri için değildir).


Ah, bu iyi bir öneri, +1. Her zaman işe yaramayabilir ama The file /etc/issue is a text file which contains a message or system identification to be printed before the login prompt.istediği şeyi yazmak sysadmin'e kalmış gibi görünmektedir.
terdon

2
/etc/issuetamamen güvenilmez. (XY sürümündeki sistemleri, /etc/issuekötü yama yönetiminin ardından YZ olduklarını söyleyen bir afişle görüyorum . Kesinlikle her şeyi içerebilir.)
Mat

Bu dosyayı doldurmanız önerilir. Giriş yapmasına izin verilenler gibi yasal şeyler.
Nils,

Güvenlik kuralları ve denetçiler tarafından önerilir. Bir keresinde bir hackerın ceza almadan kaçtığı bir hukuk davası vardı, çünkü / etc / issue içinde HOŞGELDİNİZ
Nils

@drewbenn man sayfası ilk yorumumda alıntı yaptığım şeyi söylüyor, sistem bilgisini içermesi gerektiği konusunda hiçbir şey yok. Sadece sık sık yapar.
terdon

6

Dağıtımın adını tüm dağıtımlar boyunca tek bir komuttan güvenilir bir şekilde alamazsınız. Bazıları / etc / * - release ve diğerleri 'lsb-release' komutu ile kullanılabilir.


Teşekkürler, ancak ikisi de Unix'e ya da herhangi bir Linux dışı * nix'e gelince bir yardım değildir.
terdon

3

Bu kabuk komutunu Linux dağıtımını gösteren bir dize almak için kullandım:

for f in $(find /etc -type f -maxdepth 1 \( ! -wholename /etc/os-release ! -wholename /etc/lsb-release -wholename /etc/\*release -o -wholename /etc/\*version \) 2> /dev/null); do echo ${f:5:${#f}-13}; done;

bu komut Joseph R. ve slm cevaplarına dayanır.

Yalnızca / etc / {osname} -release veya / etc / {osname} _version gibi dosyaları arar ve belirli bir os adı yazdırır.

Çalıştı

  • CentOS (centos)
  • RedHat (redhat)
  • Debian (debian)
  • Kemer (kemer)
  • OpenSUSE (OpenSUSE)
  • Fedora (fedora)
  • Ubuntu (debian)

Olmaz for f in /etc/*{_version,...*-release}; do [ -f "$f" ] && echo ${f:5:${#f}-13} ; donehepsi gayet iyi çalışacağı? Neden önce findtüm dosyaları girdiğini anlamıyorum /etc.
terdon

Görüşleriniz, Terdon için teşekkür ederim, ama komut en az Cent OS ve Fedora 0 satırları verir
scrutari


1

SNMP , her çeşit GNU / Linux dağıtımında ve UNIX sistemlerinde bulunabilecek her yerde bulunan bir protokoldür.

system.sysDescr.0Nesne SNMPv2-MIB hedef sistemde çalışan bir SNMP cin var sağlanan, size irtibat vardır OS olduğunu öğrenmek yardımcı olabilir:

Açıklama

İşletmenin yazılı açıklaması. Bu değer, sistemin donanım türünün, yazılım işletim sisteminin ve ağ yazılımının tam adını ve sürüm tanımlamasını içermelidir.

Durum: mevcut

Erişim: salt okunur

snmpget(1)Manpage örneklerle bu değeri almak açıklar.


Dezavantajı, bunun otomatik olarak korunmayan statik bir dize olmasıdır.
Nils,

1

Bunu yapmanın ortak bir yolu olmadığından, snmp exec-komutu ile bir yayın dizisi tanımladık.

Bu komutun görevi dağıtımı ve işletim sisteminin şu anki / küçük versiyonunu basmaktır.

RH ve klonlar üzerinde / etc / redhat-release, SuSe SuSe-release ...


'Biz' kim? Peki ya Unix?
terdon

@ terdon biz işimizdeki ekibimiz. Unix'te, ilgili uzantı snmpd'ye derlendiyse aynısını yapabilirsiniz.
Nils,

Ah, senin bazı standartlar grubunun bir parçası olduğunu sanıyordum :)
terdon

@terdon 80'den fazla sunucuyu yönetmeniz gerektiğinde site standartları geliştirmeye başlarsınız. Bu yöntemi geliştirdik, böylece os'un modası geçmiş olup olmadığını (EoL minör veya hatta büyük sayı) izleyebildik
Nils,

1

Bu konuya odaklanmayı başardıklarımdan, aşağıdakileri kullanarak herhangi bir sistemin lanet olası bilgisini alabilmeniz gerekir:

if which lsb_release &>> /dev/null; then
    lsb_release -a
elif [ -r /etc/issue ]; then
    cat /etc/issue
else
    ls /etc/ | grep -e '[_-]release$' -e '[_-]version$' | xargs -I % -n 1 cat /etc/%
fi

2
ls çıktısını ayrıştırma!
heinrich5991

@ heinrich5991 neden olmasın?
Sammitch

Teknik olarak, çıktısını ayrıştırmıyor ls. O, Lexing çıktısını ls. Ama evet ... Bu yanlış, çünkü /etc/issuetamamen güvenilmez. Tamamen, tamamen, tamamen güvenilmez. Ayrıca, hiç kimsenin 'release' veya 'version' ile biten os ile ilgili olmayan bir dosya koymayacağı varsayımı doğru değildir.
Parthian

@ParthianShot Temelde, daha güvenilir seçeneklerin mevcut olmaması durumunda ikinci ve üçüncü geri dönüş seviyeleri hakkında şikayet etmek ister misiniz ?
Sammitch

@Sammitch more reliable optionsEh, bir şey için, sadece bir seçenek var. Bu yüzden, daha güvenilir olduğunu (ki yapmadığım) kabul ettiğinizi farz edersek bile, çoğullaştırmaya başlamayalım. İkincisi, birileri çözümünüzü gerçekten kullandıysa ve zamanın yarısında tamamen başarısız olursa, bir "eğer varsa" başarısızlıkla sonuçlandığına inanmazlardı. Sistemlerimden hiçbiri lsbvarsayılan olarak yüklenmedi.
Parthian

1

Bir durum bunun için çağrılırsa, snmpwalk [veya genel olarak SNMP protokolünü] kullanarak uzaktan öğrenebilirsiniz. Bir örnek aşağıdadır:

snmpwalk -Os -c <snmp community string> -v1 <hostname> sysDescr.0

OUPUT: sysDescr.0 = STRING: Linux example.hostname.com 2.6.32-358.23.2.el6.x86_64 # 1 SMP Cmt Eyl 14:32:37 EDT 2013 x86_64

Güvenilirliğin anahtarı, SNMP'nin ortamınızda doğru şekilde kurulup kurulmadığıdır, tüm ana bilgisayarların doğru topluluk dizeleri kurulumuyla çalışan snmp'si vardır.


Nedir snpwalk? Nereden bulabilirim? Ayrıca, sadece "Linux" yazıyor, dağıtım bilgisi yok (istediğim bu, unamebana verebilir Linux). Linux dışı işletim sistemlerinde çalışıyor mu? UNIX’de ya da BSD’de mi yoksa OSX’te mi?
terdon

snmpwalk bir Linux komut satırı aracıdır. Sadece “Linux” yazmıyor, aynı zamanda gerçekten ihtiyacınız olan tek şey olan çekirdeği yazdırıyor. SNMP diğer ana bilgisayarlarınızda yapılandırılmışsa, UNIX, BSD, OSX olup olmadığı, snmpwalk standart olduğu için çalışacaktır (v1 | v2c | v3) ve hatta Windows ana bilgisayarlarındaki su üzerinde çalışacaktır. Ayrıca bkz: snmpget veya snmpgetnext.
xpros

Kulağa hoş geliyor ama lütfen cevabınızı düzenleyebilir ve nerede bulabileceğimizi açıklayabilir misiniz ? Mesela Debian depolarında int değil. Ayrıca, neyin uname -avermeyeceğini ve bu sorunun neyle ilgili olduğunu bana dağıtımın adını nasıl söyleyeceğini açıklayınız . Her neyse, hatta bu bilgiyi geri döndürebilir, standart olmayan bir yardımcı program olduğunu ve kurulması gerektiğini görerek, burada yararlı olacağından emin değilim. Buradaki düşünce uzaktaki bir sisteme giriş yapmak ve işletim sistemini bulmak (eğer Linux ise dağıtım dahil).
terdon

it also prints the kernel version which is really the only thing you needAma ... bu sorunun asıl amacı bu. Tek ihtiyacın olan buysa, kullanabilirsin uname -a. Çekirdek, bir işletim sisteminin önemli bir parçasıdır, ancak tüm işletim sistemi değildir. Dosya sistemi düzeni ve kullanıcı alanı programları (örneğin paket yöneticisi) önemlidir.
Parthian

1

Kullanım /etc/os-release:

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="18.10 (Cosmic Cuttlefish)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.10"
VERSION_ID="18.10"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=cosmic
UBUNTU_CODENAME=cosmic

Sebepler, bir SSS’de http://0pointer.de/blog/projects/os-release.html bir link ile açıklanmaktadır . Bu yorumda @weberjn tarafından sağlanan ücretsizdir . Ben sadece lsb_releaseşimdiye kadar en çok cevaplanan yanıt olan 2013'ten hangisinin kullanılmamasına karşı bir argüman listeleyeceğim.

Bunun için zaten lsb_release aracı var, neden bunu kullanmıyorsun?Eh, çok garip bir arayüz: çağırmanız gereken bir kabuk betiği (ve dolayısıyla C kodunuzdan eşzamansız olarak ortaya çıkıyor) ve genişletilebilir olması için yazılmamış. Bu, birçok dağıtımda isteğe bağlı bir pakettir ve hoş geldiniz mesajı göstermek için erken önyüklemenin bir parçası olarak çağırmaktan memnuniyet duyacağımız hiçbir şey yoktur. (Alt-ikinci kullanıcı alanı önyükleme süreleri olan zamanlarda, hoşgeldin mesajını göstermek gibi bir önemsizlik için gerçekten büyük bir kabuk betiği çağırmak istemiyoruz). Bize lsb_release aracı, dağıtım kontrollerinin standardizasyonuna ihtiyaç duyulan dağıtım kontrollerini soyutlama girişimi gibi görünmektedir. Bu sadece kötü tasarlanmış bir arayüz. Kanımızca LSB sürümünün kendisini belirlemek için bir arayüz olarak kullanımı var, ancak dağıtım veya sürümü kontrol etmek için kullanılmıyor.


Teşekkürler, ancak kabul edilen cevap zaten bu teklife, /etc/os-releasedaha standart hale geleceğini açıklayan alıntıda ele almaktadır . Ancak, bu dosya her zaman tüm sistemlerde bulunmaz; bu nedenle, kabul edilen cevabın daha taşınabilir alternatifler vermesi gerekir. Ayrıca, neden C kodundan bahsettiğinizi bilmiyorum, soru C'den bir şey çağırmakla ilgili değil
terdon

@terdon Sadece merak ediyorum 2018’de bu sistemler /etc/os-releasenelerdir? lsb_releaseVarsayılan olarak gönderilmeyen sistemlere kıyasla kullanıcı tabanlarının perişan olduğunu düşünüyorum . En azından Fedora'daki kabul ettiğin cevabı kullanamadım. C yorumuna gelince, bu benim değil, sağladığım systemd0pointer.de bağlantısından bir alıntı .
anatoly techtonik

Evet, senin olmadığını biliyorum, sadece neden C koduyla ilgili bir alıntı yaptığını düşündüğünü merak ediyordum. Ve bildiğim kadarıyla os-release, çoğunlukla ya da sadece bir Linux olayı. FreeDesktop.org tarafından tanımlanmış gibi görünüyor , bu yüzden belki bazı Unix lezzetleri de kullanır, ancak çoğu veya gömülü sistemlerde veya GUI dışı sistemlerde bulacağınızdan şüpheliyim. Son olarak, birçok yeri unutma stabilite nedeniyle hala çok eski makineleri kullanın.
Terdon

Alıntı hakkında lsb_releaseve C ile Go yerine ve aynı argümanı alabilirsiniz. Çalışan yükü, lsb_releasehem güvenlik hem de performans noktalarından, yalnızca statik dosyayı ayrıştırmaya göre çok daha yüksektir. Kararlılık sağlayan çok eski makinelere inanmıyorum. Heartbleed ve arkadaşlar onları uzun zaman önce götürmüş olmalıydı, o yüzden sadece kullanın/etc/os-release
anatoly techtonik
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.