首页 > 代码库 > 总结第一天 礼拜五

总结第一天 礼拜五

export ,sed,文件编辑器,grep,bash入门

pattern  模式

print    打印

append 追加

 所有独立服务程序的启动脚本都放在/etc/init.d/ 目录里

/etc/rc.d/rc0.d/
    ...
 /etc/rc.d/rc6.d/        这六个目录对应6个运行级别,放各个级别要运行哪些服务
        
    S                       S开头代表开机自动启动
    K                       K开头代表开机不自动启动
    数字                    代表顺序

控制开机是否启动服务

        手工修改/etc/rc.d/rc5.d/里的脚本名称,把S改成K就不会开机启动
        
        ntsysv                                  文本图形服务管理
            
            --level 35                          代表控制运行级别3和5的服务
  用方向键选择用空格键选中是否开机启动,完成tab到ok即可

        chkconfig                               

            --list                              列出服务在各个运行级别是否启动
                
                chkconfig --list | grep nfs     查看nfs服务状态

            on                                  开启服务

                chkconfig --level 35 nfs on     选择运行级别3和5 nfs服务开机自动启动

            off                                 关闭服务

                chkconfig --level 35 nfs off    选择运行级别3和5 nfs服务开机自动不启动

            --add                               添加服务
                
                chkconfig --add nfs             把nfs服务添加到chkconfig管理

            --del                               删除服务
                
                chkconfig --del nfs             把nfs服务chkconfig管理删除
            
            要成功添加一个服务,需要做的:
                
                把服务的脚本放到/etc/rc.d/init.d

                服务的启动脚本必须有两行的注释内容
                    
                    #chkconfig: - 85 15
                        -   代表所有级别默认不自动启动,如果是35代表运行级别3和5自动
                        85  代表如果服务开机启动,那么启动的顺序就是85
                        15  代表关机的时候,服务关闭的顺序

                    #description: nfs       服务的描述,可以随便写

                给予脚本运行权限
                    
                    chmod 755 /etc/rc.d/init.d/nfs

                    不给权限重启服务会出现: 未被识别的服务

--------------------------------------------------------------------------------

    服务介绍
        
        acpid                   高级电源管理
        autofs                  自动挂载移动设备
        kudzu                   检查硬件改动
        crond                   计划任务,必开
        netfs                   nfs依赖服务
        portmap                 nfs依赖服务
        rpcgssd                 nfs依赖服务
        rpcidmapd               nfs依赖服务    
        gpm                     鼠标支持
        haldaemon               u-dev相关,必须打开
        iptables                软件防火墙,建议打开
        messagebus              进程间通讯
        network                 网络服务
        syslogd                 日志

  

 

时间任务
    
    常用的有三个:at、crontab、anacron
    
    对应的服务: atd、crond、anacron

 

 

 at
        
        如果设定的时间点过了,那么任务就失效,不会再执行,任务只是一次性,每次都要自动去建立

        /etc/init.d/atd start           启动atd服务

        at 10:32 011311                 定义在2011年1月13日的上午10点32分执行
        at> echo "hello" > /dev/pts/2   
        at>                             按ctrl+d结束

        at -l                           查看还没有运行的at任务,相当于atq


        at -c 5                         查看第五个at任务内容

        at -d 5                         删除每五个at任务,相当于atrm

        at -f test.sh 10:35 011311      时间一到运行脚本

        at -f test.sh now +1 minutes    以当前时间点往后推移1分钟执行test.sh脚本

        at -f test.sh now +1 hours      以当前时间点往后推移1小时执行test.sh脚本

        at -f test.sh now +1 days       以当前时间点往后推移1天执行test.sh脚本

        at -f test.sh now +1 weeks      以当前时间点往后推移1星期执行test.sh脚本
        
        at -f test.sh now +1 months     以当前时间点往后推移1月执行test.sh脚本
        
        at -f test.sh now +1 years      以当前时间点往后推移1年执行test.sh脚本

        /etc/at.deny                    里面记录拒绝执行at服务的普通用户名,一行写一个,如果at.allow不存在的话才生效

        /etc/at.allow                   里面记录允许执行at服务的普通用户名,一行写一个,此文件存在就不考虑at.deny文件


