前两天项目经理给了我们一个题目:“查询/etc/Passwd/里边可以登陆用户的uid,只要用户名和uid并且中间以横杠隔开。
这对我来说是个有点难度的事情,为此我还去问了一下我的同学,但他们说也都忘了
无奈的我只能自己去找度娘寻找答案。我搜到了grep的用法,但是对于密集恐惧症的我来说看着都头疼,最后终于找到了个简洁明了的使用介绍,grep,属于“文本处理三剑客“中的一位(文本处理三剑客包括:grep、awk、sed)。其作用是文本搜索,它可以正则表达式搜索文本,也可从一个文件中的内容作为搜索关键字。要想完成这个题目首先我们需要查看这个目录的详细信息,我们用“cat”命令查看“cat /etc/passwd”结果如下
可以看到我们里面好多系统中的用户信息。然后我们以root为例,我们可以看出这一行是以冒号为分割符的七个配置字段。
第一个字段,也就是第一列,代表用户名。
第二个字段,代表用户密码,不过现在已经放到/etc/shadow中了(感兴趣的可以去看一看,我已经看过了,里面的密码是以加密的形式呈现的),目前此字段用“*”代替。
第三个字段,代表该用户的uid。
第四个字段,代表该用户的所属组账号的gid号
第五个字段,代表该用户的描述信息,比如他是个什么角色的人。
第六个字段,代表该用户的家目录。
第七个字段,代表该用户的shell环境(shell 环境中的数据被程序用来确定配置属性.)
了解完这些信息之后我们再回头去看之前的题目,我们可以看到用户和uid分别位于第一个字段和第三个字段。但是grep只能输出某个字符串或者输出该字符串的整行。然后我又去“百度”了一下,最后结合着cut命令,最终得出这条命令行:
- ①代表我们要查看的目录,然后后面空格,跟个“|”(管道符,表示过滤)
- ②代表用grep命令 -v:显示不包含匹配文本的所有行。
- ③/sbin/nologin(表示shell环境中此用户无法登陆系统,即使给了密码也不行)这样就能筛选出哪些是可以登录的用户了。
- ④然后再加一个管道符用cut命令来表示只需要显示的字段。
然后运行后发现确实是显示出来了可以登录的用户和uid,却无法用“-”作为分隔符隔开。最后我决定还要去问度娘,然后搜了awk的用法,最后在grep和awk的联合使用下完成了这道题目。
以下是awk、cut、grep的基本用法
awk的基本用法
-F : 指定文本分割符 默认空格或tab
-v : 定义变量
-f : 指定awk的命令文本,当awk的匹配规则比较复杂时,可将其写入到文件,通过-f参数引用文件。
cut的基本用法
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的<br />范围之内,该字符将被写出;否则,该字符将被排除。
grep的基本用法:
-c:只输出匹配行的计数。
-i:不区分大小写。
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及 行号
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
-color=auto :可以将找到的关键词部分加上颜色的显示。