用户管理
第1章 密码管理
1.1 密码管理
1.1.1 如何让系统更安全
a.最小化安装操作操作系统 安装的系统内容越多,漏洞越多 b.安装软件最小化安装 用什么软件装什么软件 c.保护好root,禁止root登录 使用普通用户登录 d.修改SSH远程登录的默认端口 22 修改为大于10000的端口 1-65535
PS:端口在系统上是唯一的 不能重复使用
在系统服务或者安装的服务默认都是有端口存在的
查看当前系统已在在用的端口
netstat -tnulp
/var/log/secure 安全日志 日志的分析: failure或Failed 监听如果出现多次系统不安全
1.1.2 文件系统权限 /etc/passwd
给权限位加 –i 不能删除,不能修改文件
a 不能删除,不能修改内容 只能追加新的内容
给重要的文件或命令做一个指纹 :校验
在修改文件前 给当前的文件 做一个校验值
当文件被修改 校验值也会发生变化
文件没有被修改 校验值不变
1.1.3 md5sum 命令
语法格式:md5sum [参数][文件]
常用参数:
-b |
以二进制模式读取文件 |
-t |
以文本模式读入文件内容 |
-c |
根据已生成的md5值,对现存文件进行校验 |
-w |
检查输入的md5信息有没有非法行,若有则输出相应信息 |
--status |
校验完成后,不生成错误或正确的提示信息,可以通过命令的返回值来判断 |
生成文件md5值
[root@linuxcool ~]# md5sum file
文件内容校验
[root@linuxcool ~]# md5sum -cd.md5
校验文件后给出信息提示
[root@linuxcool ~]# md5sum file --status
1.1.4 手动测试MD5
[root@oldboyedu-lnb test]# md5sum oldboy.txt 3fe396c01f03425cb5e2da8186eb090d oldboy.txt [root@oldboyedu-lnb test]# [root@oldboyedu-lnb test]# echo alex >> oldboy.txt [root@oldboyedu-lnb test]# md5sum oldboy.txt 185b70298fd472c9e13c3d039a2fefff oldboy.txt
1.1.5 MD5校验执行过程
第一步:给重要的文件做MD5 指纹验证
[root@oldboyedu-lnb test]# md5sum oldboy.txt 185b70298fd472c9e13c3d039a2fefff oldboy.txt
第二步;把输出的MD5值存入到一个文件中police.txt
[root@oldboyedu-lnb test]# md5sum oldboy.txt > police.txt [root@oldboyedu-lnb test]# cat police.txt 185b70298fd472c9e13c3d039a2fefff oldboy.txt
第三步: 检测当前的文件和原来的指纹是否相同 PS:注意路径问题
[root@oldboyedu-lnb test]# md5sum --check police.txt oldboy.txt: OK # 文件未被修改提示正常 [root@oldboyedu-lnb test]# md5sum -c police.txt oldboy.txt: OK [root@oldboyedu-lnb test]# md5sum -c police.txt oldboy.txt: FAILED # 文件被修改提示失败 md5sum: WARNING: 1 computed checksum did NOT match
注意事项:
1) 在什么情况下使用MD5校验值 网站代码 对外提供访问的 重要的系统文件 重要的服务配置文件 2) 注意路径问题 3) 在做监测时候 要清楚是内部人员修改 还是外部人员修改 4) 什么情况下修改重要网站代码 内部人员修改(代码上线)
在新功能上线的情况下 或者是补BUG的情况
需要对MD5指纹库 重新做校验(把修改后的文件重新做MD5校验放入police.txt)
[root@oldboyedu-lnb test]# echo oldboy >> oldboy.txt [root@oldboyedu-lnb test]# md5sum -c police.txt oldboy.txt: FAILED md5sum: WARNING: 1 computed checksum did NOT match [root@oldboyedu-lnb test]# md5sum oldboy.txt > police.txt [root@oldboyedu-lnb test]# md5sum -c police.txt oldboy.txt: OK
5) 如果是黑客修改了我们的代码 导致检测失败
a) 代码必须有备份 最新的备份 b) 把被篡改的文件移动到/tmp下 保留证据 c) 把最新的备份文件移动到站点目录(用户可访问的目录) 快速恢复业务
案例: 批量做指纹验证
1.在/oldboy下创建10个普通文件 2.把所有的普通文件做MD5校验放入police.md5 3.测试检验
方法1: 直接使用md5sum 通配符的方式
[root@oldboyedu-lnb oldboy]# md5sum *.txt > police.txt [root@oldboyedu-lnb oldboy]# md5sum -c police.txt 10.txt: OK 1.txt: OK 2.txt: OK 3.txt: OK 4.txt: OK 5.txt: OK 6.txt: OK 7.txt: OK 8.txt: OK 9.txt: OK
方法2: 使用find加绝对路径路径查找 工作中使用
[root@oldboyedu-lnb oldboy]# find /oldboy/ -type f|xargs md5sum >/opt/police.txt [root@oldboyedu-lnb oldboy]# cat /opt/police.txt b026324c6904b2a9cb4b88d6d61c81d1 /oldboy/1.txt 26ab0db90d72e28ad0ba1e22ee510510 /oldboy/2.txt 6d7fce9fee471194aa8b5b6e47267f03 /oldboy/3.txt 48a24b70a0b376535542b996af517398 /oldboy/4.txt 1dcca23355272056f04fe8bf20edfce0 /oldboy/5.txt 9ae0ea9e3c9c6e1b9b6252c8395efdc1 /oldboy/6.txt 84bc3da1b3e33a18e8d5e1bdd7a18d7a /oldboy/7.txt c30f7472766d25af1dc80b3ffc9a58c7 /oldboy/8.txt 7c5aba41f53293b712fd86d08ed5b36e /oldboy/9.txt 31d30eea8d0968d6458e0ad0027c9f80 /oldboy/10.txt [root@oldboyedu-lnb oldboy]# md5sum -c /opt/police.txt /oldboy/1.txt: OK /oldboy/2.txt: OK /oldboy/3.txt: OK /oldboy/4.txt: OK /oldboy/5.txt: OK /oldboy/6.txt: OK /oldboy/7.txt: OK /oldboy/8.txt: OK /oldboy/9.txt: OK /oldboy/10.txt: OK
1.1.6 如何自动检测 MD5+定时任务+脚本
批量添加10个用户stu01,stu02....stu10,并设置8位随机密码(禁止使用for,while等循环)
方法1
useradd stu01;echo 123456|passwd --stdin stu01;useradd stu02
1.1.6.1 如何创建1个用户
useradd stu01 useradd stu02 useradd stu10
1.1.6.2 如何让创建用户的命令在每一行显示
[root@oldboyedu-lnb ~]# useradd stu03 [root@oldboyedu-lnb ~]# useradd stu04 [root@oldboyedu-lnb ~]# useradd stu05 [root@oldboyedu-lnb ~]# useradd stu06
PS:只要能显示到屏幕上的可执行命令 都可以直接使用bash进行执行
[root@oldboyedu-lnb ~]# echo ls ls [root@oldboyedu-lnb ~]# echo ls|bash 1.txt count.txt oldboy.txt stu02.txt stu06.txt stu10.txt test.txt 2.txt id.txt passwd.txt stu03.txt stu07.txt stuaZ.txt 70.txt index.html stu00.txt stu04.txt stu08.txt stu.txt alex lidao-oldboy.txt stu01.txt stu05.txt stu09.txt test [root@oldboyedu-lnb ~]# echo useradd test01 useradd test01 [root@oldboyedu-lnb ~]# echo useradd test01|bash [root@oldboyedu-lnb ~]# id test01 uid=1009(test01) gid=1009(test01) groups=1009(test01)
1.1.6.3 sed 进行拼接
[root@oldboyedu-lnb ~]# seq 10|sed -r 's#(.*)#useradd stu\1#g' useradd stu1 useradd stu2 useradd stu3 useradd stu4 useradd stu5 useradd stu6 useradd stu7 useradd stu8 useradd stu9 useradd stu10 [root@oldboyedu-lnb ~]# seq 10|sed -r 's#(.*)#useradd stu\1#g'|bash
1.1.6.4 删除用户
[root@oldboyedu-lnb ~]# seq -w 10|sed -r 's#(.*)#userdel -r stu\1#g' userdel -r stu01 userdel -r stu02 userdel -r stu03 ------------------------ [root@oldboyedu-lnb ~]# echo stu{01..10}|xargs -n1|sed -r 's#(.*)#useradd \1#g' useradd stu01 useradd stu02 useradd stu03 useradd stu04 useradd stu05 useradd stu06 useradd stu07 useradd stu08 useradd stu09 useradd stu10
1.1.6.5 awk 拼接
[root@oldboyedu-lnb ~]# seq 10|awk '{print "useradd stu0"$1}' useradd stu01 useradd stu02 useradd stu03 useradd stu04 useradd stu05 useradd stu06 useradd stu07 useradd stu08 useradd stu09 useradd stu010 [root@oldboyedu-lnb ~]# seq 10|awk '{print "userdel -r stu0"$1}'|bash ------------------- [root@oldboyedu-lnb ~]# echo stu{01..10}|xargs -n1|awk '{print "useradd " $1}' useradd stu01 useradd stu02 useradd stu03 useradd stu04 useradd stu05 useradd stu06 useradd stu07 useradd stu08 useradd stu09 useradd stu10
---------------------------- 01
[root@oldboyedu-lnb ~]# echo stu{1..10}|xargs -n1|xargs -i useradd {} [root@oldboyedu-lnb ~]# #useradd stu1 stu2 stu3 [root@oldboyedu-lnb ~]# #-i {} [root@oldboyedu-lnb ~]# #useradd stu1 [root@oldboyedu-lnb ~]# #useradd stu2
----------------------------02
[root@oldboyedu-lnb ~]# echo useradd" "stu{01..10}|xargs -n2 useradd stu01 useradd stu02 useradd stu03 useradd stu04 useradd stu05 useradd stu06 useradd stu07 useradd stu08 useradd stu09 useradd stu10 [root@oldboyedu-lnb ~]# echo useradd" "stu{01..10} useradd stu01 useradd stu02 useradd stu03 useradd stu04 useradd stu05
useradd stu06 useradd stu07 useradd stu08 useradd stu09 useradd stu10
----------------------------03
[root@oldboyedu-lnb ~]# echo useradd_stu{1..10}|xargs -n1|sed 's#_# #g' useradd stu1 useradd stu2 useradd stu3 useradd stu4 useradd stu5 useradd stu6 useradd stu7 useradd stu8 useradd stu9 useradd stu10
-------------------04
[root@oldboyedu-lnb ~]# echo -e '\n'useradd'\t'stu{01..10} useradd stu01 useradd stu02 useradd stu03 useradd stu04 useradd stu05 useradd stu06 useradd stu07 useradd stu08 useradd stu09 useradd stu10
1.1.6.6 给每个用户创建一个随机密码
1)如何生成随机密码
第一个方法: echo $((RANDOM))|md5sum|cut -c1-8 数字区间0-32767
[root@oldboyedu-lnb ~]# echo $((RANDOM))|md5sum|cut -c1-8 639ca2d9 [root@oldboyedu-lnb ~]# echo $((RANDOM))|md5sum|cut -c1-8 146e52c9 [root@oldboyedu-lnb ~]# echo 1|md5sum b026324c6904b2a9cb4b88d6d61c81d1 - [root@oldboyedu-lnb ~]# echo 2|md5sum 26ab0db90d72e28ad0ba1e22ee510510 - [root@oldboyedu-lnb ~]# echo 3|md5sum 6d7fce9fee471194aa8b5b6e47267f03 -
第二个方法: date +%N|md5sum |cut -c1-8
[root@oldboyedu-lnb ~]# date +%N|md5sum |cut -c1-8 863fda71 [root@oldboyedu-lnb ~]# date +%N|md5sum |cut -c1-8 71d47869 [root@oldboyedu-lnb ~]# date +%N|md5sum |cut -c1-8 bdf8d2e5 [root@oldboyedu-lnb ~]# date +%N|md5sum |cut -c1-8 2a4ec3de
2) 如何拼接到批量创建用户
awk拼接
[root@oldboyedu-lnb ~]# echo stu{01..10}|xargs -n1|awk '{print "useradd " $1";echo 123456|passwd --stdin " $1}' useradd stu01;echo 123456|passwd --stdin stu01 useradd stu02;echo 123456|passwd --stdin stu02 useradd stu03;echo 123456|passwd --stdin stu03 useradd stu04;echo 123456|passwd --stdin stu04
sed拼接
[root@oldboyedu-lnb ~]# echo stu{01..10}|xargs -n1|sed -r 's#(.*)#useradd \1;echo 123456|passwd --stdin \1#g' useradd stu01;echo 123456|passwd --stdin stu01 useradd stu02;echo 123456|passwd --stdin stu02 useradd stu03;echo 123456|passwd --stdin stu03 useradd stu04;echo 123456|passwd --stdin stu04
1.1.6.7 多个用户创建随机密码 (sed拼接)
[root@oldboyedu-lnb~]# seq -w 10|sed -nr 's#.*#useradd stu& ; echo `tr -cd '[:alnum:][:punct:]' < /dev/urandom | head -c8` | tee -a /tmp/passwd | passwd --stdin stu&#gp' useradd stu01 ; echo `tr -cd [:alnum:][:punct:] < /dev/urandom | head -c8` | tee -a /tmp/passwd | passwd --stdin stu01 useradd stu02 ; echo `tr -cd [:alnum:][:punct:] < /dev/urandom | head -c8` | tee -a /tmp/passwd | passwd --stdin stu02 useradd stu03 ; echo `tr -cd [:alnum:][:punct:] < /dev/urandom | head -c8` | tee -a /tmp/passwd | passwd --stdin stu03 useradd stu04 ; echo `tr -cd [:alnum:][:punct:] < /dev/urandom | head -c8` | tee -a /tmp/passwd | passwd --stdin stu04 useradd stu05 ; echo `tr -cd [:alnum:][:punct:] < /dev/urandom | head -c8` | tee -a /tmp/passwd | passwd --stdin stu05 useradd stu06 ; echo `tr -cd [:alnum:][:punct:] < /dev/urandom | head -c8` | tee -a /tmp/passwd | passwd --stdin stu06 useradd stu07 ; echo `tr -cd [:alnum:][:punct:] < /dev/urandom | head -c8` | tee -a /tmp/passwd | passwd --stdin stu07 useradd stu08 ; echo `tr -cd [:alnum:][:punct:] < /dev/urandom | head -c8` | tee -a /tmp/passwd | passwd --stdin stu08 useradd stu09 ; echo `tr -cd [:alnum:][:punct:] < /dev/urandom | head -c8` | tee -a /tmp/passwd | passwd --stdin stu09 useradd stu10 ; echo `tr -cd [:alnum:][:punct:] < /dev/urandom | head -c8` | tee -a /tmp/passwd | passwd --stdin stu10
awk拼接
[root@oldboyedu-lnb~]# seq -w 10 |awk '{print $1 "useradd stu " $1 " echo `tr -cd '[[:blank:]][[:prunt:]]' < /dev/urandom |head -c8` |tee -a /tmp/passwd --stdin stu" $1}' 01useradd stu 01 echo `tr -cd [[:blank:]][[:prunt:]] < /dev/urandom |head -c8` |tee -a /tmp/passwd --stdin stu01 02useradd stu 02 echo `tr -cd [[:blank:]][[:prunt:]] < /dev/urandom |head -c8` |tee -a /tmp/passwd --stdin stu02 03useradd stu 03 echo `tr -cd [[:blank:]][[:prunt:]] < /dev/urandom |head -c8` |tee -a /tmp/passwd --stdin stu03 04useradd stu 04 echo `tr -cd [[:blank:]][[:prunt:]] < /dev/urandom |head -c8` |tee -a /tmp/passwd --stdin stu04 05useradd stu 05 echo `tr -cd [[:blank:]][[:prunt:]] < /dev/urandom |head -c8` |tee -a /tmp/passwd --stdin stu05 06useradd stu 06 echo `tr -cd [[:blank:]][[:prunt:]] < /dev/urandom |head -c8` |tee -a /tmp/passwd --stdin stu06 07useradd stu 07 echo `tr -cd [[:blank:]][[:prunt:]] < /dev/urandom |head -c8` |tee -a /tmp/passwd --stdin stu07 08useradd stu 08 echo `tr -cd [[:blank:]][[:prunt:]] < /dev/urandom |head -c8` |tee -a /tmp/passwd --stdin stu08 09useradd stu 09 echo `tr -cd [[:blank:]][[:prunt:]] < /dev/urandom |head -c8` |tee -a /tmp/passwd --stdin stu09 10useradd stu 10 echo `tr -cd [[:blank:]][[:prunt:]] < /dev/urandom |head -c8` |tee -a /tmp/passwd --stdin stu10
第三个方法: tr -cd '[:alnum:][:punct:]' < /dev/urandom | head -c8` | tee –a
[root@oldboyedu-lnb~]# echo stu{01..10}`tr -cd [:alnum:] < /dev/urandom | head -c8` | xargs -n1 |sed -r 's#(.{5})(.*)#useradd \1 \&\& echo \2 | passwd --stdin \1#g' useradd stu01 && echo oQHP7fHy | passwd --stdin stu01 useradd stu02 && echo kjqYXMo9 | passwd --stdin stu02 useradd stu03 && echo ndXuHbFn | passwd --stdin stu03 useradd stu04 && echo dfUoerSs | passwd --stdin stu04 useradd stu05 && echo F5Fe4WOE | passwd --stdin stu05 useradd stu06 && echo 52Y81sUP | passwd --stdin stu06 useradd stu07 && echo IWN5fkHW | passwd --stdin stu07 useradd stu08 && echo gm4CXgjq | passwd --stdin stu08 useradd stu09 && echo li2ob28j | passwd --stdin stu09 useradd stu10 && echo Bqj8XVDq | passwd --stdin stu10
1.2 tee命令
tee命令用于将数据重定向到文件,另一方面还可以提供一份重定向数据的副本作为后续命令的stdin。简单的说就是把数据重定向到给定文件和屏幕上。
选项参数
-a:向文件中重定向时使用追加模式;
-i:忽略中断(interrupt)信号。
文件:指定输出重定向的文件.
第2章 Linux命令 chown sort uniq
2.1 chown 命令
chown 修改文件的属主属组
命令格式:
chown [参数选项] 属主.属组 file
2.1.1 修改文件的属主
[root@oldboyedu-lnb test]# chown oldboy .oldboy.txt [root@oldboyedu-lnb test]# ll total 16 -rw-r--r-- 1 root root 168 Aug 5 10:49 all.tar.gz lrwxrwxrwx 1 root root 9 Aug 4 11:39 data -> /tmp/data -rwxr-xr-x 1 root root 10 Aug 4 11:47 oldboy.bak -rw-r--r-- 1 oldboy root 24 Aug 12 09:29 oldboy.txt
2.1.2 同时修改文件的属主属组 重要
[root@oldboyedu-lnb test]# chown oldboy.oldboy oldboy.txt [root@oldboyedu-lnb test]# ll oldboy.txt -rw-r--r-- 1 oldboy oldboy 24 Aug 12 09:29 oldboy.txt
2.1.3 只修改属组 了解
[root@oldboyedu-lnb test]# chown .root oldboy.txt [root@oldboyedu-lnb test]# ll oldboy.txt -rw-r--r-- 1 oldboy root 24 Aug 12 09:29 oldboy.txt
2.1.4 修改当前目录和目录下的所有文件 递归修改-R 重要
[root@oldboyedu-lnb test]# chown -R oldboy.oldboy ./* [root@oldboyedu-lnb test]# ll total 16 -rw-r--r-- 1 oldboy oldboy 168 Aug 5 10:49 all.tar.gz -rwxr-xr-x 1 oldboy oldboy 10 Aug 4 11:47 oldboy.bak -rw-r--r-- 1 oldboy oldboy 24 Aug 12 09:29 oldboy.txt -rw-r--r-- 1 oldboy oldboy 45 Aug 12 09:29 police.txt drwxr-xr-x 2 oldboy oldboy 137 Aug 12 11:04 test [root@oldboyedu-lnb test]# ll test total 0 -rw-r--r-- 1 oldboy oldboy 0 Aug 12 11:04 10.txt -rw-r--r-- 1 oldboy oldboy 0 Aug 12 11:04 1.txt -rw-r--r-- 1 oldboy oldboy 0 Aug 12 11:04 2.txt
2.2 企业中常见的笔试题 创建用户和用户组
创建一个 uid 999 不允许登陆 不创建家目录 属于test组 oldboy10用户
PS:必须先创建组
[root@oldboyedu-lnb ~]# groupadd -g 888 test [root@oldboyedu-lnb ~]# useradd -u997 -s /sbin/nologin -M -G test oldboy10 [root@oldboyedu-lnb ~]# id oldboy10 uid=997(oldboy10) gid=1020(oldboy10) groups=1020(oldboy10),888(test)
2.3 用户的相关命令
2.3.1 id 查看用户的信息
2.3.2 w 查看系统性能和用户登陆信息
2.3.3 top 动态查看系统性能信息
-M 按照内存排序
-P 按照CPU使用率进行排序
iotop #显示系统中每个进程使用的磁盘io
iftop #显示系统网络流量
htop #增强版本的top命令
2.3.4 ps aux
cpu与内存的使用率
sort -rnk2
增加sort -h参数
htop #增强版本的top命令
iotop #显示系统中每个进程使用的磁盘io
iftop #显示系统网络流量
2.3.5 uptime 查看系统性能和用户登录信息
2.4 查看系统性能命令
w
uptime
top
顶替的命令
uptime
free -h
ps -ef
命令
M按照内存使用率排序
P按照cpu使用率进行排序
ps aux
cpu与内存的使用率
sort -rnk2
增加sort -h参数
htop #增强版本的top命令
iotop #显示系统中每个进程使用的磁盘io
iftop #显示系统网络流量
2.5 sort 排序
语法格式:
sort [参数选项] file
cat file|sort [参数选项]
sort [options] file(s)
-r 按照降序排序
-R 随机排序
-n 按照数值进行排序
-f 忽略(fold)字符串中的字符大小写
-u (独特,unique)删除输出中的重复行
-t c 使用c做为字段界定符
-k X 按照使用c分隔的X列来排序,能够使用多次(默认按照第一列排序)
Example:
cat /etc/passwd | sort -t:rnk3 按照使用:分隔的第三列数字降序排序
2.5.1 sort默认按照第一列进行排序
a. 第一列的第一个字母 a..z 正序排序
b. 第一列的第一个数字 从小到大正序排序
2.5.1.1 按照数字的第一列正序排序
[root@oldboyedu-lnb ~]# sort test.txt 10 110 200000 300 4555555 5 6 7 8 9
2.5.1.2 默认按照字符的第一列排序 正序排序
[root@oldboyedu-lnb ~]# sort 2.txt alex hjfie jaifek lidao oldboy oomnfwe qqqq rrrr tttt uuu yyyy
2.5.1.3 字符串和数字在一起
[root@oldboyedu-lnb ~]# sort 2.txt 10 110 200000 300 4555555 5 6 7 8 9 alex hjfie jaifek lidao
2.5.1.4 逆序排序 sort –r test.txt
[root@oldboyedu-lnb ~]# sort -r test.txt 9 8 7 6 5 4555555 300 200000 110 10
2.5.1.5 按照数字进行正序排序 sort -n test.txt sort –rn test.txt
[root@oldboyedu-lnb ~]# sort -n test.txt 5 6 7 8 9 10 110 300 200000 4555555 [root@oldboyedu-lnb ~]# sort -rn test.txt 4555555 200000 300 110 10 9
2.5.1.6 按照第二列的数字进行逆序排序
[root@oldboyedu-lnb ~]# sort -rnk2 3.txt 闫万辰 100 苗稼木 100 林银展 100 李博森 100.00 徐焱 100 吴琦 100
2.5.1.7 统计文本中单词出现的次数 uniq
去重
统计
默认去重(把挨着的 相邻的和自己一模一样的单词进行去重)
uniq [OPTION]... [FILE]... 从输入中删除前后相接的重复的行,连续且完全相同方为重复 -c 显示每行重复出现的次数 -d 仅显示重复过的行 -u 仅显示不曾重复的行 常和 sort 一起配合使用. Example: sort userlist.txt | uniq -c
[root@oldboyedu-lnb ~]# sort 3.txt |uniq -c 2 alex 1 ccccc 2 lidao 1 odlboyedu.com 2 oldboy 1 qqqqq 1 zs [root@oldboyedu-lnb ~]# sort 3.txt |uniq -c|sort -r|head 重要 2 oldboy 2 lidao 2 alex 1 zs 1 qqqqq 1 odlboyedu.com 1 ccccc
2.5.2 练习作业: 统计出以下域名各出现了多少次 按照出现次数最多的进行排序
把以下内容复制到文件中 先取出过滤域名 然后进行域名的次数统计
cat oldboy.txt
http://www.baidu.com/images/jpg http://www.sina.com/images/mp4 http://www.baidu.com/static/index.html http://www.sina.com/static/jpg http://www.baidu.com/index.html http://www.sina.com/test/index.html 结果如下 3 www.baidu.com 2 www.weibo.com
2.5.2.1 sed解答
①正序:[root@oldboyedu-lnb~]# sed -r 's#.*(www.*com)/.*#\1#g' oldboy.txt |sort| uniq -c 3 www.baidu.com 3 www.sina.com 1 www.weibo.com ②逆序:[root@oldboyedu-lnb~]# sed -r 's#.*(www.*com)/.*#\1#g' oldboy.txt |sort -r| uniq -c 1 www.weibo.com 3 www.sina.com 3 www.baidu.com
2.5.2.2 awk解答
①正序:[root@oldboyedu-lnb~]# awk -F / '{print $3}' oldboy.txt |sort|uniq -c 3 www.baidu.com 3 www.sina.com 1 www.weibo.com
②逆序
[root@oldboyedu-lnb~]# awk -F / '{print $3}' oldboy.txt |sort -r|uniq -c 1 www.weibo.com 3 www.sina.com 3 www.baidu.com [root@oldboyedu-lnb~]# awk -F "[:/]+" '{print $2}' oldboy.txt |sort|uniq -c 3 www.baidu.com 3 www.sina.com 1 www.weibo.com