如何使用chsh更改Linux上的默认Shell
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
我们已经提到过bash
,dash
和rbash
,但是sh
是什么? ``
" sh"是Thompson的shell,早在1971年由Bell Labs的成名Ken Ken Thompson编写。它不再维护,并且很久以来已被现代shell取代。纯粹是为了保持与旧脚本的兼容性,而旧脚本的第一行仍然是以下内容:
#!/bin/sh
这指示系统使用sh
shell执行脚本。计算机上确实有那个古老的shell,并且该shell用于运行脚本吗?当我们键入命令时,"哪个"命令将告诉我们实际运行哪个程序。
让我们看看当我们输入sh
时会运行什么:
which sh
这似乎是找到二进制文件。但是,如果我们进行更深入的研究,我们将看到它实际上是指向dash的符号链接,dash是用于执行脚本的轻量级shell:
ls -l /bin/sh
这是为希望在现代系统上找到" sh"的脚本提供安全网的一种简洁,轻巧的方法。
安装另一个shell
让我们安装fish
shell并将其设置为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
让我们启动fish
shell:
fish
现在,让我们再次检查$ SHELL环境变量的含义:
echo $SHELL
第一次使用echo $ SHELL
时,我们处于bash
shell中。环境变量保存着bash
可执行文件/ bin / bash的路径。
当启动fish
shell时,我们会收到友好的欢迎消息,并且命令提示符也会更改。令人惊讶的是,$ SHELL环境仍然保留着bash可执行文件/ bin / bash的路径。没关系,这很正常。
启动新shell程序(或者任何其他程序)时,它会继承父shell程序的环境。因此,fish
shell继承了bash
shell的全局和导出环境变量。由于$ SHELL环境变量中的值未更改,因此在fishshell中的值与在bashshell中的值相同。
我们正在像其他程序一样运行fish
。我们还可以使用"退出"退出"鱼"壳。它像其他程序一样关闭,我们返回到bash
shell。
这对于尝试新的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
当mary
next登录时,打开终端窗口时,她会看到新的shell。