Solaris のシステム管理 (第 1 巻)

ユーザーの作業環境のカスタマイズ

ユーザーのホームディレクトリの設定には、ユーザーのログインシェルにユーザー初期設定ファイルを提供することも含まれます。ユーザー初期設定ファイルは、ユーザーがシステムにログインしたあとにユーザーのために作業環境を設定するシェルスクリプトです。基本的にシェルスクリプトでできる処理はどれもユーザー初期設定ファイルで実行できますが、主に、ユーザーの検索パス、環境変数、ウィンドウ機能の環境などユーザーの作業環境を定義します。表 2-11 に示すように、各ログインシェルには、1 つまたは複数の、固有のユーザー初期設定ファイルがあります。

表 2-11 Bourne、C、Korn シェルのユーザー初期設定ファイル

シェル 

初期設定ファイル 

目的 

Bourne

$HOME/.profile

ログイン時のユーザー環境の定義 

 

C

$HOME/.cshrc

ログインシェルのあとに起動されるすべての C シェルに対するユーザー環境の定義 

 

$HOME/.login

ログイン時のユーザー環境の定義 

 

Korn

$HOME/.profile

ログイン時のユーザー環境の定義 

 

$HOME/$ENV

Korn シェルの ENV 環境変数によって指定されるファイルにおける、ログイン時のユーザー環境の定義

Solaris 環境には、表 2-12 に示すように、各システムの /etc/skel ディレクトリに、各シェル用のデフォルトのユーザー初期設定ファイルが提供されています。

表 2-12 デフォルトのユーザー初期設定ファイル

シェル 

デフォルトファイル 

C

/etc/skel/local.login

 

/etc/skel/local.cshrc

Bourne または Korn

/etc/skel/local.profile

これらのファイルを変更して、すべてのユーザーに共通な作業環境を提供する標準のファイルセットを作成したり、あるいは異なるタイプのユーザーに作業環境を提供したりすることができます。異なるタイプのユーザーにユーザー初期設定ファイルを作成する手順については、「ユーザー初期設定ファイルをカスタマイズする方法」を参照してください。

Admintool で新しいユーザーアカウントを作成して、ホームディレクトリを作成するオプションを選択すると、選択したログインシェルに合わせて次のファイルが作成されます。

シェル 

作成されるファイル 

/etc/skel/local.cshrc ファイルと /etc/skel/local.login ファイルがユーザーのホームディレクトリにコピーされ、それぞれ、.cshrc.login という名前に変更される。

Bourne と Korn 

/etc/skel/local.profile ファイルがユーザーのホームディレクトリにコピーされ、.profile という名前に変更される。

useradd コマンドで新しいユーザーアカウント追加するために、-k オプションと -m オプションで /etc/skel ディレクトリを指定した場合、3 つの /etc/skel/local* ファイルと /etc/skel/.profile ファイルがすべてユーザーのホームディレクトリにコピーされます。この時点で、これらのファイルの名前をユーザーのログインシェルに合わせて変更する必要があります。

サイト初期設定ファイルの使用方法

ユーザー初期設定ファイルは管理者とユーザーの両方によってカスタマイズできます。この重要な機能は、サイト初期設定ファイルと呼ばれる、グローバルに配布されるユーザー初期設定ファイルによって実現します。サイト初期設定ファイルを使用して、ユーザーの作業環境に新しい機能を絶えず導入でき、しかもユーザーはユーザー初期設定ファイルをカスタマイズすることもできます。

ユーザー初期設定ファイルでサイト初期設定ファイルを参照するとき、サイト初期設定ファイルに対して行なったすべての更新は、ユーザーがシステムにログインするときかユーザーが新しいシェルを起動するとき自動的に反映されます。サイト初期設定ファイルは、ユーザーを追加したときにはなかったサイト全体の変更をユーザーの作業環境に配布するよう設計されています。

ユーザー初期設定ファイルでできるカスタマイズは、サイト初期設定ファイルでも行えます。これらのファイルは通常はサーバー (あるいは、サーバーのグループ) にあり、ユーザー初期設定ファイルの最初の行に現れます。また、各サイト初期設定ファイルは、それを参照するユーザー初期設定ファイルと同じ型のシェルスクリプトでなければなりません。

C シェルのユーザー初期設定ファイルでサイト初期設定ファイルを参照するには、ユーザー初期設定ファイルの初めに次のような行を入れてください。

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

Bourne または Korn シェルのユーザー初期設定ファイルでサイト初期設定ファイルを参照するには、ユーザー初期設定ファイルの初めに次のような行を入れてください。

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

ローカルシステムへの参照を避ける

ユーザー初期設定ファイルに、ローカルシステムへの固有の参照は追加しないでください。初期設定ファイルの設定は、ユーザーがどのシステムにログインしても有効になる必要があります。次に例を示します。

