![RHEL8系统管理与性能优化](https://wfqqreader-1252317822.image.myqcloud.com/cover/653/39479653/b_39479653.jpg)
3.6 登录Shell与非登录Shell
某用户登录系统时,根据登录方式的不同,会取得登录Shell或非登录Shell。所谓登录Shell,就是当用户登录系统后,系统会分配给这个用户一个Shell环境,此用户可以在这个Shell环境中运行自己的命令和脚本,完成设置变量等操作;非登录Shell就是当用户再次开启一个其他Shell时(如子Shell),这个Shell会继承父Shell的一些变量或环境。
登录Shell与非登录Shell在读取文件时不同。一般个人环境的配置文件有两类:一类是profile文件;另一类是bashrc文件。前者主要设置环境变量或仅在登录时运行的命令;后者一般用于设置函数、别名等。根据作用范围不同,这两类文件又分为全局级和用户级,见表3-3。
表3-3 profile与bashrc文件
![](https://epubservercos.yuewen.com/EA3E16/20637464601307906/epubprivate/OEBPS/Images/41294_44_3.jpg?sign=1738897909-2FrReHX8uZTboGMgq6K30TLIedkqDKUD-0-d20b8d1ac097ae4ef1128774fa1562a6)
续表
![](https://epubservercos.yuewen.com/EA3E16/20637464601307906/epubprivate/OEBPS/Images/41294_45_1.jpg?sign=1738897909-sInSNMtnBNJltNW85pEgIn6NB4NwwYj3-0-753ed0b2609ce981ae7b586388d55ee3)
/etc/profile是所有用户登录系统时默认都会读取的文件,在这个文件中定义了一些常见的环境变量,如$PATH、$USR、$HOSTNAME、$HISTSIZE 等。其中有一个功能是使用for循环来迭代运行/etc/profile.d/*.sh文件。
![](https://epubservercos.yuewen.com/EA3E16/20637464601307906/epubprivate/OEBPS/Images/41294_45_2.jpg?sign=1738897909-XiDpwsjdDp5PXmWjjXvlLQCHoKnzaAAd-0-d7b6b0cb92debd4eeb86a9d23d4d59f1)
/etc/profile.d目录中是对颜色、语系、which等命令进行的一些附加设置。由于/etc/profile文件是全局生效的,因此设置时要格外小心。
/etc/bashrc文件用于设置别名、函数等,也是全局生效的。例如,设置一个别名“net”。
![](https://epubservercos.yuewen.com/EA3E16/20637464601307906/epubprivate/OEBPS/Images/41294_45_3.jpg?sign=1738897909-t8va3nOi2IZ7IUmCxS4GRWvi755fqQPl-0-1284c46dd0fbe777f41d6b26da8a0bd2)
设置完成后,需要使用“source/etc/bashrc”将设置文件的内容读取到当前的Shell环境中,让文件内容立即生效。
![](https://epubservercos.yuewen.com/EA3E16/20637464601307906/epubprivate/OEBPS/Images/41294_45_4.jpg?sign=1738897909-wJjBMRZPsZdXxpVOmJ6rBdUX9JuCib2Q-0-14fe1ada161fdd1864ef2ab203c05b14)
![](https://epubservercos.yuewen.com/EA3E16/20637464601307906/epubprivate/OEBPS/Images/41294_46_1.jpg?sign=1738897909-HEw9wrmiyW3D71azxz1vnaV2a9wf51cr-0-3b627f753c05e6c21cb6c8adb67f52dc)
~/.bash_profile和~/.bashrc的作用范围是用户级的,即对某个用户生效。例如,希望用户edward登录系统后,显示当月的日历,同时修改此用户的$PS1变量。为了完成此操作,可以在/home/edward/.bashrc中定义如下内容:
![](https://epubservercos.yuewen.com/EA3E16/20637464601307906/epubprivate/OEBPS/Images/41294_46_2.jpg?sign=1738897909-aRzuM1K2wnnM8m76yWESIVeOmOZQRujz-0-7b56642f408a14e319c670289e94d79e)
用户edward再次登录系统时,显示如下内容。
![](https://epubservercos.yuewen.com/EA3E16/20637464601307906/epubprivate/OEBPS/Images/41294_46_3.jpg?sign=1738897909-GDcIkVESU0dgr4TdbA6wT9VkCx37ZVAE-0-28e61470566089c3d2d7407acd7edbd2)
当然,该操作也可以在/home/edward/.bash_profile中定义,效果是一样的。
还有两个和用户退出系统有关的文件:~/.bash_logout和~/.bash_history。当用户退出系统时,其历史记录会被保存在bash_history中,而如果把某个任务放入bash_logout文件中,则每次用户退出系统时,都会执行此文件中的任务。例如,在/home/edward/.bash_logout中写入“systemctl reboot-i”命令后,当用户edward退出登录时,系统会自动重启。