加入收藏 | 设为首页 | 会员中心 | 我要投稿 鞍山站长网 (https://www.0412zz.cn/)- 智能营销、数据计算、数据可视化、负载均衡、研发安全!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux 查看运行中进程的 umask

发布时间:2022-08-09 10:02:57 所属栏目:Linux 来源:互联网
导读:线上某台虚机因为故障重装了系统(基线 CentOS 6.9 内核 2.6.x),重新部署了应用。这个应用会生成一个文件,到NFS挂载目录。 而这个 NFS 挂载目录是一个 FTP 服务器的目录。另一台虚机登陆 FTP 服务下载该文件时,提示没有权限。 重装的系统由于等保三级的
  线上某台虚机因为故障重装了系统(基线 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

(编辑:鞍山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读