--------------------------------------------------------------------------------

    crontab

        周期性的时间计划任务,时间过了也不执行,到下一个周期再执行

        /etc/init.d/crond start         开启crond服务

        vim /etc/crontab                crontab配置文件
            
            01 * * * * root run-parts /etc/cron.hourly      
            02 4 * * * root run-parts /etc/cron.daily
            22 4 * * 0 root run-parts /etc/cron.weekly
            42 4 1 * * root run-parts /etc/cron.monthly

            第一字段:分钟,取值范围0到59
            第二字段:小时,取值范围0到24
            第三字段:日,取值范围具体看月份
            第四字段:月,取值范围1到12
            第五字段:星期,取值范围0到7, 0和7都代表星期天
            第六字段:执行任务的身份
            第七字段:要执行的命令,多条命令用分号隔开,用括号括起来;
                     run-parts定义后面是一个目录,后面必须写目录路径,代表运行此目录里的所有脚本
            
            时间格式
                
                *   代表每分钟,每小时,每天,每月,每周
                ,   逗号代表分隔时间
                -   代表时间段
                /n  代表每隔n个单位

            例:
                每个小时的前30分钟执行任务
                    
                    1-30    *   *   *   *

                每个小时的第29,58分钟执行

                    29,58   *   *   *   *

                每隔2分钟执行

                    */2     *   *   *   *

                每个月的15号每三个小时,每两分钟,执行任务
                    
                    */2     */3     15  *   *

                每个月的15号每三个小时,每两分钟,执行任务或者星期七每三个小时,每两分钟执行任务
                    
                    */2     */3     15  *   7

                练习:
                    
                    每天的1,3,7,8,13,21点的05分执行
                    每月的5号到20号的4点到13点的15分执行
                    每个星期三的每两小时
                    每年的5到8月的星期三和星期天的4点01分执行
            
            例:
                vim /etc/crontab
                    
                    * * * * * root echo ‘hello‘ > /dev/pts/2

                保存退出,不需要重启服务,保证服务是启动状态,每分钟我们第二个终端就会收到hello

        
        crontab -e                      设定自己的时间任务
            
            * 21 * * * init 0       每天21点关机

        
        crontab -l                      查看自己的时间任务

        crontab -l -u root              查看root用户的时间任务

        crontab -e -u root              编辑root用户的时间任务

        crontab -r                      删除当前用户所有时间任务

        crontab -ir                      删除前要求确认

    
        /etc/cron.allow                 允许使用crond的普通用户名,有此文件不用考虑cron.deny

        /etc/cron.deny                  拒绝使用crond的普通用户名


--------------------------------------------------------------------------------
    
    anacron
        
        与crond服务配合使用,保证crond服务在一些特殊的情况而没有运行的任务推后执行

        /etc/init.d/anacron start       开启服务

        一般开启此服务就行了,保证crond服务没有按时运行的任务去执行



===============================================================================

