第三周

第三周blog

第三周blog

  • 1
       列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。
       # who|cut -d’ ‘ -f 1 |sort -u

  • 2
       取出最后登录到当前系统的用户的相关信息。
       # who | tail -n 1

  • 3
       取出当前系统上被用户当作其默认shell的最多的那个shell。
       # cat /etc/passwd|cut -d: -f7|sort|uniq -c|sort -n|tail -n 1

  • 4
       将/etc/passwd中的第三个字段数值最大的后10个用户的信息全部改为大写后保存至/tmp/maxusers.txt文件中。
       # cat /etc/passwd|sort -n -t: -k3|tail -n 10|tr [a-z] [A-Z] > /tmp/etc.conf

  • 5
       取出当前主机的IP地址,提示:对ifconfig命令的结果进行切分。
       # ifconfig |grep “inet addr” |cut -d: -f2|cut -d’ ‘ -f1

  • 6
       列出/etc目录下所有以.conf结尾的文件的文件名,并将其名字转换为大写后保存至/tmp/etc.conf文件中。
       # ls /etc/*.conf|tr [a-z] [A-Z] > /tmp/etc.conf

  • 7
       显示/var目录下一级子目录或文件的总个数。
       # ls /var | wc -l

  • 8
       取出/etc/group文件中第三个字段数值最小的10个组的名字。
       # cat /etc/group|sort -n -t: -k3|head -n 10|cut -d: -f1

  • 9
       将/etc/fstab和/etc/issue文件的内容合并为同一个内容后保存至/tmp/etc.test文件中。
       # cat /etc/fstab /etc/issue > /tmp/etc.test

-10
   用户及组管理命令概叙,
       主要 – 1 用户的增,删,改,查:useradd,userdel,usermod,id
            – 2 组的增,删,改,查 : groupadd,groupdel,groupmod,id
            – 3 用户及组的密码管理
                   用户密码:passwd
                   组密码:gpasswd

~ (1) 创建组distro,其GID为2016;
# groupadd -g 2016 distro
~ (2) 创建用户mandriva, 其ID号为1005;基本组为distro;
# useradd -u 1005 -g distro mandriva
~ (3) 创建用户mageia,其ID号为1100,家目录为/home/linux;
# useradd -u 1100 -d /home/linux mageia
~ (4) 给用户mageia添加密码,密码为mageedu;
# echo mageedu|passwd --stdin mageia
~ (5) 删除mandriva,但保留其家目录;
# userdel mandriva
~ (6) 创建用户slackware,其ID号为2002,基本组为distro,附加组peguin;
# useradd -u 2002 -g distro -G peguin slackware
~ (7) 修改slackware的默认shell为/bin/tcsh;
# usermod -s /bin/tcsh slackware
~ (8) 为用户slackware新增附加组admins;
# usermod -G admins slackware
~ (9) 为slackware添加密码,且要求密码最短使用期限为3天,最长为180天,警告为3天;
# passwd -n 3 -x 180 -w 3 slackware
~ (10) 添加用户openstack,其ID号为3003, 基本组为clouds,附加组为peguin和nova;
# useradd -u 3003 -g clouds -G peguin,nova openstack
~ (11) 添加系统用户mysql,要求其shell为/sbin/nologin;
# useradd -r mysql -s /sbin/nologin
~ (12) 使用echo命令,非交互式为openstack添加密码。
# echo "openstack" | passwd --stdin openstack

sed用法

  • 1  sed作用

  • 2  sed如何工作

  • 3  sed详细用法

sed用来处理什么

首先来看看man文档中如何介绍sed

sed - stream editor for filtering and transforming text

其意是数据流编辑器,过滤并且改变文本.用于编辑文本的工具.

sed如何工作
  • sed工作机制

    sed.png

sed是数据流处理工具,每次只读取一行数据,逐个读取,并将其复制到内存中的特定空间,此空间是sed自己的工作车间,被称为模式空间,即图中parttern space。在模式空间中根据sed所指定的条件进行模式的匹配,可以匹配的行进行处理后,可能保留在模式空间中,可能直接打印至终端(stdout),这需要根据具体的编辑操作,如果不能匹配的行则不处理,保留在模式空间中,在下一行读入数据之前,将模式空间中还保存的数据打印至标准输出(stdout).一直循环此机制到条件对应的行.

