Customizing a User's Work Environment

Part of setting up a user's home directory is providing user initialization files
for the user's login shell. A user initialization file is a shell script that sets up
a work environment for a user after the user logs in to
a system. Basically, you can perform any task in a user initialization file
that you can do in a shell script. However, a user initialization file's
primary job is to define the characteristics of a user's work environment, such
as a user's search path, environment variables, and windowing environment. Each login shell has
its own user initialization file, or files, which are listed in the following
table. Note that the default user initialization file for both the bash and
ksh93 shells is /etc/skel/local.profile.

Table 1-7 Bash and ksh93 User Initialization Files

Shell

User Initialization File

Purpose

bash

$HOME/.bash_profile

$HOME/.bash_login

$HOME/.profile

Defines the user's environment at login

ksh93

/etc/profile

$HOME/.profile

Defines the user's environment at login

$ENV

Defines user's environment at login in
the file and is specified by the Korn shell's ENV environment variable

You can use these files as a starting point and then modify them
to create a standard set of files that provide the work environment common
to all users. You can also modify these files to provide the
working environment for different types of users.

Using Site Initialization Files

The user initialization files can be customized by both the administrator and the
user. This important task can be accomplished with centrally located and globally distributed
user initialization files that are called, site initialization files. Site initialization files enable you to continually
introduce new functionality to the user's work environment, while enabling the user to
customize the user's initialization file.

When you reference a site initialization file in a user initialization file, all
updates to the site initialization file are automatically reflected when the user logs
in to the system or when a user starts a new shell.
Site initialization files are designed for you to distribute site-wide changes to users' work
environments that you did not anticipate when you added the users.

You can customize a site initialization file the same way that you
customize a user initialization file. These files typically reside on a server, or
set of servers, and appear as the first statement in a user initialization
file. Also, each site initialization file must be the same type of shell
script as the user initialization file that references it.

To reference a site initialization file in a bash or ksh93 user initialization
file, place a line at the beginning of the user initialization file similar
to the following line:

. /net/machine-name/export/site-files/site-init-file

Avoiding Local System References

Do not add specific references to the local system in the user initialization
file. The instructions in a user initialization file should be valid, regardless of
which system the user logs into.

For example:

To make a user's home directory available anywhere on the network, always refer to the home directory with the variable $HOME. For example, use $HOME/bin instead of /export/home/username/bin. The $HOME variable works when the user logs in to another system, and the home directories are auto-mounted.

To access files on a local disk, use global path names, such as /net/system-name/directory-name. Any directory referenced by /net/system-name can be mounted automatically on any system on which the user logs in, assuming the system is running AutoFS.

Shell Features

The user account that is created when you install the Oracle Solaris release
is assigned the GNU Bourne-Again Shell (bash) by default. The standard system shell,
bin/sh, is now the Korn Shell 93 (ksh93). Both the bash and
ksh93 shells feature command-line editing, which means you can edit commands before executing
them. To change to a different shell, type the path of the shell
that you want to use. To exit a shell, type exit.

The following table describes the shell options that are supported in this
release.

Table 1-8 Basic Shell Features in the Oracle Solaris Release

Shell

Path

Comments

Bourne-Again Shell (bash)

/usr/bin/bash

Default shell for users that are created by an installer,
as well as the root role

Korn Shell

/usr/bin/ksh

ksh93 is the default shell in this
Oracle Solaris release

C Shell and enhanced C Shell

/usr/bin/csh and /usr/bin/tcsh

C Shell and enhanced
C Shell

POSIX-compliant Shell

/usr/xpg4/bin/sh

POSIX-compliant shell

Z Shell

/usr/bin/zsh

Z Shell

Note - The Z Shell (zsh) and the enhanced C Shell (tsch) are not installed
on your system by default. To use either of these shells, you must
first install the required software packages.

Bash and ksh93 Shell History

Both the bash and ksh93 shells record a history of all of the
commands that you run. This history is kept on a per user basis,
which means history is persistent between login sessions and is representative of all
your login sessions.

For example, if you are in a bash shell, to see the
complete history of commands you have run, you would type:

$ history
1 ls
2 ls -a
3 pwd
4 whoami
.
.
.

To display a number of previous commands, include an integer in the command:

