Linux中Shell与环境变量与配置文件

news2024/11/19 5:29:28

Shell是什么

Shell是个程序,他会在用户登录系统后系统开启的,他可以通过标准输入来接收命令,然后执行命令,Shell可以执行内部命令和外部命令,内部命令就是Shell程序里面自己的逻辑,外部命令是Shell调用其他程序。
操作系统的核心是被保护的,我们只能通过Shell将我们输入的指令与核心沟通,让核心控制硬件来完成工作。

shell内部逻辑简介

其实shell就是由编程语言实现的程序,有不同组织实现的shell,

Shell的实现有哪些

  • zsh
    很多人的 mac 中会使用 zsh 而不是 bash,一大半是因为 oh-my-zsh 这个配置集,它兼容 bash,还有自动补全等好用的功能。
  • sh
    sh的全称是 Bourne shell,由 AT&T 公司的 Steve Bourne开发,为了纪念他,就用他的名字命名了。sh 是 UNIX 上的标准 shell,很多 UNIX 版本都配有 sh。sh 是第一个流行的 shell。
    csh
    sh 之后另一个广为流传的 shell 是由柏克莱大学的 Bill Joy 设计的,这个 shell 的语法有点类似C语言,所以才得名为 C shell ,简称为 csh。
  • tcsh
    tcsh 是 csh 的增强版,加入了命令补全功能,提供了更加强大的语法支持。
  • ash
    ash一个简单的轻量级的 Shell,占用资源少,适合运行于低内存环境,但是与下面讲到的 bash shell 完全兼容。
  • bash
    bash由 GNU 组织开发,保持了对 sh shell 的兼容性,是各种 Linux 发行版默认配置的 shell。bash 兼容 sh 意味着,针对 sh 编写的 shell 代码可以不加修改地在 bash 中运行。尽管如此,bash 和 sh 还是有一些不同之处:一方面,bash 扩展了一些命令和参数;另一方面,bash 并不完全和 sh 兼容,它们有些行为并不一致,但在大多数企业运维的情况下区别不大,特殊场景可以使用 bash 代替 sh。

如何看自己的Linux上安装了哪些Shell

可以通过查看/etc/shells文件来看自己的Linux上有哪些可用的Shell

