Linux'ta işletim sistemi ve çekirdek neden ayrı ayrı ele alınıyor? [kapalı]


9

Ubuntu dahil herhangi bir Linux işletim sistemi söz konusu olduğunda, insanlar çekirdek ve işletim sistemi terimlerini ayırt etme eğilimindedir . Bu, Windows ve OS X ailesi için doğrudur, ancak Linux topluluğu arasında neden bu kadar yaygındır? İşletim sisteminin kendisini güncellemeden işletim sistemi çekirdeğini güncellemenin bir yolu var mı? Ya da tam tersi? Eğer öyleyse, bu nasıl faydalı olabilir?


3
Basit: özgürlük. İhtiyacınız olan her şeyin kendi versiyonunu yaratma özgürlüğü. Çekirdek? Kabuk? Masaüstü. Göreyim seni.
Rinzwind

6
Ayrı oldukları için mi? Pencere yöneticisinin X sunucusundan ayrı olarak ele alınmasının nedeni (ayrı oldukları için) ve kabuğun terminal öykünücüsünden ayrı olarak ele alınmasının nedeni de (ayrı oldukları için). Şimdi, neden bu şekilde tasarlandıklarını soracak
olsaydınız

Ubuntu şimdi de Windows 10 çekirdeğinin üzerinde çalışıyor ve bu da bunun gerçek bir ayrım olduğunu gösteriyor. Tabii ki, Windows işleri biraz karmaşıklaştıran bir X sunucusu ile gelmiyor, ancak parçalar eksik olduğunda bu bekleniyor.
MSalters

@MSalters Windows'ta pencere yöneticisi biraz zor, evet; ancak, birisi gerçekten Windows'ta X çalıştırmak istiyorsa, bununla başa çıkmanın birçok yolu vardır. Bir yabancı için en kolay olanı muhtemelen mevcut pencere yöneticisinin üstünde bir sunucu "emülatörü" olurdu, ancak bunun ne kadar iyi bir haritaya sahip olabileceğine dair hiçbir fikrim yok (son kez X dahili gördüm, çok umutlu değildim). Nefesini tutmazdım - sanki birçok insan X'in Windows'ta çalışmasını istiyormuş gibi gelmiyor.
Luaan

Yanıtlar:


12

Tüm GNU / Linux sistemi modüler yaklaşım kullanılarak oluşturulmuştur. Tek bir modülü çoğunlukla başkalarına dokunmadan yükseltebilirsiniz ( genel olarak değiştirin ). Söz konusu modül bir önyükleyici, çekirdek, kabuk, komut, masaüstü ortamı, GUI uygulaması, her neyse…

Tabii ki, bağımlılıkları doğru bir şekilde yönetebildiğiniz sürece doğrudur. Ubuntu etrafındaki dağıtım kümesinde APT bağımlılıkları otomatik olarak çözmek için kullanılır.

Şu komutu kullanarak başka bir çekirdek sürümü yükleyebilirsiniz:

sudo apt install linux-image-<version>

APT izin verdiği sürece, çekirdeğin seçilen sürümünü yeniden başlatabilir ve kullanabilmeniz gerekir, ister genel, ister düşük düzeyde olsun, ister kendiniz, örneğin Gerçek Zamanlı Linux gibi bir çekirdek sürümünü oluşturup mevcut sisteminizle kullanabilirsiniz. .


Çok teşekkürler, ama tutarlı mı? Diyelim ki Ubuntu 14.04 LTS'in çekirdek sürümü 3.19.0 var ve çekirdeğin güncellenmesi durumunda artık 14.04 LTS değil, değil mi? Bu yüzden tüm sistemi daha sonra güncellemeye çalışırsam veya yerleşik güncelleme mekanizması (Software Updater) bana yeni sürümü getirirse, güncellenmiş çekirdek sürümünün farkında olacak mı? Modülleri önceden kontrol etmeksizin ayrı ayrı kontrol edebilir ve sadece gerekli değişiklikleri getirebilir mi?
Düşler Rüzgarı

1
Her Ubuntu sürümünün desteklediği uzun çekirdek sürümleri listesi için Packages.ubuntu.com/search?keywords=linux-image adresine bakın . Ubuntu sürümü, çekirdek sürümünden farklı şeyler tarafından belirlenir, ancak hangilerinin gerçekten farkında değilim… Bununla ilgileniyorsanız, başka bir soru başlatabilirsiniz.
Melebius

