Linux'un kurulu programların dosyalarını düzenlemesinin yararı nedir? [kapalı]


10

Windows'da sistem sürücüsünün C:, program_filesher programın kendi dizini olduğu bir dizini vardır.

Linux'ta, altında /usr/ve /usr/local/vardır /bin, /etc, /share, /srcvs.

Pencerelerde, her programın tüm dosyaları aynı dizinde gruplanırken, Linux'ta tüm programlardan aynı türdeki dosyalardır.

Windows'un yüklü programları düzenleme biçiminin Linux yönteminden daha mantıklı olduğunu ve bu nedenle yüklü programların elle yönetilmesinin daha kolay olduğunu hissediyorum.

Linux'un kurulu programların dosyalarını düzenlemesinin yararı nedir? Teşekkürler.

Yüklü programları $ HOME için kabuk onları çalıştırmak için onları aramak için nasıl organize sorunu ? , burada programlarımı $HOMEWindows biçiminde düzenlemeye çalışıyorum , ancak programların arama yollarını belirtmede bir sorun yaşıyorum .


9
@RandallStewart " öngörülemeyen ve dağınık " bizim rasyonel yerleştirme ve DLL çoğaltılmamasıdır.
RonJohn

1
Bu tarihsel olarak temellendirilir - çoğunlukla sadece gerekli temel özelliklere sahip önyükleme yaparken birkaç disk bölümünün monte edilebilmesi için. Benzer bir durum, PC BIOS'larının çok büyük sabit disklerin yalnızca ilk bölümünü görebilmeleriydi, bu yüzden önyükleme için gereken her şeyi içeren ayrı bir bölüm ilk bölüme yerleştirildi. Genellikle "/ boot" olarak adlandırılır. Bugün sanal alanlara ve güvenilmeyen uygulamalara olan ihtiyaç bunun yeniden düşünülmesine neden oldu - bkz. Örneğin Ubuntu snaps.
Thorbjørn Ravn Andersen

9
Windows'un şu anda her programın tüm dosyalarını smae dizinine koymadığını gösteren ilk kişi olalım. "Program Files" ve "Program Files (x86)" dışında, "Local", "LocalLow" ve "Roaming" klasörlerinin "Users \ <username> \ Appdata" dizinleri de vardır. Windows ayrıca programlar için her zaman bir "Program Files" klasörü kullanmamıştır veya geçmişi boyunca bunu sürekli olarak kullanmamıştır. * nix, dosyaların zaman içinde işlenmesinde çok daha tutarlıdır.
YLearn

5
@JAB, kabul etti ve anladı. Ben OP ifadesinin, yani "Pencerelerde, her programın tüm dosyaları aynı dizinde gruplandırılmış" olduğunu işaret ediyordum sadece doğru değil. Ayrıca, Windows programlarıyla ilgili yapılandırma ve diğer verileri depolamak olarak da görülebilen ve bir "Program Files" dizininin bir parçası olmayan Windows kayıt defterini tartışmadım.
YLearn

2
Linux yüklü programların dosyalarını düzenliyor mu? Ne zamandan beri?
Ocaklar

Yanıtlar:


17

Linux'ta farklı yerler genellikle iyi bakıldığında bazı mantığı yansıtır. Örneğin.:

  • /bin en temel araçları (programları) içerir
  • /sbin en temel yönetici programlarını içerir

Her ikisi de önyükleme ve temel sorun giderme tarafından kullanılan temel komutları içerir. Ve burada ilk farkı görüyorsunuz. Bazı programlar normal kullanıcılar tarafından kullanılmak üzere tasarlanmamıştır.

Sonra bir göz atın /usr/bin. Burada, genellikle 1000'den fazla komut (program) içeren daha büyük bir seçim bulmalısınız. Bunlar standart araçları, ancak bu kadar gerekli değildir /binve /sbin.

/usr/binkomutları içerirken, yapılandırma dosyaları başka bir yerde bulunur. Bu, hem işlevsel varlıkları (programları) hem de yapılandırmalarını ve diğer dosyalarını ayırır, ancak kullanıcı işlevselliği açısından, bu, kullanışlı olur, çünkü komutların başka bir şeyle karıştırılmaması PATH, yürütülebilir dosyalara işaret eden değişkenin basit kullanımına izin verir . Aynı zamanda netlik sağlar. Ne olursa olsun yürütülebilir olmalıdır.

Şuna bir bak PATH,

$ echo "$PATH" | perl -F: -anlE'$,="\n"; say @F'
/home/tomas/bin
/usr/local/bin
/usr/bin
/bin
/usr/local/games
/usr/games

