1. 概要

対話型シェルは、tty端末でのユーザー入力からコマンドを読み取ります。 ユーザーがログインに成功した後、インタラクティブシェルをデフォルトシェルまたはログインシェルと呼びます。

このチュートリアルでは、ユーザーのデフォルトシェルを変更する方法について説明します。

2. chshコマンドの概要

chsh コマンドは、util-linuxパッケージ同梱されています。これは、すべてのLinuxディストリビューション利用可能な標準パッケージです。

chshコマンドを-lオプションとともに使用すると、現在のシステムにインストールされているシェルを一覧表示できます。

$ chsh -l
/bin/sh
/bin/bash
/bin/zsh
/usr/bin/zsh
/usr/bin/git-shell

chsh コマンドのより一般的な使用法は、ユーザーのデフォルトのシェルを変更することです。

これを行う方法については、後のセクションで説明します。

3. 現在使用しているシェルはどれですか?

ログインに成功すると、デフォルトのシェルが使用されます。

デフォルトのシェルの変更について説明する前に、まず、現在使用しているシェルを見つけるためのいくつかの方法を学びましょう。

1つの方法は、現在実行中のシェルコマンドを格納するシステム環境$SHELL読み取ることです。

kent$ echo $SHELL
/bin/zsh

上記の例が示すように、現在のログインユーザーの実行中のシェルはZshです。

または、プロセス情報を調べることで、現在実行中のシェルを知ることができます。 Linuxは、実行中のシェルのPIDを特別な変数 $$に格納します。

kent$ echo $$
153492

上記の例では、PID 153492のプロセスが現在のシェルプロセスになります。 psコマンドと-pオプションを使用して、プロセスに関する詳細情報を取得できます。

kent$ ps -p $$
    PID TTY          TIME CMD
 153492 pts/2    00:00:00 zsh

出力は、Zshが現在のシェルであることを示しています。

4. 現在のユーザーのデフォルトシェルの変更

現在のログインユーザーのデフォルトシェルを変更したい場合は、 chsh とのコマンド -s オプション。

現在のユーザーのデフォルトのシェルをBashに変更しましょう:

kent$ chsh -s /bin/bash
Changing shell for kent.
Password: 
Shell changed.

デフォルトのシェルを正常に変更した後、現在実行中のシェルは変更されないことに注意してください。たとえば、ユーザーkentのデフォルトシェルとしてBashを設定しました。 、しかし現在のシェルはまだZshです:

kent$ ps -p $$ 
   PID TTY TIME CMD 
153492 pts/2 00:00:00 zsh

新しく変更されたデフォルトのシェルは、次にユーザーとログインしたときに有効になります ケント。

デフォルトのシェルコマンドは、ユーザーのログインに不可欠です。 コマンドが無効な場合、ユーザーとのログインに問題が発生します。

したがって、デフォルトのシェルを変更するときに、 chsh コマンドは、指定されたシェルコマンドが有効かどうかを確認します。

chshコマンドに無効なパスを渡した場合にがどうなるか見てみましょう。

kent$ chsh -s /bin/bashhhh
Changing shell for kent.
Password: 
chsh: "/bin/bashhhh" does not exist

chsh コマンドで、システムに現在インストールされているシェルを一覧表示できることを学びました。

chsh コマンドは、指定されたシェルがシステムの有効なシェルのリストにない場合、デフォルトのシェルの変更を拒否します

kent$ chsh -s /usr/bin/cat
Changing shell for kent.
Password: 
chsh: "/usr/bin/cat" is not listed in /etc/shells.
Use chsh -l to see list.

上記の例では、 / usr / bin /catコマンドをユーザーkent。のデフォルトシェルとして設定しようとしました。

catコマンドパスが有効です。 ただし、シェルリストには含まれていません。 したがって、 chsh は、対応するエラーメッセージとヒントで中止されました。

5. 他のユーザーのデフォルトシェルの変更

これまで、 chsh コマンドを使用して、現在のログインユーザーのデフォルトシェルを変更する方法を学習しました。

chsh を使用して、他のユーザーのデフォルトシェルを変更することもできます。 コマンドですが、 rootが必要です それを行う許可。

構文は非常に単純です。

root# chsh -s NEW_SHELL USERNAME

今回は、 root ユーザーとしてログインし、ユーザーkentのデフォルトシェルを/bin /shに変更します。

root# chsh -s /bin/sh kent 
Changing shell for kent.
Shell changed.

次に、ユーザー kent で再度ログインし、デフォルトのシェルが正常に変更されたかどうかを確認します。

sh-5.1$ echo $SHELL
/bin/sh

上記の出力が示すように、ユーザーkentのデフォルトシェルは/bin /shになりました。

6. / etc /passwdファイルの編集

chshコマンドを使用してユーザーのデフォルトシェルを変更する方法を学びました。 または、 / etc /passwdファイルを編集してこれを行うこともできます。

Linuxでは、 / etc/passwdファイルはプレーンテキストファイルです。 ユーザーログイン時に必要なユーザーアカウント情報を保存します

-rw-r--r-- 1 root root 2.1K Mar 12 10:27 /etc/passwd

許可フラグを見ると、すべてのユーザーがそれを読み取ることができますが、rootユーザーのみが/etc / passwdへの書き込みを許可されています。

/ etc /passwdファイルの内容を確認してみましょう。

kent$ cat /etc/passwd
root:x:0:0:root:/root:/bin/zsh
bin:x:1:1:bin:/bin:/bin/false
...
kent:x:1000:1000::/home/kent:/bin/zsh
guest:x:1001:1001::/home/guest:/bin/zsh
...
cups:x:209:209:cups helper user:/:/sbin/nologin
...

ファイルのすべての行には、ユーザーのアカウント情報が記録されています。 レコード内のフィールドはコロンで区切られます。

レコードには、ユーザー名、UID、GID、ホームディレクトリなどのユーザーのアカウントデータが含まれます。最後のフィールドは、ユーザーのデフォルトのシェルを示します。

/ etc / passwd ファイルのデフォルトのシェルフィールドを変更すると、ユーザーが次にシステムにログインしたときに有効になります。

/ etc / passwd ファイルを編集する利点の1つは、複数のユーザーのデフォルトシェルを一度に変更できることです。 時々、これはかなり便利かもしれません。

ただし、 / etc / passwdファイルを保存するとき、変更されたデフォルトのシェルでは検証または検証が行われないことに注意してください。

したがって、有効なシェルコマンドパスが指定されていることを確認する必要があります。 そうしないと、ユーザーは次回システムにログインする際に問題が発生します。

7. 結論

この簡単な記事では、例を通じてユーザーのデフォルトシェルを変更する方法を学びました。

chsh コマンドは、このタスクにとって非常に簡単です。 さらに、指定されたシェルがシステムで有効かどうかを確認できます。

現在のログイン以外のユーザーのデフォルトシェルを変更する場合は、[X103X]rootユーザー権限でchshコマンドを実行する必要があります。

さらに、 root ユーザーとしてログインできる場合は、 / etc / passwd ファイルを直接編集して、複数のユーザーのデフォルトシェルを変更することもできます。

ただし、 / etc/passwdファイルに加えた変更を再確認する必要があります / etc / passwd ファイルに誤りがあると、対応するユーザーのログインに失敗する可能性があります。