perf性能分析+sudo用户权限+环境变量管理Modules
一、gprof与perf性能分析工具
1、gprof使用编译程序时使用 -pg 选项,程序在运行时会生成一个名为 gmon.out 的文件。
这个文件包含了程序的性能数据,例如每个函数被调用的次数和每个函数执行时所占时间的百分比。
gprof my_program gmon.out > gprof.txt
这条命令会将分析结果输出到 gprof.txt 文件中
2、perf使用
perf record ./run
会生成一个文件perf.data
perf report
二、sudo用户权限管理
1、修改配置文件vim /etc/sudoers
或使用visudo命令修改
root ALL=(ALL) ALL User Aliases Host Aliases = (Runas Aliases) Command Aliases // 谁 通过哪些主机 可以通过哪个身份 运行哪些命令 %wheel ALL=(ALL) ALL //用户组 通过哪些主机 可以通过哪个身份 运行哪些命令
2、配置一些Alias命令列表
//1、配置User_Alias:具有sudo权限的用户的列表 User_Alias USER_FLAG = user1, user2, user3 //2、配置Host_Alias:主机的列表 Host_Alias HOST_FLAG = hostname1, hostname2, hostname3,192.168.253.4/32 //3、配置Runas_Alias:用户以什么身份执行(例如root,或者oracle)的列表 Runas_Alias RUNAS_FLAG = operator1, operator2, operator3 //4、配置Cmnd_Alias:允许执行的命令的列表 Cmnd_Alias COMMAND_FLAG = command1, command2, command3
3、实际用例
(1)允许普通用户swtest使用rpm、yum权限而又不用输入密码
//软件安装管理相关命令别名 Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum //给用户添加权限 swtest ALL=(ALL) NOPASSWD: SOFTWARE
4、修改执行sudo命令时的提示语
(1)修改vim /etc/sudoers.lecture文件,添加以下内容
我们信任您已经从系统管理员那里了解了日常注意事项。 总结起来无外乎这三点: #1)尊重别人的隐私。 #2)输入前要先考虑(后果和风险)。 #3)权力越大,责任越大。
英文版:
We trust you have received the usual lecture from the local system administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility.
(2)修改vim /etc/sudoers
文件
Defaults lecture_file = /etc/sudoers.lecture Defaults lecture = always
其中lecture = always是提示语出现次数
always也可以分别被替换成:
1.always(总是,每次输入sudo都会出现提示语)
2.once(只有用户第一次使用sudo才会显示)
3.never(永远不显示提示语)
5、Makefile文件
make all: test make install: test hwclock --set --date="09/15/2025/ 09:30:00" hwclock --hctosys
系统时间与硬件时间
date :显示当前系统时间 date -s :设置指定时间(date -s "20201218 20:12:18") hwclock :硬件时间 hwclock -s :以硬件时间修改系统时间 hwclock -w :将系统时间修改为硬件时间 hwclock --systohc:系统时钟和硬件时钟同步 hwclock --hctosys:硬件时钟与系统时钟同步
三、环境变量管理工具Modules的安装
一、编译安装modules软件
(1)软件依赖tcl软件
//编译安装 cd unix/ ./configure --prefix=/usr/local/tcl (apt install tcl tcl-dev)
(2)modules软件下载地址: https://modules.sourceforge.net/
(3)解压安装:(apt-get install environment-modules)
tar -zxvf modules-5.2.0.tar.gz ./configure --prefix=/usr/local/modules-5.2.0 ./configure --prefix=/usr/local/modules --with-tcl-lib=/usr/local/tcl/lib \ --with-tcl-inc=/usr/local/tcl/include
二、module的初始化及常用命令
(1)module的初始化
安装module工具后,你会发现它并不是一个可执行的二进制文件,你需要对module工具进行一次初始化。
在/usr/local/modules/init(注意此处,可能是module也可能是modules)内部你可以找到针对各个脚本的二进制初始化文件,有profile.sh和profile.csh文件,用来配置module的脚本文件。如果当前用的shell是bash,就使用profile.sh,如果当前用的shell是cshell,就使用profile.csh。可以直接source这个文件,也可以打开/etc/profile文件,加入source /usr/llocal/tools/modules/init/profile.sh这一行代码。重启终端,使用module -h,就可以打印module命令的help了。
也可以建立符号链接,这样当系统重启后,会自动加载
ln -s /usr/local/modules/init/profile.sh /etc/profile.d/module.sh ln -s /usr/local/modules/init/profile.csh /etc/profile.d/module.csh
不过如果使用which module,会发现找不到module命令。
(2)常用命令(通过命令你可以看出我为什么module和modules傻傻不分了)
module avail 显示可以使用的模块 module load/add 加载模块 module unload/rm 卸载模块 module list 显示已经加载的模块 module show 来查看相应配置信息 module switch gcc gcc/10 切换到模块的不同版本
三、modulefiles文件编写
以下是/usr/local/modules/modulefiles目录下的modules文件,我们后面实现的工具配置文件,都是基于这个文件进行的修改。千万不要出现软件名和版本一样的modulefile文件。
例如gcc环境变量的添加
cd /usr/local/modules/modulefiles/gcc || vim 4.8.4


set version 4.8.4 set GCC /usr/xu_apps/gcc-4.8.4 setenv MODULESHOME ${GCC} prepend-path PATH ${GCC}/bin prepend-path LD_LIBRARY_PATH ${GCC}/lib64 prepend-path LD_LIBRARY_PATH ${GCC}/lib prepend-path INCLUDE ${GCC}/include
四、默认版本
在module avail中,我们可以设置默认版本,例如我想将gcc 4.9.3设置为默认版本,当我module load gcc的时候,就直接载入4.9.3版本,我们可以使用.version文件来控制这个默认信息。在modulefile同级目录下创建.version文件,看清楚,前面有个点,写法如下:
cd /etc/modulefiles/gcc
vim .version
#%Module1.0 set ModulesVersion "4.9.3"

在4.8.4版本后面多了一个(default)
五、多路径设置
(1)Module工具依托于MODULEPATH这个环境变量来查找配置信息目录。MODULEPATH可以设置为多个路径,例如我设置/soft、/soft1、/soft2都是工具、软件等脚本的存放路径,那么我就可以设置MODULEPATH为多个路径,路径之间用冒号分割。export MODULEPATH=/soft:/soft1:/soft2

(2)yum install environment-modules
默认的的modulefiles路径设置在/usr/share/Modules/init/.modulespath文件中。也可以在这个文件中添加设置为多个路径,而不用配置MODULEPATH这个环境变量。

【注意】:modulefiles路径设置后,路径下一定要有例如gcc/4.8.4的文件;要不然module avail会什么都不显示。