版主
主题
回帖0
积分10609
阅读权限200
注册时间2008-11-22
最后登录1970-1-1
在线时间 小时
|
+ V0 p% T l6 H1 ?1 k- G/ y两个重要的profile文件2 j1 {2 n, L1 F3 b5 ~6 ?' J
在UNIX/Xenix系统中有两个对用户而言必不可少的文件——etc目录下的profile文件和9 V3 o& Y h( M
用户主目录($HOME)下的.profile文件。前者是系统文件,对系统下全体用户起作用,后者是! T0 `5 u8 L% O4 a4 |5 Z
用户自己的"私人"文件。
; K: m- A$ F$ t1 `0 M4 u这两个文件的功能类似于DOS系统下的Autoexec.bat文件,不同之处在于Autoexec.bat文
. s8 Y! ]- S# Z' u6 ~8 @& H8 g件可以为空,而这两个文件内容不仅不能为空,而且必须存在。它们在用户登录(Login注册)" q: P& l0 `& A3 R+ a
时,被系统自动执行,为用户设置工作环境,若使用得当,可发挥强大作用。
. A9 j6 `9 A. z2 Letc目录下的profile文件是每一个用户登录时,操作系统首先执行的文件,然后再将控制
( s v! B5 H3 m' g4 k5 U* d权交给用户主目录下的.profile文件,当系统给出主提示符($PS1)后,用户就可以开始自己的
" ]" T! ^6 T- v3 ^+ p工作了。以上全过程对用户而言是透明的。$ d8 i1 b2 J2 H( o3 X1 y1 \. ?. r
/etc/profile文件的主要功能包括:显示UNIX/Xenix版本信息或者系统专用应用程序的9 Q9 e' K6 b( }3 T x/ u# `" g
提示信息,设置掩码(umask),对终端和邮箱(mail box)进行处理,对非root用户禁止使用new" s- V# `' \3 G8 d- d- L0 G' g& F
s命令等。, n7 K+ q4 ~$ e$ g6 s& t2 j
因为/etc/profile文件的作用范围是全体用户,所以非共性的设置应放在用户自己的.p& u2 P: A4 @+ M1 ]+ N, Y" E" ^) h7 _* `0 D
rofile文件中。下面就详细讲述.profile文件。
4 n3 P% F8 |8 ]7 S1 `! N7 T.profile是隐含文件,普通的列目录命令(l、ls、lf,ls-l等)显示不出该文件。UNIX/X/ h3 j ~6 C- W0 E# J
enix系统所有隐文件前都有"."符。* o- h6 P; Q1 t# l
显示UNIX/Xenix系统中的隐含文件属性用以下命令:
3 W! w: A4 {) b' m' ]# C( C$l - a
3 Z1 D; h3 y' ] m$ m6 q原始的.profile文件是系统管理员使用Sysadmsh命令或mkdev user命令创建用户时,系
, t& v" O. c5 R0 I9 V; s统为该用户自动生成的,用户可使用vi编辑该文件为自己所用。.profile文件产生的效用直0 u; Z8 e% q3 i* P4 B
至用户退出系统后才消失,而当用户重新登录时,又开始发挥作用。) e7 {. s% O w/ y, U" g1 m0 @* H
设置终端类型
1 T# K$ C1 P" {$ Q用户使用UNIX/Xenix系统时可能会遇到这样一个现象:每次登录后,系统会要求用户敲入
% E: z/ \6 N/ `1 P! U/ j. T终端类型,然后在用户输入相应信息后,才给出提示符。这是为什么呢? P; y, y. {0 X) M) \2 Q
原来在原始.profile文件中有这样一个语句:
0 K( G; l0 q: Q% x: geval ‘test -m ansi:ansi -m:${TERM:ansi}-r -s -Q’2 P4 a' I! Q% K* c5 }& h7 l
该语句的作用是要求用户敲入所使用终端的类型并进行测试。0 Q4 M5 e+ Z2 N
如果我们在.profile文件中加入以下命令:
9 G" ]$ L- n9 I1 B X9 ^+ ^TERM=terminal-name m, N0 E. ?& d% n& K3 L
TERM变量指明终端类型。7 j$ S, c' C. P* }0 `
如:TERM=vt100,并且注释掉eval语句。这样处理以后,用户再注册时,就无需敲入终端类
F6 U/ r0 H- t2 H9 o: X4 D" ^0 s# i型了。
. K) G% x) }: k1 C% |定义PATH变量
p3 Z& I, S3 ?: L1 \) N该变量类似于DOS系统的PATH变量,其格式如下:+ f. a- u3 I) ?+ [; ~1 v, o
PATH=$PATH:$HOME/bin:/usr/informix/bin:.; Y% b% i1 W% t* `; Z7 x
说明:# W! |# a F. o; X3 Z' d
0 `% W4 O5 C! S2 \5 {3 I1.该语句未尾的"·"表示当前路径,不可缺少;
5 g1 m. A8 o! h6 a1 g
, j0 M/ h* V, \. P2.不同路径间用":"隔开;3 q1 F$ U. K. F/ r+ T3 M# r
, H" c+ W) S5 Y2 f3.$PATH是系统中提供的默认变量,其初始值为/bin:/usr/bin;
: W3 B& ]8 `! [' Q* p* d1 x
% S/ Q; Y7 n) I+ H& i( }4.路径的顺序是很重要的,前后次序不宜随便颠倒。比如用户自编了一个与系统命* D! {9 [2 \' P% X9 R5 w
令同名的可执行文件,并将其放在$HOME下,并且打算使用这个命令而不是系统提供的同
/ V5 y, }! P! O; ^名命令,那么PATH应设置为:% r0 V1 ]" T. d2 O0 K3 i
PATH=$HOME/bin:$PATH:/usr/informix/bin:.( `/ i6 E' m4 y7 U: G6 t$ J
因为,若不同路径下有相同的命令或可执行文件,则以第一个路径下的为准。这时,SHEL5 \/ b- @% _2 o$ p4 A; y0 u, X
L先搜索$HOME/bin路径,发现其下的这个可执行文件,就为用户调用,而不会再运行/bin或者
- u, J- O& _1 ]/usr/bin下的标准同名命令了。
* N0 f+ }" r% \+ p! F设置提示符1 z! s, {- Y& s2 s6 o2 \
用户可以将PS1(主提示符)、PS2(辅助提示符)改为更受欢迎的形式。通常情况下,以超, i/ s0 [6 h# L; W! i3 b
级用户登录时,主提示符为"#",其它用户为"$",PS2一般为"<"。修改提示符的方法如下:
* I$ \$ c% O0 ]" ?格式:PS1="$LOGNAME> "7 q: ? |. w" }& v/ o
说明:将主提示符由默认值改为用户注册名。4 @ Y7 Y' p$ [
使用stty命令重设终端配置/ r2 P0 Z' n$ o( t3 v
5 G4 K% k% H% L: D' r8 K2 g2 G+ ?1.对数据传输方式进行设置8 q/ ~& [% {) Y
如:对奇偶校验位、波特率(bps)大小、停止位位数进行重新设置。% y. o* b! K! I% c% R
8 M) A: c9 X9 V3 d" T% D3 U2.字符处理
, x( n: b% K2 G" W* }: Q' }例1:stty nl
& @9 r! }$ z2 n' D I系统只接受字符作为换行符。
7 u8 }, }/ i9 |$ r例2:stty-nl
4 p: h" y0 I- y5 W% e: a9 P系统以(RETURN)字符做为换行符。
- m6 \& D1 l6 Z- w n例3:stty echo! s a* d% u5 u7 A- u/ J
置击键后屏幕回显。; {' J c$ e# f& [$ G+ Q
例4:stty-echo$ O G. W( u) f" r1 \
置击键后,屏幕无显示方式。: X4 N# A; x% ?7 ?, C; y3 X
6 k+ _* M! B4 r# x) ?3.特殊键定义
0 j# i9 D2 q( l" j例1:/ v$ |4 x; w7 g9 {% D
stty erase escape #置抹除键(erase)为escape键% v& t& U4 v; U1 L
重置抹除键键值,缺省值为"#"。
# z; Y. z- K8 O8 j5 f: i# X例2:
# z2 ]+ [ e% L4 Ustty kill delete #置删行符(kill)为delete键
9 |3 m, A8 Q3 `4 C4 E重置删行符,缺省值为"@"。
J+ Z! [( H0 Q5 }* `例3:
/ Q: u( E9 G( Y- Estty eof ctrl-D #置文件结束符(eof)为ctr-D键7 c* Q) l! i) O; K' I& O
重置文件结束符。/ S0 h, Z* y" @! S. }5 P) z% h
例4:2 F3 t8 ^9 n9 s
stty intr ctrl-C #中断键可中止系统中绝大多数前台进程,是很重要的终端参数0 |% F3 g$ Z' j9 [- s
重置终端中断键为ctrl-C键。
' X7 b" T$ E8 \
- C4 o" i) q `. D4.其它常用stty命令; u9 ?/ S! `2 y7 q3 O1 A {
例1:stty sane ctrl-J
W2 {2 x# a7 i4 l. |若终端功能发生紊乱,可用该命令来重置终端设置,使之恢复其出厂参数。该命令以"ct
7 @- M! v. I- t7 mrl-J"作为行结束符,因为在终端参数紊乱的情况下,RETURN键的功能很可能已经失效,而ctr- ~4 A, c- `0 v4 o
l-J命令是系统提供的强行回车键,在绝大多数情况下不会失效。/ i9 G! \. e9 M( b# r
例2:stty -a' {( ?/ j0 d9 W& K: a
该命令可以显示出终端的所有参数。
' G9 L" s) g- j& ]; e2 @7 `以上stty命令是UNIX系统提供的,可随时使用,用户可据自己的需要在.profile文件中设0 o# w" x* }* ]4 F; z: p0 a
定。
' J/ r8 a6 T5 O用户自定义SHELL变量
/ z3 n& F/ l/ w) Y, L用户自定义SHELL变量是很有用的,使用情况也很广泛。其功能有些类似于C语言的宏定
$ \. y- L7 i% L8 p义(#define)。最常见的情况是将自己常去的而且很深的路径自定义为一个固定变量,放在.
" m0 y9 @( i* ]# K2 lprofile文件中。
' q- [ q1 o! s+ j+ a9 O3 M% m5 {如:ML=/usr/work/source/firstml/secoudml! W N( }' b: m* F% s
这时,若用户在主提示符($PS1)下键入:) @* z! {# H# B# e. ]! @
$>cd $ML
5 ~2 z* s+ U8 x n! S1 E' Y% {, M$>pwd # 显示当前路径
& Q) Y" b7 x8 {. G( ~屏幕显示当前路径为:/usr/work/source/firstml/secondml。+ \; P% T& W, c% v! W* R+ X
需注意的是:无论使用SHELL专用变量还是自定义变量,均需在变量(大写拼写)前加上"$
- y. ]1 \# m. I7 P4 Y6 k" @"符。并且,在定义完所有变量后,需在.profile中使用export语句,它的作用是将变量设置在0 J" Z1 l3 e7 f$ t
SHELL环境中,以在任意路径下使用。/ q1 q/ _9 r# A
如:export SHELL ML TERM PATH MAIL PS1# X+ W1 b; S8 Z6 @5 k
使用Shell内部命令
; _) ~+ r9 K {% h# I用户可在.profile文件内使用SHELL内部命令和操作系统命令,Shell常用命令见下表。
2 ?4 N, l# D3 \' d: R@@28173000.GIF;表1@@$ @0 A3 L, u( S% R I- _
.profile文件在Client/Server结构中的应用, W- Y0 @, Z; P1 ~1 J9 d
在Client/Server结构下,Server总是时刻在运行的,不断地接收Cleint发来的请求,处理
! T( G" ^1 N; U* f4 q9 p# B8 e完后向Client发回某些信息。我们指定由server用户来启动server守候进程,特别需要注意, e8 P9 _+ R3 k/ r. {! X4 o7 U C
的是,该进程的父进程需设为系统起始进程(init进程),脱离所属终端。否则当server用户从; |: @' U% m/ h/ W @4 p, E
该终端退出后,该进程就变成了无法控制的"僵尸"进程。
8 {) y R' v5 Z! |) {4 X因此,在server用户的.profile文件中加上如下设置:
' G0 F0 m3 f8 z/ h' W+ a$HOME/bin/server >>/tmp/server.tmp 2> &1
5 |( d( R* @. n+ j. k7 X+ G说明:3 r) k/ y5 B3 V9 @9 Y5 X0 I- v
) E! M- b U9 R: k: s5 g
1."&"符号的作用是使系统将进程作为后台进程处理。7 f$ P8 w: ?; ]) Y
: n8 e* t& w* U' z
2."2"的作用。
0 j7 E7 T! B% n! h6 ]8 u/ jSHELL在执行一个UNIX命令时,自动打开三个文件:stdin(标准输入)、stdout(标准输出
* ^0 X; j0 _5 H3 x- Q)、stderr(标准错误),文件描述字分别是0、1、2。所以,上面语句中的"2"表示标准错误的- b/ F- z E' i( m: n1 V
文件描述字。将server进程的错误信息重定向到/tmp/sever.tmp文件中,而不是stdout上,这
1 U+ S0 o7 D3 Q样处理后既不会干扰前台工作,而且用户可随时浏览/tmp/server.tmp文件及时发现错误,便
( c0 |1 e) U) ^. L, l2 J; I4 w于程序调试,一举两得。对于后台进程,一般都要将其结果重定向到某固定文件中。
. [* K( N0 Z& b Y3 H: a2 j" L
3 y) S. ?0 L4 g3.由于UNIX系统是多用户、多任务、分时处理系统,所以不排除许多用户以server用户% d, z3 a$ o7 n! ?
注册,因此其.profile文件会被执行许多次,因之server进程也会被启动许多次,这种情况是
! f4 Y+ k( }. C" k8 p% Z! H; t有害的,所以我们作以下修改:) a5 Y0 S- ~8 [% |% d) }9 J0 |' l
if ps -ef| grep "server" >/dev/null) q! a6 s" L _8 q* |
then echo"server already running……"
0 r2 V# y) |3 X! O0 J1 w) t ]else2 v" X* j6 U' m0 t
echo "server is running..."
p5 M1 f' Z, ]$HOME/bin/server >> /tmp/server.tmp 2>&1
# w% h7 C- R8 x4 p Vsleep 5
/ r# y8 d( Y0 S3 Mfi7 o3 u& C1 u/ }* n* i+ ?2 a' c/ c& |
对所有UNIX/Xenix系统守侯进程都可按上述处理。
8 w* d( ]* V3 \8 G- v6 z0 K* `) u* S G. x2 i5 L
|
|