Linuxで現在のシェルを確認する
1. 概要
シェルは、オペレーティングシステムへのコマンドラインインターフェイスを提供するプログラムです。
LinuxおよびUnixライクなオペレーティングシステムは、ユーザーに異なるシェルを提供します。 Bash(Bourne Again Shell)、csh(C Shell)、ksh(Korn Shell)、およびsh(Bourne Shell)が最も一般的なものです。
このチュートリアルでは、現在作業しているシェルを見つけるためのさまざまな方法を見ていきます。
2. echoコマンドの使用
Linuxのechoコマンドは、引数として渡されるテキストまたは文字列の行を表示するために使用されます。 このコマンドを使用して、現在のシェルを印刷することもできます。
2.1. echo $ SHELL
$ SHELL 変数には、デフォルトのシェルの名前が含まれています。 その値を表示できます。
$ echo $SHELL
/bin/bash
このアプローチはほとんどの場合機能しますが、現在実行中のシェルがデフォルトのシェルではない可能性があるため、信頼できる方法ではありません。
2.2. エコー$0
$0変数でechoコマンドを使用することもできます。
$ echo $0
bash
このアプローチはコマンドラインではうまく機能しますが、スクリプト内からは機能しません。スクリプトファイル内では、 $0変数は現在のシェルを出力しません。 代わりに、ファイルまたはプログラムの名前を出力します。
3. psコマンドの使用
ps (プロセスステータス)コマンドは、現在実行中のプロセスのスナップショットを提供します。
$ ps
PID TTY TIME CMD
4467 pts/0 00:00:00 bash
5379 pts/0 00:00:00 ps
出力の最後の列CMDは、bashシェルが現在実行中であることを示しています。
4. / etc /passwdファイルの表示
/ etc / passwd ファイルは、ユーザー名、ユーザーID、グループID、ホームディレクトリ、シェルなどのユーザーのアカウント情報を含むLinuxのプレーンテキストファイルです。
grep コマンドを使用して、このファイルで、現在ログインしているユーザーのユーザー名で始まる文字列を検索できます。
$ grep "^$USER" /etc/passwd
vroot:x:1000:1000:Vroot:/home/vroot:/bin/bash
出力の最後の部分は、デフォルトのシェルがbashであることを示しています。 繰り返しますが、デフォルトのシェルが常に現在のシェルであるとは限らないため、これは信頼できるアプローチではありません。
5. lsofコマンドの使用
lsof コマンドは、実行中のすべてのプロセスの開いているすべてのファイルを一覧表示します。 -p オプションを指定してこのコマンドを使用すると、現在のシェルのプロセスIDに属するファイルのみを選択できます。
$ lsof -p $$
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 2796 vroot cwd DIR 253,2 4096 2097153 /home/vroot
bash 2796 vroot rtd DIR 253,0 4096 2 /
bash 2796 vroot txt REG 253,0 1514000 2490662 /usr/bin/bash
bash 2796 vroot mem REG 253,0 8406312 131168 /var/lib/sss/mc/passwd
............... other lines omitted ...................................
bash 2796 vroot 255u CHR 136,0 0t0 3 /dev/pts/0
$$ は、現在のシェルのプロセスIDに展開される特別なパラメーターです。
出力の最初の列COMMANDは、実行中のシェルがbashであることを示しています。
6. readlinkコマンドの使用
readlink コマンドは、解決されたシンボリックリンクまたは正規ファイル名を出力します。 / proc / [pid] / exe は、プロセスID pidで実行されたコマンドの実際のパス名を含むシンボリックリンクです。
$$ 特殊パラメーターを使用して、現在のシェルのプロセスIDでreadlinkを実行できます。
$ readlink /proc/$$/exe
/usr/bin/bash
パス名からシェルコマンドまで、実行しているシェルはbashであると推測できます。
7. / proc / $$ /cmdlineを使用する
/ proc / [pid] / cmdline は、ID pidのプロセスの完全なコマンドラインを含む読み取り専用ファイルです。
$$特殊パラメーターをpidとして使用できます。
$ cat /proc/$$/cmdline
bash
出力は、bashシェルを実行していることを示しています。
8. その他のアプローチ
時々、私たちが見たアプローチのどれもうまくいかないかもしれません。 これは、実行可能ファイルが実行中のシェルと一致しない場合に発生する可能性があります。
このような場合、いくつかのシェル固有の環境変数を調べて、どのシェルが実行されているかを推測できます。
たとえば、bashシェルの場合、 $BASH変数が設定されます。 同様に、tcshシェルでは、 $version変数が設定されます。
$PS1および$PS2 変数はshシェルで設定され、 $PS3および$PS4変数はkshシェル。
9. 結論
この記事では、現在Linuxで実行しているシェルを判別するさまざまな方法を学びました。 いくつかのアプローチの例と各アプローチの制限について見てきました。 また、一般的なアプローチが機能しない場合に使用できるヒューリスティックについても学びました。