首页 > 系统相关 >linux passwd文件

linux passwd文件

时间:2024-04-20 22:26:04浏览次数:23  
标签:文件 uid passwd linux 用户 printf ID pw

passwd结构体

struct passwd {  
    char   *pw_name;       /* 用户名 */  
    char   *pw_passwd;     /* 加密后的密码 */  
    uid_t   pw_uid;        /* 用户ID */  
    gid_t   pw_gid;        /* 组ID */  
    char   *pw_gecos;     /* 用户全名或注释字段 */  
    char   *pw_dir;        /* 用户主目录 */  
    char   *pw_shell;      /* 用户登录后使用的shell */  
};

修改用户描述

#usermod -c "this is user" testpwd
#cat /etc/passwd|grep testpwd
testpwd:x:1001:1001:this is user:/home/testpwd:/bin/sh

getpwent、getpwnam和getpwuid函数

函数名 入参 解释
getpwent 无入参 读取Passwd文件中的某一行
getpwnam const char *name 读取指定用户名的用户信息
getpwuid uid_t uid 读取指定用户id的用户信息
#include <stdio.h>  
#include <pwd.h>  
#include <unistd.h> // 用于获取当前用户ID  
  
void test_getpwent()
{
      struct passwd *pw;  
    setpwent(); // 重置passwd文件的读取位置到开始  
  
    while ((pw = getpwent()) != NULL) {  // 遍历passwd文件中的所有用户
        printf("Username: %s\n", pw->pw_name);  
        printf("User ID: %d\n", pw->pw_uid);  
        printf("Group ID: %d\n", pw->pw_gid);  
	printf("Commit : %s\n", pw->pw_gecos);
        printf("Home Directory: %s\n", pw->pw_dir);  
        printf("Shell: %s\n", pw->pw_shell);  
        printf("\n");  
    }  
  
    endpwent(); // 关闭passwd文件 
}
void test_getpwnam()
{
    struct passwd *pw;  
    pw = getpwnam("username"); // 将"username"替换为你要查询的用户名  
  
    if (pw != NULL) {  
        printf("Username: %s\n", pw->pw_name);  
        printf("User ID: %d\n", pw->pw_uid);  
        printf("User gecos: %s\n", pw->pw_gecos);  
        // ... 可以打印其他字段  
    } else {  
        printf("User not found.\n");  
    }  
}

void test_getpwuid(int target_uid)
{
struct passwd *pw;  
    uid_t uid = getuid(); // 获取当前用户的ID  
    pw = getpwuid(target_uid);  //获取指定uid的用户信息
  
    if (pw != NULL) {  
        printf("Username: %s\n", pw->pw_name);  
        printf("User ID: %d\n", pw->pw_uid);  
        printf("User gecos: %s\n", pw->pw_gecos);  
        // ... 可以打印其他字段  
    } else {  
        printf("User not found.\n");  
    }  
}


int main() {  
     test_getpwuid(1001);// 打印uid为1001的用户的信息
    return 0;  
}

标签:文件,uid,passwd,linux,用户,printf,ID,pw
From: https://www.cnblogs.com/pine-apple/p/18148290

相关文章

  • Linux概述
    1.初始Linux1.linux操作系统支持多用户、多任务、多线程以及多CPU2.Liunx的起源和发展Debian:Debian项目是一个独立、分散的组织,由来自全世界各地自愿者组成,利用互联网进行协作开发。Ubuntu:是一个以桌面为主的Liunx发行版本,基于Debian发展而来,其目的是让Linux系统和非专业人员......
  • 在Linux中,如何实现虚拟机和容器之间的互操作性?
    在Linux中,实现虚拟机和容器之间的互操作性是一个涉及多个步骤的过程。以下是一些关键的步骤和考虑因素:选择适合的虚拟化技术和容器技术:虚拟化技术:常见的虚拟化技术有VMware、VirtualBox等。它们允许你在一个物理机上创建和运行多个虚拟机,每个虚拟机都有自己的操作系统和应用程......
  • 在Linux中,如何优化虚拟机和容器的性能和资源使用?
    在Linux中优化虚拟机(VM)和容器的性能和资源使用涉及多个层面,以下是一些关键的优化策略:1.虚拟机性能优化:合理配置CPU资源:根据虚拟机的实际需求分配合适的vCPU数量,避免过度分配导致资源争抢。启用CPU亲和性设置,保证虚拟机在物理CPU核心上的稳定调度。使用NUMA(Non-UniformMe......
  • 在Linux中,如何进行虚拟机和容器的备份和迁移?
    在Linux环境中,虚拟机和容器(如Docker容器)的备份和迁移过程有所不同,下面分别详细说明:1.虚拟机的备份与迁移虚拟机备份使用虚拟化平台工具:对于VMware环境,可以通过以下步骤进行备份:关闭或暂停虚拟机以确保数据一致性。右键单击虚拟机,在管理菜单中选择“克隆”,根据需要选择......
  • 在Linux中,如何使用Jenkins和Ansible进行虚拟化环境的自动化和持续集成/持续部署(CI/CD)?
    在Linux中,使用Jenkins和Ansible进行虚拟化环境的自动化和持续集成/持续部署(CI/CD)是一个强大的组合,可以大大提高开发和部署的效率。下面将详细阐述如何配置和使用这两个工具来实现这一目标。1.Jenkins配置安装Jenkins你可以从Jenkins官网下载最新的安装包,或者使用包管理器(如a......
  • 在Linux中,如何在Linux中实现虚拟化的安全最佳实践?
    在Linux环境中实施虚拟化时,确保安全的最佳实践涵盖了多个层面,包括主机安全、虚拟机安全、网络隔离、数据保护以及安全管理等方面。以下是针对Linux虚拟化安全的一系列重要措施:1.主机安全保持主机操作系统更新:定期更新主机系统及其组件(如内核、虚拟化软件等)以修复已知漏洞。最......
  • 【记一个小坑】linux源码在window10使用过程中的坑
    在window10解压linux.tar.gz的时候遇到了一下几个问题:(我用的解压软件是Bandzip)1、解压的时候会有如下图的提示,网上有一些人说不用管,直接覆盖,但是并不是所有人都适用,如果你是想要修改linux源码,然后编译安装的话,直接覆盖,之后会造成编译的时候报错:找不到XXX文件原因是windows默......
  • c#采用toml做配置文件的坑过
     这几天在玩个程序,突然看到c#采用图toml文件,好用,直观,确实也简单。 不过。。。。。。 github上示例写的TOMLtoTomlTableTOMLinputfile:vEnableDebug=true[Server]Timeout=1m[Client]ServerAddress="http://127.0.0.1:8080"Code:vartoml=Toml.Read......
  • Rocky Linux 升级失败
    一、概要1.环境RockyLinux9.32.遇到的问题cannotinstallthebestupdatecandidateforpackage...(trytoadd‘–allowerasing’tocommandlinetoreplaceconflictingpackagesor‘–skip-broken’toskipuninstallablepackagesor‘–nobest’tousen......
  • Random 项目总结 -登录按钮 读取XML文件判断用户、密码是否正确
      一、登录按钮privatevoidbutton1_Click(objectsender,EventArgse){stringxmlpath=System.AppDomain.CurrentDomain.BaseDirectory+"setting.xml";XmlDocumentdocx=newXmlDocument();docx.Load(xmlpath);......