第四章shell和环境变量

4.1shell简介

4.1.1编译器

一台计算机从基本构架上讲,由最基本的硬件组成硬件结构(如:cpu、内存、主板、声卡、显卡等),我们晓得,硬件组成完备,但未安装操作系统的计算机被称为“裸机”。我们必须给“裸机”安装操作系统后,才可以正常使用。windows、Linux都属于操作系统范畴。

而我们安装完操作系统后,会在操作系统的基础上,后续安装各类应用软件,如:QQ、迅雷等。并且我们可以剖析下,QQ、迅雷等软件,通常都是用java、C#、C++等编程语言编撰的,这种编程语言我们称之为“高级程序语言”。而我们晓得,计算机硬件只能职别二补码,即计算机硬件只可以运行二补码程序,称之为“机器语言程序”。这么,就须要有一个工具,可以把外围中级语言程序,翻译成计算机硬件可以执行的机器语言程序;而且,须要将硬件执行的二补码结果,再翻译回中级语言程序状态,交给外围程序显示。这些完成翻译工作的工具,我们称之为“命令原语”,又称“编译器”。

从工作原理上讲,操作系统通常也由两部份组成:系统内核和编译器。系统内核负责计算机硬件的管理调度,如:支配c盘读取数据,倒入显存,再转到cpu执行。而编译器则负责把外围程序,翻译成内核可以辨识的程序状态,支配硬件执行。具体结构,可参考右图:

linux 机器安装环境变量_环境变量怎么安装_环境变量linux

而不同的操作系统,因为系统内核不同,所以也有各自不同的编译器嵌入式linux 培训,因而一种操作系统下的程序,难以在其他操作系统中执行。如:windows程序,未能在Linux中运行。

正题,为了实现同一程序可以在不同操作系统上运行,java推出了自己独立的编译器:JDK。则在不同操作系统上安装对应版本的jdk后,同一个java程序即可在不同操作系统上运行了,所以我们常常称java解决了程序的跨平台问题。

这么,windows系统有自己的编译器(通常为.NetFramework系列),而Linux也有自己独立的编译器,Linux的编译器我们称为SHELL。

4.1.2shell简介

shell是linux内核的一个壳体,它包在linux内核的外边,为用户和内核之间的交互提供了一个插口。当用户下达指令给操作系统的时侯,实际上是把指令告诉shell,经过shell解释,处理后让内核做出相应的动作。而系统的回应和输出的信息也由shell处理,之后显示在用户的屏幕上。

shell有好多版本,如:bash、sh、ksh、csh等,RHEL系列默认使用bash。

4.2命令分类

4.2.1命令执行原理

我们先来对比一下windows,我们在windows的开始=>运行界面中输入命令,如:cmd(命令窗口)、mspaint(作图)、calc(估算器)等。

linux 机器安装环境变量_环境变量linux_环境变量怎么安装

当在运行中输入命令执行时,windows实质是到c:windowssystem32文件夹下去查找该命令对应的可执行程序并运行上去的,如图:

环境变量怎么安装_环境变量linux_linux 机器安装环境变量

环境变量怎么安装_linux 机器安装环境变量_环境变量linux

同样的道理,虽然Linux中的命令,如:ls、cp、mv等,在系统中也都有其对应的可执行程序。我们可以使用如下命令查看得到

whereisls—查看指定命令对应的可执行程序和帮助文档的位置。如图

whichls—查看指定命令的别称形态及可执行程序的位置

其中whereis显示结果中/usr/bin/ls是命令对应的可执行程序。/usr/share/man下所显示的文件是ls对应的帮助文档;which结果中alias行显示的是命令的别称。

注:关于命令别称,我们后续会有介绍

尽管whereis可查看到命令的可执行程序,但有些命令却查询不到,如:exit

具体缘由请阅读下节内容。

4.2.2命令分类

Linux中,系统命令会按照命令程序所在位置不同,将命令界定为两大类:内建命令和外部命令。具体如下:

内建命令—又称外置命令

集成于系统shell之内,所以系统外部没有其对应的可执行程序,

外置命令可以直接运行,不需shell的编译;

外置命令使用whereis时不可查

help—查看所有外置命令

外部命令

坐落系统的shell之外,有对应的可执行程序。

运行外部命令,会被shell编译后再交由内核执行;

linux 机器安装环境变量_环境变量怎么安装_环境变量linux

外部命令用whereis可查

内外部命令的应用,当下看来,似乎区别不大,虽然在将来的工作中,对于内外部命令的不同操作,会有很大的区别。就近而言,我们在以后的计划任务、sudo授权、shell编程等章节就会使用到外部命令的概念。

4.3环境变量

4.3.1环境变量的功能

我们还是从windows入手,上面讲过,当我们在开始=>运行中输入命令时,系统会到c:windowssystem32文件夹下去查找该命令对应的程序。并且,读者们有没有会疑惑:windows为何会到这个文件夹下去查找,还有没有其他的文件夹下系统也会去查找呢?带着这个问题,我们来做如下操作:

右键“计算机”=>属性=>两侧“高级系统设置”=>两侧“环境变量”

显示的就是windows的环境变量信息,如图:

环境变量怎么安装_linux 机器安装环境变量_环境变量linux

在右侧的“系统变量”区域中,会听到path,这就是windows的一个环境变量。path的功能是,指定windows到什么文件夹下去查找命令的可执行程序,相邻两项之间用;(分号)分隔。我们可以点击“编辑”按钮具体查看。

