2019年7月24日 星期三

修改shell

当登录系统时,系统会自动启动一个shell。这个shell就是登录shell。那么怎样判定您登录的是哪种shell?如何临时修改shell?以及如何用口令文件永久修改登录shell: csh?

1.临时修改shell?
如果你没有改变默认的shell,否则登录shell就是系统为您的用户标识所赋予的shell。如果您使用的是Linux,那么登录的shell可能是bash。如果使用的是商业Unix,那么登录的shell可能就是Korn shell。如果使用的是FreeBSD,那么登录的shell可能是Tcsh。

临时秀改shell的方式非常简单。在开始之前,请记住shell就是一个程序,可以像其他程序一样运行。这意味在任何时候,都可以停止当前的shell,并通过简单地运行一个shell启动另一个shell。如果您登录的shell是bash。输入了几条命令,然后决定试试Tcsh,只需输入:

tcsh

当前的shell(bash)暂停,新shell(Tcsh)启动。现在就可以使用Tcsh处理工作了。当准备切换回Bash是,只需按^D表示不再有数据了即可。这时Tcsh shell结束,然后返回到最初的Bash shell。这就是临时修改shell的方式。
如果想体验一下,可以先使用下述命令查看系统上安装了哪些shell:

less etc/shells

如果您正在体验,但不知道正在使用的是哪个shell,则可以在任何时间使用下述命令显示当前shell的名称:

echo $SHELL
提示:
启动一个新shell后,接着再启动一个新shell,然后再启动一个新shell,如此重复是可能的。但是,当要结束工作会话时,只能从原始登录shell注销。
因此,如果启动了不止一个新shell,则必须原路返回到登录shell才能注销。

2.永久修改shell

Unix有两个文件用来描述系统中所有的用户标识。第一个文件是/etc/passwd,即口令文件,包含每个用户标识的基本信息。第二个文件是/etc/shadow,即影子文件,包含每个用户标识的实际口令。
当登录时,Unix从这两个文件中检索与您用户标识相关的信息。特别是/etc/passwd文件,该文件包含有登录的shell的名称。因此,为了修改登录shell,所需做的工作就是对/etc/passwd文件进行一个简单的修改。但是,该修改不能直接进行。这样做太危险了,因为破坏/etc/passwd文件会严重破坏系统。修改该文件需要使用一个特殊的命令。

在讲述这个命令之前,需要了解一些关于文件名称的信息。您需要知道的就是路径名/etc/passwd/etc目录中的passwd文件。目录就是windows或者Mac用户所谓的文件夹。
当改变shell时,需要以路径名称指定shell程序的名称。可用shell路径名存储在一个名为/etc/shells的文件中。要显示该文件,可以使用less命令。

Less etc/shells

下面是一个典型的输出:

/bin/sh
/bin/bash
/bin/tcsh/bin/csh

从该输出中可以看出,在这个例子中有4个可用的shell:sh, bash, tcsh和csh。
修改登录shell时应使用chsh(change shell,改变shell)命令。该命令的语法为:

chsh [-s shell] [userid]

其中userid是希望改变其shell的用户的用户标识。shell是新登录shell的路径名。
默认情况下,chsh假定您希望改变自己的登录shell。因此不用指定用户标识。例如,将自己的登录的shell修改为/bin/tcsh,可以使用命令:

chsh -s /bin/tcsh

如果没有输入-s选项和shell的名称,那么chsh将提示(也就是要求)输入-s选项和shell的名称。例如,假设您作为harley登录,而且输入了:

chsh

那么您将看到:

Changing shell for harley.
New shell [/bin/bash] :

此时chsh告诉您两件事。首先,您将会修改用户标识harley的登录shell。其次当前登录的shell是/bin/bash
现在您有两个选择。如果输入新shell的路径名,chsh将为您改变登录shell。例如,您当前登录shell修改为Tcsh,可以输入:

/bin/tcsh

如果您按了<Enter>键,而没有键入任何内容,那么chsh不会做任何改变。这是一种查看当前登录shell的好方法。
至于Linux,chsh命令还有另外一个有用的选项:使用-l(list,列举)选项可以显示当前可用的全部shell:

chsh -l

一些Unix系统没有chsh命令,此时,要使用passwd命令的一个变体来修改登录shell。例如,对于AIX来说,使用passwd -s;对于Solaris来说,使用passwd -e
提示
当改变登录shell时,修改的是/etc/passwd文件。因此,无论怎么修改,都要等到下一次登录系统登录时才能生效(就像改变口令一样)。

沒有留言:

張貼留言