Doğrudan çağırabileceğim komutları içeren tam olarak altı konum vardır (yani, yollarına göre değil, yürütülebilir dosyalarının adlarına göre).

  • /home/tomas/bin özel yürütülebilir dosyalarım için ana klasörümdeki özel dizinim.
  • /usr/local/bin Aşağıda ayrı ayrı açıklayacağım.
  • /usr/bin yukarıda tarif edilmiştir.
  • /bin ayrıca yukarıda tarif edilmiştir.
  • /usr/local/games/usr/local(aşağıda açıklanacaktır) ve oyunların bir kombinasyonudur
  • /usr/gamesoyunlar. Yardımcı program yürütülebilir dosyaları ile karıştırılmamaları için ayrı konumları vardır.

Şimdi /usr/local/bin. Bu biraz kaygan ve zaten burada açıklanmıştı: / usr / local / bin nedir? . Bunu anlamak için, klasörün /usrbirçok makine tarafından paylaşılabileceğini ve net bir konumdan monte edilebileceğini bilmeniz gerekir . Buradaki komutlar, daha önce belirtildiği gibi, önyüklemenin aksine, önyükleme sırasında gerekli değildir /bin, böylece konum önyükleme işleminin sonraki aşamalarında bağlanabilir. Ayrıca salt okunur bir şekilde de monte edilebilir. /usr/local/bindiğer yandan, yerel olarak yüklenen programlar içindir ve yazılabilir olması gerekir. Bu nedenle, birçok ağ makinesi genel /usrdizini paylaşabilirken , her birinin /usr/localortak içine kendi montajı olacaktır /usr.

Son olarak, PATHkök kullanıcıma bir göz atın :

# echo "$PATH" | perl -F: -anlE'$,="\n"; say @F'
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin

Bunları içerir:

  • /usr/local/sbin, türün yönetici komutlarını içeren /usr/local
  • /usr/local/bin, normal kullanıcının kullanabileceği ile aynıdır. Yine, türleri olarak tarif edilebilir /usr/local.
  • /usr/sbin gerekli olmayan yönetim yardımcı programlarıdır.
  • /usr/bin gerekli olmayan yönetim ve düzenli kullanıcı yardımcı programlarıdır.
  • /sbin temel yönetici araçlarıdır.
  • /bin yönetici ve düzenli kullanıcı için gerekli araçlardır.

Teşekkürler. Kurulacak programları nasıl düzenlediğinizle çok ilgileniyorum /home/tomasz/bin/, bkz. Unix.stackexchange.com/questions/431793/…
Tim

Anladığım kadarıyla, ağa bağlı dizinlerin ayrılması /binve /usr/bingerçekten de sorunlardan kaçınması sırasında, satıcı tarafından sağlanan dosyaların ( ) ve makinenin kendisinde manuel olarak yüklenen ( ) ve birbirleriyle ilgisi olmayan dosyaların /usrayrılması /usrve ayrılmasıdır. ağa bağlama sorunları. Bu doğru mu? /usr/local/usr/usr/local
Keiji

4
@Keiji, satıcı-yerel-yönetim bugün bu ayrım için en yaygın (ve geleneksel) kullanımdır, ancak geleneksel UNIX kurulumlarına bakarsanız, /usrağ dışı (vs /usr/local, iyi, yerel ) duyulmamış demektir nın-nin.
Charles Duffy

2018'de bu kadar kötü bir fikir
amara

7

Bugünlerde bunun klasik UNIX'in tarihsel mirası olduğunu düşünüyorum.

İlk UNIX sürümlerinde, programlar günümüzde olduğu kadar büyük değildi. Programlar genellikle sistem kitaplıklarını kullanan tek bir yürütülebilir dosyadan oluşuyordu. Dolayısıyla, hiç kimse birkaç kendi kütüphanesinden oluşacak programları düşünmedi. Ana kütüphane C kütüphanesiydi ve her program onun yerini biliyordu.

Ayrıca, UNIX ortamı bitmiş ürün olarak kabul edildi (dokümantasyon hazırlamak için). Bu nedenle tüm araçlara giden yollar düzeltildi.

HDD (Sabit Disk Sürücüsü) günlerindeki sabit yollardan bazı faydalar günümüzde mevcuttur. FSH (Dosya Sistemi Hiyerarşisi) ayrı disk bölümlerine ayrılır ve HDD'nin birincil sektörlerinin yakınındaki ikili ve kitaplıklarla bölümler koyarsa, programın başlama zamanı biraz daha hızlı olacaktır.


6
Bugün faydalı olan zorlayıcı avantajlar var. İkili dosyaları /usr/bin, statik veri dosyalarını /usr/shareve içinde değiştirilebilecek dosyaları /varveya /usr/vargüvenlik önlemlerinin, içinde hiçbir şeyin çalıştırılabilir shareveya varyürütülebilir olmadığını zorlamak için kullanılabileceği anlamına gelir ( noexecbağlar için bayraklar kullanarak ); dışarıdaki hiçbir şeyin vardeğiştirilemeyeceğini ( dm_verityimzalı, salt okunur medya oluşturmak için kullanılan bir sistemde veya benzer önlemlerde); vb.
Charles Duffy

