2021-05-20

5.20 automation 01 ---------------------------------------------------------------
【●】systemd
  一、概述
  1.systemd简介
●systemd是linux系统的一组基本构建块
●他提供了一个系统和服务管理器
●他作为PID 1 运行并启动系统的其余部分进程
●控制systemd的主要命令是systemctl
步骤一:熟悉systemctl常用命令
1)命令列表
[root@web1 ~]# systemctl                             #列出所有启动的服务
[root@web1 ~]# systemctl status   <服务名称>            #查看服务状态
[root@web1 ~]# systemctl start     <服务名称>        #启动服务状态
[root@web1 ~]# systemctl stop      <服务名称>        #关闭服务状态
[root@web1 ~]# systemctl restart  <服务名称>        #重启服务状态
[root@web1 ~]# systemctl enable  <服务名称>            #设置开机自启
[root@web1 ~]# systemctl enable --now  <服务名称>    #设置开机自启并启动
[root@web1 ~]# systemctl disable  <服务名称>        #禁止开机自启
[root@web1 ~]# systemctl enable  <服务名称>            #设置开机自启
[root@web1 ~]# systemctl is-active <服务名称>        #查看是否激活
[root@web1 ~]# systemctl is-enabled  <服务名称>        #查看是否开启自启
[root@web1 ~]# systemctl reboot                    #重启计算机
[root@web1 ~]# systemctl poweroff                     #关闭计算机

步骤二:使用systemd管理Nginx服务
1)修改Unit文件来自定义systemctl控制的服务
[root@web1 ~]# cd /usr/lib/systemd/system
[root@web1 system]# ls httpd.service
[root@web1 system]# cp httpd.service  nginx.service
[root@web1 system]# vim nginx.service
[Unit] 
Description=nginx     #描述信息
After=network.target remote-fs.target nss-lookup.target  #域名相关服务启动之后再开启nginx

[Service]
Type=forking  #由于nginx是多进程服务,要设置forKing
ExecStart=/usr/local/nginx/sbin/nginx  #当执行systemctl start nginx 时,所执行的命令
ExecReload=/usr/local/nginx/sbin/nginx -s reload  #当执行systemctl reload nginx 时,所执行的命令
ExecStop=/bin/kill -s QUIT ${MAINPID}  #当执行systemctl stop nginx 时,所执行的命令,-s QUIT 是发送退出信号,${MAINPID}是nginx的主进程号

[Install]
WantedBy=multi-user.target    #支持开机自启

[root@web1 system]# systemctl daemon-reload  #刷新
[root@web1 system]# systemctl start  nginx  #开启nginx
[root@web1 system]# curl 192.168.2.100  #检查结果

---------------------------------------------------------------
自动化运维
一、版本控制
1.版本库
●典型的客户/服务器系统
—版本库是版本控制的核心
—任意数量的客户端
—客户端通过写数据库分享代码
2.版本控制类型
  ●集中式版本控制系统 (SVN)
  —开发者之间共用一个仓库
  —所有操作需要联网

  ●分布式版本控制系统   (GIT)
   —每个开发者都是一个仓库的完整克隆,每个人都是服务器
   —支持断网操作

3.分布式版本控制
 ●GIT基本概念
 —GIT仓库:
    保存所有数据的地方
 —工作区:
    从仓库中提取出来的文件,放在磁盘上供你使用或修改
 —暂存区:
    就是一个文件,索引文件,保存了下次将提交的文件列表信息

  ●工作流程                                                3.commit提交Git仓库
                     1.Clone数据到本地              |<--------------暂存区                                        
                    --------------------->          |                             | 
远程Git仓库                                     本地Git仓库                     |2.修改后add提交暂存区
服务器          <---------------------            |                           |   
                    4.push提交远程服务器            |----------->  本地工作区  

                                                                        
步骤一:部署Git服务器(192.168.4.20作为git服务器)
  服务器
1)YUM安装Git软件。
[root@gitlab ~]# dnf -y install git  #服务器安装git

2)初始化一个空仓库。
[root@gitlab ~]# mkdir   /var/lib/git
[root@gitlab ~]#  git init /var/lib/git/project --bare    #创建空仓库,用来存储项目数据   已初始化空的 Git 仓库于 /var/lib/git/project/
                         

