0

0

第四章 shell和环境变量

爱谁谁

爱谁谁

发布时间:2025-09-10 08:00:16

|

966人浏览过

|

来源于php中文网

原创

第四章 shell与环境变量

4.1 shell概述

4.1.1 编译器

从根本上讲,一台计算机由CPU、内存、主板、声卡、显卡等硬件组成,完整的硬件构成了所谓的“裸机”。在安装操作系统之前,计算机无法正常使用。Windows和Linux都是操作系统的例子。

在操作系统安装完成后,用户可以安装各种应用软件,例如QQ和迅雷。这些软件通常使用Java、C#、C++等高级编程语言编写。然而,计算机硬件只能理解二进制代码,即所谓的“机器语言程序”。因此,需要一个工具将高级语言程序翻译成机器语言程序,并将硬件执行的二进制结果转换回高级语言程序状态。这个工具被称为“命令解释器”或“编译器”。

从工作原理来看,操作系统通常由系统内核和编译器两部分组成。系统内核负责管理和调度硬件,如控制磁盘读取数据到内存中,再由CPU执行。而编译器负责将外部程序翻译成内核可识别的程序状态,驱动硬件执行。具体结构请参考以下图示:

第四章 shell和环境变量由于系统内核的不同,不同的操作系统也使用不同的编译器,因此一种操作系统下的程序无法在其他操作系统上运行。例如,Windows程序无法在Linux上运行。

值得一提的是,为了使同一程序可以在不同操作系统上运行,Java推出了独立的编译器JDK。在不同操作系统上安装相应版本的JDK后,同一Java程序就可以在不同操作系统上运行了。因此,Java被认为解决了程序的跨平台问题。

Windows系统有自己的编译器(通常是.NetFramework系列),而Linux也有自己的独立编译器,称为SHELL。

4.1.2 shell简介

shell是Linux内核的一个外壳,为用户和内核之间的交互提供接口。当用户向操作系统发出指令时,实际上是通过shell进行解释和处理,然后由内核执行相应的操作。系统的响应和输出信息也由shell处理后显示在用户屏幕上。

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

4.2 命令分类

4.2.1 命令执行原理

我们先来对比一下Windows系统。在Windows的开始=>运行界面中输入命令,例如cmd(命令窗口)、mspaint(画图)、calc(计算器)等。

第四章 shell和环境变量当在运行中输入命令时,Windows实际上是在c:\windows\system32\文件夹中查找相应的可执行程序并运行。具体如下图所示:

第四章 shell和环境变量同样,Linux中的命令,如ls、cp、mv等,也都有对应的可执行程序。我们可以通过以下命令查看:

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

which ls ---查看指定命令的别名形态及可执行程序的位置

第四章 shell和环境变量其中whereis显示结果中/usr/bin/ls是命令对应的可执行程序,/usr/share/man下的文件是ls对应的帮助文档;which结果中的alias行显示的是命令的别名。

注:关于命令别名,我们将在后续内容中详细介绍。

虽然whereis可以查看到命令的可执行程序,但有些命令却查不到,例如exit。

第四章 shell和环境变量具体原因请阅读下节内容。

4.2.2 命令分类

在Linux中,根据命令程序所在位置的不同,系统命令被分为两大类:内建命令和外部命令。具体如下:

内建命令 ---又称内置命令

集成在系统shell中,因此系统外部没有对应的可执行程序。

内置命令可以直接运行,无需shell编译。

内置命令使用whereis时不可查。

help ---查看所有内置命令。

外部命令

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

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

外部命令使用whereis可查。

内外部命令的应用虽然目前看起来区别不大,但在未来的工作中,对于内外部命令的不同操作会产生很大的差异。特别是在计划任务、sudo授权、shell编程等章节中,我们将使用到外部命令的概念。

4.3 环境变量

4.3.1 环境变量的功能

我们还是从Windows系统开始讲起。前面提到,当我们在开始=>运行中输入命令时,系统会在c:\windows\system32\文件夹中查找相应的程序。但是,读者可能会有疑问:为什么Windows会在这个文件夹中查找,还有没有其他文件夹系统也会去查找呢?带着这个问题,我们进行如下操作:

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

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