3

Modern Unix benzeri bir sistem olarak gördüğünüz şey gerçekten geleneksel değil.

Normalde, oldukça az /ve /usrsadece sistem yardımcı programlarına sahip hiyerarşiler olur ve programlar daha sonra alt dizinine ayrı olarak yüklenir /usr/localve ardından sembolik bağlantılar oluşturularak kullanılabilir hale getirilir.

GNU yazılımı için çok tipik bir kurulum,

./configure
make
make install prefix=/usr/local/DIR/program-1
cd /usr/local/DIR
stow program-1

GNU saklama yardımcı programı, yazılımı PATH değişkenine herhangi bir dizin eklemek zorunda kalmadan standart yolda kullanılabilir hale getirmek için sembolik bağlantılar oluşturur (Windows'un yaptığı gibi ve cruft orada birikme eğilimindedir).

Bununla birlikte, modern Linux dağıtımları her şeyi hazır paketler olarak gönderir, böylece programlar "sistemin" bir parçası haline gelmiştir. Paket yöneticisi kurulumu hallettiğinden, sembolik bağlantılara gerek yoktur ve programları ayırmak yararlı bir amaca hizmet etmez (ancak birçok küçük dizinin taranması gerektiği için programın başlatılmasını yavaşlatır).

Ev dizininize yazılım yüklemek istiyorsanız, bunun için GNU yığınını da kullanmanızı öneririm - bu, programlarınızı ayrı tutmanıza izin verir, bu da bir paket yöneticisi kullanmıyorsanız mantıklıdır.

Bunun için geleneksel kurulum, ~/software/DIRprogramları yüklediğim, sonra DIRoluşturmak için stow içerisini kullandığım bir dizindir . Bu ~/software/bin, yüklü tüm yazılımlarımı almak için sadece PATH değişkenine ~/software/shareeklemem ~/software/bingerektiği anlamına gelir .

kullanın:

./configure --prefix=~/software
make
make install prefix=~/software/DIR/program-1
cd ~/software/DIR
stow program-1

program GNU kurallarına uyuyorsa yüklenir.


2

Uygulama paketinden (bir dizindeki C ++ derleyicisi, başka bir resim düzenleme programları) değil /usr/bin, tek tek dosyaları amaca ( yürütme dosyaları, /usr/libkütüphaneler için) bölme stilinden bahsediyorsunuz . Unix sistemlerinde bu tarihsel nedenin büyük bir kısmını oluştururken, Unix benzeri sistemleri buna doğru eğilme eğiliminde olan günümüzdeki güçler de vardır: bir sistemdeki programların çoğunu yöneten paket yöneticileri.

Windows'ta, tarihsel ve bugün hala oldukça fazla olan uygulamalar, kendi yükleyicilerini ve özellikle kaldırıcılarını sağlamaktan sorumludur ve şimdi bile çoğu zaman kendilerini herhangi bir merkezi uygulama listesine kaydetmemektedir. Böyle bir durumda, bir uygulamanın kendi dosyalarının olabildiğince çok sayıda "kendi" dizinine sahip olması genellikle daha iyidir. Bu, diğer uygulamalarla çakışmaları önlemeye yardımcı olur, ancak bu her zaman işe yaramaz (özellikle DLL'lerde ).

Öte yandan Unix sistemleri, 90'lı yıllardan beri genellikle her birinin kabul edilmiş tek bir paket yöneticisine ve bu paket yöneticisi aracılığıyla büyük miktarda yaygın olarak kullanılan yazılım sağlayan bir gruba sahipti. (Çeşitli Unices için resmi paket yöneticileri , NetBSD ve FreeBSD için yumve aptLinux sistemleri içerir . Genellikle ticari Unix sistemleri MacOS gibi resmi olmayan ancak yaygın olarak kabul edilen bir paket yöneticisi ile sonuçlanır .)pkgsrcportsbrew

Bu paket yöneticileri, sahip oldukları çeşitli alt dizinlerdeki sistemdeki her dosyayı izleyebilmeleri ve izleyebilmeleri avantajına sahiptir. Tek bir grup, burada her dosyanın adını ve konumunu atadığı için, aralarında paylaşılan küçük bir dizin dizisi kullanabilirler. Bu, özellikle uygulamalar arasında dosya paylaşma ve kitaplıkları ve yürütülebilir dosyaları aramak için ihtiyacınız olan yol sayısını düşük tutma alanlarında çeşitli avantajlar sunar.

Bununla birlikte, genellikle /optdizin altında, Unix'te de "uygulama başına ayrı dizin" kurulumunun uzun bir geleneği var .

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.