虚拟环境准备

1、Linux创始人:林纳斯.托瓦兹

远程连接工具
teamviewer 、向日葵

2、常见Linux发行版本:六大发行版本
          CentOS、Ubuntu、red-hat、Debian、openSUSE、Linux Mint
          
3、实验环境安装虚拟机VMware
     生产环境虚拟机系统安装方法:
   ①U盘方式(下载镜像,开启启动设置为   U盘启动U盘做成启动盘 rufus(linux))
     语言,安装方式(最小化,图形化)、分区(boot 500M、swap)、打开网络、Kdump、密码、用户
   ②PXE批量部署方式
   ③虚拟化环境

4、虚拟机安装种类:最小化安装、图形化安装

5、思考Linux能做什么
     Linux:开源,免费,稳定性和安全性高,服务器领域,95% linux centos (7) 最新 centos8
     windows: 闭源,收费,娱乐影音,办公

6、 分区方案
    规范的分区方案
    / 根分区
    swap 交换分区,虚拟内存,当内存耗尽时,把硬盘当内存用
    /boot 存放启动文件,例如内核kernel
    面试题:
     Linux至少应该哪两个分区? 错误
     Linux至少应该哪一个分区? 正确
    KDUMP:黑匣子,建议关闭
    网络:1000Mb/s 每秒1000Mbit 1000/8=125M/s
    实际网速要除以8,受物理线路等原因限制

7、IDC(互联网数据中心)Internet Data Center
    提供整机租用、机柜租用、机房租用、服务器托管
    提供了一种高端的数据传输服务,减少了资源投入、降低了传统企业的上云门槛
    物理服务器分类:塔式服务器、机架式服务器、刀片式服务器

8、云服务器:快速实现部署
    目前IP地址分为公网IP地址 私网IP地址
    云服务器能否申请多个IP?
        云服务器根据用户选择不同的线路会配备不同数量的IP地址。 单线路默认赠送一个独立IP,双线路二个独立IP;因增加IP造成带宽无法限制,暂时不予增加IP。
  政府使用中标麒麟操作系统
     用户可以选择安装操作系统么? 
         可以。云主机在产品使用形态上与传统的物理服务器并没有明显的差别,用户可以根据自己的需求灵活变更自己的操作系统。
    亚马逊云是云计算鼻祖
    国内最早的是阿里云
   
9、华为云、阿里云服务器购买及使用:
     华为云官网:https://huaweicloud.com
     阿里云官网:http://aliyun.com
     免费领取:
     选择地域:北京、上海
     操作系统:Linux
     系统镜像:CentOS 7 7.6
     创建云服务器(创建实例):(华为云,有钱就行)
     云服务器简称:ECS
     云服务器的IP地址:
     云服务器用户名:root
     云服务器密码
     SSH:远程登陆协议,默认端口号22
     远程登陆工具:可以远程链接云服务器
     finalshell免费的开源的
     xshell付费的

10、Linux基础命令重点练熟
    ①命令提示符
          [root当前登陆的账户@分隔符localhost当前主机名~当前工作目录]# 表示root(超级管理员)用户
       $ 表示普通用户
    ②命令使用方法

     ip a  查看ip地址

     ping + ip地址 检测连通性(检测主机是否存活) 
     ctrl+c中止当前命令

     ssh +ip地址
     exit退出

     ls查看命令
     以查看目录下的内容,ls后面是空目录或者是文件时,显示空目录和文件本身,主要用来查看目录和文件的权限和属主等详细信息
     ll     文件名 查看文件的权限和属主详细信息
     ll -d 目录名 查看目录的权限和属主详细信息
     ls查看当前目录下的内容,相当于打开一个文件夹
     ls -a当前目录下的全部内容(包括隐藏内容)
     ls -l详细地查看当前目录下的全部内容
     ls -l的作用等同于ll
     ls -lh人性化显示,把文件的大小加单位表示(未实现)
     ls --help命令帮助手册
     ls -d /root/Desktop根下的root目录下有一个Desktop目录,查看的是此绝对路径目录的本身,目录列出目录本身,而不是目录的内容(多此一举的操作,直接用pwd打印当前目录即可)
     ls -dl /root/Desktop查看的是这个目录本身的详细信息 等同于ll -d
     ls -l /opt/查看的是opt这个目录下的详细信息
     ls -lh /opt/人性化显示opt目录下的详细内容
     ls a* 列出含a 的开头所有,隐藏文件除外
     ls | grep “^a”  过滤列出以a开头的全部文件,不包括隐藏文件,被筛选字段变色
 
 date日期显示命令
     date显示当前日期和时间方式1
     date +%y%m%d%H%M%S显示方式  (minute、second)
     date +%D显示方式3
     date +%F显示方式4
     date -s 9:43设置当前时间为9:43

cd路径切换命令
     cd~回到家目录cd
     cd /opt/从当前目录到opt目录
     cd -切换到上一次去过的目录
     cd ..返回上一级目录

11、虚拟机终端中的快捷键
      ctrl+shift+t     打开终端、打开/切换标签
      利用alt+数字快捷键切换标签
      ctrl+加号(shift) 字体放大
      ctrl+减号字体缩小
     
      复制,按鼠标滚轮粘贴
     
     bash  命令处理器
     Bash是一个命令处理器,通常运行于文本窗口中,并能执行用户直接输入的命令。Bash还能从文件中读取命令,这样的文件称为脚本。
     shell  命令解析器
      在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(命令解析器)。它类似于DOS下的command.com和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。
     
      输入命令(bash)的快捷键
       Ctrl + a  :移到命令行首(home)
       Ctrl + e  :移到命令行尾(end)
       Alt + .:打印以空格为分隔符的,之前执行过的命令的最后一部分 (打印上一条命令的最后一个参数等同于!$)(在虚拟机里面可以)
       history 查看执行过的历史命令
        Ctrl + l:清屏  clear
        Ctrl + c:终止命令   
        Ctrl + z:挂起命令
        
         C中止Z挂起空格翻页回车翻行
        
        
        
     加电自检MBR引导GRUP菜单选择
     加载内核、systemd和启动级别文件
     运行初初始化脚本启动开机自启服务 
     运行mingetty进程显示登陆界面
     
     init 0 ===shutdown now
     init 3 从图形化切换到最小化
     init 5 从最小化切换到图新化
     init 6 reboot
       
12、linux的启动流程
• 加电自检
检查服务器的硬件是否正常,在此期间会有指示灯闪烁。
• MBR引导
读取磁盘的MBR存储信息记录,引导系统启动
• GRUP菜单
选择启动的内核/进行单用户模式重置密码
这里可以选择不同的系统登录
• 加载系统内核信息
可以更好地使用内核控制硬件
• 系统的第一个服务(进程)开始运行systemd(并行)
服务启动的时候,同时一起启动。
• 加载系统启动级别文件 /etc/systemd/system/default.target
图形化、最小化
默认是multi-user
• 初始化脚本运行
初始化系统主机名称和网卡信息
• 启动开机自启的服务
/etc/systemd/system:加载此目录中的信息实现服务开机自启动
• 运行mingetty进程
显示开机登录信息界面

扩展:
lrwxrwxrwx  1 root root  15 Oct 15  2019 /usr/lib/systemd/system/runlevel0.target  关机
lrwxrwxrwx  1 root root  13 Oct 15  2019 /usr/lib/systemd/system/runlevel1.target
lrwxrwxrwx  1 root root  17 Oct 15  2019 /usr/lib/systemd/system/runlevel2.target 
lrwxrwxrwx  1 root root  17 Oct 15  2019 /usr/lib/systemd/system/runlevel3.target  最小化界面
lrwxrwxrwx  1 root root  17 Oct 15  2019 /usr/lib/systemd/system/runlevel4.target
lrwxrwxrwx  1 root root  16 Oct 15  2019 /usr/lib/systemd/system/runlevel5.target  图形化界面
lrwxrwxrwx  1 root root  13 Oct 15  2019 /usr/lib/systemd/system/runlevel6.target  reboot

init 0 ===shutdown now
init 3 从图形化切换到最小化
init 5 从最小化切换到图新化
init 6 reboot

/etc/systemd/system/default.target 默认的开机运行级别配置文件:
图形化界面默认的引导配置文件
[Unit]
Description=Graphical Interface
Documentation=man:systemd.special(7)
Requires=multi-user.target
Wants=display-manager.service
Conflicts=rescue.service rescue.target
After=multi-user.target rescue.service rescue.target display-manager.service
AllowIsolate=yes
最小化界面默认的引导配置文件
[Unit]
Description=Multi-User System
Documentation=man:systemd.special(7)
Requires=basic.target
Conflicts=rescue.service rescue.target
After=basic.target rescue.service rescue.target
AllowIsolate=yes

/etc/fstab 开机自动挂载
/etc/rc.local 开机自动运行的命令

systemctl enable httpd

目录结构、文件操作、Vim

1、pwd打印当前目录,就是直接显示当前所在位置的绝对路径
     mkdir +目录路名      创建一个新目录
     rm +文件或者目录路径名      删除目录
     which+命令    查询命令所在目录
     echo $RANDOM       打印一个随机数
     ~ 当前账户的家目录
     /  根目录
     # 表示root(超级管理员)用户
     $ 表示普通用户
      # cp -v file1 !$代替表示上次执行过的命令的最后一个参数

2、堡垒机:
        堡垒机,即在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的入侵和破坏,而运用各种技术手段实时收集和监控网络环境中每一个组成部分的系统状态、安全事件、网络活动,以便集中报警、及时处理及审计定责。
        跳板机的作用:保障网络和数据不受来自外部和内部用户的入侵和破坏
        堡垒机的功能:登陆功能、账号管理、身份认证、资源授权、访问控制
        
3、Tab键补全命令功能
     快捷键的使用
     
 4、帮助命令
    help、man手册
    --help
    [  ]     表示可选项,即需要则用,不需要不用
    { }     表示必选项,即里面的选项为必用
    根据需求选择命令后面的命令参数
    a|b的意思是a或者b只能选其中一个             
    {a | b}   意思是a或b必选一个 ​              
    [a | b]    意思是要么一个不选,要么选a或b其中一个
    <>    这个符号有些特殊,有些命令中是必选,但是有些命令中是可选
    ...     表示多个,此符号前面是什么就是多个什么,比如:file...那就表示多个文件
    man手册
    man手册有九大分类
    man 1   一般命令
    man 5   配置文件
    man 8   系统管理相关命令
    man -f   查看当前命令有几种man手册
    man手册的快捷键的使用,空格翻页,回车翻行
 
 5、Linux目录结构功能
      linux: 以单根的方式组织文件,像一个倒挂的树,蓝色的是默认存在的目录
    Which命令查看所在目录
    echo $RANDOM打印一个随机数
    根下的目录
     bin   etc   lib64  opt   run   sys  var
     boot  home  media  proc  sbin  tmp
     dev   lib   mnt    root  srv   usr
• usr目录:用于存放用户安装的程序和系统程序
    系统文件,相当于C:\Windows
    /usr/local 软件安装的目录,相当于C:\Program
    /usr/bin 普通用户使用的应用程序,等同于根下的bin
    /usr/sbin 管理员使用的应用程序,等同于根下的sbin目录
    /usr/lib 库文件Glibc 32bit,等同于根下的lib
    /usr/lib64 库文件Glibc 64bit,等同于根下的lib64
• boot 存放启动文件
• etc 存放系统管理和配置文件
    /etc/sysconfig/network网卡配置    
    /etc/hostname用户名配置
    /etc/ssh/ssh_config远程连接配置
    /etc/passwd     /etc/shadow      存放所有用户的用户名和密码
• tmp 正在执行的进程文件临时存放位置
• var 存放运行时需要改变数据大小的文件,也是某些大文件的溢出区
    /var/lib/mysql数据库
    /var/spool/mail邮件
    /var/log/messages日志
• bin 普通用户的二进制可执文件
• sbin 管理员用户的二进制可执行文件
• dev 终端设备文件,里面的null是一个无底洞的垃圾回收机制
    /dev/null  垃圾回收      
    /dev/random 产生随机数
    echo $RANDOM       打印一个随机数
    /dev/zero 零设备文件
• home 普通用户的家目录,Base地==入职公司城市地址
• root 超级用户家目录
• mnt 默认空目录,用于挂载
• opt 默认空目录
• proc 与内核有关的虚拟文件系统,反映出来的是内核,进程信息或实时状态
         Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口
      [root@yumanzhuang ~]# cat /proc/cpuinfo     存放cpu信息
      [root@yumanzhuang ~]# cat /proc/meminfo   存放内存信息

 6、文件定位路径
     路径的作用:定位文件   绝对路径(以根开始的目录),相对路径(以当前目录开始)
    cd 绝对路径 cd /home/alice从根目录写
    cd 相对路径 cd Desktop/abc从当前目录开始写,往下写,不需要写出当前目录  
    
 7、文件管理之:创建/复制/移动/删除
 
     文件的创建 touch + 文件名路径名
     touch 没有 v、f 参数
     目录的创建 mkdir+[参数]+目录路径名
     mkdir的参数
     -v  显示创建过程,系统会有创建成功的过程提示
     -p  递归创建,路径上没有的父目录会被自动创建
     mkdir -pv 文件路径名
     
     文件和目录的复制 
     复制文件:
     cp     源文件  目的地
     复制目录:
     cp -r  源目录    目的地 
     源目录可以有多个,目的的只能有一个
     cp+[参数]+源文件+目的地
     cp的参数
     -v  显示创建过程,系统会有复制成功的过程提示
     -f   强制复制
     文件的复制:cp -v  源 目
     目录的复制:cp -rv 源 目    显示目录复制过程
                        cp -rf 源 目    强制复制命令
                        cp -rvf
     # cp -v file1 !$代替表示上次执行过的命令的最后一个参数
     [root@xingdian ~]# cp -rv /etc/sysconfig/network-scripts/ifcfg-eth0{,-org}(逗号前面的空代表它本身,ifcfg-eth0改名为ifcfg-eth0-org)
     
     文件和目录的剪切mv,不区分文件和目录
     mv  源文件/源目录  目的地
     -v  显示创建过程
     -f  强制覆盖移动
     源文件/源目录可以有多个,目的地只能有一个
     # mv file4 file5 将file4重命名为file5,当前位置的移动就是重命名
     
     路径存在则正常复制剪切,路径不存在则进行重命名操作
     
     文件和目录的删除 rm
     -r 递归
     -f force强制
     -v 详细过程
     rm -rf /* 不能执行(删根跑路)*代表所有
     rm -rf ./* 只要不是根目录都可以执行  (删除当前目录下的全部内容).代表当前
     rm -rf file*   (删除以file开头的全部内容,不包括隐藏文件)
     rm -rf *(全部).(隐藏文件)pdf    (删除以.pdf结尾的全部内容,包括隐藏文件)
    
     touch     文件路径名
     mkdir -v 目录路径名
     cp -v  文件源路径 文件目的路径
     cp -rv 目录源路径 目录目的路径
     mv -v 文件目录源 文件目录目的
     rm -rvf  文件目录路径名
          
8、文件管理之:查看文件内容,有则打开,无则新建一个空白文件
     cat +文件路径名  正序查看文件所有内容
     cat+-n+文件路径名   显示行号查看
     head+文件名路径名  默认显示前十行     head -5 passwd查看前五行
     tail   +文件名路径名  默认显示后十行        tail -5 passwd查看后五行
     tailf 实时显示文件尾部
     tailf ==tail -f    删除后不能再实时查看
     tailf -F             删除后恢复可以继续实时查看
     grep 针对文件内容进行过滤 
     grep 'root' /etc/passwd(精准匹配,过滤查看root字段) 
     grep '^(以root开头的)root' /etc/passwd
     grep 'bash$(以bash结尾的)' /etc/passwd
     
9、重点vim编辑器,四个,命令模式、插入模式、尾行模式(扩展命令模式)、可视块模式
     命令扩展模式
     :set nu 设置行号
     :set nonu 取消设置行号
     永久的环境:修改vim环境配置文件
     vim /etc/vimrc 影响所有系统用户
     vim ~/.vimrc    影响当前账户
     
     vim:
     文件编辑器 gedit 文件编辑器 vi, vim
交互 vi vimvim比vi功能多,增加字体色彩
yum -y install vim安装vim
非交互式 sed(了解)
vim的几种模式、插入模式、命令模式、尾行模式(扩展命令模式)、可视块模式


如果说我vim后面跟的文件存在,默认先查看,如果说我打开的这个文件不存在,那个他会自动创建.

最简单的使用流程(编辑一个文件)
i:打开文件的时候,输入i会立即变为插入模式,编辑完文件后,esc会退出插入模式.输入冒号wq保存并退出

命令模式:光标定位,文本编辑
a. 光标定位
home  将光标定位到所在行的行首  0 
end    将光标定位到所在行的行尾   $
gg 将光标定位到首行
G 将光标直接定位到最后一行

3G 进入第三行
5G
10G

b. 文本编辑(少量)
y 复制 yy(复制当前一行) 3yy(复制当前往下三行) ygg (复制当前行到首行)yG(复制当前行到尾行) (以行为单位)
d 删除 dd(删除当前一行) 3dd(删除当前往下三行)dgg (删除当前行到首行)dG(删除当前行到尾行)(以行为单位)
p 粘贴
x 删除光标所在的字符
D 从光标处删除到行尾(删除的是这一行)
u undo撤销
r 可以用来修改一个字符

c.搜索:命令模式下,输入/,后加要搜索的内容,查找到的内容会被加底色
按着n进入下一个匹配项

插入模式
作业:
进入到插入模式: i a o I A O  (这几个进入插入模式的区别)
a   光标在第一行第二个字符上
A   光标在第一行最后一个字符后
i    光标在第一行第一个字符上
I    光标在第一行第一个字符上
o    第二行自动回车,光标在行首
O   第一行自动回车,光标在行首
a 进入插入模式
i 进入插入模式
o 进入插入模式
A 进入插入模式


v 进入可视模式 (可视块  可视行)
ctrl+v 进入可视块模式,可视块就是以列为单位进行选择
shift+v进入可视行模式,可视行就是以行为单位进行选择
可视块模式 :
块插入(在指定块前加入字符): 选择块,I 在块前插入字符,2次 ESC
块替换: 选择块,r 输入替换的字符
块删除: 选择块,d
块复制: 选择块,y

: 进入末行模式(扩展命令模式)
vim /vi 只能编辑文件(当遇到目录的时候,立刻强制退出)
a. 保存退出
:10 进入第10行
:w 保存
:q 退出
:wq 保存并退出
:w! 强制保存
:q! 不保存并退出
:wq! 强制保存退出

b. 查找替换
:范围 s/old/new/选项
s///
s###
:1,5 s/root/yang/ 从1-5行的root 替换为yang
:5,$ s/root/yang/ $表示最后一行
:1,$ s/root/yang/g = :% s/root/yang/g %表示全文 g表示全局
(g全部替换,没有g只替换每行的第一个)
:% s#/dev/sda#/var/ccc#g (s###)   
:,8 s/root/yang/ 从当前行到第8行
:4,9 s/^#/ / 4-9行的开头#替换为空
:5,10 s/.*/#&/ 5-10前加入#字符 (.*整行 &引用查找的内容)(.*表示当前行所有内容,&的作用是代替前面内容,这里代替.*)

c. 读入文件/写文件(另存为)
:w 存储到当前文件
:w /tmp/aaa.txt   另存为/tmp/aaa.txt   (另存为不会删除原来的文件,会出现两个文件)
:1,3 w /tmp/2.txt
:r /etc/hosts 读入文件到当前行后
:5 r /etc/hosts 读入文件到第5行后

d. 设置环境
临时设置:
:set nu 设置行号
:set ic 不区分大小写
:set nonu 取消设置行号
:set noic
永久的环境:修改vim环境配置文件
/etc/vimrc 影响所有系统用户
~/.vimrc 影响某一个用户
# vim ~/.vimrc
set ic
set nu

账户和组

1、文件类型和文件系统
     Linux七大文件类型
     - 普通文件
     d 目录文件
     b 设备文件(块设备)
     c 设备文件(字符设备)
     s 套接字文件(端到端通讯)
     p 管道文件
     l 链接文件(相当于windows快捷文件)
    文件系统
     ext3 ext4 CentOS 6\7
     xfs CentOS 8
     fat32  NTFS   Windows
     
2、Linux中的三种用户
    超级管理员用户
    普通用户
    系统用户(伪用户)
    超级用户(管理员):享有最高权限,具备系统中的所有权限(一般为root),UID为0
    普通用户:有权限限制只能对自己目录下的文件进行操作可以登录系统,UID>=500(6) UID>=1000(7)
     系统用户:别称“伪用户”,无法登录系统,一般系统默认持有如bin,nobody等,其主要作用是支撑系统运行,方便系统管理,UID为1-499(6)、1-999(7)
    
3、系统上的每个进程(运行的程序)都是作为特定用户运行的
     每个文件是由一个特定的用户拥有
     访问文件和目录受到用户的限制(权限管理)
     与正在运行的进程相关联的用户确定该进程可访问的文件和目录
     
