学习Linux centos7的一些笔记

 

 

man ping 详细文档
ping -h 帮助文档
二、常用系统工作命令
    1.echo命令
        格式“echo [字符串|$变量]”
    2.date命令
        按照默认格式查看:date
        按照“年-月-日 时:分:秒”格式查看:date "+%Y-%m-%d %H:%M:%S"
        设置系统时间:date -s "20170901 8:30:00"
    3.reboot命令
        重启
    4.poweroff命令
        关闭系统
    5.wget命令
    6.ps命令
        查看系统中进程状态,格式ps [参数]
        查用参数及作用:
         -a 显示所有进程
         -u 用户及其他详细信息
         -x 显示没用控制终端的进程
    7.top命令
        动态监视进程活动与负载信息
    8.pidof命令
        查询某个指定服务进程的PID值,格式:pidof [参数][服务名称]
        pidof sshd
    9.kill命令
        用于终止某个指定名称的服务所对应的全部进程,格式:kill [参数][进程PID]
        kill 1000
    10.killall命令
        终止某个指定名称的服务所对应的全部进程
三、系统状态检测命令
    1.ifconfig命令
        用于获取网卡配置与网络状态等信息 格式:ifconfig [网络设备][参数]
    2.uname命令
        用于查看系统内核与系统版本等信息,格式:uname [-a]
    3.uptime
        用于查看系统的负载信息,格式:uptime
    4.free命令
        显示当前系统中内存的使用量信息,格式:free [-h]
    5.who命令
        查看用户终端信息,格式:who [参数]
    6.last命令
        查看所有系统的登陆记录,格式:last [参数]
    7.history命令
        用于显示历史执行过的命令,格式:history [-c]
    8.sosreport命令
        收集系统配置及架构信息并输出文档,格式为sosreport
三、工作目录切换命令
    1.pwd命令
        显示当前所处工作目录,格式:pwd[选项]
    2.cd命令
        切换工作路径,格式:cd[目录名称]
        cd home
        cd - 返回上一层
    3.ls命令
        显示目录中的文件信息 ls[选项][文件]
        -普通文件
        d目录文件
        c设备文件
        b块设备文件
        p管道文件
        l连接文件
        s socket文件
        rwx代表拥有读、写、执行权限
        -代表无对应权限
        ls -l  别名 ll
        ls -ld /etc
四、文本文件编辑命令
    1.cat命令
        查看纯文本文件,格式:cat [选项][文件]
        ll
        cat anaconda-ks.cfg [-n](显示行号)
    2.more命令
        查看纯文本文件,格式:more [选项][文件]
    3.head命令
        查看纯文本文件前n行,格式:head [选项][文件]
        head -n 20 initial-setup-ks.cfg
    4.tail
        查看纯文本文件末尾n行,格式:head [选项][文件]
        tail -n 20 initial-setup-ks.cfg
    5.tr命令
        transform用于替换文本文件中的字符,格式:tr[原始字符][目标字符]
        cat anaconda-ks.cfg|tr [a-z][A-Z]
    6.wc命令
        Word Count用于统计指定文本的行数、字数、字节数,格式:wc [参数][文本]
        参数
        -l 行数
        -w 词数
        -c 字节数
    7.stat命令
        status用于查看文件的具体存储信息和时间等信息,格式:status 文件名称
    8.cut命令
    9.diff命令
五、文件目录管理命令
    1.touch命令
        用于创建空白文件或设置文件的时间,格式:touch [选项][文件]
        参数
        -a 修改 读取时间(atime)
        -m 修改 修改时间(mtime)
        -d 同时修改atime和mtime
        touch hello
        ls -l anaconda-ks.cfg 
        echo "Visit the LinuxProbe.com to learn linux skills" >> 追加内容
        anaconda-ks.cfg
        ls -l anaconda-ks.cfg
        touch -d "2017-05-04 15:44" anaconda-ks.cfg
        ls -l anaconda-ks.cfg
    2.mkdir命令
        mkdir命令用于创建空白的目录,格式为“mkdir [选项] 目录”。
        -p参数 递归创建出具有嵌套叠层关系的文件目录。
        mkdir abc
        mkdir a/b/c
    3.cp命令
        cp命令用于复制文件或目录,格式为“cp [选项] 源文件 目标文件”。
        参数
        -p    保留原始文件的属性
        -d    若对象为“链接文件”,则保留该“链接文件”的属性
        -r    递归持续复制(用于目录)
        -i    若目标文件存在则询问是否覆盖
        -a    相当于-pdr(p、d、r为上述参数)
        cp a.txt b.txt
    4.mv命令
        用于剪切文件或将文件重命名,格式为“mv [选项] 源文件 [目标路径|目标文件名]”
        mv a.txt /root/abc/b.txt 移动文件的同时重命名
        ls -l /root/abc
    5.rm命令
        用于删除文件或目录,格式为“rm [选项] 文件”。
        rm b.txt
        ll
        rm -rf abc
        参数 -f 强制删除    -r 删除目录
    6.dd命令
        dd命令Disk Dump用于按照指定大小和个数的数据块来复制文件或转换文件,格式为“dd [参数]”。
        参数
        if    输入的文件名称
        of    输出的文件名称
        bs    设置每个“块”的大小
        count    设置要复制“块”的个数
        dd if=/dev/zero of=560_file count=1 bs=100M
        ll
    7.file命令
        用于查看文件的类型,格式为“file 文件名”。
        file anaconda-ks.cfg 
        file /dev/zero
        file /dev/sda
六、打包压缩与搜索命令
    1.tar命令
    tar命令用于对文件进行打包压缩或解压,格式为“tar [选项] [文件]”。
    参数
    -c    创建压缩文件
    -x    解开压缩文件
    -t    查看压缩包内有哪些文件
    -z    用Gzip压缩或解压
    -j    用bzip2压缩或解压
    -v    显示压缩或解压的过程
    -f    目标文件名
    -p    保留原始的权限与属性
    -P    使用绝对路径来压缩
    -C    指定解压到的目录
    2.grep命令
    grep命令用于在文本中执行关键词搜索,并显示匹配的结果,格式为“grep [选项] [文件]”。
    参数
    -b    将可执行文件(binary)当作文本文件(text)来搜索
    -c    仅显示找到的行数
    -i    忽略大小写
    -n    显示行号
    -v    反向选择—仅列出没有“关键词”的行
    3.find命令
    find命令用于按照指定条件来查找文件,格式为“find [查找路径] 寻找条件 操作”。
    参数
    -name    匹配名称
    -perm    匹配权限(mode为完全匹配,-mode为包含即可)
    -user     匹配所有者
    -group    匹配所有组
    -mtime -n +n    匹配修改内容的时间(-n指n天以内,+n指n天以前)
    -atime -n +n    匹配访问文件的时间(-n指n天以内,+n指n天以前)
    -ctime -n +n    匹配修改文件权限的时间(-n指n天以内,+n指n天以前)
    -nouser    匹配无所有者的文件
    -nogroup    匹配无所有组的文件
    -newer f1 !f2    匹配比文件f1新但比f2旧的文件
    --type b/d/c/p/l/f    匹配文件类型(后面的字母参数依次表示块设备、目录、字符设备、管道、链接文件、普通文件)
    -size    匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件)
    -prune    忽略某个目录
    -print    将匹配的文件输出到标准输出。
    -exec …… {}\;    后面可跟用于进一步处理搜索结果的命令(下文会有演示)


3.1  输入输出重定向
    输入重定向中用到的符号及其作用
    符号    作用
    命令 < 文件    将文件作为命令的标准输入
    命令 << 分界符    从标准输入中读入,直到遇见分界符才停止
    命令 < 文件1 > 文件2    将文件1作为命令的标准输入并将标准输出到文件2

    对于输出重定向来讲,用到的符号及其作用如表3-2所示。
    表3-2    输出重定向中用到的符号及其作用
    符号    作用
    命令 > 文件    将标准输出重定向到一个文件中(清空原有文件的数据)
    命令 2> 文件    将错误输出重定向到一个文件中(清空原有文件的数据)
    命令 >> 文件    将标准输出重定向到一个文件中(追加到原有内容的后面)
    命令 2>> 文件    将错误输出重定向到一个文件中(追加到原有内容的后面)
    命令 >> 文件 2>&1 
    或
    命令 &>> 文件    将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)
3.2  管道命令符
    执行格式为“命令A | 命令B”。管道命令符的作用也可以用一句话来概括“把前一个命令原本要输出到屏幕的标准正常数据当作是后一个命令的标准输入”。
