Linux 下 Module 工具的介绍与使用

参考:
https://www.fasteda.cn/post/22.html
https://modules.readthedocs.io/en/latest/module.html

Linux 下 Module 工具的介绍与使用

一、前言

在 Linux 中,当同一款编辑器、运行库、软件存在多个版本且多个版本都需要在不同的场景或人员使用时,配置这些内容的环境变量是一个非常繁琐的过程,而 Module 工具则提供了一个简单快速的方法,Module 全称为 module-environment,是一个专门管理环境变量的工具。

二、官网

Module 官网:https://modules.readthedocs.io/en/latest/module.html

三、安装

Module 工具是基于 TCL(8.4 以上版本)工具的,目前 module 工具为 4.4.1,基于 tcl8.5 或更高版本,而 module3.X 版本则基于 tcl8.4 版本,Redhat6 系列 yum 安装的 tcl 为 8.5 版本。

Module 工具可以使用二进制编译安装,也可以使用 yum/apt 快速安装,

Redhat/Centos 使用:yum install environment-modules;

ubuntu 等使用:apt-get install environment-modules 安装。

四、初始化

安装 module 工具后,你会发现它并不是一个可执行的二进制文件,你需要对 module 工具进行一次初始化。在 /usr/share/modules/init (注意此处,可能是 module 也可能是 modules) 内部你可以找到针对各个脚本的二进制初始化文件,找到你当前的脚本,source 这个二进制文件,例如你是 bash 脚本,source /usr/share/modules/init/bash 之后,你就可以使用 module 工具了。

五、常用命令(通过命令你可以看出我为什么 module 和 modules 傻傻不分了)

module avail 显示可以使用的模块

module load/add 加载模块

module unload/rm 卸载模块

module list 显示已经加载的模块

在整个 module 都配置好后,这四个命令基本上可以满足所有的使用要求,而 module 的更多详细命令和使用方法,我们会在以后的文章中说明。

六、Module 工具的使用

Module 工具依托于 MODULEPATH 这个环境变量来查找配置信息目录,也就是说你在设置好目录结构,配置好环境变量后,只需要设置这一个 module 的环境变量,那么 module 工具就会自动去查找这个路径下的所有配置信息。

七、Modulefile 的写法

在第六节我们说了 MODULEPATH 的作用,那么这节我们讲述一下 modulefile 也就是配置文件的目录结构和写法。

通常我们会将同一类的软件、库等内容放在同一个目录,假设目录名为 /soft,在 soft 目录下包含 gcc、python、java 等常用工具,而 gcc 又包含 4.8.4、4.9.3、4.9.7 三个版本,python 包含 2.7、3.6 两个版本、java 包含 1.6、1.7、1.8 三个版本,那么它的目录结构如下:

那么 soft 目录即为 MODULEPATH 变量设置的目录,最后面的版本文件为 modulefile,我们只需要安装这种目录格式创建目录和文件即可。

在编写 modulefile 文件时的几个注意事项,例如我要编写 4.8.4 这个文件,注意,这个文件时 gcc4.8.4 的环境变量配置文件,不是 gcc 的存放路径。它必须是一个文件、而不是一个文件夹。

在文件开头一定要写上

#%Module1.0

这个是识别这个文件为 modulefile 的,没有他这个文件不会被识别

2、prepend-path 要修改的环境变量 路径

这个命令会把工具路径添加到环境变量的前面

3、setenv 环境变量名 值

这个命令会把你需要的环境变量配置到系统中

请看以下示例:gcc/4.8.4 (这个工具我安装在 /software/gcc/4.8.4 / 下)

#%Module1.0

setenv GCC_HOME /software/gcc/4.8.4/

prepend-path PATH /software/gcc/4.8.4/bin

这就是一个 gcc4.8.4 的环境变量配置,我们将所有的环境变量配置好之后,使用 modue avail 命令即可查看到相应信息,如下所示:

使用 module load 载入相应的工具和版本

使用 module list 查看载入的工具和版本

使用 module show 工具 / 版本 来查看相应配置信息(非常用命令)

这时候我们可以 echo $PATH 来查看是否将 gcc 路径添加到了 PATH 路径中

使用 echo $GCC_HOME 查看是否已经设置好此环境变量

这时候代表你的目录设置、modulefile 都没有问题,只要软件 / 工具等存放的路径没有问题,那么即可正常使用。

八、多路径

