SEワンタンの独学備忘録

IT関連の独学した内容や資格試験に対する取り組みの備忘録

【LPIC102】シェル設定のカスタマイズ LPICで学ぶLinux1

LPIC101の試験には合格したのでLPIC102をぼちぼちと。

シェル変数と環境変数

LPIC101の復習的な内容ですが、環境変数とシェル変数についてです。

■シェル変数
定義したシェル(あるいはプロセス)内でのみ有効な変数

■環境変数
定義したシェル上で呼び出されるプログラムなどにも適用

環境変数はexport コマンドを使用することにより、シェル変数から設定することができる。

[wantan@localhost ~]$ export test

・変数の表示コマンド
変数の表示コマンドはLPIC101の範囲ではありますが、一応確認しておいた方がよさそうです。

コマンド 説明
printenv 環境変数の一覧を出力
env 環境変数の一覧を出力
set シェル変数と環境変数の一覧を出力

シェル環境の設定

シェルオプションの設定

シェルには様々なオプションがあり、変数の出力にも使用したsetコマンドを使用することで設定の切り替えを行います。
感覚的なプラスマイナスと設定解除が逆転する点に注意。
※私は一瞬混乱した

・オプションを設定する

set -o [オプション]

・オプションを解除する

set +o [オプション]

■変数を自動的にエクスポートする

set -o allexport

変数のエクスポートを自動で行う。つまりはシェル変数の設定方法でエクスポートコマンドを使用しなくても環境変数の設定を行うことができます。

全てエクスポートなのでオプション的には覚えやすいですね。

■emacs風のキーバインドにする

set -o emacs

コマンドライン入力をエディタである「emacs」(イーマックス)風にします。

Emacs - Wikipedia

私はemacs自体はまともに使用したことがなかったですが、普段使っているコマンドラインの入力が既にemacs風に設定されていたっぽい。。
ちょっと混乱してしまった。

同様に「vi」エディタ風のキーバインドにすることもできます。

set -o vi

■Ctrl+Dでの間違いログアウトを防ぐ

set -o ignoreeof

EoF(Ctrl+D)を無視するの意ですね。
LPIC101をやっていながら恥ずかしいですが、Ctrl+Dでログアウトできることを認識していませんでした。

・実行例

[wantan@localhost ~]$ set -o ignoreeof
[wantan@localhost ~]$ シェルから脱出するには "exit" を使用してください。
[wantan@localhost ~]$ set +o ignoreeof
[wantan@localhost ~]$ exit

二行目は設定してCtrl+D、四行目が解除してCtrl+Dを押した結果です。

■メタキャラを使ったファイル展開を無効にする

set -o noglob

検索などに用いる「*」などが無効になります。

■設定を確認する

いろいろ試して触っていると今がどの状態か忘れることもあるので以下のコマンドで現状の設定を表示します。
このコマンドで設定可能なオプションを確認して必要に応じて追加学習していってもいいでしょう。

[wantan@localhost ~]$ set -o
allexport       off
braceexpand     on
emacs           on
errexit         off
errtrace        off
functrace       off
hashall         on
histexpand      on
history         on
ignoreeof       off
interactive-comments    on
keyword         off
monitor         on
noclobber       off
noexec          off
noglob          off
nolog           off
notify          off
nounset         off
onecmd          off
physical        off
pipefail        off
posix           off
privileged      off
verbose         off
vi              off
xtrace          off
エイリアスの設定

IT用語では比較的きく機会も多いですが、エイリアスは別名のことです。
Linuxシステムでは狭義的に「alias」コマンドで、コマンドに別名をつけて呼び出せるようにすることをさします。

実践的にオプションを含むコマンドのエイリアスを作成してよく使用するコマンドをオプションも含めてすぐに実行できるようにするなどの用途で使う機会が多いでしょう。

■コマンドに別名をつける

alias [別名]='[コマンド]'

・実行例

[wantan@localhost ~]$ alias cdt='cd /tmp'
[wantan@localhost ~]$ cdt
[wantan@localhost tmp]$

解除については同様に「unalias」コマンドを使用します。

unalias [別名]

・実行例

[wantan@localhost tmp]$ unalias cdt
[wantan@localhost tmp]$ cdt
-bash: cdt: コマンドが見つかりません

また「alias」コマンドのみを実行すると現在設定されているエイリアスを表示することができます。

[wantan@localhost ~]$ alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

余談、実行しているコマンドがどんなエイリアスになっているかは他にもaliasコマンドを使ったり、typeコマンドでも確認できますね。

[wantan@localhost ~]$ alias ll
alias ll='ls -l --color=auto'
[wantan@localhost ~]$ type ll
ll は `ls -l --color=auto' のエイリアスです
関数の定義

Linuxではコマンドライン(シェル内)でも関数を定義して呼び出すことができます。
シェルスクリプト内では見たこともあるけど、コマンドライン上では使用したことがありませんでした。

関数の定義にはfunctionコマンドを使用します。

function [関数名]( [コマンド]; )

・実行例

[wantan@localhost ~]$ function testls { ls -al; }
[wantan@localhost ~]$ testls
合計 24
drwx------. 5 wantan group1  135  929 23:44 .
drwxr-xr-x. 3 root   root     20  73 09:00 ..
-rw-------. 1 wantan group1 6504 106 23:44 .bash_history
-rw-r--r--. 1 wantan group1   18  41  2020 .bash_logout
-rw-r--r--. 1 wantan group1  193  41  2020 .bash_profile
-rw-r--r--. 1 wantan group1  231  41  2020 .bashrc
drwxrw----. 3 wantan group1   19  725 03:16 .pki
-rw-------. 1 wantan group1  955  822 00:11 .viminfo
drwxrwxr-x. 4 wantan group1  216  818 23:12 lpic
drwxrwxr-x. 6 wantan group1  188  731 18:04 work


定義した関数を表示するにはdeclareコマンドを使用します。

[wantan@localhost ~]$ declare -f
testls ()
{
    ls --color=auto -al
}

また、定義した関数を削除するにはunsetコマンドを使用します。

[wantan@localhost ~]$ unset testls
[wantan@localhost ~]$ testls
-bash: testls: コマンドが見つかりません

ーーーーーーーーーーーーーーー

■参考
Linux - シェル環境のカスタマイズと使用