-
Linux下获取当前用户名及当前用户文件夹,问题是如何获取机器名?
2012-10-17 15:28:19char *getUserName() { struct passwd *user; user = getpwuid(geteuid()); //printf("name : %s\n", user->pw_name); //printf("uid : %d\n", user->pw_uid); //printfchar *getUserName() { struct passwd *user; user = getpwuid(geteuid()); //printf("name : %s\n", user->pw_name); //printf("uid : %d\n", user->pw_uid); //printf("home : %s\n", user->pw_dir); return user->pw_name; }
/* struct passwd { char *pw_name; char *pw_passwd; __uid_t pw_uid; __gid_t pw_gid; char *pw_gecos; char *pw_dir; char *pw_shell; } */
int getHostName(char *name) { gethostname(name, sizeof(name)); return name; }
//gethostname
可以获取用户名
头文件 <unistd.h>
-
linux c 获取用户信息以及主机信息
2015-07-10 22:42:58/* gino 2015/7/10 21:52:38 */#include #include #include #include #include int main(){ /* getlogin函数返回与当前用户关联的登录名。 getuid函数返回程序关联的U/* gino 2015/7/10 21:52:38 */ #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <pwd.h> #include <sys/utsname.h> int main(){ /* getlogin函数返回与当前用户关联的登录名。 getuid函数返回程序关联的UID,它通常是启动程序的用户的UID。 */ printf("Login user is %s\n",getlogin()); printf("uid=%d, gid=%d\n",getuid(),getgid()); /* 系统文件/etc/passwd包含一个用户帐号数据库。它由行组成,每行对应一个用户,包括: 用户名、加密口令、用户标识符(UID)、组标识符(GID)、全名、主目录和默认shell。 编程接口的数据结构: strcut passwd { char *pw_name; char *pw_passwd; uid_t pw_uid; gid_t pw_gid; char *pw_gecos; char *pw_dir; char *pw_shell; } */ struct passwd *pw; /*获取当前用户信息,返回一个指向passwd结构的指针。出错返回NULL,并设置errno*/ pw = getpwuid(getuid()); printf("name=%s, pass=%s, uid=%d, gid=%d, gecos=%s, dir=%s, shell=%s\n",\ pw->pw_name, pw->pw_passwd, pw->pw_uid, pw->pw_gid, pw->pw_gecos, pw->pw_dir, pw->pw_shell); /*获取指定用户信息,返回一个指向passwd结构的指针。出错返回NULL,并设置errno*/ pw = getpwnam("gino"); printf("name=%s, pass=%s, uid=%d, gid=%d, gecos=%s, dir=%s, shell=%s\n",\ pw->pw_name, pw->pw_passwd, pw->pw_uid, pw->pw_gid, pw->pw_gecos, pw->pw_dir, pw->pw_shell); char computer[256]; /* 获取本地主机的标准主机名 int gethostname(char *name, size_t len); name : 一个指向存放主机名的缓冲区指针 len : 缓冲区的长度 成功返回0,失败返回-1. */ gethostname(computer,256); printf("hostname=%s\n",computer); /* struct utsname { char sysname[]; //当前操作系统名 char nodename[]; //网络上的名称 char release[]; //当前发布级别 char version[]; //当前发布版本 char machine[]; //当前硬件体系类型 #ifdef _GNU_SOURCE char domainname[]; //当前域名 #endif }; */ struct utsname uts; /* 获取当前内核名称和其他信息 int uname(struct utsname *buf); 成功返回0,失败返回-1. */ uname(&uts); printf("sysname=%s\n",uts.sysname); printf("nodename=%s\n",uts.nodename); printf("release=%s\n",uts.release); printf("version=%s\n",uts.version); printf("machine=%s\n",uts.machine); return 0; }
-
用C语言如何获取当前Linux系统的用户名
2017-06-05 17:46:34可以使用getuid()获取用户的ID号,然后通过getpwuid函数通过用户的uid查找用户的passwd数据来获取系统登录的用户名。 #include #include #include int main(void) { struct pashttps://zhidao.baidu.com/question/9421736.html
可以使用getuid()获取用户的ID号,然后通过getpwuid函数通过用户的uid查找用户的passwd数据来获取系统登录的用户名。
#include <stdio.h>
#include <pwd.h>
#include <unistd.h>
int
main(
void
)
{
struct
passwd *pwd;
pwd = getpwuid(getuid());
printf
(
"当前登陆的用户名为:%s\n"
, pwd->pw_name);
return
0;
}
-
linux用户管理
2019-04-04 11:44:36用户管理 1.用户存在的意义 用户是能够获取系统资源的权限的集合 2.组存在的一意义 组是权限的容器 a.管理员 root :具有使用系统所有权限的用户,其UID 为0. b.普通用户 : 即一般用户,其使用...查看当前用户 whoami...用户管理
1.用户存在的意义
用户是能够获取系统资源的权限的集合
2.组存在的一意义
组是权限的容器
a.管理员 root :具有使用系统所有权限的用户,其UID 为0.
b.普通用户 : 即一般用户,其使用系统的权限受限,其UID为500-60000之间.
c.系统用户 :保障系统运行的用户,一般不提供密码登录系统,其UID为1-499之间.3.用户的查看
1)
查看当前用户
whoami ##查看当前用户
2)
系统中用户的查看
id ##查看指定用户id信息
id
-u ##查看用户的uid
-g ##查看用户的gid
-G ##查看用户所在的所有组的id
-n ##显示名字而不显示id数字用户切换
gome-session-quit --force ##注销当前用户 在用其他用户登陆
su - 用户名称 su - 中 “-” 标示在用户身份切换时同时切换当前用户的环境 su - 执行时高级用户切换到低级用户不需要密码,低级用户切换到高级需要,平级用户切换切换也需要 注意:每次su切换到其他用户操作之后必须退出,然后再次切换到其他用户
用户在系统中的存储方式
/etc/passwd
用户信息文件
用户名称:密码:uid:gid:说明:家目录:默认shell
“说明:默认shell的指定有那些可以查看系统中/etc/shells文件”
/etc/group
用户组信息文件
组的名字:组密码:组id:组成员
/etc/shadows
认证信息文件
/etc/skel/.*
默认开启shell的配置,用户的骨文件/home/username
用户的家目录
用户管理命令
1)用户的删除
userdel userdel usertest ##删除用户但不删除用户的配置文件 userdel -r usertest ##删除用户并删除用户的配置文件
2)用户建立
用户信息监控命令.watch -n 1 'tail -n 3 /etc/passwd /etc/group;ls -l /home' useradd ##建立用户的,建立用户时,读取/etc/login.defs 文件内容确定规则 useradd -u 8888 usertest ##指定用户uid useradd -g 21 usertest ##指定用户初始组id,"21用户组必须是存在的"
useradd -G 21 usertest ##指定用户的附加组id “21用户组必须存在” useradd -c "hello" usertest ##指定用户的说明 useradd -d /home/lee usertest ##指定用户的家目录 useradd -s /bin/sh usertest ##指定用户的默认shell
groupadd ##建立用户组
groupadd -g 888 usertest ##建立用户组并指定用户组的id
groupdel ##删除用户组
3)更改用户信息usermod usermod -l 新名称 usertest ##更改用户的名称 usermod -u 6666 usertest ##更改用户uid usermod -g 21 usertest ##更改用户的初始组 usermod -G 21 usertest ##更改用户的附加组 usermod -aG 72 usertest ##添加用户的附加组
usermod -G "" westos ##删除用户所有附加组的身份 usermod -c "hello,csdn" usertest ##指定用户说明文字 usermod -d /home/csdn usertest ##更改用户家目录的指向 usermod -md /home/lcsdn usertest ##更改用户家目录 usermod -s /bin/sh usertest ##更改用户的shell usermod -L usertest ##冻结用户 usermod -U usertest ##解锁用户
用户认证信息
cat /etc/shadows 查看记录用户认证信息 usertest:!!:17990:0:99999:7::: [1] [2] [3][4] [5] [6] [7] [8] [9] 此文件一共有九列: [1] 用户名称:usertest [2] !! 用户密码: 用户的加密字符串,默认用的加密方式为sha512对称加密, 如果加密字符串前出现"!"那么用户被冻结 [3] 17990 用户密码最后一次被更改的时间: 此时间计算是从1970-1-1开始计算的累计天数 [4] 0 用户密码最短有效期: 如果此位有设定数字,那么在此数字范围内的天数内是不能修改用户密码的 [5] 99999 用户密码最长有效期: 用户必须在此有效期内更新密码,如果超时会被冻结 [6] 7 密码警告期限: 在过期前制定天数内会发送警告信息给用户 [7] 用户非活跃天数: 此位默认为空,如果设定数值,那么在密码最长有效期过后仍然可以使用的天数 [8] 用户到期日: 默认为空,表示帐号一定会被冻结的时间点 [9] 用户自定义列,目前没有启用 passwd -S usertest##查看usertest用户密码信息
#用户密码#
passwd usertest ##更改usertest密码
passwd -l usertest##在用户密码前加入“!!”
passwd -u usertest
usermod -L usertest ##在用户密码前加入“!”
usermod -U usertest ##在密码不为空时使用
passwd -d usertest##清空usertest密码注意: 普通用户改密码时 1.必须知道当前用户原始密码 2.密码不能和帐号名称相似 3.密码不能是纯数字或纯字母 4.密码不能是有序的字母和数字的组合 #用户密码最后一次被更改的时间# passwd -e usertest ##会改变用户最后一次更改密码时间为0. ##用户在登陆时会被强制更改密码 chage -d 0 usertest ##两个命令功能类似 #用户密码最短有效期# passwd -n 1 usertest ##usertest用户在1天之内不能修改密码 chage -m 1 usertest #用户密码最长有效期# passwd -x 30 usertest ##设定usertest在30天内必须改密码 chage -M 40 usertest #密码警告期限# passwd -w 2 usertest##密码过期前两天有警告输出 chage -W 2 usertest #用户非活跃天数# passwd -i 1 usertest ##密码过期后仍可登陆系统的天数 chage -I 1 usertest #用户到期日# chage -E 2018-11-11 usertest ##usertest用户在2018-11-11日会被冻结 #用户自定义列,目前没有启用#
用户授权
1.权力下放文件为/etc/sudoers
此文件可以用vim直接编辑,但是不提供语法检测
也可以使用visudo编辑此文件,visudo命令是提供语法检测的2.下放方式
- visudo
100行左右
用户 主机名称=(得到的用户身份) 命令
usertest localhost=(root) /usr/sbin/useradd ##usertest用户可以在localhost主机以
##root用户身份执行useradd命令
usertest localhost=(root) NOPASSWD: /usr/sbin/useradd ##usertest用户可以在localhost主机以
##root用户身份免密执行useradd
3.测试
su - usertest
sudo useradd hello - visudo
-
Linux-facl及用户及Linux终端
2017-12-02 15:45:50FACL:Filesystem Access Control List (文件系统的访问控制列表)利用文件扩展保存额外的访问控制权限 ...命令:w:显示当前系统登录的用户和相关动作who:显示当前登录系统的用户有哪些 whoami:显示当... -
【linux】用户管理
2016-11-24 09:57:12su ---------用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码(su - :获取root的权限和环境变量) id-------可以显示真实有效的用户ID(UID)和组ID(GID)。 useradd ,groupdel ------... -
Linux之进程共享
2020-07-21 10:54:18【获取当前进程实际用户ID】 uid_t getuid(void); 【获取当前进程有效用户ID】 uid_t geteuid(void); getgid 函数 【获取当前进程使用用户组ID】 gid_t getgid(void); 【获取当前进程有效用户组ID】 gid_t getegid... -
linux高级选项
2020-10-14 18:17:27linux高级命令 hostname 语法1: hostname 输出完整的主机名 语法2: hostname -f 输出主机的FQDN(全限定域名) id id:显示当前执行命令的用户的基本信息 id 用户名: 显示指定的用户基本信息 whoami 我是谁,常用于... -
Linux下进程编程
2013-11-23 18:44:37Linux下进程编程 写给linux编程的初学者,进程编程是linux编程首先要学习的东西,往后要...使用getuid函数和geteuid函数来获取当前进程的用户标识和有效用户标识 #include #include #include int main(void) -
Linux命令笔记
2019-03-14 09:16:588:查看当前Linux系统的发行版本 语法: lsb_release -a 9:lsof列出进程打开或使用的文件信息 语法: lsof [选项] 10:date 第六部分:服务管理 1:服务简介与分类 2:RPM包安装服务的管理 2.1:独立服务的管理 2.2:... -
Linux开发_判断程序是否以管理员权限运行(root/sudo)
2020-11-06 16:59:50使用“geteuid”函数获取当前程序所属用户组 #include <unistd.h> #include <stdio.h> #include <stdlib.h> bool isRoot(){ if(geteuid() == 0){ return true; }else{ return false; } ... -
在Linux下使用C语言编写mybash
2019-03-01 17:46:48bash的输出格式:[用户名 @主机名所在文件]$ ,在代码中实现了动态提示符,使用getuid()函数获取用户的ID,然后再使用getpwuid()函数根据用户的UID获取当前用户的passwd信息,在从中找到用户名字;而主机所在文... -
Linux第四次实验——谢飞帆
2016-03-20 17:09:00原创作品转载请注明出处 + 《Linux内核分析》MOOC课程...本次实验选择24号和47号系统调用,分别获取当前用户uid(用户ID)和gid(组ID),即模拟Linux系统“id”命令。 编... -
C 中可调用的linux相关函数
2016-04-20 16:09:49一、进程相关 1. 进程ID 头文件#include(c++文件,c源文件为#include) getpid( ) 获取当前进程的 ID getppid( ) 获取当前进程的...getuid( ) 获取当前进程的实际用户ID getgid( ) 获取当前进程的实际用户组I -
Linux命令源代码阅读whoami
2017-07-08 14:27:50源代码中使用geteuid()获取当前有效用户id,再使用getpwuid()根据前面有效用户id来填充struct passwd结构体,打印出该结构体中的pw_name变量。源代码如下:uid = geteuid (); //返回用户的有效id pw = (uid == NO_... -
linux C 学习笔记 持续更新ing 进程
2014-07-17 16:05:00头文件:<unistd.h>...函数 : getpid 获取当前进程 getppid获得父进程 getpgrp 当前进程组 getuid 实际用户 geteuid有效用户 getgid 实际用户组 getegid 有效用户组 getsid 获得指定进程会话... -
LINUX系统分析与高级编程技术
2010-09-17 22:56:092.3.39 查看当前系统上所有工作站的用户 2.3.40 与基本工作站上的用户交谈 2.3.41 检查远程系统是否正常 2.3.42 电子邮件的使用简介 第三章 Linux系统的网络功能 3.1 Linux支持的网络协议 3.1.1 TCP/IP 3.1.2 TCP/... -
LINUX系统分析与高级编程技术.rar
2009-05-20 18:26:30第一篇 Linux系统介绍 第1章 Linux简介 …1 1.1 Linux 的起源 1 1.2 自由软件基金会的GNU计划 1 1.3 Linux 的发音 2 1.4 Linux 的特点 2 1.5 基本硬件要求 3 1.6 如何获得Linux 3 1.6.1 从网上下载Linux 3 1.6.2 从... -
入门学习Linux常用必会60个命令实例详解doc/txt
2011-06-09 00:08:45Linux 是一个真正的多用户操作系统,可以同时接受多个用户登录,还允许一个用户进行多次登录。这是因为Linux和许多版本的Unix一样,提供了虚拟控制台的访问方式,允许用户在同一时间从控制台(系统的控制台是与系统... -
Linux Command Line and....ch4(更多的bash shell)
2017-06-05 23:16:09默认情况下,ps命令只会显示运行在当前控制台下的属于当前用户的进程。组合命令 -e 显示所有进程 -f 显示完整格式的输出 UID:启动这些进程的用户。 PID:进程的进程ID。 PPID:进程的进程(如果进程是一个进程启动... -
Android 的提权(root)原理【转】
2018-06-13 10:48:00Android的内核就是Linux,...linux系统中,当前用户执行的程序,该程序进程的 有效用户ID(Effective UID)就是当前用户,但拥有s(set uid)权限的程序,其进程的有效用户ID是这个程序的所有者。换句话说,有set ui... -
Miniftp项目实战剖析(含源代码链接)
2018-08-22 17:46:21对于Linux端的ftp服务的而言,账户即为Linux端的用户。 一般步骤是: 以root用户权限启动ftp服务 获取客户端的验证信息 ...我们可以通过getuid()函数获取当前程序运行的uid。 一般root用户的uid =0。 所以可... -
ftp关键技术一:账户验证
2018-05-18 17:10:34对于Linux端的ftp服务的而言,账户即为Linux端的用户。一般步骤是:以root用户权限启动ftp服务获取客户端...我们可以通过getuid()函数获取当前程序运行的uid。一般root用户的uid =0。所以可以通过以下方式验证是否... -
【MyBash项目】一、知识储备
2020-06-19 23:36:04获取当前工作目录(三)扫描目录获取目录下的文件(四)获取文件属性信息(五)切换进程设置当前UID(六)获取当前用户密码(七)加密函数(八)添加所有者权限(九)取消/添加系统回显功能二、处理字符串函数知识... -
初学进程编程案例解析
2014-05-01 21:19:22我是linux编程的初学者,进程编程是linux编程首先要学习的东西,往后要学习进程之间通讯的...使用getuid函数和geteuid函数来获取当前进程的用户标识和有效用户标识 #include #include #include int main(void){ -
实验四:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
2016-03-20 14:05:00贺邦+原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ...本文实验选择24号和47号系统调用,分别获取当前用户uid(用户ID)和gid(组ID),即模拟Linux... -
ubuntu 挂载windows共享目录的方法
2016-12-30 11:46:00建立windows共享目录 右击要共享的文件夹-->属性-->高级共享-->...获取当前登录user的gid,uid id username 建立挂载目录 mkdir /mnt/win 挂载目录 sudo mount -t cifs //192.... -
ELDK使用与开发手册
2018-03-07 10:53:39U-Boot和Linux可以配置成自动执行而不需要任何用户的干涉。 通过串口有很多种方法来控制你的目标板,比如说使用终端服务器。不过最常见的做法是使用你本机的串口,这时,你主机需要安装一个终端程序,如cu或者kermit... -
基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)
2011-03-12 10:44:33而越来越多专业知识的 Blog 的出现,让我们看到了 Blog 更多所蕴涵的巨大的信息价值:不同的 Blog 选择不同的内容,收集和整理成为很多人关注的专业 Blog ——目前越来越多的人获取信息的来源是一些固定的 Blog 。...