news 2026/6/14 19:01:26

蓝易云 :Linux中的chsh命令及示例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
蓝易云 :Linux中的chsh命令及示例

在 Linux 账号体系里,chsh(change shell)用于变更用户的登录 Shell(也就是用户登录后默认启动的命令解释器)。它的核心价值是:把“人—终端—系统”的交互入口标准化,便于团队统一运维基线、提升效率与可控性 🔧。(man7.org)


1)chsh 改的到底是什么?

  • 登录 Shell 记录在账号数据库中(本地常见是/etc/passwd 的最后字段)。

  • chsh 通常会校验目标 shell 是否在/etc/shells 白名单内,避免把账号切到一个“不被认可/不可用”的程序导致登录失败。(mankier.com)

  • 在企业环境如果账号来自LDAP/Kerberos 等“非本地目录”,是否能改取决于系统集成方式(例如是否通过 libuser 支持非本地条目);否则你改了本机也未必生效。(man7.org)


2)参数速查表(建议纳入运维手册)

目标命令/参数关键点(你真正要记的)
列出可用 Shellchsh -l输出来自 /etc/shells
指定登录 Shellchsh -s /path/to/shell变更“登录默认 shell”,通常需重新登录生效
交互式修改chsh不带参数会提示你输入 shell 路径
查看帮助/版本chsh -h/chsh -V排错时确认实现版本与选项

(man7.org)


3)高频示例(每段命令都给你拆开讲明白)

示例 A:先做“白名单核验”,再谈变更 ✅

chsh -l

解释:

  • -l的作用是“列出允许设置的 shell”。这一步相当于上线前的“依赖检查/准入校验”。

  • 如果你要用的 shell 不在列表里,直接-s往往会被拒绝(不同发行版策略略有差异,但企业基线通常会开启校验)。(mankier.com)

你也可以直接看文件(更直观):

cat /etc/shells

解释:

  • 这是系统维护的“可作为登录 shell 的程序清单”。把它当作账号入口的“允许名单”。


示例 B:把自己的登录 Shell 切到 zsh(常见场景)

chsh -s /bin/zsh

解释:

  • -s表示“设置登录 shell”,后面跟绝对路径

  • 执行后可能会让你输入当前用户密码(取决于权限与 PAM 策略)。

  • **注意点:**很多人改完立刻echo $SHELL发现没变,其实是因为环境变量通常在“登录时”初始化,建议退出重登或重新开启会话后再验证。


示例 C:交互式修改(适合不想记参数的人)

chsh

解释:

  • 不带参数会进入交互流程,让你输入新的 shell 路径。

  • 运维上不推荐在自动化脚本里用这种方式(不可控、不可审计),但人工临时处理很顺手。


示例 D:以管理员身份给某个用户改 Shell(生产变更要走流程)

sudo chsh -s /usr/bin/fish alice

解释:

  • sudo:把动作提升到管理员权限,符合“权限边界”要求。

  • alice:目标用户名。

  • 企业建议:把这类动作纳入变更记录,并准备回滚预案(比如先确认原 shell 路径,必要时改回)。


示例 E:变更后如何“验收”(别只看 $SHELL)

getent passwd "$USER" | cut -d: -f7

解释:

  • getent passwd "$USER":从系统账号数据库读取该用户记录(比直接读 /etc/passwd 更通用)。

  • cut -d: -f7:以:分隔,取第 7 段——这通常就是“登录 shell 字段”。

  • 这是验收“配置是否落库”的更可靠方式。

再补一个看当前会话正在跑什么 shell 的方法:

echo $0

解释:

  • $0显示当前进程名(例如-bash),用于确认“你此刻处在哪个 shell 会话里”,和“账号默认登录 shell”是两件事。(Ask Ubuntu)


4)常见坑与务实处置(少走弯路)

  1. 改完登录不上去:多半是把 shell 指到了不存在路径,或不在/etc/shells。处理策略是用可用终端/救援模式改回bash

  2. 提示 PAM 认证失败:这通常是权限或 PAM 规则导致(比如策略要求管理员操作,或限制可用 shell)。按企业规范走:用sudo、核对 /etc/shells、检查 PAM 相关配置。(Baeldung on Kotlin)

  3. 目录服务账号改不动:如果账号来自 LDAP/域控,往往需要在目录侧改“loginShell”等属性,本机 chsh 可能只是“改了个寂寞”。(man7.org)


5)一张“操作工作流图”(便于你放到文档里)

[确认目标Shell] -> [chsh -l / cat /etc/shells 校验白名单] -> [执行 chsh -s ...(必要时sudo)] -> [退出重登] -> [getent 验收落库 + echo $0 验收会话]

如果你告诉我你是 Debian/Ubuntu 还是 CentOS/RHEL 系列,以及你要切换到哪种 shell(bash/zsh/fish),我可以按你的“生产环境口径”把命令路径、验收点、回滚命令整理成一段可直接纳入运维 SOP 的版本。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 15:44:43

回归测试策略

“全量执行”≠“有效覆盖”,而是要基于风险、数据、业务价值做“精准选例”。我把这些策略拆解成 可直接落地的实战框架,方便你在团队里推行: 回归测试用例精准选择5大核心策略(实战版) 1. 基于风险的动态追溯策略&a…

作者头像 李华
网站建设 2026/6/10 15:48:05

2026必备!9个AI论文网站,助研究生搞定毕业论文!

2026必备!9个AI论文网站,助研究生搞定毕业论文! AI 工具让论文写作不再焦虑 在研究生阶段,论文写作是一项不可避免的挑战。无论是开题报告、文献综述,还是实证分析和结论撰写,每一步都对学生的学术能力和时…

作者头像 李华
网站建设 2026/6/11 20:34:54

基于Springboot+Vue的Java医院药品管理系统(源码+lw+部署文档+讲解等)

课题介绍本课题旨在设计并实现一套基于SpringBootVue的Java医院药品管理系统,以解决医院药品采购杂乱、库存管控滞后、出入库登记繁琐、药品效期预警不足等痛点,搭建集药品采购、库存管理、出入库管控、效期跟踪于一体的医疗服务平台,实现药品…

作者头像 李华
网站建设 2026/6/10 13:50:32

如何在 Python 中使用 Jupyter Kernel 运行代码并获取输出

在这篇文章中,我们将介绍如何在 Python 中使用 jupyter_client 包来启动 Jupyter Kernel,并通过它执行代码并获取输出。使用 Jupyter Kernel 是一种非常强大的方式,可以让你在 Python 程序中动态执行代码并获取结果。 下面是实现这一过程的详…

作者头像 李华