MODULEPATH 可以设置为多个路径,例如我设置 /soft、/soft1、/soft2 都是工具、软件等脚本的存放路径,那么我就可以设置 MODULEPATH 为多个路径,路径之间用冒号分割。

这时候我们 module avail 来查看信息,即可看到如下

注意:千万不要出现软件名和版本一样的 modulefile

九、默认版本

在 module avail 中,我们可以设置默认版本,例如我想将 gcc 4.9.3 设置为默认版本,当我 module load gcc 的时候,就直接载入 4.9.3 版本,我们可以使用.version 文件来控制这个默认信息。

在 modulefile 同级目录下创建.version 文件,看清楚,前面有个点,写法如下

#%Module1.0

set ModulesVersion “4.9.3”

使用 module avail 查看信息

在 4.9.3 版本后面多了一个(default)

删除我们刚才载入的 4.8.4

载入默认的 gcc 版本

注意:由于 module 只能载入同类工具、库的某一个版本,删除的时候就直接说明删除的工具、库就可以了,后面不需要带版本号。

十、全局使用

由于 module 的特性问题,如果在公司内使用,你可能需要所有的使用人员设置一个统一的初始脚本,无论是 bash 还是 csh,通常我们建议建立一个用户可读的统一脚本文件,然后 link 到每个使用人员的家目录下的初始脚本。

例如我们建立为 csh 建立一个统一的 csh.cshrc 文件。Link 给 zhangsan

ln -s csh.cshrc /home/zhangsan/.cshrc

我们可以在统一的初始脚本中加入 source ./cshrc.own

那么用户只需要在家目录创建一个 cshrc.own 的文件所谓个性化脚本文件即可。

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

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

相关文章

空间信息可视化——WebGIS前端实例(一)

技术栈:原生HTML 源代码:CUGLin/WebGIS: This is a project of Spatial information visualization 4 全国贫困县可视化系统 4.1 系统设计思想 党的十九大报告明确指出,要“确保到2020年我国现行标准下农村贫困人口实现脱贫,贫困县全部摘帽,解决区域…

单双线程的理解 和 lua基础语法

1.什么是单进程 ,什么是多进程 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由单个或多个线程所组成的。 1.1 像apache nginx 这类 服务器中间件就是多进程的软件 &#xff0…

【Linux】VIM 编辑器,编辑加速引擎

目录 vim中的五种常见模式介绍VIM的基本操作安装VIMVIM中的模式切换 VIM指令集命令模式指令集底行模式指令集视图模式指令集替换和插入模式 end vim中的五种常见模式介绍 正常/普通/命令模式【Normal mode】 控制屏幕光标的移动,字符、字或行的删除,移动…

【Linux网络】Socket 编程TCP

🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343 🔥 系列专栏:https://blog.csdn.net/qinjh_/category_12891150.html 目录 TCP socket API 详解 socket(): bind(): listen(): accept(): connect V0…

记一次 .NET某固高运动卡测试 卡慢分析

一:背景 1. 讲故事 年前有位朋友找到我,说他们的程序会偶发性卡慢 10s 钟,在某些组合下会正常,某些组合下就会出现问题,解释不了其中的原因,让我帮忙看下怎么回事?截图如下: priva…

硬件知识积累 单片机+ 光耦 + 继电器需要注意的地方

1. 电路图 与其数值描述 1.1 单片机引脚信号为 OPtoCoupler_control_4 PC817SB 为 光耦 继电器 SRD-05VDC-SL-A 的线圈电压为 67Ω。 2. 需注意的地方 1. 单片机的推挽输出的电流最大为 25mA 2. 注意光耦的 CTR 参数 3. 注意继电器线圈的 内阻 4. 继电器的开启电压。 因为光耦…

IP组播技术与internet

1.MAC地址分为三类:广播地址;组播地址;单播地址 2.由一个源向一组主机发送信息的传输方式称为组播。 3.组播MAC地址,第一个字节的最后一位为1; 单播MAC地址,第一个字节的最后一位为0; 4.不能…

vue3+vite+ts使用daisyui/tailwindcss

