Yerel bir çalıştırılabilir nereye yerleştirilmelidir?


62

Performans sürüm kontrol istemcisi ( p4) için bir yürütülebilir dosya var . Yerleştiremem /opt/localçünkü kök ayrıcalıklarım yok. Altına konulması gereken standart bir yer var mı $HOME?

Dosya Sistemi Hiyerarşisinde, yerel yürütülebilir dosyaların / ikili dosyaların yerleştirilmesi gerektiğini söyleyen bir sözleşme var $HOME/binmı?

FHS için Wikipedia makalesinde böyle bir kongre bulamadım .

Ayrıca, gerçekten bir kongre varsa, açıkça $HOME/bindizine giden yolu veya dizinin konumu ne olursa olsun eklemem gerekir binmi?

Yanıtlar:


64

Genel olarak, sistemde kurulu olmayan ve bakımı yapılan bir ikili sistemin birden fazla kullanıcıya sistem genelinde erişilebilir olması gerekiyorsa, bir yönetici tarafından yerleştirilmelidir /usr/local/bin. /usr/localGenel olarak yerel olarak derlenmiş ve kurulmuş yazılım paketleri için kullanılan tam bir hiyerarşi vardır .

Eğer bir binaryin tek kullanıcısıysanız, kurulumu $HOME/binkendiniz kurabileceğiniz için uygun konumdur. Bir yazılım paketini kaynaktan derlerseniz, $HOMEdizinde kısmi veya tam bir yerel hiyerarşi oluşturmak da uygundur . Yerel hiyerarşi tam olarak böyle olurdu.

  • $HOME/bin Yerel ikili dosyalar
  • $HOME/etc Yerel ikili dosyalar için ana bilgisayara özgü sistem yapılandırması
  • $HOME/games Yerel oyun ikili dosyaları
  • $HOME/include Yerel C başlık dosyaları
  • $HOME/lib Yerel kütüphaneler
  • $HOME/lib64 Yerel 64 bit kitaplıklar
  • $HOME/man Yerel çevrimiçi kılavuzlar
  • $HOME/sbin Yerel sistem ikili dosyaları
  • $HOME/share Yerel mimariden bağımsız hiyerarşi
  • $HOME/src Yerel kaynak kodu

Çalıştırırken configure, sen belirterek kurulum için yerel hiyerarşiyi tanımlamak gerekir $HOMEvarsayılan yüklemelerine için ön ek olarak.

./configure --prefix=$HOME

Şimdi make && make installçalıştırıldığında, derlenmiş ikili dosyalar, paketler, kılavuz sayfaları ve kütüphaneler $HOMEyerel hiyerarşinize yüklenecek . El ile $HOMEyerel bir hiyerarşi make installoluşturmadıysanız, yazılım paketinin ihtiyaç duyduğu dizinleri oluşturur.

Bir kez yüklü $HOME/bin, ya ekleyebilir $HOME/biniçin sizin $PATHveya mutlak kullanarak ikili diyoruz $PATH. Bazı dağıtımlar varsayılan $HOME/binolarak size eklenir $PATH. Ya bu test edebilirsiniz echo $PATHve eğer görünce $HOME/bin, orada ya da ikili koymak $HOME/binve yürütme which binaryname. Geri gelirse $HOME/bin/binaryname, varsayılan olarak $ PATH'nizdedir.


5
$ HOME noexec'e bağlı bir dosya sisteminde olmadığı sürece. / tmp / genellikle noexec'e de monte edilir.
ewanm89

3
Bu, Dosya Sistemi Hiyerarşisi Standardı'nın (FHS) bir parçası. pathname.com/fhs/pub/fhs-2.3.html#USRLOCALLOCALHIERARCHY
Patrick

29
Kullanmanızı tavsiye etmem $HOME. Bu, ana dizininizi ilgilenmediğiniz pek çok dizinde barındırır. Kim istiyor man, libolanları ev dir vb? $HOME/binVeya altında hiyerarşi oluşturmayı tercih ederim $HOME/local. Bu, on yerine ana dizinize yalnızca bir alt dizin ekler. PATHKolayca dahil etmek için adapte edilebilir $HOME/bin/binveya $HOME/local/bin.
Marco,

