如何使用 chsh 在 Linux 上更改默认 Shell
已发表: 2022-01-29 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
我们已经提到了bash
、 dash
和rbash
,但是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 命令 | ||
文件 | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look ·字符串·类型·重命名· zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm | |
流程 | 别名· screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat ·超时·墙·是·杀死·睡眠· sudo · su ·时间· groupadd · usermod ·组· lshw ·关机·重新启动·停止·关机· passwd · lscpu · crontab ·日期· bg · fg | |
联网 | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
相关:适合开发人员和爱好者的最佳 Linux 笔记本电脑