4、用户和组的管理(重点)
     新建用户和组只能由管理员完成普通用户要想新建用户和组必须有管理员权限,即对用户进行提权操作
     创建用户会自动创建UID(不能存在)GID(已经存在)
     reboot  重启虚拟机命令
     [root@xingdian ~]# id   查看的是当前登录账户的id信息
     uid=0(root)  gid=0(root)  组=0(root)                        
     主属组 (创建用户的时候自动生成主组)            
     附属组(后来加入的组)
     uid 系统用来识别账户的数字标识 
     gid 系统用来识别组的数字标识

     用户切换命令su - sunlizhen 
                       su -l sunlizhen
     [root@yumanzhuang ~]# cat -n /etc/passwd
     [root@yumanzhuang ~]# cat -n /etc/group
     [root@yumanzhuang ~]# cat -n /etc/shadow
     [root@yumanzhuang ~]# id
     [root@yumanzhuang ~]# id chen
     [root@yumanzhuang ~]# whoami
     [root@yumanzhuang ~]# groups root
     
     [root@xingdian ~]#cat /etc/passwd 查看用户信息,用户信息存放在/etc/passwd下
     [root@xingdian ~]#cat /etc/passwd | grep user  过滤查看user用户信息
     [root@xingdian ~]#cat /etc/group  查看组信息,组信息存放在/etc/group下
     [root@xingdian ~]#cat /etc/group | grep group   过滤查看group组信息
     [root@xingdian ~]#cat /etc/shadow   查看组密码文件
     [root@xingdian ~]#id  查看的是当前登录账户的id信息
     [root@xingdian ~]#id user1  查看user1这个账户的id信息
     [root@xingdian ~]#whoami 查看我现在所使用的账户   
     [root@xingdian ~]#groups user 查看用户所属组   
     
     创建用户和组
     用户:useradd+[参数]+用户名称    参数  d(家目录)、u(uid)、g(gid)、c(指定描述字段)、s(指定登陆shell)
     组   :groupadd+[参数]+组名         参数  g指定GID  
     
     修改用户和组 
     用户:[root@xingdian ~]# vim /etc/passwd 用vim编辑器直接编辑
              usermod+[参数]+用户名称   参数  d、u、g、c、s、l
              -l   新  旧
              [root@xingdian ~]# usermod -l user9 user8(user8改名为user9)
     组   :groupmod+[参数]+组名     参数g修改gid  参数n修改组名
              -g   新  旧
              [root@xingdian ~]#groupmod -g 2000 grp1
              [root@xingdian ~]#groupmod -n grp3 grp1  改名
              
       用户的参数:d、u、g、c、s、l
       组的参数:g、n
             useradd sunlizhen -G wheel   主组不覆盖
            useradd sunlizhen -g wheel   覆盖主组
             [root@sun mnt]# useradd huhu -G wheel
             [root@sun mnt]# id huhu
             uid=1009(huhu) gid=1009(huhu) 组=1009(huhu),10(wheel)
             [root@sun mnt]# useradd haha -g wheel
             [root@sun mnt]# id haha
             uid=1010(haha) gid=10(wheel) 组=10(wheel)
     用户添加附加组,组添加用户
     用户添加附加组            usermod -G
      -g     覆盖主组
      -G    没有附加组,添加附加组,已经有附加组,会给账户修改附加组
      -aG  添加一个附属组,原来的附加组不会被覆盖
      修改附加组不会改变账户创建时自动创建的主组,并且用户如果原来有多个附加组,G参数会将原来的多个附加组全部覆盖
    [root@xingdian ~]# usermod -G grp3 user11  (给user11修改一个附加组,grp3)
    [root@xingdian ~]# usermod -aG grp3 user11  (给user11添加一个附加组,user11cat)
    把账户添加到组里         gpasswd -a
    [root@xingdian ~]# gpasswd -a user10 group1
    同时添加多个用户到组:gpasswd -M
    [root@xingdian ~]# gpasswd -M jim,tom,wing group1(多个账户用逗号隔开)
    把用户从组中删除:      gpasswd -d   
    [root@xingdian ~]# gpasswd -d user10 group1
    
     删除账户和组
     删除账户  userdel -r 账户名称
     [root@xingdian ~]#userdel -r 用户名称
     记得加上r参数
     -r 连带个人信息(家目录,个人邮箱)一起删除
     删除组    groupdel+组名
    [root@xingdian ~]# groupdel 组名
    用户的主属组不能删除
    
     账户的密码   密码信息存在/etc/shadow
     账户的密码   
      passwd 默认是个当前账户设置密码(交互式)
      passwd +用户  指定用户设置密码
      非交互式(脚本)
      [root@localhost kobe]# echo "123" | passwd --stdin 账户名
         
5、普通用户提权操作
      [alice@xingdian ~]$ useradd u1
     -bash: /usr/sbin/useradd: 权限不够
      [alice@xingdian ~]$ su - root
      password:
      [root@xingdian~]# useradd u1
      方式一:轮子组
      Running commands as root with sudo
      passwd yangyang
      [root@xingdian ~]# useradd yangyang -G wheel
      [root@xingdian ~]# id yangyang
      uid=504(yangyang) gid=504(yangyang) 组=504(yangyang),10(wheel)
      [yangyang@xingdian ~]$ useradd gougou10
      -bash: /usr/sbin/useradd: 权限不够
      [yangyang@xingdian ~]$ sudo useradd gougou10

      方式二:visudu修改
      [root@xingdian ~]# visudo 
      ## Allow root to run any commands anywhere
      root    ALL=(ALL)       ALL
      yingxishi ALL=(ALL)     ALL

     忘记密码操作
     shutdown now立即关机
     重新开机界面按下 e
     下翻找到utf-8
     在utf-8后面输入rd.break console=tty0
     按下ctrl+x
     输入mount -o rw,remount /sysroot
     在输入chroot /sysroot
     输入passwd可以更改root账户密码
     vi /etc/selinux/config 编辑上面的文件 然后将selinux改为disabled
     exit
     reboot
     输入vim /etc/passwd可以更改root的shell权限
     exit
     reboot
     
1、创建一个员工用户为张三,创建一个,hr的组,并设置这个账户属于hr组
     useradd zhangsan
     groupadd hr
     usermod -G hr zhangsan
     gpasswd -a zhangsan hr
2、创建一个账户,这个账户不能登录,不创建家目录
     useradd -s /bin/nologin -M yangyang               
     

文件和目录的权限

1、U、G、O权限
      
 
2、属主、属组权限设置
    chown:更改文件/目录的属主和属组
    语法结构:chown 属主.属组 文件/目录
     -R 递归(递归修改)-R可以在命令后也可以在命令中(递归修改就是该目录下所有目录属主、属组一起修改)
     [root@xingdian ~]# chown alice.hr file1 //改属主、属组
     [root@xingdian ~]# chown alice file1 //只改属主
     [root@xingdian ~]# chown .hr file1 //只改属组
     [root@xingdian ~]# chown -R alice.hr dir1
     chgrp:只能更改文件/目录的属组
     语法格式:chgrp 所属组 文件/目录
     [root@xingdian ~]# chgrp hr file1 //改文件属组
     [root@xingdian ~]# chgrp -R it dir1 //改文件属组
     
3、u、g、o  权限设置
     创建文件时默认权限是644  (umask默认022)
     创建目录时默认权限是755
     系统默认最大,文件的默认权限是666,目录的默认权限是777
     chmod u=rw,g=x,o= file
     chmod 610 file
     [root@xingdian ~]# chmod u+x file1 //属主增加执行
     [root@xingdian ~]# chmod u-x file1 //属主去掉执行
     [root@xingdian ~]# chmod a=rwx file1 //所有人等于读写执行
     [root@xingdian ~]# chmod a=- file1 //所有人没有权限(空格和-都可以)
     [root@xingdian ~]# chmod ug=rw,o=r file1 //属主属组等于读写,其他人只读
     umask掩码取反和666、777 进行与运算推算出当前umask掩码下创建出的文件和目录的权限
     父(当前)shell下查看和修改umask掩码
     [root@localhost ~]# umask              查看
     [root@localhost ~]# umask 001        修改
     子shell下修改umask掩码
     (umask 001 ; touch file1)
     ():代表的是当前shell的子shell
     ; :连接多个命令,子shell下的修改不会影响父shell
     
     总结:(目录都是777-umsk,文件需要在奇数位加1)
      umask值的每一位为偶数时:
     文件的权限计算方法:666减去umask值     666-022    644
     目录的权限计算方法:777减去umask值     777-022    755

     umask值有奇数时:
     文件的权限计算方法:666减去umask值,然后在结果的基础上,在umask的奇数位上+1
     目录的权限计算方法:777减去umask值,目录不影响
 
4、权限设置对文件和目录的影响
      
      rwx对文件的影响
      r:cat  head tail tailf  vim
      w:echo vim
      x:/ ./
      rwx对目录的影响
      r:ls
      w:rm、touch、mkdir、cp、mv
      x:cd
      echo “123” >> a.txt (验证写权限)
      ./c        相对路径执行文件命令
       /mnt/c     绝对路径的写法可以执行文件
      能够执行的文件称为脚本
      
      这里的用户指的是普通用户  读写执行权限对root无效
       对于文件来说 
      1. 读权限允许用户标识读取该文件;
      2. 写权限允许用户修改该文件;
      3. 执行权限允许用户标识执行该文件: 
        a. 对于一个不可执行的文件来说,拥有执行权限是没有任何意义的; 
        b. 如果文件是一个程序或者某种类型的脚本时,那么它就是可执行的 
      单独拥有读权限就可以cat查看文件内容
      单独拥有写权限  可以往文件中添加内容 只是不能查看添加的内容
      单独拥有执行权限  如果文件是二进制文件可以执行该文件
      拥有读 执行的权限,可以cat查看文件内容和执行该文件,但是不可以往文件中添加内容
      拥有写 执行的权限  不能cat查看文件内容,但是可以往文件中添加内容和执行该文件  
      拥有读 写的权限 可以cat查看文件内容,也可以往目录中添加文件
                                                                                                                                 
     对于目录来说
      1、读权限允许用户标识读取目录中的文件名,只能列举目录中的文件名,不能进入该目录,相应也不能查看目录下各文件的大小;
      2. 写权限允许用户标识修改目录(创建、删除、复制)下面的文件;
      3. 执行权限允许用户搜索该目录和切换到该目录下
      单独拥有读权限就可以ls查看目录内容 但是不能cd 切换进目录中去
      单独拥有写权限 什么也干不了 既不能ls 查看目录内容,也不能切换进目录中去(经过验证,目录单独拥有写权限,不能touch、mkdir、cp、mv 但是可以mv) 更不能创建目录或文件,写权限需要执行权限
      目录的写权限没有执行权限是没有意义的
      单独拥有执行权限 可以cd切换进目录,但是不能ls 查看目录内容和创建文件或者目录,a. 对于一个不可执行的文件来说,拥有执行权限是没有任何意义的; b. 如果文件是一个二进制可执行程序或者某种类型的脚本时,那么它就是可执行的 
      拥有读 执行的权限,可以ls查看目录内容 可以cd切换进目录中去
      拥有写 执行的权限 可以cd切换进目录,可以创建文件或者目录
      拥有读 写的权限 可以ls 查看目录内容,不能切换进目录中去 也不能创建目录或文件

 
5、文件属性(隐藏权限),用来限制root用户权限
       lsattr + 文件名查看
       chattr +a 文件    只允许往文件里追加内容(只允追加不允许覆盖)
       chattr +i 文件     只能看,其他的都不能
       > 覆盖
       >> 追加
       [root@localhost ~]# lsattr /sun
       [root@localhost ~]# chattr +a /sun
       [root@localhost ~]# chattr +i /sun
       
6、高级权限
      suid 4   (针对命令,给u+s)普通用户可以通过suid权限进行提权file(二进制文件),suid只能给命令添加,当给命令添加了suid之后,后面再有人去执行这个命令的时候就会拥有命令操作符所有者的权限
      sgid 2   (针对目录,给g+s)组继承权限 ,目录下的内容都会继承改组的权限,目录设置sgid 权限,目录中后来加入的文件会继承目录的属主和属组权限
      sticky 1   (针对目录,给o+t)防止其他人的误删除,对同一个共享目录,每一个账户只能删除自己对应的那个目录
      设置特殊权限
      a、字符
      添加权限                         取消权限                               b、数字
      chmod u+s file                 chmod u-s file                        chmod 4777 file
      chmod g+s dir                  chmod g-s dir                        chmod 2770 dir
      chmod o+t dir                  chmod 0-t  dir                        chmod 3770 dir
    
7、目录文件(ll  ll -d)和账户组(cat /etc/passwd | grep “账户名”)组((cat /etc/group | grep “组名”))详细信息的区别
     目录文件:-rw-r--r-- 1 root root 0 8月   9 23:41 james
                    文件类型\权限 硬链接个数 所有者 所属组 大小 修改时间 名字
      账户信息:curry:x:10011:10025::/kobe:/bin/bash
                     用户名:密码占位符:uid:gid:描述:用户家目录:登录shell 
         组信息:curry:x:10030:kobe,james
                     组名:代表组密码:gid:组员  
 

管道和重定向

1、 FD文件描述符
     进程使用文件描述符来管理打开的文件
     [root@xingdian ~]# ls /proc/$$/fd
     0 1 2 3 255
     文件描述符 0 进程的标准输入(standard input)
     文件描述符 1 进程的标准输出(standard output)
     文件描述符 2 进程的标准错误(standard error)
     tty 显示出连接到当前标准输入的终端设备文件名。
     $$ 代表当前标准输入终端的pid,可以省略查看当前终端pid命令
     用pid查看一个进程打开的文件的文件描述符
     先找到进程的pid,然后
     [root@localhost ~]# ls /proc/1049/fd
     ls /proc/pid/fd
     验证$$是什么
     [root@localhost ~]# echo $$
     255
     [root@localhost ~]# tty
     /dev/pts/0
     [root@localhost ~]# ps aux
     root   255  0.0  0.2  115392  2120   pts/0    Ss   08:05   0:00 -bash
     可以看到当前便准输入终端设备pts/0,对应的pid就是255。所以,$$代表当前标准输入终端设备的pid
     
2、正确输入、错误输出重定向
     输出重定向 (覆盖,追加)
     正确输出: 1> 1>>  (1可以省略)
     错误输出: 2> 2>>  (1、2和大于号之间是没有空格的)
     案例4: 正确和错误都输入到相同位置(混合输出&)
     [root@xingdian~]# ls /home(正确) /aaa(错误) &>/dev/null 
     [root@xingdian~]# ls /home(正确) /aaa(错误) 1>/dev/null 2>&1 
     1>/dev/null 2>&1 (1>/dev/null 2>/dev/null  &的作用是位置过渡)
       
3、脚本重定向案例
     $? 打印上一条命令的返回值(返回0,执行成功,返回1,执行不成功)
     -eq 等于
     fi结尾
     默认.sh 结尾的为脚本
     bash和sh 添加执行权限的文件是可以使用./或者/去执行一个文件,不加执行权限可不可以执行文件(可以)但是,不能使用./或/ 要使用bash或者sh去执行这个文件
   ①ping一个IP地址
     [root@localhost ~]# vim ping.sh
      ping -c1 10.18.40.100 &>/dev/null
      if [ $? -eq 0 ];then
      echo "10.18.40.100 is up."
      else
      echo "10.18.40.100 is down!"
      fi
    [root@localhost ~]# bash ping.sh
    
   ②创建多个用户并修改密码(for循环)
    for i in {1..10}
      do
           useradd userr$i
           echo "123" | passwd --stdin userr$i
      done 

4、标准输入: <  0<
     [root@xingdian ~]# grep 'root' < /etc/passwd
     
     数据库数据导入
     mysql:
     mysql -u root -p123 farm < qqfarm.sql
     -u 用户名
     -p 密码
     farm 数据库中的一个库名
     qqfarm.sql 数据库文件
     将数据库文件qqfarm.sql导入到farm的库中
     
     利用重定向建立多行的文件  脚本script创建多行文件
     [root@xingdian ~]# cat >>file200.txt <<EOF
     111
     222
     333
     yyy
     ccc
     EOF
     
5、管道
     作用:
        实现进程间通信的手段之一
     好处:
        Linux的程序小,功能单一,效率高,但是无法完成很复杂的任务,就需要借助于管道将多个进程组合起来
        sort对字段排序
       [root@xingdian ~]# sort -n b.txt   按数值从小到大排序
       [root@xingdian ~]# sort -rn b.txt  按数值从大到小排序(r 逆序)
        uniq去重(先排序后去重)
       [root@xingdian ~]# uniq   b.txt      去重
       [root@xingdian ~]# uniq -c b.txt    去重并统计重复的次数
        awk打印指定的字段(列)
        [root@xingdian ~]# awk -F(指定分隔符): '{print $7(第七列)}'(打印第七列) /etc/passwd
        -F: 指定字段分隔符,默认以空格或者是tab分隔(默认空格和tab可以不指定)
       $7 第七个字段
       $NF表示最后一个字段(字段就是一列)
       $(NF-1)表示倒数第二个字段  
       free -m查看内存使用情况(动态)
       [root@localhost kobe]# free -m | awk NR==2'{print $2}'   (第二行第二列)
       wc -l   (统计文件中行数)
       wc -w (统计文件中单词数)
       
6、 企业案例实战
      统计网站的访问情况(统计网站被访问了多少次(访问量))
      打印eth0网卡上的IP
      打印根分区已用空间的百分比(仅打印数字)df -Th
      打印内存使用量和空闲量 free -m
      
 7、三通管道(一边筛选,一边存储)
       借助于三通管道可以实现将前一个进程的输出作为后一个进程的输入,也可以将前一个进程的输出结果重定向到一个文件中。
        |tee file 覆盖
        |tee -a file 追加
        
8、存储方式
     1、NAS(Network Attached Storage),网络附加存储,是一个网络上的文件系统
          NFS(远程共享)  
     2、SAN(Storage Area Network) ,存储区域网络,是一个网络上的磁盘
     3、DAS(Direct-attached Storage) ,直连存储
     4、DFS(Distributed File System),分布式存储
     5、云存储
     
     
     
9、从分区方式区分磁盘分区
     MBR分区表 :
             MBR是主引导记录(Master Boot Record)的英文缩写
     GPT分区表 :
              GPT是GUID磁碟分割表(GUID Partition Table)的缩写,含义“全局唯一标识磁盘分区表”,是一个实体硬盘的分区表的结构布局的标准。
区别:
        1、MBR分区表最多只能识别2TB左右的硬盘空间,大于2TB的容量将无法识别从而导致硬盘空间浪费;GPT分区表则能够识别2TB以上的硬盘空间。
        2、MBR分区表最多只能支持4个主分区或三个主分区+1个扩展分区(逻辑分区不限制);GPT分区表在Windows系统下可以支持128个主分区。
        3、MBR分区表的大小是固定的;在GPT分区表头中可自定义分区数量的最大值,也就是说GPT分区表的大小不是固定的。
        
        
 
10、管道和重定向的区别
      重定向是直接把输出转到文件去,重定向符号后面接文件,大头方向是文件
      管道后面应该接的是命令,不是文件,管道左侧命令的输出作为管道右侧命令的输入      
      
11、sed命令
     用sed命令在行首或行尾添加字符的命令有以下几种:
     假设处理的文本为test.file
     在每行的头添加字符,比如"HEAD",命令如下:
     sed s/^/HEAD&/g test.file
     在每行的行尾添加字符,比如“TAIL”,命令如下:
     sed s/$/&TAIL/g test.file
     "^"代表行首,"$"代表行尾
     s/$/&TAIL/g中的字符g代表每行出现的字符全部替换
       

进程管理

1、进程和线程
    进程:
        是程序运行的过程, 动态,有生命周期的,可以产生和消亡的(进程是已启动的可执行程序的运行实例,实例即运行可执行程序)。
     线程:
        线程是进程之内独立执行的一个单元。对于操作系统而言,其调度单元是线程;一个进程至少包括一个线程,通常将该线程称为主线程;一个进程从主线程的执行开始,进而创建一个或多个附加线程,就是所谓基于多线程的多任务。
  
2、父进程,子进程
      程序运行时产生的第一个进程是父进程,任何进程都可以作为父进程创建子进程,子进程继承父进程的DNA。
      
3、静态查看进程 ps aux
     a 查看所有终端进程
     u 显示进程的拥有者
     x 查看所有系统进程
     
     进程状态
     R 运行 Running
     S 睡眠 Sleep
     T 停止 Stopped 
     Z 僵尸 Zombie
     
     ‘+’ 运行在前台的进程组
     < 高优先级的进程
     s 父进程
     
     Ss s进程的领导者,父进程
     S< <优先级较高的进程
     SN N优先级较低的进程
     R+ +表示是前台的进程组
     Sl 以线程的方式运行
     
     [root@xingdian ~]# ps aux --sort(排序) %cpu | head 从小到大,显示前十行
     [root@xingdian ~]# ps aux --sort -%cpu 从大到小
     [root@xingdian ~]# ps aux --sort rss (占用实际内存的大小,从小到大排序)
     [root@xingdian ~]# ps aux --sort -rss 

4、自定义静态查看进程信息 ps axo 需要显示的字段 ,自定义字段显(user,pid,ppid,%mem,command等)
      pstree 查看进程树
      tty 显示出连接到当前标准输入的终端设备文件名。
      [root@xingdian ~]# ps axo user,pid,ppid,%mem,%cpu,command --sort -%cpu |less(分页显示)(自定义排序分页显示)
     查看进程pid的五种方法(sshd是相关服务)
     1、[root@xingdian ~]# cat /run/sshd.pid
     2、[root@xingdian ~]# ps aux | grep sshd
     3、[root@xingdian ~]# pgrep -l sshd  (查询服务对应的pid)
     4、[root@xingdian ~]# pidof sshd
     5、[root@xingdian ~]# lsof -i:22(罗斯福命令,端口查看进程信息,如果找不到命令, yum -y install lsof安装一下)
     
     查看进程端口号
     /etc/services   里面存放进程服务的端口信息
     grep <port> /etc/services
     grep ssh /etc/services    (模糊匹配)
     getent services ssh      (精准匹配)
       
     pidof(安装过程)出现命令找不到的安装解决方法
     安装的原因:
     [root@xingdian-server-11 log]# pidof httpd
     bash: pidof: command not found
     查找这个命令所对应软件包
     [root@xingdian-server-11 log]# yum provides pidof 查询相关命令安装包位置
     [root@xingdian-server-11 log]# yum -y install sysvinit-tools 安装后可以使用命令
      
5、与安全相关的当前连接信息的查询方法,当前谁连接我
       [root@xingdian ~]# w     (谁连接我,执行了什么命令)      
       [root@xingdian ~]# who (谁连接我)
       [root@xingdian ~]# last    (最近一段时间,谁连接过我)

