首页 > 其他分享 >Bash 初始化脚本启动顺序

Bash 初始化脚本启动顺序

时间:2024-01-21 22:33:53浏览次数:32  
标签:脚本 初始化 顺序 登录 bashrc Session profile Bash bash

Bash 初始化脚本启动顺序

登录 Session

登录 Session 是用户登录系统以后,系统为用户开启的原始 Session,通常需要用户输入用户名和密码进行登录。

登录 Session 一般进行整个系统环境的初始化,启动的初始化脚本依次如下。

  • /etc/profile:所有用户的全局配置脚本。
  • /etc/profile.d目录里面所有.sh文件
  • ~/.bash_profile:用户的个人配置脚本。如果该脚本存在,则执行完就不再往下执行。
  • ~/.bash_login:如果~/.bash_profile没找到,则尝试执行这个脚本(C shell 的初始化脚本)。如果该脚本存在,则执行完就不再往下执行。
  • ~/.profile:如果~/.bash_profile~/.bash_login都没找到,则尝试读取这个脚本(Bourne shell 和 Korn shell 的初始化脚本)。

Linux 发行版更新的时候,会更新/etc里面的文件,比如/etc/profile,因此不要直接修改这个文件。如果想修改所有用户的登陆环境,就在/etc/profile.d目录里面新建.sh脚本。

如果想修改你个人的登录环境,一般是写在~/.bash_profile里面。下面是一个典型的.bash_profile文件。

# .bash_profile
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
PATH=$PATH:$HOME/bin

SHELL=/bin/bash
MANPATH=/usr/man:/usr/X11/man
EDITOR=/usr/bin/vi
PS1='\h:\w\$ '
PS2='> '

if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

export PATH
export EDITOR

可以看到,这个脚本定义了一些最基本的环境变量,然后执行了~/.bashrc

bash命令的--login参数,会强制执行登录 Session 会执行的脚本。

$ bash --login

bash命令的--noprofile参数,会跳过上面这些 Profile 脚本。

$ bash --noprofile

非登录 Session

非登录 Session 是用户进入系统以后,手动新建的 Session,这时不会进行环境初始化。比如,在命令行执行bash命令,就会新建一个非登录 Session。

非登录 Session 的初始化脚本依次如下。

  • /etc/bash.bashrc:对全体用户有效。
  • ~/.bashrc:仅对当前用户有效。

对用户来说,~/.bashrc通常是最重要的脚本。非登录 Session 默认会执行它,而登录 Session 一般也会通过调用执行它。每次新建一个 Bash 窗口,就相当于新建一个非登录 Session,所以~/.bashrc每次都会执行。注意,执行脚本相当于新建一个非互动的 Bash 环境,但是这种情况不会调用~/.bashrc

bash命令的--norc参数,可以禁止在非登录 Session 执行~/.bashrc脚本。

$ bash --norc

bash命令的--rcfile参数,指定另一个脚本代替.bashrc

$ bash --rcfile testrc

.bash_logout

~/.bash_logout脚本在每次退出 Session 时执行,通常用来做一些清理工作和记录工作,比如删除临时文件,记录用户在本次 Session 花费的时间。

如果没有退出时要执行的命令,这个文件也可以不存在。

键盘绑定

Bash 允许用户定义自己的快捷键。全局的键盘绑定文件默认为/etc/inputrc,你可以在主目录创建自己的键盘绑定文件.inputrc文件。如果定义了这个文件,需要在其中加入下面这行,保证全局绑定不会被遗漏。

$include /etc/inputrc

.inputrc文件里面的快捷键,可以像这样定义,"\C-t":"pwd\n"表示将Ctrl + t绑定为运行pwd命令。

标签:脚本,初始化,顺序,登录,bashrc,Session,profile,Bash,bash
From: https://www.cnblogs.com/jigsawecho/p/17978593

相关文章

  • 模拟扑克牌初始化操作
    1publicclassPoker{2/*模拟扑克牌初始化操作3*点数:"3","4","5","6","7","8","9","10","J","Q","K","A","2","大......
  • 前端js方法的书写顺序,比如有内部方法,外部方法,用户触发的动作方法,监听事件方法,等等,
    在前端JS开发中,通常的方法书写顺序如下:变量声明和初始化内部方法定义外部方法定义初始化函数事件监听方法定义用户触发的动作方法定义这个顺序的主要目的是提高代码的可读性和可维护性。按照这个顺序,可以使代码更加清晰、易于理解和修改。变量声明和初始化应该在前面,因为......
  • 【数据结构】详谈队列的顺序存储及C语言实现
    循环队列及其基本操作的C语言实现前言大家好,很高兴又和大家见面啦!!!在上一篇内容中,我们在介绍完队列的基本概念、重要术语以及基本操作后,又回顾了一下数据结构的三要素——数据的逻辑结构、数据的存储结构以及数据的运算。队列这种数据结构我们已经介绍了它的逻辑结构以及数据运算......
  • SQL 的执行顺序,你搞清楚了吗?
    这是一条标准的查询语句: 这是我们实际上SQL执行顺序:from子句组装来自不同数据源的数据;where子句基于指定的条件对记录行进行筛选;groupby子句将数据划分为多个分组;使用聚集函数进行计算;使用having子句筛选分组;计算所有的表达式;select的字段;使用orderby对结......
  • FAQ-linux登录失败或者执行命令提示bash: fork: Cannot allocate memory
    一、现象服务器登录失败或者提示失败bash:fork:Cannotallocatememory二、盘查1、先使用free-m查看内存有没有问题2、没有问题再看最大进程数sysctlkernel.pid_max3、然后核实下当前的进程数ps-eLf|wc-l三、解决方法修改最大进程数后系统恢复echo100000......
  • 动态规划(4) 完全背包的遍历顺序
    目录377组合总和Ⅳ进阶版爬楼梯322零钱兑换377组合总和ⅣclassSolution{public:intcombinationSum4(vector<int>&nums,inttarget){intn=nums.size();vector<int>dp(target+1,0);dp[0]=1;for(intj=0;j<=target;j++)......
  • C++继承顺序
    派生类可以访问基类中所有的非私有成员。因此基类成员如果不想被派生类的成员函数访问,则应在基类中声明为private。我们可以根据访问权限总结出不同的访问类型,如下所示:访问publicprotectedprivate同一个类yesyesyes派生类yesyesno外部的类yesnono......
  • 掌握 C# 变量:在代码中声明、初始化和使用不同类型的综合指南
    C#变量变量是用于存储数据值的容器。在C#中,有不同类型的变量(用不同的关键字定义),例如:int-存储整数(没有小数点的整数),如123或-123double-存储浮点数,有小数点,如19.99或-19.99char-存储单个字符,如'a'或'B'。Char值用单引号括起来string-存储文本,如"Hello......
  • mysql 语句执行顺序
    MySQL语句的大致执行顺序如下:FROM:指定要查询的表。JOIN:根据指定的条件,将两个或多个表合并为一个结果集。WHERE:对查询结果进行筛选,只保留满足指定条件的行。GROUPBY:将结果集按照指定的列进行分组。WITHROLLUP:按照GROUPBY的列对结果集进行汇总,并添加一......
  • vxe-column 表头顺序:数据中改变后,但视图位置不更新
    问题在左树右表的页面中,左侧点击不同的节点,右侧表头会改变。但在某些情况下,数据中表头顺序改变了,但视图中表头位置却没变。如下图所示:尝试数据变了但视图未更新,猜测是vue更新机制导致的,于是把表头数组的赋值改为$set,无效;猜测是右侧表格组件复用导致数据未更新,(但其实vue-de......