如何使用chsh更改Linux上的默认Shell

时间:2020-01-09 10:38:58  来源:igfitidea点击:

Bash不是唯一的Linux Shell。尝试其他非常流行的shell(例如Zsh)很容易。找到所需的shell后,可使用chsh命令将其设置为默认shell。我们将向我们展示如何。

为什么shell很重要

该shell位于我们和操作系统之间。它在终端窗口内提供环境,使我们可以键入命令并运行程序。 Shell检查输入并弄清楚我们想要什么。如果它可以自己执行出价,那么它可以执行。如果需要外部帮助,它将搜索路径并找到可以完成我们所要求的程序。

Linux上有许多不同的Shell。它们全都允许我们执行相同的核心任务:浏览文件系统,处理文件,启动程序和运行脚本。但是,它们各自以自己的方式执行这些任务,并且具有自己的特殊功能和特质。

shell往往是由希望事物以特定方式表现的人设计的。如果想法与该设计师的想法保持一致,那么该shell很可能适合我们。另外,在Linux上尝试新的shell很容易。

在大多数Linux发行版中,包括Ubuntu,默认的shell是bash。它做得很好并且非常有能力。但是,另一个shell程序可能会节省时间,这将对工作流产生重大影响。我们永远不会知道我们是否不看!

一桶贝壳

之前我们已经介绍了不同的Linux shell,但是以下是最常见的Linux快速入门:

  • bash:Bourneagainshell是许多发行版中的默认shell。

  • rbash:此受限bashshell为其中运行的人员或者脚本提供了最小的功能。

  • 灰:Almquistshell是bash的较浅版本。

  • 破折号:Debian Alquist Shell是Ubuntu中的默认Shell脚本。 bash是默认的登录和交互式shell,而dash用于运行系统进程,因为它比bash轻得多。

  • zsh:Z shell是bash壳系列的现代代表。它提供了整洁的改进,例如命令拼写检查和建议的更正。

  • 鱼:这种友好的交互式shell是从头开始编写的,并不衍生自任何其他shell家族。目的是使用户友好。除了其他优点外,fish还可以根据历史记录和当前文件夹的内容为命令提供建议,类似于预测文本。

  • ksh:KornShell提供了一种特别强大的脚本语言。

列出已安装的shell

要查看计算机上安装了哪些shell,请使用此命令。它只是列出/ etc / shells文件的内容:

cat /etc/shells

我们已经提到过bashdashrbash,但是sh是什么? ``

" sh"是Thompson的shell,早在1971年由Bell Labs的成名Ken Ken Thompson编写。它不再维护,并且很久以来已被现代shell取代。纯粹是为了保持与旧脚本的兼容性,而旧脚本的第一行仍然是以下内容:

#!/bin/sh

这指示系统使用shshell执行脚本。计算机上确实有那个古老的shell,并且该shell用于运行脚本吗?当我们键入命令时,"哪个"命令将告诉我们实际运行哪个程序。

让我们看看当我们输入sh时会运行什么:

which sh

这似乎是找到二进制文件。但是,如果我们进行更深入的研究,我们将看到它实际上是指向dash的符号链接,dash是用于执行脚本的轻量级shell:

ls -l /bin/sh

这是为希望在现代系统上找到" sh"的脚本提供安全网的一种简洁,轻巧的方法。

安装另一个shell

让我们安装fishshell并将其设置为dave的默认值。在Ubuntu上,我们键入以下命令:

sudo apt-get install fish

在Manjaro上,使用pacman

sudo pacman -Sy fish

在Fedora上,键入以下内容:

sudo dnf install fish

安装完成后,我们可以再次检查已安装的shell:

cat /etc/shells

我们的新shell显示为/ usr / bin / fish。请注意该路径,我们很快就会需要它。

$ SHELL环境变量

$ SHELL环境变量保存当前shell的名称。我们可以用echo来检查设置为哪一个:

echo $SHELL

让我们启动fishshell:

fish

现在,让我们再次检查$ SHELL环境变量的含义:

echo $SHELL

第一次使用echo $ SHELL时,我们处于bashshell中。环境变量保存着bash可执行文件/ bin / bash的路径。

当启动fishshell时,我们会收到友好的欢迎消息,并且命令提示符也会更改。令人惊讶的是,$ SHELL环境仍然保留着bash可执行文件/ bin / bash的路径。没关系,这很正常。

启动新shell程序(或者任何其他程序)时,它会继承父shell程序的环境。因此,fishshell继承了bashshell的全局和导出环境变量。由于$ SHELL环境变量中的值未更改,因此在fishshell中的值与在bashshell中的值相同。

我们正在像其他程序一样运行fish。我们还可以使用"退出"退出"鱼"壳。它像其他程序一样关闭,我们返回到bashshell。

这对于尝试新的shell,查看它们可以做什么以及是否与它们相处非常好。我们可以在进行跳转之前先进行探索,然后将其中一个作为入门指南。

如果决定将fish或者其他任何shell设置为默认值,则需要使用chsh命令。

chsh命令

chsh命令允许我们更改默认的shell。诀窍在于,它允许我们更改默认登录名和默认交互式shell。我们可能要更改一个或者另一个,或者两者都更改。

无论何时登录以获得命令提示符,都将使用配置为登录shell的shell。登录并打开终端窗口后,请使用配置为交互式shell的shell。这些可以是相同或者不同的shell。

要设置登录shell,请使用不带参数的chsh

chsh

系统提示我们输入密码。然后,我们必须键入新shell的路径,然后按Enter。

如果我们从另一台计算机远程连接到该测试计算机,则登录后将发现自己位于" fish"shell中。

要更改交互式shell,请使用带有-s选项的chsh。在命令行中将路径传递到新的shell:

chsh -s /usr/bin/fish

系统将提示我们输入密码,并返回到当前Shell的命令提示符。我们需要注销然后重新登录,以使更改生效。完成后,我们将看到问候语和" fish" shell命令提示符。

$ SHELL环境变量现在包含新默认shell的路径:

echo $SHELL

更改另一个用户帐户的shell

如果我们具有root特权并可以使用sudo,则可以更改其他用户帐户的shell。该命令与之前的命令相同,只是在命令行中添加了该用户的用户名:

sudo chsh -s /usr/bin/fish mary

marynext登录时,打开终端窗口时,她会看到新的shell。