1
@AleksandrMedvedev Çok sonra buldum! Ubuntu sürümü paket /etc/issuetarafından sağlanan dosyada belirtilmiştir base-files. Daha önce yazdığım gibi, çekirdek sürümü ile ilgisi yoktur.
Melebius

5

Kernel'in işletim sisteminin önemli bir parçası olduğunu bildiğiniz gibi, GNU / Linux dağıtımlarında işletim sisteminin diğer bölümlerine dokunmadan çekirdeği kolayca güncelleyebilirsiniz. Ancak işletim sistemimizin bir bölümünü güncelliyoruz.

Bir işletim sistemi, çekirdek alanı ve kullanıcı alanı olmak üzere iki bölümden oluşur.

Bu nedenle, yalnızca yeni sürüm geçerli kullanıcı alanınızla uyumluysa, çekirdek alanınızı kullanıcı alanınıza dokunmadan güncelleyebilirsiniz.

Kullanıcı alanı araçlarını güncellemekle ilgili bir başka evet.

Koştuğunuzda:

sudo apt-get upgrade

Çekirdek için bir güncelleme mevcutsa:

The following packages have been kept back:
  linux-generic linux-headers-generic linux-image-generic

böylece yalnızca kullanıcı alanınızı ve

sudo apt-get dist-upgrade

çekirdek dahil her şeyi güncelliyor.

Yalnızca Çekirdeğinizi daha yeni bir sürüme yükseltmek için aşağıdakileri kullanın:

$ apt-cache search "linux-image-[0-9]+.*-generic" | awk '{print $1}' | head -4
linux-image-4.4.0-21-generic
linux-image-4.10.0-14-generic
linux-image-4.10.0-19-generic
linux-image-4.10.0-20-generic

daha yeni çekirdeklerin bir listesini bulmak için yeni bir paket olarak yükleyin, örneğin:

sudo apt install linux-image-4.10.0-14-generic

Bu kesinlikle doğru değil.
mook765

Beni düzeltin;) bu yüzden yeni bir şey öğreniyorum :)
Ravexina

3
sudo apt upgradeyeni sürümler varsa çekirdeği de yükseltir. sudo apt full-upgradepackeges kıçını iyi kaldıracak, ne asudo apt upgradeyapmayacağım.
Soren A

Şimdi yeni bir çekirdeğe yükseltme yaptığım için bir çeşit Kurulum ve upgradealt komut kullanırken , herhangi bir yeni paket yüklemeyecek, aynı zamanda herhangi bir paketi kaldırmıyor, bu yüzden kullanıyoruz dist-upgrade. en azından apt-getbu şekilde çalışır;) bu yüzden herhangi bir karışıklığı önlemek için komutlarımı güncelledim.
Ravexina

1
Ben apt-command ile daha deneyimliyim , kısa bir araştırmadan sonra cevabınızın şimdi doğru olduğu aptve apt-getfarklı bir şeyle başa çıktığı görülüyor , bkz. Hiroom2.com/2016/05/20/ubuntu-16-04-debian-8-apt -komut /… . Yani ikimiz için de biraz bilgi ...
mook765

3

İlk olarak, birkaç açıklama, çünkü GNU / Linux sistemlerinin nasıl ortaya çıktığını anlamadığınızı düşünüyorum. Bu senin için yeni bir şey değilse benimle ayı:

"Çekirdek" sadece çalışan başka bir program değildir, fakat işletim sisteminin temel fonksiyonları sağlayan kısmıdır: bir programı başlatmak istiyorsanız (örneğin, komut satırına "ls" yazarsınız) ikili kodun yüklenmesi gerekir diskten (onu bulmak için bazı dosya sistemi işlemlerini ve onu okumak için bazı dosya işlemlerini içeren), bir "işlem ortamı" oluşturulur: bellek atanır, bir işlem numarası verilir, vb. (FS, dosyadan okuma, ...) sistem kitaplıkları tarafından işlenir, ancak sonuncusu çekirdek işlevleridir. Bir anlamda "işletim sistemi" çekirdeği ve diğer her şey onun etrafındaki dekorasyon.

"Linux" aslında (sadece!) Bir işletim sisteminin başka bir parçası olmayan bir çekirdektir. Linus Torvalds, Andrew Tanenbaums MINIX şablon işletim sistemi çekirdeğini alıp tam dolu ve gerçek bir işlenebilir çekirdek olacak şekilde tamamlayarak yazmaya başladı. Bugüne kadar bu çekirdeği geliştiren Linus (ve katkıda bulunan / katkıda bulunan birçok kişi) var. Bu çekirdek hala UNIX'e çok benzer, ancak UNIX çekirdeği DEĞİLDİR.