四、nfs服务器搭建与autofs使用
    
    涉及的软件包                    nfs-utils

    system-config-nfs               图形界面配置nfs服务器

    服务依赖的软件包                portmap
        
        /etc/init.d/portmap start      

        /etc/init.d/nfs start

    vim /etc/exports                服务配置文件
        
        /share/test     *(ro)       把/share/test目录共享给所有人,权限为只读
            
            第一列:代表要共享目录的路径
            第二列:*代表共享给所有人,可以改成某个IP或某个网段
            第三列:共享的参数,共享的权限等
                
                ro                  只读
                rw                  可读可写
                sync                同步
                async               异步
                root_squash         把root用户权限降级,默认把root映射成nfsnobody的普通用户
                no_root_squash      不降root用户的权限


    showmount -e 2.2.2.192          查看2.2.2.192服务共享的目录

    mount -t nfs 2.2.2.192:/share/test /mnt     挂载到本地访问

    /etc/init.d/nfs reload          如果正在连接中的用户不会断开,再连接上来用新配置

    /etc/init.d/nfs restart         如果有正在连接的用户会断开


    开机自动挂载
        
        方法一、修改/etc/fstab
            
            2.2.2.192:/share  /mnt nfs defaults 0 0

        方法二、写到/etc/rc.d/rc.local
            
            mount -t nfs 2.2.2.192:/share /mnt

        方法三、写到环境变量文件(/etc/profile, ~/.bash_profile)

        方法四、使用autofs自动挂载,以上三种可以实现,但是不推荐,如果网络不正常会影响正常系统启动(了解)
            
            /etc/init.d/autofs start        启动autofs服务

            vim /etc/auto.master            主配置文件

                /nfs    /etc/auto.nfs --timeout=30      表示/nfs目录的自动挂载情况是由/etc/auto.nfs这个文件来配置的,30秒后自动umount

            mkdir /nfs                      因为/nfs目录不存在,所以创建

            vim /etc/sysconfig/autofs         默认autofs设置
                
                TIMEOUT=300                 默认超时时间

            vim /etc/auto.nfs
                
                share    -   2.2.2.192:/share       自动把2.2.2.192共享的/share目录挂载到/nfs/share下

                share    -rw,no_root_squash  2.2.2.192:/share    可以设置挂载选项

                iso      -   2.2.2.192:/iso -


            /etc/init.d/autofs restart      重启服务
            
            ls /nfs                         没有任何反应

            cd /nfs/share                   直接进入挂载的目录
 at
        
        如果设定的时间点过了,那么任务就失效,不会再执行,任务只是一次性,每次都要自动去建立

        /etc/init.d/atd start           启动atd服务

        at 10:32 011311                 定义在2011年1月13日的上午10点32分执行
        at> echo "hello" > /dev/pts/2   
        at>                             按ctrl+d结束

        at -l                           查看还没有运行的at任务,相当于atq


        at -c 5                         查看第五个at任务内容

        at -d 5                         删除每五个at任务,相当于atrm

        at -f test.sh 10:35 011311      时间一到运行脚本

        at -f test.sh now +1 minutes    以当前时间点往后推移1分钟执行test.sh脚本

        at -f test.sh now +1 hours      以当前时间点往后推移1小时执行test.sh脚本

        at -f test.sh now +1 days       以当前时间点往后推移1天执行test.sh脚本

        at -f test.sh now +1 weeks      以当前时间点往后推移1星期执行test.sh脚本
        
        at -f test.sh now +1 months     以当前时间点往后推移1月执行test.sh脚本
        
        at -f test.sh now +1 years      以当前时间点往后推移1年执行test.sh脚本

        /etc/at.deny                    里面记录拒绝执行at服务的普通用户名,一行写一个,如果at.allow不存在的话才生效

        /etc/at.allow                   里面记录允许执行at服务的普通用户名,一行写一个,此文件存在就不考虑at.deny文件


--------------------------------------------------------------------------------

    crontab

        周期性的时间计划任务,时间过了也不执行,到下一个周期再执行

        /etc/init.d/crond start         开启crond服务

        vim /etc/crontab                crontab配置文件
            
            01 * * * * root run-parts /etc/cron.hourly      
            02 4 * * * root run-parts /etc/cron.daily
            22 4 * * 0 root run-parts /etc/cron.weekly
            42 4 1 * * root run-parts /etc/cron.monthly

            第一字段:分钟,取值范围0到59
            第二字段:小时,取值范围0到24
            第三字段:日,取值范围具体看月份
            第四字段:月,取值范围1到12
            第五字段:星期,取值范围0到7, 0和7都代表星期天
            第六字段:执行任务的身份
            第七字段:要执行的命令,多条命令用分号隔开,用括号括起来;
                     run-parts定义后面是一个目录,后面必须写目录路径,代表运行此目录里的所有脚本
            
            时间格式
                
                *   代表每分钟,每小时,每天,每月,每周
                ,   逗号代表分隔时间
                -   代表时间段
                /n  代表每隔n个单位

            例:
                每个小时的前30分钟执行任务
                    
                    1-30    *   *   *   *

                每个小时的第29,58分钟执行

                    29,58   *   *   *   *

                每隔2分钟执行

                    */2     *   *   *   *

                每个月的15号每三个小时,每两分钟,执行任务
                    
                    */2     */3     15  *   *

                每个月的15号每三个小时,每两分钟,执行任务或者星期七每三个小时,每两分钟执行任务
                    
                    */2     */3     15  *   7

                练习:
                    
                    每天的1,3,7,8,13,21点的05分执行
                    每月的5号到20号的4点到13点的15分执行
                    每个星期三的每两小时
                    每年的5到8月的星期三和星期天的4点01分执行
            
            例:
                vim /etc/crontab
                    
                    * * * * * root echo ‘hello‘ > /dev/pts/2

                保存退出,不需要重启服务,保证服务是启动状态,每分钟我们第二个终端就会收到hello

        
        crontab -e                      设定自己的时间任务
            
            * 21 * * * init 0       每天21点关机

        
        crontab -l                      查看自己的时间任务

        crontab -l -u root              查看root用户的时间任务

        crontab -e -u root              编辑root用户的时间任务

        crontab -r                      删除当前用户所有时间任务

        crontab -ir                      删除前要求确认

    
        /etc/cron.allow                 允许使用crond的普通用户名,有此文件不用考虑cron.deny

        /etc/cron.deny                  拒绝使用crond的普通用户名


