linux shell

1、题目1
取出passwordshell出现的次数
解析:
好,让取出password中shell出现的次数,笔者用的是ubuntu,/etc/passwd就是所谓的password文件,那咱们先看看/etc/passwd中文件的格式吧

 1 root:x:0:0:root:/root:/bin/bash
2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh
3 bin:x:2:2:bin:/bin:/bin/sh
4 sys:x:3:3:sys:/dev:/bin/sh
5 sync:x:4:65534:sync:/bin:/bin/sync
6 games:x:5:60:games:/usr/games:/bin/sh
7 man:x:6:12:man:/var/cache/man:/bin/sh
8 lp:x:7:7:lp:/var/spool/lpd:/bin/sh
9 mail:x:8:8:mail:/var/mail:/bin/sh
10 news:x:9:9:news:/var/spool/news:/bin/sh
11 uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
12 proxy:x:13:13:proxy:/bin:/bin/sh
13 www-data:x:33:33:www-data:/var/www:/bin/sh
14 backup:x:34:34:backup:/var/backups:/bin/sh
15 list:x:38:38:Mailing List Manager:/var/list:/bin/sh
16 irc:x:39:39:ircd:/var/run/ircd:/bin/sh
17 gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
18 nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
19 libuuid:x:100:101::/var/lib/libuuid:/bin/sh
20 dhcp:x:101:102::/nonexistent:/bin/false 21 syslog:x:102:103::/home/syslog:/bin/false 22 klog:x:103:104::/home/klog:/bin/false 23 hplip:x:104:7:HPLIP system user,,,:/var/run/hplip:/bin/false

 

笔者只拿23行,总共应该更多,好了 那咱们看一看

 1 root:x:0:0:root:/root:/bin/bash

这个是以:为分割符号的,写的都是什么内容呢?
用户名:口令:用户标识:组标识:注释描述:目录:登录Shell
1)用户名:就是你的用户名,这里的是root
2)口令:就是你的密码,这个字段存放的是用户密码的加密后的字符串,但是etc/passwd这个文件对于所有用户可见,现在Linux 系统都使用了shadow技术,
把真正加密厚的用户口令存放到/etc/shadow这个文件里,在passwd文件只用一个X表示,这也是跌入个字符是X的原因,
我们看看shadow,
1 root:$1$kOvcdARn$hhXrRriimf0ZfDumvwGpF.:14387:0:99999:7:::,哈,这就是加密后的结果
3)用户标识:系统内部用来标识用户,一般情况下与用户名是一一对应的。
4)组标识:分组标识
5)注释信息:就是注释
6)目录:用户登录的目录
7)登录shell:用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。
好了,咱们已经知道这几个标识使用:进行隔离,而我们想要统计的shell就在标识的第七列
那咱们就可以开始些语句了
要显示内容,要用cat ,路径是/etc/passwd,要显示第七列的个数,那就要用Awk,AWK是一种优良的文本处理工具。
它不仅是 Linux 中也是任何环境中现有的功能最强大的数据处理引擎之一。awk处理的工作与数据库的处理方式有相同之处,其相同处之一就是awk支持对记录和字段的处理,
其中对字段的处理是grep和sed不能实现的,这也是 awk优于二者的原因之一。在awk中,缺省的情况下总是将文本文件中的一行视为一个记录,
而将一行中的某一部分作为记录中的一个字段。为了操作这些不同 的字段,awk借用shell的方法,用1,2,3...这样的方式来顺序地表示行(记录)中的不同字段。
也就是说$0 表示政行,$1表示第一个字段,$2表示第二个字段,我们要得shell是第七个字段,所以我们就用$7来表示
cat /etc/passwd|awk -F: '{print $7}'
好了,已经可以统计shell数量了,但是结果有很多条,sort是对内容进行排序,再加上那我们就要排序,sort是根据某一类型进行排序,
uniq -c 进行统计,– c 显示输出中,在每行行首加上本行在文件中出现的次数,因为已经排序好,所以可以直接统计数量

cat /etc/passwd|awk -F: '{print $7}'|sort|uniq -c
就ok了,这种|是管道,也就是说上一个输出是下一个的输入,如果你把sort 或者uniq -c换一下位置,得到的就不是你想要的结果,好了,这就是这道题目的结果了
posted @ 2012-06-07 23:24  爱喝可乐  阅读(272)  评论(0编辑  收藏  举报