Linux变量分类
在 Linux Shell 中,变量主要有两大类
:
环境(系统)
变量用户定义
变量
每种类型的变量依据作用域
不同,又分为全局变量
和局部变量
全局变量
作用在整个 Shell 会话及其子 Shell局部变量
作用在定义它们的进程及其子进程内
常见内置变量
环境(系统|内置)变量
su切换用户时加载变量的过程
su - root 加载的变量
su -
会完全切换用户,加载用户的环境变量
添加新变量
时要添加export
才能全局生效
su 不加载之前用户的变量
su
依然使用之前用户的环境变量
查看变量
使用 printenv
查看全局变量
# 查看全局变量
printenv
查看常用的的环境变量
# 查看$PATH列表
## 查看所有命令的搜索路径
echo $PATH
# 查看用户的主工作目录
echo $HOME
# 查看保存历史命令的条数
echo $HISTSIZE
# 查看当前登录用户名
echo $LOGNAME
# 查看当前用户使用的shell种类
echo $SHELL
export
显示当前系统定义的所有环境变量
参考: https://www.cnblogs.com/amboyna/archive/2008/03/08/1096024.html
https://cloud.tencent.com/developer/article/1758884
# 显示当前系统定义的所有环境变量
export
# 列出当前的环境变量值
export -p
env
显示当前用户
的变量;
# 查看所有环境变量
env|more
set
显示当前shell
变量,shell变量包含用户变量
使用 set
查看某个特定进程
中的所有变量,包括局部变量
、全局变量
以及用户定义变量
# 可以查看更多变量,包括预定义变量和位置变量
set|more
添加PATH
变量
全局修改–修改/etc/profile
文件:----不建议
vi /etc/profile
# 在里面加入:
export PATH=$PATH:/home/uusama/mysql/bin
# 生效/etc/profile配置
source /etc/profile
# 查看$PATH
echo $PATH
Linux变量配置文件
参考:https://mp.weixin.qq.com/s/WHTAezINpwQpbObf-ivyGw
全局
配置文件:
/etc/profile
/etc/profile.d/
/etc/bashrc
/etc/environment
-----系统级别
的全局环境变量
文件
# /etc/environment
## 格式为 KEY=VALUE
JAVA_HOME="/usr/lib/jvm/java-11"
LANG="en_US.UTF-8"
用户
配置文件:
~/.bash_profile
~/.bashrc
~/.bashrc
和~/.bash_profile
,这两个文件的区别为:
.bash_profile
是交互式login
方式进入bash shell运行,..bashrc
是交互式no-login
方式进入bash shell运行。
可以理解为.bash_profile
文件只会在用户登录的时候
读取一次
,
而.bashrc
在每次打开终端
进行每次新会话
时都会读取
。
持久化配置
变量–修改~/.bashrc
vi /root/.bashrc
只对root
用户生效。
# 在里面加入:
export PATH=$PATH:/home/uusama/mysql/bin
# 生效~/.bashrc配置
source ~/.bashrc
# 查看$PATH
echo $PATH
# 看看输出里面是不是已经有了/home/uusama/mysql/bin这个路径了。
修改变量
在 .bash_profile
或 .bashrc
中添加 export
语句,永久
修改变量
export常用参数
-f
代表[变量名称]中为函数名称。
-n
删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
-p
列出所有的shell
赋予程序的环境变量
。
# 列出当前的环境变量值
export -p
提升到全局变量 export
参考: https://www.runoob.com/linux/linux-comm-export.html
# 定义变量
变量名=变量值
# 提升为全局变量
export 变量名
删除变量
unset
删除一个环境变量,如:
unset NAME;
将变量设为只读
readonly
设置环境变量只读
,如:
# 将变量设置只读
## 只读变量unset无效
## 只读变量无法修改变量值
readonly NAME
删除只读变量
# 安装gdb
yum install gdb -y
# 删除只读变量
cat << EOF | gdb
> attach $$
> call unbind_variable("要删除的变量名")
> detach
> EOF
# 修改变量的值
name=zhangsan
# 打印变量的值
echo $name
# 删除变量
unset $name
查看别名alias列表
设置别名
放在.bash_aliases
文件中。
# 查看命令别名列表
alias
使别名不生效
如果别名冲突,需要临时使该alias不生效,命令前加\
即可
https://blog.csdn.net/qq_36741436/article/details/78732201
# 使cp别名不生效
## -r 递归复制
## -f 覆盖文件时不提示
\cp -rf a b
Linux配置proxy
全局proxy
Centos7
的/etc/environment
文件不支持socks5
代理配置
[root@rhel8 ~]# cat /etc/environment
all_proxy="http://proxy-dmz.ibm.com:912"
no_proxy="ibm.com,10.166.30.64,ar09-12-wp,ar09-12-wp.cluster.local,10.166.30.85,ar09-10-wp,ar09-10-wp.cluster.local,127.0.0.1,10.166.30.64,10.166.30.85,127.0.0.1,localhost,.svc,10.233.0.0/22,10.244.0.0/16,.cluster.local"
# 这是github的token变量
github_token=gho_jxxxxx
在~/.bashrc
中配置
socks5h
表示远程解析 dns
,如果直接写 socks5
是本地解析 dns
# 全局走的http_proxy
export all_proxy="http://admin:nihao123@proxy.ibm.com:443"
# 全局走的socks_proxy
export all_proxy="socks5h://admin:nihao123@proxy.ibm.com:443"
终端proxy
参考: Linux 让终端走代理的几种方法
socks5h
表示远程解析 dns
,如果直接写 socks5
是本地解析 dns
# 全局走的代理
export all_proxy="socks5h://127.0.0.1:1080"
设置别名快速开启终端proxy和取消终端proxy,写入.bashrc
文件中即可.
alias setproxy="export ALL_PROXY=socks5h://127.0.0.1:1080"
alias unsetproxy="unset ALL_PROXY"