当前位置: 首页 > news >正文

命令行配置文件

在说具体的配置方式之前,我们需要首先梳理清除几个概念。这有助于我们明白自己在做什么,以及如何把经验平移到其他方面。

和命令行相关的有几个概念:terminal(终端)、shell(解释器);interactive 和 non-interactive、login 和 non-login。

我们一一来解释和说明它们各自的用途和含义。

概念解释

terminal 和 shell 的关系如下图所示

在这里插入图片描述

terminal

terminal 是用户直接能接触到的软件。它提供了 shell 执行的环境,和交互(如:输入、输出的显示等)等能力,让用户可以方便的使用命令行。

terminal 会把用户的输入传给 shell,把 shell 的输出显示给用户。

除了系统内置的 terminal 外,还有 iTerm2 等。除此之外还有 zsh、fish、powershell 等。

shell

shell 简单说就是一个解释器。它定义了一些语法规则,然后把输入的语句转化为对操作系统功能的调用,然后把调用过程的输出和结果返回。

也就是说 shell 做了两件事:定义语法规则;解释执行按照语法规则写成的语句。

最常见的 shell 是 bash。除此之外还有 sh、zsh、csh 等。常用的指令在不同的 shell 之间通用,但又拓展了不同的特性。比如,zsh 允许用户在配置文件里定义函数,但 bash 不支持。

通过 echo $SHELL 可以查看当前使用的 shell。

interactive 和 non-interactive

交互就是不同类型的个体之间有通信交流,一起完成一件事。在命令行里就是,你给终端一个语句,他执行,然后给你一个反馈,然后你再给一个语句,如此循环直到结束。

非交互式最常见的场景就是执行 script 脚本,中间完全自动,不会依赖外部输入。

login 和 non-login

这两个最大的区别就是获取 shell 时,是否有登录鉴权过程。

常见的获取 login 这种 shell 的场景有

  • 远程 SSH 登录
  • 本地 SSH 登录本机
  • 获取 shell 时使用 --login 参数

常见的 non-login shell 的场景是:

  • 图形化界面登录系统后,点击打开的 terminal 默认使用 non-login
  • 在 terminal 中执行 bash 命令后,新创建的 shell 环境是 non-login
  • 使用 su 命令切换用户后的环境,默认是 non-login(su --login [username] 使用的是 login 环境)

这两种环境的主要不同点有两个:

  1. 加载的配置文件不同
  2. non-login 因为没有登录过程,因此没有用户环境的环境变量

配置文件(以 bash 为例)

shell 初始化时,加载哪些配置文件只和状态是 login 还是 non-login 有关。

login 的情况下,依次会读取以下几个配置文件:/etc/profile~/.bash_profile~/.bash_login~/.profile。后面三个用户目录下的配置文件,会按照优先级顺序读取一个。即,当 ~/.bash_profile 存在时,就不会读取后面两个。

在这里插入图片描述

non-login 的情况就比较简单:/etc/bash.bashrc > .bashrc

因此,有个小技巧。一般会把 alias 等定义放在 bashrc 中。

补充

在不同系统中 bashrc 的名称可能会不同,但是作用是一样的。比如在 Debian 高版本系统中,会使用 bash.bashrc 名称。

history

除了上面提到的配置文件外,还有一个文件需要注意,那就是 .bash_history。这个文件会记录用户在控制台输入的命令,所以用户可以通过 键快速输入使用过的命令。 默认会记录 100 条历史记录。

HISTSIZE 环境变量可以控制可以保存的历史记录数量。HISTFILE 可以指定历史记录保存文件的路径,默认是 ~/.bash_history

http://www.lryc.cn/news/195911.html

相关文章:

  • MPP产品介绍-定位-应用场景-技术特点
  • Linux性能优化--性能工具:磁盘I/O
  • Archive Team: The Twitter Stream Grab
  • Vue-props配置功能
  • iMazing 3中文版功能介绍免费下载安装教程
  • 给课题组师弟师妹的开荒手册(终篇)
  • 【Eclipse】安装与卸载教程
  • WordPress还是Shopify?如何选择最适合您业务的网站建设平台?
  • Java Kids-百倍提速【Mac IOS】
  • uniapp-vue3-微信小程序-按钮组wo-btn-group
  • mysql查询当天,近一周,近一个月,近一年的数据
  • Python快速入门教程
  • 注释的重要性:代码的明晰之道
  • 将 vue2+ElementU 项目打包成安卓app
  • sop作业指导书怎么做?sop标准作业指导书用什么软件做?
  • 计算机网络 | 应用层
  • IP地址定位技术对企业的影响有哪些?
  • 【SA8295P 源码分析 (一)】52 - 答疑之 QNX 创建镜像、Android修改CMDLINE
  • 跨境商城源码部署(多商户入驻,一键铺货,快速部署)
  • videojs和videojs-markers
  • 铜死亡+多组机器学习+WGCNA+分型
  • vite 使用本地 ip + localhost 访问服务
  • postman和jmete接口测试的用法与区别
  • Go语言基础之包
  • Switch模拟器-Ryujinx(龙神模拟器)安装教程
  • 从Github中下载部分文件
  • webrtc安全性 加密方式
  • 【2023年11月第四版教材】软考上机考试操作指南(注意事项)
  • 在vs code中创建一个名为 “django_env“ 的虚拟环境报错?!以下方法可以解决
  • C++产生未定义的行为的原因分析