"GNU" birçok yaygın UNIX komutunu "daha iyi hale getirme" girişimi olarak başladı. Başarılı olup olmadıklarını tartışmayacağım, ama kesinlikle çok fazla yazılım yazdılar ve bir noktada yardımcı programlar koleksiyonu vardı. Hatta büyük ölçüde UNIX'e dayanan, ancak kesinlikle farklı olan bir işletim sistemi çekirdeği (HURD) geliştirmeye başladılar. Ancak bugüne kadar HURD erken gelişiminde ve neredeyse hiç çalışmayan bir çözümdür. "GNU" btw. "GNU (UNIX Değil) kısaltmasıdır - UNIX'in halefi oluşturmak amacıyla UNIX'in bazı (algılanan veya gerçek) sınırlamalarının üstesinden gelmeye çalıştılar (yine: başarılı oldularsa tartışmaya girmek istemiyorum veya değil - "daha iyi" veya "daha kötü" olup olmadığını umurumda değil, ama kesinlikle farklı!).

Bu nedenle, bir çekirdek ve bir araç setinden yoksun bir dizi araçla, bu ikisini bir araya getirmek doğal bir gelişmeydi: GNU / Linux oluşturuldu.

Yine de, çalışan (ve uygulanabilir) bir işletim sistemine sahip olmak için bir çekirdek ve araç setinden daha fazlasına ihtiyacınız var: bir paket yönetim sistemine ihtiyacınız var, kurulum prosedürlerine ihtiyacınız var, şablon konfigürasyonlarına ihtiyacınız var, ihtiyacınız ...

Bu sonuca birkaç farklı kişi (veya grupları) geldi ve GNU / Linux kombinasyonunu, yukarıda bahsettiğim şeyleri tam olarak ekleyerek, beğenilerine göre bir GNU / Linux sistemi oluşturmak için kullandı: bir paket yöneticisi, bir paketleme sistemi oluşturdular , kurulum prosedürleri ve daha fazlası. Bu farklı gruplar (sırasıyla çabalarının sonuçları) farklı dağılımlardır. Bugün üç farklı paket yöneticisi var (Debian için uygun ve * ubuntu gibi türetilmiş sistemler, RedHat için rpm ve Fedora, CentOS ve daha fazlası gibi türetilmiş sistemler, ArchLinux için pacman), ancak tüm bunlar sadece (aslında) olan yazılım paketlerini yönetiyor aynı: "ls" veya "df" vb. verdiğinizde ne denir,

Yani, "prensipte", yukarıda konuştuğum tüm yazılımların çeşitli versiyonlarından dağıtım yaratanlar gibi, tek başına çekirdeği güncelleyebilirsiniz.

Ancak, bu gerçekten büyük bir AMA: çünkü sadece çekirdek ve bazı ek yazılımlar değil, sistem yapılandırma araçları (bazı dağıtımların kullandığı ve bazılarının kullanmadığı sistemd) gibi akılda tutulması gereken birçok şey var, ağ NetworkManager gibi yönetim araçları, bu da GNOME kütüphanesinin bazı sürümlerine vb. bağlıdır. - "dağıtım" oldukça karmaşık bir şeydir ve çok sayıda güncellemeyi çektiğiniz çekirdeği güncellemeye çalışırsanız birçok bağımlılık nedeniyle başka şeyler.

Yine de ve aynı şekilde "prensipte", yukarıdaki gibi: tüm kaynakları indirerek, derleyerek, çalışan bir sürüm kombinasyonları bularak, bazı paketleme sistemlerini devreye sokarak (veya mevcut kaynaklardan birini kullanarak da kendi dağıtımınızı oluşturabilirsiniz) ) - vb., dağıtılabilir, kurulabilir ve yapılandırılabilir bir sisteminiz olana kadar. Ubuntu gibi dağıtımların yaratıcıları budur ve bir mucize değildir - sadece çok karmaşık bir iştir, bu yüzden gerçekte çoğu kullanıcı bundan kaçınır ve kullanıma hazır bir şey kullanırlar.

Umarım bu soruya cevap verir.


