CentOS'ta $ PATH dizin eklemek mi istiyorsunuz?


84

Yeni sunucularımızı yeni kurduk ve hepsinde CentOS kullanıyoruz. Ruby Enterprise Edition'ı başarıyla yükledikten sonra /usr/lib/ruby-enterprise/bin, sunucudaki varsayılan Ruby tercümanı yapmak için REE / bin (bulunan ) dizinini eklemek istiyorum.

Aşağıdakileri denedim, bu yalnızca geçerli kabuk oturumuna ekler:

export PATH=/usr/lib/ruby-enterprise/bin:$PATH

Tüm kullanıcılar için bu dizini $ PATH'e kalıcı olarak eklemek için doğru yaklaşım ne olacaktır . Şu anda root olarak giriş yaptım.

Şimdiden teşekkürler!

Yanıtlar:


116

Böyle /etc/profileşeyler için düzenleme yapmak iyi bir fikir değildir , çünkü CentOS bu dosya için bir güncelleme yayınladığında tüm değişikliklerinizi kaybedersiniz. Bu tam olarak ne /etc/profile.diçin:

# echo 'pathmunge /usr/lib/ruby-enterprise/bin' > /etc/profile.d/ree.sh
# chmod +x /etc/profile.d/ree.sh

Tekrar giriş yapın ve (güvenle) güncellenmiş PATH'inizin tadını çıkarın:

# echo $PATH
/usr/lib/ruby-enterprise/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
# which ruby
/usr/lib/ruby-enterprise/bin/ruby

Tekrar giriş yapmak yerine, profili yeniden yükleyebilirsiniz:

# . /etc/profile

Bu $PATHdeğişkeni güncelleyecektir .


1
~/.profilebaşka bir geçerli seçenek de
Zypher

4
Evet, tek bir kullanıcı için. Ancak soru PATH’i tüm kullanıcılar için değiştirmekle ilgiliydi .
Mike,

2
@Mike Bu pathmunge komutu nedir?
Nickolai Leschov

@NickolaiLeschov Ben sadece $ PATH için bir yol ekler eminim.
Mike,

@NickolaiLeschov / etc / profile içinde tanımlanmış bir fonksiyondur
CrazyPheel 16:15

11

Fmonk'un tavsiyesini takip ettikten sonra /etc/bashrc, "Çevre işleri / etc / profile giriyor" yazdığını fark ettim. Bakmaya devam ettim /etc/profile, şunu gördüm:

pathmunge () {
    if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
       if [ "$2" = "after" ] ; then
          PATH=$PATH:$1
       else
          PATH=$1:$PATH
       fi
    fi
}

[...]

# Path manipulation
if [ "$EUID" = "0" ]; then
    pathmunge /sbin
    pathmunge /usr/sbin
    pathmunge /usr/local/sbin
fi

Sorunumu çözmek için pathmunge /usr/lib/ruby-enterprise/bin, if ifadesinin altına ekledim . Bu benim sorunumu çözdü.


Birisi "$EUID" = "0"bu bağlamda ne anlama geldiğini açıklayabilir mi?
Eli

EUID 0, kullanıcının kök olduğu anlamına gelir.
bbaja42

6
/Etc/profile.d dosyasını kullanmalıydınız. Aşağıdaki cevaba bakınız.
Mike,

Lütfen @MikeConigliaro yanıtını doğru olarak kabul edin. Onun yolu doğru olanı. Bu şekilde çalışmak için geliştirilmiştir. /etc/profile.d/Klasördeki dosyalara bir göz atın, fark edeceksiniz. Ayrıca, söylediği gibi, bir sistem güncellemesi çözümünüzü geri alabilir.
Caio Cunha

4

"Başarılı bir oturum açma işleminden sonra / bin / login kullanarak / etc / passwd dosyasını okuyarak etkileşimli bir giriş kabuğu başlatıldı. Bu kabuk çağırma normalde / etc / profile ve açılışta özel eşdeğer ~ / .bash_profile dosyasını okur.

