
profile
-
2023年2月12日发(作者:)Linuxetcprofile⽂件详解
Linux/etc/profile⽂件的改变会涉及到系统的环境,也就是有关Linux环境变量的东西,学习Linux要了解Linuxprofile⽂件的相关原理,这⾥对则以⽂件进⾏
具体分析。这⾥修改会对所有⽤户起作⽤。
1、Linux是⼀个多⽤户的操作系统。每个⽤户登录系统后,都会有⼀个专⽤的运⾏环境。通常每个⽤户默认的环境都是相同的,这个默认环境实际上就是
⼀组环境变量的定义。⽤户可以对⾃⼰的运⾏环境进⾏定制,其⽅法就是修改相应的系统环境变量。
2、常在/etc/profile⽂件中修改环境变量,在这⾥修改的内容是对所有⽤户起作⽤的。以下主要操作将在该⽂件中进⾏。
3、如何添加环境变量。
例如添加”NAME=liheng“。在profile⽂件的最后添加如下内容exportNAME=liheng
变量值liheng可以加引号也可以不加,效果⼀样。
4、在profile⽂件添加或修改的内容需要注销系统才能⽣效。
5、重复定义变量怎样理解。
经常出现的是对PATH变量的定义。
例如:在peofile⽂件默认对PATH变量都有设置PATH=¥¥¥¥¥¥¥(记不住了),在以后可能在对PATH设置,⼀般都加在profile⽂件的最后
PATH=······(打个⽐⽅)。⽽系统之中认定的PATH=·······¥¥¥¥¥¥¥¥¥,也就是说相同名字的环境变量,后写⼊的先起作⽤(通俗
地讲)。⼤家⼀定要注意。
6、特殊字符介绍。
例如在profile中有如下内容,通过以下内容说明特殊符号的⽤法。
exportA=/q/jing:aaa/cc/ld
exportB=.:/liheng/wangexportA=/cd/cdr:$A
⼤家注意红⾊的符号:
:表⽰并列含义,例如A变量值有多个,⽤:符号进⾏分离。
.表⽰你操作的当前⽬录。例如pap命令会查找B环境变量。
在/home键⼊pap命令,系统⾸先在/home⽬录下(即当前路径)查找关于B的内容,\">如果没有在/liheng/wang⽬录
下查找关于B的内容。$表⽰该变量本次定义之前的值,例如$A代表/q/jing:aaa/cc/ld。也就是说A=/cd/cdr:/q/jing:aaa/cc/ld
7、使⽤env命令显⽰所有的环境变量。在命令提⽰符下键⼊env就⾏了。
set命令显⽰所有本地定义的Shell变量。
8、常见的环境变量
PATH:决定了shell将到哪些⽬录中寻找命令或程序
HOME:当前⽤户主⽬录
MAIL:是指当前⽤户的邮件存放⽬录。
SHELL:是指当前⽤户⽤的是哪种Shell。
HISTSIZE:是指保存历史命令记录的条数。
LOGNAME:是指当前⽤户的登录名。
HOSTNAME:是指主机的名称,许多应⽤程序如果要⽤到主机名的话,通常是从这个环境变量中来取得的。
LANG/LANGUGE:是和语⾔相关的环境变量,使⽤多种语⾔的⽤户可以修改此环境变量。
PS1:是基本提⽰符,对于root⽤户是#,对于普通⽤户是$。
PS2:是附属提⽰符,默认是“>”。可以通过修改此环境变量来修改当前的命令符,⽐如下列命令会将提⽰符修改成字符串“Hello,MyNewPrompt:)
”。
#PS1=”Hello,MyNewPrompt:)“
9、使⽤修改.bashrc⽂件(在⽤户的家⽬录下)进⾏环境变量的编辑,只对当前⽤户有⽤。使⽤修改/etc/profile⽂件进⾏环境变量的编辑,是对所有⽤
户有⽤。⼤家⼀定要注意区别。
10、Linuxprofile⽂件在系统启动时将被运⾏。⼤家可以在⾥⾯加⼊其他命令,但是⼀定要加正确,不然的话系统会启动不起来的。
两个重要的profile⽂件
在UNIX/Xenix系统中有两个对⽤户⽽⾔必不可少的⽂件——etc⽬录下的profile⽂件和
⽤户主⽬录($HOME)下的.profile⽂件。前者是系统⽂件,对系统下全体⽤户起作⽤,后者是
⽤户⾃⼰的\"私⼈\"⽂件。
这两个⽂件的功能类似于DOS系统下的⽂件,不同之处在于⽂
件可以为空,⽽这两个⽂件内容不仅不能为空,⽽且必须存在。它们在⽤户登录(Login注册)
时,被系统⾃动执⾏,为⽤户设置⼯作环境,若使⽤得当,可发挥强⼤作⽤。
etc⽬录下的profile⽂件是每⼀个⽤户登录时,操作系统⾸先执⾏的⽂件,然后再将控制
权交给⽤户主⽬录下的.profile⽂件,当系统给出主提⽰符($PS1)后,⽤户就可以开始⾃⼰的
⼯作了。以上全过程对⽤户⽽⾔是透明的。
/etc/profile⽂件的主要功能包括:显⽰UNIX/Xenix版本信息或者系统专⽤应⽤程序的
提⽰信息,设置掩码(umask),对终端和邮箱(mailbox)进⾏处理,对⾮root⽤户禁⽌使⽤new
s命令等。
因为/etc/profile⽂件的作⽤范围是全体⽤户,所以⾮共性的设置应放在⽤户⾃⼰的.p
rofile⽂件中。下⾯就详细讲述.profile⽂件。
.profile是隐含⽂件,普通的列⽬录命令(l、ls、lf,ls-l等)显⽰不出该⽂件。UNIX/X
enix系统所有隐⽂件前都有\".\"符。
显⽰UNIX/Xenix系统中的隐含⽂件属性⽤以下命令:
$l-a
原始的.profile⽂件是系统管理员使⽤Sysadmsh命令或mkdevuser命令创建⽤户时,系
统为该⽤户⾃动⽣成的,⽤户可使⽤vi编辑该⽂件为⾃⼰所⽤。.profile⽂件产⽣的效⽤直
⾄⽤户退出系统后才消失,⽽当⽤户重新登录时,⼜开始发挥作⽤。
设置终端类型
⽤户使⽤UNIX/Xenix系统时可能会遇到这样⼀个现象:每次登录后,系统会要求⽤户敲⼊
终端类型,然后在⽤户输⼊相应信息后,才给出提⽰符。这是为什么呢?
原来在原始.profile⽂件中有这样⼀个语句:
eval‘test-mansi:ansi-m:${TERM:ansi}-r-s-Q’
该语句的作⽤是要求⽤户敲⼊所使⽤终端的类型并进⾏测试。
如果我们在.profile⽂件中加⼊以下命令:
TERM=terminal-name
TERM变量指明终端类型。
如:TERM=vt100,并且注释掉eval语句。这样处理以后,⽤户再注册时,就⽆需敲⼊终端类
型了。
定义PATH变量
该变量类似于DOS系统的PATH变量,其格式如下:
PATH=$PATH:$HOME/bin:/usr/informix/bin:.
说明:
1.该语句未尾的\"·\"表⽰当前路径,不可缺少;
2.不同路径间⽤\":\"隔开;
3.$PATH是系统中提供的默认变量,其初始值为/bin:/usr/bin;
4.路径的顺序是很重要的,前后次序不宜随便颠倒。⽐如⽤户⾃编了⼀个与系统命
令同名的可执⾏⽂件,并将其放在$HOME下,并且打算使⽤这个命令⽽不是系统提供的同
名命令,那么PATH应设置为:
PATH=$HOME/bin:$PATH:/usr/informix/bin:.
因为,若不同路径下有相同的命令或可执⾏⽂件,则以第⼀个路径下的为准。这时,SHEL
L先搜索$HOME/bin路径,发现其下的这个可执⾏⽂件,就为⽤户调⽤,⽽不会再运⾏/bin或者
/usr/bin下的标准同名命令了。
设置提⽰符
⽤户可以将PS1(主提⽰符)、PS2(辅助提⽰符)改为更受欢迎的形式。通常情况下,以超
级⽤户登录时,主提⽰符为\"#\",其它⽤户为\"$\",PS2⼀般为\"<\"。修改提⽰符的⽅法如下:
格式:PS1=\"$LOGNAME>\"
说明:将主提⽰符由默认值改为⽤户注册名。
使⽤stty命令重设终端配置
1.对数据传输⽅式进⾏设置
如:对奇偶校验位、波特率(bps)⼤⼩、停⽌位位数进⾏重新设置。
2.字符处理
例1:sttynl
系统只接受字符作为换⾏符。
例2:stty-nl
系统以(RETURN)字符做为换⾏符。
例3:sttyecho
置击键后屏幕回显。
例4:stty-echo
置击键后,屏幕⽆显⽰⽅式。
3.特殊键定义
例1:
sttyeraseescape#置抹除键(erase)为escape键
重置抹除键键值,缺省值为\"#\"。
例2:
sttykilldelete#置删⾏符(kill)为delete键
重置删⾏符,缺省值为\"@\"。
例3:
sttyeofctrl-D#置⽂件结束符(eof)为ctr-D键
重置⽂件结束符。
例4:
sttyintrctrl-C#中断键可中⽌系统中绝⼤多数前台进程,是很重要的终端参数
重置终端中断键为ctrl-C键。
4.其它常⽤stty命令
例1:sttysanectrl-J
若终端功能发⽣紊乱,可⽤该命令来重置终端设置,使之恢复其出⼚参数。该命令以\"ct
rl-J\"作为⾏结束符,因为在终端参数紊乱的情况下,RETURN键的功能很可能已经失效,⽽ctr
l-J命令是系统提供的强⾏回车键,在绝⼤多数情况下不会失效。
例2:stty-a
该命令可以显⽰出终端的所有参数。
以上stty命令是UNIX系统提供的,可随时使⽤,⽤户可据⾃⼰的需要在.profile⽂件中设
定。
⽤户⾃定义SHELL变量
⽤户⾃定义SHELL变量是很有⽤的,使⽤情况也很⼴泛。其功能有些类似于C语⾔的宏定
义(#define)。最常见的情况是将⾃⼰常去的⽽且很深的路径⾃定义为⼀个固定变量,放在.
profile⽂件中。
如:ML=/usr/work/source/firstml/secoudml
这时,若⽤户在主提⽰符($PS1)下键⼊:
$>cd$ML
$>pwd#显⽰当前路径
屏幕显⽰当前路径为:/usr/work/source/firstml/secondml。
需注意的是:⽆论使⽤SHELL专⽤变量还是⾃定义变量,均需在变量(⼤写拼写)前加上\"$
\"符。并且,在定义完所有变量后,需在.profile中使⽤export语句,它的作⽤是将变量设置在
SHELL环境中,以在任意路径下使⽤。
如:exportSHELLMLTERMPATHMAILPS1
使⽤Shell内部命令
⽤户可在.profile⽂件内使⽤SHELL内部命令和操作系统命令,Shell常⽤命令见下表。
@@;表1@@
.profile⽂件在Client/Server结构中的应⽤
在Client/Server结构下,Server总是时刻在运⾏的,不断地接收Cleint发来的请求,处理
完后向Client发回某些信息。我们指定由server⽤户来启动server守候进程,特别需要注意
的是,该进程的⽗进程需设为系统起始进程(init进程),脱离所属终端。否则当server⽤户从
该终端退出后,该进程就变成了⽆法控制的\"僵⼫\"进程。
因此,在server⽤户的.profile⽂件中加上如下设置:
$HOME/bin/server>>/tmp/2>&1
说明:
1.\"&\"符号的作⽤是使系统将进程作为后台进程处理。
2.\"2\"的作⽤。
SHELL在执⾏⼀个UNIX命令时,⾃动打开三个⽂件:stdin(标准输⼊)、stdout(标准输出
)、stderr(标准错误),⽂件描述字分别是0、1、2。所以,上⾯语句中的\"2\"表⽰标准错误的
⽂件描述字。将server进程的错误信息重定向到/tmp/⽂件中,⽽不是stdout上,这
样处理后既不会⼲扰前台⼯作,⽽且⽤户可随时浏览/tmp/⽂件及时发现错误,便
于程序调试,⼀举两得。对于后台进程,⼀般都要将其结果重定向到某固定⽂件中。
3.由于UNIX系统是多⽤户、多任务、分时处理系统,所以不排除许多⽤户以server⽤户
注册,因此其.profile⽂件会被执⾏许多次,因之server进程也会被启动许多次,这种情况是
有害的,所以我们作以下修改:
ifps-ef|grep\"server\">/dev/null
thenecho\"serveralreadyrunning……\"
else
echo\"serverisrunning...\"
$HOME/bin/server>>/tmp/2>&1
sleep5
fi
对所有UNIX/Xenix系统守侯进程都可按上述处理。