步骤二:客户端测试(192.168.4.10作为开发人员的客户端主机)
    使用git常用指令
       指令                                          作用
     clone                           将远程服务器的仓库克隆到本地
     config                          修改git配置
      add                             添加修改到暂存区
     commit                        提交修改到本地仓库 
      push                            提交修改到远程服务器

  1)  使用clone指令克隆服务器仓库到本地。提示:默认会将仓库下载到本地的当前目录(当前目录在root家目录)!
[root@develop ~]# dnf -y install git  #客户端安装git
[root@develop ~]# git clone 192.168.4.20:/var/lib/git/project
正克隆到 'project'...
.......
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.4.20' (ECDSA) to the list of known hosts.
root@192.168.4.20's password:             #克隆git主机的资料,需要输入gitlab主机的密码
warning: 您似乎克隆了一个空仓库。
[root@develop ~]# ls                       #查看是否将仓库下载到了本地,名称为project
anaconda-ks.cfg  project    
[root@develop ~]# cd  /root/project/    #进入仓库,重要步骤,以后操作仓库都需要进入仓库的状态
[root@develop project]# ls -A
.git

2) 修改git配置
[root@develop project]# git config  --global user.name "abc"  #定义客户端的用户名
[root@develop project]# git config  --global user.email "abc@abc.com" #定义客户端的邮箱
[root@develop project]# cat ~/.gitconfig #检查结果
[user]
        name = abc
        email = abc@abc.com

3) 本地工作区对数据进行增删改查(必须要先进入仓库再操作数据)。
[root@develop project]# echo "abc001" > 001.txt

4) 将工作区的修改提交到暂存区。
[root@develop project]# git add .    #将仓库有变化的文件提交到暂存区

5) 将暂存区修改提交到本地仓库。
[root@develop project]# git commit  -m  “001”#提交之前暂存区的数据永久保存到仓库

6) 将本地仓库中的数据推送到远程服务器(develop将数据推送到git)。
[root@develop project]# git push                     #将本地数据推送给git服务器
root@192.168.4.20's password:    # 输入gitlab服务器root密码

7) 查看版本日志。
[root@develop project]# git log   #查询完整日志
[root@develop project]# git log --pretty=oneline  #精简日志
[root@develop project]# git log --oneline  #最精简日志
[root@develop project]# git reflog   #本机操作日志
[root@develop project]# git status
------------------------------------------------------------------
二、HEAD指针操作
HEAD指针,可以将仓库恢复到过去的状态(类似于虚拟机的快照)
   1)HEAD指针是一个可以在任何分支和版本移动的指针,通过移动指针我们可以将数据还原至任何版本。每做一次提交操作都会导致git更新一个版本,HEAD指针也跟着自动移动。

2) 查看Git版本信息。
[root@develop project]# git reflog #首先查询日志可以看到第1列的随机字符串,该字符串定义了每次commit提交的数据状态
828094c (HEAD -> master, origin/master) HEAD@{0}: commit: 003
ea4db68 HEAD@{1}: commit: 002
75567ff HEAD@{2}: commit (initial): 001

3)移动HEAD指针,将数据还原到任意版本。
提示:当前HEAD指针为HEAD@{0},HEAD@{1}是上一次指针的位置。
[root@develop project]# git reset --hard ea4db68  #回到时间节点为ea4db68的数据状态
[root@develop project]# git reflog
ea4db68 (HEAD -> master) HEAD@{0}: reset: moving to ea4db68
828094c (origin/master) HEAD@{1}: commit: 003
ea4db68 (HEAD -> master) HEAD@{2}: commit: 002
75567ff HEAD@{3}: commit (initial): 001

[root@develop project]# cat 001.txt                  #查看文件是否为001
abc001
回复到过去的时间节点,找回数据思路:
1,   git reflog  查看日志,找到旧数据所在时间节点
2、   git  reset  --hard  xxxx    回到过去,xxxx是时间节点的记录
3,   把需要找回的数据,从仓库中拷贝到另外一个目录
4,   git  reset  --hard  xxxx    回到现在
5,   在之前的目录找回旧数据
--------------------------------------------
三、Git分支操作
 1.Git分支
    当项目内容比较多时,Git支持按功能模块、时间、版本等标准创建分支,分支可以让开发分多条主线同时进行,每条主线互不影响