シェル機能

表 2-13 に、各シェルの基本的機能を示します。ユーザー初期設定ファイルを作成するのにどのシェルがどんな機能を提供するか参考にしてください。

表 2-13 Bourne、C、Korn シェルの基本機能

機能 

Bourne 

Korn 

UNIX で標準シェルとして知られる 

○ 

Bourne シェルと互換性がある構文 

○ 

ジョブ制御 

○ 

○ 

○ 

履歴リスト 

○ 

○ 

コマンド行編集 

○ 

○ 

別名 (エイリアス) 

○ 

○ 

ログインディレクトリの 1 文字省略形 

○ 

○ 

ファイルの上書き保護 (noclobber)

○ 

○ 

CTRL-D 無視 (ignoreeof)

○ 

○ 

拡張 cd

○ 

○ 

.profile とは別の初期設定ファイル

○ 

○ 

ログアウトファイル 

○ 

○ 

*

シェル環境

シェルは、login プログラム、システム初期設定ファイル、ユーザー初期設定ファイルによって定義される変数を含む環境を管理します。また、一部の変数はデフォルトによって定義されます。シェルには次の 2 種類の変数があります。

C シェルでは、小文字を使って set コマンドでシェル変数を設定し、大文字を使って setenv コマンドで環境変数を設定します。シェル変数を設定すると、対応する環境変数が設定され、その逆もあります。たとえば、path シェル変数を新しいパスで更新すると、シェルは PATH 環境変数も新しいパスで更新します。

Bourne、Korn 両シェルでは、一般的に、大文字を使って setenv コマンドでシェル変数と環境変数を設定します。また、export コマンドで環境変数の設定を終了しなければなりません。すべてのシェルで、シェル変数と環境変数は一般的に大文字の名前で参照します。

ユーザー初期設定ファイルで、ユーザーのシェル環境を、あらかじめ定義された変数の値を変更するか、変数を追加することによってカスタマイズできます。表 2-14 はユーザー初期設定ファイルで環境変数を設定する方法を示します。

表 2-14 ユーザー初期設定ファイルでの環境変数の設定方法

環境変数を設定したいシェル 

ユーザー初期設定ファイルに追加する行 

C シェル

setenv VARIAVLE value

例:

setenv MAIL /var/mail/ripley

Bourne または Korn シェル

VARIABLE=value; export VARIABLE

例: 

MAIL=/var/mail/ripley;export MAIL

表 2-15 に、ユーザー初期設定ファイルでカスタマイズできる環境変数とシェル変数を説明します。各シェルで使用される変数についての詳細は、 sh(1)ksh(1)csh(1) の各マニュアルページを参照してください。

表 2-15 シェル変数と環境変数の説明

変数 

説明 

ARCH

ユーザーのシステムアーキテクチャ (たとえば sun4i386) を設定する。この変数は ARCH = `uname -p` (Bourne または Korn シェル) または setenv ARCH `uname -p` (C シェル) で設定する。この変数に影響されるシェルの動作はない。この変数は単にシェルスクリプト内での分岐に利用する。

CALENDAR

Calender 実行ファイルにパスを設定する。 

CDPATH (C シェルでは cdpath)

cd コマンドで使用する変数を設定する。cd コマンドの対象ディレクトリを相対パス名で指定すると、cd コマンドは対象ディレクトリをまず現在のディレクトリ (.) 内で検索する。見つからなかった場合は、CDPATH 変数のリストの順で検索され、見つかると、ディレクトリの変更が行われる。CDPATH で対象のディレクトリが見つからなかった場合は、現在の作業ディレクトリは変更されない。たとえば、CDPATH 変数を /home/jean に設定し、その下に binrje に 2 つのディレクトリがある場合に、/home/jean/bin ディレクトリの中で cd rje と入力すると、絶対パスを指定しなくても、ディレクトリを /home/jean/rje に変更することになる。

DESKSET

DeskSetTM 実行ファイルへのパスを設定する。

history

C シェルの履歴を設定する。 

HOME (C シェルでは home)

ユーザーのホームディレクトリへのパスを設定する。 

LANG

ロケールを設定する。 

LOGNAME

現在ログインしているユーザーの名前を設定する。LOGNAME のデフォルト値は、passwd ファイルに指定されているユーザー名にログインプログラムによって自動的に設定される。したがって、この変数を参照すればユーザー名を入手できる (設定を変更してはならない)。

LPDEST

ユーザーのデフォルトプリンタを設定する。 

MAIL

ユーザーのメールボックスへのパスを設定する。 

MANPATH

アクセスできるマニュアルページの階層を設定する。 

MANSECTS

アクセスできるマニュアルページの階層を設定する。 