--------------------------------------------------------------------------------
    
    anacron
        
        与crond服务配合使用,保证crond服务在一些特殊的情况而没有运行的任务推后执行

        /etc/init.d/anacron start       开启服务

        一般开启此服务就行了,保证crond服务没有按时运行的任务去执行



===============================================================================

四、nfs服务器搭建与autofs使用
    
    涉及的软件包                    nfs-utils

    system-config-nfs               图形界面配置nfs服务器

    服务依赖的软件包                portmap
        
        /etc/init.d/portmap start      

        /etc/init.d/nfs start

    vim /etc/exports                服务配置文件
        
        /share/test     *(ro)       把/share/test目录共享给所有人,权限为只读
            
            第一列:代表要共享目录的路径
            第二列:*代表共享给所有人,可以改成某个IP或某个网段
            第三列:共享的参数,共享的权限等
                
                ro                  只读
                rw                  可读可写
                sync                同步
                async               异步
                root_squash         把root用户权限降级,默认把root映射成nfsnobody的普通用户
                no_root_squash      不降root用户的权限


    showmount -e 2.2.2.192          查看2.2.2.192服务共享的目录

    mount -t nfs 2.2.2.192:/share/test /mnt     挂载到本地访问

    /etc/init.d/nfs reload          如果正在连接中的用户不会断开,再连接上来用新配置

    /etc/init.d/nfs restart         如果有正在连接的用户会断开


    开机自动挂载
        
        方法一、修改/etc/fstab
            
            2.2.2.192:/share  /mnt nfs defaults 0 0

        方法二、写到/etc/rc.d/rc.local
            
            mount -t nfs 2.2.2.192:/share /mnt

        方法三、写到环境变量文件(/etc/profile, ~/.bash_profile)

        方法四、使用autofs自动挂载,以上三种可以实现,但是不推荐,如果网络不正常会影响正常系统启动(了解)
            
            /etc/init.d/autofs start        启动autofs服务

            vim /etc/auto.master            主配置文件

                /nfs    /etc/auto.nfs --timeout=30      表示/nfs目录的自动挂载情况是由/etc/auto.nfs这个文件来配置的,30秒后自动umount

            mkdir /nfs                      因为/nfs目录不存在,所以创建

            vim /etc/sysconfig/autofs         默认autofs设置
                
                TIMEOUT=300                 默认超时时间

            vim /etc/auto.nfs
                
                share    -   2.2.2.192:/share       自动把2.2.2.192共享的/share目录挂载到/nfs/share下

                share    -rw,no_root_squash  2.2.2.192:/share    可以设置挂载选项

                iso      -   2.2.2.192:/iso -


            /etc/init.d/autofs restart      重启服务
            
            ls /nfs                         没有任何反应

            cd /nfs/share                   直接进入挂载的目录


 

 

