第三周

第三周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)
N25_sadanN25_sadan
上一篇 2016-12-18
下一篇 2016-12-19

相关推荐

  • lvm的应用

    前言    lvm是logical volume manager(逻辑卷管理器)的简称,通过将若干个磁盘分区连接成一个整块的卷组(volumegroup),形成一个存储池,管理员可以在卷组上随意创建逻辑卷(logicalvolumes),并进一步在逻辑卷组上创建文件系 统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按…

    Linux干货 2016-05-23
  • 安装包管理

       软件包管理 软件的运行和编译 ABI 由于window和linux不兼容 linux是ELF window 是PE 对应的内核解析方式不同,可以用虚拟化 API 只程序与程序的公用的接口,相互调用方式 程序源代码 –>预处理–>编译–>汇编–>链接 预处理只会引…

    Linux干货 2017-04-24
  • N25第一周作业

    1、描述计算机的组成及其功能。 硬件部分: 软件(系统)组成部分 功能模块划分: 进程管理:系统资源的分配单位(线程是CPU分配单位) 存储管理:内存分配,存储保护,虚拟存储 设备管理:管理外设接口 文件管理:保存程序和数据等软件信息 程序接口:提供指令或函数的调用方式,使程序能够调用系统的资源 用户界面:为用户提供操作环境    &nb…

    Linux干货 2016-12-12
  • CentOS多网卡单个ip和单个网卡多个ip的设置

    一、单个网卡设置一个IP地址     1.初始状态已添加一个网卡eth0,并设置的均为自动获取IP地址,如下图所示:网卡为eth0,ip地址为10.1.249.36;为了后续实验的顺利进行,我们把NetworkManager服务关闭     chkconfig NetworkMa…

    Linux干货 2016-09-06
  • linux学习笔记: shell脚本编程相关(上)

    前言 unix/linux操作系统下的shell,是一种壳,其目的是提供一个用户与计算机相互交互的命令接口,通过输入各种命令,达到操作的目的。 与此同时,shell支持控制流程,进而可以组合出各种各样的应用实例。 shell脚本的格式  首行shebang机制:  bash脚本,首行添加#!/bin/bash&nbsp…

    Linux干货 2017-04-18