11、【Ubuntu】【VSCode】VSCode 断联问题分析:getent 命令(一)
【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除
背景
上篇 blog
【Ubuntu】【VSCode】VSCode 断联问题分析:UID
分析了 lsof
命令在开始解析路径之前,会先对系统中所有挂载的文件系统进行扫描,然后还分析了 1000
和 120
的 UID 含义,下面继续来看下
VSCode 断联问题
首先回到这里
这里先介绍下 /etc/passwd
的文件结构
首先,正如之前终端输入的
cat /etc/passwd | grep -E "1000|120
可以看到这里每一行代表一个用户账号(每个用户账号结束后会有一个换行符),该行由 7 个字段组成,并用冒号 :
分隔
其含义为
用户名:密码占位符:UID:GID:用户描述:home目录:登录Shell
以这里的登录用户 adminpc
为例
- 第一个字段
adminpc:
表示用户名,是用户登录时使用的名称 - 第二个字段
x:
表示密码占位符,早期这里存放加密的密码,现在出于安全考虑,密码通常存放在更安全的/etc/shadow
文件中,这里用x
表示 - 第三个字段
1000:
表示用户 ID (也就是 UID,之前一直提的),是操作系统内部用来标识用户的数字,0
是 root,1-999
一般是系统账户,1000+
一般是普通用户,这里说明adminpc
是第一个普通用户 - 第四个字段
1000:
表示组 ID (GID),该用户主要所属的组的 ID - 第五个字段
admin:
表示用户描述,一般包含用户全名或描述信息,这里 admin 作为第一个用户,一般表示用户管理员 - 第六个字段
/home/adminpc:
表示home 目录,即用户登录后默认所在的目录,也就是~/
路径 - 第七个字段
/bin/bash:
表示所登录的 Shell, 为用户登录后启动的命令行解释器,这里是 Bash Shell
ok,再说下这里的 getent
命令,终端输入
man getent
首先,从其名字描述上看,getent
命令作用是从名称服务切换库(也就是这里的 Name Service Switch libraries)中获取条目 entries
再来看其语法结构
getent [option]… database key…
- getent:命令本身
- [option]…:可选的命令行选项,这里不过度展开
- database:必须提供的,指定要查询的数据库名称,比如
passwd
,group
,hosts
等 - key…:可选的关键字信息(了解数据库应该知道里面存放的数据是
key-value
键值结构,就像 hash 数据结构一样),也就是要查询的具体条目,比如在 passwd 数据库中,key
可以是用户名 adminpc,也可以是 UID 1000,而在 hosts 数据库中,key 可以是主机名或 IP 地址,如果没有提供关键字信息,默认将打印数据库中所有存在的条目
举点例子
-
getent passwd
:查询passwd
数据库,不指定key
,默认尝试显示所有条目
-
getent passwd adminpc
:查询passwd
数据库,key 是 adminpc,只显示该用户的信息
-
getent hosts localhost
:查询 hosts 数据库,key 是 localhost,显示其 IP 地址
ok,先分析到这里,下篇 blog 继续