Giriş yaptıktan sonra komut dizilerinin sıralanması


41

Tüm login yapılandırmalarımı benim içinde yoğunlaştırmak istiyorum ~/.bash_profile. ~/.bashrcVarsayılan olarak bir orada vardı ama ben a ile değiştirdim ~/.bash_profile.

Ancak, oturum açtığımda, benim ~/.bash_profilekaynaklardan önce bir şey kaynaklanıyor ve aşağıdakileri görüntülüyor:

Linux ubnt10-dev1 2.6.32-38-server #83-Ubuntu SMP Wed Jan 4 11:26:59 UTC 2012 x86_64 GNU/Linux
Ubuntu 10.04.4 LTS

Welcome to the Ubuntu Server!
 * Documentation:  http://www.ubuntu.com/server/doc

  System information as of Fri May  9 12:17:39 EDT 2014

  System load:  0.01              Processes:           74
  Usage of /:   5.5% of 18.58GB   Users logged in:     0
  Memory usage: 4%                IP address for eth0: 123.x.x.x
  Swap usage:   0%

  Graph this data and manage this system at https://landscape.canonical.com/

New release 'precise' available.
Run 'do-release-upgrade' to upgrade to it.

Last login: Fri May  9 12:11:52 2014 from 123.x.x.x

Bunu kaldırmak istiyorum, böylece yalnızca benim girişimde tanımlanan kendi karşılama selamlaması ~/.bash_profileekrana gelir, ancak bir kullanıcı oturum açtığında / yürütülen komut dizilerinin mantık / diziliminden emin değilim. Beni aydınlatabilir misiniz?

Bir bonus olarak, sistem başladığında otomatik giriş / çalıştırma işlemlerinin sırasını da bilmek istiyorum, sadece bir kullanıcı oturum açarak bir oturuma başladığında değil, bu şu anda benim için daha az önemli olan bir mesele olsa da.

Yanıtlar:


53

Bu biraz karmaşık. Her şeyden önce, ayrıntılar ne tür bir kabuk çalıştırdığınıza bağlıdır. Kendimi intihal etmek için :

  • Bir terminal emülatörü açtığınızda ( gnome-terminalörneğin), etkileşimli, giriş yapmayan bir kabuk olarak bilinen şeyi yürütüyorsunuz .

  • Makinenize komut satırından giriş yaptığınızda veya böyle bir komut su - usernameçalıştırdığınızda, etkileşimli bir giriş kabuğu çalıştırıyorsunuzdur .

  • Grafiksel olarak giriş yaptığınızda, tamamen farklı bir şey çalıştırıyorsunuzdur. Detaylar sisteminize ve grafik ortamınıza bağlı olacaktır, ancak genel olarak, giriş bilgilerinizle ilgilenen grafik kabuğudur . Çok sayıda grafik kabukları (varsayılan Ubuntu dahil) okuyacak /etc/profileve ~/.profilehepsi değil.

  • Son olarak, bir kabuk betiğini çalıştırdığınızda, etkileşimli olmayan, giriş yapmayan bir kabukta çalıştırılır .

Başlatıldığında bash'ın okuyacağı dosyalar, çalıştığı kabuğun türüne bağlıdır. Aşağıdaki man bash( VAYIR madeninin) İNCELEME bölümünün bir kısmıdır :

Bash etkileşimli bir giriş kabuğu olarak veya --login seçeneğiyle etkileşimli olmayan bir kabuk olarak çağrıldığında , önce bu dosya varsa / etc / profile dosyasındaki komutları okur ve yürütür . Bu dosyayı okuduktan sonra , bu sırayla ~ / .bash_profile, ~ / .bash_login ve ~ / .profile ifadelerini arar ve var olan ve okunabilen ilk komuttan komutları okur ve yürütür. --Noprofile seçeneği, kabuk bu davranışı engellemeye başladığında kullanılabilir.

Bir zaman interaktif kabuk olan bir giriş kabuğu değil başlatıldığında, bash okur ve gelen yürütür komutları /etc/bash.bashrc ve ~ / .bashrc , bu dosyalar varsa. Bu --norc seçeneği kullanılarak engellenebilir. --Rcfile dosya seçeneği bash'yi /etc/bash.bashrc ve ~ / .bashrc yerine dosyadan komutları okumaya ve yürütmeye zorlar.

