跳过导航链接 | |
退出打印视图 | |
在 Oracle Solaris 11.1 中管理用户帐户和用户环境 Oracle Solaris 11.1 Information Library (简体中文) |
本节介绍了以下信息:
设置用户的起始目录时,需要为用户的登录 shell 提供用户初始化文件。用户初始化文件是一个 shell 脚本,用来在用户登录系统之后为其设置工作环境。使用用户初始化文件基本上可以执行 shell 脚本所能完成的全部任务。但是,用户初始化文件的主要任务是定义用户工作环境的特征,如用户的搜索路径、环境变量和窗口环境。每个登录 shell 都有其自己的用户初始化文件,下表列出了这些文件。请注意,bash shell 和 ksh93 shell 的缺省用户初始化文件均为 /etc/skel/local.profile。
表 1-7 Bash 和 ksh93 用户初始化文件
|
您可以使用这些文件作为起点,之后修改这些文件,以创建可为所有用户提供通用工作环境的标准文件集。也可以修改这些文件,以便为不同类型的用户提供工作环境。
有关如何为不同类型的用户创建用户初始化文件集的逐步说明,请参见如何定制用户初始化文件。
用户初始化文件可以由管理员和用户进行定制。此重要任务可以通过位于集中位置且分布在全局的名为站点初始化文件的用户初始化文件来完成。使用站点初始化文件,可以不断向用户的工作环境中引入新功能,同时允许用户定制用户初始化文件。
如果您在用户初始化文件中引用站点初始化文件,那么,当用户登录系统时或者当用户启动新 shell 时,对于站点初始化文件进行的所有更新都将自动反映出来。站点初始化文件旨在将系统范围的更改分发到您在添加用户时未参与的用户工作环境中。
可以按照定制用户初始化文件的方式定制站点初始化文件。站点初始化文件通常驻留在一台或一组服务器上,并作为第一条语句出现在用户初始化文件中。而且,每个站点初始化文件都必须与引用它的用户初始化文件属于相同类型的 shell 脚本。
要在 bash 或 ksh93 用户初始化文件中引用站点初始化文件,请在用户初始化文件的开头位置插入类似以下内容的一行:
. /net/machine-name/export/site-files/site-init-file
请勿在用户初始化文件中添加对本地系统的具体引用。无论用户登录哪个系统,用户初始化文件中的指令均应为有效指令。
例如:
为了使用户的起始目录可在网络上的任何位置使用,请始终用变量 $HOME 引用起始目录。例如,使用 $HOME/bin,而不使用 /export/home/username/bin。当用户登录另一个系统时,$HOME 变量将会运行,从而自动挂载起始目录。
要访问本地磁盘上的文件,请使用全局路径名,如 /net/system-name/directory-name。由 /net/system-name 引用的任何目录都可以在用户所登录的系统上自动挂载(假设该系统运行的是 AutoFS)。
此 Oracle Solaris 发行版支持以下 shell 功能和行为:
在缺省情况下,系统将为在安装 Oracle Solaris 发行版时创建的用户帐户指定 GNU Bourne-Again Shell (bash)。
标准系统 shell (bin/sh) 现在是 Korn Shell 93 (ksh93)。
缺省的交互式 shell 是 Bourne-again (bash) shell (/usr/bin/bash)。
bash shell 和 ksh93 shell 都提供了命令行编辑功能,这意味着您可以在执行命令之前对其进行编辑。
您可以使用几种方式来显示缺省 shell 和路径信息:
使用 echo $SHELL 和 which 命令:
$ grep root /etc/passwd root:x:0:0:Super-User:/root:/usr/bin/bash $ echo $SHELL /usr/bin/bash $ which ksh93 /usr/bin/ksh93
使用 pargs 命令:
~$ pargs -l $$ /usr/bin/i86/ksh93
ksh93 shell 还包含名为 .sh.version 的内置变量,其可按如下方式显示:
~$ echo ${.sh.version} Version jM 93u 2011-02-08
要转到另一个 shell,请键入要使用的 shell 的路径。
要退出 shell,请键入 exit。
下表介绍了 Oracle Solaris 中支持的 shell 选项。
表 1-8 Oracle Solaris 发行版中的基本 Shell 功能
|
注 - 缺省情况下,Z Shell (zsh) 和增强的 C Shell (tsch) 不会安装在您的系统上。要使用这些 shell 中的任意一种 shell,必须先安装所需的软件包。
bash shell 和 ksh93 shell 都会记录您运行的所有命令的历史记录。此历史记录是按用户保留的,也就是说历史记录在各次登录会话之间是持续保留的,代表您所有的登录会话。
例如,如果您处于 bash shell 中,则可以显示已经运行的命令的完整历史记录,如下所示:
$ history 1 ls 2 ls -a 3 pwd 4 whoami . . .
要显示一定数目的以前命令,请在该命令中包括一个整数:
$ history 2 12 date 13 history
有关更多信息,请参见 history(1) 手册页。
bash shell 和 ksh93 shell 存储 shell 识别为环境变量的特殊变量信息。对于 bash shell,要查看当前环境变量的完整列表,请使用 declare 命令:
$ declare BASH=/usr/bin/bash BASH_ARGC=() BASH_ARGV=() BASH_LINEND=() BASH_SOuRCE=() BASH_VERSINFO=([0]=''3'' [1]=''2'' [2]=''25'' [3]=''1'' [4]=''release'' [5]'' . . .
对于 ksh93 shell,请使用 set 命令,此命令与 bash shell 的 declare 命令等效。
$ set COLUMNS=80 ENV='$HOME/.kshrc' FCEDIT=/bin/ed HISTCMD=3 HZ='' IFS=$' \t\n' KSH_VERSION=.sh.version LANG=C LINENO=1 . . .
要为任一 shell 输出环境变量,请使用 echo 或 printf 命令。例如:
$ echo $SHELL /usr/bin/bash $ printf ''$PATH\n'' /usr/bin:/usr/sbin
注 - 环境变量在各个会话之间不会持续存在。要设置在各次登录之间保持一致的环境变量,必须在 .bashrc 文件中进行相应的更改。
Shell 可以有两种类型的变量:
指定导出到由 shell 产生的所有进程的变量。export 命令用于导出变量。例如:
export VARIABLE=value
可以使用 env 命令显示这些设置。环境变量的子集(如 PATH)影响 shell 本身的行为。
指定仅影响当前 shell 的变量。
在用户初始化文件中,您可以通过更改预定义变量的值或指定其他变量来定制用户的 shell 环境。
下表提供了有关 Oracle Solaris 发行版中可用的 shell 和环境变量的更多详细信息。
表 1-9 Shell 变量和环境变量的说明
|
要定制 Bash Shell,请将信息添加到位于起始目录的 .bashrc 文件中。安装 Oracle Solaris 时创建的初始用户具有一个 .bashrc 文件,可设置 PATH、MANPATH 和命令提示符。有关更多信息,请参见 bash (1) 手册页。
MANPATH 环境变量指定 man 命令查找参考手册页的位置。MANPATH 是根据用户的 PATH 值自动设置的,但它通常包括 usr/share/man 和 usr/gnu/share/man。
请注意,用户的 MANPATH 环境变量可独立于 PATH 环境变量进行修改。与用户的 $PATH 中的目录关联的手册页位置不是必须具有一对一等效体。
当用户使用全路径执行命令时,shell 将使用该路径来查找此命令。但是,当用户仅指定命令名称时,shell 将按 PATH 变量指定的顺序在目录中搜索该命令。如果在一个目录中找到了该命令,shell 将执行该命令。
缺省路径由系统设置。但是,多数用户会通过修改该路径来添加其他命令目录。与设置环境和访问命令或工具的正确版本有关的许多用户问题都是路径定义错误引起的。
下面是设置有效 PATH 变量的一些准则:
如果您的路径中必须包括当前目录(.),应将其放置在最后。将当前目录包括在路径中存在安全风险,因为某些具有恶意的人员可能会将有危害性的脚本或可执行文件隐藏在当前目录中。请考虑改用绝对路径名。
搜索路径应尽可能短。Shell 会在该路径中搜索每个目录。如果未找到命令,搜索长目录会降低系统性能。
搜索路径的读取顺序是从左到右,因此,您应当将常用命令的目录放在路径的开头。
确保目录在路径中不重复。
尽可能避免搜索大型目录。将大型目录放在路径的末尾处。
将本地目录放在 NFS 挂载目录之前,以便减少在 NFS 服务器不响应时“挂起”的几率。此策略还会减少不必要的网络通信流量。
LANG 和 LC 环境变量可以为 shell 指定特定于语言环境的转换和约定。这些转换和约定包括时区、整理顺序、日期格式、时间格式、货币格式和数字格式。另外,还可以使用用户初始化文件中的 stty 命令来指示终端会话是否支持多字节字符。
LANG 变量为给定的语言环境设置所有可能的转换和约定。可以通过以下 LC 变量来分别设置本地化的多个方面:LC_COLLATE、LC_CTYPE、LC_MESSAGES、LC_NUMERIC、LC_MONETARY 和 LC_TIME。
注 - 缺省情况下,Oracle Solaris 11 仅安装基于 UTF-8 的语言环境。
下表介绍了核心 Oracle Solaris 11 语言环境的环境变量值。
表 1-10 LANG 和 LC 变量的值
|
示例 1-1 使用 LANG 变量设置语言环境
在 Bourne shell 或 Korn shell 用户初始化文件中,您将添加如下内容:
LANG=de_DE.ISO8859-1; export LANG
LANG-de_DE.UTF-8; export LANG
创建文件或目录时,为文件或目录指定的缺省文件权限由用户掩码进行控制。用户掩码由用户初始化文件中的 umask 命令设置。可以通过键入 umask 并按回车键来显示用户掩码的当前值。
用户掩码中包含下列八进制值:
第一位用来为用户设置权限
第二位用来为组设置权限
第三位用来为其他实体设置权限(又称作 world)
请注意,如果第一位是零,它将不显示出来。例如,如果用户掩码设置为 022,则将显示 22。
如需确定要设置的 umask 值,请用 666(对于文件)或 777(对于目录)减去所需的权限值。差值就是要用于 umask 命令的值。例如,假设您希望将文件的缺省模式设置为 644 (rw-r--r--),666 与 644 的差值 022 就是将用作 umask 命令参数的值。
还可以使用下表来确定要设置的 umask 值。下表显示了为 umask 的每个八进制值创建的文件权限和目录权限。
表 1-11 umask 权限的值
|
用户初始化文件中的下行用来将缺省的文件权限设置为 rw-rw-rw-。
umask 000
下面是 .profile 用户初始化文件的示例。您可以使用此文件定制自己的用户初始化文件。此示例使用了修改特定站点时将需要的系统名称和路径。
示例 1-2 .profile 文件
(Line 1) PATH=$PATH:$HOME/bin:/usr/local/bin:/usr/gnu/bin:. (Line 2) MAIL=/var/mail/$LOGNAME (Line 3) NNTPSERVER=server1 (Line 4) MANPATH=/usr/share/man:/usr/local/man (Line 5) PRINTER=printer1 (Line 6) umask 022 (Line 7) export PATH MAIL NNTPSERVER MANPATH PRINTER
定义用户的 shell 搜索路径。
设置用户邮件文件的路径。
定义用户的时间/时钟服务器。
定义用户的手册页搜索路径。
定义用户的缺省打印机。
设置用户的缺省文件创建权限。
设置所列出的环境变量。