【演習】
以下の各問題を解決する方法を調べ、利用するコマンド、コマンドの利用方法などをまとめる。
- ユーザshinjoのログインシェルを/bin/tcshに変更する。
- ログイン時にウェルカムメッセージやメンテナンス情報等をすべてのユーザに知らせたい。
- ディレクトリ~/binを作る。
- rmコマンド実行時に削除確認されるようにする。
- ディスクの使用量を日付とともにファイルに保存するシェルスクリプトを作る
- グループuserに属しているユーザの一覧を得るシェルスクリプトを作る
【解説】
ログインシェルの変更
chshコマンドを使う。sオプションでログインシェルを指定する。
# chsh -s /bin/tcsh shinjo
ウェルカムメッセージの表示
ログイン時に表示するメッセージをファイル/etc/motdファイルを書き込んでおけばよい。このファイルは管理者権限で編集する。
# vi /etc/motd
ディレクトリの作成
mkdirコマンドを使う。
mkdir ~/bin
rmコマンド実行時に常に削除確認させる
削除確認はiオプションで実現する。rmコマンド実行時に常にこのオプションを付ければよいのだが、煩わしい。そこでシェルのalias機能を使えば、オプションの指定を気にしなくて良い。
alias エイリアス名="エイリアスとして登録するコマンドなど"
iオプションを常に適用されるようにする。
alias rm="rm -i"
aliasの定義は.bash_profileや.bashrcに書き込んでおけばログイン時に自動的に設定される。
コマンド名をフルパスで指定すればalias機能は関係ない。
ディスクの使用量を日付とともにファイルに保存するシェルスクリプト
日付はdateコマンド、ディスクの使用量はdfコマンドを使う。シェルスクリプトとはシェルのコマンドインタープリタとしての機能を利用したプログラムのことである。
コマンドの出力をファイルに書き込むにはリダイレクトという機能を利用する。リダイレクトには次の記号を使う。
> | ファイルへの書き込み。上書きされる。 |
---|---|
>> | ファイルへの追加書き込み |
いずれの場合もファイルが存在しなければ、新規に作成される。
リダイレクトの書式
コマンド > ファイル コマンド >> ファイル
この問題では日付とディスクの使用量を累積していくので>>を使う。
#!/bin/bash date >> diskusage.txt df >> diskusage.txt
グループusersに属しているユーザの一覧を得るシェルスクリプトを作る
ユーザの一覧はファイル/etc/passwdにあるのでこのファイルからusersに属しているユーザを検索すればよい。
/etc/passwdは次のように行単位でユーザ情報が保存されている。
ユーザ名:x:ユーザID:グループID:コメント:ログインシェル
:をデリミタ(区切り文字)として用い、IDは数値を使っている。グループusersのIDは/etc/groupファイルを調べると100であることが分かる。
$grep users /etc/passwd users:x:100:
検索にはgrepコマンドを使い、余分な情報は不要なのでawkあるいはcutコマンドを使ってユーザ名のみを取り出す。
awkを使った場合。Fオプションでデリミタを指定し、最初の項目($1)のみを表示する。
grep 100 /etc/passwd | awk -F ":" '{print $1}'
cutを使った場合。dオプションでデリミタを指定し、最初の項目のみ表示する。
grep 100 /etc/passwd | cut -d : -f 1
[UNIX管理実習]