6、动态查看进程命令 top 、 htop(htop记住两个快捷键 F3:进程搜索;F4:进程过滤)
     [root@xingdian ~]# top
     [root@xingdian ~]# top -d 1    (每隔一秒钟刷新)
     [root@xingdian ~]# top -d 1 -p 101   (-p参数后加进程的pid,查看指定进程的动态信息)
     [root@xingdian ~]# top -d 1 -p 10,19 (查询两个pid的进程动态信息)
     [root@xingdian ~]# top -d 1 -u apache (指定用户查看的进程(user)信息查看进程)
     [root@xingdian ~]# top -d 1 -b -n 2(每隔一秒打印一次,打印两次) > top.txt 将2次top信息写入到文件
     -b:批处理模式
      在此模式下,top将不接受输入并运行,直到使用“-n”命令行选项设置的迭代限制或直到终止。
     -n:批处理次数
     迭代次数限制为:-n个数,指定top应该在之前生成的最大迭代次数或帧数
     
     load average: 0.86, 0.56, 0.78 CPU 1分钟,5分钟,15分钟平均负载
     us 用户空间占用CPU百分比
      sy 内核空间占用CPU百分比
     id 空闲CPU百分比
     top进程详细信息页面,快捷键
     M 按内存的使用排序
     P 按CPU使用排序
     N 以PID的大小排序
     R 对排序进行反转
     f 自定义显示字段(空格键加*号,q退出,W大写保存,q退出)
     1 显示所有CPU的负载(逻辑cpu)
     z 彩色
     
7、查看网络进程
    netstat -auntpl | grep 22 过滤22号端口
          ss  -auntpl | grep 22 过滤22号端口
     -a 查看所有的进程
     -u udp进程(视频直播,数据传输快)
     -n 显示段口号
     -t  tcp进程
     -p 显示程序的pid和名称
     -l  listening 监听的进程
     [root@nginx yum.repos.d]# yum -y install net-tools
     ss -ntal
     
     
8、补充的查看系统资源占用的命令
      vmstat(静态查看系统资源占用)
      dstat   (动态查看系统资源,全能工具箱,可以查看计算机所有使用资源情况)
       [root@localhost ~]# dstat -cmprdns
       启用cpu、内存、进程、io、磁盘、网络、swap统计
       以上参数大写可以指定相对应那个设备查看
       f 完全自动展开查看
      
9、进程控制,杀死进程
       kill +信号 pid
       [root@xingdian ~]# kill -l //列出所有支持的信号 编号 信号名
       [root@xingdian ~]# man 7 signal 所有信号的解释
    -1   HUP  重新加载进程或者重新加载配置文件(重新加载不会改变pid,重新启动服务会改变pid),修改配置文件后必须重新加载配置文件或者重启服务目的是让修改完的配置文件生效,pid的作用是唯一标识进程,如果进程有重启systemctl restart httpd(重新启动阿帕奇服务),系统不会保留原来的pid,会分配一个新的pid.
     -9   KILL 强制杀死
    -15  TERM 正常杀死(这个信号可以默认不写)
    -18  CONT 激活进程
    -19  STOP 挂起进程
        [root@xingdian ~]# kill -HUP  pid
        [root@xingdian ~]# kill -1  pid
        [root@xingdian ~]# kill -STOP pid
        [root@xingdian ~]# kill -19 pid
        [root@xingdian-server-11 /]# ps aux | grep httpd | grep -v(取反隐藏) grep
        
        killall和pkill
        当作于管理进程时,pkill 命令和 killall 命令的用法相同,都是通过进程名杀死一类进程,该命令的基本格式如下
        [root@xingdian ~]# killall 信号 进程名称  (株连九族)
        [root@xingdian ~] # pkill  信号 进程名  (与killall相同,杀死一类进程)
        除此之外,pkill 还有一个更重要的功能,即按照终端号来踢出用户登录,此时的 pkill 命令的基本格式如下
        [root@xingdian ~]# pkill -9 -t 终端端口名 (发现入侵ip,不加-9只杀死在终端上运行的进程,加-9连终端本身一起干掉,进程和终端本身一起干掉)
        [root@xingdian ~]# pkill -u 用户名称

10、发现被入侵之后怎么办?
     ①技术不太好,可以考虑先关机,然后找到上游防火墙,只允许自己的IP地址SSH,除此之外全部封禁;如果无法访问上游防火墙,则可以使用服务器本身的防火墙策略,当防火墙规则生效之后kill掉对方。
     ②如果支持诸如串行控制台之类的带外连接登陆服务器,可以将network服务停掉,然后添加防火墙规则 。
     ③修复之后,你永远不知道对方做过什么,最安全的方法是备份所有数据,重装系统。
     
    如果没有tab补全的话:
    yum -y install bash-com*
     
11、忘记密码,暴力破解步骤
      shutdown now立即关机
      重新开机界面按下 e
      下翻找到utf-8
      在utf-8后面输入rd.break console=tty0
      按下ctrl+x
      输入mount -o rw,remount /sysroot
      在输入chroot /sysroot
      输入passwd可以更改root账户密码
      vi /etc/selinux/config 编辑上面的文件 然后将selinux改为disabled
      输入vim /etc/passwd可以更改root的shell权限
      因为对文件的修改,为了确保开机时重新设定 SELinux ,必須在根目录下添加隐藏文件 .autorelabel
      touch /.autorelabel(也可以不创建)
      exit
      reboot

打造自己的网盘

打造属于自己的云网盘