自此例可见,环境变量是表示系统中某一项工作状态的变量。我们可以这样去想:系统桌面的帧率、桌面图标的字体大小、系统声音大小都是由变量做记录指定的。所以环境变量是任何一个系统都不可或缺的配置记录工具。

在Linux中,同样具备好多的环境变量来帮助系统记录各类配置。我们可以使用如下命令查看:

env—查看系统环境变量

set—查看所有环境变量

系统中常用的环境变量如下表:

环境变量

说明

LOGNAME

登录名,也就是帐户名

PATH

命令搜索路径

PS1

命令提示符

PWD

用户的当前目录

SHELL

用户的shell类型

TERM

终端类型

HOME

linux 机器安装环境变量_环境变量怎么安装_环境变量linux

用房主目录的位置,一般是/home/用户名

表中值得注意的是:PATH、PS1、SHELL、HOME几个变量在工作中使用率较高,须要关注。

我们也可以使用echo命令输出环境变量的值。

echo$PATH—$符表示提取变量的值,注:环境变量都为小写

另外,既然环境变量属于变量类型,则它是可以人为修改的,下边我们就来看一下怎样修改环境变量的值。

4.3.2修改环境变量的值

我们可以直接使用=为环境变量设置新的值,称为形参操作,如:

PS1=”{u@htW}\$”—-修改命令提示符的显示格式,疗效如下

命令中参数解释:u用户名h主机名t时间d日期W当前相对路径

w当前绝对路径\$身分符

命令中未使用的参数,读者可自行尝试一下,查看疗效。

注:符的功能是提取前面字母的特殊涵义,具体操作会在下一章中做讲解

\$是身分符的特定表示格式linux 机器安装环境变量,由于$符在Linux中的含意较多,所以使

用\$的格式。

在好多其他学习资料中会使用export变量=”值”的格式配置环境变量的值。虽然用不用export关键字对环境变量形参,会有使用范围(又称为生存期)上的区别,而且对于我们初学者来说,疗效基本差不多,所以在这儿我们暂时不做过多的解释,你们可以理解为用不用export都可以实现形参功能。有兴趣的读者也可以查阅相关资料加以分辨。

4.4环境变量配置文件

4.4.1重启失效的诱因

环境变量linux_linux 机器安装环境变量_环境变量怎么安装

我们修改了环境变量免费linux主机,当注销或重启后会发觉所做的设置失效了,这是为何么呢?虽然Linux和unix一样,对于系统运行状态的配置会有专门的文件进行记录,我们称之为配置文件,配置文件都记录在c盘上,系统的每项设置还会有专用的配置文件做记录。

当开机时,Linux会从c盘上读取配置文件到显存中,日常自动输入命令做的系统修改是生效给了显存中的配置信息,并未修改c盘上的配置文件,而显存中的数据会在注销或重启后清空,所以在系统注销或重启后,配置失效。

因而,必须自动编辑、更改c盘上的配置文件,就能永久生效。

4.4.2配置环境变量配置文件

Linux关于环境变量的配置信息,有专用的环境变量配置,它分为两类:系统环境变量配置文件、个人环境变量配置文件。

系统环境变量配置文件

针对整个Linux系统生效,所有帐号登入后就会遵循

/etc/bashrc(针对shell)/etc/profile(针对外围程序)

个人环境变量配置文件

每位用户就会有其独有的个人配置文件,针对单个用户生效,不影

响其他用户

$HOME/.bashrc(针对shell)

$HOME/.bash_profile(针对外围程序)

$HOME/.profile(功能与.bash_profile相同,默认不存在)

我们可以依据须要,编辑配置文件,以完成重启生效的配置。实验如下

环境变量怎么安装_环境变量linux_linux 机器安装环境变量

vi/etc/profile—在开头部份写入

PS1=”{u@htW}\$”

注销或重启后查看疗效

文件内容说明:该文件中开头部份会有好多#开头的文字。在Linux中,文档中以#开头的都是注释内容。注释,即计算机在执行、查看文件时会飞过、不做处理的文字,通常是给使用者做些说明解释作用的文字。

另外,修改环境变量配置文件后,新的配置重启后,假如步入的是GUI图形界面,打开终端窗口后,会无效过;但重启后若步入字符界面,则疗效显著,具体缘由我们将在shell编程章节中做解释。

4.4.3命令别称

Linux中还有一个较为使用的功能就是为命令设置别称。我们可以想像以下,假如有一个命令我们常常使用,并且命令又比较复杂linux 机器安装环境变量,每次输入比较麻烦,这么我们可以定义一个简约的命令来代替该复杂的命令,称为命令别称。

如:cd/etc/sysconfig/network-scripts该目录为Linux的网卡文件的储存位置,假若我们工作中会时常步入该目录做操作,这么我们就可以为该命令设置一个简约的取代命令。命令如下:

aliaswk=”cd/etc/sysconfig/network-scripts”—定义命令别称

则之后每次输入wk后,就等于输入了cd/etc/sysconfig/network-scripts。

alias—查看系统中的命令别称

unaliaswk—取消命令别称

注:alias命令后可看到系统shell自带的和用户自定义的命令别称。

如:ll=”ls-l”等

然而,与环境变量的特点相同,alias设置的命令别称,也只是临时生效的,注销或重启后即失效了,所以若果自定义的别称永久生效,也须要将设置命令写入到环境变量配置文件中。

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复