Linux 查看运行中进程的 umask
2022/2/11 7:15:09
本文主要是介绍Linux 查看运行中进程的 umask,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
线上某台虚机因为故障重装了系统(基线 CentOS 6.9 内核 2.6.x),重新部署了应用。这个应用会生成一个文件,到NFS挂载目录。
而这个 NFS 挂载目录是一个 FTP 服务器的目录。另一台虚机登陆 FTP 服务下载该文件时,提示没有权限。
重装的系统由于等保三级的要求,umask=0077。这会导致应用生成文件时默认的权限为 600 。
而登陆 FTP 的用户名是 FTP 主机上单独创建的一个用户,与主机的通用用户名不同,所以下载文件时出现权限问题。
如果要查看正在运行的进程 mask 信息,可以使用 gdb 工具:
$ gdb --pid=<your pid> ... (gdb) call/o umask(0) $1 = 077 # 进程 mask 信息 (gdb) call umask($1) # 恢复进程 umask $2 = 0 (gdb) quit
也可以用一行非交互式的 gdb 命令得到:
(注意:通过上面交互式的方式对一个JAVA进程操作时,出现了 segmentation fault,进程崩溃。但通过以下命令获取umask对进程无影响)
$ gdb --batch -ex 'call/o umask(0)' -ex 'call umask($1)' --pid=<your pid> 2> /dev/null | awk '$1 == "$1" {print $3}'
原理:gdb 可以调试正在运行的进程,由于 umask 是 glibc 的库函数,所以我们可以直接执行 umask 函数。
定义函数: mode_t umask(mode_t mask);
函数说明: umask()会将系统umask值设成参数mask&0777后的值,然后将先前的umask值返回。
由于 umask 函数定义的参数和返回值如上,所以在执行后需要再恢复原来的 umask 值。
另一个简单的方法:
如果 Linux 内核的版本比较高(如 4.7+),也可以直接从进程的 proc 文件中获取
$ grep Umask /proc/<your pid>/status
这篇关于Linux 查看运行中进程的 umask的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法