美文网首页
课堂笔记day13~17

课堂笔记day13~17

作者: 乐园_YD | 来源:发表于2019-03-23 17:35 被阅读0次

    老男孩Linux运维58期课堂笔记                                                                  


                                                                                                  作者:于冬

                                                                                                  归档:课堂笔记

                                                                                                  日期:3.18

    格式说明:

    蓝色字体:注释

    黄色背景:重要

    绿色背景:注意

    1、老男孩思想

    老男孩思想之如何答笔试题?

    1、字要好,工整,用心。

    2、尽量多答一些。

    3、一定要多种答案

    4、问答题能画图就不用文字。

    老男孩思想之如何解决拖延症?

    1、把刀把交给别人。

       破釜沉舟,不留后路。

       a.告诉别人如果做不到,我就给你什么好处。

       b.定制目标,然后告诉身边的人。

        c.先把500放人家那,做到了还给你,做不到就不用给我了。

    2、塑造价值观

      a.正向价值观:多想做到结果后的好处。

         拿到1万的工作。

         找个好女朋友(女人)

         自己有点面子,装装叉。

         买车、买房。

         父母有也有面子。

      b.负面价值观

         谁欺负你,韩信受胯下之辱。

         谁看不起你,让他狗眼看人低。

    3、让你最在意的人逼你(对你的好的人)

          惊闻故里玉龙斗,

          鳞甲纷飞苍穹下。

          黄浦江畔无它愿,

          二度梅花七月发。

    2、链接的概念

    链接可分为两种:一种是硬链接。另一种为软链接或符号链接。

    创建硬链接语法:“ln 原始文件 目标文件” (注意空格)

    创建软链接语法:“ln-s 原始文件 目标文件” (目标文件不能事先存在)

    企业面试:请描述Linux中的软链接和硬链接的区别

    1、答分类:链接可分为两种:一种是硬链接。另一种为软链接或符号链接。

    2、答概念:硬链接文件与源文件的Inode节点号相同,而软链接文件相当于Windows下的快捷方式(Inode节点号与源文件不同)

    3、答创建:创建硬链接语法:“ln 原始文件 目标文件” (注意空格)

    创建软链接语法:“ln-s 原始文件 目标文件” (目标文件不能事先存在)

    4、答特点:1、不能对目录创建硬链接,但可以可创建软链接

                        2、软链接可以跨文件系统,硬链接不可以跨文件系统

                        3、删除软链接文件,对源文件及硬链接文件无任何影响

                        4、删除文件的硬链接文件,对原文件及软连接文件无任何影响

                        5、删除软连接的源文件,对硬链接无影响,会导致其软连接失效,(红底白字闪烁状)

                        6、同时删除源文件及其硬链接文件,整个文件才会被正真地删除

    5、答案例:硬链接用处不多,可以用来对重要文件做快照防止误删,而对目录建立软连接在工作中很长用。例如:安装软件中会用nginx_1.10作为目录,安装完后设置软连接为nginx即保持了版本号表识,又方便使用,以及方便后续软件升级。

    3、通配符知识

    1、基本含义

    通配符简单说就是键盘上的一些特殊字符,可以实现某些特殊的功能,

    例如,可以用*代表所有,来模糊搜索系统中的文件。

    2、范围:通配符试用范围是命令行中【普通命令】或脚本编程中。

    第一组 模糊匹配:

    [root@oldboyedu/data]# touch a.txt b.txt aa.txt test.txt

    [root@oldboyedu/data]# lsaa.txt  a.txt b.txt  test.txt

    通配符参数

    >     #输出重定向

    >>    #输出追加重定向

    <     #输入重定向

    <<    #追加输入重定向

    ~     #当前用户家目录

    $     #以。。。结尾(正则)

    ^     #以。。。开头(正则)

    *     #匹配全部字符,通配符

    ?    #任意一个字符,通配符

    #       #注释

    &       #让程序或脚本切换到后台执行

    &&      #并且 同时成立

    []      #表示一个范围(正则,通配符)

    {}      #产生一个序列(通配符)

    .       #当前目录的硬链接

    ..      #上级目录的硬链接


    老男孩Linux运维58期课堂笔记                                                                         


                                                                                                  作者:于冬

                                                                                                  归档:课堂笔记

                                                                                                  日期:3.19

       格式说明:

    蓝色字体:注释

    黄色背景:重要

    绿色背景:注意

    1、正则表达式

    1、什么是正则表达式?作用和特殊字符一样。正则表达式是为处理大量的字符串及文本而定义的一套规则和方法。假设"@"代表“I am”,"!"代表“oldboy”,则执行echo "@!"的结果就是输出“I am oldboy”。

    2、提高效率,快速获取到想要的内容。

    3、适用于三剑客命令 grep(egrep),sed,awk以行为单位处理。

    4、实践来讲解

    2、易混淆事项

    1、和通配符区别。

    2、开发人员正则,一般是Perl兼容正则表达式。

    3、Linux系统三剑客正则表达式******。

    3、正则表达式的分类

    基本正则表达式(BRE)

    扩展正则表达式(ERE)

    分类:

    1、BRE  grep

    2、ERE  egrep

    基础正则表达式+扩展正则表达式含义解释:

    .   代表且只能代表任意一个字符(不包括空行)

    *重复前面任意0个或多个字符

    .*匹配所有字符。(包括空行)

    sed -ri 's#(.*)#\1#g' bqh.txt

    把前面正则匹配的括号内的结果,在后面用\1取出来操作。

    ^表示以什么开头,^oldboy以oldboy开头

    $    是以什么结尾

    ^$  表示空行。

    \例\.   就只代表点本身,转义符号,让有着特殊身份移动的字符,脱掉马甲,还原原型\$

    ^.*   以任意多个字符开头。

    .*$   以任意多个字符结尾。

    (.*)  从第一字符匹配,到空格停止,

    [abc]  匹配字符集合内的任意一个字符【a-zA-Z】

    [^abc]  匹配不包括^后的任意字符的内容;中括号里的^为取反,注意和以...开头区别。

    a\{n,m\}  重复n到m次,前一个重复的字符。如果有用egrep/sed -r 可以去掉斜线。

    \{n,\}  重复至少n次,前一个重复的字符。如果有用egrep/sed -r 可以去掉斜线。

    \{n\}  重复n次,前一个重复的字符。如果有用egrep/sed -r 可以去掉斜线。

    ^word  搜索以word开头的;vi

    ^ 一行的开够

    word$  搜索以word结尾的;vi

    $  一行的开头

    ^$  表示空行。扩展的正则表达式:ERP(egrep或grep -E)

    +   重复一个或一个以上前面的字符? 复0个或一个0前面的字符

    |  用或的方式查找多个符合的字符串

    ()  找出“用户组”字符串

    a{n,m}    匹配前一个字符最少n次,最多m次

    a{n,} 匹配前一个字符最少n次

    a{n} 匹配前一个字符正好n次

    a{,m}      匹配前一个字符最多m次


    老男孩Linux运维58期课堂笔记                                                                        


                                                                                                 作者:于冬

                                                                                                 归档:课堂笔记

                                                                                                 日期:3.20

    格式说明:

    蓝色字体:注释

    黄色背景:重要

    绿色背景:注意

    1、sed 流编辑器

    Sed是操作、过滤和转换文本内容的强大工具。

    常用功能有对文件实现快速增删改查(增加、删除、修改、查询),

    其中查询的功能中最常用的2大功能是过滤(过滤指定字符串)和取行(取出指定行)。

    Sed的参数语法

    1、sed [选项] [sed内置命令字符] [文件]

    -n     取消默认sed的输出,常与sed内置命令的p连用※

    -i     直接修改文件内容,而不是输出到终端。如果不使用-i选项sed只是修改在内存中的数据,并不会影响磁盘上的文件※

    -e    允许多次编辑

    2、sed的内置命令字符说明

    s 替换

    g 全局global

    p 打印print

    d 删除delete

    3、练习题

    问题1:输出oldboy.txt的第2-3行内容※。

    sed -n '2,3p'oldgirl.txt

    问题2:过滤出含有oldboy字符串的行※。

    sed -n'/oldboy/p' oldgirl.txt

    问题3:删除含有oldboy字符串的行※。

    sed '/oldboy/d'oldgirl.txt

    sed /oldboy/doldgirl.txt

    问题4:将文件中的oldboy字符串全部替换为oldgirl※。

    vim替换:

    :%s#oldboy#oldgirl#g

    sed 's#想替换啥#用啥替换#g' oldgirl.txt

    2、cut  按列切割

    -d 指定分隔符 -f指定哪列,多列用逗号

    [root@oldboyedu~]# cat a.txt

    1 2 3 4 5 6 7 8 9 10

    [root@oldboyedu~]# cut -d" " -f1,3,5 a.txt

    1 3 5

    [root@oldboyedu~]# cut -d" " -f3-5 a.txt

    3 4 5

    3、awk(linux三剑客之一)  

    awk语法:

    awk  [option]  'pattern{action}' file ...

    awk   [参数]      '条件{动作}'    文件 ...

    参数:

    -F 指定分隔符打印第一列:

    [root@oldboyedu~]# awk -F ":" '{print $1}' oldboyedu.txt

    root

    bin

    daemon

    adm

    lp

    [root@oldboyedu~]# awk -F ":" '{print $3,$5}' oldboyedu.txt

    0 root

    1 bin

    2 daemon

    3 adm

    4 lp

    awk 命令的常用变量及说明

    $1第一列 $2第二列 以此类推....

    $0  整行

    $NF 最后一列 倒数第一列

    $(NF-1) 倒数第二列

    练习题

    练习:打印 1 2 和最后一列。

    [root@oldboyedu~]# awk -F ":" '{print $1,$2,$NF}' oldboyedu.txt

    root x /bin/bash

    bin x

    /sbin/nologin

    daemon x

    /sbin/nologin

    adm x

    /sbin/nologin

    lp x

    /sbin/nologin

    问题1:取test.txt文件的第2行到第3行的内容。

    方法1

    [root@oldboyedu~]# awk'NR>1&&NR<4'oldboyedu.txt

    bin:x:1:1:bin:/bin:/sbin/nologin

    daemon:x:2:2:daemon:/sbin:/sbin/nologin

    方法2

    [root@oldboyedu~]# awk 'NR==2,NR==3' oldboyedu.txt

    bin:x:1:1:bin:/bin:/sbin/nologin

    daemon:x:2:2:daemon:/sbin:/sbin/nologin

    问题2:过滤出含有root字符串的行※。

    [root@oldboyedu~]# awk '/root/' oldboyedu.txt

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

    [root@oldboyedu~]# awk /root/ oldboyedu.txt

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

    [root@oldboyedu~]#

    [root@oldboyedu ~]#

    awk "/root/" oldboyedu.txt

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

    问题3:删除含有root字符串的行※。

    [root@oldboyedu~]# awk '/^[^r]/' oldboyedu.txt

    bin:x:1:1:bin:/bin:/sbin/nologin

    daemon:x:2:2:daemon:/sbin:/sbin/nologin

    adm:x:3:4:adm:/var/adm:/sbin/nologin

    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

    [^r]和^[^r]注意点

    [^r]  非r

    ^[^r] 以非r字符卡头

    问题4:取文件的第一列、第三列和最后一列内容,并打印行号※。

    [root@oldboyedu~]# awk -F ":" '{print NR,$1,$3,$NF}' oldboyedu.txt

    1 root 0

    /bin/bash

    2 bin 1

    /sbin/nologin

    3 daemon 2

    /sbin/nologin

    4 adm 3

    /sbin/nologin

    5 lp 4

    /sbin/nologin

    问题5:取出Linux中执行ifconfig eth0后对应的IP地址(只能输出IP地址)。

    [root@oldboyedu~]# ifconfig eth0|awk 'NR==2{print $2}'

    10.0.0.201

    CentOS6取ifconfig etho对应的IP地址

    [root@oldboy ~]#

    ifconfig eth0

    eth0      Link encap:Ethernet  HWaddr 00:0C:29:D0:87:20 

              inet addr:10.0.0.202  Bcast:10.0.0.255  Mask:255.255.255.0

              inet6 addr:fe80::20c:29ff:fed0:8720/64 Scope:Link

              UP BROADCAST RUNNING MULTICAST  MTU:1500 Metric:1

              RX packets:243 errors:0 dropped:0 overruns:0frame:0

              TX packets:67 errors:0 dropped:0overruns:0 carrier:0

              collisions:0 txqueuelen:1000

              RX bytes:20674 (20.1 KiB)  TX bytes:8706 (8.5 KiB)

    [root@oldboy ~]#ifconfig eth0|awk 'NR==2{print $2}'addr:10.0.0.202

    [root@oldboy ~]#ifconfig eth0|awk 'NR==2{print $2}'|awk -F ":" '{print $2}'

    10.0.0.202

    [root@oldboy ~]#ifconfig eth0|awk -F "[: ]+" 'NR==2{print $4}'

    10.0.0.202

    问题6:过滤文件中第一列内容匹配root的字符串,把符合的行的最后一列输出

    awk -F":" '$1~/root/ {print $NF}' test.txt~匹配


    老男孩Linux运维58期课堂笔记                                                                           


                                                                                                   作者:于冬

                                                                                                    归档:课堂笔记

                                                                                                    日期:3.21

    格式说明:

    蓝色字体:注释

    黄色背景:重要

    绿色背景:注意

    1、文件权限基础知识

    [root@oldboyedu~]# ls -lhitotal 36K

    33631870-rw-r--r--. 1 root root     21 Oct  6 22:54 a.txt

    33631871-rw-r--r--. 1 root root     16 Oct  6 23:02 b.txt

    33631857-rw-r--r--  1 root root     61 Oct 7 00:11 c.txt

    rw-r--r—

    rser(用户)

    group(用户组)

    other(其他用户)

    1、权限定义字母,

    r代表读权限,用数字4表示

    w代表写权限,用数字2表示

    x代表执行权限,用数字1表示

    -代表没有权限,用数字0表示

    权限增减字符

    +:添加权限

    -:取消权限

    =:取消其他所有权限

    2、字符表示法

    rw-rw-r-x  代表的数字权限为665

    --xr-x-wx  代表的数字权限为153

    -wx--x--x  代表的数字权限为311

    3、修改文件属性的用户和组

    chown 用户.用户组 文件 这里的点可以用:替换。

    chown 用户 文件

    chown .用户组文件   ====chgrp用户组文件

    [if !supportLists]1、     [endif]企业真实案例:网站文件被恶意修改了,打开网站后有弹窗广告(不是你网站的)

    解决方案:

    1、备份

    tar zcvf/opt/oldboy_$(date +%F).tar.gz ./oldboy/

    2、找到被修改的文件

    [root@oldboyedu/]# find /oldboy -type f |xargs grep 'ddddddddddddd'

    /oldboy/oldboy.txt:<script>ddddddddddddd</scripts>

    /oldboy/test.sh:<script>ddddddddddddd</scripts>

    3、批量删除

    [root@oldboyedu/]# find /oldboy -type f |xargs sed -i '/ddddddddddddd/d'

    [root@oldboyedu/]# find /oldboy -type f |xargs grep 'ddddddddddddd'

    找到文件被篡改来源,并优化调整。

    亡羊补牢。

    4、 写总结 故障报告。

    4、特殊权限位基本说明

    suid位:

    suid(setuid)位通过S字符标识,

    存在于基本权限的用户权限位的x权限对应的位置,

    如果用户权限位对应的x权限位上有x权限,则suid就用小写的s标识,

    suid的s对应的数字权限为4,完整权限用八进制数4000表示。

    sgid位:

    sgid(setgid)位同样是通过S字符来标识,

    但是,sgid位存在于基本权限的用户组权限位的x权限对应的位置,

    如果用户组权限位对应的x权限位上有x权限,则sgid就用小写的s标识,

    suid的s对应的数字权限为2,完整的权限用八进制数2000表示。

    sticky(粘滞位)知识简介

    sticky(粘滞)位通过字符T标识,存在于基本权限的其他用户位对应的x权限位上,

    如果其他用户位的x权限位上有x权限,

    则sticky(粘滞)位通过小写的t标识,对应的数字权限是1,

    完整的权限用八进制数1000表示

    工作中有啥用?

    suid到底有什么作用

    简单地说,suid的作用就是让普通用户可以在执行某个设置了suid位的命令或程序时,

    拥有和root管理员一样的身份和权限(默认情况)。


    老男孩Linux运维58期课堂笔记                                                              


                                                                                                   作者:于冬

                                                                                                   归档:课堂笔记

                                                                                                   日期:3.22

    格式说明:

    蓝色字体:注释

    黄色背景:重要

    绿色背景:注意

    1、sgid权限知识

    作用之一:

    sgid的作用就是让普通用户可以在执行某个设置了sgid位的命令时,

    拥有和命令对应用户组(一般为root用户组)一样的身份和权限(默认)。

    sgid基于目录的作用:

    让不同的人创建文件属于相同的用户组,从而可以互相共享文件的权限

    2、 系统定时任务

    1、什么是定时任务?

    周期性的执行任务计划的软件,Linux定时任务的常用软件crond。

    2、使用定时任务软件,可以每天,每小时按你需求重复的执行一项工作。

    例如:备份 都是0点以后,2点爬起来备份,4点以后睡觉。

    需要写一个程序实现自动备份,然后让定时任务软件帮你执行。

    闹钟。。。。可以追女朋友。。。

    3、系统定时任务计划

    1.不用管理员干预,系统自动执行。

    2.也可以利用系统任务为管理员服务

    4、用户定时任务计划

    在Linux系统中,

    cron是定时任务的软件名,

    crond是服务进程名,真正实现定时任务服务。

    crontab命令是用来设置定时任务规则的配置命令。

    要想配置定时任务,首先启动crond服务。

    systemctl start

    crond.service

    systemctl stop

    crond.service

    systemctl status

    crond.service

    4、crontab定时任务编辑命令

    -l   列表查看已经设置的定时任务*

    -e   编辑定时任务*

    -u  查看特定用户下定时任务

    编写定时任务的语法:

    # Example of jobdefinition:

    #

       .---------------- minute (0 - 59)

    # |  .------------- hour (0 - 23)

    # |   | .---------- day of month (1 - 31)

    # |   |    |  .------- month (1 - 12) ORjan,feb,mar,apr ...

    # |   |   |    |    .---- day of week (0 - 6) (Sunday=0 or 7) ORsun,mon,tue,wed,thu,fri,sat

    # |    |   |   |    |

    # *   *   *   *   * (command to be executed)

    共六列:

    第一列:分 minute (0- 59)

    第二列:时hour   (0 - 23)

    第三列:日 day ofmonth (1 - 31)

    第四列:月 month (1 -12) OR jan,feb,mar,apr ...

    第五列:周 day ofweek (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

    第六列:要执行的任务命令或程序

    特殊符号:

    * 表示的 每或每一的意思00 23 * * * 

    cmd- 连续区间 1-1000 8-23 * * *

    cmd

    列举1,2,3,4,8 

    00 1,2,3,4,8 * * * cmd

    /n n是数字。

    n代表自然数字,即“每隔n单位时间”,例如:每10分钟执行一次任务可以写成

    */10 * * * * cmd

    练习

    命令实例1:*/1 * * * * /bin/sh /scripts/data.sh

    在本例中除了数字与命令脚本外,还使用到了符号"*",*号的意思“每一”。

    第一列的意思为分钟,特殊符号“/”表示每隔的意思,即表示每隔一分钟执行/bin/sh /scripts/data.sh程序。

    命令实例2:30 3,12 * * * /bin/sh /scripts/oldboy.sh

    在本例中,第一列为30,表示30分钟;第二列为 3,12,这代表3点及 12点,此定时任务的意思是每天凌晨3点和中午12点的半点时刻(或描述为每天凌晨3:30和中午12:30)执行/scripts/oldboy.sh脚本。

    命令实例3:30 */6 * * * /bin/sh /scripts/oldboy.sh

    在本例中,第一列为30,表示30分钟;第二列*/6代表每6个小时,也相当于 6、12、18、24 的作用。此定时任务的意思是每隔6个小时的半点时刻执行/scripts/oldboy.sh脚本任务。

    命令实例4:30 8-18/2 * * * /bin/sh /scripts/oldboy.sh

    在本例中,其中的第一列为30,表示30分钟;第二列8-18/2代表在早晨8点到下午18点之间每隔2小时,也相当于把8、10、12、14、16、18单独列出。

    那么,此定时任务的意思就是早晨8点到下午18点之间,每隔2小时的半点时刻执行/scripts/oldboy.sh脚本任务。

    命令实例5:30 21 * * * /application/apache/bin/apachectl graceful

    本例表示每晚的21:30重启apache。

    命令实例6:45 4 1,10,22 * * /application/apache/bin/apachectl graceful

    本例表示每月1、10、22日的凌晨4 : 45分重启apache。

    命令实例7:10 1 * * 6,0 /application/apache/bin/apachectl graceful

    本例表示每周六、周日的凌晨1 :

    10分重启apache。

    命令实例8:0,30 18-23 * * * /application/apache/bin/apachectl graceful

    本例表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。

    命令实例9:00 */1 * * * /application/apache/bin/apachectl graceful

    本例表示每隔一小时整点重启apache

    命令实例10:* 23,00-07/1 * * * /application/apache/bin/apachectl graceful

    本例并不表示晚上23点和早上0-7点之间每隔一小时重启Apache。

    要说明的是,以上结果是不规范的,也是不对的。大家想想为什么?

    以上定时任务的第一列为*,表示每分都执行任务即晚上23点和早上0-7点之间每隔一小时的每分都重启Apache,很可怕吧。

    命令实例11:00 11 * 4 1-3 /application/apache/bin/apachectl graceful

    本例表示4月的每周一到周三的上午11点整重启Apache。

    命令实例12:30 09 * * 0 去老男孩教育上课

    本例表示每周日上午9:30去老男孩教育上课,这是周末班的上课频率。

    命令实例13:30 08 * * *去老男孩教育上课

    本例表示每上午8:30去老男孩教育上课,这是脱产班的上课频率。

    实践:

    1、每分钟追加一次oldboy字符串到/tmp/oldboy.log里。

    解答:大象放冰箱分三步

    a.命令行执行成功。

    [root@oldboyedu~]# echo "oldboy">>/tmp/oldboy.log

    [root@oldboyedu~]# cat /tmp/oldboy.logoldboy

    [root@oldboyedu~]# echo "oldboy">>/tmp/oldboy.log

    [root@oldboyedu~]# cat /tmp/oldboy.log

    oldboy

    oldboy

    b.配置定时任务crontab -e 编辑配置

     [root@oldboyedu ~]# crontab -l#####* * * * * echo"oldboy">>/tmp/oldboy.log

    c.检查

    [root@oldboyedu~]# tail -f /tmp/oldboy.log

    oldboy

    oldboy

    oldboy

    5、老男孩思想:

     1)先输入* * * * *

     2)先命令行操作成功。

     3)拷贝命令到定时任务编辑里

    范例13-2:让服务器时间每5分钟和互联网时间做一次同步。

    安装时间服务软件:yum

    install ntpdate -y

    更新互联网时间 /usr/sbin/ntpdate

    ntp1.aliyun.com

    6、生产环境下的定时Cron书写要领

    要领4:/dev/null 黑洞设备

    MH370>/dev/null

    &>/dev/null等价>/dev/null 2>&1

    要领1:为定时任务规则加必要的注释

    要领2:所有的定时任务尽量都以脚本的形式执行

    要领3:在执行的Shell脚本前加上/bin/sh

    要领4:定时任务中命令或脚本的结尾加>/dev/null 2>&1

    要领5:在指定用户下执行相关定时任务

    要领6:生产任务计划程序中不要随意打印输出信息,有输出的想法去掉。

    要领7:定时任务执行的脚本要存放到规范路径下

    要领8:配置定时任务要规范操作过程,减少出错

    要领9:定时任务脚本中程序命令及路径尽量用全路径

    要领10:时间变量%号要用反斜线转义(只有定时任务里是命令时需要)

    要领11:若脚本中调用了系统环境变量,要重新定义

    要领12:出错或无法执行,就检查/var/log/cron日志

    7、运维规范:

    脚本位置:/server/scripts

    软件位置:/server/tools

    编译位置:/application/软件名字-版本,然后要软链接。

    相关文章

      网友评论

          本文标题:课堂笔记day13~17

          本文链接:https://www.haomeiwen.com/subject/ibvsvqtx.html