bash环境配置:
shell登录类型:
交互式登录:取得bash时,需要完整的登录流程,需要用户名密码
直接通过终端使用账号密码进行的登录;
通过su - l USERNAME 命令实现的用户切换
非交互式登录:取得bash接口的方法不需要重复登录操作
图形界面下打开的命令行窗口;
执行脚本;
su USERNAME命令;
配置文件:
生效范围划分,存在两类:
全局配置: 系统的整体设置,不建议修改此文件
/etc/profile,/etc/profile.d/*.sh
/etc/bashrc
个人配置: 用户个人设置
~/.bash_profile
~/.bashrc
按功能划分,存在两类:
profile类:
为交互式登录的shell提供配置
/etc/profile,/etc/profile.d/*.sh
~/.bash_profile
功用:
1 定义环境变量,例如PATH,PS1
2 运行命令或脚本
bashrc类:
为非交互式登录shell提供配置
/etc/bashrc
~/.bashrc
功用:
定义命令别名
定义本地变量
变量:内存空间,变量名
变量设置规则:
变量与变量内容以一个等号连接,例:mypc=roger
等号两边不能直接接空格,否则报错 例:m = 3
变量名只能是英文字母与数字,不能以数字开头;
变量连接,使用“$变量名”或 ${变量}连接内容
[roger@oc3137372501 ~]$ echo "$mypc"wang rogerwang [roger@oc3137372501 ~]$ echo ${mypc}wang rogerwang
若其它子进程需要使用该变量,则需要export来使变量变成环境变量
“export mypc”
类型:
环境变量 作用范围 当前shell进程及其子进程
功能:主文件夹HOME的变换,提示符ps1的显示,执行文件查找路径
env查看变量变量
[roger@oc3137372501 ~]$ env HOSTNAME=oc3137372501.xxx.com------->主机名 SELINUX_ROLE_REQUESTED= TERM=xterm ------------------------->终端使用的环境是什么类型 SHELL=/bin/bash -------------------->目前环境下使用的shell HISTSIZE=1000 ---------------------->记录命令条数 SSH_CLIENT=9.181.102.147 41553 22 SELINUX_USE_CURRENT_RANGE= QTDIR=/usr/lib64/qt-3.3 QTINC=/usr/lib64/qt-3.3/include SSH_TTY=/dev/pts/1 ------------------>用户使用终端 USER=roger -------------------------->用户名 LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36: GNOME_DISABLE_CRASH_DIALOG=1 MAIL=/var/spool/mail/roger ----------->用户默认邮箱 PATH=/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/ibm/c4eb/bin:/usr/kerberos/bin:/home/roger/bin PWD=/home/roger----------------------->用户所在当前目录 LANG=en_US.UTF-8 --------------------->当前所使用语系 KDE_IS_PRELINKED=1 MODULEPATH=/usr/share/Modules/modulefiles:/etc/modulefiles LOADEDMODULES= KDEDIRS=/usr PD_SOCKET=6874 SELINUX_LEVEL_REQUESTED= SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass HISTCONTROL=ignoredups SHLVL=1 HOME=/home/roger LOGNAME=roger QTLIB=/usr/lib64/qt-3.3/lib CVS_RSH=ssh SSH_CONNECTION=9.181.102.147 41553 9.181.102.147 22 MODULESHOME=/usr/share/Modules LESSOPEN=||/usr/bin/lesspipe.sh %s PDHOST= G_BROKEN_FILENAMES=1 BASH_FUNC_module()=() { eval `/usr/bin/modulecmd bash $*` } _=/bin/env
本地变量 作用范围 当前shell进程
局部变量 作用范围 仅为当前shell进程中某代码片断(通常为函数上下文)
位置变量: $1 $2 ... 第一个参数,第二个参数...
特殊变量: $? 上一次命令执行的状态码
变量定义方式:
bash内置变量:可直接调用,内置了许多环境变量,例如:PATH等
自定义变量:
变量赋值: 变量=值
bash弱类型:
变量存储数据时,默认均采用字符形式;任何变量可以不经声明,直接引用
例: myClass=one
定义本地变量:
name=value
set命令:查看所有变量(环境变量与自定义变量)
定义环境变量
export name=value 将自定义变量,转换成环境变量
declare -x name=value 定义环境变量
declare命令:
语法:declare [-aixr] variable
参数:
-a:将后面名为variable的变量定义成为数组(array)类型
-i:将后面名为variable的变量定义成为整数数字(integer)类型
-x:相当于export,将后边的variable变成环境变量
-r:将变量设置成readonly类型,该变量不能更改内容,也不能重新赋值;
查看环境变量 env, printenv,export
env命令:在修改的环境变量中执行命令
env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]
-i:忽略环境变量执行命令
-u,--unset=NAME:移除指定变量
没有选项的情况下,显示所有环境变量
[root@oc3137372501 ~]# env $PATH env: /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin
printenv - print all or part of environment 输出全部或者部分环境变量
printenv [OPTION]... [VARIABLE]...
撤销变量:
unset name
引用变量:
${name} 或 $name
[root@oc3137372501 ~]# echo ${mypc},$mypc first,first
bash中的引用符号:
'':强引用:变量不会被替换,按字符串输出
[root@oc3137372501 ~]# echo '$mypc' $mypc
"":弱引用:变量内容会输出。
[root@oc3137372501 ~]# echo "$mypc" first
` `或$( ):命令引用, 把一个命令的执行结果直接引用 例如:
[root@oc3137372501 ~]# ls -l `which cat` -rwxr-xr-x. 1 root root 48568 Jul 16 2014 /bin/cat [root@oc3137372501 ~]# ls -l $(which cat) -rwxr-xr-x. 1 root root 48568 Jul 16 2014 /bin/cat
配置文件作用次序
注意:生效的变量是最后出现的变量
交互式登录:
/etc/profile ---> /etc/profile.d/*.sh ---> ~/.bash_profile --> /etc/bashrc
非交互式登录:
~/.bash --> /etc/bashrc/ --> /etc/profile.d/*.sh
编辑的配置文件定义的新配置如何生效
1 注销
2 让当前shell去重新读取指定的配置文件
source /PATH/TO/SOMEFILE
. /PATH/TO/SOMEFILE
注意:副作用 读两遍后,环境变量在PATH出现两遍
常见的环境变量
PATH:决定了shell将到哪些目录中寻找命令或程序
HOME:当前用户主目录
MAIL:是指当前用户的邮件存放目录。
SHELL:是指当前用户用的是哪种Shell。
HISTSIZE:是指保存历史命令记录的条数。
LOGNAME:是指当前用户的登录名。
HOSTNAME:是指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的。
LANG/LANGUGE:是和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。
PS1:是基本提示符,对于root用户是#,对于普通用户是$。
PS2:是附属提示符,默认是“>”。可以通过修改此环境变量来修改当前的命令符,
问题:
定义对所有用都生效的别名?
通过编辑/etc/bashrc文件添加别名设置,将会对所有用户生效。
如果仅需要PATH环境变量的修改仅对root用户生效,该如何操作?
通过编辑root用户家目录下.bash_profile文件设置只对root用户生效的环境变量
如有错误,敬请指正!
谢谢!