Linux基础知识汇总

零散知识点:基本的命令集合、Linux基本常识、yum搭建、网络配置(链路聚合)、磁盘分区(格式化和虚拟内存)、权限分析、压缩备份、shell脚本、SELinux和防火墙、别名、vim的一些使用技巧、源码包编译安装、RAID阵列卡、进程管理、破解root密码、实时同步(监听与同步)

服务:Apache的web服务以及https安全web服务、FTP共享服务、邮件服务、samba服务、NFS共享服务、iscsi磁盘共享、Mariadb数据库、DNS服务(分离解析)、PXE网络装机、cobbler装机


互联网中常见协议及端口号

协议 含义 端口
http 超文本传输协议 80
https 安全的超文本传输协议 443
ftp 文件传输协议 21
tftp 简单的文件传输协议 69
dns 域名解析协议 53
smtp 发邮件协议 25
pop3 收邮件协议 110
snmp 网络管理协议 161
telnet 远程管理协议 23

Linux目录结构(man hier)

/boot 存放系统引导必需的文件,包括内核、启动配置
/bin、/sbin 存放各种命令程序
/dev 存放硬盘、键盘、鼠标、光驱等各种设备文件
/etc 存放Linux系统及各种程序的配置文件
/root、/home/ 用户名 分别是管理员root、普通用户的默认家目录
/var 存放日志文件、邮箱目录等经常变化的文件
/proc 存放内存中的映射数据,不占用磁盘
/tmp 存放系统运行过程中使用的一些临时文件

