Bash scriptlerimi nereye koymalıyım


15

Düzenli yaptığım şeyler için bir araya topladığım birkaç basit bash senaryom var. Bunlardan biri yedekleme görevlerimi yapmak için yineleme çalıştırmaktır. Hiçbir şey zekice sadece bir demet if .. sonra ifadeler gerçekten. Bunun sudo olarak çalıştırılması gerektiğinden, scriptimi / usr / bin (veya PATH içinde başka bir yere), root.root ve chmod'a 700 olarak koyacak şekilde koymak en iyi yöntem olur mu?


Ben kullanımını söyleyebilirim git, komut dosyalarınızı to-version kontrol gibi bir yere git repolarının sizi yerel kopyalarını koymak ~ve sonra içine komut sembolik köprüyü ~/bin.
edwinksl

Yani gitolduğu gibi githubbulutlar?
WinEunuuchs2Unix

2
@ WinEunuuchs2Unix Komut dosyalarınızın diğer kullanıcılar tarafından kullanılabilir olmasını istiyorsanız, bunları koymanız gerekir /usr/local/bin. Aksi taktirde, onları içeri koy ~/bin. Her iki dizinde de kendi komut dosyalarınız yükselttiğinizde güvenli olmalıdır.
edwinksl

2
Yukarıdaki gibi, / usr / local / bin içine yerleştirin. Komut dosyası adlarınızın varolan bir linux komutu / ikili adı değil benzersiz olduğundan emin olun. Kendim sadece önceden varolan linux adlarının bir sayı ile bitmediğini gördüğüm herhangi bir komut dosyasının sonuna bir sayı ekleyin. (bazı gerçekten belirsiz olanlar söyleyebiliriz ...
Doug

1
@edwinksl Neredeyse bir yıl sonra ~/bin, çoğu komut dosyası için en iyi yer olduğunu söylemeliyim , çünkü bunları saklarken sudoonları düzenlemek için kullanmak zorunda değilsiniz /usr/local/bin.
WinEunuuchs2Unix

Yanıtlar:


3

Kendi scriptlerimi kaydediyorum /opt/scripts.

Betiğinizin her sistem kullanıcısı tarafından çalıştırılabilmesi gerekiyorsa, simgesel bir bağlantı oluşturabilirsiniz /usr/bin.

Komut dosyasını yalnızca kök yürütürse, simgesel bir bağlantı oluşturabilirsiniz /usr/sbin.

Şuna sembolik bir bağlantı ekleme komutu /usr/bin/:

ln -s /opt/scripts/<script> /usr/bin/

Çünkü çalıştırabiliriz /usr/bin/senin içindedir PATH varsayılan olarak.


1
Ben kullanmak yerine o öneriyoruz /usr/binkullanıcı / yerel kabuk komut dosyası için hedef olarak - bu olması /usr/local/bin(ya /opt/binuyarınca) Dosya Sistemi Hiyerarşi Standardı - Debian Wiki çatışmaları önlemek için (çoğu zaman, sen Ubuntu'nun sağlanan komut önceliklidir istiyorum).
shalomb

Çoğu sistemde , daha sonra yoldan geldiği için /usr/local/bingeçersiz kılınır /usr/bin. Bu, sistem dosyaları oraya koymadığı için bilerek, dosyaları oraya koyabilirsiniz, bu da sistem tarafından sağlananları geçersiz kılmalıdır.
allo

Her iki cevap da iyi görünse de bunu doğru cevap olarak işaretledim. Sebebi, FHS belgelerine bir göz attım ve / opt'in tam olarak bu amaç için var olduğu anlayışıyla gittim. Ben sadece / usr / local / bin benim komut dosyaları bağlanma fikrini seviyorum. Tüm işaretçiler için teşekkürler.
hatterman

17

Sizden başka hiçbir kullanıcı bu komut dosyalarını kullanmazsa:

Sonra onları içeride tutabilirsiniz /home/$USER/bin. binOrada değilse klasörü oluşturun ve dosyaları oraya taşıyın. Evinizdeki bin klasörü otomatik olarak PATH ortam değişkenine eklenir. Kod şuradadır .profile:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Bkz . $ PATH / / home / username / bin nasıl eklenir?

Veya bazı sistemlerde olabilir .bashrc:

export PATH=${HOME}/bin/:${HOME}/.local/bin:${PATH}

Teşekkürler Yaşlı Geek

Bu komut dosyası diğer kullanıcılar tarafından kullanılacaksa:

Sonra ya /usr/local/binya /opt/biniyi seçeneklerdir. Bkz. Özel Linux komut dosyaları yerleştirmek için standart bir yer var mı?

Bu yardımcı olur umarım


3

Yerel araçlarımın veya çeşitli bilgisayarlarda dağıttığım şeylerin hızlı bir şekilde toplanması için kullandığım bir dizin var /usr/local/apollo. Orada bu dizinde kapalı dallarıdır flags, binve logs.

Varsayılan apt-getdepoların dışında indirip yüklediğim /opt/uygulamalar için uygulamanın adıyla bir dizin yerleştirilir ve uygulamanın belirli sürümü için bir alt dizin daha eklenir. Bu şekilde bir uygulamanın derlenmiş sürümü dağıtılmış sürüm gibi vlcveya eclipsebu sürümle çakışmayacak.

Benim kullanımım /opttemel olarak resmi olarak tasarlanma şeklidir.

Bu arada dizinler /usr/local/bin, /usr/local/apollove /optyeni bir OS sürümü kurulum hayatta kalır.


1
$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/binBen /usr/local/binzaten gerçeği hatırlamak için daha az bir şey olduğunu seviyorum . /opt/program/versionÇekirdek yöntemlerinde, çekirdek sürümleri arasında bir şeyleri değiştirdikleri EnhanceIO gibi derleyip kullanabileceğim yönteminizi beğendim. Mı /apollobir aya inişi favori kişisel veya Ubuntu anlamı var?
WinEunuuchs2Unix

Yükseltme sırasında ikincisi nuked olacak /usr/local/binve arasındaki fark nedir usr/local/sbin?
WinEunuuchs2Unix

Yükleyici kullandığı dizinleri çeker. Uygun şekilde /usr/localdizinler oluşturur , ancak hiçbirine herhangi bir şey koymaz. Bu dizinler kullanıcı tarafından doldurulur. Depoların dışındaki birçok kaynak programı, kullanıcıya yüklemenin nereye gitmesini istediklerini seçme seçeneği sunar. Yapılandırma dosyalarındaki varsayılan değer /usr/local/bin. Bu nedenle, bu dizinleri kullanmanın ne kadar yaygın olduğu nedeniyle, varsayılan olarak kullanıcının yoluna dahil edilirler. Varsayılan olarak, sistem denetler ~/bin ve varsa yolu ekler.
LD James

Yani ~/binyükleme veya her önyükleme sırasında sistem kontrol ediyor mu? Arasındaki fark nedir sbinve bin? Program türüne bağlı olarak seçtiğiniz yarı kurallar olmalı, var mı?
WinEunuuchs2Unix

1
@ WinEunuuchs2Unix Yolda ~/bin... kurulum sırasında eklenmez. Sistem her oturum açmada bunu denetler ve oturum açma sırasında varsa $ PATH'a ekler. ~/.profileAyarlarınızın son iki satırına bakın .
LD James
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.