3.3  命令行的通配符
    通配符就是通用的匹配信息的符号,比如星号(*)代表匹配零个或多个字符,问号(?)代表匹配单个字符,中括号内加上数字[0-9]代表匹配0~9之间的单个数字的字符,而中括号内加上字母[abc]则是代表匹配a、b、c三个字符中的任意一个字符。俗话讲“百闻不如一见,看书不如实验”,下面我们就来匹配所有在/dev目录中且以sda开头的文件:

    [root@linuxprobe ~]# ls -l /dev/sda*
    brw-rw----. 1 root disk 8, 0 May 4 15:55 /dev/sda
    brw-rw----. 1 root disk 8, 1 May 4 15:55 /dev/sda1
    brw-rw----. 1 root disk 8, 2 May 4 15:55 /dev/sda2

    如果只想查看文件名为sda开头,但是后面还紧跟其他某一个字符的文件的相关信息,该怎么操作呢?这时就需要用到问号来进行通配了。

    [root@linuxprobe ~]# ls -l /dev/sda?
    brw-rw----. 1 root disk 8, 1 May 4 15:55 /dev/sda1
    brw-rw----. 1 root disk 8, 2 May 4 15:55 /dev/sda2

    除了使用[0-9]来匹配0~9之间的单个数字,也可以用[135]这样的方式仅匹配这三个指定数字中的一个,若没有匹配到,则不会显示出来:

    [root@linuxprobe ~]# ls -l /dev/sda[0-9]
    brw-rw----. 1 root disk 8, 1 May 4 15:55 /dev/sda1
    brw-rw----. 1 root disk 8, 2 May 4 15:55 /dev/sda2
    [root@linuxprobe ~]# ls -l /dev/sda[135]
    brw-rw----. 1 root disk 8, 1 May 4 15:55 /dev/sda1
3.4  常用的转义字符
    4个最常用的转义字符如下所示。
    反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串。
    单引号(''):转义其中所有的变量为单纯的字符串。
    双引号(""):保留其中的变量属性,不进行转义处理。
    反引号(``):把其中的命令执行后返回结果。
3.5  重要的环境变量
    Linux系统中最重要的10个环境变量
    变量名称    作用
    HOME    用户的主目录(即家目录)
    SHELL    用户在使用的Shell解释器名称
    HISTSIZE    输出的历史命令记录条数
    HISTFILESIZE    保存的历史命令记录条数
    MAIL    邮件保存路径
    LANG    系统语言、语系名称
    RANDOM    生成一个随机数字
    PS1    Bash解释器的提示符
    PATH    定义解释器搜索用户执行命令的路径
    EDITOR    用户默认的文本编辑器

    
七、Vim编辑器
    输入模式<- a、o、i -(ESC)命令模式(ESC)- : -> 末行模式
    Vim中常用的命令
        命令    作用
        dd    删除(剪切)光标所在整行
        5dd    删除(剪切)从光标处开始的5行
        yy    复制光标所在整行
        5yy    复制从光标处开始的5行
        n    显示搜索命令定位到的下一个字符串
        N    显示搜索命令定位到的上一个字符串
        u    撤销上一步的操作
        p    将之前删除(dd)或复制(yy)过的数据粘贴到光标后面
    末行模式中可用的命令
        命令    作用
        :w    保存
        :q    退出
        :q!    强制退出(放弃对文档的修改内容)
        :wq!    强制保存退出
        :set nu    显示行号
        :set nonu    不显示行号
        :命令    执行该命令
        :整数    跳转到该行
        续表
        命令    作用
        :s/one/two    将当前光标所在行的第一个one替换成two
        :s/one/two/g    将当前光标所在行的所有one替换成two
        :%s/one/two/g    将全文中的所有one替换成two
        ?字符串    在文本中从下至上搜索该字符串
        /字符串    在文本中从上至下搜索该字符串
    配置主机名称
        第1步:使用Vim编辑器修改“/etc/hostname”主机名称文件。
        第2步:把原始主机名称删除后追加“a”。注意,使用Vim编辑器修改主机名称文件后,要在末行模式下执行:wq!命令才能保存并退出文档。
        第3步:保存并退出文档,然后使用hostname命令检查是否修改成功。
    配置网卡信息
        第1步:首先切换到/etc/sysconfig/network-scripts目录中(存放着网卡的配置文件)。
        第2步:使用Vim编辑器修改网卡文件ifcfg-eno16777736,逐项写入下面的配置参数并保存退出。由于每台设备的硬件及架构是不一样的,因此请读者使用ifconfig命令自行确认各自网卡的默认名称。
        Ø    设备类型:TYPE=Ethernet
        Ø    地址分配模式:BOOTPROTO=static
        Ø    网卡名称:NAME=eno16777736
        Ø    是否启动:ONBOOT=yes
        Ø    IP地址:IPADDR=192.168.10.10
        Ø    子网掩码:NETMASK=255.255.255.0
        Ø    网关地址:GATEWAY=192.168.10.1
        Ø    DNS地址:DNS1=192.168.10.1
        vim ifcfg-eno16777736
        第3步:重启网络服务并测试网络是否联通。
        systemctl restart network
4.2编写Shell脚本
    查看SHELL变量可以发现当前系统已经默认使用Bash作为命令行终端解释器了:echo $SHELL
    4.2.1编写简单的脚本
    vim example.sh
    #!/bin/bash 
    #this is an example
    pwd 
    ls -al
    运行
    (1)bash example.sh
    (2)ll
       chmod u+x example.sh
       ./example.sh
    4.2.2接收用户的参数
        vim example.sh
        echo "Shell name:$0"
        echo "total $# parameters:$*"  #$# 列出所有的参数个数  $* 列出所有的参数
        echo "first $1,5th $5"
        调用:bash ex.sh 1 2 3 4 5 6
    4.2.3判断用户的参数
        测试语句格式:[ 条件表达式 ]
        文件测试所用的参数
        运算符    作用
        -d    测试文件是否为目录类型
        -e    测试文件是否存在
        -f    判断是否为一般文件
        -r    测试当前用户是否有权限读取
        -w    测试当前用户是否有权限写入
        -x    测试当前用户是否有权限执行
    判断/etc/fstab是否为一个目录类型的文件,然后通过Shell解释器的内设$?变量显示上一条命令执行后的返回值。如果返回值为0,则目录存在;如果返回值为非零的值,则意味着目录不存在:
    [ -d /etc/fstab ]
    echo $?
    判断/etc/fstab是否为一般文件,如果返回值为0,则代表文件存在,且为一般文件:
    [ -f /etc/fstab ]
    echo $?
    逻辑“与”的运算符号是&&,它表示当前面的命令执行成功后才会执行它后面的命令
    [ -e /dev/cdrom ] && echo "Exist"
    逻辑“或”,它在Linux系统中的运算符号为||,表示当前面的命令执行失败后才会执行它后面的命令
    echo $USER
    root
    [ $USER = root ] || echo "user"
    su - linuxprobe 
    [ $USER = root ] || echo "user"
    逻辑语句是“非”,在Linux系统中的运算符号是一个叹号(!),它表示把条件测试中的判断结果取相反值
    exit
    [ ! $USER = root ] || echo "administrator"
        可用的整数比较运算符
        运算符    作用
        -eq    是否等于
        -ne    是否不等于
        -gt    是否大于
        -lt    是否小于
        -le    是否等于或小于
        -ge    是否大于或等于
    测试一下10是否大于10以及10是否等于10
    [root@linuxprobe ~]# [ 10 -gt 10 ]
    [root@linuxprobe ~]# echo $?
    1
    [root@linuxprobe ~]# [ 10 -eq 10 ]
    [root@linuxprobe ~]# echo $?
    free命令,它可以用来获取当前系统正在使用及可用的内存量信息
    接下来先使用free -m命令查看内存使用量情况(单位为MB),然后通过grep Mem:命令过滤出剩余内存量的行,再用awk '{print $4}'命令只保留第四列,最后用FreeMem=`语句`的方式把语句内执行的结果赋值给变量。
    [root@linuxprobe ~]# free -m
                total     used     free     shared     buffers     cached
    Mem:        1826      1244     582      9          1           413
    -/+ buffers/cache:    830 996
    Swap:       2047      0        2047
    [root@linuxprobe ~]# free -m | grep Mem:
    Mem:        1826      1244     582      9 
    [root@linuxprobe ~]# free -m | grep Mem: | awk '{print $4}'
    582
    [root@linuxprobe ~]# FreeMem=`free -m | grep Mem: | awk '{print $4}'`
    [root@linuxprobe ~]# echo $FreeMem 
    582
    使用整数运算符来判断内存可用量的值是否小于1024,若小于则会提示“Insufficient Memory”(内存不足)的字样:
    [ $FreeMem -lt 1024 ] && echo "Insufficient Memory"
    awk命令(Alfred Aho 、Peter Weinberger 和 Brian Kernighan这三个人创造的,awk由这个三个人的姓氏的首个字母组成)是一种编程语言,用于在linux/unix下对文本和数据进行处理。
    而且它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。
    语法格式:awk [参数] [文件]
    常用参数:
    -F    指定输入时用到的字段分隔符
    -v    自定义变量
    -f    从脚本中读取awk命令
    -m    对val值设置内在限制
    参考实例
    打印每一行的第二和第三个字段:
    [root@linuxcool ~]# awk '{ print $2,$3 }' file
    常见的字符串比较运算符
    运算符    作用
    =    比较字符串内容是否相同
    !=    比较字符串内容是否不同
    -z    判断字符串内容是否为空
    判断String变量是否为空值
    [ -z $String]
    echo $?    
    
    作业1、利用脚本完成下面操作:在当前目录下新建文本文件hello.txt,内容为"hello world",读取内容并显示到屏幕。
    vim hello.sh
    #!/bin/bash
    echo "hello world" > hello.txt
    cat hello.txt
    作业2、利用脚本将作业1中hello.txt文件中的所有小写字母替换为大写字母。
    vim hello.sh
    #!/bin/bash
    echo `cat hello.txt|tr [a-z][A-Z]` > hello.txt
    cat hello.txt
    作业3、利用vim编辑器修改网络配置文件,将Linux系统IP地址设置为自己使用电脑的同一网段地址,掩码为255.255.255.0,网关为电脑使用的网关地址,dns为114.114.114.114,启用网卡,并使用ping命令测试学校网址(www.hezeu.edu.cn)连通性。此作业需要将虚拟机网卡模式修改为桥接模式。
    cd /etc/sysconfig/network-scripts
    vim ifcfg-eno16777736
    
    Ø    设备类型:TYPE=Ethernet
    Ø    地址分配模式:BOOTPROTO=static
    Ø    网卡名称:NAME=eno16777736
    Ø    是否启动:ONBOOT=yes
    Ø    IP地址:IPADDR=192.168.0.116
    Ø    子网掩码:NETMASK=255.255.255.0
    Ø    网关地址:GATEWAY=192.168.0.1
    Ø    DNS地址:DNS1=114.114.114.114
    第3步:重启网络服务并测试网络是否联通。
    systemctl restart network
    ping www.hezeu.edu.cn

