シェルとスクリプト
ログインシェル
ユーザーがログインした時に最初に起動するシェルのこと。 それ以外のタイミングで起動するシェルを非ログインシェルと呼ぶ。
ログインシェルは /etc/passwd
の第 7 フィールドに記載している。
ログインシェル起動時
起動時にロードする設定ファイルは次の通り。
- /etc/profile
- ~/.bash_profile
- ~/.bash_login
- ~/.profile
非ログインシェルの場合は ~/.bashrc
のみ読み込む。
コマンド結果の格納
- $() で囲んで代入
- バッククォート (`) で囲んで代入
- $(()) で算術演算
シェル関数
シェル内部で実行される一連の処理。子プロセスを生成しない。
function 関数名() { コマンド }
エイリアス
alias コマンド
エイリアスを登録する。
alias エイリアス名='登録文字列'
unalias コマンド
エイリアスを解除する。
unalias エイリアス名
特殊シェル変数
シェル変数名 | 説明 |
---|---|
$$ | シェルの PID |
$? | 最後に実行したコマンドの終了値 (コマンド成功時は 0、それ以外の場合は失敗) |
$# | 引数の個数 |
$* | 区切り文字で区切られたすべての引数 |
$0 | 実行ファイル名 |
$1, $2… | 1 番目の引数、2 番目の引数 |
シェルスクリプト
先頭にコマンドを解釈するインタープリターのパスを記述する。
- #!/bin/sh: Bourne シェル
- #!/bin/bash: bash
- #!/usr/bin/perl: perl
- #!/usr/bin/python: python
コマンドか source コマンドで実行中のシェルないでスクリプトを実行する。
- . スクリプト名
- source スクリプト名
スクリプト条件式
if 構文
if コマンド 1
コマンド 2
fi
test 構文
test 条件式
[] 構文
[条件式]
条件式のオプション
- -d ファイル名: ファイルが存在し、ディレクトリファイルなら真
- -e ファイル名: ファイルが存在すれば真
- -f ファイル名: ファイルが存在し、通常ファイルなら真
- -x ファイル名: ファイルが存在し、実行可能ファイルなら真
- -n 文字列: 文字列の長さが 0 より大きければ真
- -z 文字列: 文字列の長さが 0 であれば真
- 文字列 1 = 文字列 2: 文字列 1 と文字列 2 が等しければ真
- 文字列 1 != 文字列 2: 文字列 1 と文字列 2 が等しくなければ真
- 整数 1 -eq 整数 2: 整数 1 と整数 2 が等しければ真
- 整数 1 -ge 整数 2: 整数 1 が整数 2 より大きいか等しければ真
- 整数 1 -gt 整数 2: 整数 1 が整数 2 より大きければ真
- 整数 1 -le 整数 2: 整数 1 が整数 2 より小さいか等しければ真
- 整数 1 -lt 整数 2: 整数 1 が整数 2 より小さければ真
- 整数 1 -ne 整数 2: 整数 1 と整数 2 が等しくなければ真
for 構文
for シェル変数 in 値のリスト
do
コマンド
done
while 構文
while コマンド 1
do
コマンド 2
done
read コマンド
終了の文字列が来るまで読み込み、区切り文字で分割して変数が足りなければ残り全てを 1 つの引数とする。
read 文字列 <<< 終了
seq コマンド
指定した整数を終了値とし、初期値から増分ずつ増やす。
seq 終了値
seq 初期値 終了値
seq 初期値 増分 終了値
X Windows System
Linux で GUI を提供する。 X サーバー (xorg) とクライアントとして gnome-terminal、xeyes、xclock がある。
GUI
SysV init でランレベル 5 を実行すると GUI になる。
SysV init
- 起動するディスプレイマネージャーは prefdm に記載のもの。
DISPLAYMANAGER
変数
systemd
systemd [enable|disable] [xdm|gdm|kdm]
ディスプレイマネージャー
グラフィカルな GUI を表示する。ログイン画面の表示とユーザー認証を行う。
- xdm: X11
- gdm: gnome
- kdm: KDE、のちに sddm
- lightdm: 軽量ディスプレイマネージャー
ウィンドウマネージャー
ウィンドウのオープン、クローズ、移動、リサイズを管理する。
ディスプレイマネージャー
- Xorg
- gnome-session
ディスプレイマネージャー | ウィンドウマネージャー | |
---|---|---|
GNOME | gdm | metacity, mutter |
KDE | kdm, sddm | kwin |
X Windows System | xdm | twm |
WayLand
X に変わるディスプレイサーバーで、wayland プロトコルを利用する。
xdpyinfo コマンド
X サーバーの情報を表示する。
wxininfo コマンド
クリックした特定のウィンドウの情報を表示する。
xwd コマンド
スクリーンやウィンドウのイメージをファイルで保存する。
xlsclients コマンド
スクリーンに表示されるアプリの一覧を表示する。
xorg.conf の設定セクション
- ServerLayout: InputDevice や Screen の識別名など、全体のレイアウトを記述する
- Files: フォントのパスなど、ファイルパス名を記述する
- InputDevice: キーボードやマウスなど、入力デバイスを記述する
- Device: ビデオカードのドライバ名などデバイスを記述する
- Monitor: 垂直、水平周波数などモニタ情報を記述する
- Screen: 解像度、色深度など、スクリーンのコンフィグレーションを記述する
DISPLAY 変数
サーバー名:ディスプレイ番号:スクリーン番号
- ディスプレイ番号: 異なる仮想ディスプレイを使うときは数字を変える
- スクリーン番号: 0 から 1 番目のスクリーンやモニターを指す
ネットワーク越しにディスプレイにプログラムを表示する方法
DISPLAY
で送り先の X サーバーを指定する- xhost コマンドでリクエストを許可する
xhost コマンド
ホスト名を指定してアクセスの許可を設定する。 ホスト名を指定しない場合はすべてのホストを許可する。 セキュリティリスクがあるので、ssh ポートフォワーディングなどの対策をする必要がある。
xhost [[+|-] ホスト名のリスト]
- +: 許可
- -: 拒否
X11 ポート転送
リモート実行したアプリのウィンドウをローカルに表示する。 /etc/ssh/sshd_config
で次のように設定する。
- X11 Forwarding yes
- Forward X11 yes
XDMCP (X Display Manager Control Protocol)
X サーバーがネットワークを介してディスプレイマネージャーに接続するためのプロトコル
VNC (Virtual Network Computing)
RFB (Remote Frame Buffer) プロトコルでリモートマシンを GUI 操作する。 通信は ssh で保護される。
- VNC サーバー: tigervnc-server
- VNC クライアント: vinagre
RDP (Remote Desktop Protocol)
Windows との接続に使う。rdesktop コマンドを使う。
SPICE (Simple Protocol for Independent Computing Environments)
VM のコンソールをローカルで表示する。 qemu-kvm に標準で組み込まれている。 virt-manager、virt-viewer、remote-viewer でアクセスする。
アクセシビリティ機能
提供プログラム
- GNOME 2: gok
- GNOME 3: libcaribou を利用した GNOME Shell オンスクリーンキーボード
種類
- スティッキーキー: 同時押しを順番にする
- スローキー: 長押しを有効にする
- バウンスキー: 素早く複数回押した時に入力を無効にする
- トグルキー: CapsLock と NumLock を切り替え時にピープ音を発する
- リピートキー: 長押しすると連続入力をする
- マウスキー: 十字キーでマウスカーソルを移動する
ユーザーアカウントの管理
ユーザーの作成
useradd コマンド
ユーザーを新規に作成する。各ファイルに必要な情報を記述する。 オプションのデフォルト値は /etc/default/useradd
に記載される。
- -c: コメントの指定
- -d: ホームディレクトリの指定
- -e: アカウント失効日の指定
- -f: パスワードが失効してからアカウントが使えなくなるまでの日数
- -g: 1 次グループの指定
- -G: 2 次グループの指定
- -k: skel ディレクトリの指定
- -m: ホームディレクトリを作成する (/etc/login.defs で CREAE_HOME yes であれば既定で作成)
- -M: ホームディレクトリを作成しない
- -s: ログリンシェルの指定
- -u: UID の指定
- -D: デフォルトの表示あるいは設定
USERGROUPS_ENAB
変数が Yes であればグループ名とユーザー名が同じ名前になる。 ユーザー情報が記載されるのは次のファイル。
/etc/passwd
: ユーザー情報の一覧/etc/shadow
: ユーザーパスワード情報の一覧/etc/group
: グループ情報の一覧/etc/gshadow
: グループパスワード情報の一覧
UID が 500 未満のものはデーモンやディレクトリや所有者用のシステムアカウント。
パスワード
/etc/passwd
の第 2 フィールドが x か !! の時はパスワードが未設定の状態。
/etc/passwd rw-r--r--
: 一般ユーザーでも読み取りは可能/etc/shadow r--------
: root 以外は読み書きできない
/etc/passwd
ユーザー名:パスワード:ユーザー ID:グループ ID:コメント:ホームディレクトリ:ログインシェル
/etc/shadow
- ログイン名
- 暗号化パスワード
- 最終パスワード変更日
- パスワード変更可能期間
- パスワード変更期日
- パスワード切れ警告日
- パスワード切れ使用不可日
- アカウント使用不可日
- 予約フィールド
/etc/pamd/system-auth
内の暗号化アルゴリズムを変更した際は何もしなくてもいい。 優先順位に従って順番にアルゴリズムの評価を実施する。
/skel
/etc/skel
ディレクトリ配下の構成は新規ユーザー追加 (ユーザープロビジョニング) 時に自動コピーされる。
usermod コマンド
ユーザー情報を変更する。
- -L: ユーザーをロックする
- -G: グループを変更する
userdel コマンド
ユーザーを削除する。
- -r, –remove: ホームディレクトリを削除する
- -f, –force: ユーザーがログインしていても強制的に削除する
groups コマンド
ユーザーが所属しているグループを表示する。
groups [ユーザー名]
groupadd コマンド
グループを追加する。
groupadd [-g GID] グループ名
- -g: GID を指定
groupdel コマンド
グループを削除する。root のみ実行可能。
getent コマンド
データベースの内容を表示する。 キーを指定しない場合はすべてのエントリーを表示する。
getent データベース名 キー名
change コマンド
アカウント失効日の設定と表示を行う。
- -f: アカウントとパスワード失効日の情報を表示
- -d: パスワードの最終更新日を設定
- -m: パスワード変更間隔の最短日数を指定
- -M: パスワード変更なしで使用できる最長日数を指定
- -W: パスワード変更期日の何日前から警告を出すか設定
- -I: パスワード変更期日から利用できなくなるまでの猶予日数を設定
- -E: アカウント失効日を YYYY-MM-DD で設定
chsh コマンド
ログインシェルを変更する。
ユーザーのログインを禁止
次のファイルを作成するとユーザーのログインを禁止する。
/sbin/nologin
/bin/false
/etc/passwd
の第 2 フィールドを * か ! にするとログインを拒否する。
コメント