linux环境变量设置的三种方法 - Go语言中文社区

linux环境变量设置的三种方法





login shell 和 no-login shell

“login shell” 代表用户登入, 比如使用 “su -“ 命令, 或者用 ssh 连接到某一个服务器上, 都会使用该用户默认 shell 启动 login shell 模式.
该模式下的 shell 会去自动执行 /etc/profile 和 ~/.profile 文件, 但不会执行任何的 bashrc 文件, 所以一般再 /etc/profile 或者 ~/.profile 里我们会手动去 source bashrc 文件.
而 no-login shell 的情况是我们在终端下直接输入 bash 或者 bash -c “CMD” 来启动的 shell.
该模式下是不会自动去运行任何的 profile 文件.

1.login shell与non-login shell的概念

(1)login shell

取得shell(如bash)时需要完整的登录流程,就称为login shell。举例来说,有tty1-tty6登录,输入用户的账户和密码后,取得的shell就称为“login shell”

(2)non-login shell

取得shell不需要账户登录的流程。比如说,在X window登录linux后,在桌面右击获取的命令行窗口,此时不需要用账户名和密码进行登录,那这个bash的环境就称为non-login shell。在比如,在bash中再次执行bash命令,获取到的子bash进程,也没有登录动作,这个子bash进程同样是non-login shell。

2.login shell和non-login shell的区别

login shell和non-login shell的核心区别就是在获取shell时,读取的配置文件不同。

(1)login shell读取的配置文件

  • /etc/profile     该文件来设置系统的整体环境,通常是一些环境变量的配置。
  • ~/.bash_profile或~/.bash_login或~/.profile三者中的一个,该文件是用户个人设置

(2)non-login shell读取的配置文件

  • ~/.bashrc


首先,shell分为登录式shell和非登录时shell,两者的读取配置文件的顺序是不一样的.

登录式shell读取配置文件的顺序为 /etc/profile -> /etc/profile.d/*.sh -> ~/.bash.profile -> ~/.bashrc -> /etc/bashrc

非登录式shell读取配置文件的顺序为 ~/.bashrc ->/etc/bashrc -> /etc/profile.d/*.sh

/etc/profile 文件中设定的环境变量,运行的命令或脚本,针对所有用户有效

/etc/bashrc 文件中设定的本地变量,定义的别名,针对所有启动的shell程序的用户有效

这两个配置文件是全局的。

~/.bash_profile 作用跟/etc/profile是一样的,只不过针对的是某一个用户

~/.bashrc的作用跟/etc/bashrc也是一样的,只不过针对的也是某一个用户
/etc/profile
/etc/bashrc

~/.bashrc
~/.profile

/sbin/nologinlogin shell 和 no-login shell是不同的

特殊的shell——/sbin/nologin:

使用了这个 shell 的用户即使有了密码,你想要登入时他也无法登入,会出现如下的信息:

This account is currently not available.

我们所谓『无法登入』指的仅是:『这个使用者无法使用 bash 其他 shell 登入系统』而已, 并不是说这个账号就无法使用其他系统资源喔! 举例来说,各个系统账号,打印作业由 lp 这个账号在管理, WWW 务由 apache 这个账号在管理, 他们都可以行系统程序工作,但是『就是无法登入主机』而已啦!

 /etc/nologin.txt:可以代替上述内容显示在屏幕上,而不是预设的!!

/etc/passwd中可以修改某个账号的shell,默认是/bin/bash



补充:

$PATH:决定了shell将到哪些目录中寻找命令或程序,PATH的值是一系列目录,当您运行一个程序时,Linux在这些目录下进行搜寻编译链接

  编辑你的 PATH 声明,其格式为:

  PATH=$PATH:<PATH 1>:<PATH 2>:<PATH 3>:------:<PATH N>

  你可以自己加上指定的路径,中间用冒号隔开。环境变量更改后,在用户下次登陆时生效,如果想立刻生效,则可执行下面的语句:$ source .bash_profile

  需要注意的是,最好不要把当前路径 “./” 放到 PATH 里,这样可能会受到意想不到的攻击。完成后,可以通过 $ echo $PATH 查看当前的搜索路径。这样定制后,就可以避免频繁的启动位于 shell 搜索的路径之外的程序了。

 

1. 可用 export 命令查看PATH值

[root@localhost u-boot-sh4]# export
declare -x CVS_RSH="ssh"
declare -x DISPLAY=":0.0"
declare -x G_BROKEN_FILENAMES="1"
declare -x HISTSIZE="1000"
declare -x HOME="/root"
declare -x HOSTNAME="localhost"
declare -x INPUTRC="/etc/inputrc"
declare -x LANG="zh_CN.UTF-8"
declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
declare -x LS_COLORS="no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:"
declare -x MAIL="/var/spool/mail/root"
declare -x OLDPWD="/root"
declare -x PATH="/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"
declare -x PWD="/opt/STM/STLinux-2.3/devkit/sources/u-boot/u-boot-sh4"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"
declare -x TERM="xterm"
declare -x USER="root"
declare -x XAUTHORITY="/root/.xauthkSzH7b"

2. 单独查看PATH环境变量,可用:

[root@localhost u-boot-sh4]#echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

3. 添加PATH环境变量(临时),可用:

[root@localhost u-boot-sh4]#export PATH=/opt/STM/STLinux-2.3/devkit/sh4/bin:$PATH

再次查看:

[root@localhost u-boot-sh4]# echo $PATH
/opt/STM/STLinux-2.3/devkit/sh4/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

说明添加PATH成功。

上述方法的PATH 在终端关闭 后就会消失。

4. 永久添加环境变量(影响当前用户)

#vim ~/.bashrc
export PATH="/opt/STM/STLinux-2.3/devkit/sh4/bin:$PATH"
 
5.永久添加环境变量(影响所有用户)
vim /etc/profile
在文档最后,添加:
export PATH= "/opt/STM/STLinux-2.3/devkit/sh4/bin:$PATH"
保存,退出,然后运行:
# source /etc/profile

不报错则成功。

问题: 

1. 做了各实验,在/etc/profile, ~/.profile, ~/.bashrc中加入新PATH,重启都没有效果,只有使用source才可以,ubunt12.04

 找到原因,~/.zshrc导致的,因为在zshrc中直接对PATH重新赋值,而没有继承之前的$PATH,导致启动加载完/etc/profile后,PATH又被重新赋值。



版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/JackLiu16/article/details/78762291
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-06-13 16:31:15
  • 阅读 ( 918 )
  • 分类:Linux

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