2.常见的分支规范如下:
MASTER分支(MASTER是主分支,是代码的核心)。
DEVELOP分支(DEVELOP最新开发成果的分支)。
RELEASE分支(为发布新产品设置的分支)。
HOTFIX分支(为了修复软件BUG缺陷的分支)。
FEATURE分支(为开发新功能设置的分支)。

步骤一:查看并创建分支
1)查看当前分支。
[root@develop project]# git status   #查看状态
位于分支 master
您的分支领先 'origin/master' 共 4 个提交。
  (使用 "git push" 来发布您的本地提交)

无文件要提交,干净的工作区
[root@develop project]# git branch             #查看分支,*代表目前所在分支
* master 

2)创建分支。
[root@develop project]# git branch hotfix  #创建名字为hotfix的分支(名字可以自定义)
[root@develop project]# git branch feature   #创建feature分支
[root@develop project]# git branch     #查看分支信息
  hotfix  
* master  

步骤二:切换与合并分支
1)切换分支。
[root@develop project]# git checkout hotfix  #切换到 'hotfix'分支
[root@develop project]# git branch
* hotfix
  master

2)在新的分支上可以继续进行数据操作(增、删、改、查)。
[root@develop project]#  echo "hotfix-001" > hotfix001.txt   #创建属于hotfix分支的文件
[root@develop project]# git add .      #提交到暂存区
[root@develop project]# git commit  -m  "hotfix001"   #提交到本地仓库

3)再次切换到master分支下查看并添加数据
[root@develop project]# git checkout master   #切换回默认分支
[root@develop project]# ls    #默认master分支中没有hotfix分支中的数据

[root@develop project]# echo "master001" > master001.txt #在master分支下在添加数据
[root@develop project]# git add .
[root@develop project]# git commit  -m  "master001"
 
4)将hotfix修改的数据合并到master分支。
注意,合并前必须要先切换到master分支,然后再执行merge命令。
[root@develop project]# git checkout master
[root@develop project]# git merge hotfix   #合并分支,进到文档中,直接保存退出,将hotfix分支的数据与当前分支合并

步骤三:删除仓库
重新在服务端创建空仓库
在客户端克隆空仓库
git clone 192.168.4.20:/var/lib/git/test
cd test/
echo "ABCD~~" > readme.txt
git add .
git commit -m "readme"

  3.  分支中的特殊情况:
如果分别在不同分支,创建同名文件,内容不同,再进行合并时,会发生冲突,此时需要手工修改冲突文件,修改完之后,就可以解决冲突
git branch hotfix     //创建新分支
git checkout hotfix    //切换到新分支
echo xyz > abc.txt    //创建文件
git add .    //提交到暂存区
git commit -m "abc"    //提交到本地仓库
git checkout master   //切换到默认分支
echo abc > abc.txt     //创建文件
git add .   //提交到暂存区
git commit -m "abc"   //提交到本地仓库
git merge hotfix   //合并分支,失败,因为两个分支有同名文件,但内容不同
vim abc.txt   //修改文件,保存退出后即可解决
git add .   //提交到暂存区
git commit -m "abc+"   //提交到本地仓库


使用ssh协议建立连接,实现免密通信
在develop下操作:
ssh-keygen    //创建ssh秘钥
ssh-copy-id 192.168.4.20   //传递秘钥到4.20
git clone 192.168.4.20:/var/lib/git/test   //克隆不需要密码
cd test    //进入仓库
echo xyz > xyz    //创建文件,然后提交
git add .
git commit -m "xyz"
git push    //上传到服务器也无需密码

git remote -v  //查看远程服务器名字与ip
git remote add tom 192.168.4.20:/var/lib/git/test   //与新服务器关联,名字叫tom
echo test01 > test01.txt   //创建测试文件
git add .
git commit -m "test01"
git push -u origin master    //指定名为origin的远程服务器提交数据到master分支

git remote remove origin   //删除名为origin的远程服务器
git remote -v
echo test02 > test02.txt   //创建测试文件
git add .
git commit -m "test02"
git push -u tom master  //指定名为tom的远程服务器提交数据到master分支

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值