sed详细用法
sed [OPTION]... 'scripts' [file]...

    scripts:指的是sed命令匹配的标准,格式为"{[地址定位][编辑命令]}",即{[address-range][sed-command]}.

    OPTION:
        -n:不输出模式空间的内容至屏幕;
        -e script, --expression=script: 多点编辑;
        -f /PATH/TO/SED_SCRIPT_FILE
            直接运行sed脚本文件编辑,每行一个编辑命令
        -r, --regexp-extended:支持使用扩展正则表达式;
        -i : 直接编辑原文件;


    地址定位:
        空地址:对全文进行处理;相当于1,$;
        #: 特定的第#行,例如5行即匹配第5行;
        $: 最后一行;
        /pattern/:被模式所匹配到的每一行;
        /pattern/,/pattern/: 从第一次模式匹配到的行开始,到第二次模式匹配到的行为止;
        #,/pattern/: 第#行到第一次模式匹配到的行为止;
        #,#: 指定行范围,左侧为起始行,右侧为结束行;
        #,+#: 指定行范围, 左侧为起始行,右侧为以左侧为标准的偏移量;
            例如: 3,+7    第三行至第十行
                  1,$   第一行至最后一行
        步进:~
            1~2:所有奇数行
            2~2:所有偶数行


    编辑命令:
        d:删除;
        p:显示模式空间内容;
        a \text:在行后面追加文本"text",支持使用\n实现多行追加;
        i \text:在行前面插入文本"text",支持使用\n实现多行插入;
        c \text: 把匹配到的行替换为此处指定的文本"text";
        w /path/to/filename:将当前模式空间所匹配的行写入到指定文件中;
        r /path/to/filename:读取指定文件至匹配行的后面;可做文件合并;
        =:为模式匹配到的行打印行号;每个行号独占一行;
        !:条件取反;
            地址定位!编辑命令; 例如:'$!d',最后一行不删除;
        s///:查找替换,其分隔符可自行指定,常用的有s$$$,s###等;
            替换标记:
                g:全局替换;
                w:/path/to/somefile:将替换成功的结果保存至指定文件中;
                p:显示替换成功的行;
example:
将/etc/hosts文件打印,为什么会每行显示两遍呢,其实就是sed工作机制,首先将一行读入,根据条件是全文匹配,因此第一行直接打印至终端,然后再将模式空间保留原有的行再打印一次,因此便是两行。

    # sed 'p' /etc/hosts 
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

使用-n选项不打印模式空间的行,只显示处理之后的行
    # sed  -n 'p' /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

创建一个测试文件/tmp/test

    ]# cat > /tmp/test
    # 1 
    # 2 
    # 3
    # 4
    # 5

删除:

    删除/tmp/test第一行至第3行
    ]# sed '1,3d' /tmp/test
    # 4
    # 5

    删除/tmp/test第一行到三行以后,即到第四行
    ]# sed '1,+3d' /tmp/test
    # 5

    删除/tmp/test全文
    ]# sed '1,$d' /tmp/test     或者   ]# sed 'd' /tmp/test
    ]#

    删除/tmp/test奇数行,因此显示偶数行
    ]# sed '1~2d' /tmp/test
    # 2 
    # 4

    删除/tmp/test偶数行,因此显示奇数行
    ]# sed '2~2d' /tmp/test
    # 1 
    # 3
    # 5

    不删除最后一行/tmp/test,并其显示行号
    ]# sed '$!d;=' /tmp/test
    5
    # 5

第二个测试文件/tmp/test_1

 ]# cat > /tmp/test_1
  # 1
  @ 2
  # 3
  @ 4   
  $ 5

 在$符号开头的行后添加两行文本'test_1'和'test_2'
]# sed '/^\$/a \test_1 \ntest_2' /tmp/test_1
 # 1
 @ 2
 # 3
 @ 4
 $ 5
 test_1
 test_2

  将/tmp/test_2中文件内容读到/tmp/test_1文件末尾
 ]# sed 'r /tmp/test w /tmp/test_2' /tmp/test_1
  # 1
  @ 2
  # 3
  @ 4
  $ 5
  # 1 
  # 2 
  # 3
  # 4
  # 5

  将非#开头的行的行首修改为#,且仅显示修改成功的行
 ]# sed -n 's/^[^#]/#/p' /tmp/test_1 
 # 1
 # 2
 # 3
 # 4
 # 5

 将所有非#的字符替换成#,并显示替换成功的行
]# sed -n 's/[^#]/#/gp' test_1 
###
###
###
###
###

将前三行所有非#字符替换成#,显示成功替换的行,并且显示4,5行
]# sed -n -e '1,3s/[^#]/#/gp' -e '4,5p' test_1 
###
###
###
@ 4
$ 5

高级使用:

sed1.png

在sed工作空间中,不仅仅只有parttern spacc,还有hold space,即保持空间。
以下是其使用:

    高级编辑命令(仅做了解):
         h H : 覆盖/追加从模式空间到保持空间;
         g G :覆盖/追加从保持空间到模式空间;
         n N :覆盖/追加读取匹配到的行的下一行至模式空间中;
         d:删除模式空间中的行;
         D: 删除模式空间中的所有行;
         x:交换两个空间的内容;
  • sed模式空间与保持空间

由于sed有两个内存空间,且开始都是空的,便可以允许数据之间的交换,此处只是初步知晓其操作即可。以下有实例:

example:

sed  'G' FILE:在原有的每行后方添加一个空白行;
sed  '1!G;h;$!d'  FILE:逆序显示文件的内容;
sed  'n;d'  FILE:显示奇数行;
sed  '$!N;$!D' FILE:取出文件后两行;

原创文章,作者:N25_sadan,如若转载,请注明出处:http://www.178linux.com/64133

(0)
上一篇 2016-12-18 22:01
下一篇 2016-12-19 07:35

相关推荐