4.3流程控制语句
4.3.1  if 条件测试语句     
    if 条件语句的单分支结构由 if、then、fi 关键词组成
    使用单分支的 if 条件语句来判断/media/cdrom 目录是否存在,若存在就结束条件判 断和整个 Shell 脚本,反之则去创建这个目录: 
     vim mkcdrom.sh 
     #!/bin/bash 
     DIR="/media/cdrom" 
     if [ ! -e $DIR ] 
     then 
     mkdir -p $DIR fi 
    if 条件语句的双分支结构由 if、then、else、fi 关键词组成,它进行一次条件匹配判断, 如果与条件匹配,则去执行相应的预设命令;反之则去执行不匹配时的预设命令
     vim chkhost.sh 
     #!/bin/bash 
     ping -c 3 -i 0.2 -W 3 $1 &> /dev/null 
     if [ $? -eq 0 ] 
     then 
     echo "Host $1 is On-line." 
     else 
     echo "Host $1 is Off-line." 
     fi 
    if 条件语句的多分支结构由 if、then、else、elif、fi 关键词组成,它进行多次条件匹配判 断,这多次判断中的任何一项在匹配成功后都会执行相应的预设命令,相当于口语的“如 果……那么……如果……那么……”
    vim chkscore.sh
    #!/bin/bash 
    read -p "Enter your score(0-100) :" GRADE 
    if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; 
    then echo "$GRADE is Excellent" 
    elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; 
    then echo "$GRADE is Pass" 
    else echo "$GRADE is Fail"  
    fi 
    [root@linuxprobe ~]# bash chkscore.sh Enter your score(0-100) :88 88 is Excellent 
    [root@linuxprobe ~]# bash chkscore.sh  Enter your score(0-100) :80 80 is Pass 
4.3.4case语句    
    case 变量值 in 
    模式1)
        命令序列1
        ;;
    模式2)
        命令序列2
        ;;
    *)
        默认命令序列
    esac
     vim Checkkeys.sh 
     #!/bin/bash 
     read -p "请输入一个字符,并按 Enter 键确认:" KEY 
     case "$KEY" in [a-z]|[A-Z]) 
     echo "您输入的是 字母。" 
     ;; 
     [0-9]) 
     echo "您输入的是 数字。" 
     ;; 
     *) 
     echo "您输入的是 空格、功能键或其他控制字符。" 
     esac
4.3.2 for条件循环语句
    for 变量名 in 取值列表
    do
        命令序列
    done
     使用 for 循环语句从列表文件中读取多个用户名,然后为其逐一创建用户账户并设 置密码。首先创建用户名称的列表文件 
     users.txt,每个用户名称单独一行。
     vim users.txt 
     andy 
     barry 
     carl
     在脚本中使用 read 命令读取用户输入的密码值,然 后赋值给 PASSWD 变量,并通过-p 参数向用户显示一段提示信息,告诉用户正在输入的内容 即将作为账户密码。在执行该脚本后,会自动使用从列表文件 users.txt 中获取到所有的用户 名称,然后逐一使用“id 用户名”命令查看用户的信息,并使用$?判断这条命令是否执行成 功,也就是判断该用户是否已经存在。 
      vim Example.sh 
      #!/bin/bash 
      read -p "Enter The Users Password : " PASSWD 
      for UNAME in `cat users.txt` 
      do 
      id $UNAME &> /dev/null 
      if [ $? -eq 0 ] 
      then 
      echo "Already exists" 
      else 
      useradd $UNAME &> /dev/null 
      echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null 
      if [ $? -eq 0 ] 
      then 
      echo "$UNAME , Create success" 
      else 
      echo "$UNAME , Create failure" 
      fi 
      fi 
      done 
      注:/dev/null 是一个被称作 Linux 黑洞的文件,把输出信息重定向到这个文件等 同于删除数据(类似于没有回收功能的垃圾箱),可以让用户的屏幕窗口保持简洁。 
      批量删除用户
      vim Example1.sh 
      #!/bin/bash 
      for UNAME in `cat users.txt` 
      do 
      id $UNAME &> /dev/null 
      if [ $? -ne 0 ] 
      then 
      echo "no exists" 
      else 
      userdel $UNAME &> /dev/null 
      echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null 
      if [ $? -eq 0 ] 
      then 
      echo "$UNAME , del success" 
      else 
      echo "$UNAME , del failure" 
      fi 
      fi 
      done 
4.3.3 while条件循环语句
     while 条件循环语句是一种让脚本根据某些条件来重复执行命令的语句,它的循环结构往 往在执行前并不确定终执行的次数,完全不同于 for 循环语句中有目标、有范围的使用场景。 
     while 条件测试操作
     do 
        命令序列
     done
     编写一个用来猜测数值大 小的脚本 Guess.sh。该脚本使用$RANDOM 变量来调取出一个随机的数值(范围为 0~32767) , 将这个随机数对 1000 进行取余操作,并使用 expr 命令取得其结果,再用这个数值与用户通过 read 命令输入的数值进行比较判断。这个判断语句分为三种情况,分别是判断用户输入的数值是等于、 大于还是小于使用 expr 命令取得的数值。
     vim Guess.sh 
     #!/bin/bash 
     PRICE=$(expr $RANDOM % 1000) 
     TIMES=0 
     echo "商品实际价格为 0-999 之间,猜猜看是多少?" 
     while true 
     do 
     read -p "请输入您猜测的价格数目:" INT 
     let TIMES++ 
     if [ $INT -eq $PRICE ] ; 
     then 
     echo "恭喜您答对了,实际价格是 $PRICE" 
     echo "您总共猜测了 $TIMES 次" 
     exit 0 
     elif [ $INT -gt $PRICE ] ; 
     then 
     echo "太高了!" 
     else 
     echo "太低了!" 
     fi 
     done
