明明的一台机器,不自动运行.bashrc了,为啥呢?
查:
vim ~/.bashrc
.bashrc的头注释说明bash 的non-login模式shell
man bash
说这个文件是用户的个性化设置文件,登录个人用户的时候执行,在/etc/bash.bashrc进行系统初始化,当为sh环境的时候默认关闭
至此,问题基本可以解决,改passwd用户的shell默认启动器即可。
闲着没事,再往下看看。
apt source bash
下载源码 vim shell.c
bash 的实现程序上说明登录模式shell和sh不执行.bashrc,不过都会执行/etc/profile。
那它怎么运行的呢?
查:
以ubuntu 18.04为例:
ps -auxefww >> ps.txt
获取进程树
cat /etc/init.d/gdm3
apt source gdm
vim ./daemon/gdm-session-worker.c
gdm登录的时候遍历passwd_info信息,获取环境设置的配置内容,如果配置中有shell值则设置为指定shell,没有设置为bash
cat /etc/init.d/ssh
内核->init
init->/etc/init.d/gdm3 拉起/lib/systemd/systemd-logind服务
init->/bin/login -> bash 在用户登录的时候,启动bash子进程检测,根据检查结果,选择执行profile bashrc等脚本设置用户shell环境
(bash INVOCATION_ID=fb37824179b44bc3a61c51f62fabd8d1
TERM=linux
JOURNAL_STREAM=9:46620 HOME=/root
SHELL=/bin/bash
USER=root LOGNAME=root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
LANG=en_US.UTF-8
MAIL=/var/mail/root XDG_SESSION_ID=3
XDG_RUNTIME_DIR=/run/user/0
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/0/bus
XDG_SEAT=seat0 XDG_VTNR=1
HUSHLOGIN=FALSE)
init->/etc/init.d/ssh ->bash 拉起/usr/sbin/sshd服务,ssh client连接成功之后