vite创建vue3脚手架 npm init vitelatest myVue3 – --template vue cd .\myVue3\ npm i npm run dev 安装tailwindcss/daisyui 依赖安装 npm install -D tailwindcss postcss autoprefixer daisyui npx tailwindcss init -p 这条命令将生成postcss.config.js(因为加了…

大数据(7)Kafka核心原理揭秘:从入门到企业级实战应用

目录 一、大数据时代的技术革命1.1 消息中间件演进史1.2 Kafka核心设计哲学 二、架构深度解构2.1 核心组件拓扑2.1.1 副本同步机制(ISR) 2.2 生产者黑科技2.3 消费者演进路线 三、企业级应用实战3.1 金融行业实时风控3.2 物联网数据管道 四、生产环境优化…

spring boot大文件与多文件下载

一、简单大文件下载&#xff1a; /*** 下载大文件* param path 路径* param fileName 文件名* return* throws IOException*/ public static ResponseEntity<InputStreamResource> downloadFile(String path, String fileName) throws IOException {Path filePath Path…

第二节:React 基础篇-受控组件 vs 非受控组件

一、场景题&#xff1a;设计一个实时搜索输入框&#xff0c;说明选择依据 受控组件 vs 非受控组件 核心区别 特征受控组件非受控组件数据管理由React状态&#xff08;state&#xff09;控制通过DOM元素&#xff08;ref&#xff09;直接访问更新时机每次输入触发onChange提交…

局部路由守卫

局部路由守卫为我们提供了更细粒度的路由控制&#xff0c;允许我们在特定的路由或组件级别添加鉴权和逻辑处理。局部路由守卫分为 path 守卫和 component 守卫&#xff0c;它们分别适用于不同的场景。 path 守卫&#xff08;路由守卫&#xff09; path 守卫用于在进入特定路由…

Android 16应用适配指南

Android 16版本特性介绍 https://developer.android.com/about/versions/16?hlzh-cn Android 16 所有功能和 API 概览 https://developer.android.com/about/versions/16/features?hlzh-cn#language-switching Android 16 发布时间 Android 16 适配指南 Google开发平台&…

android display 笔记(十二)CPU,GPU,DPU的区别

CPU&#xff08;Central Processing Unit&#xff09;通用计算&#xff1a;处理复杂逻辑、分支预测、多任务调度。 低延迟&#xff1a;优先快速响应单线程任务。 GPU&#xff08;Graphics Processing Unit&#xff09; 高吞吐量并行计算&#xff1a;适合大规模数据并行处理。…

音频转文本:如何识别音频成文字

Python脚本:MP4转MP3并语音识别为中文 以下是一个完整的Python脚本,可以将MP4视频转换为MP3音频,然后使用语音识别模型将音频转换为中文文本。 准备工作 首先需要安装必要的库: pip install moviepy pydub SpeechRecognition openai-whisper完整脚本 import os from m…

理解 MCP 协议的数据传递:HTTP 之上的一层“壳子

以下是以 CSDN 博客的风格记录你对 MCP 协议数据传递的理解和发现&#xff0c;内容涵盖了 MCP 协议基于 HTTP 的本质、JSON-RPC 的“壳子”作用&#xff0c;以及为什么熟悉 HTTP 协议就足以理解 MCP 的数据传递。文章面向技术社区&#xff0c;结构清晰&#xff0c;适合分享。 理…

基于ssm网络游戏推荐系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 当今社会进入了科技进步、经济社会快速发展的新时代。国际信息和学术交流也不断加强&#xff0c;计算机技术对经济社会发展和人民生活改善的影响也日益突出&#xff0c;人类的生存和思考方式也产生了变化。传统网络游戏管理采取了人工的管理方法&#xff0c;但这种管理方…

vue入门:指令

文章目录 vue的内置指令说明&#xff1a; 自定义指令 vue的内置指令 Vue 指令的本质是&#xff1a; 声明式的 DOM 操作接口&#xff08;隐藏底层 JavaScript 代码&#xff09;。响应式数据的绑定媒介&#xff08;连接数据和视图&#xff09;。模板编译的标记&#xff08;最终…

oracle 索引失效

在 Oracle 11g 中&#xff0c;索引失效的常见原因包括函数修改列、隐式类型转换、统计信息过时等&#xff0c;解决方法需结合版本特性&#xff08;如虚拟列、索引跳跃扫描&#xff09;。通过执行计划分析、统计信息维护和合理使用提示&#xff08;Hints&#xff09;&#xff0c…

k8s蓝绿发布

k8s蓝绿发布 什么是蓝绿部署K8S中如何实现蓝绿部署k8s蓝绿部署流程图 什么是蓝绿部署 参考: https://youtu.be/CLq_hA0lAd0 https://help.coding.net/docs/cd/best-practice/blue-green.html 蓝绿部署最早是由马丁福勒 2010年在他的博客中提出. 蓝绿部署是一种软件部署策略,用…