Bunlar başlatma dosyaları. Ayrıca, /etc/environmentküresel çevresel değişkenleri ayarlayabileceğiniz bir yere de sahipsiniz, ancak kaynaktan ziyade okunuyor (içindeki komutlar yerine getirilmiyor ancak değişken tanımları ayarlanmış).

Şimdi, gördüğünüz tebrik yine başka bir şey. Bu ayarlanmış /etc/motdve üzerinden görüntülenir pam_motd. Açıklandığı gibi man motd:

/ Etc / motd içeriği, başarılı bir oturum açmadan sonra pam_motd (8) ile gösterilir, ancak oturum açma kabuğunu çalıştırmadan hemen önce görüntülenir.

"Motd" kısaltması "günün mesajı" anlamına gelir ve bu dosya tam olarak bunun için kullanılmıştır (tüm kullanıcılara postadan çok daha az disk alanı gerektirir).

Debian GNU / Linux'ta /run/motd.dynamic içeriği de görüntülenir. Bu dosya, önyüklemede /etc/init.d/motd tarafından üretilir.

Mesajı silmek için /etc/motddosyayı boşaltın ve /etc/init.d/motdvarsa hiçbir şey tarafından oluşturulmadığından emin olun .


Her neyse, gösterdiğiniz çıktıya dayanarak, oturum açıyor gibi görünüyorsunuz, sshbunun anlamı etkileşimli bir giriş kabuğu kullanıyorsunuz , bunun ne anlama geldiğine bakın. Yani, özet olarak, önemsediğiniz şeyler, giriş yaparken kaynaklanır (ve bu sırayla):

  1. SSH arka plan programı, pam_motdPAM kütüphanesinin modülü aracılığıyla içeriğini gösterir /etc/motd. Via pam_envmodül, bu ortam değişkenleri ayarlar /etc/environmentve ~/.pam_environment.
  2. Bir giriş kabuğu başlatılır ve aşağıdaki dosyalar sırayla okunur:
    1. /etc/profile
    2. /etc/bash.bashrc(varsayılan Ubuntu /etc/profilekaynakları /etc/bash.bashrc).
    3. ~/.bash_profile. Burada okunabilecek diğer dosyalar ( ~/.profileve ~/.bash_login) yok sayılır, çünkü ~/.bash_profilevarlar.

5
Bu şeyleri keşfetmenin iyi bir numarası, nöbetçi değişkenleri etrafa koymak. Ben koymak demek export SET_IN_ETC_PROFILE=yesde /etc/profile, export SET_IN_HOME_ZSHRC=yesiçinde ~/.zhshrc(Ben zsh kullanıcısıyım) yeniden başlatma Sonra ... vb, ve güzel env|grep SET_INsize tüm hikayeyi anlatacağım. Hangi değişkenlerin masaüstü uygulamaları tarafından görüldüğünü görmek için (çizgi veya WM'den
Rmano

1
Yani ssh, bu etkileşimli bir kabuk olurdu, doğru mu?
amfi

@amphibient etkileşimli bir giriş kabuğu, evet. Tur yerel makinede bir terminal açtığınızda, etkileşimli, giriş yapmayan bir kabuktur.
terdon

@Rmano Yorumlarınızı beğendim. Ancak birkaç dakika sonra, emrin, emir emriyle envhiçbir ilişkisi olmadığını tespit etti .
Penghe Geng

2
Tabii ki @ xiaobai, asıl mesele, SET_INhangi dosyaların okunduğunu değil, hangi sırada okunduğunu göstermesidir. Sipariş standarttır, cevabımda bulunan man sayfa alıntılarında gösterilmektedir.
terdon

1

Ssh ile giriş yaptığınızda gördüğünüz bilgiler / etc / profile bile bakılmadan önce oluşturulur. /Etc/update-motd.d içindeki dosya dizisine bakın. Bu, gördüğünüz mesajların çeşitli scriptler tarafından nerede üretildiğini size gösterecektir.


1
Bu zaten en iyi cevapta ele alındı, ancak kısalıklarınız için teşekkür ederim. +1 :)
wjandrea
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.