超级守护程序管理许多服务的守护程序,用它管理可以提高服务的安全性

    /etc/xinetd.conf                        配置文件
        
        includedir /etc/xinetd.d             更多的设置在/etc/xinetd.d/目录里


    相关配置文件
    /etc/xinetd.d/tftp                          管理的服务配置文件
        
        service tftp                        管理的服务名称
            
            disable = yes                   设置服务是否关闭,yes为关闭,no为启动服务
            socket_type = dgram             设置联机机制,TCP用stream,UDP用dgram
            protocol = udp                  设置联机状态使用的协议
            wait = yes                      设置服务是否支持多线程,no为支持,可以同时处理用户的连接
            user = root                     设置服务运行的身份,也可以支持UID
            group = 502                     设置服务运行组身份,值为GID
            instances = 30                  设置服务同时联机数最多为30台
            nice = -15                      设置服务运行的优先级,取值范围-19到19,数据越小,运行级别越高
            server = /usr/sbin/in.tftpd     设置服务启动程序
            server_args = -s /tftpboot -c   设置服务启动程序的参数, -c代表可以创建文件
            log_on_success += PID           设置成功登录服务记录的信息,+代表之前加入当前设置的参数,-+代表在原有基础舍弃设置的参数
                    PID                     记录PID
                    HOST                    记录IP地址
                    USERID                  记录登录用户
                    EXIT                    记录离开信息
                    DURATION                记录登录时间
            log_on_failure = HOST           设置登录失败,记录哪些信息
                    HOST                    记录IP地址
                    USERID                  记录用户名
                    ATTEMPT                 记录失败原因
                    RECORD                  记录远程主机信息
            port = 65                       设置服务的端口
            redirect = 2.2.2.192 65         设置转发到2.2.2.192,转发到另一服务器
            bind = 2.2.2.192                绑定IP,在有双网卡时绑定哪网卡的IP通信
            only_from = 2.2.2.191           限制只能2.2.2.191能访问此服务,也可以设置网段
            no_access = 2.2.2.{32,56}       限制2.2.2.32和2.2.2.56不许登录此服务
            access_times = 1:00-9:00 20:00-23:00    每天在这两个时段此服务才开放
            umask = 022                     创建文件默认权限的掩码
            cpu = 20 30                     同一秒内最大联机数为20,超过20该服务会暂时停止30秒


        
    /etc/init.d/xinetd restart              重启超级守护程序,这样不需要独立重启管理的服务

 

 

 

变量 : 以一组文字或符号来替换一些比较复杂或者容易变动的数据
    
    变量的用途
        
        简单的用途就是为了方便搜索
        常用于编程里,对经常使用的值使用变量,方便引用

    变量的分类
        
        自定义变量                  不影响子进程

        环境变量                    影响子进程

    自定义变量转环境变量
        
        export  自定义变量名        

        A=100
        export A  转为环境变量

    
    执行脚本的方法:
         chmod +x 1hello.sh  给可执行权限

    四种执行方法
         ./1hello.sh        fork一个子进程来执行这个脚本
         bash 1hello.sh     同上
         . 1hello.sh        在父进程的环境中执行脚本
         source 1hello.sh   同上



    变量的定义
        
        定义规则
            
            区分大小写,同名称但大小写不同的变量名是不同的变量
            定义变量时两边不能有空格,有空格的字符串要用引号引起来
            单引号和双引号的区别,单引号不会转义所有特殊字符
            变量名可以是数字或字符,但不能以数字开头

        直接赋值定义变量
            
            var=200                 定义var变量,变量值为200
        
        使用declare/typeset定义变量
            
            declare -a arr          定义arr为数组
            declare -i  sum=350+20  定义sum为整数数字
            declare -x var          定义var为环境变量
            declare -r var          定义var为只读变量,不能unset

    释放变量
        
        unset var                   释放var变量

    
    变量赋值可以有多个
        
        var=a                       定义var变量,值为a
        var="$var"c                 给var变量的值后面加上c
        var=${var}d                 给var变量的值后面继续加上d

    特殊的变量定义方式
        
        var=`ls -l`                 把ls -l的标准输出结果赋给var变量
        var=$(ls -l)                和上面效果一样


    提示符变量设置
        
        man bash                    查找PS1关健词

        \d                          代表日期,格式为星期 月 日
        \H                          完整的主机名称
        \h                          仅取主机名称的第一个名字
        \t                          显示时间,为24小时格式,如HH:MM:SS
        \T                          显示时间,12小时格式
        \A                          显示时间,24小时格式,HH:MM
        \u                          当前登录用户名
        \v                          bash的版本信息
        \w                          工作目录的绝对路径
        \W                          显示当前工作目录名
        \#                          命令计数器

