zoukankan      html  css  js  c++  java
  • 用户管理

              第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 stu1#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 stu1#g'|bash
    

    1.1.6.4   删除用户

     [root@oldboyedu-lnb ~]# seq -w 10|sed -r 's#(.*)#userdel -r stu1#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 '
    'useradd'	'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
    

          

  • 相关阅读:
    Djiango项目的创建以及配置介绍1
    最大矩形土地 单调栈或者DP
    0917 lxs 反思
    0915 反思
    codeforces 1209/C Paint the Digits 观察
    NOIP2014 解方程 秦九韶算法+多项式处理
    整数拆分问题
    机器人M号
    有趣的数列 唯一分解定理+卡特兰数
    数位DP 不要62
  • 原文地址:https://www.cnblogs.com/strugger-0316/p/13672821.html
Copyright © 2011-2022 走看看