第四章 shell和环境变量在“系统变量”区域中,可以看到path,这就是Windows的一个环境变量。path的功能是指定Windows在哪些文件夹中查找命令的可执行程序,相邻两项之间用;(分号)分隔。我们可以通过点击“编辑”按钮查看具体内容。

从这个例子可以看出,环境变量是表示系统中某一项工作状态的变量。我们可以这样理解:系统桌面的分辨率、桌面图标的字体大小、系统声音大小都是由变量记录指定的。因此,环境变量是任何系统都不可或缺的配置记录工具。

在Linux中,也有许多环境变量来帮助系统记录各种配置。我们可以通过以下命令查看:

env ---查看系统环境变量

set ---查看所有环境变量

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

PHP 网络编程技术与实例(曹衍龙)
PHP 网络编程技术与实例(曹衍龙)

PHP网络编程技术详解由浅入深,全面、系统地介绍了PHP开发技术,并提供了大量实例,供读者实战演练。另外,笔者专门为本书录制了相应的配套教学视频,以帮助读者更好地学习本书内容。这些视频和书中的实例源代码一起收录于配书光盘中。本书共分4篇。第1篇是PHP准备篇,介绍了PHP的优势、开发环境及安装;第2篇是PHP基础篇,介绍了PHP中的常量与变量、运算符与表达式、流程控制以及函数;第3篇是进阶篇,介绍

下载
环境变量 说明 LOGNAME 登陆名,也就是账户名 PATH 命令搜索路径 PS1 命令提示符 PWD 用户的当前目录 SHELL 用户的shell类型 TERM 终端类型 HOME 用户主目录的位置,通常是/home/用户名

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

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

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

另外,既然环境变量属于变量类型,那么它是可以人为更改的,下面我们就来看一下如何更改环境变量的值。

4.3.2 更改环境变量的值

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

PS1="{\u@\h \t \W}\$" ----更改命令提示符的显示格式,效果如下

第四章 shell和环境变量命令中参数解释:\u用户名 \h主机名 \t时间 \d日期 \W当前相对路径

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

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

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

\$是身份符的特定表示格式,因为$符在Linux中的含义较多,所以使用\$的格式。

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

4.4 环境变量配置文件

4.4.1 重启失效的原因

我们更改了环境变量,当注销或重启后会发现所做的设置失效了,这是为什么呢?其实Linux和Unix一样,对于系统运行状态的配置会有专门的文件进行记录,我们称之为配置文件,配置文件都记录在磁盘上,系统的每项设置都会有专用的配置文件做记录。

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

因此,必须手动编辑、更改磁盘上的配置文件,才能永久生效。

4.4.2 配置环境变量配置文件

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

系统环境变量配置文件

针对整个Linux系统生效,所有账号登录后都会遵守

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

个人环境变量配置文件

每个用户都有其独有的个人配置文件,仅针对单个用户生效,不影响其他用户

$HOME/.bashrc(针对shell)

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

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

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

vi /etc/profile ---在开头部分写入

PS1="{\u@\h \t \W}\$"

注销或重启后查看效果

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

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

4.4.3 命令别名

Linux中还有一个较为常用的功能就是为命令设置别名。我们可以想象,如果有一个命令我们经常使用,但命令又比较复杂,每次输入比较麻烦,那么我们可以定义一个简洁的命令来替代该复杂的命令,称为命令别名。

如:cd /etc/sysconfig/network-scripts 该目录为Linux的网卡文件的存放位置,如果我们工作中会经常进入该目录做操作,那么我们就可以为该命令设置一个简洁的替代命令。命令如下:

alias wk="cd /etc/sysconfig/network-scripts" ---定义命令别名

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

alias ---查看系统中的命令别名

unalias wk ---取消命令别名

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

如:ll=”ls -l” 等

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

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1902

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

656

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2387

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

47

2026.01.19

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1496

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1169

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

835

2023.08.01

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

462

2023.08.02

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
尚观shell视频教程
尚观shell视频教程

共8课时 | 1.7万人学习

Linux开发篇视频教程
Linux开发篇视频教程

共18课时 | 4.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号