4.4计划任务服务程序
    计划任务分为一次性计划任务与长期性计划任务,大家可以按照如下方式理解。 
    ¾ 一次性计划任务:今晚 11 点 30 分开启网站服务。 
    ¾ 长期性计划任务:每周一的凌晨 3 点 25 分把/home/wwwroot 目录打包备份为 backup.tar.gz。 
    一次性计划任务只执行一次,一般用于满足临时的工作需求。我们可以用 at 命令实现这种功能,只需要写成“at 时间”的形式就可以。如果想要查看已设置好但还未执 行的一次性计划任务,可以使用“at -l”命令;要想将其删除,可以用“atrm 任务序号”。
        at 23:30 
        at > systemctl restart httpd 
        at > 此处请同时按下 Ctrl + D 组合键来结束编写计划任务 
        job 3 at Mon Apr 27 23:30:00 2017 
        at -l 
        3 Mon Apr 27 23:30:00 2017 a root 
     可以把前面学习的管道符(任意门) 放到两条命令之间,让 at 命令接收前面 echo 命令的输出信息,以达到通过非交互式的方式创 建计划一次性任务的目的。 
        echo "systemctl restart httpd" | at 23:30 
        job 4 at Mon Apr 27 23:30:00 2017 
        at -l 
        3 Mon Apr 27 23:30:00 2017 a root 
        4 Mon Apr 27 23:30:00 2017 a root 
     如果我们希望 Linux 系统能够周期性地、有规律地执行某些具体的任务,那么 Linux 系统 中默认启用的 crond 服务简直再适合不过了。创建、编辑计划任务的命令为“crontab -e”,查看当前计划任务的命令为“crontab -l”,删除某条计划任务的命令为“crontab -r”。另外,如果您 是以管理员的身份登录的系统,还可以在 crontab 命令中加上-u 参数来编辑他人的计划任务。 
     “分、时、日、月、星期 命令” 。 
     假设在每周一、三、五的凌晨 3 点 25 分,都需要使用 tar 命令把某个网站的数据目录进 行打包处理,使其作为一个备份文件。我们可以使用 crontab -e 命令来创建计划任务。为自己 创建计划任务无需使用-u 参数,具体的实现效果的参数如 crontab -l 命令结果所示: 
 
        [root@linuxprobe ~]# crontab -e 
        no crontab for root - using an empty one 
        crontab: installing new crontab 
        [root@linuxprobe ~]# crontab -l 
        25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot 
 
    
 
作业1、利用脚本完成下面操作:每周一1:00备份var/log文件,文件名为log+日期。。
crontab -e
00 1 * * 1 /usr/bin/tar -czvf log+`date +%y%m%d`.tar.gz /home

作业2、利用脚本完成下面操作:测试192.168.1.0/24 网段中主机状态,在线显示192.168.1.x is online ,不在线显示192.168.1.x is offline,其中x为IP地址最后一位数字。
for START in $(seq 0 24)
do
IP="192.168.1.$START"
ping -c 3 -i 0.2 -W 3 $IP &> /dev/null
if [ $? -eq 0 ] 
     then 
     echo "Host $IP is Online." 
     else 
     echo "Host $IP is Offline." 
     fi 
let START++
done

作业3、利用脚本完成下面操作:创建一个新用户,并为其设置密码。要求首先输入用户名,为空则退出脚本。然后要求输入密码,为空则使用默认密码“123456”,最后完成用户的创建和密码设置。
vim Example.sh 
      #!/bin/bash 
      while true 
      do 
      read -p "Enter The Users NAME : " UNAME
      if [ -z $UNAME ]
      then
      exit 0
      fi
      id $UNAME &> /dev/null      
      if [ $? -eq 0 ] 
      then 
      echo "Already exists" 
      else 
      useradd $UNAME &> /dev/null 
      read -p "Enter The Users Password : " PASSWD
      if [ -z $PASSWD ]
      then
      PASSWD='123456'
      fi
      echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null 
      if [ $? -eq 0 ] 
      then 
      echo "$UNAME , Create success" 
      else 
      echo "$UNAME , Create failure" 
      fi 
      fi 
      done 
第5章 用户身份与文件权限
5.1用户身份与能力
    5.1.1 useradd命令
     useradd命令用于创建新的用户,格式为“useradd [选项] 用户名”。
     参数    作用
    -d    指定用户的家目录(默认为/home/username)
    -e    账户的到期时间,格式为YYYY-MM-DD.
    -u    指定该用户的默认UID
    -g    指定一个初始的用户基本组(必须已存在)
    -G    指定一个或多个扩展用户组
    -N    不创建与用户同名的基本用户组
    -s    指定该用户的默认Shell解释器
    5.1.2 groupadd命令
     groupadd命令用于创建用户组,格式为“groupadd [选项] 群组名”。
     看所有的用户和组信息的方法:
    1、cat /etc/passwd;
    2、cat /etc/group
    5.1.3 usermod命令
     usermod命令用于修改用户的属性,格式为“usermod [选项] 用户名”。
    参数    作用
    -c    填写用户账户的备注信息
    -d -m    参数-m与参数-d连用,可重新指定用户的家目录并自动把旧的数据转移过去
    -e    账户的到期时间,格式为YYYY-MM-DD
    -g    变更所属用户组
    -G    变更扩展用户组
    续表
    参数    作用
    -L    锁定用户禁止其登录系统
    -U    解锁用户,允许其登录系统
    -s    变更默认终端
    -u    修改用户的UID
    5.1.4 passwd命令
     passwd命令用于修改用户密码、过期时间、认证信息等,格式为“passwd [选项] [用户名]”。
     参数    作用
    -l    锁定用户,禁止其登录
    -u    解除锁定,允许用户登录
    --stdin    允许通过标准输入修改用户密码,如echo "NewPassWord" | passwd --stdin Username
    -d    使该用户可用空密码登录系统
    -e    强制用户在下次登录时修改密码
    -S    显示用户的密码是否被锁定,以及密码所采用的加密算法名称
     例:passwd linuxprobe
         passwd -l linuxprobe
    5.1.5 userdel命令
     userdel命令用于删除用户,格式为“userdel [选项] 用户名”。
     参数    作用
    -f    强制删除用户
    -r    同时删除用户及用户家目录
5.2  文件权限与归属
    Ø    -:普通文件。
    Ø    d:目录文件。
    Ø    l:链接文件。
    Ø    b:块设备文件。
    Ø    c:字符设备文件。
    Ø    p:管道文件。
    文件权限的字符与数字表示
    权限分配    文件所有者    文件所属组    其他用户
    权限项    读    写    执行    读    写    执行    读    写    执行
    字符表示    r    w    x    r    w    x    r    w    x
    数字表示    4    2    1    4    2    1    4    2    1
     chmod命令(“change the permissions mode of a file”,简称为“change mode”)是一个非常实用的命令,能够用来设置文件或目录的权限,格式为“chmod [参数] 权限 文件或目录名称”。
     mode : 权限设定字串,格式如下 :
     [ugoa...][[+-=][rwxX]...][,...]
    u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
    + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
    r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
    -c    若该文件权限确实已经更改,才显示其更改动作
    -f    若该文件权限无法被更改也不显示错误讯息
    -v    显示权限变更的详细资料
    -R    对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)
    将文件 file1.txt 设为所有人皆可读取 :
    chmod ugo+r file1.txt
    将文件 file1.txt 设为所有人皆可读取 :
    chmod a+r file1.txt
    将文件 file1.txt 与 file2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :
    chmod ug+w,o-w file1.txt file2.txt
    将 ex1.py 设定为只有该文件拥有者可以执行 :
    chmod u+x ex1.py
    将目前目录下的所有文件与子目录皆设为任何人可读取 :
    chmod -R a+r *
     除了设置文件或目录的权限外,还可以设置文件或目录的所有者和所属组,这里使用的命令为chown,其格式为“chown [参数] 所有者:所属组 文件或目录名称”。
    -R    对目前目录下的所有文件与子目录进行相同的拥有者变更
    -c    若该文件拥有者确实已经更改,才显示其更改动作
    -f    若该文件拥有者无法被更改也不要显示错误讯息
    -h    只对于连结(link)进行变更,而非该 link 真正指向的文件
    -v    显示拥有者变更的详细资料
    –help    显示辅助说明
    –version    显示版本
5.3  文件的特殊权限    
    单纯设置文件的rwx权限无法满足我们对安全和灵活性的需求,因此便有了SUID、SGID与SBIT的特殊权限位。
    5.3.1  SUID
     SUID是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)。
     例:chmod u+s filename
    5.3.2 SGID
     SGID主要实现如下两种功能:
    Ø    让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置);
    Ø    在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)。
    5.3.3  SBIT
     SBIT特殊权限位可确保用户只能删除自己的文件,而不能删除其他用户的文件。
     例:chmod -R o+t linux/
5.4  文件的隐藏属性
    Linux系统中的文件除了具备一般权限和特殊权限之外,还有一种隐藏权限,即被隐藏起来的权限,默认情况下不能直接被用户发觉。
    5.4.1  chattr命令
    chattr命令用于设置文件的隐藏权限,格式为“chattr [参数] 文件”。
    参数    作用
    i    无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件
    a    仅允许补充(追加)内容,无法覆盖/删除内容(Append Only)
    S    文件内容在变更后立即同步到硬盘(sync)
    s    彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域)
    A    不再修改这个文件或目录的最后访问时间(atime)
    b    不再修改文件或目录的存取时间
    D    检查压缩文件中的错误
    d    使用dump命令备份时忽略本文件/目录
    c    默认将文件或目录进行压缩
    u    当删除该文件后依然保留其在硬盘中的数据,方便日后恢复
    t    让文件系统支持尾部合并(tail-merging)
    X    可以直接访问压缩文件中的内容
     如果想要把某个隐藏功能添加到文件上,则需要在命令后面追加“+参数”,如果想要把某个隐藏功能移出文件,则需要追加“-参数”。
     例:chattr +a linuxprobe
    5.4.2  lsattr命令
     lsattr命令用于显示文件或目录的隐藏权限,格式为“lsattr [参数] 文件”
     例:lsattr linuxprobe
