49 votes

Séquence de scripts générés lors de la connexion

J'aimerais 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 se trouve avant mon message d'accueil. ~/.bash_profile obtient une source 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

J'aimerais supprimer cela afin que seul mon propre message d'accueil soit défini dans mon ~/.bash_profile s'affiche, mais je ne suis pas sûr de la logique/séquence des scripts générés/exécutés lorsqu'un utilisateur se connecte. Pouvez-vous m'éclairer ?

En prime, j'aimerais également connaître la séquence des sources/exécutions automatisées au démarrage du système, et pas seulement lorsqu'un utilisateur démarre une session en se connectant, bien qu'il s'agisse d'une préoccupation de moindre importance pour moi à l'heure actuelle.

62voto

Stewart Points 1385

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

  • Lorsque vous ouvrez un émulateur de terminal ( gnome-terminal par exemple), vous exécutez ce que l'on appelle un interactif, sans login Shell.

  • Lorsque vous vous connectez à votre machine à partir de la ligne de commande, ou que vous exécutez une commande telle que su - username , vous exécutez un connexion interactive Shell.

  • 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, il s'agit de la même chose que pour la connexion graphique. graphique Shell qui traite de votre connexion. Alors que de nombreux shells graphiques (y compris le shell par défaut d'Ubuntu) lisent /etc/profile y ~/.profile Ce n'est pas le cas de tous.

  • Enfin, lorsque vous exécutez un Shell Shell, il est exécuté dans un fichier non-interactif, non-login Shell .

Les fichiers que bash lira lorsqu'il sera lancé dépendent du type de Shell qu'il utilise. Voici un extrait de la section INVOCATION du fichier man bash (souligné par moi) :

Lorsque bash est invoqué en tant que login interactif Shell ou en tant que Shell non interactif avec l'option --login, il lit et exécute d'abord les commandes du fichier /etc/profil 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 o qui existe et qui est lisible. L'option --nopro Shell pour inhiber ce comportement.

Lorsqu'un interactif Shell c'est-à-dire pas une connexion Shell i lit et exécute les commandes de /etc/bash.bashrc y ~/.bashrc , si ces fichiers existent. Il peut s'agir d'une inhibi L'option --rcfile fichier forcera bash à lire et à exécuter les commandes à partir d'un fichier au lieu de /etc/bash.bashrc et ~/.bashrc.

Il s'agit des fichiers d'initialisation. Vous avez également /etc/environment où vous pouvez définir des variables environnementales globales, mais qui sont lues plutôt que sourcées (les commandes qu'elles contiennent ne sont pas exécutées, mais les définitions de variables sont définies).

Aujourd'hui, le message d'accueil que vous voyez est tout autre. Il s'agit d'un /etc/motd et s'affiche par le biais de pam_motd . Comme expliqué dans man motd :

Le contenu de /etc/motd est affiché par pam_motd(8) après une commande mais juste avant qu'il n'exécute le login Shell.

L'abréviation "motd" signifie "message du jour". ce fichier est traditionnellement utilisé pour cela (il nécessite beaucoup moins d'espace beaucoup moins d'espace disque que le courrier destiné à tous les utilisateurs).

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

Pour supprimer le message, il suffit de vider le champ /etc/motd et s'assurer que rien n'est généré par le fichier /etc/init.d/motd s'il est présent.


Quoi qu'il en soit, d'après les résultats que vous montrez, vous semblez vous connecter via ssh ce qui signifie que vous exécutez un login interactif Shell Voir ci-dessus ce que cela signifie. Ainsi, en résumé, les éléments qui vous intéressent et qui sont présents lorsque vous vous connectez sont les suivants (dans cet ordre) :

  1. Le démon SSH, via l'option pam_motd de la bibliothèque PAM, affiche le contenu du fichier /etc/motd . Par l'intermédiaire du pam_env il définit les variables d'environnement de /etc/environment y ~/.pam_environment .
  2. Un login Shell est lancé et les fichiers suivants sont lus dans l'ordre :
    1. /etc/profile
    2. /etc/bash.bashrc (la version par défaut d'Ubuntu /etc/profile sources /etc/bash.bashrc ).
    3. ~/.bash_profile . Les autres fichiers qui auraient pu être lus ici ( ~/.profile y ~/.bash_login ) sont ignorés car ~/.bash_profile existent.

2voto

Reese Points 21

Les informations que vous voyez lorsque vous vous connectez via ssh sont créées avant même que le fichier /etc/profile ne soit consulté. Regardez la séquence des fichiers dans /etc/update-motd.d. Cela vous montrera où les messages que vous voyez sont générés par divers scripts.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X