命令集合:
  1. du -sh [目录或者文件]……  ---> 查看文件或目录的大小

  2. history ---> 查看历史命令 
          -c ---> 表示清空历史命令

  3. date ---> 查看当前时间
       -s "yyyy-mm-dd HH:MM:SS" --> 修改时间
       +"%Y-%m-%d %H:%M:%S" ---> 按照"年-月-日 时:分:秒"输出

  4. ln [选项] [源文件的位置] [快捷方式]  ---> 创建硬连接
       -s ---> 创建软连接

  5. crontab [选项] [-u 用用户名] ---> 设置计划任务 -e修改   -l列出已有的计划任务  -r删除所有计划任务

  6. tailf 实时跟踪日志信息  其日志等级分为0-7 一共8个级别 ,3级为错误,3级以上需要重视

  7. journalctl | grep [关键词]  ---> 按照关键字查找日志信息
     journalctl -u [服务名] ---> 按照服务名查看日志信息
     journalctl --since="yyyy-mm-dd HH:MM:SS" --until="yyyy-mm-dd HH:MM:SS" ---> 按照修改时间日志信息

  8. systemctl isolate graphical.target ---> 临时调整Linux运行模式为图形模式
     systemctl isolate multi-user.target ---> 临时调整Linux运行模式为字符模式
     systemctl set-default …….target ---> 永久调整Linux运行模式为……
     systemctl get-default ---> 查看当前Linux运行模式

  9. ssh-keygen ---> 用于无密码登陆,创建公钥,交互式,不过只要一直按回车即可
     ssh-copy-id  user@IP---> 将公钥部署到相应的服务器上

  10. uname -r ---> 查看内核信息
      lscpu ---> 查看CPU信息
      cat /proc/meminfo ---> 查看内存大小和空想情况
      cat /etc/redhat-release ---> 查看当前系统版本

  11. less ---> 进行分屏阅读,实用于长文章,功能和cat差不多
      head -[数字] [文件]---> 输出文件的前n行的内容 默认为10行
      tail -[数字] [文件]---> 输出文件的后n行的内容 默认为10行

  12. cp [被复制文件1] …… [复制到的目录]--->  以最后一个为复制的目标位置进行复制
      \cp  -r  [目录] …… [复制到的目录]  ---> 复制目录,反斜是用来取消别名,这里是为了不因为重复而回答yes
        一个常见的考题:
        rm -rf /opt/*      # 作用是: 清空/opt目目录内容
        cp -r /mnt/ /opt/test # 作用是: 将/mnt放入入/opt命名为test
        cp -r /mnt/ /opt/test # 作用是: 将/mnt放入入/opt/test目目录下 

  13. wget [软件包的URL网址] -O [/目录路径/新文件] ---> 从网站中下载文件,没有-O就是下载到当前路径,不过如果有指定下载位置,必须在路径后面写上文件名!
      scp  [文件地址]  [user]@[IP]:[拷贝到的目录] ---> 把本地文件传递到其他服务器上 

  14. passwd [用户名] ---> 交互式设置密码
      echo '[密码]' | passwd --stdin [用户名] ---> 非交互式设置密码

  15. grep  [关键字]  [文件名] ---> 从文件中按照要求找出符合匹配要求的数据
      find  [目录]  -user [用户]  -type  [f文件 ,d 目录] -exec [命令,其中{}代表] \; 

  16. showmount -e  [服务端IP地址] ---> 查看NFS服务器的共享目录列表


Linux的基本常识:
  
  1. 常见的Linux发行版本
     Red Hat Enterprise Linux 5/6/7
     Suse Linux Enterprise 12
     Debian Linux 7.8
     Ubuntu Linux 14.10/15.04

  2. Linux中常见的文件系统:
     EXT4,第四代扩展文件系统,RHEL6系列默认 ---> mkfs.ext4
     XFS,高级日志文件系统,RHEL7系列默认 ---> mkfs.xfs
     SWAP,交换空间(虚拟内存)  ---> mkswap

  3. 基本通配符
      *:任意多个任意字符
      ?:单个字符
     [a-z]:多个字符或连续范围中的一个,若无则忽略
     {a,min,xy}:多组不同的字符串,全匹配

  4.账号与组相关的配置文件:
     用户相关:/etc/passwd  /etc/shadow
     组相关:/etc/group   /etc/gshadow


yum搭建:

  服务端 : 
     1. 搭建http服务或者ftp服务

     2. 在服务指定目录下创建一个目录,放入大量的rpm包

     3. 用createrepo [目录] 生成一个清单文件
  
     4. 启服务

  客户端:
    如果没有服务端,自己想直接把光盘作为软件仓库就需要进行挂载,再书写yum配置文件。
     mount  /dev/cdrom  [挂载点]
     也可以修改挂载文件/etc/fstab 达到永久挂载 格式为

/dev/cdrom  [挂载点]  iso9660  defaults,ro 0 0

     书写yum配置文件,在/etc/yum.repos.d/*.repo

[rhel7]        #仓库标识,仓库的名字
name=rhel7.0     #仓库的描述信息
baseurl=服务位置     #指定服务端位置,最好浏览器进行复制粘贴,如果是本机挂载的yum仓库,服务位置就写file:///[挂载点],注意是三个斜线,其中第三个斜线代表绝对路径中的根
enabled=1         #启用该文件
gpgcheck=0         #不检测红帽的签名信息

    配置完成后,清除缓存后测试一下
    yum clean all
    yum repolist           #看到很多包就表示yum搭建成功


网络:

  配置IP:

nmcli connection modify [网卡名] ipv4.method [manual静态、auto动态] ipv4.addresses '[IP/子网掩码]' ipv4.dns  [DNS服务器地址] connection.autoconnect yes

   链路聚合:
     1.创建虚拟网卡:( man teamd.conf 找到热备的部分,config后面写上'{复制查到的内容}')

nmcli connection add type team con-name team0 ifname team0 autoconnect yes config '{[man帮助找到的内容]}'

     2.创建成员:

nmcli connection add type team-slave con-name team0-1 ifname [真实网卡] autoconnect yes master team0

     3.配置IP

nmcli connection modify team0 ipv4.method manual ipv4.addresses '[IP/子网掩码]' connection.autoconnect yes

    4.激活 :
nmcli connection up team0
nmcli connection up team0-1


  IPv4地址:32个二进制组成,以 点 分隔 4 部分,最终用4个十进制表示
  IPv6地址:128个二进制组成,以 冒号 分隔 8 部分,每部分由 4个16进制数表示
             每段内连续的前置 0 可省略、连续的多个 : 可简化为 ::


分区 : MBR  GPT  LVM逻辑卷

   分区信息存放在/dev下,命名的方法是/__[a-z][0-99]
     前两位是分区接口,SCSI是sd,IDE是hd
     第三位是磁盘号 , 第四位是分区号
  
  lsblk  查看当前磁盘和分区的情况
  blkid  查看某个具体分区的格式化情况
  partprobe  刷新分区情况

  MBR : 
     分区特点: 最多4个主分区,一般是3个主分区,一个拓展分区,其中从拓展分区中分出逻辑分区
     分区命令: fdisk [/dev/磁盘名] --->  交互命令,进入后使用n(创建)、d(删除)、w(保存退出)、q(不保存退出)
     分区使用: mount挂载使用
     注意点: 1.一般创建拓展分区是把所有剩余空间都给扩展分区
              2.在查看编号的时候,主分区是按照顺序来,逻辑分区号=逻辑分区号+主分区数+1(扩展分区)

  GPT :
     分区特点: 可以有128个主分区
     分区名命令:parted ---> 交互命令,进入后
    mktable(指定分区类型)、mkpart(创建分区)、print(打印当前分区情况)、unit(指定大小的单位)

  LVM :
     创建: 1.创建卷组 --->  vgcreate  [卷组名称]  [分区磁盘系统位置]
            2.创建逻辑卷 ---> lvcreate  -L  [大小]  [逻辑卷名]  [卷组名]
     扩大: 1.卷组扩大 ---> vgextend  [卷组]  [分区磁盘1]  [分区磁盘2] ......
            2.逻辑卷扩大 --->lvextend  -L  [大小]  /dev/[卷组名]/[逻辑卷名]
       !注意:扩大后需要进行拓展格式化,不能直接使用,格式化要用专用命令。
    PE : 卷组划分空间的单位,修改PE值 : vgchange  -s  [PE大小]  [卷组名]
            逻辑卷创建或扩大的时候可以用 -l [PE的个数]
     删除: 1.删除卷组 ---> vgremove [卷组名]
            2.删除逻辑卷 ---> lvremove /dev/[卷组名]/[逻辑卷名]

格式化

  常见文件存储系统
    格式化命令: mkfs.[文件系统]  [磁盘位置/dev/……]
    拓展已经被格式化的磁盘专用命令:
     ext4文文件系统:resize2fs
     xfs文文件系统:xfs_growfs

  虚拟内存: 
    将磁盘分区格式化为交换分区: mkswap  [磁盘位置]
    将格式化后的交换分区启动:swapon -a
    查看交换分区情况 : swapon -s
   /etc/fstab 书写格式:

[存储路径]  swap  swap  defaults  0  0

权限 
  访问方式(权限)
    读取:允许查看内容-read   r
    写入:允许修改内容-write  w
    可执行:允许运行和切换-execute   x

  对于文本文件,文件的权限是用于开放和限制自身文件的操作
     r:cat  less  head  tail
     w:vim   >   >>
     x:Shell脚本  可以运行
  对于目录,目录的权限是用于开放和限制目录下子文件和子目录的操作
     r:能够 ls 浏览此目录内容
     w:能够执行 rm/mv/cp/mkdir/touch/ 等更改目录内容的操作
     x:能够 cd 切换到此目录 ,并且可以根据子文件的权限情况对子文件进行操作

  权限适用对象(归属)
    所有者:拥有此文件/目录的用户-user --> u
    所属组:拥有此文件/目录的组-group --> g
    其他用户:除所有者、所属组以外的用户-other --> o

  设置基本权限
    使用 chmod 命令
    chmod  [选项]  [归属关系][+-=][权限类别]   [文档1]  [文档2] ……
         选项 -R  代表递归赋权 

  判断用户权限:        
    1.判断用户的角色      顺序:所有者>acl>所属组>其他人   匹配及停止
    2.查看相应权限位置的权限设置

  Permission denied : 权限不足
  command not found: 命令没有找到

  设置文档归属
    使用 chown 命令
    chown [-R] 属主 文档...
    chown [-R] :属组 文档...
    chown [-R] 属主:属组 文档...

  Set GID
    附加在属组的 x 位上,属组的权限标识会变为 s
    适用于目录,Set GID可以使目录下新增的文档自动设置与父目录相同的属组

   Set UID
     附加在属主的 x 位上,属主的权限标识会变为 s
     适用于可执行文件,Set UID可以让使用者具有文件属主的身份及部分权限

  Sticky Bit
     附加在其他人的 x 位上,其他人的权限标识会变为 t
     适用于开放 w 权限的目录,可以阻止用户滥用 w 权限(只能操作属于的文档)

   Acl策略
       可以但多为一个人设置权限
        setfacl  [选项]  u:用户名:权限  文档 
        setfacl  [选项]  g:组名:权限  文档
           -m 创建   -x  删除    -b  清空
        getfacl  [文档]...    查看某文档的acl权限情况

   权限修改是即时生效的,可是用户加入组,需要用户重新登录才能生效


压缩备份
tar压缩  
    Linux常见的压缩格式及命令工具和选项代表字符:
    gzip ---> .gz  ----> z
    bzip2 ---> .bz2 ----> j
    xz ---> .xz  ----> J

   压缩  tar -[格式代表字符]  - cf  [(路径)/tar包]   [被压缩的文件]     # 选项f后面必须立刻接上空格和tar包位置
   解压  tar  -xf  [(路径) / tar包]  -C  [解压的目标目录]      # 选项f后面必须立刻接上空格和tar包位置
   查看压缩包的目录  tar -tf [(路径)/tar包]

zip打包

  zip  [-r]  [包].zip  [被打包的文文件或目目录]............
  unzip  [包].zip  -d  [解压路路径]


脚本
  规范Shell脚本的一般组成
    #! 环境声明(以下所有代码利用哪一个程序解释)
    # 注释文本
    可执行代码
  重定向输出
    > :  只收集正确输出
    2>:只收集错误输出
    &>:正确输出与错误输出都收集

  $[] :代表运算  +   -   *  /    %(取余数运算)
  $( ):将命令的输出,当作参数,参与其他命令执行
  黑洞设备:/dev/null

  变量

  变量名要求
   等号两边不要有空格
   变量名只能由字母/数字/下划线组成,区分大小写
   变量名不能以数字开头,不要使用关键字和特殊字符
   若指定的变量名已存在,相当于为此变量重新赋值
   变量=变量值(中间不能有空格!)

  判断

    if [条件测试1];then
        命令序列1
    elif [条件测试2];then
        命令序列2
    elif [条件测试3];then
        命令序列3
         ......

    else
        命令序列n
    fi

  循环

    for 变量 in [被选值1]  [被选值2]  或者 {1..n}(造数)
    do
       
    done

  注意事项:

   1.if判断中每次用到判断都要在后面加上;then 在判断结束后加上fi
   2.if的开始标志是then 结束标志三fi    循环的开始标志三do  结束标志三done


SELinux
  三种运行行行模式 Enforcing Permissive Disabled
  其配置文文件为 /etc/selinux/config

命令:
  getenforce ---> 查看SELinux的模式
  setenforce ---> 临时更更改SELinux模式,不过只能在Enforcing和Permissive间切换
  getsebool -a ---> 查看布尔值
  setsebool ---> 设置布尔值
  chcon  -R  --reference=[目目录a]  [目目录b] ---> 将a的安全上下值赋给b
  semanage  port  -l  |  grep  [软件] ---> 查看某软件的端口口号
  semanage  port  -a  -t  http_port_t  -p  tcp  8909 ---> 修改某软件的开放端口口号(修改的时候会消耗很多内存,耐心心等待)

firewall
  防火墙,一般影响两台设备间的通信
四种模式:
  public 允许一部分 默认允许ssh,dhcp,ping
  trusted 全允许
  block 全禁止,并且反馈给客户
  drop 全禁止,并且不反馈

命令:
  firewall-cmd --get-default-zone ---> 查看防火墙默认安全模式
  firewall-cmd --set-default-zone=[安全模式] ---> 设置防火墙默认安全模式
  firewall-cmd --zone=public --add-service=[服务名,如http ,ftp] ---> 默认
  firewall-cmd --zone=[安全模式] --add-service= [服务] ---> 给某个模式加服务
  firewall-cmd --zone=[安全模式] --add-forward-port=port=[客户请求访问的端口号]:proto=tcp:toport=[转变后的端口号] ---> 端口转发
  firewall-cmd --permanent ………………  ---> 对防火墙进行永久配置


别名
  alias  [别名]='[命令]'  ---> 临时创建别名
  unalias [别名名称] ---> 取消已设置的别名

  永久修改别名,需要修改配置文件/etc/bashrc(所有用户别名有效,优先级最高)
  /root/.bashrc(root用户专用别名)    /home/[用户]/.bashrc(用户专用别名)   
  直接在空白处,把临时设置别名的命令打进去即可,不过这个要重新登陆才能使用


vim用法:

命令模式:
  Home 键 或 ^、数字 0      跳转到行首
  End 键 或“$”键   跳转到行尾
  1G 或 gg  跳转到文件的首行
  GG  跳转到文件的末尾行
  yy、[要复制几行]yy  复制光标处的一行、指定多行
  p、P  粘贴到光标处之后、之前
  x 或 Delete键    删除光标处的单个字符
  dd、[要删除几行]dd  删除光标处的一行、指定多行
  d^  从光标处之前删除至行首
  d$  从光标处删除到行尾
  C(大写)  从光标处删除到行尾,并且进入插入模式
  /[查找的字符串]  向后查找字符串
  n、N  跳至后/前一个结果
  u 撤销
  U  撤销对当前行的所有修改
  Ctrl + r  取消前一次撤销操作
  ZZ  保存修改并退出
 
末行模式:
  :w  保存当前文件
  :q!  放弃已有更改后强制退出
  :wq 或 :x   保存已有修改后退出
  :r /etc/filesystems  读入其他文件内容
  :s/[将被替换的字符串]/[替换为字符串]  替换当前行第一个
  :s/[将被替换的字符串]/[替换为字符串] /g  替换当前行所有的
  :1,6  s/[将被替换的字符串]/[替换为字符串] /g  替换第1-6行所有的
  :%  s/[将被替换的字符串]/[替换为字符串] /g  替换文件内所有的
  :set nu|nonu 显示/不显示行号
  :set ai|noai 启用/关闭自动缩进

不过,新机可能没有vim,需要用yum下载,如果没有vim,编辑文件只能用vi


源码包编译安装

  0. 装包gcc make

  1. 解压源码包,tar解压或者zip解压

  2. 配置 ./configure

  3. 编译 make

  4. 安装 make install


RAID阵列概述

  RAID 0,条带模式
     同一个文档分散存放在不同磁盘,并行写入以提高效率,至少需要2块磁盘

  RAID 1,镜像模式
     一个文档复制成多份,分别写入不同磁盘,多份拷贝提高可靠性,效率无提升,至少需要2块磁盘

  RAID 5,高性价比模式
     相当于RAID0和RAID1的折中方案,需要至少一块磁盘的容量来存放校验数据,至少需要3块磁盘

  RAID 6,高性价比/可靠模式
     相当于扩展的RAID5阵列,提供2份独立校验方案,需要至少两块磁盘的容量来存放校验数据,至少需要4块磁盘

  RAID 0/1或者叫RAID 10(用的很少)
     整合RAID 0、RAID 1的优势,并行存取提高效率、镜像写入提高可靠性,至少需要4块磁盘

  硬RAID:由RAID控制卡管理阵列
     主板 ---> 阵列卡---> 磁盘 ---> 操作系统--->  数据
  软RAID:由操作系统来管理阵列
     主板 --->  磁盘---> 操作系统--->  RAID软件--->  数据


进程管理

  pstree  树型结构显示进程
    -a 显示完整的命令行
    -p 列列出对应PID编号

  ps aux  列出正在运行的所有进程,显示的和下面的命令不一样,显示自己的PID
  ps -elf 列出正在运行的所有进程,显示PPID(父进程的ID信息)

  top 一直查看进程
  pgrep 按照条件查看进程
     -l :输出进程名,而不仅是 PID
     -U :检索指定用户的进程
     -t :检索指定终端的进程
     -x :精确匹配完整的进程名

  who 查看登录用户信息(还有w、users也可以查看用户登录情况,不过不常用)

  命令后面加上 & 执行,表示放入后台执行
  执行命令中 ctrl + z 表示命令停止并且放入后台

  jobs 查看后台进行信息
  bg  [编号]  将后台某编号的进程,启动继续在后台运行
  fg  [编号]  将后台某编号的进程,恢复到前台运行

  kill  [PID]   ---> 杀死进程 ,加上-9表示强制杀死
  killall   ---> 表杀死相关的所有进程
  pkill  -9  -u  [用户]  ---> 强制踢出一个用户


破解root密码

  1. 重启系统,进入 recovery 恢复模式(修复模式) 
     按e键,找到 linux16 行,末尾添加 rd.break console=tty0,再按 ctrl + x 启动

  2. 可写方式重新挂载 /sysroot,并切换到此环境
     mount  -o  remount,rw  /sysroot
     chroot  /sysroot 

  3. 将root用户的密码重新设置
    echo  [密码]  |  passwd  --stdin  root

  4. 重设SELinux安全标签(安全增强版Linux)
    touch  /.autorelabel    #让SElinux失忆
     或者关闭SELinux ,也就是修改/etc/selinux/config
     修改第七行 SELINUX=disabled

  5. 先后执行 exit、reboot 完成修复


持续监听实现目录实时同步
  
1. 同步技术:
   使用rsync命令,使用如下
   rsync [选项] [源目录]  [同步到的目标目录]
     -n :测试同步过程,不做实际修改
     --delete :删除目标文件夹内多余的文档
     -a :归档模式,相当于-rlptgoD
     -v :显示详细操作信息

     -z :传输过程中启用压缩/解压

  常用组合 : rsync -avz [源目录]  [同步到的目标目录]

  当然源目录或者目标目录也可以是其他服务器的目录,用法是:
    下行 ---> rsync [选项] user@host:远程目录  本地目录
    上行 ---> rsync [选项] 本地目录  user@host:远程目录

  同步与复制的差异
    复制:完全拷贝源到目标
    同步:增量拷贝,只传输变化过的数据

 注意:源目录后面有/ 代表将源目录下
        没有/ 的话就是把目录完全拷贝到目标目录

2. 监控目录变化
  使用的是 inotifywait 命令
  
  1. 装包 inotify-tools ,不过这个是源码包,需要编译安装,具体看上面的源码包编译安装流程

  2. 安装后,如果没有做一些特殊部署,可以直接使用命令
     -m  持续监控(捕获一个事件后不退出)
     -r  递归监控、包括子目录及文件
     -q  减少屏幕输出信息
     -e  指定监视的modify、move、create、delete、attrib等事件类别,不写的话默认监视所有。
    常用组合为: inotifywait  -rq  [目录]  监听一次

3. 综合应用,实现实时同步
  原理:用while循环写一个死循环,但监听到变化的时候就进行一次同步,在服务端运行这个脚本,当修改了这个目录,就自动同步。
  书写同步的脚本:

#!/bin/bash

Watch_Root=[监听的目录]
Same_Root=[ user@IP: ][同步到的目录位置]

while  inotifywait  -rqq  $Watch_Root      
do
 rsync --delete -az $Watch_Root  $ Same_Root
done &        # 符号&表示放入后台执行

注意: 目录必须写绝对路径,并且监听路径后面必须是/结尾!


服务清单:

服务 作用 需要的软件和相关服务名 配置文件或者配置命令
Yum软件仓库 自动解决依赖关系安装软件 主配置文件:/etc/yum.conf
客户端配置文件:/etc/yum.repos.d/*.repo
NTP时间同步 配置客户端自动与服务端同步时间 客户端软件:chrony
服务名:chronyd
客户端配置文件:/etc/chrony.conf
cron计划任务 按照设置的时间间隔
为用户反复执行某一项固定的系统任务
服务端软件包:cronie、crontabs
系统服务:crond
使用 crontab 命令
任务记录文件存放路径:/var/spool/cron
LDAP认证 实现网络用户和用户集中管理 客户端软件:sssd、authconfig-gtk
服务名:sssd
SELinux 增强Linux系统安全性 getenforce       #查看当前SELinux状态
setenforce  0     #设置当前SELinux状态
修改固定配置: /etc/selinux/config 文件 
Samba共享 实现Linux与Windows跨平台共享文件夹 服务端软件包:samba
客户端软件:cifs-utils
系统服务:smb
服务端主配置文件:/etc/samba/smb.conf
客户端开机自动挂载使用,需要在挂载的时候输入帐号密码
NFS共享 实现Linux与Linux平台共享文件夹 • 服务端所需软件包:nfs-utils
• 系统服务:nfs-server
服务端 主配置文件修改 /etc/exports
客户端挂载使用,其中共享目录书写格式为
[IP]:[服务端目录位置] 
iSCSI网络磁盘 服务器提供磁盘空间,客户机连接并当成本地磁盘使用 服务端软件:targetcli
客户端软件:iscsi-initiator-utils
服务端服务名:target
客户端服务名:iscsid(刷新iqn)、iscsi(加载服务端共享磁盘)
•服务端运行targetcli命令进行配置
•客户端修改配置文件/etc/iscsi/initiatorname.iscsi#指定客户端声称的名字
数据库 存储数据,方便查询、备份数据 服务端软件:mariadb-server
服务端服务名:mariadb
主配置文件:/etc/my.cnf
Web服务 为客户端提供网页内容 服务端软件:httpd、mod_wsgi(提供动态页面)
服务端服务名:httpd
主配置文件:/etc/httpd/conf/httpd.conf
调用配置文件:/etc/httpd/conf.d/*.conf
安全Web服务 为客户端提供安全加密网页内容 服务端软件:httpd、mod_ssl
服务端服务名:httpd
修改配置文件 /etc/httpd/conf.d/ssl.conf
邮件服务  为用户提供电子邮箱存储空间(用户名@邮件域名)
 处理用户收到和发出的邮件 
服务端软件:postfix
服务端服务名:postfix
主配置文件:/etc/postfix/main.cf
DNS服务器 正向解析:根据注册的域名查找其对应的IP地址 服务端软件:bind、bind-chroot
服务端服务名:named
• 主配置文件:/etc/named.conf    #设置本机负责解析的域名
• 地址库文件:/var/named/        #主机名与IP地址的对应关系
rsyslog服务 日志服务,负责管理系统日志 服务端软件:rsyslog
服务端服务名:rsyslog
• 常见的日志文件
  /var/log/messages 记录内核消息、各种服务的公共消息
  /var/log/dmesg    记录系统启动过程的各种消息
  /var/log/cron     记录与cron计划任务相关的消息
  /var/log/maillog  记录邮件收发相关的消息
  /var/log/secure   记录与访问限制相关的安全消息
DHCP服务 动态主机配置协议,用来简化主机地址分配管理 服务端软件:dhcp
服务端服务名:dhcpd
主配置文件:/etc/dhcp/dhcpd.conf
tftp服务 简单的文件传输协议  服务端软件:tftp-server
服务端服务名:tftp
  默认共享数据路径:/var/lib/tftpboot

Apache 
搭建服务器
  1. 装包 httpd

  2. 配置 /etc/httpd/conf/httpd.conf 主配置文件

  3. 启服务 httpd

对其进行特殊要求的部署:
  1. 修改域名 --> vim /etc/httpd/conf/httpd.conf 中的 ServerName行

  2. 修改网页文件根目录 --> vim /etc/httpd/conf/httpd.conf 中的 DocumentRoot 

  3. 虚拟主机 --> 修改配置文件 /etc/httpd/conf.d/[自己设置虚拟主机配置的名字].conf

<virtualhost [IP,一般是*]:[端口,一般是80]>
ServerName [域名]
DocumentRoot [网络根目录]
</virtualhost>

  4. 设置权限(一般默认/var/www下所有子目录对所有人有访问权限,其他地方默认没有权限)--> 修改配置文件 /etc/httpd/conf.d/[自己设置权限配置的名字].conf ---> 设置SELinux的安全上下文值

<Directory [目录的绝对路径]>
  Require all granted | denied  # 全体禁止访问或者允许
  Require ip [IP]     # 只允许某IP访问
</Directory>

    **** 设置完权限要设置SELinux 的安全上下文值  
    chcon -R --reference=[目录a]  [目录b]  # 把a目录的上下文值给b目录

  5. 部署Python的动态页面 ---> 装包,修改 conf.d/[虚拟主机配置文件].conf 
    yum install -y mod_wsgi
    vim /etc/httpd/conf.d/[虚拟主机的配置文件]

<VirtualHost *:80>
  WsgiScriptAlias  [客户端网络路径]    [服务器实际原始路径]
</VirtualHost>

  6. 修改端口 ---> 修改配置文件vim /etc/httpd/conf.d/[虚拟主机的配置文件] --->修改SELinux的开发端口
    vim /etc/httpd/conf.d/[虚拟主机的配置文件]

Listen 8909
<VirtualHost *:8909>
  WsgiScriptAlias [客户端网络路径]    [服务器实际原始路径]
</VirtualHost>

    semanage port -l | grep http
    semanage port  -a  -t  http_port_t  -p  tcp 8909

注意:
   1. 每次修改配置文件都要重启服务
   2. 虚拟主机存在的时候,直接用IP,会调用第一个虚拟主机的信息,客户端调用的时候,出现端口不匹配或者域名不匹配,当中有一个不匹配时,会根据端口信息调用该端口中的第一个虚拟主机。
   3. 搭建Apache服务的时候,需要考虑的几个问题:1.部署的服务是否有权限  2. 修改到新的路径下,要设置权限并且修改目录的上下文值(部署到/var/www以外的地方)3. 设置SELinux的默认端口,并且配置文件中要写Listen(修改端口信息)

https 安全web 构建 
  1.装包 mod_ssl

  2.部署 
   网站证书、根证书 :/etc/pki/tls/certs/
   私钥 : /etc/pki/tls/private/

  3.修改配置文件 /etc/httpd/conf.d/ssl.conf 59-60、100、107、122行

  4.重启httpd服务


FTP
  1.装包vsftpd

  2.重起vsftpd服务

  3.本机测试验证
  curl ftp://172.25.0.11

  4.默认vsftpd共享路径 /var/ftp/


邮件服务器
  1.装包 postfix

  2.配置 /etc/postfix/main.cf

  3.启服务 systemctl restart postfix

  发邮件 echo '[邮件内容]' | mail -s '[邮件标题]' -r [发件人] [收件人]
  收邮件 main -u [用户]


samba服务
搭建服务端:
  1.装包 samba

  2.创建用户 A ,并且加入samba服务
   useradd [用户]
   pdbedit -a [上面创建的用户]  --->  交互设置密码

  3.配置 /etc/samba/smb.conf
    最后加入

[名字]
 path = [共享目目录]
 write list = [允许读写的用用户名]

  4.关闭防火墙,设置seliux的布尔值
    getsebool -a | grep samba
    setsebool samba_export_all_ro (samba_export_all_rw) on

  5.启服务smb

搭建客户端:
  1.装包cifs-utils

  2.挂载 mount -o user=[用户],pass=[密码] //[IP]/共享名字  /[挂载点]
    永久挂载文件书写

//[IP]/共享名  [挂载点] cifs defaults,user=[用户名],pass=[密码],_netdev 0 0

nfs共享
搭建服务端
  1.装包 nfs-utils

  2.配置 /etc/exports
/[共享目录]  [共享给的IP,也可以是网段](ro)   #只读共享
/[共享目录]  [共享给的IP,也可以是网段](rw)   #读写共享

  3.启动服务nfs-server

  4.如果是做读写,需要给共享目录赋权
    chown  :nfsnobody  /[共享目录]
    chmod  g+s  /[共享目录]

搭建客户端
  挂载 mount [IP]:/[共享路径]  [挂载点]
  永久挂载
[IP]:/[共享路径]  [挂载点]   nfs   defaults,_netdev 0 0


iscsi
搭建服务端
  1. 分区,从磁盘中分一个区(fdisk),不用格式化。

  2. 关闭防火火墙

  3. 装包 targetcli

  4. 配置  targetcli(里面创建5个模块)
/> backstores/block  create  name=[名字] dev=[磁盘]
/> iscsi/  create  [iqn命名,作为iscsi的名字]
/> iscsi/[tab键]/tpg1/luns  create  /ba[tab键]4
/> iscsi/[tab键]/tpg1/acls  create  [iqn命名,用用于验证用用户名] 5
/> iscsi/[tab键]/tpg1/portals  create  [本机用用于传递的IP] ip_port=[端口号,默认为3260]

  5.重启服务 target

搭建客户端
  1. 装包 iscsi-initiator-utils

  2. 配置 /etc/iscsi/initiatorname.iscsi 验证用户名
    (可以用用man iscsiadm中的example来找)
   iscsiadm --mode discoverydb --type sendtargets --portal [IP] --discover  配置选择服务端的IP

  3. 启服务iscsid  iscsi


mariadb数据库

配置:
    装包: yum install -y mariadb-server
    起服务: systemctl restart mariadb

修改密码:
     mysqladmin -u [用户名]  [-p[旧密码]] password '新密码'

登录:
     mysql  -u  [用户名]  -p[密码]  -h  [IP或者localhost]     # -p后面没有空格 -h 指定以什么IP登陆

导入备份:
     mysql -u [用户名] -p[密码] [库] < [文件]

基本操作:
   show databases  查看所有库的基本信息
   use database [库名]    前往某个库
   show tables    查看库中的表的基本信息

   对用户创建并赋权
   grant [增删改查的权限] on [库].[表] to [用户名]@[登陆IP] identified by [密码];

   对表进行查找
   select [表1].[表中数据的字段1],[表2].[表中数据的字段2]……  from  [表1],[表2]……  where [表].[字段] = '' and ……;

   对表进行删除
   delete from [表1],[表2]……  where [表].[字段] = '' and ……;

   对表进行增加
   insert into [表] values ('[按照表的要求写入数据1]','[按照表的要求写入数据2]' …… );

注意点:
   1. mariadb 进去数据库的命令是mysql  , 设置密码是 mysqladmin
   2. ***注意登录或者改密码时候-p后面要紧跟密码,不能有空格
   3. mariadb 数据库中,每个语句要家;
   4. 增删改查中where用于设置条件,其连接方式是and,其他是用[ , ]  所以要注意分开记忆。


DNS

DNS服务器

  1.搭建DNS:
      装包: bind bind-chroot
      配置: 主配置文件/etc/named.conf
            地址库文件 /var/named/*
      起服务: named

  2.多区域DNS, 主配置文件中写多个zone, 每个对应创建一个地址库文件

  3.特殊解析:
      轮询 : 地址库文件中同样的域名写多次,但是每次解析的IP不一样,第一次有客户段请求解析的时候,DNS会返回第一个IP,第二个来的时候会返回第二个,以此类推。
      泛域名 : 用通配符*代表地址位
      别名 : CNAME 

  4.子域授权:
    在两个服务器上搭建DNS,其中一个是父域,一个是子域,父域中把子域的信息录入

  5.递归解析:
    默认开启

  6.每个Linux 都有个文件/etc/hosts 这文件也可以解析DNS,他解析优先级高于DNS

  7.分离解析 让不同用户解析的结果也不一样

  8.缓存服务器

DNS服务器的配置文件,总和:

如果是缓存DNS服务器,只有一个主配置文件,没有地址库文件:

options {
  directory       "/var/named";
  forwarders {  [缓存服务器查找的DNS服务器,一般是网络中的DNS服务器];  };
};

完整的正常DNS服务器:

   /etc/named.conf 主配置文件:

options {
  directory "/var/named";  #指定地址库文件存放位置
  recursion no;      #禁用递归解析,不写的话默认开启
};
 
acl "[acl名]" { [A的IP1];  [网段 如 192.168.110.0/24];  …………};     #类似变量
view  "[名字1]"  {						#用于分离解析
  match-clients {  [上面定义过的acl表];  };
  zone  "[域名1]"  IN  {
    type  [master/slaver];
    file  "[为A解析的库文件名]";
  };
  zone  "[域名2]"  IN  {
    type  [master/slaver];
    file  "[为A解析的库文件名]";
  };
};
 
view  "[名字2]"  {
  match-clients {  [B的IP1]; …………  };
  zone  "[域名1]"  IN  {
    type  [master/slaver];
    file  "[为B解析的库文件名]";
  };
  zone  "[域名2]"  IN  {
    type  [master/slaver];
    file  "[为B解析的库文件名]";
  };
};
 
view  "[名字3]"  {
  match-clients {  [any代表所有];  };
  zone  "[域名1]"  IN  {				#两个zone代表多区域DNS
    type  [master/slaver];
    file  "[为其他解析的库文件名]";
  };
  zone  "[域名2]"  IN  {
    type  [master/slaver];
    file  "[为其他解析的库文件名]";
  };
};

PXE 自动装机

  思路:dhcp--->tftp--->安装清单--->菜单目录--->rpm包共享--->自动应答

1.DHCP 配置
  装包:dhcp
  配置:/etc/dhcp/dhcpd.conf
subnet  [网网段].0  netmask  255.255.255.0    {        # 分配的网段
  range [IP- 起点 ]  [IP- 终点 ];                # 分配 IP 地址范围
  option  domain-name-servers [DNS 服务器器 IP];        # 分配的 DNS 服务器
  option  routers  [ 网网关 IP];                # 分配的网关地址
  default-lease-time  600;
  max-lease-time 7200;
  next-server 192.168.4.7;                      # 指定下一服务器IP地址
  filename "pxelinux.0";                        # 指定网卡引导文件名称
}

2.搭建tftp
  装包:tftp-server
  启服务: tftp
  部署 pxelinux.0 文件 :
    yum provides */pxelinux.0 #查询仓库中哪个包产生改文件
    yum -y install syslinux
    rpm -ql syslinux | grep pxelinux.0 #查询安装清单
    cp /usr/share/syslinux/pxelinux.0  /var/lib/tftpboot/   #将文件拷⻉到tftp下

