BASH shell配置文件

5 篇文章 0 订阅
1 篇文章 0 订阅

生效范围

全局配置文件: 对所有用户皆有效
# /etc/profile
是系统范围内的全局配置文件,对所有用户都生效。它在用户登录时被执行,设置系统级别的环境变量和执行其他系统级别的配置。
# /etc/profile.d/*.sh
/etc/profile.d/目录下的 *.sh 文件是用来添加特定的环境变量或设置系统范围的配置。这些文件的名称可以是任意的,以 .sh 结尾,系统会在登录时自动运行该目录下的所有脚本文件。
# /etc/bashrc
是系统范围内的 Bash Shell 配置文件。它提供了一些系统级别的 Bash Shell 设置和别名定义。
个人配置文件: 只针对特定用户有效
# ~/.bash_profile
是用户的个人配置文件,用于定义用户级别的环境变量和个性化的配置。它在用户登录时被执行一次。
# ~/.bashrc
也是用户的个人配置文件,用于定义用户级别的 Bash Shell 配置。与 .bash_profile 不同的是,.bashrc 在每个新的交互式 Bash Shell 会话中都会被加载执行。

shell登录方式

交互式登录
直接通过终端输入账号密码登录
使用su - username切换的用户   # 注意使用su -
非交互式登录
su username   # 注意不适用su - 而且su 为非交互式登录,只不过是切换了登录用户的目录
图形界面下打开的终端
执行脚本
任何其他的bash实例

案例配置

1、让所有用户的PATH环境变量的值多出一个路径,例如: /usr/local/apache/bin
[root@Rocky ~]# echo -e '\nPATH=$PATH:/usr/local/apache/bin\nexport PATH' >> /etc/profile
# 更改/etc/profile将应用于所有用户,并且会使所有用户的 PATH 环境变量具有相同的配置。如果您只想为特定用户设置该路径,可以编辑相应用户的个人配置文件(如 ~/.bashrc)并添加相同的配置行,然后让用户重新登录或者使配置立即生效。
[root@Rocky ~]# tail -n5 /etc/profile
       fi
fi