Bash and ksh93 Shell Environment Variables

The bash and ksh93 shells store special variable information that is known to
the shell as anenvironment variable. To view a complete list of the current environment
variables for the bash shell, use the declare command as follows:

To print environment variables for either shell, use the echo or printf
command. For example:

$ echo $SHELL
/bin/bash
$ printf ''$PATH/n''
/usr/bin

Note - Environment variables do not persist between sessions. To set up environment variables that
remain consistent between logins, you must make the changes in the .bashrc file.

A shell can have two types of variables:

Environment variables

Specifies variables that are exported to all processes that are spawned by the shell. The export command is used to export a variable. For example:

export VARIABLE=value

These settings can be displayed by using the env command. A subset of environment variables, such as PATH, affects the behavior of the shell itself.

Shell (local) variables

Specifies variables that affect only the current shell.

In a user initialization file, you can customize a user's shell environment by changing the values of the predefined variables or by specifying additional variables.

The following table provides more details about the shell and environment variables that
are available in the Oracle Solaris release.

Table 1-9 Shell and Environment Variable Descriptions

Variable

Description

CDPATH

Sets a variable used by the
cd command. If the target directory of the cd command is specified as
a relative path name, the cd command first looks for the target directory in
the current directory (.). If the target is not found, the path names
listed in the CDPATH variable are searched consecutively until the target directory is
found and the directory change is completed. If the target directory is not
found, the current working directory is left unmodified. For example, the CDPATH variable
is set to /home/jean, and two directories exist under /home/jean, bin, and rje. If
you are in the /home/jean/bin directory and type cd rje, you change directories
to /home/jean/rje, even though you do not specify a full path.

HOME

Sets the path
to the user's home directory.

LANG

Sets the locale.

LOGNAME

Defines the name
of the user currently logged in. The default value of LOGNAME is set
automatically by the login program to the user name specified in the passwd
file. You should only need to refer to, not reset, this variable.

MAIL

Sets the path to the user's mailbox.

MANPATH

Sets the hierarchies of man
pages that are available.

PATH

Specifies, in order, the directories that the shell searches
to find the program to run when the user types a command. If
the directory is not in the search path, users must type the complete
path name of a command.

As part of the login process, the
default PATH is automatically defined and set as specified in .profile.

The order
of the search path is important. When identical commands exist in different locations,
the first command found with that name is used. For example, suppose that
PATH is defined in the shell syntax as PATH=/bin:/usr/bin:/usr/sbin:$HOME/bin and a file named
sample resides in both /usr/bin and /home/jean/bin. If the user types the
command sample without specifying its full path name, the version found in /usr/bin
is used.

PS1

Defines the shell prompt for the bash or ksh93 shell.

SHELL

Sets the
default shell used by make, vi, and other tools.

TERMINFO

Names a directory where
an alternate terminfo database is stored. Use the TERMINFO variable in either the
/etc/profile or /etc/.login file. For more information, see the terminfo(4)man page.

When the TERMINFO environment
variable is set, the system first checks the TERMINFO path defined by the
user. If the system does not find a definition for a terminal in
the TERMINFO directory defined by the user, it searches the default directory, /usr/share/lib/terminfo,
for a definition. If the system does not find a definition in either
location, the terminal is identified as “dumb.”

TERM

Defines the terminal. This variable should
be reset in either the /etc/profile or /etc/.login file. When the user invokes
an editor, the system looks for a file with the same name
that is defined in this environment variable. The system searches the directory referenced by
TERMINFO to determine the terminal characteristics.

TZ

Sets the time zone. The
time zone is used to display dates, for example, in the ls -l
command. If TZ is not set in the user's environment, the system setting
is used. Otherwise, Greenwich Mean Time is used.

Customizing the Bash Shell

To customize your bash shell, add the information to the .bashrc file that
is located in your home directory. The initial user that is created
when you install Oracle Solaris has a .bashrc file that sets the PATH, MANPATH,
and command prompt. For more information, see the bash(1) man page.

About the MANPATH Environment Variable

The MANPATH environment variable is similar to the PATH variable. MANPATH specifies where
the man command looks for reference manual pages. The MANPATH in the user that
is created by an installer looks like the following:

$ echo $MANPATH
/usr/gnu/share/man:/usr/shar/man:/usr/X1/share/man

