登录时获取的脚本序列

我想将所有登录配置集中在~/.bash_profile 。 默认情况下有一个~/.bashrc ,但我用~/.bash_profile替换它。

但是,当我登录时,我的~/.bash_profile之前的内容会被获取并显示以下内容:

 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.xxx 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.xxx 

我想删除它,以便只显示我的~/.bash_profile定义的我自己的泼水问候,但我不确定用户登录时源/执行的脚本的逻辑/顺序。你能开导我吗?

作为奖励,我还想知道系统启动时自动化源/执行的顺序,而不仅仅是当用户通过登录启动会话时,尽管这对我来说是一个不太重要的问题。

这有点复杂。 首先,细节取决于您运行的shell类型。 抄袭自己 :

  • 当您打开终端仿真器(例如gnome-terminal )时,您正在执行所谓的交互式非登录 shell。

  • 当您从命令行登录计算机或运行su - username等命令时,您正在运行交互式登录 shell。

  • 当您以图形方式登录时,您运行的是完全不同的东西,详细信息将取决于您的系统和图形环境,但通常它是处理您的登录的图形shell 。 虽然许多图形shell(包括Ubuntu默认)将读取/etc/profile~/.profile并非所有图形shell都可以。

  • 最后,当您运行shell脚本时,它将在非交互式非登录shell中运行

bash在启动时将读取的文件取决于它运行的shell的类型。 以下是man bash (强调我的)的INVOCATION部分的摘录:

当bash作为交互式登录shell或作为具有–login选项的非交互式shell调用时,它首先从文件/ etc / profile中读取并执行命令(如果该文件存在)。 在读取该文件之后,它按顺序查找〜/ .bash_profile,〜/ .bash_login和〜/ .profile,并从存在且可读的第一个读取和执行命令。 启动shell以禁止此行为时,可以使用–noprofile选项。

当启动不是登录shell交互式shell时 ,如果存在这些文件,bash将从/etc/bash.bashrc〜/ .bashrc读取并执行命令。 使用–norc选项可以禁止这一点。 –rcfile文件选项将强制bash从文件中读取和执行命令,而不是/etc/bash.bashrc和〜/ .bashrc。

那些是初始化文件。 您还可以在/etc/environment中设置全局环境变量,但这些变量是读取的而不是源的(其中的命令不会被执行,但会设置变量定义)。

现在,你看到的问候又是另一回事。 这是在/etc/motd设置的,并通过pam_motd显示。 如man motd

成功登录后,pam_motd(8)会显示/ etc / motd的内容,但在执行登录shell之前。

缩写“motd”代表“当天的消息”,这个文件传统上一直用于它(它比所有用户的邮件所需的磁盘空间要少得多)。

在Debian GNU / Linux上,还会显示/run/motd.dynamic的内容。 此文件由/etc/init.d/motd在引导时生成。

要删除消息,只需清空/etc/motd文件,并确保/etc/init.d/motd如果存在)没有生成任何内容。


无论如何,根据你显示的输出,你似乎是通过ssh ,这意味着你正在运行一个交互式登录shell ,请参阅上面的含义。 因此,总而言之,您登录时所关注的事项(并按此顺序):

  1. SSH守护程序通过PAM库的pam_motd模块显示/etc/motd的内容。 通过pam_env模块,它从/etc/environment~/.pam_environment设置环境变量。
  2. 启动登录shell,并按顺序读取以下文件:
    1. /etc/profile
    2. /etc/bash.bashrc (默认的Ubuntu /etc/profile来源/etc/bash.bashrc )。
    3. ~/.bash_profile 。 这里可以读取的其他文件( ~/.profile~/.bash_login )将被忽略,因为存在~/.bash_profile

在通过ssh登录时看到的信息是在/ etc / profile被查看之前创建的。 看一下/etc/update-motd.d中的文件序列。 这将显示您所看到的消息由各种脚本生成的位置。