PATH=$PATH:/usr/local/apache/bin
export PATH
[root@Rocky ~]# source /etc/profile
[root@Rocky ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/apache/bin:/usr/local/apache/bin
[root@Rocky ~]# httpd -v
Server version: Apache/2.4.37 (rocky)
Server built:   May 17 2023 16:27:49
# 可以尝试直接在终端中执行 /usr/local/apache/bin 目录下的可执行文件,以确认路径是否已正确添加到 PATH 中;如果您能够成功执行该命令并显示 Apache 的版本信息,则表明 PATH 环境变量已成功配置,并且已能访问 /usr/local/apache/bin 目录下的可执行文件。
2、用户root登录时,将命令指示符变成红色,并自动启用如下别名: rm=‘rm -i’;cdnet=‘cd /etc/sysconfig/network-scripts/’;editnet=‘vim /etc/sysconfig/network-scripts/ifcfg-eth0’;editnet=‘vim /etc/sysconfig/network-scripts/ifcfg-ens33’
[root@Rocky ~]# vim /root/.bashrc
# .bashrc
PS1="\[\033[0;31m\][\u@\h \W]\$\[\033[0m\] "
alias rm='rm -i'
alias cdnet='cd /etc/sysconfig/network-scripts/'
alias editnet='vim /etc/sysconfig/network-scripts/ifcfg-eth0'
alias edinet='vim /etc/sysconfig/network-scripts/ifcfg-ens33'
# PS1: 用户设置命令提示符的颜色
# \033[0m;31m: 用户表示红色; 也可以用来表示随机颜色: \033[0;$[RANDOM%7+31]m
# \033[0m: 用户回复终端颜色
# \[\]: 设置颜色时被\[\]包裹控制字符序列,为了正确处理命令提示符和控制字符序列,通常会将带有颜色和其他控制指令的字符序列括在 \[\] 中,以确保终端正确计算提示符的位置。尽管这些 \[\] 在命令提示符设置中起到关键作用,但在某些终端和配置中,可能不需要使用 \[\] 包裹控制字符序列。具体取决于终端和其配置方式。如果不加 \[\],可能会导致终端计算错误,从而影响命令提示符的显示。
# \u: 表示当前用户名
# @:  表示用户名部分
# \h: 表示主机名
# \W: 表示当前工作目录
# \$: 表示命令提示符的终止符, 通常为普通用户的命令提示符$, 需要加"\"进行转义
# # : 使用#号通常做为root用户的命令提示符, 通常情况下不需要加"\"进行转义
# alias: 设置命令的别名,格式: alias 别名=指令
[root@Rocky ~]# source /root/.bashrc
[root@Rocky ~]$ cdnet
[root@Rocky network-scripts]$ pwd
/etc/sysconfig/network-scripts

# 当 root 用户登录系统并使用 Bash Shell 时,命令提示符将显示为红色,并且可以直接使用 rm 和 cdnet 别名。
# 请注意,以上配置是针对 root 用户的。如果您还希望对其他用户进行类似的配置,可以相应地修改其个人配置文件(如 ~/.bashrc)并添加相同的配置行。

## 修改全局提示符
# Ubuntu
在/etc/profile文件中添加以下内容
[root@ubuntu ~]# vim /etc/profile
if [ "$(id -u)" -eq 0 ]; then
    prompt='#'
else
    prompt='\$'
fi
PS1="\[\033[0;$[RANDOM%7+31]m\][\u@\h \W]$prompt\[\033[0m\] "
注释掉用户默认~/.bashrc文件中的
#if [ "$color_prompt" = yes ]; then
#    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
#else
#    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
#fi

# Rocky
[root@ubuntu ~]# vim /etc/profile
if [ "$(id -u)" -eq 0 ]; then
    prompt='#'
else
    prompt='\$'
fi
PS1="\[\033[0;$[RANDOM%7+31]m\][\u@\h \W]$prompt\[\033[0m\] "
3、任意用户登录系统时,显示红色字体的警示提醒信息“Hi,dangerous!”
[root@Rocky ~]# vim /etc/profile
echo -e "\E[1;32mHi,dangerous!\E[0m"

Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

WARNING! The remote SSH server rejected X11 forwarding request.
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Fri Aug  4 04:58:27 2023 from 10.0.0.1
Hi,dangerous!
[student@Rocky ~]$ su - root
Password: 
Hi,dangerous!

# /etc/profile
# 是系统范围内的全局配置文件,对所有用户都生效。它在用户登录时被执行,设置系统级别的环境变量和执行其他系统级别的配置。
# 如果您只想在特定用户登录时显示该信息,而不是所有用户,可以将上述设置添加到用户的个人配置文件 ~/.bash_profile 或 ~/.bashrc 中。
4、编写生成脚本基本格式的脚本,包括作者,联系方式,版本,时间,描述等
[root@Rocky ~]# cat ~/.vimrc
set nu
set softtabstop=4
set expandtab
set ignorecase
set shiftwidth=4
autocmd BufNewFile *.sh exec ":call SetTitle()"
func SetTitle()
    if expand("%:e") == 'sh'
    call setline(1,"#!/bin/bash")
    call setline(2,"#")
    call setline(3,"#**************************************************")
    call setline(4,"#Author:        sunxiaoshen")
    call setline(5,"#Version:        1.0")
    call setline(6,"#QQ:            2964238553")
    call setline(7,"#Date:          ".strftime("%Y-%m-%d"))
    call setline(8,"#FileName:      ".expand("%"))
    call setline(9,"#URL:           http://www.xiaoshen.com")
    call setline(10,"#Description:   The test script")
    call setline(11,"#Copyright (C):    ".strftime("%Y")." All rights reserved")
    call setline(12,"#**************************************************")
    call setline(13,"")
    endif
endfunc
autocmd BufNewFile * normal G

# 含义解释如下
# 用于自动设置在编辑 Shell 脚本文件(*.sh)时的一些编辑器选项和文件模板。下面是每行代码的含义解释:
# set nu:设置行号显示,显示行号可以方便地定位到特定行。
# set ts=4:设置 Tab 键的宽度为 4 个空格,使得缩进更加一致和可读。
# set expandtab:将 Tab 键自动转换为空格,使得缩进时不会混合使用制表符和空格。
# set ignorecase:设置对搜索时忽略大小写,搜索时不区分大小写。
# set shiftwidth=4:设置缩进时的宽度为 4 个空格,使得代码缩进一致性更好。

# 接下来是 autocmd 命令和 func 定义,它们主要用于在创建新文件时执行函数来插入模板内容:
# autocmd BufNewFile *.sh exec ":call SetTitle()":针对以 .sh 结尾的文件,当创建新文件时自动执行 SetTitle() 函数。
# func SetTitle():定义了名为 SetTitle() 的函数。
# 在 SetTitle() 函数内,首先使用 expand("%:e") 取得当前文件的扩展名,并判断是否为 sh(Shell 脚本)文件。如果是,执行以下操作:
# call setline(1,"#!/bin/bash"):将 #!/bin/bash 插入第一行,表示该脚本的解释器为 Bash。
# 9-12. 通过 call setline() 函数分别在第 2-12 行插入了一些脚本的元信息,如作者、版本、联系方式、日期、文件名、URL、描述和版权信息。strftime("%Y") 用于获取当前年份。
# 插入一个空行。
# 最后一行是 autocmd 命令:
# autocmd BufNewFile * normal G:在创建新文件后,将光标移动到最后一行。normal 命令使 Vim 执行普通模式下的 G 命令,将光标定位到文件末尾。
# 这段代码的目的是自动设置 Vim 编辑器的选项,并在创建新的 Shell 脚本文件时为其添加一个基本的脚本模板,包含了作者信息、版本号、日期等字段。这样可以提高编写脚本的效率和一致性。
5、使用脚本配置PS1,是用户登录系统显示不同颜色的提示符号
[root@ubuntu ~]# cat ps1.sh
#!/bin/bash
system_version=`cat /etc/os-release | grep -E '^ID=' | grep -Eo '[a-z]+'`
if [ "$system_version" == "rocky" ];then
    cat >> /etc/profile << EOF
if [ "\$(id -u)" -eq 0 ]; then
    prompt='#'
else
    prompt='\$'
fi
PS1="\[\033[0;\$[RANDOM%7+31]m\][\u@\h \W]\$prompt\[\033[0m\] "
EOF
echo "配置完成, 注销后重新登录生效"
elif [ "$system_version" == "ubuntu" ];then
    stat=`grep -n "force_color_prompt=yes" /etc/skel/.bashrc | cut -d: -f1`
    stop=`grep -n "unset color_prompt force_color_prompt" /etc/skel/.bashrc | cut -d: -f1`
    sed -ri.bak "${stat},${stop}s/(^[^#])/#\1/" /etc/skel/.bashrc
    if [ "$(id -u)" -eq 0 ]; then
        sta=`grep -n "force_color_prompt=yes" ~/.bashrc | cut -d: -f1`
        sto=`grep -n "unset color_prompt force_color_prompt" ~/.bashrc | cut -d: -f1`
        sed -ri.bak "${sta},${sto}s/(^[^#])/#\1/" ~/.bashrc
    fi
    for i in `ls /home`;do
        stet=`grep -n "force_color_prompt=yes" /home/$i/.bashrc | cut -d: -f1`
        step=`grep -n "unset color_prompt force_color_prompt" /home/$i/.bashrc | cut -d: -f1`
        sed -ri.bak "${stet},${step}s/(^[^#])/#\1/" /home/$i/.bashrc
    done
    cat >> /etc/profile << EOF
if [ "\$(id -u)" -eq 0 ]; then
    prompt='#'
else
    prompt='\$'
fi
PS1="\[\033[0;\$[RANDOM%7+31]m\][\u@\h \W]\$prompt\[\033[0m\] "
EOF
echo "配置完成, 注销重新登录生效"
fi
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值