OPENWINHOME

OpenWindows サブシステムへのパスを設定する。 

PATH (C シェルでは path)

ユーザーがコマンドを入力したときに実行するプログラムについて、シェルが検索するディレクトリを順番に指定する。ディレクトリが検索パス上にない場合は、ユーザーはコマンドの絶対パス名を入力しなければならない。 

デフォルトの PATH は、ログインプロセスで .profile (Bourne または Korn シェル) または .cshrc (C シェル) の指定どおりに自動的に定義され、設定される。

 

検索パスの順序が重要となる。同じコマンドが異なる場所にそれぞれ存在するときは、最初に見つかったコマンドが使用される。たとえば、PATH が (Bourne、Korn シェル構文で) PATH=/bin:/usr/bin:/usr/sbin:$HOME/binのように定義されていて、sample というファイルが /usr/bin/home/jean/bin の両方にあるものとする。ユーザーが sample コマンドを、その絶対パスを指定しないで入力した場合は、/usr/bin で見つかったバージョンが使用される。

prompt

C シェルのシェルプロンプトを設定する。 

PS1

Bourne または Korn シェルのシェルプロンプトを設定する。 

SHELL (C シェルでは shell)

makevi、その他のツールが使うデフォルトシェルを設定する。

TERMINFO

terminfo ファイルに追加した、サポートされていない端末のパス名を指定する。/etc/profile または /etc/.loginTERMINFO 変数を使う。

 

TERMINFO 環境変数を設定すると、システムはまずユーザーが定義した TERMINFO パスを調べる。ユーザーが定義した TERMINFO ディレクトリ内に端末の定義が見つからなかった場合は、システムはデフォルトディレクトリ /usr/share/lib/terminfo で定義を探す。どちらにも見つからなかった場合は、端末は dumb として定義される。

TERM (C シェルでは term)

端末を設定する。この変数は /etc/profile または /etc/.login で再度設定する必要がある。ユーザーがエディタを起動すると、システムはこの環境変数の定義と同じ名前のファイルを探す。システムは、TERMINFO が参照するディレクトリ内を探して端末の特性を知る。

TZ

時間帯を設定する。これは、たとえば ls -l コマンドで日付を表示する場合に使われる。TZ をユーザーの環境に設定しないと、システムの設定が使用される。設定する場合、グリニッジ標準時が使用される。

PATH 変数

ユーザーが絶対パス名でコマンドを入力すると、シェルはそのパス名を使ってコマンドを探します。ユーザーがコマンド名しか指定しないと、シェルは PATH 変数で指定されているディレクトリの順でコマンドを探します。ディレクトリのどれかで見つかれば、シェルはコマンドを実行します。

デフォルトのパスがシステムで設定されますが、大部分のユーザーはそれを変更して他のコマンドディレクトリを追加します。環境の設定や、正しいバージョンのコマンドまたはツールへのアクセスに関連して発生するユーザーの問題の多くは、パス定義の誤りが原因です。

パスの設定のガイドライン

次に、効率的な PATH 変数を設定するガイドラインをいくつか示します。

例 - ユーザーのデフォルトパスの設定

次の例は、ユーザーのデフォルトパスがホームディレクトリと他の NFS マウントディレクトリを含むように設定する方法を示します (現在の作業ディレクトリはパスの初めに指定されます)。C シェルユーザー初期設定ファイルでは、次の行を追加してください。

set path=(. /usr/bin $HOME/bin /net/glrr/files1/bin)

Bourne または Korn シェルユーザー初期設定ファイルでは、次の行を追加してください。

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

ロケール変数

LANG および LC 環境変数は、時間帯と照合順序、および日付、時間、通貨、番号の書式など、ロケール固有の変換と表記をシェルに指定します。さらに、ユーザー初期設定ファイルで stty コマンドを使って、システムが複数バイト文字をサポートするかどうかを設定できます。

LANG は、ロケールのすべての変換と表記を設定します。特に必要な場合はこれとは別に、次の LC 変数、LC_COLLATELC_CTYPELC_MESSAGESLC_NUMERICLC_MONETARYLC_TIME によってその他の設定を行えます。

表 2-16 は、LANGLC 環境変数の値の一部を示します。

表 2-16 LANGLC 変数の値

値 

ロケール 

de

German

fr

French

iso_8859_1

English および European

it

Italian

japanese

Japanese

korean

Korean

sv

Swedish

tchinese

Taiwanese

例 - LANG 変数によるロケールの設定

次の例は、LANG 環境変数を使ってロケールを設定する方法を示しています。C シェルユーザー初期設定ファイルでは、次の行を追加してください。

setenv LANG DE

Bourne または Korn シェルユーザー初期設定ファイルでは、次の行を追加してください。

