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              # &#x8FDB;&#x7A0B; mask &#x4FE1;&#x606F;
(gdb) call umask($1)  # &#x6062;&#x590D;&#x8FDB;&#x7A0B; umask
$2 = 0
(gdb) quit</your>

也可以用一行非交互式的 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}'</your>

原理:gdb 可以调试正在运行的进程,由于 umask 是 glibc 的库函数,所以我们可以直接执行 umask 函数。

定义函数: mode_t umask(mode_t mask);
函数说明: umask()会将系统umask值设成参数mask&0777后的值,然后将先前的umask值返回。

由于 umask 函数定义的参数和返回值如上,所以在执行后需要再恢复原来的 umask 值。

另一个简单的方法:

如果 Linux 内核的版本比较高(如 3.10 及以上),也可以直接从进程的 proc 文件中获取

$ grep Umask /proc/<your pid>/status</your>

Original: https://www.cnblogs.com/cathonzhd/p/15880066.html
Author: Cathon
Title: Linux 查看运行中进程的 umask

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/609663/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 在Windows下使用CodeBlock使用libiconv第三方库

    在 Windows 下使用 CodeBlock 使用 libiconv 第三方库 1、 选择在Project—>Build options下: 2、 如下图添加libicon…

    Linux 2023年6月6日
    085
  • 防止shell script多次运行

    防止shell script多次运行 一个思路是在script初期检测系统中是否存在同名进程。 if [ ps -ef | grep "test.sh" | g…

    Linux 2023年5月28日
    076
  • Django_模型详解

    Django_模型ORM Django中内嵌了ORM框架,不需要直接编写SQL语句进行数据库操作,而是通过定义模型类,操作模型类来完成对数据库中表的增删改查和创建等操作。 O是ob…

    Linux 2023年6月7日
    094
  • 5.9 Linux Vim批量注释和自定义注释

    使用 Vim 编辑 Shell 脚本,在进行调试时,需要进行多行的注释,每次都要先切换到输入模式,在行首输入注释符 #再退回命令模式,非常麻烦。 连续行的注释其实可以用替换命令来完…

    Linux 2023年6月7日
    087
  • SQLI-LABS(Less-7)

    Less-7(GET-Dump into outfile-String) 打开 Less-7页面,可以看到页面中间有一句 Please input the ID as parame…

    Linux 2023年6月6日
    076
  • 洛谷P3372–线段树代码模板1

    时空限制:1000ms,128M 数据规模: 对于30%的数据:N Original: https://www.cnblogs.com/ygsworld/p/11279732.ht…

    Linux 2023年6月7日
    0114
  • docker安装xxl-job-admin

    拉取镜像 docker pull xuxueli/xxl-job-admin:2.3.1 运行容器 docker run -d -e PARAMS=”–sp…

    Linux 2023年6月7日
    086
  • Linux快速入门(八)效率工具(SSH)

    (1)Kali(源主机),IP:10.211.55.4/24(2)Ubuntu(目标主机),IP:10.211.55.5/24 OpenSSH用于在远程系统上安全的运行 Shell…

    Linux 2023年6月6日
    081
  • 每周一个linux命令(ip)

    基础环境 Ip命令介绍 ip命令是一个能够给linux系统设置网络相关信息的命令,通过ip命令可以设置ip地址、子网掩码、网关、路由信息,本节主要讲解ip地址的查看、临时ip地址、…

    Linux 2023年6月8日
    0112
  • rpm 打patch

    1、把patch文件放入SOURCES中 2、修改SPECS中的XXX.spec,把下图中箭头的部分都要写上,这里是一个坑 3、最后安装rmp包的时候如果有问题加上–f…

    Linux 2023年6月13日
    0104
  • Redis 优化之 tcp-backlog

    tcp-backlog:511 此参数确定了TCP连接中已完成队列(完成三次握手之后)的长度, 当然此值必须不大于Linux系统定义的/proc/sys/net/core/soma…

    Linux 2023年5月28日
    099
  • Redis 事务

    一、概述 和传统关系型数据库一样,Redis 同样是支持事务的。Redis 的事务可以通过 MULTI/EXEC/DISCARD/WATCH 等命令来实现。 二、事务的 ACID …

    Linux 2023年5月28日
    096
  • C语言实现扫雷游戏(完整版)

    头文件定义、函数声明 下面就是扫雷中使用到的所有函数,为了省事我把所有的代码都放在一个C文件中实现 宏定义中设置了游戏的界面布局,以及设置地雷的个数(这里默认的是10个地雷),界面…

    Linux 2023年6月6日
    0133
  • Java语言高级(第六部分)函数式接口 Stream流、方法引用 ->(个人学习记录笔记)

    第一章 函数式接口 1.1 概念 函数式接口在Java中是指: 有且仅有一个抽象方法的接口。 函数式接口,即适用于函数式编程场景的接口。而Java中的函数式编程体现就是Lambda…

    Linux 2023年6月8日
    081
  • tcpreplay重放报文,tcpdump能抓到包,应用程序收不到包

    现象: 生产环境中有两台服务器A、B,A服务器实时有报文发往B服务器。为了在测试环境测试新功能,故在现网A服务器上tcpdump抓取发往B服务器的报文,然后在测试环境tcprewr…

    Linux 2023年6月14日
    0101
  • 用powershell脚本,检测cpu100%,并触发sqlserver主备切换。

    我为园子设计的脚本大致如下:1慢检测:任务计划每分钟运行。发现cpu高于95%后,触发2。2快检测:每隔5秒钟运行,发现cpu高于95%,连续6次后,触发3。3报警n次。超出5分钟…

    Linux 2023年6月14日
    0105
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球