18
Örneğin XDG basedir spec (tarafından kullanılan bir seçenek, {, bin, lib vb.} $ HOME / .local / kullanmaktır standards.freedesktop.org/basedir-spec/basedir-spec-latest.html ) ve piton ( python.org/dev/peps/pep-0370 )
janneb

4
@ janneb Bahsettiğiniz XDG Temel Dizin Belirtimi , yalnızca bahsetmektedir $HOME/.local/share(Sürüm 0.7, 24 Kasım 2010).
Piotr Dobrogost

27

Gibi Uther bahsedildiği , /usr/localesasen, bir önek olarak tasarlanmıştır iken, sistem yöneticisi tarafından yüklenen yazılım /usrdağıtımın paketleri yüklü yazılımlar için kullanılmalıdır.

Bunun arkasındaki fikir, (örneğin dağıtılan yazılım ile çatışma kaçınmaktır rpmve debpaketler) ve "yerel" öneki üzerinde Admin tam saltanatı verir.

Bu, bir yöneticinin hala bir debian benzeri dağıtım kullanırken özel derlenmiş yazılım yükleyebileceği anlamına gelir.

FHS’den

/ Veya / usr içine yerleştirilmiş olan yazılımların sistem yükseltmeleri üzerine yazılması mümkündür (bu dağıtımların / etc içindeki verilerin üzerine yazılmasını önermemize rağmen). Bu nedenle, yerel yazılım / usr / local dışında iyi bir neden olmadan yerleştirilmemelidir.

Kullanıcıya özel yazılımı yüklerken , yazma izni almanızı sağladığından, önek olarak kullanılmasını önerir$HOME . Şahsen, $HOME/.local(umarım) güzel ve düzenli bir ev dizininizin dağınıklığından kaçındığından dolayı daha şık bir çözüm olarak kullanmayı düşünüyorum !

$HOME/.local/shareZaten kullanılan freedesktop.org XDG Base Directory şartname bir ekleme tasavvur çok almaz böylece, $HOME/.local/binsizin için $PATHve bir yapım $HOME/.local/libsen bunu yaparken, vb.

Önekinizin gerçekten gizli bir dizin olmasını istemiyorsanız, kolayca sembolik bir bağlantı oluşturabilirsiniz, örneğin:

ln -s .local ~/local

Kenar notu

Kullanıcıya özel yapılandırma dosyaları için kullanılan varsayılan değerin .config(değil .local/etc) olduğuna dikkat etmek $XDG_CONFIG_HOMEönemlidir. Ayrıca, ne yazık ki, yazılımın büyük bir kısmının XDG'yi görmezden geldiğini ve istedikleri yerde (genellikle kökündeyken) config dosyaları oluşturduğunu belirtmeliyim $HOME. Ayrıca $XDG_CONFIG_HOMEvarsayılan $HOME/.configistenirse ayarlanamayabileceğini unutmayın .

İşin garibi, bir dağıtımın varsayılan yapılandırma dosyaları için ayrılmış bir dizin yok, bu yüzden bir dosyanın /etcdağıtım tarafından sağlanmış olup olmadığını veya sistem yöneticisi tarafından düzenlenip düzenlenmediğini bilmek mümkün değil .


1
Ben herhangi bir söz bulamıyorum .localFHS içinde
Daniel Serôdio

@DanielSerodio XDG dizini belirtiminde, öne çıkan yeni bir standart. Bkz unix.stackexchange.com/questions/316765/... ve superuser.com/questions/1170793/...
ivan_pozdeev

Bu not /etc, birden fazla yöneticiye sahip bir sunucuyu yönetirken gerçekten can sıkıcı bir durum - konuyla ilgili dosyalarınızı özel dosyalara koymak oldukça zor.
naught101
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.