3,部署菜单文件 : /var/lib/tftpboot/pxelinux.cfg/default
  部署菜单文件中需要的模块
  图形的模块 vesamenu.c32
  背景图片 splash.png
  启动内核 initrd.img
  驱动程序 vmlinuz
  修改菜单文件: cp  isolinux/isolinux.cfg -O /var/lib/tftpboot/pxelinux.cfg/default    (day19)

4.搭建web或者ftp共享

5.自自动问答
  装包:system-config-kickstart
  修改本地yum源:把标识修改为[development]
  运行:system-config-kickstart
  利用web或者ftp共享应答文件
  修改菜单文件指定应答文件
  菜单文件核心模块:
label    linux
  menu  label  Install  RHEL7                        # 菜单选项显示内容
  menu  default                                    # 读秒结束默认选择
  kernel  vmlinuz                                    # 加载内核
  append  initrd=initrd.img  ks=http://192.168.4.7/ks.cfg        # 加载驱动,指定问答文文件

实现PXE网络批量装机需要具备哪些条件,各组件的作用,如何实现无人值守安装?
  DHCP服务器:为客户机提供IP地址等参数,并告知下一个服务器地址、启动文件名
  TFTP服务器:为客户机提供启动文件、启动菜单配置、用来安装系统的内核及初始镜像文件
  yum软件仓库:通过HTTP或FTP方式为客户机提供安装树资源(RHEL7光盘目录结构)
  实现kickstart无人值守安装:
    1)提前准备一份安装过程中所涉及问题的答案清单(即应答文件)
    2)然后将此文件部署到客户机可下载的位置
    3)通过修改pxelinux.0的启动配置,使客户机装系统时自动调用应答文件实现面交互