实验环境准备
        1.准备一台干净的服务器
     2.服务器网络可用(ping www.baidu.com)
     3.准备yum仓库:阿里镜像站 https://developer.aliyun.com/mirror/
     [root@localhost ~]# rm -rf /etc/yum.repos.d/* 删除原先yum库类里面的所有内容
     [root@localhost ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
     [root@localhost ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
     注意:
    wget command not found 如果出现这个提示
    解决方案:yum -y install wget
    
=====================================================

项目部署
一、安装ALMP架构
     L:linux操作系统
     A:apache web服务器软件
     M:数据库(mariadb)
     P:php服务
     安装数据库服务 
     [root@localhost ~]# yum -y install mariadb-server mariadb 
     安装php和apache服务 
     [root@localhost ~]# yum install http://rpms.remirepo.net/enterprise/remi- release-7.rpm
     [root@localhost ~]# yum install yum-utils       修改php版本的工具
     [root@localhost ~]# yum-config-manager --enable remi-php72   启用php7的版本
     [root@localhost ~]# yum install httpd php php-gd php-json php-mysql php-curl php-mbstring php-intl php-mcrypt php-imagick php-xml php-zip
     
二、启动服务
        selinux是美国国家安全局,对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。关闭防火墙也可以在开始就关闭。
     [root@localhost ~]# systemctl stop firewalld     (关闭防火墙)
     [root@localhost ~]# setenforce 0                    (关闭selinux)
     [root@localhost ~]# systemctl start httpd         (重启http服务)
     [root@localhost ~]# systemctl start mariadb     (重启数据库服务)
     
三、服务部署
      部署数据库服务: 
      [root@localhost ~]# mysql     
      MariaDB [(none)]> CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; (创建一个数据库名字为nextcloud 并且设定字符集为utf-8)
      MariaDB [(none)]> GRANT ALL ON nextcloud.* TO 'nextclouduser'@'localhost' IDENTIFIED BY '123456';(授权所有的权限给nextclouduser这个用户,这个用户可以管理nextcloud以及这个库所有表,密码是123456)
      MariaDB [(none)]> FLUSH PRIVILEGES;(刷新授权表并退出)
      MariaDB [(none)]> EXIT;
      apache服务部署:(直接上传使用,事先已经写好了)
      [root@localhost ~]# cd /etc/httpd/conf/  (删除这个目录下原来的配置文件,把写好的配置文件上传到这个目录下)
      [root@localhost ~]# cd

四、产品上线
     下载项目包(已经下载好,在案例文件夹里面,把这个安装包上传到/root目录下)
     [root@localhost ~]# wget
     https://download.nextcloud.com/server/releases/nextcloud-15.0.0.zip
     解压项目包: 
     [root@localhost ~]# unzip nextcloud-15.0.0.zip
     项目拷贝到网站发布目录下: 
     [root@localhost ~]# mv nextcloud /var/www/
     设置权限: 
     [root@localhost ~]# chown apache.apache /var/www/nextcloud/ -R
     重新启动apache
     [root@localhost ~]# systemctl restart httpd
     
4.浏览器访问(输入公网ip地址访问)


 

磁盘分区管理

1、fdisk进行MBR方式分区(MBR分区表 :MBR是主引导记录(Master Boot Record)的英文缩写)
     [root@xingdian ~]# ls /dev/sd*      (打开系统磁盘目录)
     [root@xingdian ~]# fdisk -l /dev/sdb (查看磁盘详细分区情况,一个扇区默认512个字节)
     [root@xingdian ~]# fdisk /dev/sdb  (fdisk工具对磁盘进行分区)
     [root@xingdian ~]# fdisk -l /dev/sdb (MBR分区结束后,查看具体一个磁盘详细分区情况,一个扇区默认512个字节,fdisk -l 也可查看GPT)
     操作方法
     n add a new partition  创建新的分区
     p print the partition table  查看分区
     d delete a partition  删除分区
     q quit without saving changes  退出不保存
     w write table to disk and exit  保存并退出

2、gdisk进行GPT方式分区(GPT是GUID磁碟分割表(GUID Partition Table)的缩写,含义“全局唯一标识磁盘分区表”,是一个实体硬盘的分区表的结构布局的标准)
     [root@xingdian ~]# ls /dev/sd*      (打开系统磁盘目录
     [root@xingdian ~]# gdisk /dev/sdb  (fdisk工具对磁盘进行分区)
     [root@xingdian ~]# gdisk -l /dev/sdb (GPT分区结束后,查看具体一个磁盘详细分区情况,一个扇区默认512个字节,gdisk -l 也可查看MBR)
     l list known partition types 列出分区类型
     n add a new partition  创建新的分区
     p print the partition table  查看分区
     d delete a partition  删除分区
     q quit without saving changes  退出不保存
     w write table to disk and exit  保存并退出
     
     [root@xingdian-server ~]# lsblk  查看包括未格式化磁盘的详细情况
     [root@localhost ~]# blkid    查看已经格式化的磁盘的文件类型、uuid(查看磁盘的文件类型和uuid,但只有格式化后的磁盘有文件类型)
     [root@xingdian-server ~]# df -Th  查看已经挂载的磁盘的使用情况
     
3、磁盘格式化(给磁盘重新做一个文件系统,如果不指定,则设置为系统默认文件系统)
     [root@localhost ~]# mkfs.xfs -f /dev/sdb1  xfs文件系统(f 参数是强制)
     [root@localhost ~]# mkfs.ext4 /dev/sdc   ext3、ext4文件系统不用f参数
     
4、磁盘挂载(临时挂载,使用磁盘)
    mount [参数] 挂载设备(磁盘或者磁盘分区) 挂载点(自己创建目录挂载点)
    挂载点需要手动创建或者使用系统中现成的目录(/mnt)作为挂载点
         -t 文件系统类型 ext3 ext4 ntfs-3gxfs(linux系统用啦识别U盘)nfs cifs(远程连接) (需要-t指定)
        -a 检测是否挂载成功  mount -a
    -o 文件系统属性   
            rw 读写
        ro 只读
        remount 重新挂载
      mount -o remount,rw /sysroot
      remount 重新挂载  根分区也可重新挂载mount -o remount /dev/mapper/cl-root
      mount /dev/sdb1 /opt      (本地挂载)    
      mount -t nfs  192.168.0.253:/abc(远程共享目录) /opt (指定nfs网络协议远程挂载)
      [root@localhost ~]# mount /dev/sdc /mnt(mount+磁盘或者分区+挂载目录)
      
       

5、磁盘卸载
      [root@localhost ~]#umount  磁盘名、分区名、挂载目录都可以
      [root@localhost ~]#partprobe /dev/sdc  刷新磁盘分区表
      
6、开机挂载(永久挂载)
     [root@xingdian ~]#vim /etc/fstab
     第1列:挂载设备(3种写法)
     (1)/dev/sda5  (本地挂载)
     (2)10.11.59.110:/abc(远程分享的目录)  (远程挂载)
     (3)UUID=设备的uuid  rhel6 rhel7的默认写法  (uuid是对磁盘设备的标识)
     第2列:挂载点(挂载目录)
     第3列:文件系统类型
     第4列:文件系统属性(读写、只读、重新挂载)
     第5列:是否对文件系统进行(磁带)备份(默认0)
     0 不备份
     1 1天一次
     2 2天一次
     第6列:是否检查文件系统(默认0)
     0 不检查
     1 先检查
     2 后检查
     [root@localhost ~]# reboot    重启
     [root@localhost ~]# mount -a   不报错就挂载成功了,检测挂载是否成功
     [root@localhost ~]# df -Th   查看挂载
     
7、交换分区作用:
     ‘提升' 内存的容量,防止OOM(Out Of Memory)把硬盘空间当内存用 ,当物理内存不够用的时候,使用swap分区,防止物理内存耗尽 
       swap分区大小设置规则:
      内存小于4GB时,推荐不少于2GB的swap空间;
      内存4GB~16GB,推荐不少于4GB的swap空间;
      内存16GB~64GB,推荐不少于8GB的swap空间;
      内存64GB~256GB,推荐不少于16GB的swap空间
      查看当前的交换分区:
      [root@xingdian ~]# free -m
      [root@xingdian ~]# swapon -s  开启的磁盘虚拟内存才会显示
      制作swap分区:
      先用fdisk做一个分区
      格式化
      [root@xingdian ~]#mkswap /dev/sda5 
      激活swap分区(临时激活)
      [root@xingdian ~]#swapon /dev/sda5
      关闭swap分区
      [root@xingdian ~]#swapoff /dev/sda5
     
8、开机自启文件
     [root@localhost ~]# vim /etc/rc.d/rc.local
     touch /opt/kokoko
     [root@localhost ~]# chmod a+x /etc/rc.d/rc.local
     [root@localhost ~]# ls /opt
     [root@localhost ~]# reboot
     [root@localhost ~]# ls /opt
     kokoko文件自动创建
     把临时挂载写到开机自启文件里,可以实现镜像的永久挂载
     
9、 LVM是 Logical  Volume Manager(逻辑卷管理)
      物理卷-----PV(Physical Volume)
      卷组--------VG(Volume Group) 
      逻辑卷-----LV(Logical Volume) 
      物理区域--PE(Physical Extent) 
      逻辑区域―LE(Logical Extent) 
       (默认PE=LE=4M)
       创建逻辑卷 (磁盘的分区,单个磁盘)
      0. 准备物理磁盘
      1. pv(创建物理卷)
      [root@xingdian ~]# pvcreate /dev/vdd   (物理卷只是包装创建物理卷不命名)
      [root@xingdian ~]# pvs
      [root@xingdian ~]# pvscan
      [root@xingdian ~]# pvdisplap y
      2. vg (创建卷组)
      [root@xingdian ~]# vgcreate vg1 /dev/vdd  (先给卷组命名)
      [root@xingdian ~]# vgs
      [root@xingdian ~]# vgscan
      [root@xingdian ~]# vgdisplay
      3. lv (创建逻辑卷)
      [root@xingdian ~]# lvcreate -L 10G -n lv2 vg1 (-L参数指定大小,-n参数给逻辑卷命名)
      [root@xingdian ~]# lvcreate -l 10 -n lv1 vg1  (-l 参数指定LE的个数)
      [root@xingdian ~]# lvs
      [root@xingdian ~]# lvscan
      [root@xingdian ~]# lvdisplay
      4. 创建文件系统并挂载 (磁盘挂载和开机挂载)
      [root@xingdian ~]# mkfs.xfs /dev/vg1/lv1
      [root@xingdian ~]# mkfs.ext4 /dev/vg1/lv1
      [root@xingdian ~]# mount /dev/vg1/lv1 /mnt
      [root@xingdian ~]# mkdir /mnt/lv1 /mnt/lv2
      [root@xingdian ~]# vim /etc/fstab
      [root@xingdian ~]# mount -a
      5、lv的动态扩容(正在挂载的lv可以直接给它扩容),lv的缩容
        如果vg有空间直接给lv扩容,如果vg没有空间,查看pv,如果有vg直接添加到卷组,pv没有空间需要添加磁盘,vg、lv扩容后,对于正在挂载的lv还需要根据不同的文件系统进行文件系统扩容,正在挂载的lv、vg不能进行文件系统缩容
      [root@xingdian ~]# vgextend vg1 /dev/vde
      [root@xingdian ~]# lvextend -L 800M /dev/vg1/lv1
      增加到800M
      [root@xingdian ~]# lvextend -l +15 /dev/vg1/lv1
      在原有的基础上去增加15
      正在挂载的lv,还需要文件系统扩容
      ext家族:resize2fs 
      [root@localhost ~]# resize2fs /dev/vg2/lv2
      xfs:xfs_growfs 
      [root@localhost ~]# xfs_growfs /dev/vg2/lv3
      减少逻辑卷的大小:lvreduce
      减少卷组的大小:vgreduce
      6、删除lv、vg、pv(首先要卸载已经挂载的逻辑卷,与创建 LVM 的顺序恰好相反,在释放 LVM 所占磁盘空间的操作中,首先要删除卷组上所定义的逻辑卷(LV),之后删除这个卷组(VG),最后才能删除所有的物理卷(PV)
      删除lv : lvremove
      [root@xingdian-server xingdian]# lvremove /dev/vg1/lv1
      删除vg: vgremove
      [root@xingdian-server xingdian]# vgremove vg1
      删除pv: pvremove
      [root@xingdian-server xingdian]# pvremove /dev/sdb
      
10、面试题,磁盘阵列
      RAID ( Redundant Array of Independent Disks )即独立磁盘冗余阵列,通常简称为磁盘阵列。简单地说, RAID 是由多个独立的高性能磁盘驱动器组成的磁盘子系统,从而提供比单个磁盘更高的存储性能和数据冗余的技术。
       功能
       通过对磁盘上的数据进行条带化,实现对数据成块存取,减少磁盘的机械寻道时间,提高了数据存取速度。通过镜像或者存储奇偶校验信息的方式,实现了对数据的冗余保护。
  RAID 0
       把连续的数据分散到多个磁盘上存取,系统有数据请求就可以被多个磁盘并行执行。读写速度翻倍,磁盘空间利用率为100%。但存在单点故障,无数据校验,不提供数据冗余,不能保证数据的安全性。 
  RAID 1
       利用磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据。提供数据冗余,数据双倍存储,安全性较高。但无数据校检,磁盘利用率低,成本高。
  RAID5
       兼顾存储性能、数据安全和存储成本等各方面因素,可以理解为RAID0和RAID1的折中方案,是目前综合性能最佳的数据保护方案。有数据校检,提供数据冗余,磁盘利用率高。但磁盘越多安全性能越差。
  RAID6
        引入双重校检概念,它可以保证阵列中同时出现两个磁盘失效时,阵列仍能继续工作,数据不会发生丢失。有数据校验机制,提供数据冗余,但写入速度差,成本高。
  RAID10   
        先做镜像再做条带化。无单点故障,有数据校验,提供数据冗余,安全性能高。但成本稍高。
          
11、本地文件系统(不能远程用):fat32 ntfs ext3 ext4 xfs
      网络文件系统:nfs(远程共享)
      查看ext家族文件系统的信息:
      [root@xingdian dev]# dumpe2fs /dev/vg1/lv2
       superblock:记录此文件系统的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式等;
       inode:记录文件的属性(文件的元数据metadata),一个文件占用一个inode,同时记录此文件数据所在的block number;    
       
12、xfs文件系统修复xfs_repair
     主要用来修复xfs文件系统出现的损坏错误,一些选项含义如下:
     -L 强制日志文件(log)清空。日志文件中包含了一些元数据的修改,加上这个选项会强制清空log。这个选项会可能导致用户文件丢失。
     -n xfs的文件系统进行检查    xfs_repair -n   ==  xfs_check
     xfs_check 以及 xfs_repair -n都可以对xfs文件系统进行检查,但是xfs_check需要很长的时间。xfs_repair结束后,所有不能到达的inode节点被放进lost+found文件夹    
     使用xfs_repair对文件系统进行修复的方法
     使用xfs_repair对文件系统进行修复      
       ①使用xfs_repair之前,要先卸载该文件系统,然后使用xfs_metadump保存元数据信息
      [root@xingdian ~]# xfs_metadump -o /dev/sdb1 /save/sdb1.metadump
        这步只是对元数据进行了保存,保存在了/save/sdb1.metadump这个文件,没有对数据进行备份,因为如果要备份数据本身的话,需要和数据一样大小的空间,显然这里没有这个空间。        
    ②用xfs_repair -n检查:
      [root@xingdian ~]# xfs_repair -n /dev/sdb1
      会进行一系列的检查。完成之后,进行下面的修复
    ③用xfs_repair修复,如果出错用xfs_repair -L进行log的清空
      [root@qfedu.com ~]# xfs_repair  /dev/sdb1
      出现错误:
          ERROR: 
        这个时候,因为之前已经无法挂载了,所以也就不能进行replay的操作了,因此只能进行使用-L选项了。
      [root@xingdian ~]# xfs_repair -L /dev/sdb1
       会进行log的清空,然后一系列的检查
        - moving disconnected inodes to lost+found ...
     ④再用xfs_repair执行修复
      [root@xingdian ~]# xfs_repair /dev/sdb1
     ⑤条件时间允许的话,可以再进行个检查,但是考虑到时间太久,这里就不执行最后的检查了。xfs_check耗时较长。
       [root@xingdian ~]# xfs_check /dev/sdb1
     ⑤这个时候,进去看原来的/data文件夹的数据,已经出来了。因此可以进行挂载了。
        
xfs文件系统修复简述过程       
     1、使用xfs_repair修复xfs文件系统之前先要卸载该文件系统,然后备份文件系统元数据信息
     2、用xfs_repair -n检查,用xfs_repair修复,如果出错用xfs_repair -L进行强制log清空
     3、再用xfs_repair执行修复,条件时间允许的话,可以再进行个检查
     4、这个时候,进去看原来的/data文件夹的数据,已经出来了,因此可以进行挂载了
       
13、文件链接(软连接和硬链接)
      ①软链接产生新的inode号,硬链接不产生新的inode号
     ②源文件删除后,软链接文件不可以用,硬链接文件可用
     ③软链接可以跨分区,硬链接不可以跨分区
     ④不支持目录做硬链接
      软链接  ln -s  (类比快捷方式)
      [root@xingdian ~]# ln -s /file1 /opt/file11 (使用绝对路径,源文件file1要存在,目的文件不能存在) 
      [root@xingdian ~]# ll -i /file1  (查看文件inode号)
      [root@xingdian ~]# ll -i  /root/file1 /opt/file11  (软链接两个文件inode号不一样)
      [root@xingdian ~]# rm -rvf /file(软链接源文件删除,链接文件不可用)
      硬链接 ln(类比复制)
      [root@xingdian ~]# ln /root/file1 /opt/file11 (使用绝对路径,源文件file1要存在,目的文件不能存在) 
      [root@xingdian ~]# ll -i /root/file1 /opt/file11   (硬链接两个文件inode号一样)
      [root@xingdian-server ~]# rm -rvf /file1 (硬链接源文件删除,互不影响)
       

文件查找


1、文件查找的基本命令
           which 只能查询命令
      [root@qfedu.com ~]#which ls
      whereis  
      可以查询命令和配置文件的位置
      [root@qfedu.com ~]#whereis ls
      [root@qfedu.com ~]#whereis passwd
      whatis
      查询命令和配置文件都在哪章man有解释
      [root@qfedu.com ~]#whatis ls 
      [root@qfedu.com ~]#man -f ls
      
2、文件查找find命令
      find 路径(查找目录)   条件(查找条件)  动作(找到后的动作)
      查找条件
      按文件名:-name、-iname
      [root@xingdian ~]# find /etc ! -name "file5"  (!除了file5以外的)
      [root@xingdian ~]# find /etc -name "ifcfg-eth0"
      [root@xingdian ~]# find /etc -iname "ifcfg-eth0" //-i忽略大小写
      [root@xingdian ~]# find /etc -iname "ifcfg-eth*" //开头全部
      [root@xingdian ~]# find /etc -iname "*ifcfg-eth*"  //开头结尾全部
      按文件大小:-size
      [root@xingdian ~]# find /etc -size +5M //大于5M
      [root@xingdian ~]# find /etc -size 5M   //等于5M
      [root@xingdian ~]# find /etc -size -5M  //小于5M
      [root@xingdian ~]# find /etc -size +5M -ls //-ls找到的处理动作
      按时间找:-atime、-mtime、-ctime
      access  访问时间
      modify  修改时间(修改文件里面的内容)
      change 更改时间(更改文件的属主、属组)
      [root@localhost ~]# stat /etc/passwd查看文件a、m、c等详细信息
      [root@xingdian ~]# find /etc -mtime +5 //修改时间超过5天
      [root@xingdian ~]# find /etc -mtime 5 //修改时间等于5天
      [root@xingdian ~]# find /etc -mtime -5 //修改时间5天以内
      按文件属主、属组找:-user、-group
      [root@xingdian ~]# find /home -user jack //属主是jack的文件
      [root@xingdian ~]# find /home -group hr //属组是hr组的文件
      [root@xingdian ~]# find /home -user jack -group hr //同时符合条件
      [root@xingdian ~]# find /home -user jack -a -group hr //同时符合条件
      [root@xingdian ~]# find /home -user jack -o -group hr//只满足一个条件就行
      搜索条件可以并列,and并列可以省略,or并列用-o参数
      -o 是或者的意思  or
      -a 是而且的意思  and 
      -not 是相反的意思  not
      [root@xingdian ~]# find /home -nouser //没有属主的文件
      [root@xingdian ~]# find /home -nogroup //没有属组的文件
      [root@xingdian ~]# find /home -nouser -o -nogroup /没有属主或者没有属组的
      按文件类型:-type
      [root@xingdian ~]# find /dev -type f //f普通
      [root@xingdian ~]# find /dev -type d //d目录
      [root@xingdian ~]# find /dev -type l //l链接
      [root@xingdian ~]# find /dev -type b //b块设备
      [root@xingdian ~]# find /dev -type c //c字符设备
      [root@xingdian ~]# find /dev -type s //s套接字
      [root@xingdian ~]# find /dev -type p //p管道文件 
      按文件权限:-perm
      [root@xingdian ~]# find . -perm 644 -ls //.代表当前结尾
      [root@xingdian ~]# find . -perm -644 -ls //-代表u、g、o权限都比644大的文件
      按正则表达式:(正则表达式:几个符号去表示一类东西)-regex
      -regex pattern
      [root@xingdian ~]# find /etc -regex '.*ifcfg-eth[0-9]+'
      .* 任意多个字符
      [0-9] 任意一个数字
      + 前面字符一次或者多次
      \ 转义符  (把本来有实际意义的括号(子shell)变成没有意义的括号,用来多条命令整合为一个整体)
      
      找到后的动作 默认动作-print
      -print: 显示
      -ls:类似ls -l的形式显示每一个文件的详细
      -delete: 删除匹配到的行
      -ok command {} \; 每一次操作都需要用户确认,{}表示引用找到的文件,是占位符,承接前面查找到的目录,每次操作需要确认
      -exec command {} \; 每次操作无需确认
      [root@xingdian ~]# find /etc -name "ifcfg*"
      [root@xingdian ~]# find /etc -name "ifcfg*" -print
      [root@xingdian ~]# find /etc -name "ifcfg*" -ls
      [root@xingdian ~]# find /etc -name "ifcfg*" -delete
      [root@xingdian ~]# find /etc -name "ifcfg*" -exec cp -rvf {} /tmp \;
      [root@xingdian ~]# find /etc -name "ifcfg*" -ok cp -rvf {} /tmp \;
                                   find /etc -name “ifcfg*” -ok mv {} /tmp \;
      [root@xingdian ~]# find /etc -name "ifcfg*" -exec rm -rf {} \;
      [root@localhost opt]# find /etc \( -perm 641 -o -perm 642 \) -ok cp {} /mnt \;
      括号转义符前要有空格,否则会报非法权限
      扩展知识:find结合xargs
      [root@xingdian ~]# find . -name "xingdian*.txt" |xargs rm -rf
      [root@xingdian ~]# find /etc -name "ifcfg-eth0" |xargs -I {} cp -rf {} /var/tmp
      [root@xingdian ~]# find . -type f -name "*.txt" |xargs -i cp {} /tmp/
      |xargs 无论是-o还是-a都不需要加(),也不需要加结束符
      加 -I 参数 需要事先指定替换字符
      加-i 参数直接用 {}就能代替管道之前的标准输出的内容

3、打包tar -czf
      c:创建一个新归档
      z:调用gzip的方式打包
      f:指定存档或设备  
      [root@localhost opt]# tar -czf /opt/file.tar.gz /mnt/a
      [root@localhost opt]# tar -czf /mnt/file.tar.gz ./*
       .tar.gz  标准打包文件后缀名
       /mnt/file.tar.gz  打包后的文件存放位置
       ./*  当前目录下的所有
      tar和find连用打包要用-rf参数
      r:追加文件至归档结尾
     解压tar -xvf
      x:解压
      v:显示解压过程
      f:指定存档或设备
      -C 指定解压路径
      [root@xingdian ~]# tar -xvf etc.tar.gz //无需指定解压工具,tar会自动判断
      [root@xingdian ~]# tar -xvf etc.tar.bz2 -C /tmp //-C重定向到//tmp目录
      解压.zip格式用unzip命令 
     [root@xingdian ~]# unzip xxx.zip -d /mnt
     unzip的-d参数指定解压路径
     
4、[root@localhost mnt]# yum repolist  查看系统中有多少软件包
     [root@localhost mnt]# yum list  列出系统所有的包
     
     
XFS彻底取代EXT4的原因
     (1)  XFS在很多方面确实做的比Ext4好,Ext4受限制于磁盘结构和兼容问题,可扩展性和可伸缩性确实不如XFS,另外XFS经过很多年发展,各种琐碎的细化做的也比较好。
     (2) Ext4作为传统的文件系统确实非常成熟稳定,但是随着存储需求的越来越大,Ext4 渐渐适应不了了。而XFS使用64位管理空间,文件系统规模可以达到EB级别,可以说未来几年XFS彻底取代Ext4是早晚的事情!


CentOS6和CentOS7的区别
1、centos6采用INIT技术启动进程,centos7采用systemd技术启动进程;
2、centos7使用ip命令取代了ipconfig;
3、centos7新增了主机名管理工具hostnamectl。


机械硬盘和固态硬盘的区别
机械硬盘HDD:采用磁介质存储,有机械寻道时间,数据读取速度慢
固态硬盘SSD:采用电子存储介质,不存在数据查找时间,数据读写速度极快


CPU负载和CPU利用率的区别
CPU利用率:显示的是程序在运行期间实时占用的CPU百分比
CPU负载:显示的是一段时间内正在使用和等待使用CPU的平均任务数。

       CPU利用率高,并不意味着负载就一定大。举例来说:如果我有一个程序它需要一直使用CPU的运算功能,那么此时CPU的使用率可能达到100%,但是CPU的工作负载则是趋近于“1”,因为CPU仅负责一个工作嘛!如果同时执行这样的程序两个呢?CPU的使用率还是100%,但是工作负载则变成2了。所以也就是说,当CPU的工作负载越大,代表CPU必须要在不同的工作之间进行频繁的工作切换
 

软件包管理

1、国外yum库的换成国内的yum库(base  基础源文件   epel  扩展源文件)(阿里镜像站,163镜像站,清华镜像站)
      软件的类型有两种,一种是源码包,需要编译另一种是二进制包,已编译。无论是源码包还是二进制包安装时都可能会产生依赖关系。
      [root@localhost opt]# ls /etc/yum.repos.d      (存放yum仓库)
      [root@localhost opt]# rm -rvf /etc/yum.repos.d/*   (删除旧的yum库,删除国外的库)
      [root@localhost opt]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo        (安装镜像站的基础源文件库,curl下载工具系统自带)
      [root@localhost opt]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
           (安装镜像站的扩展源文件库,wget)
      [root@localhost opt]# yum clean all            (清空yum旧缓存,加快安装速度)
      [root@localhost opt]# yum makecache        (加载缓存,加快安装速度)
       curl是一个利用url语法在命令行下工作的文件传输工具,它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。
       wget 是一个从网络上自动下载文件的自由工具,支持通过 HTTP、HTTPS、FTP 三个最常见的 TCP/IP协议下载,并可以使用 HTTP 代理。"wget" 这个名称来源于 “World Wide Web” 与 “get” 的结合
       repo 就是文件库,在linux操作系统中,repo=repository,表示安装文件的位置,同时,repo也是在linux环境中开发android主机环境需要的工具包名称,用于进行版本控制。REPO是Google用python脚本写的调用Git的脚本,主要用来下载、管理android项目的软件仓库。
       rpm是Red-Hat Package Manager(RPM软件包管理器)的缩写,一种用于互联网下载包的打包及安装工具,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,它包含在某些Linux发行版本中。它生成具有.RPM扩展名的文件
       [root@xingdian ~]# yum -y install httpd vsftpd   (vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。 vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序。特点是小巧轻快,安全易用)
       [root@xingdian ~]# yum -y reinstall httpd  (发现软件有问题,误删除,重新安装)  (httpd是Apache超文本传输协议(HTTP)服务器的主程序。被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池,通常,httpd不应该被直接调用,而应该在类Unix系统中由 apachectl 调用)
       [root@xingdian ~]# yum -y install php  PHP即“超文本预处理器”,PHP: Hypertext Preprocessor,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。利于学习,使用广泛,主要适用于Web开发领域)

2、安装官方提供的新版本
      Nginx  Zabbix Mysql
      Nginx的官方网站http://nginx.org/---download---stable and mainline---nginx的yum源文件的内容---复制---终端上创建一个以.repo结尾的文件===就制作好了一个yum源文件
      Zabbix和Mysql给我们提供了安装软件仓库的rpm包,那么通过安装这个包就可以得到对应的仓库文件
      MySQL:
      [root@xingdian ~]# yum -y install https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm
      [root@xingdian ~]# yum repolist all | grep mysql 查看所有关于mysql的库
      [root@xingdian ~]# yum -config-manager --enable mysql-community 将禁用的yum源库启用
      [root@xingdian ~]# yum -y install mysql-community-server
      [root@xingdian ~]# systemctl start mysqld
      [root@xingdian ~]# systemctl enable mysqld
      Zabbix:
      [root@xingdian ~]# rpm -ivh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
      [root@xingdian ~]# yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent

3、yum管理软件包(自动解决包的依赖关系)管理包和组包
     [root@xingdian ~]# yum history    (查询yum的安装记录)
     yum管理软件包
   ①查询软件包可用库,和系统内软件包
     [root@xingdian ~]# yum repolist      (查询可用的yum仓库)
     [root@xingdian ~]# yum repolist all  (查询可用的不可用的全部yum仓库)
     [root@xingdian ~]# yum list   (查询系统内所有的软件包)
     [root@xingdian ~]# yum list | grep “nginx”   (过滤系统内相关软件包)
     [root@xingdian ~]# yum list | grep chinese   (只关注软件包的名)
     [root@xingdian ~]# yum search chinese    (关注软件包的名 或 描述)
     [root@xingdian ~]# yum provides vim    (查询命令由哪个包提供)
     [root@xingdian ~]# yum provides /etc/vsftpd/vsftpd.conf (查询配置文件由哪个包提供)
     [root@xingdian ~]# yum provides */vsftpd.* (忘记了名字模糊查看)
     [root@xingdian ~]# yum list installed  (查询已经安装好的包)
   ②安装更新软件包
     [root@xingdian ~]# yum -y reinstall httpd  (发现软件有问题,误删除,重新安装)
     [root@xingdian ~]# yum -y update httpd   (更新软件包,升级软件包)
     [root@xingdian ~]# yum -y update    (升级系统不要轻易执行,费时间)
     [root@xingdian ~]# yum upgrade -y  (升级系统,-y位置没有要求)
     [root@xingdian ~]# yum -y install php  (使用包名称直接安装软件包)
     [root@xingdian ~]# yum -y install /root/OpenIPMI-2.0.19-11.el7.x86_64.rpm (使用本地已将有的rpm软件安装包)
     [root@xingdian ~]# yum -y install /root/*.rpm (使用本地已将当前目录下的所有本地安装包安装)
     [root@xingdian ~]# yum -y install https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm  (使用网络上的rpm软件安装包)
   ③卸载软件包
     [root@xingdian ~]# yum -y remove/erase mysql-server   (只需要记住remove)
     yum管理URL组包
   ①查询系统内组包
     [root@xingdian ~]# yum group list   (查询系统内所有组包)
     [root@xingdian ~]# yum grouplist    (查询系统内已经安装的组包)
     [root@xingdian ~]# yum groupinfo mariadb   (查询相关组包的详细信息,组、描述、依赖文件)
     [root@xingdian ~]# yum info mariadb               (查询相关组包详细信息)
     [root@xingdian ~]# yum info           (查询系统内所有组包的详细信息,名称、架构、版本)
   ②安装组包
     [root@xingdian ~]# yum -y groupinstall mariadb
   ③卸载组包
     [root@xingdian ~]# yum -y groupremove mariadb
     
4、rpm管理软件包(不解决包的依赖关系)
RPM安装 
    [root@qfedu.com ~]# rpm -ivh 软件包名称
    -i install
    -vh verbose human    
    ivh意思是: i=install 安装 v=verbose 提示 h=hash 进度条。
   rpm -ivh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
   rpm -ivh zabbix-release-5.0-1.el7.noarch.rpm
    [root@qfedu.com ~]# rpm -ivh lftp-4.0.9-1.el6.x86_64.rpm

查询软件安装路径
    [root@qfedu.com ~]# rpm -ql 软件名称
    -q query
    -l list
    [root@qfedu.com ~]#  rpm -ql lftp-4.0.9-1.el6.x86_64

查询软件的名称(只查询已将安装的软件包,可以用来验证一个软件包是否被安装)
    [root@qfedu.com ~]# rpm -qa
    [root@qfedu.com ~]# rpm -qa | grep lftp
    lftp-4.0.9-1.el6.x86_64
    echo $?
    看返回值
    -a all
    
查询软件详细信息
    [root@qfedu.com ~]# rpm -qi 软件名称
    [root@qfedu.com ~]# rpm -qi gedit-2.28.4-3.el6.x86_64
    -i information

查询某一个文件是哪个软件产生的(自己创建的不能查)
    [root@qfedu.com ~]# rpm -qf /etc/passwd
    setup-2.8.14-20.el6.noarch
    [root@qfedu.com ~]# rpm -qf /bin/rpm
    rpm-4.8.0-32.el6.x86_64
    -f file

软件卸载
    [root@qfedu.com ~]# rpm -e 软件名称(不用加.rpm后缀)
    -e erase

查询软件的配置文件
  [root@qfedu.com ~]# rpm -qc  软件名称

了解:
--force  在安装的时候用(强制安装)
--nodeps 在卸载的时候用(卸载的时候不检查依赖关系)

5、自制yum仓库
     [root@localhost ~]# ls /etc/yum.repos.d   存放yum仓库文件的目录
     [root@localhost ~]# vim /etc/yum.conf     存放yum的配置文件
     yum配置文件下记住下面条目
     [main]
     cachedir=/var/cache/yum/$basearch/$releasever
     (缓存存放位置,$basearch代表系统平台,$releasever代表系统版本)
     (完整缓存包存放位置 /var/cache/x86.64/7/packages)
     keepcache=0    (0:关闭缓存  1:开启缓存,默认关闭)
     gpgcheck=0    (软件签名机制)
     logfile=/var/log/yum.log  (yum的日志文件存放目录)

     开启软件包自动缓存
     [root@localhost ~]# vim /etc/yum.conf
     修改keepcache=1
     此时安装软件或者重新安装会下载安装包在本地
     安装的时候看安装的信息提示看是在哪个库里面
     [root@localhost]# ls /var/cache/yum/x86_64/7/epel/packages
     会看到下载到本地的安装包

     数据库mysql(安装特别慢)
     开启缓存功能就可以事先在第一次安装的时候把包缓存下载,下次在安装的时候直接使用rpm的包
     开启自动缓存机制,自动把安装包下载到本地,方便自制yum库
   ①、创建一个目录(用来存放rpm包)
   ②、创建一个yum的仓库文件,以repo结尾的文件,将rpm包拷贝到这个目录里
     获取软件包的方法
     1、rpmfind.net    网站搜索
     2、开启缓存
     yum的仓库文件,repo结尾的文件
     [xingdian]     (标签随便起)
     name=nginx install   (描述)
     baseurl=http://        (仓库URL路径的写法)
                 https://
                 ftp://10.11.59.110/nginx
                 file:///     本地路径
     gpgcheck=0      //开启签名机制 (0:关闭  1:开启)
     enabled=0/1    1:开启这个仓库  0:关闭这个仓库(disabled)
     3、lftp 客户端
     [root@localhost epel]# mkdir -pv /mnt/sunlizhenmysql
     [root@localhost ~]# cd /mnt/sunlizhenmysql
     [root@localhost sunlizhenmysql]#  yum -y install lftp
     [root@localhost sunlizhenmysql]# lftp 10.11.59.91
     cd ware/windows/ware/mysql-rpm
     ls
     get 命令下载
     exit退出,下载文件已经在当前目录
     [root@localhost sunlizhenmysql]# ls
     可以移动拷贝放到其他目录,也可以直接把当前目录变成软件包目录
     [root@localhost sunlizhenmysql]# createrepo /mnt/sunlizhenmysql
     [root@localhost sunlizhenmysql]# cd /etc/yum.repos.d/
     [root@localhost yum.repos.d]# ls
     [root@localhost yum.repos.d]# vim sunlizhenmysql.repo
     [sunlizhen]
     name=sunlizhenmysql
     baseurl=file:///mnt/sunlizhenmysql
     gpgcheck=0
     enabled=1
     [root@localhost yum.repos.d]# yum makecache
     [root@localhost yum.repos.d]# yum repolist
     
     软件卸载
     [root@qfedu.com ~]# rpm -qe 软件名称(不小心删除安装文件,删除只用写软件包名,不用加.rpm后缀才能删除的干净)
     [root@qfedu.com ~]# rpm -qe 软件名称(不加后缀)
     -e erase
     --force  在安装的时候用(不安装依赖关系,强制安装)
     --nodeps 在卸载的时候用(卸载的时候不检查依赖关系)
     
6、下载安装源码包
     nginx编译安装(web服务器,解析静态页面)
     准备一台干净的服务器,保证yum仓库可用.保证能够ping通百度
     想要根据IP地址直接访问还需要以下操作
     [root@xingdian-server-11 /]# systemctl stop firewalld  关闭防火墙
     [root@xingdian-server-11 /]# systemctl disable firewalld 关闭防火墙的开机启动
     [root@xingdian-server-11 /]# setenforce 0 临时关闭seliux(一种linux的保护机制)
    ①:下载nginx的安装包(www.nginx.org)
     [root@xingdian-server-11 /]# wget http://nginx.org/download/nginx-1.18.0.tar.gz
     [root@xingdian-server-11 /]# tar xvf nginx-1.18.0.tar.gz 
   ②准备编译安装的环境
     [root@xingdian-server-11 /]# yum -y install apr apr-util ncurses ncurses-devel openssl-devel bison gcc gcc-c++ make
     ③:配置
     [root@xingdian-server-11 /]# cd nginx-1.18.0   一定要进入nginx-1.18.0
     [root@xingdian-server-11 /]# ./configure --prefix=/usr/local/nginx
     --prefix=/usr/local/nginx 指定安装路径
   ④⑤:编译+安装
     &&  可以链接多个命令,前面的命令执行成功后在执行后面的命令
     [root@xingdian-server-11 nginx-1.18.0]# make && make install 
   ⑥进入安装目录下,进入sbin,启动Nginx
    
     Mysql编译安装
     mysql编译安装: (新机器)
    ①、下载mysql包(https://www.mysql.com/)
     dowmlaods~MySQL Community(GPL) Downloads~MySQL Community Server
     
     No Thanks,Just start Mydownload 
     [root@xingdian-server-11 ~]# tar xf /opt/mysql-boost-5.7.28.tar.gz -C /root/
     ②、准备编译安装所需要的环境
     [root@xingdian-server-11 ~]# yum -y install ncurses ncurses-devel openssl-devel bison gcc gcc-c++ make cmake
    ③、配置
     [root@xingdian-server-11 ~]# cd mysql-5.7.28/
     \连接符号,同一行    mysql 解压目录下创建脚本.sh  汉字删掉
cmake . \    
-DWITH_BOOST=boost/boost_1_59_0/ \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \          指定安装路径
-DSYSCONFDIR=/etc \                                                 指定配置文件
-DMYSQL_DATADIR=/usr/local/mysql/data \              指定数据存放位置
-DINSTALL_MANDIR=/usr/share/man \                       指定man手册
-DMYSQL_TCP_PORT=3306 \                                      指定端口号
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1
    ④、编译安装
     [root@xingdian-server-11 ~]# make && make install 
     
     
删除空格后复制
cmake . \
-DWITH_BOOST=boost/boost_1_59_0/ \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DSYSCONFDIR=/etc \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DINSTALL_MANDIR=/usr/share/man \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \

网络协议

1、 OSI七层模型
      应用层:针对于应用约定的标准
        HTTP:超文本传输协议            Telnet:远程协议              OICQ:qq的协议
        HTTPS:安全超文本传输协议       SMTP\POP3:简单邮件传输协议(发)\邮局协议(收)
      表示层:约束数据格式,负责格式转化,加密以及解密
      会话层:建立、维护、解除会话,数据的传输通道
      传输层:约定数据采用何种方式进行传递
             TCP:传输控制协议,实现数据的可靠传输
             UDP:用户数据报协议,实现数据的快速传输,不可靠
             传输控制协议TCP (Transmission Control Protocol):一种面向连接的协议,提供可靠的传输服务,通过重传机制,实现数据的可靠传输。
             用户数据报协议 UDP (User Datagram protocol):一种非面向连接的协议,提供不可靠的传输服务
             网络协议是网络上所有设备(网络服务器、计算机及交换机、路由器、防火墙等)之间通信规则的集合
      网络层:提供逻辑地址(IP地址,用于在网络中唯一的标识一台设备,作用于网络与网络间的通信,提供路由和选路)
      数据链路层:提供MAC(物理)地址,用于在一条链路上唯一的标识一台设备,作用于网络内的通信。MAC(物理地址):烧写在网卡,全球唯一。MAC地址的有效范围仅限于本网络。
      物理层:约定接口类型,传输速度,线缆针脚等。

      交换机:位于OSI的第二层(数据链路层) ,交换机RJ45接口特别多,局域网内部通讯
      路由器:位于OSI的第三层(网络层),路由器RJ45接口特别少,因特网通讯,隔离广播域
      网关:网络的出口
      
     4、TCP\IP模型
     应用层:将OSI上三层融合,用于产生需要传递的数据
     传输层
     网络层
     网络接口层:将OSI下两层融合
      
2、发出数据是对数据进行封装,从应用层穿衣服
     接收数据是对数据进行解封装,从物理层脱衣服
      http client ——————>Router ——————> http server
(http://www.baidu.com) 因为数据为http 所以数据要求为可靠的传输 ,由传输层对数据封装TCP形成数据包 
      应用层产生一个数据,向外发送一个请求百度的指令(DATA→(到达传输层,加一个    tcp)TCP+DATA→形成数据段→IP+TCP+DATA(到达网络层,+IP,IP地址包含源ip地址和目的ip地址)→形成数据包→帧头+IP+TCP+DATA+帧尾(到达数据链路层 +帧头、帧尾,进一步形成数据帧,帧头里有源MAC和目的MAC{通过ARP获取})→形成数据帧(数据链路层对数据包进一步封装帧头和帧尾,形成数据帧)→(物理层将数据帧转化为比特流(到达物理层,一串二进制数),从网卡接口发出)
      
      应用层(表示层、会话层)产生一个数据
      到了传输层+tcp或者udp传输方式,形成数据段
      到了网络层+IP头,形成数据包
      到了数据链路层+MAC帧头帧尾,形成数据帧
      到了物理层将数据帧转化成比特流
      
      端口
      DNS:域名服务器(保存域名和IP地址之间的对应关系) 数据库
      端口号:0-65535  (在传输层中) 实际可用1-65534  
       ftp 20、21   ssh 22   Telnet 23   DNS 53   HTTP、Niginx 80   NTP 123/udp   HTTPS 443  rsyslog  514   NFS 2049/tcp  mysql 3306   redis 6379   Weblogic  7001   php 9000   tomcat 8080(8005、8009)   zabbix 10050 10051              
       用来区分不同的应用程序。
    
3、获取mac地址
       如何获取目的MAC:先发送一个ARP 请求(ARP地址解析协议 ARP relay→ARP应答)通过IP地址获得目标设备的MAC,获得后再次访问不需要再次广播获取。
       ARP工作原理:ARP request 请求的目标MAC是FF-FF-FF-FF-FF-FF(广播MAC),源MAC 是自己的MAC ;收到ARP request 将自己的MAC封装到ARP relay 中,以单播的形式返回。
       ARP伪造网关  
       
       ARP是通过IP地址来获得目标设备的MAC协议,源设备以广播的形式发送ARP request  目标设备收到后,把自己的MAC封装到ARP relay中,以单播的形式返回。 
       
4、TCP建立连接三次握手
     
     TCP断开连接四次挥手
     
     
5、ICMP协议,侦测远程主机是否存在
     禁用ping功能:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
     启用ping功能:echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

IP和MAC

1、查看ip和mac
     [root@localhost ~]# ifconfig
     [root@localhost ~]# ip a
     查询mac地址和ip地址的对应关系,只能在同一个网段内
     [root@localhost ~]# arping -I  网卡 + 当前主机在一个局域网的对方的IP地址
     [root@localhost ~]# arping -I ens33 192.168.42.133
     [root@localhost ~]# arp -a   (显示查看高速缓存中的所有项目)
        ARP(地址解析协议)地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。arp -a是显示查看高速缓存中的所有项目。ARP缓存是个用来储存IP地址和MAC地址的缓冲区,其本质就是一个IP地址-->MAC地址的对应表,表中每一个条目分别记录了网络上其他主机的IP地址和对应的MAC地址。每一个以太网或令牌环网络适配器都有自己单独的表。当地址解析协议被询问一个已知IP地址节点的MAC地址时,先在ARP缓存中查看,若存在,就直接返回与之对应的MAC地址,若不存在,才发送ARP请求向局域网查询。

2、IP配置
    ①、查看ip地址
     [root@xingdian ~]#  ifconfig   //查看所有网卡
     [root@xingdian ~]#  ifconfig ens33   //单独查看eth0    
     [root@xingdian ~]#  ip a        //查看所有网卡
     [root@xingdian ~]#  ip a s ens33   //单独查看ens33,s=show
     ②、配置IP(临时)
     [root@qfedu.com ~]#  ifconfig ens33 192.168.42.250/24   //写子网掩码,覆盖
     [root@qfedu.com ~]#  ifconfig ens33 :0 192.168.42.250/24  子网掩码可以不写 ,追加 
     [root@qfedu.com ~]#  ip a a 192.168.2.250/24 dev ens33 
     [root@qfedu.com ~]#  ip a d 192.168.2.8/24 dev ens33 
     追加进去的IP地址也可以用于远程连接
     注意:
     addrIP地址 简写成a
     add 添加IP 简写成a
     del  删除IP 简写成d 
    ③、启动网卡:
     [root@qfedu.com ~]#  ifconfig ens33 up
     [root@qfedu.com ~]#  ifup  网卡配置文件
    ④、关闭网卡:
     [root@qfedu.com ~]#  ifconfig ens33 down
     [root@qfedu.com ~]#  ifdown 网卡配置文件
     对于NAT模式的VMvare默认网关是2,虚拟机和本机的IP要在同一个网段
     
     如果没有ifconfig和arp命令
     安装net-tools
     yum install net-tools
     
     三种永久更改网卡配置的方法
     1、修改网卡配置文件,静态IP配置,动态IP配置
     2、图形化设置
     3、最小化页面nmtui
     
     网卡配置文件位置
     [root@qfedu.com ~]# vim  /etc/sysconfig/network-scripts/ifcfg-ens33
     多块网卡一起使用时,添加一个网卡,还要创建一个网卡配置文件
     重启网络服务:  配置文件修改后必须重起网络服务  
     [root@xingdian ~]# systemctl restart network
    
动态更改网卡配置文件
TYPE="Ethernet"
NAME="ens33"
DEVICE="ens33"
BOOTPROTO="dhcp"
ONBOOT="yes"

静态更改网卡配置文件
TYPE="Ethernet"
NAME="ens33"
DEVICE="ens33"
BOOTPROTO="static"
ONBOOT="yes"
IPADDR=192.168.42.88
NETMASK=255.255.255.0
GATEWAY=192.168.42.2
DNS1=114.114.114.114

3、路由配置
      NAT
     创建一个新的网络(能够跟主机互相通信,可以访问跟宿主机同一网段的所有服务器,除了宿主以外,其他服务器不能访问这个虚拟机.)
      桥接(vmware安装过程没有安装桥接网卡)
     桥接模式的虚拟机的IP地址跟宿主机本身处于同一个网段.
     (10.11.59.110)(10.11.59.111) 
     网关:跟宿主机也保持一直
     相当于独立于局域网内的一台机器,可以跟局域网任何的机器进行互相的通讯.
     仅主机
     虚拟机只能跟宿主机进行通讯
     
    ①、查看路由表
     [root@localhost ~]# ip r
     [root@localhost ~]# ip route
     ②、删除默认网关
     [root@localhost ~]# ip r d default   
     ③、删除静态路由    
     [root@localhost ~]# ip r d 10.18.45.0/24
     ④、添加默认网关    
     [root@localhost ~]# ip r a default via 10.18.44.1 dev ens33
     ⑤、添加静态路由
     [root@qfedu.com ~]# ip r a 10.18.45.0/24(网段) via 10.18.44.1(本机网关) dev ens33
  
4、网络相关配置文件
     网卡配置文件
     [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
     开启路由转发功能的主配置文件
     永久开启
     [root@localhost ~]# vim /etc/sysctl.conf
     net.ipv4.ip_forward = 1
     sysctl -p   (检验是否成功)
     也可以在子配置文件中配置,效果一样,好处是便于分类
     在/etc/sysctl.d/目录下建一个以.conf为结尾的文件
     [root@localhost ~]# vim /etc/sysctl.d/sunlizhen.conf
     临时开启
     [root@localhost]# echo 1 > /proc/sys/net/ipv4/ip_forward
     此临时开启方法适合所有类似配置

初始化脚本、配置文件、端口

系统初始化脚本

#外国yum仓库换成国内yum仓库
rm -rvf /etc/yum.repos.d/* &>/dev/null
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo &>/dev/null
yum -y install wget &>/dev/null
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo &>/dev/null
yum clean all &>/dev/null
yum makecache &>/dev/null
#永久关闭防火墙和seLinux
systemctl stop firewalld &>/dev/null
systemctl disable firewalld &>/dev/null
sed  -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config &>/dev/null
#dhcp设置ip 
rm -rvf /etc/sysconfig/network-scripts/ifcfg-eth0 &>/dev/null
cat >> /etc/sysconfig/network-scripts/ifcfg-eth0 <<p
TYPE="Ethernet"
NAME="eth0"
DEVICE="eth0"
BOOTPROTO="dhcp"
ONBOOT="yes"
p
systemctl restart network &>/dev/null

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

基础知识的配置文件

永久的环境:修改vim环境配置文件
vim /etc/vimrc 影响所有系统用户
vim ~/.vimrc    影响当前账户(新的空的文件)

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

服务的配置文件目录

清理缓存         echo 3 > /proc/sys/vm/drop_caches   
禁用ping功能:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all  (临时)
启用ping功能:echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_al   (临时)
关闭路由转发:echo 1 > /proc/sys/net/ipv4/ip_forward                 (临时)
设置所有进程可以打开的最多件总数
                      echo '463432' > /proc/sys/fs/file-max

软件包yum仓库的配置文件
/etc/yum.repos.d/            //yum仓库路径(添加新的yum仓库)
/etc/yum.conf           //yum配置文件(开启下载缓存功能)
/var/cache/yum/x86_64/7/epel/packages        //yum缓存安装包路径

网络配置文件
/etc/sysconfig/network-scripts/ifcfg-ens33       //网卡配置文件
/etc/sysctl.conf       //内核参数配置文件(永久打开路由转发功能,禁用ping功能,设置所有进程可以打开的最大文件总数)

NTP配置文件
/etc/ntp.conf        //NTP服务器配置文件

日志和日志轮转配置文件
/etc/rsyslog.conf               //日志服务器配置文件
/etc/logrotate.conf            //Logrotate全局配置文件
/etc/logrotate.d/        //Logrotate子配置文件(特定服务日志轮转规则)

计划任务的存放位置
/var/spool/at/            //一次性计划任务的存放路径
/var/spool/cron/            //循环计划任务

FTP配置文件
/etc/vsftpd/vsftpd.conf      //FTP服务器配置文件(打开匿名用户的文件上传下载功能)
/etc/lftp.conf                    //FTP客户端配置文件(修改网络延迟时间)
/var/ftp/         //匿名账户的默认根目录(本地账户默认根目录是自己的家目录)

NFS配置文件
/etc/exports           //NFS服务配置文件(空配置文件,添加共享目录和共享规则)

DNS配置文件
/etc/hosts          //本地域名解析
/etc/resolv.conf  //DNS配置文件

SSH配置文件
/etc/ssh/sshd_config     //ssh服务配置文件(修改日志对象,端口号)

HTTP配置文件
index.html     //默认主页的名称
/var/www/html     //默认发布网站的目录
/etc/httpd/conf/httpd.conf     //apache主配置文件
/etc/httpd/conf.d/     //apache子配置文件
/etc/httpd/conf.d/welcome.conf   //Apache欢迎界面,静态测设要删除这个文件,重启

Nginx配置文件
index.html     //默认主页的名称
/usr/share/nginx/html      //nginx的默认网站发布目录
/etc/nginx/nginx.conf     //nginx主配置文件
/etc/nginx/conf.d      //nginx子配置文件

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

服务的默认端口
端口号:0-65535  (在传输层中) 实际可用1-65534 
    ftp 20、21   
    ssh 22   
    Telnet 23   
    DNS 53   
    HTTP、Niginx 80   
    NTP 123/udp   
    HTTPS 443  
    rsyslog  514   
    NFS 2049/tcp  
    mysql 3306   
    redis 6379   
    Weblogic  7001      
    tomcat 8080(8005、8009)  
    php 9000
    zabbix 10050 10051              


==========================================================================
配置文件复习
         
         自制yum仓库
     [root@localhost ~]# ls /etc/yum.repos.d   存放yum仓库文件的目录
     [root@localhost ~]# vim /etc/yum.conf     存放yum的配置文件
     yum配置文件下记住下面条目
     [main]
     cachedir=/var/cache/yum/$basearch/$releasever
     (缓存存放位置,$basearch代表系统平台,$releasever代表系统版本)
     (完整缓存包存放位置 /var/cache/yum/x86.64/7/packages)
     keepcache=0    (0:关闭缓存  1:开启缓存,默认关闭)
     gpgcheck=1    (软件签名机制)
     logfile=/var/log/yum.log  (yum的日志文件存放目录)

     开启软件包自动缓存
     [root@localhost ~]# vim /etc/yum.conf
     修改keepcache=1
     此时安装软件或者重新安装会下载安装包在本地
     安装的时候看安装的信息提示看是在哪个库里面
     [root@localhost epel]# ls /var/cache/yum/x86_64/7/epel/packages
     会看到下载到本地的安装包

     数据库mysql(安装特别慢)
     开启缓存功能就可以事先在第一次安装的时候把包缓存下载,下次在安装的时候直接使用rpm的包
     开启自动缓存机制,自动把安装包下载到本地,方便自制yum库
   ①、创建一个目录(用来存放rpm包)
   ②、在/etc/yum.repos.d/创建一个yum的仓库文件,以repo结尾的文件,将rpm包拷贝到这个目录里
     获取软件包的方法
     1、rpmfind.net    网站搜索
     2、开启缓存
     yum的仓库文件,repo结尾的文件
     [xingdian]     (标签随便起)
     name=nginx install   (描述)
     baseurl=http://        (仓库URL路径的写法)
                 https://
                 ftp://10.11.59.110:/nginx
                 file:///     本地路径
     gpgcheck=0      //开启签名机制 (0:关闭  1:开启)
     enabled=0/1    1:开启这个仓库  0:关闭这个仓库(disabled)
      
     网卡配置文件位置
     [root@qfedu.com ~]# vim  /etc/sysconfig/network-scripts/ifcfg-ens33
     多块网卡一起使用时,添加一个网卡,还要创建一个网卡配置文件
     重启网络服务:  配置文件修改后必须重起网络服务  
     [root@xingdian ~]# systemctl restart network
    
动态更改网卡配置文件
TYPE="Ethernet"
NAME="ens33"
DEVICE="ens33"
BOOTPROTO="dhcp"
ONBOOT="yes"

静态更改网卡配置文件
TYPE="Ethernet"
NAME="ens33"
DEVICE="ens33"
BOOTPROTO="static"
ONBOOT="yes"
IPADDR=192.168.42.88
NETMASK=255.255.255.0
GATEWAY=192.168.42.2
DNS1=114.114.114.114

     禁用ping功能:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
     启用ping功能:echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

     网络相关配置文件
     网卡配置文件
     [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
     开启路由转发功能的主配置文件
     永久开启
     [root@localhost ~]# vim /etc/sysctl.conf
     net.ipv4.ip_forward = 1
     sysctl -p   (检验是否成功)
     也可以在子配置文件中配置,效果一样,好处是便于分类
     在/etc/sysctl.d/目录下建一个以.conf为结尾的文件
     [root@localhost ~]# vim /etc/sysctl.d/sunlizhen.conf
     临时开启
     [root@localhost]# echo 1 > /proc/sys/net/ipv4/ip_forward
     此临时开启方法适合所有类似配置
     

NTP、LOG服务

1、systemctl 服务管理操作
      [root@xingdian ~]# systemctl list-units           查看系统中所有服务  
      [root@xingdian ~]# systemctl list-unit-files      查看所有服务是否具有开机启动
      [root@xingdian ~]# systemctl start vsftpd        开启服务
      [root@xingdian ~]# systemctl status vsftpd      查看指定服务状态
      [root@xingdian ~]# systemctl is-active sshd      判断服务是否处于运行状态
      [root@xingdian ~]# systemctl is-failed sshd4     判断服务是否处于运行状态
      [root@xingdian ~]# systemctl status vsftpd -l   查看服务详细状态
      [root@xingdian ~]# systemctl stop vsftpd            停止服务
      [root@xingdian ~]# systemctl restart vsftpd       重启服务
      [root@xingdian ~]# systemctl reload vsftpd    重新加载配置文件
      [root@xingdian ~]# systemctl enable vsftpd     开机启动
      [root@xingdian ~]# systemctl disable vsftpd      关闭开机自启
      [root@xingdian ~]# systemctl is-enabled sshd  可以判断服务是否具有开机启动
      [root@localhost ~]# systemctl daemon-reload    安装服务可能出现意外停止,这个命令可以自动尝试服务重新启动
     systemctl只针对yum安装的软件可用
     常见的服务名称
     httpd、mariadb、mysqld、php-fpm、nginx、zabbix、rsyslogd、vsftpd

2、NTP时间服务(ntpd)
     NTP服务器,Network Time Protocol
     作用:为网络中的主机授时,同步的时间在2min-10min,需要看主板上面的硬件的性能
=====================================================
      一、时间服务器    ntp 123/udp
      两台机器:完成初始化
      clinet:跟服务器进行时间同步,临时修改主机名ntp-clinet,重启生效
      关掉终端重新打开一个终端就可以立刻生效
      server:时间服务器,临时修改主机名为ntp-server
      
      1.所有机器关闭防火墙和selinux
      systemctl stop firewalld
      systemctl disable firewalld
      setenforce 0  (临时关闭selinux)
      [root@qf-xingdian ~]# getenforce (查看selinux)
       Disabled
      扩展:永久关闭selinux
      vim /etc/selinux/config
      SELINUX=disabled
      第二种方法永久关闭selinux
      sed  -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config
      
      二、配置时间服务器
      修改时间服务器主机名  # hostnamectl set-hostname ntp-server
      查询ntp是否安装          # rpm -qa | grep ntp   
      查询到继续操作   ntp-4.2.4p8-3.el6.x86_64
      查询不到就安装一下     # yum -y install ntp
      NTP Server配置示例:
      # vim /etc/ntp.conf          //配置文件全部删掉,只要下面三行
      restrict default nomodify   //不允许客户端登录,也不允许客户端修改
      server 127.127.1.0           //使用本地的bios时间,自己跟自己同步
      fudge 127.127.1.0 stratum 10 //定义级别,范围0-16,越小越精准
      # systemctl restart ntpd
      # systemctl enable ntpd
      # date -s 9:00    服务器修改时间,客户机不能同步时间,可以先将服务器与网络上NTP服务器同步时间,这时需要把服务器的ntp服务stop,时间同步后再start。客户机即可以同步时间
      三、配置NTP客户端
      # yum -y install ntpdate
      # ntpdate -b 192.163.42.88  //手动时间同步 -b加速初始化同步
      计划任务自定同步时间
      crontab -e    创建一个计划任务
      00 00 1 * * ntpdate -b 172.16.110.1   每隔一天自动时间同步
      客户机和服务器也可以和网络上的NTP服务器同步时间
======================================================

3、日志服务log (rsyslog  514)
     一:日志重要性
          日志分类:系统日志,进程日志,应用程序日志
          记录日志的用处: 排错,追溯事件,统计流量,审计安全行为
     二:常见系统日志   /var/log
          常见的日志文件(系统、进程、应用程序)
     # tailf /var/log/messages        //动态查看系统主日志文件的尾部
     # tailf /var/log/secure             //动态查看系统认证、安全日志文件的尾部
     # tailf /var/log/cron                //动态查看计划任务日志文件的尾部
     # tailf /var/log/yum.log //yum  //动态查看yum日志文件的尾部
          二进制日志(直接查看是乱码,通过前面对应命令查看)
     # w //当前登录的用户即: /var/log/wtmp日志
     # last //最近登录的用户 /var/log/btmp
     # lastlog //所有用户的登录情况 /var/log/lastlog
          进程以自己的方式去记录日志
     # tail /var/log/mysqld.log         //MySQL进程自己记录的日志
     # tail /var/log/httpd/access_log //Apache自己记录的日志
     # tail /var/log/xferlog               //和访问FTP服务器相关
     日志存放位置: 存放本地 /var/log 
     日志服务启动:  systemctl start rsyslog
     日志配置文件:  /etc/rsyslog.conf
     日志服务默认开机自启
     
     自定义日志:自己定义日志的名字和位置
     查看日志文件是开启:systemctl status rsyslog
     vim /etc/rsyslog.conf -----> 日志的主配置文件 include 包含
     /etc/rsyslog.d/*.conf ---→   日志的子配置文件
     
     日志对象.日志级别           日志的存储位置
     
     日志对象和日志级别可以在man 5 rsyslog.conf 搜索/mail查看
     日志对象:
      authpriv(认证安全)   cron(计划任务)  kern(内核)   mail   
      local0 through local7(自己定义的日志文件)
     日志级别
     级别低,越详细,低的包含高的日志级别
     notice:相当与提示
     warn/warning:警告,错误
     error/err:错误,严重错误
     *全部级别
=====================================================
      
      1、将内核日志文件自定义到/var/log/kern.log
     [root@ntp-clinet ~]# ls /var/log
     [root@ntp-clinet ~]# vim /etc/rsyslog.conf
      vim /etc/rsyslog.conf  →  kern.* /var/log/kern.log
     [root@ntp-clinet ~]# systemctl restart rsyslog
     文件也可以不创建,有日志信息的时候会自动创建
     
======================================

      2、把ssh的日志定义到别的目录下
      local0-local7日志设备的使用: ssh的配置文件:/etc/ssh/sshd_config
     ①、修改sshd服务主配置文件:
      [root@ntp-clinet ~]# vim /etc/ssh/sshd_config
      # Logging
      #SyslogFacility AUTH
      SyslogFacility AUTHPRIV
      SyslogFacility AUTHPRIV改为 SyslogFacility local2(local0-local7)
      SyslogFacility local2 //设置ssh的日志定义由local2设备来记录
      重启服务
     ②、在rsyslog的主配置文件里加上
      local2.* /var/log/ssh
      重启服务

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

      3、远程日志,发送机与接收机
     远程日志:
     两台机器
     一台接收日志
     一台发送日志
     产生日志服务器:
      [root@sending ~]# vim /etc/rsyslog.conf
      *.* @10.11.59.91                //注意@:使用udp  @@:使用tcp
      第一个*可以改为别的,设定只接受指定服务日志
      重启服务
     日志收集服务器
      [root@localhost ~]# vim /etc/rsyslog.conf     修改配置文件打开接收功能
      打开@udp接收功能
      # Provides UDP syslog reception
      $ModLoad imudp
      $UDPServerRun 514

       打开@@tcp接收功能
       # Provides TCP syslog reception
       $ModLoad imtcp
       $InputTCPServerRun 514

      重启服务
      [root@localhost ~]# tailf /var/log/messages   //查看远程接收
      
==================================================

4、logrotate日志轮转(切割)
   ①、如果没有日志轮转,日志文件会越来越大,最后导致日志打不开或者是打开时间过长
   ②、将丢弃系统中最旧的日志文件,以节省空间
   ③、 logrotate本身不是系统进程,即日志的轮转不会自动执行,它是通过写到相应的配置文件中使用计划任务crond每天执行
   ④、对日志的切割,你只需要给他定义一个规则
     [root@xingdian ~]# rpm -qa |grep logrotate
     logrotate-3.7.8-16.el6.x86_64
     
     logrotate是一个异类,安装即可用
     系统默认都是安装好了的,没有安装就安装一下,并且这个程序安装后不用开启服务,修改后写到配置文件后会自动执行
     
     logrotate 配置文件:主配置文件决定全局日志轮转规则,子配置文件决定特定服务(rpm安装的程序)的日志轮转规则
     服务日志的轮转规则文件是在安装rpm包时就自动提供的,无需人为手动编写,只有自己创建的日志文件才需要自己编写日志轮转规则文件
     
     logrotate主配置文件:[root@localhost ~]# vim /etc/logrotate.conf
     logrotate子配置文件:[root@localhost ~]# ls /etc/logrotate.d
     chrony ppp wpa_supplicant syslog yum httpd
     
     
=========全局设置===================================

     hourly、daily、weekly、monthly、yearly  //轮转的周期
     rotate 4 //保留4份
     create //轮转后创建新文件 create mode owner group 创建新文件、权限、属主、属组
     dateext //使用日期作为后缀
     compress //是否压缩
     minsize 1M //最小达到1M才轮转,即到了规定的时间未达到大小不会轮转
     maxsize 100M //最大达到100M才轮状
     missingok //丢失不提示
     notifempty //如果为空,不轮转
     说明:
        当切割之后创建新文件,新文件有新的inode number
        如果希望进程如rsyslog、nginx进程会把新的日志写入新日志文件中,应该在日志切割后,告诉一下rsyslog、nginx进程reload 或 信号(1 or HUP)
        postrotate
               kill -1 进程pid
        endscript
     [root@localhost ~]# logrotate -f /logrotate.conf   强制立即执行,检验设置是否成功

计划任务

1、一次性计划任务at
     作用: 计划任务主要是做一些周期性的任务,目前最主要的用途是定期备份数据,所有计划任务执行中的输出都会以邮件的方式发送给指定用户, 除非重定向
    什么叫计划任务 :
        计划任务,字面意思理解就是在约定好的时间执行已经计划好的工作。在Linux中我们经常使用cron服务来完成这项工作。比如我们可以使用cron来做一个每天晚上12点备份一个日志文件,这就是个计划任务。
     一次性调度执行 at
     [root@xingdian ~]# rpm -qa | grep at
     [root@xingdian ~]# yum -y install at
     [root@xingdian ~]# systemctl start atd
     [root@xingdian ~]# systemctl enable atd
     软件:at + 时间节点
     midnight:午夜
     noon:中午
     teatime :下午茶4pm
     23:59 12/31/2018 任务在2018年12月31号23点59分
     创建计划任务
     at 11:00
     rm -rf /tmp/*
     ctrl +d ---->正常结束
     查看at计划任务个数:[root@localhost ~]# at -l
     查看详细的计划任务:[root@localhost ~]# ls /var/spool/at (存放计划任务目录)
                                    [root@localhost ~]# cat /var/spool/at/a0000401966bc0 
     删掉计划任务:
     [root@localhost ~]# at -d 2---->工作号
     [root@localhost ~]# at -r 4----->工作号
     [root@localhost ~]# atrm 5---->工作号
     删除配置文件也可以
     可以通过查看日志文件来看是否执行
     [root@localhost ~]# tailf /var/log/messages
     [root@localhost ~]# echo 3 > /proc/sys/vm/drop_caches   清理缓存
     
===============================================

2、循环性计划任务cron
      [root@localhost ~]# rpm -qa | grep cron   
       crontabs-1.11-6.20121102git.el7.noarch
       这个服务是系统默认自启的,因为系统级任务计划需要,如果没有启动,需要启动crond服务
      [root@localhost ~]# systemctl start crond
      [root@localhost ~]# systemctl status crond
      
===================用户级循环任务=================
time+action

       * * * * *  command
      .----------------minute (0 - 59)  第一个*代表分钟数 
      | .--------------hour (0 - 23)  第二个*代表小时数
      | | .------------day of month (1 - 31)  第三个*代表天号
      | | | .----------month (1 - 12)   第四个*代表月份
      | | | | .--------day of week (0 - 6) (Sunday=0 or 7)第五个*代表周几
      | | | | |
      * * * * * command
      ps: *        表示每...
         ,        取不同的时间点
         -        表示范围
         */5    每5分钟(只有每隔几分钟是有意义的)

      创建循环计划任务(循环计划任务可以指定用户,不指定就默认是当前用户)
      [root@localhost ~]# crontab -e
      [root@localhost ~]# crontab -e -u sunlizhen (管理员可以使用 -u username, 去管理其他用户的计划任务)
      查看循环计划任务
      [root@localhost ~]# crontab -l
      [root@localhost ~]# crontab -l -u sunlizhen (管理员查看指定用户循环计划任务)
      [root@localhost ~]# ls /var/spool/cron
      [root@localhost ~]# cat /var/spool/cron/root
      删除循环计划任务
      [root@localhost ~]# crontab -r   (删除当前用户的所有循环计划任务)
      [root@localhost ~]# crontab -r -u sunlizhen(管理员删除指定用户所有循环计划任务)
      要是不想全部删除,可以直接进行编辑
      [root@localhost ~]# crontab -e
      [root@localhost ~]# crontab -e -u sunlizhen 
      
      计划任务的权限控制
      [root@xingdian ~]# cat /etc/cron.deny
      如果这个文件存在,凡是写到这个文件里面的账户不允许执行crontab命令
      [root@xingdian ~]# cat /etc/cron.allow(这个文件是系统默认不存在的)
      如果这个文件存在,没有写到这个文件里面的账户不允许执行crontab命令
      如果有allow文件,那不管deny是否存在,都是只允许allow文件里面的用户
         
3、数据拷贝备份案例
    ①、vim编辑一个压缩、拷贝的脚本
      [root@localhost ~]# vim /mnt/kaobei.sh
      #! /bin/bash 
      tar -czf /opt/sunlizhen`date +%y%m%d%H%M%S`.tar.gz /home/*
      cp /opt/sunlizhen`date +%y%m%d%H%M%S`.tar.gz /mnt
    ②、指定一个计划任务,每一分钟执行一次拷贝脚本
      [root@localhost ~]# crontab -e
      */1 * * * * bash /mnt/kaobei.sh
    ③、看门狗查看指定目录中的内容变化
      [root@localhost ~]# watch -n 1 'ls -l /mnt'
      
      
      
      [root@xingdian ~]# scp -r /etc 172.16.20.21:/tmp   (远程拷贝)
      
     [root@localhost ~]# du -h /home 这个目录的占用大小
     date日期显示命令
     date显示当前日期和时间方式1
     date +%y%m%d%H%M%S
     显示方式(年、月、日要小写(年大写的话显示2020),时、分、秒要大写,中间可以任意加分隔符)
     date +%D显示方式3
     date +%F显示方式4
     date -s 9:43设置当前时间为9:43
      


     
     
     
        


 

FTP、NFS服务

1、FTP介绍
        文件传输协议(File Transfer Protocol,FTP),基于该协议FTP客户端与服务端可以实现共享文件、上传文件、下载文件。 FTP 基于TCP协议生成一个虚拟的连接,主要用于控制FTP连接信息,同时再生成一个单独的TCP连接用于FTP数据传输。用户可以通过客户端向FTP服务器端上传、下载、删除文件,FTP服务器端可以同时提供给多人共享使用。FTP服务是Client/Server(简称C/S)模式,基于FTP协议实现FTP文件对外共享及传输的软件称之为FTP服务器源端,客户端程序基于FTP协议,则称之为FTP客户端,FTP客户端可以向FTP服务器上传、下载文件。Unix/Linux使用较为广泛的FTP服务器端软件为Vsftpd 。
  协议: ftp 文件传输协议 
  客户端软件:lftp(推荐)、浏览器、资源管理器、ftp
  FTP传输模式介绍 
      vsftpd的被动模式是默认开启的,可以关闭,主动模式永远开启,不能关闭
      主动模式: 21端口负责建立tcp连接,20端口负责传输数据
      client server (C/S模式)
      1024-------->21 负责连接
      1024<--------20 负责传输
      高安全区域 防火墙 低安全区域
      被动模式:21号端口负责建立tcp连接,1024+存放数据等待客户端来拿数据
      client server (C/S模式)
      1024-------->21 负责会话连接
      1024-------->1024+存放数据等待客户端来拿数据
      使用什么模式连接服务器是客户端说了算
      能不能接受那个模式是服务器说了算
      服务器关闭被动模式:
      [root@xingdian ~]# vim /etc/vsftpd/vsftpd.conf
      pasv_enable=NO
      客户端关闭被动模式:
      [root@xingdian ~]# lftp 172.16.70.251
      > set ftp:passive-mode off
      永久生效
      [root@xingdian ~]#vim /etc/lftp.conf
      set ftp:passive-mode off
      
      ftp的安全:
      1.关闭匿名用户除下载权限之外的一切权限
      2.开启监控,也就是打开日志 /var/log/xferlog
      
      lftp ftp.net.pku.edu.cn:~> ls
      `ls' at 0 [重新连接前延时: 21]
     如果一次连接不上,那个延时会越来越长了,就挤不进ftp了。
修改ftp客户端配置文件
在/etc/lftp.conf中加入:
set net:reconnect-interval-base 5
set net:reconnect-interval-multiplier 1.0


      
2、部署ftp服务
     ①、安装
     server:    yum -y install vsftpd
     clinet:     yum -y install lftp
     ②、启动服务(server),服务器端启动vsftpd,客户端直接使用lftp即可
     [root@xingdian ~]# systemctl start vsftpd //启动服务
     [root@xingdian ~]# systemctl enable vsftpd //开机启动
   ③、ftp服务功能
      /var/ftp/是默认情况下ftp服务器存放数据的目录,已将自动创建一个pub目录。
     [root@xingdian ~]# cd /var/ftp     注意:ftp根目录权限不可以超过755
      /etc/vsftpd/vsftpd.conf    ftp的主配置文件
      
     开启ftp上传功能(先打开文件上传功能,在/var/ftp下创建一个权限为777的共享目录)
     先修改ftp配置文件,打开上传功能
     #vim /etc/vsftpd/vsftpd.conf
      anon_upload_enable=YES //上传文件
      anon_mkdir_write_enable=YES //上传目录
     服务器在/var/ftp下创建一个777的目录
      [root@localhost ~]# mkdir -v /var/ftp/gongxiang
      [root@localhost ~]# chmod 777 /var/ftp/gongxiang
      这时候客户端可以在共享目录下上传文件,还可以创建目录,但是不能创建文件
      
     使用用户登录功能(ftp允许匿名用户访问,也可以在服务器端创建用户,设置密码进行登陆,创建用户的时候如果指定了创建用户的家目录,那么默认的共享目录变为用户家目录)
     
     
     useradd创建用户的问题
     [root@localhost]#useradd -d /opt/haha -G ftp -s /sbin/nologin haha
     Creating mailbox file: File exists   //我的这里操作有报错,顺道说下这个问题
      linux系统下添加用户后,会在系统里自动加一个邮箱(系统邮箱),路径是:/var/spool/mail/用户名.
      所以删除用户的时候用userdel -r 删除干净
      可以直接用命令#rm -rf /var/spool/mail/用户名,这样就可以再次添加同一名字的用户.
      执行该命令后,如果出现这样的错误提示: 
      useradd: warning: the home directory already exists. 
      Not copying any file from skel directory into it. 
      报错原因
      系统添加用户的标准步骤
      1.编辑/etc/passwd与/etc/group
      2.创建用户主目录
      3.从/etc/skel拷贝文件与目录
      4.让新用户获得其主目录与文件的拥有权限
      5.给新用户一个密码
      这说明用户的目录已经存在(这个可以是任何你设定的目录),不可再新建此目录,并非添加用户失败,可以忽略。创建用户的时候-d指定家目录,如果指定的家目录已经存在,会报这个警告,最好指定一个不存在的家目录,系统会自动创建。但不能递归创建目录。
     
      创建用户
      [root@xingdian ~]# useradd -d /mnt/ll user02 -G ftp(指定清楚是为了规范分类,可以不指定)
      [root@localhost ~]# passwd user01
      客户端登陆(匿名登陆和用户登陆)
      [root@xingdian ~]# lftp 172.16.70.251 -u user02    (-u 指定用户,需要输入密码)
      [root@localhost ~]# lftp 192.168.42.88 -u user01,1 (,后面加密码)
      使用用户登录的时候,共享目录默认为用户的家目录
      匿名账户
   #lftp 172.16.70.251 使用的是passwd文件内的默认账户,默认不需要写用户和密码,默认共享路径/var/ftp
    本地账户
   #lftp 172.16.70.251 -u user02,1(密码) 使用的是除了ftp以外的账户,默认共享目录是账户自己的家目录
   
客户端常用命令
> help  //查看命令帮助手册
> ls  //查看文件
> dir  //查看文件=ls
> cd pub //切换路径
> get 文件 -o /root/Desktop //下载文件(-o指定下载文件存储目录,不指定默认下载到登陆目录下,下载 多文件用空格隔开)
> mirror 目录 指定的下载目录 //下载目录(先指定下载需要目录,后面直接指定目录保存路径,不指定默认下载到登陆目录下)在这里如果指定了除了当前目录的其他目录,目录下载下来的是目录下的内容,目录会被拆分开。目录下载到当前目录下的话,会下载不拆开的目录
> put 文件 //上传文件
> mirror -R 目录 // 上传目录
> mkdir 目录 // 客户端可以创建目录  

     常用配置选项见老师笔记
     write_enable=YES                                    # 是否启用写入权限(上传,删除文件)
     download_enable=YES                                # 是否允许下载文件
     xferlog_enable=YES                                  # 启用日志文件,记录到/var/log/xferlog
     connect_from_port_20=YES                               # 允许服务器主动模式(从20端口建立数据连接)
     pasv_enable=YES                                     # 允许服务器被动模式
     userlist_enable=YES                                 # 是否启用user_list列表文件
     userlist_deny=YES                                   # 是否禁用user_list中的用户
     max_clients=0                                       # 限制并发客户端连接数
     max_per_ip=0                                        # 限制同一IP地址的并发连接数
     
=====================================================

nfs服务器共享目录=nfs客户端挂载目录

3、部署nfs服务
     NFS服务器(存储端) 通过Linux系统平台来实现NFS存储
     软件包: nfs-utils
     端口: 2049/tcp
     配置文件:/etc/exports   //空配置文件   
     
     服务器端,安装nfs-utils,用于提供nfs服务                                                   
     [root@aliyun ~]# yum -y install nfs-utils      
     [root@aliyun ~]# systemctl start nfs
     [root@aliyun ~]# systemctl enable nfs
     [root@aliyun ~]# mkdir -v /share1   (服务器创建共享目录)
     [root@aliyun ~]# vim /etc/exports    (修改nfs配置文件,指定共享方式)
     [root@aliyun ~]# exportfs -rv          (重新加载配置文件并输入共享)
     
     
     
     客户端,安装nfs-utils,用于在挂载的时候提供nfs协议
     [root@xingdian ~]# yum -y install nfs-utils(为了识别nfs的文件系统,无需启动服务)
     [root@localhost ~]# showmount -e 106.15.202.53   (查看可以共享的目录)
     [root@localhost ~]# mkdir -v /mnt/dir1    (创建一个挂载点)
     [root@localhost ~]# vim /etc/fstab        (永久挂载)
     106.15.202.53:/share1 /mnt/dir1 nfs defaults 0 0
     mount -t nfs 106.15.202.53:/share1(远程共享目录)/mnt/dir1(指定nfs网络协议远程挂载)
     [root@localhost ~]# mount -a         (检验挂载是否成功)
     [root@localhost ~]# df -Th          (查看是否挂载成功)
     挂载成功后,在服务器共享目录文件下的文件,可以在客户端的挂载目录下看到
     
 4、nfs服务器端的共享方式
      只读方式共享 ro
      只读共享方式,客户端不能在挂载目录下创建共享文件,提示只读文件无法创建
      [root@aliyun ~]# vim /etc/exports 
      share1 *(ro,sync)
      *所有
      192.168.1.0/24 指定网段
      192.168.1.2 指定服务器
      sync:sync传输过程中将数据直接写入内存和硬盘
      
      读写方式共享 rw
      读写共享方式,客户端可以在挂载目录下创建共享文件,但前提是需要加no_root_squash,否则提示权限被拒绝,服务器端可以在共享目录下看见客户端创建的文件。
      [root@aliyun ~]# vim /etc/exports
      /share2 *(rw,sync,no_root_squash)
      no_root_squash:(不进行root身份转换)
      root_squash:当登录NFS主机使用共享目录的使用者是root时,其权限将被转换成为匿名使用者,通常它的UID与GID都会变成nobody身份。
      
========================================================
       
    
     永久挂载ISO镜像文件
     开机自动挂载ISO 文件有两种途径 。一种是通过配置fstab文件,开机时Linux自动识别并挂载。另外一种是将挂载命令加入到开机后自动执行的脚本中, 一般为/etc/rc.d/rc.local
下面分别是两种方式的内容。
     比如我的ISO文件是 /root/CentOS-7-x86_64-DVD-1611.iso, 我想把它挂载到 /iso 路径下。前提要先创建/iso 路径。下面是实现自动挂载的两种途径。
     通过fstab
     在/etc/fstab 文件中添加入下面一行内容:
     <ISO文件绝对路径>  <挂载点> iso9660 loop,defaults   0 0
     编辑好文件fstab后,保存,并执行如下命令进行本次挂载(也就是手动挂载),不需要重启服务器。下次重启服务器时会自动挂载
     # mount -a
     mount: /dev/loop0 写保护,将以只读方式挂载
     镜像挂载后才可以查看镜像里面的内容
     通过/etv/rc.d/rc.local
     把临时挂载命令放在开机自启文件中,可以实现永久挂载效果
   
     ftp服务器的yum源。可以本地使用,也可以别的服务器使用
     这里的镜像挂载点和软件包目录,不需要给777权限,本身权限够用
          
      ftp服务器自制镜像yum源
      CentOS-7-x86_64-Minimal-1708.iso  //ftp服务器要有镜像文件
      [root@aliyun ~]# mkdir -v /var/ftp/centos7  //ftp服务器创建镜像挂载点
      
      [root@aliyun ~]# mount CentOS-7-x86_64-Minimal-1708.iso /var/ftp/centos7  //服务器端镜像挂载(mount临时挂载,重启不可用)
      
      利用开机自启文件实现镜像的永久挂载
      [root@aliyun ~]# vim /etc/rc.d/rc.local
      mount CentOS-7-x86_64-Minimal-1708.iso /var/ftp/centos7
      [root@aliyun ~]# chmod a+x /etc/rc.d/rc.local
      [root@aliyun ~]# reboot

      永久挂载文件挂载镜像
      [root@localhost ~]# vim /etc/fstab
      /CentOS-7-x86_64-Minimal-1708.iso /mnt/centos iso9660 loop,defaults 0 0
      [root@localhost ~]# mount /mnt/centos
      
      [root@aliyun ~]# rm -rvf /etc/yum.repos.d/*  //客户端删除旧的yum仓库
      [root@localhost ~]# vim /etc/yum.repos.d/centos.repo  //客户端创建以.repo结尾的库
      [centos7]
      name=centos7
      baseurl=ftp://106.15.202.53/centos7
      enabled=1
      gpgcheck=0
      [root@localhost ~]# yum clean all  
      [root@localhost ~]# yum makecache  //客户端重新加载缓存
      
      ftp服务器自制mysql的yum仓库
      [root@aliyun ~]# mkdir -v /var/ftp/mysql  //服务器创建一个目录,作为软件包目录
      [root@aliyun ~]# cd /var/ftp/mysql  //服务器进入目录下,也可以get -o 指定
      lftp 10.11.59.91
      cd ware/windows/ware/mysql-rpm
      get 
      exit 
      [root@localhost ftp]# createrepo /var/ftp/mysql  //服务器做一个软件包目录
      
      [root@localhost ~]# vim /etc/yum.repos.d/mysql.repo  //客户端制作.repo的yum源
      [my]
      name=my
      baseurl=ftp://10.11.65.70/mysql
      enable=1
      gpgcheck=0
      注意这个url的路径写法默认进入的路径开始就是/var/ftp/
      [root@localhost ~]# yum clean all  //客户端清理缓存
      [root@localhost ~]# yum makecache  //客户端重新加载缓存
      [root@localhost ~]# yum repolist  //查看yum仓库是否创建成功
      

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

DNS

 

一:DNS基本概念
        DNS 是域名系统 (Domain Name System) 的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串
        www.example.aliyun.com.
       .  根域名
       .com.  顶级域名
       .aliyun.com   主域名
       .example.aliyun.com  子域名
       www.example.aliyun.com  子域名的子域
     
     本地域名解析(只在局域网内有效,域名为伪域名,一个    IP可以对应多个域名)
     [root@localhost ~]# vim /etc/hosts
     106.15.202.53 sun
     106.15.202.53 li
     106.15.202.53 zhen
     [root@localhost ~]# ping sun
     /etc/hosts 做本地解析的文件(IP+域名的对应关系)
           
二、DNS解析流程
    例如客户端解析 www.126.com(缓存中的是非权威)
    1、客户端收到DNS解析命令,先查询缓存和/etc/hosts中的记录,有则向客户端返回查询答案,无则把查询命令发送给/etc/resolv.conf中的指定的本地DNS服务器。
    2、 本地DNS服务器如果对查询信息具有权威性,则返回权威答案给本地,如果不具有权威性,会查询自己的缓存中的记录,如果有查询信息,则返回非权威答案给客户端
    3、如果缓存中没有查询信息,DNS会从根服务器开始,按照DNS层次结构向下查询,直到查询到对于查询信息具有权威性的服务器,并且返回权威答案给客户端。
    4、DNS服务器将查询信息发送给客户端,客户端在缓存中保留一个副本,以便以后查询。

三、DNS术语
     1、递归查询
         是指DNS服务器在收到用户发起的请求时,必须向用户返回一个准确的查询结果。如果DNS服务器本地没有存储与之对应的信息,则该服务器需要询问其他服务器,并将返回的查询结构提交给用户。
     2、迭代查询
         是指DNS服务器在收到用户发起的请求时,并不直接回复查询结果,而是告诉另一台DNS服务器的地址,用户再向这台DNS服务器提交请求,这样依次反复,直到返回查询结果。
     3、DNS缓存
        DNS缓存是将解析数据存储在靠近发起请求的客户端的位置,也可以说DNS数据是可以缓存在任意位置,最终目的是以此减少递归查询过程,可以更快的让用户获得请求结果。
     4、TTL
        英文全称Time To Live ,这个值是告诉本地域名服务器,域名解析结果可缓存的最长时间,缓存时间到期后本地域名服务器则会删除该解析记录的数据,删除之后,如有用户请求域名,则会重新进行递归查询/迭代查询的过程。
     5、TLD Server
        英文全称Top-level domains Server,指顶级域名服务器。
     6 、DNS Resolver
        指本地域名服务器,它是DNS查找中的第一站,是负责处理发出初始请求的DNS服务器。运营商ISP分配的DNS、谷歌8.8.8.8等都属于DNS Resolver。
     7、Root Server
        指根域名服务器,当本地域名服务器在本地查询不到解析结果时,则第一步会向它进行查询,并获取顶级域名服务器的IP地址。
     8、DNS Query Flood Attack
        指域名查询攻击,攻击方法是通过操纵大量傀儡机器,发送海量的域名查询请求,当每秒域名查询请求次数超过DNS服务器可承载的能力时,则会造成解析域名超时从而直接影响业务的可用性。
     10、URL转发
        英文 Url Forwarding,也可称地址转向,它是通过服务器的特殊设置,将一个域名指向到另外一个已存在的站点
     12、DNSSEC
        域名系统安全扩展(DNS Security Extensions),简称DNSSEC。它是通过数字签名来保证DNS应答报文的真实性和完整性,可有效防止DNS欺骗和缓存污染等攻击,能够保护用户不被重定向到非预期地址,从而提高用户对互联网的信任。

四、DNS 记录类型

前四个(A、AAAA、CNAME、MX)和NS记住
A           IPV4记录,支持将域名映射到IPV4地址使用
AAAA     IPV6记录,支持将域名映射到IPV6地址使用
CNAME  别名记录,支持将一个域名指向令一个域名
MX        电邮交互记录,支持将域名指向邮件地址使用
NS        名称服务器记录,支持将子域名委托给其他DNS服务器解析 

   

五、DNS客户端验证域名解析
       host命令
       host 命令默认是使用 /etc/resolv.conf 文件中的 DNS 主机来查询的,若设置该参数,则使用这里设置的 DNS 主机进行查询。  
       [root@aliyun ~]# host www.zhiqing.asia    //  host + 域名
       [root@aliyun ~]# host www.zhiqing.asia 8.8.8.8  //host + 域名 + 指定DNS服务器地址(可以自己指定一台dns服务器使用,DNS服务器也可以写域名)
       [root@aliyun ~]# host -a www.zhiqing.asia 8.8.8.8  //  -a 详细信息
       nslookup命令
       [root@aliyun ~]# nslookup www.zhiqing.asia   //  解析域名对应的IP地址
       [root@aliyun ~]# nslookup server  // 查看本机的/etc/resolv.conf下的DNS服务器
       
 六、配置DNS
      1、修改网卡配置文件(重启后生效,/etc/resolv.conf里面的内容被覆盖)
      2、修改DNS配置文件 (立即生效,不影响网卡配置文件里面的内容)
      
====================================================


     
     

apache、nginx

一、WEB服务简介
      目前最主流的三个Web服务器是Apache、Nginx(轻量级web服务器 Linux)、 IIS(windows-server)。 静态 
       B/S 浏览器和服务器
       Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。 Web服务器是可以向发出请求的浏览器提供文档的程序:服务器是一种被动程序只有当Internet上运行其他计算机中的浏览器发出的请求时,服务器才会响应
       
二:WEB 服务协议
       WEB 服务应用层使用HTTP协议。HTTPS
       HTML(标准通用标记语言下的一个应用)文档格式。
       浏览器统一资源定位器(URL)。
       http 超文本传输协议
       https 加密的超文本传输协议
       为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。WWW 采用的是浏览器/服务器结构,其作用是整理和储存各种WWW资源,并响应客户端软件的请求,把客户所需的资源传送到 Windows、UNⅨ 或 Linux 等平台上
       
三、WEB 服务器的工作原理
        1、连接过程:Web服务器和其浏览器之间所建立起来的一种连接。查看连接过程是否实现,用户可以找到和打开socket这个虚拟文件,这个文件的建立意味着连接过程这一步骤已经成功建立。
        2、请求过程:Web的浏览器运用socket这个文件向其服务器而提出各种请求。
        3、应答过程:运用HTTP协议把在请求过程中所提出来的请求传输到Web的服务器,进而实施任务处理,然后运用HTTP协议把任务处理的结果传输到Web的浏览器,同时在Web的浏览器上面展示上述所请求之界面。
        4、关闭连接:当上一个步骤--应答过程完成以后,Web服务器和其浏览器之间断开连接之过程。
        扩展:
        socket一般指套接字。所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。
        
        
四、Web中间件介绍
        中间件,是提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通。中间件处在操作系统和更高一级应用程序之间。他充当的功能是:将应用程序运行环境与操作系统隔离,从而实现应用程序开发者不必为更多系统问题忧虑,而直接关注该应用程序在解决问题上的能力 。容器就是中间件的一种。中间件是一类能够为一种或多种应用程序合作互通、资源共享,同时还能够为该应用程序提供相关的服务的软件。(注意:中间件是一类软件的总称,不是单独的一个软件)web中间件也叫做web服务器或者web容器,正常情况下一次web的访问顺序是:web浏览器—服务器(硬件)—web容器—web应用服务器—数据库服务
        
        后端开发语言,java、php、python
         java中间件:Tomcat(8080)、Weblogic  
         war包   .war tomcat   
         jar包     .jar  jdk  (java -jar)  
         Php 中间件:  php-fpm php 
         Python 中间件: uwsgi
         
 ===================================================
 
 http服务
       www.apache.org


apache安装
        #yum -y install httpd  httpd-tools  httpd-devel
                                             用户控制      主包的扩展包
       直接安装Apache主包就可以,包含用户控制包,主包扩展包可以不安装
apache启动
      #systemctl start/enable httpd 
apache端口
      #80
apache静态页面测试:
    index.html 默认主页的名称
    /var/www/html 默认发布网站的目录
    /var/www  apache的家目录
    /etc/httpd/conf/httpd.conf 主配置文件
    /etc/httpd/conf.d/welcome.conf Apache欢迎界面,静态测设要删除这个文件,重启

    apache下载服务静态测试:
    服务端:/var/www/html/
    [root@localhost html]# mkdir -v /var/www/html/download
    [root@localhost html]# touch /var/www/html/download/b.txt
    [root@localhost conf.d]# rm -rvf /etc/httpd/conf.d/welcome.conf 
    [root@localhost ~]# systemctl restart httpd
    客户端:浏览器访问
    10.1.1.2
    
    也可以安装文本浏览器方便测试
    每次打开浏览器不是很方便,因此可以在服务器端安装文本浏览器,方便测试。
     [root@xingdian ~]# yum -y install elinks         # 安装elinks文本浏览器
     [root@xingdian ~]# elinks 192.168.5.20           # 按ctrl + c退出
     [root@xingdian ~]# elinks --dump 192.168.135.160
     --dump 静态显示,相当于curl,http好像可以不写
     [root@localhost ~]# curl http://10.11.65.70    #本地访问
     [root@localhost ~]# firefox http://10.11.65.70 #使用火狐浏览器
     
=======================================================
      
      基于端口划分的Apache虚拟主机
      
       [root@localhost ~]# vim /etc/httpd/conf.d/A.conf
        <VirtualHost *:81>
            Servername ip、域名、名字
            DocumentRoot /webA
        </VirtualHost>
        <Directory "/webA">
            AllowOverride ALL
            Require all granted
        </Directory>
       [root@localhost ~]# vim /etc/httpd/conf.d/B.conf
        <VirtualHost *:82>
            Servername ip、域名、名字
            DocumentRoot /webB
        </VirtualHost>
        <Directory "/webB">
            AllowOverride ALL
            Require all granted
        </Directory>
        [root@localhost ~]# vim /etc/httpd/conf/httpd.conf
         Listen 81
         Listen 82
        [root@localhost ~]# mkdir -v /webA
        [root@localhost ~]# mkdir -v /webB
        [root@localhost ~]# echo "this is A" > /webA/index.html
        [root@localhost ~]# echo "this is B" > /webB/index.html
        [root@localhost ~]# systemctl restart httpd
        [root@localhost ~]# curl http://192.168.42.88:81
        [root@localhost ~]# curl http://192.168.42.88:82       
        基于ip划分的Apache虚拟主机
        [root@aliyun ~]# ip a a 172.20.171.235/20 dev eth0
        [root@aliyun ~]# vim /etc/httpd/conf.d/A.conf
        <VirtualHost 172.20.171.234:80>
              Servername ip、域名、名字
              DocumentRoot /webA
        </VirtualHost>
        <Directory "/webA">
              AllowOverride ALL
              Require all granted
        </Directory>
        [root@aliyun ~]# vim /etc/httpd/conf.d/A.conf
        <VirtualHost 172.20.171.235:80>
              Servername ip、域名、名字
              DocumentRoot /webB
        </VirtualHost>
        <Directory "/webA">
              AllowOverride ALL
              Require all granted
        </Directory>
        [root@aliyun ~]# curl http://172.20.171.234
        [root@aliyun ~]# curl http://172.20.171.235
        云服务器基于ip的apache虚拟主机的划分,不能浏览器访问
       基于域名划分的Apache虚拟主机
       [root@aliyun ~]# vim /etc/httpd/conf.d/A.conf
        <VirtualHost *:80>
              Servername www.zhiqing.com
              DocumentRoot /webA
        </VirtualHost>
        <Directory "/webA">
              AllowOverride ALL
              Require all granted
        </Directory>
        [root@aliyun ~]# vim /etc/httpd/conf.d/A.conf
        <VirtualHost 172.20.171.235:80>
              Servername www.lizhen.com
              DocumentRoot /webB
        </VirtualHost>
        <Directory "/webA">
              AllowOverride ALL
              Require all granted
        </Directory>
        [root@localhost ~]# vim /etc/hosts   如果在局域网内部,做一下本地域名解析
        10.11.65.39 www.zhiqing.com
        10.11.65.39 www.lizhen.com
        本地登陆验证
        [root@localhost ~]# curl http://www.lizhen.com
        [root@localhost ~]# curl http://www.zhiqing.com
        
 注意:一般的公司都是基于域名创建虚拟主机
          基于ip创建的虚拟主机,其他的相同,ip不同
          基于域名创建的虚拟主机,其他的相同,域名不同
          基于端口创建的虚拟主机,其他的相同,端口不同
          三种方式可以相互转换
       
========================================================
        
       apache的rewrite规则(重定向)
<VirtualHost *:80 >
        Servername     www.xingdian.com
        serverAlias         xingdian.com
        DocumentRoot   /web
</VirtualHost>
<Directory "/web">
        Require all granted
        AllowOverride ALL
        RewriteEngine on
        RewriteCond %{HTTP_HOST} ^www.xingdian.com$
        RewriteRule ^(.*)$ https://www.jd.com [R=301,L]     
</Directory>
注意:
R=301 强制外部重定向
NC 不区分大小写
[OR] 或者

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

      apache的日志
        web服务器出现大量的访问日志和错误日志,所以我们要对日志进行切割,方便管理人员的查询。一些并不重要的记录,可以规定日志中不显示这些。
        
        [root@localhost ~]# ls /var/log/httpd
        access_log  error_log
 
 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
 LogFormat "%h %l %u %t \"%r\" %>s %b" common
 
状态码
200正常访问
301永久重定向
304访问缓存

/var/log/httpd acces_log error_log
-  %h 是来源ip
-  %u 访问的user
-  %t时间
-  %r 动作
     有些时候一些用户使用代理服务器,这里的%h会显示代理ip,在%h后面加上%{X-FORWARDED-FOR}i 即显示真实ip。

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

Nginx服务

              Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。
              
        轻量级的web服务器(运行静态网站)
        代理服务器(翻墙)
        负载均衡器(缓解单台服务器的压力,集群必备)
        安装nignx (1.19 1.18)偶数是稳定版本,奇数是不稳定版本

安装nginx(安装官方最新稳定版本1.18)
     [root@xingdian ~]# yum -y install nginx
     [root@xingdian ~]# systemctl start nginx
     [root@xingdian ~]# systemctl enable nginx
     [root@xingdian ~]# ss -antp |grep :80   lsof -i:80
     如果端口占用,killall -9 干掉占用端口的进程
     
nginx简单使用
     [root@localhost yum.repos.d]# nginx -v     //查看nginx版本
     nginx version: nginx/1.18.0
     [root@localhost yum.repos.d]# nginx -t     //检测nginx是否有语法错误
     [root@xingdian-server-77 /]# nginx -s reload  //重新加载nginx的配置文件

/usr/share/nginx/html         nginx的默认网站发布目录

Nginx的配置文件
     [root@nginx ]# vim /etc/nginx/nginx.conf     //nginx主配置文件
     [root@nginx ]# vim /etc/nginx/conf.d        //nginx子配置文件
     
Nginx的网页文件(静态)
      [root@nginx ~]# echo "nginx test first page" > /usr/share/nginx/html/index.html
      [root@nginx ~]# elinks --dump 192.168.135.160
      
========================================================

LAMP和LNMP架构

LAMP 即 Linux+Apache+Mysql/MariaDB+Perl/PHP/Python的首字母缩写。这是一组常用来搭建动态网站或者服务器的开源软件。它们本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。随着开源潮流的蓬勃发展,开放源代码的LAMP已经与J2EE和.Net商业软件形成三足鼎立之势,并且该软件开发的项目在软件方面的投资成本较低,因此受到整个IT界的关注。从网站的流量上来说,70%以上的访问流量是LAMP来提供的,LAMP是最强大的网站解决方案。
        基于 LAMP 架构设计具有成本低廉、部署灵活、快速开发、安全稳定等特点,是 Web 网络应用和环境的优秀组合。
        
        编译安装
       作业。编译安装组合一个LAMP架构
        LAMP一键安装包,git   github(私有) gitlib(公网) 版本库,版本控制库,开发人员把写好的包存放到版本库,其他人可以去下载
       mysql 5.7、mariadb 5.5、php 5.6、phpmysdmin 图形化界面
       AP AP AP 负载均衡 NFS(为了负载均衡实际公司LAMP不会放在一个服务器上)
        |    |     | 
       M M M M 双主双从 ip地址  用户名 数据库名 后端 ()
        
       LAMP架构部署
       
一、yum安装、开启、开机自启 AMP三大服务

[root@xingdian ~]# yum -y install httpd mariadb-server mariadb php php-fpm php-mysql php-gd gd php-curl
      php php-fpm php-mysql  (php安装必选)
      php-gd gd php-curl (php安装可选)
[root@server-1 ~]# systemctl start php-fpm httpd mariadb
[root@server-1 ~]# systemctl enable php-fpm httpd mariadb

二、三大服务的配置

1、数据库配置
mariadb(mysql)
①、设置root登录密码
[root@server-1 ~]# mysqladmin -u root  password '123'
②、登录数据库
[root@server-1 ~]# mysql -u root -p123
③、创建数据库
MariaDB [(none)]> create database wordpress;
MariaDB [(none)]> exit
Bye

2、apache配置
apache(创建一个虚拟主机配置文件)
安装wordpress、discuz、farm
[root@server-1 ~]# vim /etc/httpd/conf.d/wordpress.conf
<VirtualHost *:80>
    ServerName www.kuangdian.com
    DocumentRoot /web1
</VirtualHost>
<Directory "/web1">
    AllowOverride ALL
    Require all granted
</Directory>
安装edusoho(注意网站发布目录的路径写法)
<VirtualHost *:83>
        ServerName www.kuangdian.com
        DocumentRoot /web8/web
</VirtualHost>
<Directory "/web8">
        AllowOverride ALL
        Require all granted
</Directory>

创建网站发布目录
[root@server-1 ~]# mkdir /web1

3、php配置
安装wordpress、edusoho、discuz的时候php不部署使用默认配置
安装farm的时候修改配置文件
[root@almp ~]# vim /etc/php.ini
开启short_open_tag=On
扩展:php的配置文件
upload_max_filesize = 100000M  上传文件的大小
max_file_uploads = 2000 最大上传文件的个数
allow_url_fopen = On 开启本地文件包含
allow_url_include = Off 关闭远程文件包含
date.timezone = Asia/Shanghai 时区

四、产品上线

下载项目包(后端开发给你打包好的)
[root@server-1 ~]# tar xf wordpress-4.9.4-zh_CN.tar.gz
[root@server-1 ~]# cp -r wordpress/* /web1/
下载项目包,将项目包解压并上传到网站发布目录下
安装farm的时候数据库的导入:
[root@server-1 conf.d]# mysql -u root -p123 farm < /web2/qqfarm.sql 
给网站发布目录777权限
[root@server-1 conf.d]# chmod 777 /web2 -R
先重启php 后重启 apache
重启三大服务,浏览器登陆验证

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

LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。
Linux是目前最流行的免费操作系统。
Nginx是一个高性能的HTTP和反向代理服务器。轻量级 开源 免费
Mysql是一个小型关系型数据库管理系统。 mariadb
PHP是一种在服务器端执行的嵌入HTML文档的脚本语言。
这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。

LNMP架构部署

一、yum安装、开启、开机自启 AMP三大服务

[root@xingdian ~]# yum -y install mariadb-server mariadb php php-cli php-curl php-fpm php-intl php-mcrypt php-mysql php-gd php-mbstring php-xml php-dom
[root@xingdian ~]# yum -y install nginx  //nginx要单独安装最新版
[root@xingdian ~]# systemctl start php-fpm nginx mariadb
[root@xingdian ~]# systemctl enable php-fpm nginx mariadb
[root@xingdian ~]# ss -antp |egrep ':80|:9000'  egrep 支持扩展正则  过滤 lsof -i:80 lsof -i:9000 lsof -i:3306
[root@xingdian ~]# ss -ant |egrep ':80|:9000'
LISTEN 0 128 127.0.0.1:9000 *:*
LISTEN 0 128 *:80 *:*

二、三大服务的配置

1、数据库配置
mariadb(mysql)
①、设置root登录密码
[root@server-1 ~]# mysqladmin -u root  password '123'
②、登录数据库
[root@server-1 ~]# mysql -u root -p123
③、创建数据库
MariaDB [(none)]> create database wordpress;
MariaDB [(none)]> exit
Bye

2、配置nginx服务(nginx是配置子配置文件)
[root@xingdian ~]# vim /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm;
}
可以修改ip、端口、域名进行nginx虚拟主机的划分,可以更改网站默认发布目录
如果是php写的项目,在index加入  index.php
去掉以下行的注释:
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
去掉注释,实现nginx和php的互相通讯,如果修改了网站发布目录,需要更改root下的目录,注意,如果网站默认发布目录没有改,也需要把root后面改成/usr/share/nginx/html,/scripts$改为$document_root$
}
[root@xingdian ~]# systemctl restart nginx

3、产品上线
[root@xingdian ~]# wget https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz //下载
[root@xingdian ~]# tar xf wordpress-4.9.4-zh_CN.tar.gz //解压缩
[root@xingdian ~]# cp -rf wordpress/* /usr/share/nginx/html //复制到网站主目录
[root@server-1 conf.d]# chmod 777 /web2 -R

ssh、Jumpserver

1、ssh服务 ,免密登陆,远程拷贝
    ssh默认自动安装,自动运行,无论关闭不关闭防火墙、selinux、安全组都默认开启安装
      openssh-server    提供服务   sshd的服务
      openssh-clients    客户端  ssh 10.11.59.91
      安装ssh
      [root@qfedu.com ~]# yum install openssh*  -y
      ssh  端口22
      
    服务器端:
      启动服务:
      [root@qfedu.com ~]# systemctl start sshd
     先直接验证是否启动ssh:
      [root@aliyun share]# lsof -i:22
      [root@aliyun share]# ss -auntpl | grep sshd
      [root@aliyun share]# ss -auntpl | grep :22
     
    客户端:
     远程登陆管理:
      [root@ssh-clinet ~]# ssh 10.11.65.32    //客户端输入ssh-server密码,进入ssh-server界面,这样登陆的是ssh-server的root账户
      [root@ssh-server ~]# useradd sun     
      [root@ssh-server ~]# passwd sun
      [root@ssh-clinet ~]# ssh sun@10.11.65.32   //账户@ip,输入账户sun的密码,客户端可以登陆到ssh-server的sun账户。
      [root@ssh-clinet ~]# ssh -X 10.11.65.32   //如果ssh-server是图形化界面,-X 可以在本地打开远端服务器的图像化界面的软件,比如输入firefox可以打开火狐  
      [root@ssh-clinet ~]# ssh 10.11.65.32 -p 2222   //如果ssh-server更改了ssh的默认22端口号,客户端远程登陆的时候需要-p指定ssh-server更改后的端口
     
      无密码登陆(ssh密钥认证)
       免密操作:客户端产生公钥和私钥,并且把公钥拷贝给ssh-server,然后输入ssh-server的密码,以后客户端再次登陆就可以免密登陆
    客户端产生公钥和私钥:
    [root@ssh-clinet ~]# ssh-keygen        //一路回车     
    客户端把拷贝公钥给对方:并且输入ssh-server的密码
    [root@ssh-clinet ~]# ssh-copy-id -i 10.11.65.32
    [root@localhost ~]# ssh-copy-id -i sun@10.11.65.99  //指定用户做免密操作
    
    客户端的公钥和私钥存放路径/root/.ssh
    id_rsa.pub是公钥    id_rsa是私钥
    [root@ssh-clinet ~]# ls /root/.ssh
     id_rsa  id_rsa.pub  known_hosts
    ssh服务器端的/root/.ssh/authorized_keys是存放客户端发送过来的公钥的
    [root@ssh-server ~]# ls /root/.ssh
    authorized_keys  id_rsa  id_rsa.pub  known_hosts
    known_hosts  存放已经建立连接的主机信息
    
    直接执行远程命令:
    [root@qfedu.com ~]# ssh 10.18.44.208  "reboot"
    即使做了免密操作,执行命令还是需要输入密码的(除非做双向免密)
    
远程拷贝:
    需要先安装客户端
    cp -v  文件源路径 文件目的路径
    cp -rv 目录源路径 目录目的路径
    
     谁是远程谁加IP
    [root@qfedu.com ~]# scp   /a.txt     192.168.2.108:/
    [root@qfedu.com ~]# scp   192.168.2.108:/a.txt     ./      
     -P端口
     拷贝目录加-r选项
    
   修改端口号和ssh日志对象
   [root@qfedu.com ~]#  vim /etc/ssh/sshd_config
    Port 22   
    ListenAddress 192.168.2.8
    PermitRootLogin yes
    MaxSessions 10        最大并发量
    PermitEmptyPasswords no

指纹不匹配
[root@xingdian ~]# ssh 172.16.50.240
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
7e:b5:1d:3b:1c:81:d2:6b:d2:96:f7:1a:1f:e8:16:27.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending key in /root/.ssh/known_hosts:2
RSA host key for 172.16.50.240 has changed and you have requested strict checking.
Host key verification failed.
[root@xingdian ~]# rm ~/.ssh/known_hosts //删除已建立过连接主机的密钥


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

jumpserver跳板机部署
硬件硬件配置: 1个CPU核心, 3G 内存, 50G 硬盘(最低)
操作系统: Linux 发行版 x86_64 centos 7 
Python = 3.6.x
Mariadb Server ≥ 5.5.56 数据库服务
Redis   数据库缓存服务
1台服务器(jumpserver) 
 1-n 台服务器(server) 

一:环境部署
备注:主机名,yum仓库,网络都要保证正常
1.关闭防火墙和selinux,修改字符集
[root@jumpserver ~]# systemctl stop firewalld
[root@jumpserver ~]# systemctl disable firewalld
[root@jumpserver ~]# sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config
[root@jumpserver ~]# setenforce 0
2.修改字符集,否则可能报 input/output error的问题,因为日志里打印了中文
[root@jumpserver ~]# localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8
[root@jumpserver ~]# export LC_ALL=zh_CN.UTF-8
[root@jumpserver ~]# echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf

备注:export 声明一个变量为环境变量

二:部署安装
1.安装python3.6,数据库mariadb和redis以及环境准备
[root@jumpserver ~]# yum -y install python36 python36-devel redis mariadb mariadb-server wget mariadb-devel python-devel openldap-devel

2.启动数据库和redis服务
[root@jumpserver ~]# systemctl start mariadb redis
[root@jumpserver ~]# systemctl enable mariadb redis

3.数据库部署
默认root账户登陆是没有密码的
[root@jumpserver ~]# mysql -u root
创建一个数据库,并且指定这个数据库所使用的字符集为utf-8;
MariaDB [(none)]> create database jumpserver default charset 'utf8' collate 'utf8_bin';
Query OK, 1 row affected (0.00 sec)
授权 .是分隔符 *代表数据库中的全部的表。授权jumpserver库和库中所有表的权限给本机的jumpserver,密码是weakPasswd
MariaDB [(none)]> grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by 'weakPassword';
Query OK, 0 rows affected (0.00 sec)
刷新数据库使其生效
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> quit

4.创建Python虚拟环境
        [因为 CentOS 7 自带的是 Python2,而 Yum 等工具依赖原来的 Python,为了不扰乱原来的环境我们来使用 Python 虚拟环境]
[root@jumpserver ~]# cd /opt/
[root@jumpserver opt]# python3.6 -m venv py3          //给/opt创建一个python虚拟环境
[root@jumpserver opt]# source /opt/py3/bin/activate
        [此项仅为懒癌晚期的人员使用,防止运行 Jumpserver 时忘记载入 Python 虚拟环境导致程序无法运行。使用autoenv]因为每次操作Jumpserver都要载入py3环境
(py3) [root@jumpserver opt]# echo "source /opt/py3/bin/activate" >> ~/.bashrc
(py3) [root@jumpserver opt]# source ~/.bashrc
//source 是让文件立即生效,每次运行都可以自动加载py3环境

5.安装配置Jumpserver
(py3) [root@jumpserver opt]# cd /opt && wget https://github.com/jumpserver/jumpserver/releases/download/v2.0.2/jumpserver-v2.0.2.tar.gz
解压,改名
(py3) [root@jumpserver opt]# tar xf jumpserver-v2.0.2.tar.gz 
(py3) [root@jumpserver opt]# mv jumpserver-v2.0.2 jumpserver

添加虚拟环境
(py3) [root@jumpserver requirements]# echo "source /opt/py3/bin/activate" > /opt/jumpserver/.env
安装依赖包
(py3) [root@jumpserver opt]# cd /opt/jumpserver/requirements/
安装rpm包的依赖
(py3) [root@jumpserver requirements]# yum install -y $(cat rpm_requirements.txt)
$()=`` 

修改pip仓库:加快安装速度
方法一:
(py3) [root@jumpserver requirements]# cat /opt/py3/pip.conf 
vim /opt/py3/pip.conf  把下面的四行内容加进去

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = https://pypi.tuna.tsinghua.edu.cn

(py3) [root@jumpserver requirements]# pip install wheel && \
pip install --upgrade pip setuptools && \
pip install -r requirements.txt

如果出现 time out  继续执行上一条命令,直到安装成功

=====
修改配置文件:(配置文件见子目录)(第一行加#)
(py3) [root@jumpserver requirements]# cd /opt/jumpserver && cp config_example.yml config.yml &&vi config.yml
删除config.yml里面的所有内容,复制笔记里面的配置文件

加载虚拟环境并后台启动
(py3) [root@jumpserver jumpserver]# source /opt/py3/bin/activate
(py3) [root@jumpserver jumpserver]# ./jms start -d

6.安装部署KoKo组件
(py3) [root@jumpserver jumpserver]# cd /opt && wget https://github.com/jumpserver/koko/releases/download/v2.0.2/koko-v2.0.2-linux-amd64.tar.gz

(py3) [root@jumpserver opt]# tar xf koko-v2.0.2-linux-amd64.tar.gz 
(py3) [root@jumpserver opt]# mv koko-v2.0.2-linux-amd64 koko
(py3) [root@jumpserver opt]# chown -R root:root koko && cd koko

修改配置文件(见子目录)
修改koko配置文件(见笔记)
(py3) [root@jumpserver opt]# cd koko
(py3) [root@jumpserver koko]# ls
config_example.yml  data  koko  locale  static  templates
(py3) [root@jumpserver koko]# vim config_example.yml    //全部删除,复制黏贴

启动
(py3) [root@jumpserver koko]# ./koko  -d

7.部署guacamole
下载:
(py3) [root@jumpserver opt]# cd /opt && wget -O /opt/guacamole.tar.gz https://github.com/jumpserver/docker-guacamole/archive/2.0.2.tar.gz
部署:
(py3) [root@jumpserver opt]# tar -xf docker-guacamole-2.0.2.tar.gz && mv docker-guacamole-2.0.2 guacamole && cd /opt/guacamole && tar -xf guacamole-server-1.2.0.tar.gz && tar -xf ssh-forward.tar.gz -C /bin/ && chmod +x /bin/ssh-forward

安装:
(py3) [root@jumpserver guacamole]# cd /opt/guacamole/guacamole-server-1.2.0
注意:这个地方如果单独执行编译安装会报错需要事先准备好下面的编译环境在安装
[root@jumpserver guacamole-server-1.2.0]# yum -y install libjpeg-devel libpng-devel libvorbis-devel libwebp-devel openssl-devel pulseaudio-libs-devel libwebsockets-devel libvncserver-devel libtelnet-devel libssh2-devel pango-devel freerdp-devel  uuid uuid-devel
(py3) [root@jumpserver guacamole-server-1.2.0]# ./configure --with-init-dir=/etc/init.d && \
make && \
make install

注意:这个地方如果单独执行编译安装会报错需要事先准备好下面的编译环境在安装
[root@jumpserver guacamole-server-1.2.0]# yum -y install libjpeg-devel libpng-devel libvorbis-devel libwebp-devel openssl-devel pulseaudio-libs-devel libwebsockets-devel libvncserver-devel libtelnet-devel libssh2-devel pango-devel freerdp-devel  uuid uuid-devel
jdk+tomcat

安装java环境
(py3) [root@jumpserver guacamole-server-1.2.0]# yum install -y java-1.8.0-openjdk

创建对应目录
(py3) [root@jumpserver config]# mkdir -p /config/guacamole /config/guacamole/extensions /config/guacamole/record /config/guacamole/drive && chown daemon:daemon /config/guacamole/record /config/guacamole/drive && cd /config

部署tomcat
(py3) [root@jumpserver config]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.36/bin/apache-tomcat-9.0.36.tar.gz

(py3) [root@jumpserver config]# tar -xf apache-tomcat-9.0.36.tar.gz && \
mv apache-tomcat-9.0.36 tomcat9 && \
rm -rf /config/tomcat9/webapps/* && \
sed -i 's/Connector port="8080"/Connector port="8081"/g' /config/tomcat9/conf/server.xml && \
echo "java.util.logging.ConsoleHandler.encoding = UTF-8" >> /config/tomcat9/conf/logging.properties && \
ln -sf /opt/guacamole/guacamole-1.0.0.war /config/tomcat9/webapps/ROOT.war && \
ln -sf /opt/guacamole/guacamole-auth-jumpserver-1.0.0.jar /config/guacamole/extensions/guacamole-auth-jumpserver-1.0.0.jar && \
ln -sf /opt/guacamole/root/app/guacamole/guacamole.properties /config/guacamole/guacamole.properties

设置guacamole环境

(py3) [root@jumpserver config]# vim a.sh
(py3) [root@jumpserver config]# bash a.sh
vim a.sh 
bash a.sh

export JUMPSERVER_SERVER=http://127.0.0.1:8080
echo "export JUMPSERVER_SERVER=http://127.0.0.1:8080" >> ~/.bashrc
export BOOTSTRAP_TOKEN=zxffNymGjP79j6BN
echo "export BOOTSTRAP_TOKEN=zxffNymGjP79j6BN" >> ~/.bashrc
export JUMPSERVER_KEY_DIR=/config/guacamole/keys
echo "export JUMPSERVER_KEY_DIR=/config/guacamole/keys" >> ~/.bashrc
export GUACAMOLE_HOME=/config/guacamole
echo "export GUACAMOLE_HOME=/config/guacamole" >> ~/.bashrc
export GUACAMOLE_LOG_LEVEL=ERROR
echo "export GUACAMOLE_LOG_LEVEL=ERROR" >> ~/.bashrc
export JUMPSERVER_ENABLE_DRIVE=true
echo "export JUMPSERVER_ENABLE_DRIVE=true" >> ~/.bashrc
说明:
JUMPSERVER_SERVER 指 core 访问地址
BOOTSTRAP_TOKEN 为 Jumpserver/config.yml 里面的 BOOTSTRAP_TOKEN 值
JUMPSERVER_KEY_DIR 认证成功后 key 存放目录
GUACAMOLE_HOME 为 guacamole.properties 配置文件所在目录
GUACAMOLE_LOG_LEVEL 为生成日志的等级
JUMPSERVER_ENABLE_DRIVE 为 rdp 协议挂载共享盘

启动guacamole
(py3) [root@jumpserver config]# /etc/init.d/guacd start
Starting guacd: guacd[72995]: INFO:     Guacamole proxy daemon (guacd) version 1.2.0 started
SUCCESS
(py3) [root@jumpserver config]# sh /config/tomcat9/bin/startup.sh
Using CATALINA_BASE:   /config/tomcat9
Using CATALINA_HOME:   /config/tomcat9
Using CATALINA_TMPDIR: /config/tomcat9/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /config/tomcat9/bin/bootstrap.jar:/config/tomcat9/bin/tomcat-juli.jar
Tomcat started.

8.部署lina
(py3) [root@jumpserver config]# cd /opt && wget https://github.com/jumpserver/lina/releases/download/v2.0.2/lina-v2.0.2.tar.gz

(py3) [root@jumpserver opt]# tar -xf lina-v2.0.2.tar.gz
(py3) [root@jumpserver opt]# mv lina-v2.0.2 lina

9.部署luna
(py3) [root@jumpserver config]# cd /opt && wget https://github.com/jumpserver/luna/releases/download/v2.0.2/luna-v2.0.2.tar.gz

(py3) [root@jumpserver opt]# tar -xf luna-v2.0.2.tar.gz
(py3) [root@jumpserver opt]# mv luna-v2.0.2 luna

10.安装nginx
nginx的yum仓库文件:
(py3) [root@jumpserver opt]# cat /etc/yum.repos.d/nginx.repo 
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

(py3) [root@jumpserver opt]# yum -y install nginx

修改配置文件:(内容见子目录)
(py3) [root@jumpserver opt]# echo > /etc/nginx/conf.d/default.conf
(py3) [root@jumpserver opt]# vi /etc/nginx/conf.d/jumpserver.conf

启动nginx:
(py3) [root@jumpserver opt]# systemctl start nginx
(py3) [root@jumpserver ~]# systemctl enable nginx

11.开始使用jumpserver
        服务全部启动后, 访问 JumpServer 服务器 nginx 代理的 80 端口, 不要通过8080端口访问 默认账号: admin 密码: admin

扩展:
安装可以使ansible使用密码连接
yum -y install sshpass


管理用户: 是资产(被控服务器)上的 root,他要获取资产(被控服务器)的硬件信息,还要将系统用户推送给资产(被控服务器)
系统用户: 自己创建,JumpServer 跳转登录资产时使用的用户

简单来说是用户使用自己的用户名登录 JumpServer,JumpServer  使用系统用户登录资产。系统用户创建时,如果选择了自动推送,JumpServer 会使用 Ansible  自动推送系统用户到资产中,如果资产(交换机)不支持 Ansible,请手动填写账号密码

终端连接jumpserver
     [root@yumanzhuang ~]# ssh admin@10.11.65.100 -p 2222

操作系统初始化和服务集群实验

操作系统初始化
一:目的
提高系统安全性,提升系统性能。为老板省钱

二:生产环境常用初始化操作
      2.1、删除部分不需要的用户和组
      2.2、修改root帐户密码越复杂越好
      echo ‘Fighting@#123$if*you’ | passwd --stdin root
      2.3、禁止IP伪装
      [root@xingdian ~]# vim /etc/host.conf
      在里面加上:nospoof on
      2.4、禁止ping
      [root@xingdian ~]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all #禁止ping
​      [root@xingdian ~]# echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all #解除禁止ping操作
      2.5、远程5分钟无操作自动注销:
      [root@xingdian ~]# vim /etc/profile
      最后添加:
      export TMOUT=300   #5分钟自动注销,单位是秒second
      source /etc/profile     让配置文件立即生效

找到
HISTSIZE=1000  (历史命令的字节)
修改为:
HISTSIZE=100 #减少日记字节为100KB,太大内容过多容易漏重要信息.

      2.6、修改SSH
      [root@xingdian ~]# vim /etc/ssh/sshd_config
      Port 22 修改 18888
PermitEmptyPasswords no #把‘#’注销掉-禁止空密码帐户登入服务器
​PermitRootLogin yes   允许root账户登陆
MaxAuthTries 2 #两次错误就切断重新SSH启动登入

       2.7、用防火墙关闭无用的端口
      systemctl stop firewalld
      
      2.8、关闭Selinux
      [root@xingdian ~]# sed –i ‘/^SELINUX=/c SELINUX=disabled’ /etc/selinux/config
      
      2.9、更新Yum源及必要软件安装
      Yum安装软件,默认获取rpm包的途径从国外官方源,改成国内的源。
      国内较快的两个站点:阿里云、搜狐镜像站点、网易镜像站点
      [root@xingdian ~]# cd /etc/yum.repos.d/
      [root@xingdian yum.repos.d]# mv CentOS-Base.repo CentOS-Base.repo.bak
       [root@xingdian yum.repos.d]# wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
      接下来执行如下命令,检测yum是否正常
      [root@xingdian yum.repos.d]# yum clean all  #清空yum缓存
      [root@xingdian yum.repos.d]# yum makecache  #建立yum缓存
      wget nginx lsof ntpdate
      2.10、定时自动更新服务器时间
      [root@xingdian ~]# echo '*/5 * * * * ntpdate time.windows.com >/dev/null 2 >&1' >>/var/spool/cron/root
      [root@xingdian ~]# echo '*/10 * * * * ntpdate time.nist.gov >/dev/null 2>&1' >>/var/spool/cron/root
      2.11、关闭所有不需要的服务
        

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


 

 

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