近日,在捣鼓Linux下的PATH变量设置,起因是直接执行service命令不行,找不到这个命令,必须加上/sbin,不爽,顾解决之。这一弄,还真学了不少东西。
首先,Linux 下加载用户的设置是有顺序的,根据不同的shell 类型,读取的文件名称有所不同,下图以bash shell为例:
到这里有两个概念:(1)shell 类型 (2)登陆/非登陆 交互/非交互shell
1 shell 类型
Linux Shell的种类很多,目前流行的Shell包括ash、bash、ksh、csh、zsh等,用户可以通过查看/etc/shells 文件中的内容来查看自己主机中当前有哪些种类的Shell,命令如下(下面是在笔者Linux 主机中查看信息的结果):
-
# cat /etc/shells - /bin/sh
- /bin/bash
- /sbin/nologin
- /bin/bash2
- /bin/ash
- /bin/bsh
- /bin/tcsh
- /bin/csh
使用下面的命令来查看Linux 当前正在使用的Shell 类型:
# echo $SHELL
详细的介绍可参考http://book.51cto.com/art/201106/271627.htm2 登陆/非登陆 交互/非交互shell
首先,这是两个不同的维度来划分的,一个是是否交互式,另 一个是是否登录。
交互式shell和非交互式shell
交互式模式就是shell等待你的输入, 并且立即执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签 退后,shell也终止了。
shell也可以运行在另外一种模式:非交互式模式,以shell script(非交互)方式执行。在这种模式 下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。
chinaunix 论坛中关于登录shell与非登录shell、交互式shell与非交互式Shell的讨论:
Login Shell:当init3时,mingetty spawn出登录提示符的时候,你输入帐号和密码进入了,出现了shell提示符,这个过程就是登录外壳;
Interactive Shell:接下来你得到了一个像root@host />这样的提示符,你输入什么,它就解释出什么,这就是交互式外壳;你在当前Shell又fork了一个shell(bash),这个bash也是 交互式外壳。通常情况下interactive shell是login shell派生出来的。
Non Interactive Shell:你可能需要学习写一个bash script,用外部shell执行:bash script.sh,它(bash)从第一条命令执行到最后一条然后退出,不与你进行任何交互,它就是 非交互式外壳。
交互式非登录shell就是指你在Gnome图形界面中打开“终端”出来的那种窗口程序,
和登录shell 相比,它是“非登录”的,你并不需要输入用户名和密码,
和非交互式shell相比,这是“交互式”的,就像你说的那它:你输入什么,它就解释出什么
执行exit退出非登录shell状 态;
执行logout退出登录shell状态。
在登录shell里,确实只读取/etc/profile和~ /.bash_profile, ~/.bash_login, and ~/.profile按顺序最先的一个,并执行其中的命令。除非被 --noprofile选项禁止了;
在非登录shell里,确实只读取 /etc/bash.bashrc和~/.bashrc
根据shell 类型,如果是bash shell, 修改用户主目录下的$HOME/.bashrc(实际上.bash_profile调用的),
末尾加
PATH=$PATH:/sbin/
export PATH
如果是ksh shell,修改用户主目录下的$HOME/.profile,
末尾加
PATH=$PATH:/sbin/
export PATH
3 Linux 下的隐藏文件
Linux 下的隐藏文件,已"."开始,可通过ls -a 命令查看;
创建隐藏文件 vi .aaaa, 加权限 和普通文件没区别,不过,要看文件权限等信息,要转成非隐藏文件,通过命令 mv .aaaa aaaaa, ls -lrt aaaa,
mv aaaa .aaaa//再转成隐藏文件
4 Linux用户环境变量
环境变量就是系统或软件设置的一些参数,用户环境变量就是用户登录系统后,都有自已专用的运行环境。在Windows系统中用户环境变量保存在用户家目录,Linux也是同样的。本文主要是讲解Linux常用的环境变量和环境变量的设置。
一、环境变量相关操作(只应用于当前,要永久保存需要写入到相关文件。)
#echo $PATH
显示PATH设置。
#env
显示当前用户变量。
#set
显示当前Shell变量。
#export
显示当前导出成用户变量的shell变量。
#a=abc
定义一个Shell变量。
#export a=abc
定义一个Shell变量,并导出成用户变量。
#unset a
清除环境变量
#readonly a
设置只读环境变量
二、常见的环境变量
PATH 决定了shell将到哪些目录中寻找命令或程序
HOME 当前用户主目录
HISTSIZE 历史记录数
LOGNAME 当前用户的登录名
HOSTNAME 指主机的名称
SHELL 前用户Shell类型
LANGUGE 语言相关的环境变量,多语言可以修改此环境变量
MAIL 当前用户的邮件存放目录
PS1 基本提示符,对于root用户是#,对于普通用户是$
PS2 附属提示符,默认是“>”
三、Linux环境变量设置文件
/etc/profile
全局用户,应用于所有的Shell。
/$HOME/.profile
当前用户,应用于所有的Shell。
/etc/bash_bashrc
全局用户,应用于Bash Shell。
~/.bashrc
局部当前,应用于Bash Sell。
参考自:
http://www.51testing.com/html/38/225738-216858.html
http://hi.baidu.com/inbi_/item/210fd6fd8b89471de3e3bd3d
http://www.2cto.com/os/201301/184129.html