Linux 父子shell,source, ~/.bashrc,~/.bash_profile,/etc/bashrc,/etc/profile

一. ~/.bashrc, ~/.bash_profile, /etc/bashrc,/etc/profile

系统会在启动的时候加载 ~/.bashrc, ~/.bash_profile, /etc/bashrc,/etc/profile 脚本 中的bash配置

  • (1) /.bashrc和/etc/bashrc负责bash shell的配置加载
    • /.bashrc是用户级
    • /etc/bashrc是系统级
  • (2)~/.bash_profile 和 /etc/profile负责系统配置的加载
    • ~/.bash_profile是用户级
    • /etc/profile是系统级
  • (3) 他们的执行顺序

/etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout

二.source,. ,sh,bash,./执行命令的区别

  1. source就等效于.执行脚本,如执行在当前目录下的file.sh则有. ./file.sh,它们当前shell中执行脚本,可以修改在当前shell中定义的变量。

  2. sh,bash,./执行脚本,会产生一个子shell去执行,不能修改在当前shell中定义的变量。

  3. source一般用于刷新系统配置文件如~/.bashrc ,/etc/profile等。这样就可以无需等待系统启动时刷新

  4. 子shell和父shell在pstree中的关系
    请添加图片描述
    解释:登录用户首先为login创建了一个进程,bash为login的子进程,su是bash的子进程…
    因为su和pstree都是外部命令所以执行这些命令都会先为其创建子进程,而cd这是内置命令执行时不会创建子进程

三.全局变量和局部变量

1.显示变量

  1. set 查看全局和局部变量,局部指的是当前shell中定义的变量,全局是指系统变量和设置

  2. env只显示全局变量

2.删除变量

  1. unset可以删除全局或局部变量,但是如果变量是放在系统配置文件内如~/.bash_profile,那么在重
    启后变量依然会重新加载

3.添加变量

  • 注意两点
    • 1.定义变量时要注意是否使用export
      export 变量名=XXX 表示定义一个变量,而且该变量在所有的子shell中也生效。如果不加export则只在父shell中生效

    • 2.在~/.bash_profile和 ~ /.bashrc中定义变量是局部的,只属于当前用户(即在其他用户的终端是没有定义的),在/etc/profile 和/etc/bashrc中定义变量是全局的

三.为用户添加别名

通过在~/.bashrc中添加if[ -f ~/.bash_aliases ]来对该用户进行别名的设置

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值