--------------------------------------------------------------------------------

    交互式赋值
        
        read var                    等待用户给var变量赋值

        read -p "input your name:" var  提示信息等待用户给var变量赋值

        read -p "input your name:" -t 10 var  提示信息等待用户给var变量赋值,10秒不输入的话直接跳过

        read -s -p "input your password:" passwd    提示信息等待用户给passwd变量赋值并且隐藏显示

        read -n 6 -p "input your name: " name   提示用户输入用户名给name,并且只接收6个字符


--------------------------------------------------------------------------------

    访问变量
        
        $var                        引用var变量的值

        ${var}                      引用var变量的值

        ${var%a*}                   引用var变量的值并且截取a左边的字符串显示,如果字符串有多个a,则按从左向右最后一个a截取

        ${var%%a*}                  引用var变量的值并且截取a左边的字符串显示,如果字符串有多个a,则按从左向右第一个a截取

        ${var#*a}                   引用var变量的值并且截取a右边的字符串显示,如果字符串有多个a,则按从左向右第一个a截取

        ${var##*a}                  引用var变量的值并且截取a右边的字符串显示,如果字符串有多个a,则按从左向右最后一个a截取

        ${var:3}                    引用var变量的值并且从第3个字符开始截取

        ${var:3:6}                  引用var变量的值并且从第3个字符开始截取,截取6个字符显示

        ${#var}                     返回var变量值的长度
    
        ${var/a/b}                  替换变量值的字符串,这里是把var变量值里的a换成b,如果有多个a也只能换一次

        ${var//a/b}                 替换变量值的字符串,这里把var变量值里的a全换成b


    
--------------------------------------------------------------------------------

    特殊变量
        
        echo $$                     返回程序的PID

        echo $0                     脚本名

        echo $1                     指第一个参数
        echo $2                     指第二个参数
        echo $3                     指第三个参数
        ....
        echo $n                     指第n个参数

        echo $*                     代表所有参数
        echo $@                     代表所有参数
        echo $#                     代表参数的个数

        echo $?                     查看上一条命令执行结果,执行成功返回0,执行失败返回非0


--------------------------------------------------------------------------------
    双向重定向
        
        tee                         把结果传给文件同时又传给屏幕
less | tee  tee.txt     屏幕会显示结果,tee.txt文件也会产生

        cat > cat.txt               编辑cat.txt文件
            输入内容
            ctrl+d      结束

        cat > cat.txt << EOF        编辑cat.txt以EOF为结束符
        >hello
        >world
        >EOF            结束符,不会写进cat.txt文件            


killall    

    使用进程名杀死进程
    [root@deng home]# killall -9 a.out
服务管理

    通用的方法
    [root@deng home]# /etc/init.d/network
    用法:/etc/init.d/network {start|stop|status|restart|reload|force-reload}

    [root@deng home]# /etc/init.d/network start     启动服务
    [root@deng home]# /etc/init.d/network stop      停止服务
    [root@deng home]# /etc/init.d/network status    查看服务的状态
    [root@deng home]# /etc/init.d/network restart   重启服务
    [root@deng home]# /etc/init.d/network reload    重新加载
    [root@deng home]# /etc/init.d/network force-reload 强制重新加载

    service redhat centos fedora通用
    [root@deng home]# server  network start     启动服务
    [root@deng home]# server  network stop      停止服务
    [root@deng home]# server  network status    查看服务的状态
    [root@deng home]# server  network restart   重启服务
    [root@deng home]# server  network reload    重新加载
    [root@deng home]# server  network force-reload 强制重新加载

ntsysv

    图形界面画管理服务
    [root@deng home]# ntsysv  


 chkconfig

    用法:   chkconfig [--list] [--type <type>] [name]
    chkconfig --add <name>
    chkconfig --del <name>
    chkconfig --override <name>
    chkconfig [--level <levels>] [--type <type>] <name> <on|off|reset|resetpriorities>


    查看服务的启动情况
    [root@deng /]# chkconfig  --list
    NetworkManager  0:关闭  1:关闭  2:关闭  3:关闭  4:关闭  5:关闭  6:关闭
    abrt-ccpp       0:关闭  1:关闭  2:关闭  3:启用  4:关闭  5:启用  6:关闭
    abrtd           0:关闭  1:关闭  2:关闭  3:启用  4:关闭  5:启用  6:关闭
    acpid           0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭
    atd             0:关闭  1:关闭  2:关闭  3:启用  4:启用  5:启用  6:关闭


    查询指定的服务的启动情况
    [root@deng /]# chkconfig  --list sshd
    sshd            0:关闭  1:关闭  2:关闭  3:关闭  4:关闭  5:关闭  6:关闭

    
    从服务管理中移除指定的服务
    [root@deng /]# chkconfig --del sshd

    将指定的服务添加到chkconfig管理中
    [root@deng /]# chkconfig --add sshd

    
    [root@deng /]# chkconfig  --list sshd
    sshd            0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭
    [root@deng /]# chkconfig --level 2345 sshd on
    [root@deng /]# chkconfig  --list sshd
    sshd            0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭
    [root@deng /]# chkconfig --level 2345 sshd off
    [root@deng /]# chkconfig  --list sshd
    sshd            0:关闭  1:关闭  2:关闭  3:关闭  4:关闭  5:关闭  6:关闭
    [root@deng /]#


    --level使用默认值 2345
    [root@deng rc5.d]# chkconfig nfs off
    [root@deng rc5.d]# chkconfig --list nfs
    nfs             0:关闭  1:关闭  2:关闭  3:关闭  4:关闭  5:关闭  6:关闭
    [root@deng rc5.d]# chkconfig nfs on
    [root@deng rc5.d]# chkconfig --list nfs
    nfs             0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭
    [root@deng rc5.d]#

 at

    启动对应服务
    [root@deng rc5.d]# /etc/init.d/atd restart
    停止 atd:                                                 [确定]
    正在启动 atd:                                             [确定]

    在一分钟之后执行指定的脚本
    [root@deng home]# at -f a.sh now +1minutes




 crond

    [root@deng rc5.d]# /etc/init.d/crond restart
    停止 crond:                                               [确定]
    正在启动 crond:                                           [确定]
    [root@deng rc5.d]#


脚本

#!/bin/bash

#  #!一起使用指定解析器的路径 /bin/bash
# 表示注释

#输出字符串到指定的终端
echo "hello uplooking"

#exit 0f

 

 

#!/bin/bash

#变量赋值的时候  赋值号两边不能有空格
var=88

#变量的引用
#第一种: $var
#第二种: ${var}

echo "var = $var"
echo "var = ${var}"

#如果变量没有赋值 那么就为空
echo "var1 = $var1"

exit 0

 

#!/bin/bash

#shell中的变量不需要先定义
#shell中的变量都是弱类型
#shell中的变量期间都可以被重新赋值

var=112233
echo "var = $var"

var="hello uplooking"
echo "var = $var"

var=3.1415926
echo "var = $var"

var=‘M‘
echo "var = $var"

exit 0

 

#!/bin/bash

var=33
echo "var = $var"

#会将varhello当作一个变量处理
#var=$varhello
#如果是追加赋值 后面的字符串必须使用双引号或者单引号
#var=$var"hello"
#var=$var‘hello‘
var=${var}hello
echo "var = $var"

exit 0

 

 

#!/bin/bash

a=3
b=4

echo "a + b = $((a + b))"

exit 0

 

#!/bin/bash

var=88
echo "var = $var"

#取消变量赋值
unset var
echo "var = $var"

exit 0

 

#!/bin/bash


#$() 取命令的输出
#``  取命令的输出   

#ls的输出的结果  赋值给var
var=$(ls)
echo "var = $var"

#换行
echo  "========================"
#取命令的输出
var=`ls`
echo "var = $var"

exit 0

 

#!/bin/bash

#从标准输入读取一行 赋值给var
read var
echo "var = $var"

#-p 提示信息
read -p "please input a number:  " n
echo "n = $n"

echo "================================"
read -p "please input username and passwd: " username passwd
echo "username = $username  passwd = $passwd"

exit 0

 

 

 

进程的概念

程序存放在硬盘上是静态,把它复制到内存上并在cpu上运行就叫进程。

一个运行的系统上有很多进程并且为每个进程分配了进程号pid

一号进程是所有进程的祖先.(fork, clone)

        调用fork()和clone()函数的是父进程,被创建的进程是子进程

        每个进程都是由父进程启动的,并且可以启动另一个进程成为自己的子进程

    进程与程序的区别

        进程就是一个正在运行的程序的实例
    
        程序是一些保存在磁盘上的二进制代码和数据的集合

    查看进程
        
        pstree                          以树形的结构显示进程
            
        pstree -p                       显示进程号

        ps                              查看进程

            -a                          显示控制台的进程
            -u                          显示带用户名的控制台进程
            -l                          显示详细信息
            -x                          显示所有进程
            -p 3104                     只显示PID为3104的进程
            -C bash                     显示所有bash的进程
            -U root                     显示属于root的进程

            ps -ef / ps -aux            显示所有进程
            ps -ef | grep "bash"        只查看包含有bash关键字的进程信息

        ps -ef
            UID            运行进程的用户ID号
            PID            进程的ID
            PPID        进程的父进程ID
            C            CPU调度情况  
            STIME         进程启动的时间
            TTY         终端
            TIME        进程使用的CPU的时间
            CMD            启动进程的命令
    
        ps aux
            USER           运行进程的用户
            PID            进程的ID
            %CPU        进程CPU使用率
            %MEM        进程的内存使用率
            VSZ           进程占用虚拟内存的大小
            RSS            进程占用物理内存的大小
            TTY         终端
            STAT        进程的状态
            START          进程启动的时间
            TIME        进程使用CPU的时间
            COMMAND        启动进程的命令
    

                    
        pgrep                           过滤进程查看
            
            -l                          列出进程PID
            -u root                     列出root用户所有的进程

            -l vim                      匹配vim的所有进程和PID

        pgrep -l sshd

        jobs                            列出后台运行的程序

        top                             实时显示进程信息

            h or ?                      帮助
            q                           退出
            s                           设定两次更新之间的时候,以秒为单位
            space(空格)                 更新显示
            M                           根据内存大小对进程排序
            P                           根据CPU占用对进程排序
            u                           显示特定用户的进程
            k                           杀死进程
            r                           更改进程优先级

            top -b -n 1 > top.txt       保存为静态文件
            
            top头部显示的信息
                
                users                   几个用户正在登录

                up                      前面是当前时间,后面为运行了多久

                load average: 0.15,0.12, 0.04   这三个数字代表1分钟,5分钟,15分钟内CPU平均负载数,当负载值长期大于5以上的话就要注意可能是CPU负载过大

            这些信息也可以使用uptime得到

            
    进程状态
        
        S                               sleep,睡眠状态,有可能会被其它程序被唤醒
        R                               正在运行状态
        D                               不可中断的睡眠,一般要等待硬件的唤醒
        Z                               僵尸进程, 子进程已死, 父进程来不及处理/没有处理
        T                               进程暂停状态

    进程优先级
        
        nice -19 ./test.sh              设置程序运行的优先级,优先级越低,数值越高,中间数字取值范围-20到19

        renice -10 7347                 和nice一样,只是针对已经运行的程序

            
    进程控制
        
        kill                            信号发送工具
            
            kill -15 3214               友好的终止程序
            kill -SIGTERM               同上
            kill -9 3214                发信号给内核,直接干掉进程,进程本身收不到这个信号
            kill -SIGKILL 3214          同上
            kill -l                     打印信号名字列表
        
        killall                         和kill同功能,不同的是killall可以针对进程名

 

总结第一天 礼拜五