ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Linux chsh 命令详解:更换登录 Shell 的完整实战指南(linux-command 项目)

Linux chsh 命令详解:更换登录 Shell 的完整实战指南(linux-command 项目) 文档教程【免费下载链接】linux-commandLinux命令大全搜索工具内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux项目地址https://gitcode.com/GitHub_Trending/linux/linux-command点击查看免费下载导读chshchange shell是 Linux 系统中用于更换用户登录 Shell 的核心命令也是 linux-command 仓库中收录的常用系统管理工具之一。本文以 command/chsh.md 文档为基础结合仓库内用户管理相关命令文档如 useradd、usermod、nologin系统讲解 chsh 的语法、选项、底层原理与真实操作流程读完即可独立完成查看可用 Shell、切换 Shell、改回原 Shell的完整闭环操作。命令概述chsh 是做什么的chsh命令用来更换登录系统时使用的 shell。Linux 系统中每个用户都有一项默认登录 Shell 的配置它决定了用户通过终端或 SSH 登录后所进入的交互环境如 bash、zsh、sh 等。chsh 允许普通用户或管理员在不重建账号的前提下安全地变更这一设置。若在不指定任何参数与用户名称的情况下执行 chsh命令会以交互应答的方式进行设置——系统会提示输入新的 Shell 路径并在完成后反馈修改结果适合不熟悉命令行选项的用户使用。语法chsh(选项)(参数)选项-sshell 名称或--shellshell 名称更改系统预设的shell环境。 -l或--list-shells列出目前系统可用的shell清单 -u或--help在线帮助 -v或-version显示版本信息。参数用户名要改变默认shell的用户。实操一查看系统安装了哪些 Shell两种方法修改 Shell 之前首先需要确认系统中存在哪些可用的 Shell。文档给出了两种等效方法第一种使用 chsh -l 直接查看[rocrocketlocalhost ~]$ chsh -l /bin/sh /bin/bash /sbin/nologin /bin/zsh第二种查看 /etc/shells 文件[rocrocketlocalhost ~]$ cat /etc/shells /bin/sh /bin/bash /sbin/nologin /bin/zsh其实chsh -l读取的正是/etc/shells这个文件。该文件是系统公认的合法 Shell 清单只有列在其中的 Shell 才能被 chsh 设置为登录 Shell这既是安全边界也是兼容性保证。值得留意的是输出中出现了/sbin/nologin。在 command/nologin.md 中有更详细的说明将某个用户的登录 Shell 设置为/sbin/nologin即可礼貌地拒绝该用户登录系统终端输出 This account is currently not available 并记录日志常用于仅需启动服务、无需交互登录的账号。这与chsh -l清单中的 nologin 项相互印证说明可用 Shell并不局限于交互式解释器。实操二查看当前正在使用的 Shell[rocrocketlocalhost ~]$ echo $SHELL /bin/bash注意SHELL一定要是大写。可以看到目前使用的 shell 是/bin/bash。$SHELL是登录时由系统根据/etc/passwd中该用户的 Shell 字段注入的环境变量因此它反映的是登录 Shell而不是临时执行的其他解释器。实操三把我的 Shell 改成 zsh假设系统中已安装 zsh如上述/bin/zsh执行[rocrocketlocalhost ~]$ chsh -s /bin/zsh Changing shell for rocrocket. Password: Shell changed. [rocrocketlocalhost ~]$使用 chsh 加选项-s就可以修改登录的 shell 了。此时你会发现执行echo $SHELL后仍然输出为/bin/bash这是因为该变量在本次会话登录时就已经固定需要重启重新登录你的 shell 才完全投入到 zsh 怀抱中去。底层原理chsh -s 修改的是 /etc/passwdchsh -s其实修改的就是/etc/passwd文件里和你的用户名相对应的那一行。现在来查看下[rocrocketlocalhost ~]$ cat /etc/passwd | grep ^rocrocket rocrocket:x:500:500:rocrocket,China:/rocrocket/PSB/home:/bin/zsh你可以发现输出内容的最后部分已经变成了/bin/zsh了。/etc/passwd中每一行以冒号分隔的字段依次是用户名、密码占位符、UID、GID、注释信息、家目录、登录 Shell。chsh 的核心工作就是替换最后这个字段。下次重启或重新登录的时候linux 就会读取这一字段来启动 shell 了。为什么普通用户也能修改自己的 Shell普通用户执行 chsh 时会被要求输入自己的登录密码如上例中的Password:提示这是系统对身份的一次复核而修改动作仅限定为该用户自己的 Shell 字段因此不会破坏系统其他账号的配置。管理员则可以直接指定用户名来修改任意用户的 Shell例如chsh -s /bin/zsh otheruser。实操四把 Shell 修改回 /bin/bash改回默认的 bash 同样一行命令即可[rocrocketlocalhost ~]$ chsh -s /bin/bash Changing shell for rocrocket. Password: Shell changed.同样地重新登录后生效可通过echo $SHELL验证是否恢复为/bin/bash。结合仓库源码chsh 在用户管理工具链中的位置在 linux-command 仓库中chsh 并非孤立存在它与一系列用户管理命令共同构成完整的账号管理链路从仓库文档中可以清晰看到它们的协作关系创建账号时的 Shell 预设command/useradd.md 中的-s, --shell SHELL选项用于在创建用户时直接指定登录 Shell未指定时则使用/etc/default/useradd中的默认值。这相当于在账号创建阶段就完成了 chsh 才能做的修改。事后修改 Shellchsh 正是对已存在账号执行同样修改的专用命令而 command/usermod.md 中的-sshell选项也可以修改用户登入后所使用的 shell与 chsh 功能等价适合需要在一条命令中同时修改其他账号属性如-L锁定、-G附加组的场景。禁止登录的 Shell 技巧command/nologin.md 演示了把/etc/passwd中用户 Shell 改为/sbin/nologin来禁止个别用户登录的方法——这正是 chsh -s /sbin/nologin 的典型应用场景常用于系统维护期间或服务账号。身份切换验证command/su.md 中的su -l选项在切换身份时会同时变更HOME、SHELL、USER、logname等环境变量因此切换后echo $SHELL会显示目标用户的登录 Shell可作为验证 chsh 修改是否生效的间接手段。可见从 useradd 创建、usermod/chsh 修改到 nologin 禁用Shell 字段始终是贯穿整个用户管理流程的关键配置项。使用注意事项与常见误区必须使用 /etc/shells 中的合法路径chsh 会校验-s指定的路径是否存在于/etc/shells中随意填写一个未登记的路径会被拒绝如需启用某个已安装但未登记的 Shell可先将其加入/etc/shells需要 root 权限。修改后不会立即生效$SHELL变量在会话登录时已固化执行 chsh 后需重新登录或重启终端才能看到变化这是文档实操中特别强调的易错点。权限区分普通用户只能修改自己的 Shell 且需输入密码root 用户可以配合用户名参数修改任意账号例如批量将服务账号的 Shell 统一改为/sbin/nologin。与临时切换区分chsh 是永久修改登录配置若只想在本次会话临时使用其他 Shell直接执行该 Shell如zsh或使用su -s即可不会改动/etc/passwd。总结chsh 是 Linux 用户管理中小而关键的命令语法只有-s、-l、-u、-v四个核心选项参数仅需一个用户名但其背后关联着/etc/shells的合法性校验、/etc/passwd的字段语义以及登录 Shell 的生效机制。掌握chsh -l查看清单、chsh -s 路径切换、echo $SHELL验证这一套操作组合再结合仓库中 useradd、usermod、nologin 等命令文档即可在实际工作中灵活完成 Shell 环境的定制与用户登录策略的管理。赞分享文档教程【免费下载链接】linux-commandLinux命令大全搜索工具内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux项目地址https://gitcode.com/GitHub_Trending/linux/linux-command点击查看免费下载相关推荐Linux 光盘刻录命令 cdrecord 实战指南linux-command 命令手册详解Linux 光盘刻录命令 cdrecord 实战指南linux command 命令手册详解 本篇指南聚焦 Linux 系统下的经典刻录命令 cdrecor文档教程mistral.rs 代码执行审批Code-Execution Approval流程实战基于 agent_permissionask 的 Agent 安全闭环mistral.rs 代码执行审批Code Execution Approval流程实战基于 agent_permissionask 的 Agent文档教程在 Next.js 中构建 AI 工具assistant-ui use generative 指令与 withAui 编译器集成实战在 Next.js 中构建 AI 工具assistant ui use generative 指令与 withAui 编译器集成实战 assistant文档教程上一篇ChatGPT-CodeReview基于AI的智能代码审查机器人下一篇res-downloader 实战教程本地代理一键抓取视频号、抖音、网页图片5 分钟跑通下载流程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表