5.5  文件访问控制列表
    对某个指定的用户进行单独的权限控制,就需要用到文件的访问控制列表(ACL)了
    5.5.1  setfacl命令
     setfacl命令用于管理文件的ACL规则,格式为“setfacl [参数] 文件名称”。
    -m    –modify-acl 更改文件的访问控制列表
    -M    –modify-file=file 从文件读取访问控制列表条目更改
    -x    –remove=acl 根据文件中访问控制列表移除条目
    -X    –remove-file=file 从文件读取访问控制列表条目并删除
    -b    –remove-all 删除所有扩展访问控制列表条目
    -k    –remove-default 移除默认访问控制列表
    -d    –default 应用到默认访问控制列表的操作
    -P    –physical 依照自然逻辑,不跟随符号链接
    -v    –version 显示版本并退出
    -R    –recursive 递归操作子目录
    操作:
     ll -d /root
     getfacl /root
     setfacl -Rm u:redhat:rwx /root
     getfacl /root
     su - redhat
     cd /root
    5.5.2  getfacl命令
    getfacl命令用于显示文件上设置的ACL信息,格式为“getfacl 文件名称”。
5.6  su命令与sudo服务    
    1.su命令与用户名之间有一个减号(-),这意味着完全切换到新的用户,即把环境变量信息也变更为新用户的相应信息,而不是保留原始的信息
    2.sudo命令用于给普通用户提供额外的权限来完成原本root管理员才能完成的任务,格式为“sudo [参数] 命令名称”。
    总结来说,sudo命令具有如下功能:
    Ø    限制用户执行指定的命令:
    Ø    记录用户执行的每一条命令;
    Ø    配置文件(/etc/sudoers)提供集中的用户管理、权限与主机等参数;
    Ø    验证密码的后5分钟内(默认值)无须再让用户再次验证密码。
     参数    作用
    -h    列出帮助信息
    -l    列出当前用户可执行的命令
    -u用户名或UID值    以指定的用户身份执行命令
    -k    清空密码的有效时间,下次执行sudo时需要再次进行密码验证
    -b    在后台执行指定的命令
    -p    更改询问密码的提示语
    操作:
     su - redhat
     cd /root
     cat /etc/shadow
     sudo cd /root
     exit
     visudo
     set nu
     :99
     redhat ALL=(ALL) ALL
     su - redhat
     sudo -l
     sudo cat /etc/shadow
     su - root
     visudo
     redhat ALL=(ALL) /usr/bin/cat
     su - redhat
     cat /etc/shadow
     sudo cat /etc/shadow
     sudo -l
     ls -l /root
     sudo ls -l /root
