前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >登录Shell与非登录Shell之间的区别

登录Shell与非登录Shell之间的区别

作者头像
程序熵
发布2024-10-28 12:12:09
850
发布2024-10-28 12:12:09
举报
文章被收录于专栏:技术汇

问题

我理解交互式shell和非交互式shell之间的基本区别。但是,登录shell和非登录shell之间究竟有什么区别呢?

你能给出一些非交互式登录shell的使用示例吗?


回答

登录shell是你登录进行交互式会话时,以你的用户ID执行的第一个进程。登录进程告诉shell以登录shell的方式运行,遵循一个惯例:将参数0(通常是shell可执行文件的名称)加上一个-字符作为前缀(例如-bash,而正常情况下是bash)。登录shell通常会读取一个文件,这个文件会执行一些操作,比如设置环境变量:对于传统的Bourne shell是/etc/profile~/.profile,对于bash还额外有~/.bash_profile,对于zsh是/etc/zprofile~/.zprofile,对于csh是/etc/csh.login~/.login等。

使用命令 echo $0 即可区分当前 shell 是否是登录 shell。

当你通过文本控制台登录,或者通过SSH,或者使用su -命令时,你会得到一个交互式登录shell。而当你在图形模式下登录(在X显示管理器上),你不会得到一个登录shell,相反,你会得到一个会话管理器或窗口管理器。

运行非交互式登录shell的情况很少见,但是一些X设置在通过显示管理器登录时会这样做,以便安排读取配置文件。其他设置(这取决于发行版和显示管理器)会显式读取/etc/profile~/.profile,或者不读取它们。另一种获得非交互式登录shell的方法是通过标准输入远程登录并传递一个命令,而这个命令并不是来自终端的,例如,可以通过本地存储的脚本向服务器发送命令来实现:ssh example.com < my-script-which-is-stored-locally(与ssh example.com my-script-which-is-on-the-remote-machine这种方式相反,它运行的是一个非交互式的非登录shell)。

编写测试脚本 my-script-which-is-stored-locally 内容如下:

代码语言:javascript
复制

执行测试截图如下:

两者的主要区别在于它们启动的方式、执行的操作以及读取的配置文件。以下是它们之间的一些关键区别:

1.启动方式: •登录Shell:当你通过文本控制台、SSH、或者使用su -命令登录系统时,系统会启动一个登录Shell。登录Shell是用户登录系统后启动的第一个进程。•非登录Shell:当你在已经存在的会话中打开一个新的终端(例如在图形界面中打开一个新的终端窗口、在screen或tmux会话中打开一个新的窗口、在Emacs的终端缓冲区中打开一个新的Shell等)时,启动的是非登录Shell。 2.读取的配置文件: •登录Shell:登录Shell会读取特定的配置文件来设置环境变量和执行其他初始化操作。对于Bash,这些文件通常是/etc/profile~/.bash_profile~/.bash_login~/.profile。对于其他Shell,如Zsh或Csh,它们有各自的配置文件。•非登录Shell:非登录Shell通常不会读取登录Shell的配置文件。相反,它们可能会读取其他配置文件,如~/.bashrc对于Bash、~/.zshrc对于Zsh、~/.cshrc对于Csh等。 3.参数传递: •登录Shell:登录Shell在启动时会接收一个特殊的参数-(dash),这告诉Shell它是一个登录Shell。例如,如果使用的是Bash,参数0会是-bash。•非登录Shell:非登录Shell不会接收这个特殊的参数。 4.用途: •登录Shell:通常用于用户登录系统时的初始会话,负责设置用户的工作环境。•非登录Shell:用于执行特定的命令或脚本,或者在已经存在的会话中打开新的Shell实例。 5.安全性: •登录Shell:由于登录Shell是在用户登录时启动的,因此它通常会读取一些全局和用户的配置文件,这些文件可能包含敏感的环境变量和命令。•非登录Shell:由于它们不会读取登录Shell的配置文件,因此通常被认为更安全,尤其是在执行脚本或命令时。

总的来说,登录 shell 更像是一个完整的 shell 环境,它会加载更多设置,而这些设置通常是为长期的交互式使用设计的。非登录 shell 更倾向于快速执行任务,它不会加载那么多额外的设置。


参考

•stackexchange 38175

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-10-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序熵 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题
  • 回答
  • 参考
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档