linux系统环境变量学习1
前言 Linux环境
在 Linux Shell 登录成功以后,Linux 会从文件中获取一系列的数据为该次登录所用,这些数据会在某些指令或某些程序中被使用到。这些数据就称为 Linux Shell 运行时的环境。环境中的数据可以大致分为四种:环境变量,Shell 变量,别名(alias),Shell 函数。(printenv | less)
如果要在命令的参数中使用某个变量的值,可以输入 "$变量名"
以下学自https://blog.csdn.net/u010127245/article/details/51689636
1、bashrc与profile都用于保存用户的环境信息,bashrc用于交互式non-loginshell,而profile用于交互式login shell。两者都用于保存用户的环境信息。
交互式模式就是shell等待你的输入,并且执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签退后,shell也终止了。 shell也可以运行在另外一种模式:非交互式模式。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。
2、~/.bashrc:该文件包含专用于某个用户的bash shell的bash信息,当该用户登录时以及每次打开新的shell时,该文件被读取。/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系.
3、/etc/profile,/etc/bashrc 是系统全局环境变量设定;~/.profile,~/.bashrc用户家目录下的私有环境变量设定。
~/.profile可以设定本用户专有的路径,环境变量,等,它只能登入的时候执行一次
~/.bashrc也是某用户专有设定文档,可以设定路径,命令别名,每次shell script的执行都会使用它一次
4、环境变量配置的三个方法:
a. 控制台中,不赞成使用这种方法,因为换个shell,你的设置就无效了,因此这种方法仅仅是临时使用,以后要使用的时候又要重新设置,比较麻烦。 这个只针对特定的shell;
$ PATH="$PATH:/my_new_path" (关闭shell,会还原PATH)
b. 修改/etc/profile文件,如果你的计算机仅仅作为开发使用时推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性问题。(JDK配置推荐)
这里是针对所有的用户的,所有的shell;
$ vi /etc/profile 在里面加入:
export PATH="$PATH:/my_new_path"
c. 修改.bashrc文件,这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,这里是针对某一个特定的用户,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的.bashrc文件就可以了。
$ vi /root/.bashrc 在里面加入:
export PATH="$PATH:/my_new_path"
后两种方法一般需要重新注销系统才能生效(可以直接使用$ source ~/.profile刷新来避免重启),最后可以通过echo命令测试一下: $ echo $PATH 输出已经是新路径了。
其他的东西
export” 一个变量的本意是什么
导出一个环境变量可使设置用于你的 shell 和可能的子 shell。默认情况下,用户定义的变量是本地的,并不被导出到新的进程,例如,子 shell 和脚本。export 命令使得环境变量可用在子进程中发挥功用。
Bash 环境变量的那些事---------Linux中国---知乎
PATH变量
在 PATH 变量中存放了一系列目录,而且是放置了可执行程序的目录。正是由于 PATH 变量的存在,让你不需要知道应用程序具体安装到了什么目录,而 shell 却可以正确地找到这些应用程序。
每两个目录之间使用冒号 : 分隔。如果某个应用程序的所在目录不在 PATH 变量中,那么运行的时候就需要声明应用程序的目录让 shell 能够找到。例如/home/<user name>/bin/my_program.sh
如果要让变更对当前用户持续生效,就不能在 shell 中直接执行对应的变更,而是应该将这些变更操作写在每次启动 shell 时都会运行的文件当中。这个文件就是当前用户主目录中的 .bashrc 文件。文件名前面的点号表明这是一个隐藏文件,执行普通的 ls 命令是不会将这个文件显示出来的,但只要在 ls 命令中加入 -a 参数就可以看到这个文件了。
如果程序中需要设置变量,但却由于子 shell 的原因无法正常访问到这个变量,该如何解决呢?这个时候就需要用到 export 了。可以让子shell读取到父shell的局部变量。
posted on 2020-08-05 22:24 Yan12345678 阅读(121) 评论(0) 收藏 举报
浙公网安备 33010602011771号