【Linux Shell】shell简介和环境配置

每次配置一次环境就要重新学一遍Linux。。这是因为很多时候我们都需要配置环境变量,然而如果对Linux不了解的话,很多指令在做什么,我们根本不清楚,这就非常难受了。而且,《鸟哥的Linux私房菜》中写的是关于Red Hat系的CentOS的环境配置,我使用的是Debian系的Ubuntu,两者在文件系统上还是有一些差别,所以这里会简单地记一下关于Ubuntu的各种环境配置,顺便简单介绍一下Shell。

一. terminal, shell与tty

在Linux中我们经常会碰到terminal, shell和tty三个概念,那这三个概念之间有什么差别吗?我们先从上个世纪开始谈起。

Unix操作系统一开始被设计成是一个多用户的操作系统。各个用户不在主机上操作,而是操作与主机相连的终端(terminal)。由于那个时候没有键盘和屏幕,所以他们使用的是打字机(teletype)。有一个管理员能够操作主机,这个主机就叫做控制台(console)。由此可见,在历史上,terminal, teletype和console都是硬件层面的概念。

随后的历史大家都知道了,键盘和显示器得到发明,GUI代替了CIL。在X window中,我们已经不能键入相应的字符来执行我们的命令了,如果我还是想执行对应的命令,那该怎么办呢?这时候,终端模拟器(terminal emulator)出现了, 打开终端模拟器,往里面键入相应的字符,我们就能执行对应的命令了。Ubuntu预装的桌面是GNOME,所以我们用的是gnome-terminal。这也是为什么那个黑色的框框被叫做终端的原因。简而言之,现在的终端就是一个文本输入和输出的环境。

那么shell又是什么呢?众所周知,shell是用来和内核进行交互的。你在终端输入的指令,最后都会交给shell,shell调用内核,然后把结果返回到你的终端上。总结一下,shell就是用来处理你的命令结果的。我们常说的bash其实就是一种shell。

至于那个tty,也是一种终端模拟器(terminal emulator)罢了,在Ubuntu下使用Ctrl+Alt+F1进入图形界面,其他的比如Ctrl+Alt+F2等就是进入tty界面了。

二. history功能

下面介绍一下bash的一些功能,其中一个比较重要的功能就是history功能。这个功能是专门用来记录你的历史指令的。

注意在你登录的时候,你的历史命令都被记录在内存中,只有注销或者执行history -w的时候才会记录到~/.bash_history中

最后介绍一下history的几个技巧:

  1.  通过方向键选择最近执行过的指令。
  2.  通过!number来选择执行history指令返回的历史指令的编号。
  3.  通过!command来选择执行带command的最近的历史指令。

三. alias功能

bash还内置了alias功能,我们可以通过这个alias制定新的命令,如:

alias lm='ls -al'

如果想取消alias,用unalias就行了:

unalias lm

不过值得注意的是,这个alias在你注销的时候就失效了,下面介绍一下怎么让这个东西永久有效。

四.  bash的环境配置

经过以上的介绍,我们已经知道了gnome-terminal和tty都是终端,输入的指令最后都是交给shell处理的。所以从shell的角度看来用gnome还是用tty都没差。

为了了解bash的环境配置,我们还得学一些前置的基础知识,比如:

  1. non-login shell:顾名思义,就是不需要登录的shell,比如你已经用图形界面登录了某个用户,在这个图形界面里开启一个terminal, 就不需要再次输入你的用户名和密码,这个就是non-login shell。
  2. login shell: 同理,以tty为例,其登录方式和图形界面的流程一模一样(注意我们Ctrl+Alt+F1,也需要重新登录),但是他是在terminal里面登录的,像这种取得bash需要完整的登录流程,我们就叫他为login shell。

之所以要提到这两个shell,原因是这个两个shell读取的配置文件并不相同。

(1). non-login shell

这个是我们最常用的shell, 他只会读取~/.bashrc中的内容。这里所谓的读取其实就是解析这个脚本文件的命令罢了。(这个也可以解释为什么我们打开terminal的时候得过一段时间才显示prompt,就是因为在执行这些脚本文件

至于这个~/.bashrc会不会读取其他文件的内容(比如在Ubuntu下是/etc/bash.bashrc或者CentOS中的/etc/bashrc),就要看具体的脚本怎么写了。

基本上只有两种情况我们会修改~/.bashrc中的内容:

  1.  设置环境变量:我们希望我们设置的环境变量永久有效,那就得在/.bashrc中添加:export 环境变量=...
  2.  设置alias:如果有些命令实在是太长了,我们也可以在/.bashrc中添加alias=...

(2). login shell

相比之下,login shell的登录流程要稍微复杂一点。下面展示的是Red Hat系列的CentOS的non-login shell的登录流程。

“login shell”的图片搜索结果

这个图还有一点小错误,那就是在第二步我们读取的不一定是~/.bash_profile。

它主要是按顺序读取,读取顺序为~/.bash_profile->~/.bash_login->~/.profile

如果shell找到了这个顺序上的某一个文件,他就不往下寻找了。

像我自己的Ubuntu就是有~/.profile文件,所以他在第二步只会搜寻~/.profile文件。(具体的文件内容还是要用vim继续查看)

 

五. 关于source

很多时候我们把相关的配置写进对应文件,还需要执行source filename才能有效,这是为什么?

因为只有在bash启动的时候才会读取相应的配置文件,所以你在bash里面修改还得重新导入配置文件。

source就是用来干这种这种事情的。

发布了137 篇原创文章 · 获赞 19 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43338695/article/details/103851695