登录时获取的脚本序列
我想将所有登录配置集中在~/.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 ,请参阅上面的含义。 因此,总而言之,您登录时所关注的事项(并按此顺序):
- SSH守护程序通过PAM库的
pam_motd
模块显示/etc/motd
的内容。 通过pam_env
模块,它从/etc/environment
和~/.pam_environment
设置环境变量。 - 启动登录shell,并按顺序读取以下文件:
-
/etc/profile
-
/etc/bash.bashrc
(默认的Ubuntu/etc/profile
来源/etc/bash.bashrc
)。 -
~/.bash_profile
。 这里可以读取的其他文件(~/.profile
和~/.bash_login
)将被忽略,因为存在~/.bash_profile
。
-
在通过ssh登录时看到的信息是在/ etc / profile被查看之前创建的。 看一下/etc/update-motd.d中的文件序列。 这将显示您所看到的消息由各种脚本生成的位置。