LANG=DE; export LANG

デフォルトのファイルアクセス権 (umask)

ファイルまたはディレクトリを作成したときに設定されるデフォルトのファイルアクセス権は、ユーザーマスクによって制御されます。ユーザーマスクは、初期設定ファイルで umask コマンドによって設定されます。現在のユーザーマスクの値は、umask と入力して Return キーを押すと表示できます。

ユーザーマスクは 3 桁の 8 進値で設定します。最初の桁でそのユーザーのアクセス権を設定し、第 2 桁でグループのアクセス権を設定し、第 3 桁で「その他 」(ワールドとも呼ばれます) のアクセス権を設定します。最初の桁がゼロの場合、この桁は表示されません。たとえば、umask を 022 に設定すると、22 が表示されます。

設定する umask の値は、与えたいアクセス権の値を 666 (ファイルの場合) または 777 (ディレクトリの場合) から引きます。引いた残りが umask に使用する値です。たとえば、ファイルのデフォルトモードを 644 (rw-r--r--) に変更したいとすれば、666 と 644 の差 022 が umask コマンドの引数として使用する値です。

また、表 2-17 から umask 値を決めることもできます。この表は、 umask の各 8 進値から作成される、ファイルとディレクトリのアクセス権を示します。

表 2-17 umask 値のアクセス権

umask 8 進値

ファイルアクセス権 

ディレクトリアクセス権 

0

rw-

rwx

1

rw-

rw-

2

r--

r-x

3

r--

r--

4

-w-

-wx

5

-w-

-w-

6

--x

--x

7

--- (なし)

--- (なし)

次の例は、デフォルトのファイルアクセス権を rw-rw-rw- に設定します。

umask 000

ユーザー初期設定ファイルとサイト初期設定ファイルの例

ここでは、ユーザー自身の初期設定ファイルをカスタマイズする場合にまず使用する、ユーザー初期設定ファイルとサイト初期設定ファイルの例を示します。例の中のシステム名やパス名は、実際のサイトに合わせて置き換えてください。

コード例 - .profile ファイルの例


 
PATH=$PATH:$HOME/bin:/usr/local/bin:/usr/ccs/bin:. 1
MAIL=/var/mail/$LOGNAME 2
NNTPSERVER=server1 3
MANPATH=/usr/share/man:/usr/local/man 4
PRINTER=printer1 5
umask 022 6
export PATH MAIL NNTPSERVER MANPATH PRINTER 7
  1. ユーザーのシェル検索パスを設定する。

  2. ユーザーのメールファイルへのパスを設定する。

  3. ユーザーの Usenet ニュースサーバーを設定する。

  4. マニュアルページへのユーザーの検索パスを設定する。

  5. ユーザーのデフォルトプリンタを設定する。

  6. ユーザーのデフォルトのファイル作成アクセス権を設定する。

  7. 指定された環境変数をエクスポートする。

コード例 - .cshrc ファイルの例


 
set path=($PATH $HOME/bin /usr/local/bin /usr/ccs/bin) 1
setenv MAIL /var/mail/$LOGNAME 2
setenv NNTPSERVER server1 3
setenv PRINTER printer1 4
alias h history 5
umask 022 6
source /net/server2/site-init-files/site.login 7
  1. ユーザーのシェル検索パスを設定する。

  2. ユーザーのメールファイルへの検索パスを設定する。

  3. ユーザーの Usenet ニュースサーバーを設定する。

  4. ユーザーのデフォルトプリンタを設定する。

  5. history コマンドの別名を作成する (h と入力するだけで history コマンドを実行できる)。

  6. ユーザーのデフォルトのファイル作成アクセス権を設定する。

  7. 指定された環境変数をエクスポートする。

例 - サイト初期設定ファイル

次のサイト初期設定ファイルの例では、ユーザーは特定のバージョンのアプリケーションを選択できます。

# @(#)site.login
main: 
echo "Application Environment Selection"
echo ""
echo "1. Application, Version 1"
echo "2. Application, Version 2"
echo "" 
echo -n "Type 1 or 2 and press Return to set your 
application environment: " 
 
set choice = $<	
 
if ( $choice !‾ [1-2] ) then 
goto main 
endif 
 
switch ($choice) 
case "1": 
setenv APPHOME /opt/app-v.1 
breaksw 
 
case "2": 
setenv APPHOME /opt/app-v.2 
endsw

次のようにして、このサイト初期設定ファイルをユーザーの .cshrc ファイル (C シェルユーザーのみ使用可能) で参照させることができます。

source /net/server2/site-init-files/site.login

この行では、サイト初期設定ファイルは site.login という名前で、server2 という名前のサーバー上にあります。また、自動マウンタがユーザーのシステムで実行されていることを前提としています。