Séquence de scripts provenant de la connexion

33

Je voudrais concentrer toute ma configuration de connexion dans mon ~/.bash_profile . Il y avait un ~/.bashrc par défaut mais je l'ai remplacé par un ~/.bash_profile .

Cependant, lorsque je me connecte, quelque chose avant mon ~/.bash_profile est généré et affiche ce qui suit:

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

Je voudrais supprimer cela pour que seul mon propre message d'accueil défini dans mon ~/.bash_profile obtienne des affichages mais je ne suis pas sûr de la logique / séquence des scripts provenant / exécutés lorsqu'un utilisateur se connecte. Pouvez-vous m'éclairer?

En bonus, je voudrais aussi connaître la séquence des sources automatisées / exécutables au démarrage du système, et pas seulement lorsqu'un utilisateur démarre une session en se connectant, même si cela est moins important pour moi à l’heure actuelle.

    
posée amphibient 09.05.2014 - 18:23
la source

2 réponses

47

C'est un peu complexe. Tout d'abord, les détails dépendent du type de shell que vous utilisez. Pour me me plagier :

  • Lorsque vous ouvrez un émulateur de terminal ( gnome-terminal par exemple), vous exécutez ce qu’on appelle un shell interactif, non connecté .

  • Lorsque vous vous connectez à votre ordinateur à partir de la ligne de commande ou exécutez une commande telle que su - username , vous exécutez un shell login interactif .

  • Lorsque vous vous connectez graphiquement, vous utilisez quelque chose de complètement différent, les détails dépendent de votre système et de votre environnement graphique, mais en général, c'est le shell graphique qui gère votre connexion. Bien que de nombreux shells graphiques (y compris le défaut Ubuntu) lisent /etc/profile et ~/.profile , ils ne le sont pas tous.

  • Enfin, lorsque vous exécutez un script shell, il est exécuté dans un shell non interactif, non connecté .

Les fichiers lus par bash au lancement dépendent du type de shell sous lequel ils sont exécutés. Ce qui suit est un extrait de la section INVOCATION de man bash (emphase):

  

Lorsque bash est appelé en tant que shell de connexion interactif ou en tant que shell non interactif avec l'option --login, il lit et exécute d'abord les commandes à partir du fichier / etc / profile , si ce fichier existe Après avoir lu ce fichier, il recherche ~ / .bash_profile, ~ / .bash_login et ~ / .profile,    dans cet ordre , et lit et exécute les commandes du premier   existe et est lisible. L’option --noprofile peut être utilisée lorsque le    shell est démarré pour inhiber ce comportement.

     

Lorsqu'un shell interactif n'est pas un shell de connexion , il démarre, bash   lit et exécute les commandes de /etc/bash.bashrc et ~ / .bashrc , si   ces fichiers existent. Cela peut être inhibé en utilisant l'option --norc.   L'option --rcfile file forcera bash à lire et à exécuter les commandes   à partir de fichier au lieu de /etc/bash.bashrc et ~ / .bashrc.

Ce sont les fichiers d’initialisation. Vous avez également /etc/environment où vous pouvez définir des variables d'environnement globales mais qui sont lues plutôt que source (les commandes qu'il contient ne sont pas exécutées, mais les définitions de variables sont définies).

Maintenant, le message d'accueil que vous voyez est quelque chose d'autre. Cela est défini dans /etc/motd et est affiché via pam_motd . Comme expliqué dans man motd :

  

Le contenu de / etc / motd est affiché par pam_motd (8) après un   connexion réussie, mais juste avant d'exécuter le shell de connexion.

     

L'abréviation "motd" signifie "message du jour", et ceci   fichier a été traditionnellement utilisé pour exactement cela (il faut   beaucoup moins d'espace disque que le courrier pour tous les utilisateurs).

     

Sur Debian GNU / Linux, le contenu de /run/motd.dynamic est également   affiché Ce fichier est généré par /etc/init.d/motd au démarrage.

Pour supprimer le message, videz simplement le fichier /etc/motd et assurez-vous que rien n'est généré par /etc/init.d/motd si présent.

Quoi qu’il en soit, en fonction de la sortie que vous affichez, vous semblez vous connecter via ssh , ce qui signifie que vous utilisez un shell de connexion interactif , voir ci-dessus. Donc, en résumé, les choses qui vous tiennent à cœur lorsque vous vous connectez sont (et dans cet ordre):

  1. Le démon SSH, via le module pam_motd de la bibliothèque PAM, affiche le contenu de /etc/motd . Via le module pam_env , il définit les variables d'environnement de /etc/environment et ~/.pam_environment .
  2. Un shell de connexion est démarré et les fichiers suivants sont lus dans l’ordre:
    1. /etc/profile
    2. /etc/bash.bashrc (Ubuntu par défaut /etc/profile sources /etc/bash.bashrc ).
    3. ~/.bash_profile . Les autres fichiers qui auraient pu être lus ici ( ~/.profile et ~/.bash_login ) sont ignorés car ~/.bash_profile existe.
réponse donnée terdon 09.05.2014 - 18:54
la source
1

L'information que vous voyez lorsque vous vous connectez via ssh est créée avant même que / etc / profile ne soit regardé. Regardez la séquence de fichiers dans /etc/update-motd.d. Cela vous montrera où les messages que vous voyez sont générés par différents scripts.

    
réponse donnée Reese 23.02.2018 - 23:13
la source

Lire d'autres questions sur les étiquettes