The PATH Variable

When the user executes a command by using the full path, the shell
uses that path to find the command. However, when users specify only a
command name, the shell searches the directories for the command in the order
specified by the PATH variable. If the command is found in one of
the directories, the shell executes the command.

A default path is set by the system. However, most users modify
it to add other command directories. Many user problems related to setting up
the environment and accessing the correct version of a command or a tool
can be traced to incorrectly defined paths.

Setting Path Guidelines

Here are some guidelines for setting up efficient PATH variables:

If security is not a concern, put the current working directory (.) first in the path. However, including the current working directory in the path poses a security risk that you might want to avoid, especially for superuser.

Keep the search path as short as possible. The shell searches each directory in the path. If a command is not found, long searches can slow down system performance.

The search path is read from left to right, so you should put directories for commonly used commands at the beginning of the path.

Make sure that directories are not duplicated in the path.

Avoid searching large directories, if possible. Put large directories at the end of the path.

Put local directories before NFS mounted directories to lessen the chance of “hanging” when the NFS server does not respond. This strategy also reduces unnecessary network traffic.

Setting a User's Default Path

To set the user's default path in either a bash or ksh93
user initialization file, you would add the following:

PATH=.:/usr/bin:/$HOME/bin:/net/glrr/files1/bin
export PATH

Locale Variables

The LANG and LC environment variables specify the locale-specific conversions and conventions for
the shell. These conversions and conventions include time zones, collation orders, and formats of
dates, time, currency, and numbers. In addition, you can use the stty command
in a user initialization file to indicate whether the terminal session will support
multibyte characters.

The LANG variable sets all possible conversions and conventions for the given locale.
You can set various aspects of localization separately through these LC variables: LC_COLLATE,
LC_CTYPE, LC_MESSAGES, LC_NUMERIC, LC_MONETARY, and LC_TIME.

The following table describes some of the values for the LANG and
LC environment variables.

Table 1-10 Values for LANG and LC Variables

Value

Locale

de_DE.ISO8859-1

German

en_US.UTF-8

American English (UTF-8)

es_ES.ISO8859-1

Spanish

fr_FR.ISO8859-1

French

it_IT.ISO8859-1

Italian

ja_JP.eucJP

Japanese (EUC)

ko_KR.EUC

Korean (EUC)

sv_SE.ISO8859-1

Swedish

zh_CN.EUC

Simplified Chinese (EUC)

zh_TW.EUC

Traditional Chinese (EUC)

For more information on supported locales, see the International Language Environments Guide.

Example 1-1 Setting the Locale Using the LANG Variables

In a Bourne-shell or Korn-shell user initialization file, you would add the following:

LANG=de_DE.ISO8859-1; export LANG

Default File Permissions (umask)

When you create a file or directory, the default file permissions assigned to
the file or directory are controlled by the user mask. The user mask is set
by the umask command in a user initialization file. You can display the
current value of the user mask by typing umask and pressing Return.

The user mask contains the following octal values:

The first digit sets permissions for the user

The second digit sets permissions for group

The third digit sets permissions for other, also referred to as world

Note that if the first digit is zero, it is not displayed.
For example, if the user mask is set to 022, 22 is displayed.

To determine the umask value that you want to set, subtract the value
of the permissions you want from 666 (for a file) or 777 (for
a directory). The remainder is the value to use with the umask
command. For example, suppose you want to change the default mode for files
to 644 (rw-r--r--). The difference between 666 and 644 is 022, which is the
value you would use as an argument to the umask command.

You can also determine the umask value you want to set by using
the following table. This table shows the file and directory permissions that are
created for each of the octal values of umask.

Table 1-11 Permissions for umask Values

umask Octal Value

File Permissions

Directory
Permissions

0

rw-

rwx

1

rw-

rw-

2

r--

r-x

3

r--

r--

4

-w-

-wx

5

-w-

-w-

6

--x

--x

7

--- (none)

--- (none)

The following line in a user initialization file sets the default file permissions
to rw-rw-rw-.

umask 000

Customizing a User Initialization File

The following is an example of the .profile user initialization file. You can
use this file to customize your own user initialization files. This example uses
system names and paths that you will need to modify for your particular
site.