线上某台虚机因为故障重装了系统(基线 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的更多相关文章

  1. Linux查看系统中的每个进程

    Linux查看系统中的每个进程 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ps -A PID TTY TIME CMD 1 ? 00:00:01 init ...

  2. Linux查看命令终止进程

    Linux查看命令终止进程 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ps PID TTY TIME CMD 2576 pts/0 00:00:00 ba ...

  3. Linux查看用于终止进程命令

    Linux查看用于终止进程命令 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ps PID TTY TIME CMD 2576 pts/0 00:00:00 ...

  4. Linux查看目录中的文件

    Linux查看目录中的文件 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ls examples.desktop jdk 公共的 视频 文档 音乐 java ...

  5. mySQL查看运行的进程

    查看运行的进程 show processlist kill id 杀掉进程

  6. Docker查看运行中容器并进入容器

    一.简述 Docker查看运行中容器并进入容器. 二.方法 $ sudo docker ps $ sudo docker exec -it 775c7c9ee1e1 /bin/bash 将黄色文字替换 ...

  7. Linux查看端口占用进程

    Linux查看端口占用进程 netstat -anlp|grep 8081 tcp /java 此处3195为进程ID

  8. linux 查看运行进程详细信息

    Linux在启动一个进程时,系统会在/proc下创建一个以PID命名的文件夹,在该文件夹下会有我们的进程的信息 通过ll或ls –l命令即可查看. ll /proc/PID cwd符号链接的是进程运行 ...

  9. Linux 查看和删除进程

    1. 在 LINUX 命令平台输入 1-2 个字符后按 Tab 键会自动补全后面的部分(前提是要有这个东西,例如在装了 tomcat 的前提下, 输入 tomcat 的 to 按 tab).2. ps ...

随机推荐

  1. python xlrd读Excel表

    1 xlrd第三方库 注意:xlrd较新版本不支持读xlsx表,需安装1.2.0版本(pip install xlrd==1.2.0)或使用其他库. xlrd库官方文档:https://xlrd.re ...

  2. MySQL中的where和having

    group by 在select 语句中可以使用group by 子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集.group by 子 ...

  3. 'real'词频分析

    写下来想法来自于无聊时写的代码.https://cryptopals.com/sets/1/challenges/3 The hex encoded string: 1b37373331363f781 ...

  4. 浅谈MemoryCache的原生插值方式

    .NET运行时内置了常用的缓存模块: MemoryCache 标准的MemoryCache暴露了如下几个属性和方法: public int Count { get; } public void Com ...

  5. null和空字符串对于查询where条件语句的影响

    在数据库中我们进行数据处理的过程中,对于null值或者空字符串的情况对于这种数据我们进行计算平均值以及查询过程中如何进行对于这类数据的处理呢? step1:建表:create table a(id i ...

  6. uniCloud爬虫获取网页数据

    'use strict'; let request = require('request') let cheerio = require('cheerio'); //爬虫 let iconv = re ...

  7. [opencv]drawContours 示例

    vector<vector<Point>> contours; vector<Vec4i> hierarchy; findContours(img_canny,co ...

  8. 疯狂的类构造器Builder模式,链式调用

    疯狂的类构造器 最近栈长在做 Code Review 时,发现一段创建对象的方法: Task task = new Task(112, "紧急任务", "处理一下这个任务 ...

  9. Ranger-Yarn插件安装

    Ranger-Yarn插件ranger-0.6.0-yarn-plugin安装到Yarn的所有ResourceManager节点, 其他的NodeManager节点不需要安装. 登陆hdfs安装的用户 ...

  10. Eclipse导入Zookeeper源码Version2017.11.3

    将Zookeeper源码导入Eclipse, Zookeeper源码需要使用ant构建后才能导入Eclipse, 和Solr的源码一样也是使用ant构建的, 大部分可以参考Eclipse导入Solr源 ...