系统数据文件和信息

作用

linux系统的运行需要大量的系统文件的信息,比如/etc/passwd,/etc/shadow和/ets/group等系统文件信息。用户的每次操作都会涉及到这些文件的信息,比如我们使用ls -l命令,便会使用到相应的信息。

passwd结构

这个结构在中定义,这个结构的成员有:
char *pw_name
char *pw_passwd
uid_t *pw_uid
gid_t *pw_gid
char *pw_dir
char *pw_shell
这个结构的信息便是从这几个系统文件中得到的。

  • 第一个表示用户名
  • 第二个表示用户的密码
  • 第三个表示用户id
  • 第四个表示组id
  • 第五个表示这个用户工作的目录
  • shell第六个表示用户的

对这个结构操作的函数

#include
struct passwd *getpwuid(uid_t uid)
struct passwd *getpwnam(const char *name)

这两个函数表示通过用户id或者通过用户名来获得用户的信息。并且返回一个struct passwd类型的指针,这个指针指向的这个结构是由操作系统进行分配的,是不可重入的。

#include
#include
#include
int main()
{
char name[100];
scanf("%s",name);
struct passwd *p=getpwnam(name);
printf("%s %s\n",p->pw_name,p->pw_dir);

}
结果:
root@ubuntu:/home/sun/project# ./passwd
sun
sun /home/sun
root@ubuntu:/home/sun/project# ./passwd
root
root /root

这个函数只能根据一个特定的id或者用户名得到一个用户的信息,因此我们有以下的函数来得到所有的用户信息。

#include
struct passwd *getpwent(void)
void setpwent(void)
void endpwent(void)

下面举一个例子来说明这几个函数的使用。

#include
#include
#include
int main()
{
setpwent();
struct passwd *p;

while((p=getpwent())!=NULL)
printf("%s %s\n",p->pw_name,p->pw_dir);
endpwent();
}
结果:
root /root
daemon /usr/sbin
bin /bin
sys /dev
sync /bin
games /usr/games
man /var/cache/man
lp /var/spool/lpd
mail /var/mail
news /var/spool/news
uucp /var/spool/uucp
proxy /bin
www-data /var/www
backup /var/backups
list /var/list
irc /var/run/ircd
gnats /var/lib/gnats

可以看到这段代码输出了所有的用户的信息,和读文件类似,其中getpwent函数如果出错或者读取到文件的末尾返回NULL。setpwent相当于打开文件endpwent相当于关闭文件。

阴影口令文件

这个文件是/etc/shadow,这个文件主要存储的是用户名字和经过单项加密后的密码,原本经过单向加密后的密码是存放在/etc/passwd(任意用户何以访问这个文件)中的,但是由于安全性又新增了这个文件,将密码存你放在/etc/passwd这个文件中,这个文件只有超级用户可以访问。

这个结构内容主要有:
char *sp_namp
char *sp_pwdp

#include
struct spwd *getspnam(const char *name)
struct spwd *getspent(void)
void setspent()
void endspent()
函数执行成功返回一个指向特定指针的结构体,失败返回NULL。

你可能感兴趣的:(系统数据文件和信息)