GNU, birçok yaygın UNIX komutunu "daha iyi hale getirme" girişimi olarak başlamadı. GNU, UNIX'in kısıtlı mülkiyetine yanıt olarak özgür yazılım amacıyla, hareket halindeyken bir işletim sistemiydi. Onların web sitesinden daha fazla okuyabilirsiniz . Tüm yazılımlarını Linux'a taşımaya karar verdiler, çünkü Linux yaratıldığında GNU'nun hala çalışan bir çekirdeği yoktu.
Ian Emnace

3

En basit cevabın Ubuntu ile ilgisi yoktur; GNU / Linux'un oluşturulma şekliyle ilgilidir. Bir sistem geliştiricisi olarak bakmaya çalışırsanız, her biri keskin bir sınırla (ABI) ayrılmış iki dünya göreceksiniz.

Düşük seviyeli geliştiricilerin çalıştığı çekirdek dünyası tek başına bir sistemdir. Normal bir uygulamada normalde bulacağınız her şeye sahiptir. Tek fark, kullanıcının makineyi kullanan gerçek kişi değil, kullanıcı-uzay dünyası olmasıdır. Çekirdek "uygulama" orta adam, makineyi kullanan sunucu - kabuk hayalet.

Şimdi, kullanıcı alanı, günlük kullanıcı ve geliştiricinin oynadığı normal dünyadır. Katı API'lere, kurallara, dosyalara ve en önemlisi üzerinde çalıştığı makinenin soyut, çocuksu bir görüntüsüne sahiptir. Kullanıcı yalnızca bu bölümü gördüğünden ve bu dağıtım boyutunun% 99'u kadar olduğundan, İşletim Sistemini yanlış adlandırmak kolaydır. Doğru isimlendirme, bir çekirdek (Linux, HURD, BSD, vb.) Kullanarak ve bir takım araçlar (genellikle GNU tarafından sağlanır) kullanılarak oluşturulmuş bir yazılım dağıtımı (Canonical, Fedora, vb.) ).

Sorunuzu cevaplamak için, GNU / Linux'ta (Windows ve OSX'te olduğu gibi, bana güvenin), sadece sürümü değil, tüm mimariyi de (Linux Çekirdeği, HURD Çekirdeği gibi) ve sürece ABI'ye dokunulmadı, kullanıcı dünyasında asla tek bir değişiklik yapmayın ... Güne, gerçek adamın çekirdeği kaynaklardan inşa etmesi gerektiğinde, berbat bir USB web kamerası elde etmek için böyle çeşitli değişikliklerden geçebilirsiniz. çalışmak için ... Şimdi, modüler çekirdekle, sadece bir modül kurmanız gerekiyor ve ABI (bazen) yeni özelliklerle genişletilen yepyeni bir çekirdek dünyası elde edeceksiniz ...

Yine, kullanıcı alanı için aynı. Diyelim ki,% 99 oranında bir Ubuntu deposundan yeni bir uygulama yüklediğinizde, en büyük endişeniz gerçek çekirdeğin değil, diğer kullanıcı alanı bileşenlerinin uyumluluğudur. Çekirdek sürümünün (ABI aracılığıyla) kullanıcı alanına kurulabilecek bir dizi şeyi belirlediği durumlar vardır, ancak amaç (en azından geliştiriciler için) bunu ortadan kaldırmaktır ...

Düşünmek için başka bir şey, kendi, özel, türünün tek örneği GNU / Linux dağıtımınızı oluşturabilirsiniz (ve oldukça kolaydır). Bir çekirdek, bazı basit komut dosyaları, çeşitli uygulamalar edinin ve hazırsınız. Sadece bu kadar kolay (ağ donanımı için OpenWRT GNU / Linux dağıtımlarına bir göz atın, tüm dağıtım 16Mb gibi).


"keskin bir sınır (ABI)." Bence API demek istiyorsun. ABI, daha iyi bir terim olmamasından dolayı, donanım arabirimine bir koddur. API ise bir kod-kod arayüzüdür.
Sam

1

Sanırım bunlar ayrı tutulur çünkü çekirdek kritik bir parçadır. Regresyonu olan bir çekirdek veya sadece başarısız bir güncelleme, oldukça fazla zarar verebilir. Daha az sıklıkla güncellemek isteyebilirsiniz; ya da kimsenin endişe verici hatalar bildirmediğinden emin olmak için biraz bekledikten sonra.

Ayrıca bazı ileri veya profesyonel kullanıcılar, davranışlarını gereksinimlerine daha iyi uyacak şekilde değiştirmek için çekirdeği yeniden derlerler. Bu durumda, her yükselttiğinizde otomatik olarak fabrika sürümüyle değiştirilmesini istemezsiniz.

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.