Linux:login shell和non-login shell以及其设置文件

打印 上一主题 下一主题

主题 854|帖子 854|积分 2562

干系阅读
Linux
https://blog.csdn.net/weixin_45791458/category_12234591.html?spm=1001.2014.3001.5482
 

        shell是Linux与外界交互的程序,登录shell有两种方式,login shell与non-login shell,它们的区别是读取的设置文件差异,本文将以Bash shell为例就此举行阐述,但这个概念实用于其他shell,如ch、csh、tcsh、zsh等。
login shell

        下面的这些环境下,登录的是login shell。
        1、通过GNOME等GUI界面输入用户名、暗码后登录时(它不是下令行shell,但仍可看做是login shell)。
        2、通过GNOME等GUI界面,设置了Run command as login shell选项,右击选择Open Terminal登录bash shell时。
        3、使用Ctrl+Alt+F*快捷键或chvt下令启动的终端详见Linux:终端,输入用户名、暗码登录bash shell时(包罗ssh远程连接)。
        4、在shell中使用su下令,且使用-、-l、或--login选项时,详见Linux:用户切换指令su。
        5、在shell中使用bash下令,且使用-、-l、或--login选项时(无论是以交互式还黑白交互式)。
        一个误区是输入了暗码登录的就是login shell,否则是non-login shell,这是错误的。
non-login shell

        下面的这些环境下,登录的是non-login shell。
        1、通过GNOME等GUI界面,没有设置Run command as login shell选项,右击选择Open Terminal登录bash shell时。
        2、在shell中使用su下令,且不使用-、-l、或--login选项时,详见Linux:用户切换指令su。
        3、在shell中使用bash下令,且不使用-、-l、或--login选项时(无论是以交互式还黑白交互式)。 

检验方法

        检验一个shell是否为login shell的方法有很多:
        1、有些login shell在登录时会提示前次登录状态和时间。
        2、可以查抄$0特殊变量的值,如果其有前缀-,如-bash之类则代表其为login shell,如果其没有前缀-,如bash、/bin/bash之类则代表其为non-login shell,但这对于“通过GNOME等GUI界面输入用户名、暗码后登录”和“在shell中使用bash下令”两种环境是失效的。
        3、使用下面的下令查抄,如选项开启则表示为login shell,但这对于第1种环境是失效的。
  1. shopt -q login_shell && echo "This is a login shell" || echo "This is a non-login shell"
复制代码
        4、测试shell是否读取了设置文件/etc/profile(后面具体说明)。
       

设置文件

        首先说明,下面这些设置文件的读取和执行,是通过类似点下令source的效果主动完成的(但没有显式执行),关于该下令,见Linux:点下令source。
/etc/profile



  • 用途:/etc/profile是一个体系范围的login shell设置文件,即它会影响所有效户的shell环境设置。它用于定义体系范围的环境变量、启动程序和其他全局设置。
  • 执行时机/etc/profile会在login shell登录时执行,因此可以将一些测试语句参加其中/etc/profile用于检验一个shell是否为login shell(需要root权限),如下所示。
  1. echo "This is from /etc/profile" >> /tmp/profile_test.log
复制代码


  • 位置/etc/profile存在于体系的/etc目次中,这是一个全局文件,管理员可以在这里做一些对所有效户都有影响的设置。
  • 内容/etc/profile通常会包含对用户$PATH环境变量、历史记录设置、默认权限掩码(umask)等的定义。它还会执行/etc/profile.d目次下的其他脚本。


~/.bash_profile



  • 用途:~/.bash_profile是一个用户级别的login shell设置文件,它答应用户设置自己专属的环境变量、别名等。通常用于定义环境变量和其他只在登录时需要设置的内容。
  • 执行时机:~/.bash_profile会在Bash login shell登录时执行。
  • 内容:~/.bash_profile中常常包罗对~/.bashrc的调用(通过source下令),这样Bash login shell不仅会执行login shell干系的设置,还可以执行non-login shell的设置。

~/.bash_login



  • 用途:~/.bash_login是另一个用户级别的login shell设置文件,与~/.bash_profile类似。Bash 在启动login shell时会先查找并执行~/.bash_profile,如果这个文件不存在,才会尝试执行 ~/.bash_login。
  • 执行时机:与~/.bash_profile类似,只在Bash login shell登录时执行。
  • 优先级:~/.bash_login通常较少使用,由于大多数用户更常用~/.bash_profile。只有当 ~/.bash_profile不存在时,Bash 才会尝试执行~/.bash_login。
  • 内容:内容上可以与~/.bash_profile类似,不过由于其优先级较低,它很少使用。

~/.profile



  • 用途:~/.profile是一个通用的用户级别的login shell设置文件,它不只限于Bash shell,也会被其他shell(如sh)执行。这个文件用于设置用户的环境变量、启动应用等,并可以实用于任何Bourne shell派生的shell。
  • 执行时机:如果~/.bash_profile和~/.bash_login都不存在,Bash shell会执行~/.profile。因此,虽然它不是特定于Bash shell的设置文件,但仍然会在login shell中执行。
  • 内容:通常在~/.profile中设置用户环境变量和启动脚本。

~/.bashrc



  • 用途:~/.bashrc是一个用户级别的non-login shell设置文件。这个文件通常用于设置用户的别名、函数、下令提示符(PS1)和其他下令行的设置。
  • 执行时机:当Bash以交互式non-login shell启动时,会执行~/.bashrc。如果你盼望login shell也执行其中的内容,如果在(通常如此) ~/.bash_profile或~/.profile中显式调用它(通过source下令,这会导致启动login shell时也执行~/.bashrc)。
  • 内容:~/.bashrc包含用户的别名、自定义函数、历史记录设置、下令提示符格式(PS1)等。它是交互式shell的主要设置文件。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

尚未崩坏

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表