Cobbler自动装机
  
  这网络自动装机,和PXE差不多,原理也一样,只是把PXE做了一个封装,让我们实现更轻松,不过相对而言,个性化设计会比PXE复杂,总体思路还是比较简单:装包、配置主配置文件和dhcp文件、部署引导文件(直接解压)、然后依次启4个服务。

  0. 搭建一台CentOS服务器,完成网络配置、yum仓库的配置、关闭防火墙和SELinux

  1. 装包 解压zip压缩包,并安装里面的rpm包
    unzip  Cobbler.zip -d /opt
    unzip /opt/Cobbler/cobbler.zip -d /opt
    yum install -y /opt/cobbler/*

  2. 配置 修改配置文件/etc/cobbler/settings

next_server:   [本服务器的IP]     #设置下一个服务器还为本机
server:   [本服务器的IP]          #设置本机为cobbler服务器
manage_dhcp:   1                #设置cobbler管理dhcp服务
pxe_just_once:   1              #防止客户端重复安装操作系统

   配置 cobbler的dhcp文件: /etc/cobbler/dhcp.template 
   把文件中的网段修改成服务器的网段,用全文替换的方法噶
    :%s  /192.168.1/[网段,即IP的前三个字段]/g    #全文替换

  4. 部署引导文件 
     在原来解压的大压缩包中有引导文件包 cobbler_boot.tar.gz
    tar -xPf  /Cobbler/cobbler_boot.tar.gz   #绝对路径释放

  5.启动相关服务 cobblerd ---> httpd ---> tftp ---> rsyncd(同步服务)

  6.同步刷新cobbler配置
    cobbler sync   #检测配置是否正确
     当出现 *** TASK COMPLETE ***  代表搭建成功

  7. 光盘部署和个性化修改

     挂载光盘到挂载点,再使用下面的命令,导入数据,导入后可以取消挂载重新再挂一个,重复操作,实现多操作系统搭建:
    cobbler import  --path=挂载点   --name=导入系统命名(随意起)  #导入安装镜像数据

    cobbler list    #查看有哪些系统
    cobbler profile remove --name=CentOS7-x86_64  #删除菜单信息
    cobbler distro remove --name=CentOS7-x86_64   #删除镜像信息
  
     如果想自定义部署ks应答文件,system-config-kickstart生成ks文件,并且放到指定的目录下:/var/lib/cobbler/kickstarts/,再部署进去:
    cobbler profile edit --name=[list查到的菜单名字]  --kickstart=/var/lib/cobbler/kickstarts/自定义.cfg

猜你喜欢

转载自blog.csdn.net/Yu1543376365/article/details/82226963