[root@VM-16-13-centos ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh

如何查看当前用户配置的Shell

当我们登录的时候,系统就会给我们一个shell让我们来工作。Linux上有这么多shell那到底用的是哪个呢?
这个登录取得的shell就记录在/etc/passwd文件中,文件中每一行的最后就是登录后的默认shell

[root@VM-16-13-centos ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

Shell启动时干了什么

你是否会觉得奇怪,怎么我们什么动作都没有进行,但是一进入 bash 就取得一堆有用的变量了? 这是因为系统有一些环境设置文件的 存在,让 bash 在启动时直接读取这些配置文件,以规划好 bash 的操作 环境啦! 而这些配置文件又可以分为全体系统的配置文件以及使用者 个人偏好配置文件。要注意的是, 我们前几个小节谈到的命令别名 啦、自订的变量啦,在你登出 bash 后就会失效,所以你想要保留你的 设置, 就得要将这些设置写入配置文件才行

Shell的配置文件

一般的shell都有两种配置文件,一者是全局的,放在/etc里,文件名前面没有’.'(非隐藏),另一种是放在用户家目录,只对当前用户生效,是隐藏的。

login shell与non-login shell在启动shell时读取的配置文件不同
  • login shell:取得 bash 时需要完整的登陆流程的,就称为 login shell。举例来说,你要由 tty1 ~ tty6 登陆,需要输入使用者的帐号 与密码,此时取得的 bash 就称为“ login shell ”啰;
  • non-login shell:取得 bash 接口的方法不需要重复登陆的举动,举 例来说,(1)你以 X window 登陆 Linux 后, 再以 X 的图形化接 口启动终端机,此时那个终端接口并没有需要再次的输入帐号与密 码,那个 bash 的环境就称为 non-login shell了。(2)你在原本的 bash 环境下再次下达 bash 这个指令,同样的也没有输入帐号密 码, 那第二个 bash (子程序) 也是 non-login shell 。

注意不同的shell实现,系统级配置及用户级配置的文件的名字可能不一样

login shell读取:
  1. 系统级配置bash( /etc/profile):这是系统整体的设置,你最好不要修改这个文件;
  2. 用户级配置:bash(~/.bash_profile~/.bash_login~/.profile):属于使用者个人设置,你要改自己的数据,就写入这里。
    在这里插入图片描述
    实线的的方向是主线流程,虚线的方向则是被调用的配置文件(即配置文件中调用了其他配置文件)! 从上面我们也可以清楚的知道,在 CentOS 的 login shell 环境下,最终 被读取的配置文件是“ ~/.bashrc ”这个文件喔!所以,你当然可以将自己 的偏好设置写入该文件即可。
non-login shell读取:
  1. 仅会读取bash(~/.bashrc) 而已啦

注意,所有的配置文件中可能还会读取其他配置文件

source :读入环境配置文件的指令

由于 /etc/profile 与 ~/.bash_profile 都是在取得 login shell 的时候才 会读取的配置文件,所以, 如果你将自己的偏好设置写入上述的文件 后,通常都是得登出再登陆后,该设置才会生效。那么,能不能直接读 取配置文件而不登出登陆呢? 可以的!那就得要利用 source 这个指令 了!

利用 source 或小数点 (.) 都可以将配置文件的内容读进来目前 的 shell 环境中! 举例来说,我修改了 ~/.bashrc ,那么不需要登出,立 即以 source ~/.bashrc 就可以将刚刚最新设置的内容读进来目前的环境 中!很不错吧!还有,包括 ~/bash_profile 以及 /etc/profile 的设置中, 很多时候也都是利用到这个 source (或小数点) 的功能喔!

环境变量、别名

如何查看环境变量
如何设置环境变量
如何使用环境变量
如何设置别名
如何查看别名
如何使用别名
环境变量与别名的区别
不同的shell间共享环境变量和别名吗?

在Shell里输入的命令是如何执行的

内部命令、外部命令

shell script

参考资料

  • 鸟哥的Linux私房菜基础学习篇
  • https://www.jianshu.com/p/a891af6f87e0
  • https://www.cnblogs.com/victl/p/4498136.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/147966.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux常用命令——firewall-cmd命令

在线Linux命令查询工具 firewall-cmd Linux上新用的防火墙软件,跟iptables差不多的工具。 补充说明 firewall-cmd 是 firewalld的字符界面管理工具,firewalld是centos7的一大特性,最大的好处有两个:支持动态更新,不…

【SCL】博图scl语言应用项目:装配流水线模拟控制

使用西门子博图SCL语言和factoryio软件来编写应用案例——装配流水线模拟控制项目 文章目录 目录 前言 一、应用:装配流水线模拟控制 1.控制要求 2.完善控制要求和场景 1.布置场景(factoryio) 2.控制要求 3.变量表(I/O分配&…

Cocos Creator Protobuf的js版本使用

一、基础知识参考Protocol Buffers 在游戏中的应用Protobuf语言指南android与PC,C#与Java 利用protobuf 进行无障碍通讯【Socket】1.性能好/效率高现在,俺就来说说Google公司为啥放着好端端的XML不用,非要另起炉灶,重新造轮子。一…

10.0、Linux-磁盘管理简单初体验

10.0、Linux-磁盘管理简单初体验 列出文件系统整体的磁盘使用量 -> df -h ( 检查磁盘空间使用量 ) 查看目录中所有的文件磁盘空间使用情况 -> du -a -h 根目录下每个目录所占空间大小容量 -> du -sm /* Mac 或者想使用 Linux 挂载我们的一些本地磁盘或者文件 挂载&am…

时隔 20 年,这个编程语言再次“称王”!

↓推荐关注↓综合整理:程序员的那些事(id: iProgrammer)近日,全球知名的编程语言流行度排行榜网站 TIOBE 公布了 1 月编程指数信息。前三的编程语言是Python、C 和C,第四为Java,第五是C#。TIOBE 的 2022 年…

MyBatis#1(快速入门与Mapper代理)

一.MyBatis简介1.MyBatis是一款优秀的持久层框架,可用于简化JDBC的开发2.持久层: 负责将数据保存到数据库的那一层代码JavaEE的三层架构: 表现层, 业务层, 持久层3.框架:框架就是一个半成品软件, 是一套可重用的, 通用的, 软件基础代码模型优点: 高效, 规范, 通用, 可扩展二.My…

ESP32设备驱动-BMP180气压温度传感器驱动

BMP180气压温度传感器驱动 1、BMP180介绍 BMP180 是Bosch Sensortec 新推出的数字气压传感器,性能非常高,可用于智能手机,平板电脑和运动设备等高级移动设备。它遵循BMP085并带来许多改进,如较小的尺寸和数字接口的扩展。超低功耗低至3μA,使BMP180成为移动设备节能的领…

EfficientFormer: Vision Transformers at MobileNet Speed

Paper name EfficientFormer: Vision Transformers at MobileNet Speed Paper Reading Note URL: https://arxiv.org/pdf/2206.01191.pdf TL;DR 本文目标是回答一个问题:transformer 是否可以在比 cnn 运行更快的时候同时精度更高?本文提出了 Effic…

3. R获取数据的三种途径、读入文件、写入文件、读写excel文件、读写R文件

课程视频链接:https://www.bilibili.com/video/BV19x411X7C6?p1 本笔记参照该视频,笔记顺序做了些调整【个人感觉逻辑顺畅】,并删掉一些不重要的内容 系列笔记目录【持续更新】:https://blog.csdn.net/weixin_42214698/category_…

后端人眼中的Vue(三)

五、高级 5.1、计算 5.1.1、computed ​ 在之前的购物车的案例当中,我们已经实现了购物车价格的计算,但是有些时候我们需要在其他很多地方也展示价格,所以每展示一次,我们就需要调用一次计算价格的方法,所以Vue给了…

OV7670 摄像头模块介绍

OV7670摄像头模块简介OV7670是OV(OmniVision)公司生产的一颗1/6寸的CMOSVGA图像传感器。该传感器体积小、工作电压低,提供单片VGA摄像头和影像处理器的所有功能。通过SCCB总线控制,可以输出整帧、子采样、取窗口等方式的各种分辨率…

Visio 学习笔记 —— Visio 的键盘快捷方式

Visio 学习笔记 —— Visio 的键盘快捷方式常用热键常用对话框文本操作快速访问工具栏参考资料常用热键 操作热键指针工具Ctrl 1文本工具Ctrl 2连接线Ctrl 3连接点工具Ctrl Shift 1裁剪工具Ctrl Shift 2文本块工具Ctrl Shift 4组合所选的形状Ctrl G解散组合Ctrl Sh…

Verilog语法笔记(夏宇闻第三版)-结构说明语句

目录 initial语句: always语句: task和function说明语句: task和function说明语句的不同点: task说明语句: function说明语句: Verilog语言中的任何过程模块都从属于以下四种结构的说明语句&#xff…

【GNN】图基本知识代码、nxworks包的基本使用

一个写得很好的博客: 图或网络中的中心性:点度中心性、中介中心性、接近中心性、特征向量中心性、PageRank 特征向量中心性(eigenvector centrality) 特征向量中心性的基本思想是,一个节点的中心性是相邻节点中心性的函…

Reactive思考

最近在学习响应式编程,由此翻看了很多资料,在此把思考过程记录下 目录 来由 规范 具体实现 历史 1. Servlet的尝试 1.1 Async实现demo 2. web应用层 2.1 web-flux 2.2 web-flux/web-mvc 与 spring-web架构关系 3. DBConnection层 相关可能混淆…

STL中vector怎么扩容

STL vector扩容 vector容器 vector被称为向量容器,该容器擅长在尾部插入或删除元素,时间复杂度为O(1);而对于在vector容器头部或者中部插入或删除元素,则花费时间要长一些(移动元素需要耗费时间)&#xf…

十九、Kubernetes中Pod调度第一篇

1、概述 在默认情况下,一个Pod在哪个Node节点上运行,是由Scheduler组件采用相应的算法计算出来的,这个过程是不受人工控制的。但是在实际使用中,这并不满足的需求,因为很多情况下,我们想控制某些Pod到达某些…

Gradle学习笔记之插件

文章目录插件的作用插件的分类和使用脚本插件对象插件第三方插件用户自定义插件buildSrc项目编写步骤其他项目/模块引用步骤java插件常用属性插件的作用 插件可以帮助我们促进代码的重用、项目更高程度的模块化、自动化和便捷化,减少功能类似代码的编写&#xff0c…

【数据结构与算法】 | 用队列实现栈

用队列实现栈 链接: https://leetcode.cn/problems/implement-stack-using-queues/ 1. 要求 2. 思路 栈的性质是先进后出,队列的性质是先进先出。 题目要求是用两个队列来完成栈的实现,那么大思路就是通过倒腾数据来完成。 3. 代码实现…

JAVA系列 多线程 Thread类 耦合 线程调度 如何创建线程 弱耦合 完全解耦 思维结构整理

这估计是我JAVA系列 基础知识点梳理的最后一篇文章了吧 之后一段时间 我打算去看看之前承诺更新的JAVA的一些项目了 然后我要好好玩一段时间游戏 然后跟某些好朋友见面 所以后面会忙一点 然后就是很多同学 六级还没有考 估计很多人是开学再考把 这个假期就不要玩的太厉害了 没事…