Bir oturum açmayan etkileşimli olmayan kabuk normalde bir kabuk programı (örneğin, [prompt] $ / bin / bash) kullanarak veya komut satırında / bin / su komutuyla komut satırında başlatılır. Etkileşimli bir oturum açmayan kabuk, grafiksel bir ortamdan xterm veya konsole gibi bir terminal programı ile de başlatılır. Bu tür kabuk çağırma normal olarak ana ortamı kopyalar ve daha sonra ek başlatma yapılandırma talimatları için kullanıcının ~ / .bashrc dosyasını okur. " Http://www.linuxfromscratch.org/blfs/view/6.3/postlfs/profile.html

Bu nedenle çevre değişkenlerini bashrc'ye koymuyorum, çünkü sadece genel kurallara aykırı değil, aynı zamanda grafiksel bir Masaüstü ortamından bir terminali çağırırken bashrc değişkenlerinizi de özleyeceksiniz.

Redhat hakkında /etc/profilebu yorumu buldum:

"Sistem çapında takma adlar ve işlevler / etc / bashrc içine girmelidir. Kişisel ortam değişkenleri ve başlangıç ​​programları ~ / .bash_profile dosyasına girmelidir. Kişisel takma adlar ve işlevler ~ / .bashrc biçimine girmelidir."

Dolayısıyla, ortam değişkenlerini kullanıcı bazında ayarlamak istiyorsanız, kullanıcının .bash_profile dosyasında yapın.

.bash_profileOkuduğum yere gidiyorum:

"Kişisel ortam değişkenleri ve başlangıç ​​programları.

Kişisel takma adlar ve işlevler ~ / .bashrc konumunda olmalıdır. Sistem çapında çevre değişkenleri ve başlangıç ​​programları / etc / profile içindedir. Sistem geneli takma adları ve işlevleri / etc / bashrc dizinindedir. "

Sonuç
Eğer sadece root'un mevcut programları görmesini istiyorsanız, mesela / sbinı bu yolu root'un .bash_profiledosyasına ekleyecektim . İzlemek her kullanıcı isterseniz Ama koyardı kutunuza hangi belirli kök programları yüklü /sbiniçine /etc/.profile. Artık her kullanıcı köke özel programları aramak ve gerekirse hakları yükseltmek için sekme tamamlamayı kullanabilir.

Özel Durum: SSH
ssh komut satırı ile başlatıldığında, etkileşimli bir giriş kabuğu başlatılır. Ancak bu durumda /etc/profileokunmuyor. .bash_profileHer kullanıcının dosyasındaki ortam değişkenlerini tanımladığımda ssh ile çalıştı.


2

SORRY, birisinin yardımcı olması durumunda bırakarak bir KULLANICI profili için şu cevabın yanlış olduğu sorusunu yanlış yorumladı

değiştir .bash_profile

nano ~/.bash_profile

daha sonra dosyada bir yerde, yollarınızı ekleyin / değiştirin:

 PATH=$PATH:$HOME/bin:/your/path
 export PATH

sonra profilinizi yeniden yükleyin

source ~/.bash_profile

veya oturumu kapatıp tekrar giriş yapın

PATH seçeneğini işaretlerseniz, yeni eklediğiniz yolları içermelidir

echo $PATH

1

Ortam değişkenlerini bir .rc dosyasında ayarlayabilirsiniz; bash kabukları için (CentOS'ta en yaygın ve varsayılanın olduğuna inanıyorum) her kullanıcının kendi dizininde .bashrc adlı bir dosyası vardır.

Herhangi bir kullanıcı için ayarlamak üzere PATH = / usr / lib / ruby-enterprise / bin: $ PATH komutunu bu dosyaya ekleyin.

Tüm kullanıcılar için (bahsettiğiniz gibi) ayarlamak için, / etc / bashrc dizininde değiştirin (her kullanıcının giriş dizinindeki varsayılan .bashrc bu dosyayı kaynaklamalıdır, ancak bunu iki kez kontrol etmelisiniz).

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.