掌握 alias 使所有终端生效的办法。也就是自定义环境变量的方法。
|
变量相关
+ 缩写命令
# alias vth0="vim /etc/sysconfig/network-scripts/ifcfg-eth0"
# alias lt="ls -lhtr /tmp"
# alias 查询当前系统所有缩写命令
使 alias 在所有终端生效
# vim ~/.bashrc
alias vth0="vim /etc/sysconfig/network-scripts/ifcfg-eth0"
# source ~/.bashrc
+ PS1 命令行字符串
CentOS 默认命令行字符串 [root@localhost~]#
[root@centos2 ~]# echo $PS1
[\u@\h \W]\$
[root@centos2 local]# PS1='[\u@\h \w]\$ '
[root@centos2 /usr/local]#
u 用户
h 主机名,后面要有空格
W 当前目录的缩写目录
w 当前目录的绝对路径
$ 表示符号 #,在表达式中后面要有空格
+ 更改 umask
# umask 021 临时更改umask
# vim /etc/profile.d/umask.sh 永久更改 umask
#! /bin/bash
umask 0012
# source /etc/profile
|
Linux系统中,目录的默认权限755,文件默认权限644
若建立目录文件,必须有可执行权限,所有权限开放,最大777 == rwx rwx rwx
目录默认权限=(rwx rwx rwx)777-(--- -w- -w-)022=(rwx r-x r-x)755
若建立文件,不需要有可执行权限,只有rw,最大666==rw- rw- rw-
文件默认权限=(rw- rw- rw- )666 -(--- -w- -w-)022=rw- r-- r-- 644
NOTE:关于umask的计算,不能换算成数字做加减。
比如当umask=033时,
文件默认权限为666-033=633
实际上权限为"rw-rw-rw-" — “----wx-wx" == "rw-r--r--" ==644
umask 第一位是代表 suid sgid 和 sticky_bit
setuid=4 setgid=2 stidy_bit=1
和 r w x 的计算方法一致。
|
掌握自定义 PATH 在多终端可用的方法。 |
PATH 变量
# echo $PATH 查看当前环境变量
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
自定义环境变量
# vim /etc/profile.d/path.sh
#! /bin/bash
export PATH=$PATH:/tmp/
# source /etc/profile
|
如果想删除自定义的变量,除了在 path.sh 中删除相应的内容外,还需要重新定义一下 PATH
PATH=
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin,把不需要的 path 去掉即可
|
如果是要在系统级别自定义环境变量,不要直接编辑这两个文件。在 /etc/profile.d/ 目录下编辑 name.sh 文件,然后 source /etc/profile 即可。 |
系统级别环境变量
/etc/profile 系统环境变量,对所有用户永久生效
内设PATH,USER,LOGNAME,MAIL,INPUTRC,HOSTNAME,HISTSIZE,umask,export全局声明等等。
在 /etc/profile 文件里面有份声明,
# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.
在 /etc/profile.d/ 下面创建自定义的 sh 文件,然后 source /etc/profile,就可以在所有终端所有用户下生效。
/etc/bashrc 系统级别的变量,针对所有 shell,所有用户
预设 umask PS1
在bashrc 文件内,也有和 /etc/profile 里面一样的声明,在 /etc/profile.d 目录下创建自定义文件,不建议修改此文件。
|
若要配置环境变量,最保险是写在 .bashrc 文件中。因为不管是登陆还是不登录,.bashrc 文件总会被调用。
.bash_profile 中定义的变量不能再 crontab 中使用。
|
隐藏环境变量
除了上述两个系统级别的变量,每个用户的家目录下面还有隐藏的变量文件。
.bash_profile 定义当前用户环境变量PATH
定义用户个人化路径与环境变量的文件名称。每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登陆时,该文件仅仅执行一次。
.bashrc 定义当前用户别名
包含专用于你的shell的bash信息,当登陆时以及每次打开新的shell时,文件被读取。可以讲用户自定义的alias或者自定义变量写到文件中。
.bash_history
记录命令历史
.bash_logout
退出shell时候,会执行该文件。建议把清理工作放到此文件中。
|
.bash_profile 和 .bashrc 的区别
.bash_profile is executed for login shells, while .bashrc is executed for interactive non-login shells.
[root@centos2 ~]# cat .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
配置文件 .bash_profile 在执行的时候会去调用 .bashrc。所以 .bash_profile 的优先级会高于 .bashrc,如果 .bashrc 里面定义了一个别名 alias vth0="vim /etc/sysconfig/network-scripts/ifcfg-eth0",但是在 .bash_profile 里面做了 unset vth0 的处理,那么这个别名不会生效。 假设反过来,会生效。
.bashrc >>>> alias vth0="vim /etc/sysconfig/network-scripts/ifcfg-eth0"
.bash_profile >>>> unset vth0
这种情况 vth0 不会生效
.bashrc >>>>> unset name
.bash_profile >>>>> name=wangbin
这种情况,变量会生效
1. 当直接在 login 界面登陆登陆、使用 ssh 登陆或者 sudo 切换用户登陆时,.bash_profile 会被调用来初始化 shell 环境
2. 当不登录系统,而使用 ssh 直接在远程执行命令的时候,调用 .bashrc 文件。
3. 当已经登陆系统,每打开一个新的 Terminal 时,会调用 .bashrc 文件。
NOTE:
|