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

已发表: 2022-01-29
Ubuntu 风格的 Linux 笔记本电脑系统上的风格化 shell 提示符。
Fatmawati Achmad Zaenuri/Shutterstock

Bash 不是唯一的 Linux shell。 尝试其他 shell 很容易,例如非常流行的 Zsh。 当您找到您喜欢的一个时,使用chsh命令将其设置为您的默认 shell。 我们会告诉你怎么做。

为什么外壳很重要

Shell 位于您和操作系统之间。 它在终端窗口内提供环境,允许您键入命令和运行程序。 Shell 检查您的输入并确定您想要什么。 如果它可以自己执行您的出价,它就会这样做。 如果它需要外部帮助,它会搜索路径并找到可以按照您的要求执行任何操作的程序。

Linux 上有许多不同的 shell 可用。 它们都允许您执行相同的核心任务:探索文件系统、处理文件、启动程序和运行脚本。 然而,他们每个人都以自己的方式执行这些任务,并且有自己的特点和特质。

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

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

相关:什么是 ZSH,为什么要使用它而不是 Bash?

一桶贝壳

我们之前已经介绍过不同的 Linux shell,但这里快速介绍一下最常见的:

  • bash: Bourne Again shell 是许多发行版中的默认设置。
  • rbash:这个受限的bash shell 为在其中运行的人员或脚本提供了最少的功能。
  • ash: Almquist shell 是 bash 的轻量级版本。
  • 破折号: Debian Alquist Shell 是 Ubuntu 中的默认 shell 脚本。 虽然bash是默认的登录和交互式 shell,但dash用于运行系统进程,因为它比bash轻得多。
  • zsh: Z shell 是bash系列 shell 的现代版。 它提供了巧妙的改进,例如命令拼写检查和建议的更正。
  • fish:这个友好的交互式 shell 是从头开始编写的,不是从任何其他 shell 家族派生的。 它旨在对用户友好。 在它的许多其他好处中,fish 根据您的历史记录和当前文件夹的内容提供命令建议,类似于预测文本。
  • ksh: KornShell 提供了一种特别强大的脚本语言。

相关: Bash、Zsh 和其他 Linux Shell 之间有什么区别?

列出已安装的 Shell

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

 猫 /etc/shells 

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

sh是 Thompson shell,早在 1971 年就由贝尔实验室的 Ken Thompson 编写而成。 它不再维护,并且早已被现代 shell 所取代。 包含它纯粹是为了保持与旧脚本的兼容性,这些旧脚本仍然具有以下内容作为其第一行:

 #!/bin/sh

这指示系统使用sh shell 来执行脚本。 你的机器上真的有那个古老的 shell,它是否被用来运行你的脚本? which命令将告诉我们当您键入命令时实际运行的是哪个程序。

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

 哪个嘘

这似乎找到了一个二进制文件。 但是,如果我们再深入一点,我们会发现它是一个实际指向dash的符号链接,它是用于执行脚本的轻量级 shell:

 ls -l /bin/sh 

这是为希望在现代系统上找到sh的脚本提供安全网的一种简洁、轻量级的方式。

安装另一个外壳

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

 sudo apt-get install fish 

在 Manjaro 上,使用pacman

 sudo pacman -Sy 鱼

在 Fedora 上,键入以下内容:

 须藤 dnf 安装鱼

广告

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

 猫 /etc/shells 

我们的新外壳显示为/usr/bin/fish 。 记下那条路径——你很快就会需要它。

$SHELL 环境变量

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

 回声 $SHELL

让我们开始fish

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

 回声 $SHELL 

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

广告

当我们启动fish shell 时,我们会收到一条友好的欢迎消息,并且命令提示符会发生变化。 令人惊讶的是$SHELL环境仍然包含bash可执行文件/bin/bash的路径。 没关系——这很正常。

当您启动一个新的 shell(或任何其他程序)时,它会继承父 shell 的环境。 因此, fish shell 从bash shell 继承了全局和导出的环境变量。 因为$SHELL环境变量中的值没有改变,所以它在fish shell 中的值与在bash shell 中的值相同。

我们像任何其他程序一样运行fish 。 我们也可以使用exit来退出fish 。 它像任何其他程序一样关闭,然后我们返回bash shell。

这非常适合尝试新的 shell,看看它们能做什么,以及你是否与它们相处融洽。 您可以在跳跃之前进行探索,并采用一个作为您的首选外壳。

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

chsh 命令

chsh命令允许您更改默认 shell。 诀窍是意识到它允许您更改默认登录和默认交互式 shell。 您可能想要更改其中一个或两个,或两者兼而有之。

广告

每当您登录以获得命令提示符时,您都会使用配置为您的登录 shell 的 shell。 当您已经登录并打开终端窗口时,您可以使用配置为交互式 shell 的 shell。 这些可以是相同的或不同的外壳。

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

 chsh 

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

如果我们从另一台计算机远程连接到这台测试计算机,一旦我们登录,我们就会发现自己在fish中。

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

 chsh -s /usr/bin/fish 

系统会提示您输入密码并返回到当前 shell 的命令提示符。 您需要注销并重新登录才能使更改生效。 当您这样做时,您将看到问候语和fish shell 命令提示符。

广告

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

 回声 $SHELL 

更改另一个用户帐户的外壳

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

 sudo chsh -s /usr/bin/鱼玛丽

mary下次登录时,她会在打开终端窗口时看到新的 shell。

每个人都有一个最爱

只要您对自己选择的外壳感到满意,并且它适合您,那就太好了! 请记住,它必须能够运行常见的脚本,例如安装例程。 对于这里提到的shell,这应该不是问题。

当然,您也可以下载并安装一个新的 shell,然后将其用于试驾,而无需对您的计算机进行任何配置更改。 当您准备打结时, chsh将为您执行仪式。

相关:适合开发人员和爱好者的最佳 Linux 笔记本电脑