登陆 Linux 系统时,虽然输入的是自己的用户名和密码,但其实 Linux 并不认识你的用户名称,它只认识用户名对应的 ID 号(也就是一串数字)。Linux 系统将所有用户的名称与 ID 的对应关系都存储在 /etc/passwd 文件中。
说白了,用户名并无实际作用,仅是为了方便用户的记忆而已。
要论证 "Linux系统不认识用户名" 也很简单,在前面章节,我们曾经在网络上下载过 ".tar.gz" 或 ".tar.bz2" 格式的文件,在解压缩之后的文件中,你会发现文件拥有者的属性显示的是一串数字,这很正常,就是因为系统只认识代表你身份的 ID,这串数字就是用户的 ID(UID)号。
Linux 系统中,每个用户的 ID 细分为 2 种,分别是用户 ID(User ID,简称 UID)和组 ID(Group ID,简称 GID),这与文件有拥有者和拥有群组两种属性相对应(如图 1 所示)。
图 1 文件的拥有者和群组属性
从图 1 中可以看到,该文件的拥有者是超级管理员 root,拥有群组也是 root。读者可能会问,既然 Linux 系统不认识用户名,文件是如何判别它的拥有者名称和群组名称的呢?
每个文件都有自己的拥有者 ID 和群组 ID,当显示文件属性时,系统会根据 /etc/passwd 和 /etc/group 文件中的内容,分别找到 UID 和 GID 对应的用户名和群组名,然后显示出来。
/etc/passwd 文件和 /etc/group 文件,后续文章会做详细讲解,这里只需要知道,在 /etc/passwd 文件中,利用 UID 可以找到对应的用户名;在 /etc/group 文件中,利用 GID 可以找到对应的群组名。
查看系统中是否存在linuxidc这个用户
linuxidc@linuxidc:~/linuxidc.com$ grep 'linuxidc' /etc/passwd
linuxidc:x:1000:1000:linuxidc,,,:/home/linuxidc:/bin/bash
linuxidc@linuxidc:~/linuxidc.com$ ll -d /home/linuxidc
drwxr-xr-x 41 linuxidc linuxidc 4096 5月 17 07:14 /home/linuxidc/
Linux查看用户的UID和GID
linuxidc@linuxidc:~/linuxidc.com$ id
uid=1000(linuxidc) gid=1000(linuxidc) 组=1000(linuxidc),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare)
UID(User Identify)中文用户ID,相当于身份证一样,在系统中是唯一的。
超级用户 UID=0 root
UID号用于唯一标识系统中的用户,这是一个32位无符号整数,Linux规定root用户的UID为0,而其他的一些虚拟用户如bin,daermon等被分配到一些比较小的UID号,这些用户通常被安排在passwd文件的开头部分,从一个比较大的数开始分配真实用户的UID号是一个好习惯,这样能为虚拟用户提供足够的余地。
root:(账号名称):x(:账号密码):0(:账号UID):0(:账号GID):root(:用户说明):/root(:用户家目录):/bin/bash(:shell解析)
1、账号名称:和用户UID对应,这是用户登录时使用的账号名称,在系统中是唯一的,不能重复。
2、账号密码:早期的Unix系统中,该字段是存放账号密码的,由于安全原因,后来把这个密码字段内容移动到/etc/shadown中,这里可以看到一个字母表示该用户密码在/etc/shadown中保护
3、账户UID:账号UID一般由一个整数表示的,范围是0~65535。
4、账户GID:账号GID一般也是由一个整数表示的,范围是0~65535,当添加账户时,默认情况下会同时建立一个与用户同名且UID和GID相同的组。
5、用户说明:这个字段是对这个账号二队描述说明。
6、用户家目录:用户登录后首先进入的目录,一般为(/home/用户名)这样的目录