第6章 存储结构与磁盘划分
    6.1 一切从‘/’开始
     Linux 系统中常见的目录名称以及相应内容 
    目录名称 应放置文件的内容 
    /boot 开机所需文件—内核、开机菜单以及所需配置文件等 /dev 以文件形式存放任何设备与接口 
    /etc 配置文件 
    /home 用户家目录 
    /bin 存放单用户模式下还可以操作的命令 
    /lib 开机时用到的函数库,以及/bin 与/sbin 下面的命令要调用的函数 
    /sbin 开机过程中需要的命令 
    /media 用于挂载设备文件的目录 
    /opt 放置第三方的软件 
    /root 系统管理员的家目录 
    /srv 一些网络服务的数据文件目录 
    /tmp 任何人均可使用的“共享”临时目录 
    /proc 虚拟文件系统,例如系统内核、进程、外部设备及网络状态等 /usr/local 用户自行安装的软件 
    /usr/sbin Linux 系统开机时不会使用到的软件/命令/脚本 
    /usr/share 帮助与说明文件,也可放置共享文件 
    /var 主要存放经常变化的文件,如日志 
    /lost+found 当文件系统发生错误时,将一些丢失的文件片段存放在这里
    6.2  物理设备的命名规则
     在 Linux 系统中一切都是文件,硬件设备也不例外。
     硬件设备 文件名称 
     IDE 设备 /dev/hd[a-d] 
     SCSI/SATA/U 盘 /dev/sd[a-p] 
     软驱 /dev/fd[0-1] 
     打印机 /dev/lp[0-15] 
     光驱 /dev/cdrom 
     鼠标 /dev/mouse 
     磁带机 /dev/st0 或/dev/ht0 
     一般的硬盘设备都会是以“/dev/sd”开头的。 而一台主机上可以有多块硬盘,因此系统采用 a~p 来代表 16 块不同的硬盘(默认从 a 开始 分配),而且硬盘的分区编号也很有讲究: 
     ¾ 主分区或扩展分区的编号从 1 开始,到 4 结束; 
     ¾ 逻辑分区从编号 5 开始。 
     “/dev/sda5”表示的就是“这是系统中第一块被识别到的硬件设备中分区编号为 5 的逻 辑分区的设备文件”
    6.3  文件系统与数据资料 
     用户在硬件存储设备中执行的文件建立、写入、读取、修改、转存与控制等操作都是依 靠文件系统来完成的。
     ¾ Ext3:是一款日志文件系统,能够在系统异常宕机时避免文件系统资料丢失,并 能自动修复数据的不一致与错误。
     ¾ Ext4:Ext3 的改进版本,作为 RHEL 6 系统中的默认文件管理系统,它支持的存储容 量高达 1EB(1EB=1,073,741,824GB),且能够有无限多的子目录。
     ¾ XFS:是一种高性能的日志文件系统,而且是 RHEL 7 中默认的文件管理系统,它的 优势在发生意外宕机后尤其明显,即可以快速地恢复可能被破坏的文件,而且强大的 日志功能只用花费极低的计算和存储性能。
    6.4  挂载硬件设备
    6.4.1  mount 命令
     mount 命令用于挂载文件系统,格式为“mount 文件系统 挂载目录” 。
     参数 作用 
     -a 挂载所有在/etc/fstab 中定义的文件系统 
     -t 指定文件系统的类型 
    例如,要把设备/dev/sdb2 挂载到/backup 目录,只需要在 mount 命令中填写设备与挂载目录 参数就行,系统会自动去判断要挂载文件的类型,因此只需要执行下述命令即可: 
 
        [root@linuxprobe ~]# mount /dev/sdb2 /backup 
     须把挂载信息按照指定的填写格式 “设备文件 挂载目录 格式类型 权限选项 自检 优先级”写入到 /etc/fstab 文件中。这个文件中包含着挂载所需的诸多信息项目,一旦配置好之后就能一劳永逸了。 
     字段 意义 
     设备文件 一般为设备的路径+设备名称,也可以写唯一识别码(UUID,Universally Unique Identifier)
     挂载目录 指定要挂载到的目录,需在挂载前创建好 
     格式类型 指定文件系统的格式,比如 Ext3、Ext4、XFS、SWAP、iso9660(此为光盘设备)等 
     权限选项 若设置为 defaults,则默认权限为:rw, suid, dev, exec, auto, nouser, async 
     自检 若为 1 则开机后进行磁盘自检,为 0 则不自检 
     优先级若“自检”字段为1,则可对多块硬盘进行自检优先级设置 
    6.4.2  umount 命令 
     umount 命令用于撤销已经挂载的设备文件,格式为“umount [挂载点/设备文件]”。
      卸载掉/dev/sdb2 设备文件: 
      [root@linuxprobe ~]# umount /dev/sdb2 
    6.5  添加硬盘设备
    6.5.1  fdisk 命令 
     fdisk 命令用于管理磁盘 分区,格式为“fdisk  [磁盘名称]”,它提供了集添加、删除、转换分区等功能于一身的“一站式 分区服务”。
        参数 作用 
        m 查看全部可用的参数 
        n 添加新的分区 
        d 删除某个分区信息 
        l 列出所有可用的分区类型 
        t 改变某个分区的类型 
        p 查看分区信息 
        w 保存并退出 
        q 不保存直接退出 
    6.5.2  du 命令 
     个用于查看文件数据占用量的 du 命令,其格式为“du [选项] [文件]”。
      du -sh /*命令来查看在 Linux 系统根目录下所有一级目录分别占用的空间大小。
    6.6  添加交换分区
     SWAP(交换)分区是一种通过在硬盘中预先划分一定的空间,然后将把内存中暂时不常 用的数据临时存放到硬盘中,以便腾出物理内存空间让更活跃的程序服务来使用的技术,其设 计目的是为了解决真实物理内存不足的问题。
        使用 SWAP 分区专用的格式化命令 mkswap,对新建的主分区进行格式化操作: 
        [root@linuxprobe ~]# mkswap /dev/sdb2 
     使用 swapon 命令把准备好的 SWAP 分区设备正式挂载到系统中。我们可以使用 free -m 命令 查看交换分区的大小变化
    6.7  磁盘容量配额
     使用 quota 命令进行磁盘容量配额管理,从而限制用户的硬盘可用容量或所能创建的最大文件个数。quota 命令还有软限制和硬限制的功能。 ¾ 软限制:当达到软限制时会提示用户,但仍允许用户在限定的额度内继续使用。 ¾ 硬限制:当达到硬限制时会提示用户,且强制终止用户的操作。
    6.7.1  xfs_quota 命令 
     xfs_quota 命令是一个专门针对 XFS 文件系统来管理 quota 磁盘容量配额服务而设计的命令, 格式为“quota [参数] 配额 文件系统”。其中,-c 参数用于以参数的形式设置要执行的命令;-x 参数是专家模式,让运维人员能够对 quota 服务进行更多复杂的配置。
    6.7.2  edquota 命令 
     edquota 命令用于编辑用户的 quota 配额限制,格式为“edquota [参数] [用户] ”。
     在为用 户设置了 quota 磁盘容量配额限制后,可以使用 edquota 命令按需修改限额的数值。其中,-u 参数表示要针对哪个用户进行设置;-g 参数表示要针对哪个用户组进行设置。
    6.8  软硬方式链接 
     ¾ 硬链接(hard link):可以将它理解为一个“指向原始文件 inode 的指针”,系统不为 它分配独立的 inode 和文件。所以,硬链接文件与原始文件其实是同一个文件,只 是名字不同。我们每添加一个硬链接,该文件的 inode 连接数就会增加 1;而且只 有当该文件的 inode 连接数为 0 时,才算彻底将它删除。换言之,由于硬链接实际 上是指向原文件 inode 的指针,因此即便原始文件被删除,依然可以通过硬链接文 件来访问。需要注意的是,由于技术的局限性,我们不能跨分区对目录文件进行 链接。 
     ¾ 软链接(也称为符号链接[symbolic link]):仅仅包含所链接文件的路径名,因此能链 接目录文件,也可以跨越文件系统进行链接。但是,当原始文件被删除后,链接文件 也将失效,从这一点上来说与 Windows 系统中的“快捷方式”具有一样的性质。 
    ln 命令 
     ln 命令用于创建链接文件,格式为“ln [选项] 目标”
     参数 作用 
     -s 创建“符号链接”(如果不带-s 参数,则默认创建硬链接) 
     -f 强制创建文件或目录的链接 
     -i 覆盖前先询问 
     -v 显示创建链接的过程 
     
     
     
     
     
    完成第6章全部练习,以下录制视频作业
    1、添加两块硬盘,第1块硬盘分两个区,均为主分区,第1个分区大小,文件系统类型自选,第2个分区为交换分区。
     fdisk /dev/sdb 
     p //查询 
     n //分区 
     p //主分区 
     1 //编号1号
     回车
     +2GB //2GB 
     n //分区 
     p //主分区 
     2 //编号
     回车
     +5GB 
     P //查询 
     w //写入、退出
    //主分区挂载
    //使用 file 命令查看该文件的属性
     file /dev/sdb1 
    //或没有信息,使用下面命令两次或者重启
     partprobe
     partprobe
    //格式化
     mkfs.xfs /dev/sdb1 
    //创建一个用于挂载设备的挂载点目录;然后使用 mount 命 令将存储设备与挂载点进行关联;最后使用 df -h 命令来查看挂载状态和硬盘使用量信息。 
     mkdir /newFS 
     mount /dev/sdb1 /newFS/ 
     df -h 
     
     //交换分区
      mkswap /dev/sdb2 //使用 SWAP 分区专用的格式化命令 mkswap,对新建的主分区进行格式化操作
      //使用 swapon 命令把准备好的 SWAP 分区设备正式挂载到系统中。我们可以使用 free -m 命令 查看交换分区的大小变化
       free -m 
       swapon /dev/sdb2 
       free -m
      //设置重启生效
       vim /etc/fstab 
       /dev/sdb2    swap         swap      defaults   0 0 
     
    2、对第2块硬盘分两个区,主分区和扩展分区,主分区文件系统类型xfs,启用磁盘配额,将其映射到根目录下的web目录;扩展分区文件系统类型自选。
     fdisk /dev/sdb 
     p //查询 
     n //分区 
     p //主分区 
     1 //编号1号
     +2GB //2GB 
     n //分区 
     e //扩展分区 
     2 //
      //
     p //查询 
     w //写入
     //使用 file 命令查看该文件的属性
     file /dev/sdb1 
     //或没有信息,使用下面命令两次或者重启
     partprobe
     partprobe
     file /dev/sdb1 
     mkfs.xfs /dev/sdb1 
     mkdir /web
     mount /dev/sdb1 /web/ 
     df -h
     vim /etc/fstab 
       /dev/sdb2    xfs         xfs      defaults,uquota   0 0 
     
     xfs_quota -x -c 'limit bsoft=3m bhard=6m isoft=3 ihard=6  xt' /web 
     xfs_quota -x -c report /boot 
     file /dev/sdb2
     mkfs.xfs /dev/sdb2
     
    3、新建用户,用户名为自己拼音,在第2块硬盘的主分区上进行配额限制,大小自定。
     useradd xutian
     edquote -u xutian
     su - xutian 
     dd if=/dev/zero of=/boot/tom bs=8M count=1
    4、在web目录新建两个连接文件,软连接为etc目录的passwd,硬链接为etc目录下的fstab(此处会有错误提示)。
     ln -s /etc/passwd test
     ln /etc/fstab test1
第 7 章 
使用 RAID 与 LVM 磁盘阵列技术 
7.1  RAID 0
    RAID0技术把多块物理硬盘设备(至少两块)通过硬件或软件的方式串联在一起,组成一个大的卷组,并将数据依次写入到各个物理硬盘中。
7.1.2  RAID 1 
    如果生产环境对硬盘设备的读写速度没有要求,而是希望增加数据的安全性时, 就需要用到 RAID 1 技术了。 
7.1.3  RAID 5 
    RAID5技术实际上没有备份硬盘中的真实数据信息,而是当硬盘设备出现问题后通过奇偶校验信息来尝试重建损坏的数据。RAID这样的技术特性“妥协”地兼顾了硬盘设备的读写速度、数据安全性 与存储成本问题。 
7.1.4  RAID 10 
    RAID 10 技术是 RAID 1+RAID0技术的一个“组合体”。如图 7-4所示,RAID10技术需要至少4块硬盘来组建,其中先分别两两制作成RAID1磁盘阵列,以保证数据的安全性;然后再对两个RAID1磁盘阵列实施RAID0技术,进一步提高硬盘设备的读写速度。
7.1.5  部署磁盘阵列 
    mdadm 命令用于管理 Linux 系统中的软件 RAID 硬盘阵列,格式为 “mdadm [模式] <RAID 设备名称> [选项] [成员设备名称]”。 
     mdadm 命令的常用参数和作用 
    参数 作用 
    -a 检测设备名称 
    -n 指定设备数量 
    -l 指定 RAID 级别 
    -C 创建 
    -v 显示过程 
    -f 模拟设备损坏 
    -r 移除设备 
    -Q 查看摘要信息 
    -D 查看详细信息 
    -S 停止 RAID 磁盘阵列 
7.1.6  损坏磁盘阵列及修复 
7.1.7  磁盘阵列+备份盘     
7.2  LVM(逻辑卷管理器)  
    LVM 可以允许用户对硬盘资源进行动态调整。 
7.2.1  部署逻辑卷 
    常用的 LVM 部署命令 
    功能/命令 物理卷管理 卷组管理 逻辑卷管理 
    扫描 pvscan vgscan lvscan 
    建立 pvcreate vgcreate lvcreate 
    显示 pvdisplay vgdisplay lvdisplay 
    删除 pvremove vgremove lvremove 
    扩展  vgextend lvextend 
    缩小  vgreduce lvreduce 
     第1步:让新添加的两块硬盘设备支持 LVM 技术
      pvcreate /dev/sdb /dev/sdc 
     第2步:把两块硬盘设备加入到 storage 卷组中,然后查看卷组的状态。 
      vgcreate storage /dev/sdb /dev/sdc 
     第3步:切割出一个约为 150MB 的逻辑卷设备。 
     lvcreate -n xt -l 37 storage 
     lvdisplay  
     第4步:把生成好的逻辑卷进行格式化,然后挂载使用。 
      mkfs.ext4 /dev/storage/xt
      mkdir /root/xt
      mount /dev/storage/xt /root/xt

7.2.2  扩容逻辑卷 
    查看可用空间大小
     vgdisplay 
    取消挂载
     umount /root/xt
    第1步:把上一个实验中的逻辑卷 vo 扩展至 290MB。 
     lvextend -L 290M /dev/storage/xt 
    第2步:检查硬盘完整性,并重置硬盘容量。 
      e2fsck -f /dev/storage/xt 
      resize2fs /dev/storage/xt 
    第3步:重新挂载硬盘设备并查看挂载状态 
     mount /dev/storage/xt /root/xt    
      df -h 
7.2.3  缩小逻辑卷
     umount /root/xt
    第1步:检查文件系统的完整性。 
     e2fsck -f /dev/storage/xt  
    第2步:把逻辑卷 vo 的容量减小到 120MB。 
     resize2fs /dev/storage/xt 120M 
     lvreduce -L 120M /dev/storage/xt
     mount /dev/storage/xt /root/xt    
     df -h 
7.2.4  逻辑卷快照 
    快照卷的容量必须等同于逻辑卷的容量;
    快照卷仅一次有效,一旦执行还原操作后则会被立即自动删除。 
    首先查看卷组的信息。 
     vgdisplay 
     echo "hello" > /root/xt/hello.txt 
     cd /root/xt
     ll 
    第1步:使用-s 参数生成一个快照卷,使用-L 参数指定切割的大小。另外,还需要在命 令后面写上是针对哪个逻辑卷执行的快照操作。 
     lvcreate -L 120M -s -n SNAP /dev/storage/xt
     lvdisplay      
    第2步:在逻辑卷所挂载的目录中创建一个 100MB 的垃圾文件,然后再查看快照卷的状 态。可以发现存储空间占的用量上升了。 
     dd if=/dev/zero of=/root/xt/files count=1 bs=10M
    第3步:为了校验 SNAP 快照卷的效果,需要对逻辑卷进行快照还原操作。在此之前记 得先卸载掉逻辑卷设备与目录的挂载。 
     umount /root/xt
     //
     lsof /root/xt
     kill pid 
     umount /root/xt
     lvconvert --merge /dev/storage/SNAP 
     mount /dev/storage/xt /root/xt    
     ls /root/xt 
7.2.5  删除逻辑卷
    第1步:取消逻辑卷与目录的挂载关联,删除配置文件中永久生效的设备参数。 
     umount /root/xt
    第2步:删除逻辑卷设备,需要输入 y 来确认操作。 
     lvremove /dev/storage/xt 
     y
     
    今天把第7章的操作练习一遍,大家都录制第2节操作视频为作业。
    要求逻辑卷的名字为自己姓名拼音首字母,关联的目录为自己姓名全拼,位于根目录下,大小自定义。
    要求包含创建、扩容、缩减、快照、删除操作。
    
第9章 使用 ssh 服务管理远程主机 
9.1  配置网络服务 
9.1.1  配置网络参数
    使用 nmtui 命令来配置网络
9.1.2  创建网络会话 
    可以使用 nmcli 命令来管理 Network Manager 服务。nmcli 是一款基于命令行的网络配置工具,功能丰富,参数众多。它可以轻松 地查看网络信息或网络状态: 
    nmcli connection show
    nmcli con show eno16777736
    可以使用 nmcli 命令并按照“connection add con-name type ifname”的格式来创建网络会 话。假设将公司网络中的网络会话称之为 company,将家庭网络中的网络会话称之为 house, 现在依次创建各自的网络会话。 
    公司
     nmcli connection add con-name company ifname eno16777736  autoconnect no type ethernet ip4 10.10.10.200/24 gw4 10.10.10.1 
    家庭
     nmcli connection add con-name house type ethernet ifname  eno16777736
    查看创建的网络会话
     nmcli connection show
    启动家庭网络会话
     nmcli connection up house  
9.1.3  绑定两块网卡
9.2  远程控制服务 
9.2.1 配置sshd服务
sshd 服务的配置信息保存在/etc/ssh/sshd_config 文件中
sshd 服务配置文件中包含的参数以及作用 
    参数 作用 
    Port 22 默认的 sshd 服务端口 
    ListenAddress 0.0.0.0 设定 sshd 服务器监听的 IP 地址
    Protocol 2 SSH 协议的版本号 
    HostKey /etc/ssh/ssh_host_key SSH 协议版本为 1 时,DES 私钥存放的位置 
    HostKey /etc/ssh/ssh_host_rsa_key SSH 协议版本为 2 时,RSA 私钥存放的位置 
    HostKey /etc/ssh/ssh_host_dsa_key SSH 协议版本为 2 时,DSA 私钥存放的位置 
    PermitRootLogin yes 设定是否允许 
    root 管理员直接登录 
    StrictModes yes 当远程用户的私钥改变时直接拒绝连接 
    MaxAuthTries 6 大密码尝试次数 
    MaxSessions 10 大终端数 
    PasswordAuthentication yes 是否允许密码验证 
    PermitEmptyPasswords no 是否允许空密码登录(很不安全
    使用 ssh 命令进行远 程连接,其格式为“ssh [参数] 主机 IP 地址”。要退出登录则执行 exit 命令。
     ssh 10.10.10.123
     exit
    禁止以 root 管理员的身份远程登录到服务器
    先使用 Vim 文本编辑器打开 sshd 服务的主配置文件,然后把 第 48 行#PermitRootLogin yes 参数前的井号(#)去掉,并把参数值 yes 改成 no,这样就不再 允许 root 管理员远程登录了。记得后保存文件并退出。 
     vim /etc/ssh/sshd_config 
    动重启相应的服务程序
     systemctl restart sshd
     systemctl enable sshd
9.2.2  安全密钥验证 
    第1步:在客户端主机中生成“密钥对”。
     ssh-keygen     
    第2步:把客户端主机中生成的公钥文件传送至远程主机: 
     ssh-copy-id 10.10.10.123 
    第3步:对服务器进行设置,使其只允许密钥验证,拒绝传统的口令验证方式。记得在 修改配置文件后保存并重启 sshd 服务程序。 
     vim /etc/ssh/sshd_config
      78 PasswordAuthentication no 
     systemctl restart sshd 
    第4步:在客户端尝试登录到服务器,此时无须输入密码也可成功登录。 
     ssh 192.168.10.10
9.2.3  远程传输命令
    scp(secure copy)是一个基于 SSH 协议在网络之间进行安全传输的命令,其格式为“scp [参数] 本地文件 远程帐户@远程 IP 地址:远程目录”。 
    scp 命令中可用的参数及作用 
    参数 作用 
    -v 显示详细的连接进度 
    -P 指定远程主机的 
    sshd 端口号 
    -r 用于传送文件夹 
    -6 使用 IPv6 协议 
    如果要传送整个文件夹内的所有数据,还需要额外添加参数-r 进行递归操 作。
     [root@linuxprobe ~]# echo "Welcome to LinuxProbe.Com" > readme.txt 
     scp /root/readme.txt 192.168.10.20:/home 
    使用 scp 命令把远程主机上的文件下载到本地主机,其命令格式为“scp [参 数] 远程用户@远程 IP 地址:远程文件 本地目录”。
     scp 192.168.10.20:/etc/redhat-release /root 
     
第10章 使用 Apache 服务部署静态网站 
10.1  网站服务程序 
    目前能够提供 Web 网络服务的程序有 IIS、Nginx 和 Apache 等
    安装:# systemctl start httpd 
    启动:  systemctl start httpd 
    开启启动: systemctl enable httpd
10.2  配置服务文件参数 
    Linux 系统中的配置文件 
    配置文件的名称 存放位置 
    服务目录 /etc/httpd 
    主配置文件 /etc/httpd/conf/httpd.conf 
    网站数据目录 /var/www/html 
    访问日志 /var/log/httpd/access_log 
    错误日志 /var/log/httpd/error_log 
    
    配置 httpd 服务程序时最常用的参数以及用途描述 
    参数 用途 ServerRoot 服务目录 
    ServerAdmin 管理员邮箱 
    User 运行服务的用户 
    Group 运行服务的用户组 
    ServerName 网站服务器的域名 
    DocumentRoot 网站数据目录 Directory 网站数据目录的权限 
    Listen 监听的 IP 地址与端口号 
    DirectoryIndex 默认的索引页页面 
    ErrorLog 错误日志文件 
    CustomLog 访问日志文件 
    Timeout 网页超时时间,默认为 300 秒 
    当前网站普遍的首页面名称是 index.html,因 此可以向/var/www/html 目录中写入一个文件,替换掉 httpd 服务程序的默认首页面,该操作 会立即生效。 
    # echo "Welcome To LinuxProbe.Com" > /var/www/html/index.html 
    第1步:建立网站数据的保存目录,并创建首页文件。 
    # mkdir /home/wwwroot 
    # echo "The New Web Directory" > /home/wwwroot/index.html 
    第2步:打开 httpd 服务程序的主配置文件,将约第 119 行用于定义网站数据保存路径的 参数 DocumentRoot 修改为/home/wwwroot,同时还需要将约第 124 行用于定义目录权限的参 数 Directory 后面的路径也修改为/home/wwwroot
     vim /etc/httpd/conf/httpd.conf  
      DocumentRoot "/home/wwwroot" 
      <Directory "/home/wwwroot"> 
10.3  SELinux 安全子系统
    好 Linux 系统后直接将 SELinux 禁用了;这绝对不是明智的选择。 SELinux 服务有三种配置模式,具体如下。 
    ¾ enforcing:强制启用安全策略模式,将拦截服务的不合法请求。 
    ¾ permissive:遇到服务越权访问时,只发出警告而不强制拦截。 
    ¾ disabled:对于越权的行为不警告也不拦截。 
    建议大家检查一下自己的系统,查 看 SELinux 服务主配置文件中定义的默认状态。如果是 permissive 或 disabled,建议赶紧修改 为 enforcing。 
     vim /etc/selinux/config 
     SELINUX=enforcing 
    可以使用 getenforce 命令获得当前 SELinux 服务的运行模式: 
    # getenforce 
    为了确认图 10-6 所示的结果确实是因为 SELinux 而导致的,可以用 setenforce [0|1]命令 修改 SELinux 当前的运行模式(0 为禁用,1 为启用)。注意,这种修改只是临时的,在系统 重启后就会失效: 
    # setenforce 0 
    把 SELinux 服务恢复到强制启用安全策略模式,然后分别查看原始网站数据 的保存目录与当前网站数据的保存目录是否拥有不同的 SELinux 安全上下文值: 
    # setenforce 1
    [root@linuxprobe ~]# ls -Zd /var/www/html 
    drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html 
    [root@linuxprobe ~]# ls -Zd /home/wwwroot 
    drwxrwxrwx. root root unconfined_u:object_r:home_root_t:s0 /home/wwwroot 
    一个章节仔细讲解 SELinux 服务。 针对当前这种情况,我们只需要使用 semanage 命令,将当前网站目录/home/wwwroot 的 SELinux 安全上下文修改为跟原始网站目录的一样就可以了。 
10.3.1  semanage 命令 
    参数及其功能如下所示: 
    ¾ -l 参数用于查询; 
    ¾ -a 参数用于添加; 
    ¾ -m 参数用于修改; 
    ¾ -d 参数用于删除。    
    可以向新的网站数据目录中新添加一条 SELinux 安全上下文,让这个目录以及里 面的所有文件能够被 httpd 服务程序所访问到: 
    [root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot 
    [root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/* 
    还需要使用 restorecon 命令将设置好 的 SELinux 安全上下文立即生效
    # restorecon -Rv /home/wwwroot/      以加上-Rv 参数对指定的目录 进行递归操作
10.4  个人用户主页功能
    如果想在系统中为每位用户建立一个独立的网站,通常的方法是基于虚拟网站主机功能 来部署多个网站。
    第1步:在 httpd 服务程序中,默认没有开启个人用户主页功能。为此,我们需要编辑下 面的配置文件,然后在第 17 行的 UserDir disabled 参数前面加上井号(#),表示让 httpd 服务 程序开启个人用户主页功能;同时再把第 24 行的 UserDir public_html 参数前面的井号(#) 去掉(UserDir 参数表示网站数据在用户家目录中的保存目录名称,即 public_html 目录)
    # vim /etc/httpd/conf.d/userdir.conf 
     # UserDir disabled
       UserDir public_html 
    第2步:在用户家目录中建立用于保存网站数据的目录及首页面文件。另外,还需要把 家目录的权限修改为 755,保证其他人也有权限读取里面的内容。 
    [root@linuxprobe home]# su - linuxprobe 
    Last login: Fri May 22 13:17:37 CST 2017 on :0 
    [linuxprobe@linuxprobe ~]$ mkdir public_html 
    [linuxprobe@linuxprobe ~]$ echo "This is linuxprobe's website" > public_html/ index.html 
    [linuxprobe@linuxprobe ~]$ chmod -Rf 755 /home/linuxprobe 
    第3步:重新启动 httpd 服务程序,在浏览器的地址栏中输入网址,其格式为“网址/~ 用户名”(其中的波浪号是必需的,而且网址、波浪号、用户名之间没有空格),从理论上来 讲就可以看到用户的个人网站了
    第4步:思考这次报错的原因是什么。
    接下来使用 getsebool 命令查询并过滤出所有与 HTTP 协议相关的安全策略。其中,off 为禁止状态,on 为允许状态。 
    # getsebool -a | grep http 
    想要开启 httpd 服务的个人用户主页功能, 那么用到的 SELinux 域安全策略应该是 httpd_enable_homedirs 吧?大致确定后就可以用 setsebool 命令来修改 SELinux 策略中各条规则的布尔值了。大家一定要记得在 setsebool 命令 后面加上-P 参数,让修改后的 SELinux 策略规则永久生效且立即生效。
    # setsebool -P httpd_enable_homedirs=on 
10.5  虚拟主机功能 
10.5.1  基于 IP 地址 
    nmtui
     Manual 
     10.10.10.121/24 122/24 123/24
    第1步:分别在/home/wwwroot 中创建用于保存不同网站数据的 3 个目录,并向其中分 别写入网站的首页文件
    [root@linuxprobe ~]# mkdir -p /home/wwwroot/10 
    [root@linuxprobe ~]# mkdir -p /home/wwwroot/20 
    [root@linuxprobe ~]# mkdir -p /home/wwwroot/30
    [root@linuxprobe ~]# echo "IP:192.168.10.10" > /home/wwwroot/10/index.html 
    [root@linuxprobe ~]# echo "IP:192.168.10.20" > /home/wwwroot/20/index.html 
    [root@linuxprobe ~]# echo "IP:192.168.10.30" > /home/wwwroot/30/index.html
    第2步:在 httpd 服务的配置文件中大约 113 行处开始,分别追加写入三个基于 IP 地址的虚 拟主机网站参数,然后保存并退出。记得需要重启 httpd 服务,这些配置才生效。 
    # vim /etc/httpd/conf/httpd.conf
<VirtualHost 10.10.10.131> 
DocumentRoot /home/wwwroot/10 
ServerName www.linuxprobe.com 
<Directory /home/wwwroot/10 > 
AllowOverride None 
Require all granted 
</Directory> 
</VirtualHost> 
<VirtualHost 10.10.10.132> 
DocumentRoot /home/wwwroot/20 
ServerName bbs.linuxprobe.com 
<Directory /home/wwwroot/20 > 
AllowOverride None 
Require all granted 
</Directory> 
</VirtualHost> 
<VirtualHost 10.10.10.133> 
DocumentRoot /home/wwwroot/30 
ServerName tech.linuxprobe.com 
<Directory /home/wwwroot/30 > 
AllowOverride None 
Require all granted 
</Directory> 
</VirtualHost>
    [root@linuxprobe ~]# systemctl restart httpd 
10.5.2  基于主机域名 
    解析为某个 IP 地址。 第1步:手工定义 IP 地址与域名之间对应关系的配置文件,保存并退出后会立即生效。 可以通过分别 ping 这些域名来验证域名是否已经成功解析为 IP 地址。 
     vim /etc/hosts 
     1 www.linuxprobe.com bbs.linuxprobe.com tech.linuxprobe.com
    第2步:分别在/home/wwwroot 中创建用于保存不同网站数据的三个目录,并向其中分 别写入网站的首页文件。每个首页文件中应有明确区分不同网站内容的信息,方便我们稍后 能更直观地检查效果。
    [root@linuxprobe ~]# mkdir -p /home/wwwroot/www 
    [root@linuxprobe ~]# mkdir -p /home/wwwroot/bbs 
    [root@linuxprobe ~]# mkdir -p /home/wwwroot/tech 
    [root@linuxprobe ~]# echo "WWW.linuxprobe.com" > /home/wwwroot/www/index.html 
    [root@linuxprobe ~]# echo "BBS.linuxprobe.com" > /home/wwwroot/bbs/index.html 
    [root@linuxprobe ~]# echo "TECH.linuxprobe.com" > /home/wwwroot/tech/index.html 
    第3步:在 httpd 服务的配置文件中大约 113 行处开始,分别追加写入三个基于主机名的 虚拟主机网站参数,然后保存并退出。记得需要重启 httpd 服务,这些配置才生效。 
    # vim /etc/httpd/conf/httpd.conf 
     
 
     
 
 
 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值