60、Linux脚本实用工具编写与Git版本控制管理

Linux脚本实用工具编写与Git版本控制管理

1. 简单脚本实用工具编写

在管理Linux系统时,手动运行命令来监控各种事项既繁琐又容易出错。通过编写shell脚本实用工具,可以自动完成这些工作,提高效率。

1.1 脚本审计示例

在一次审计中,发现了之前报告中的虚假/无登录shell数量为44。同时,在进行SUID/SGID审计时,生成报告可能需要一些时间。此次审计与上次的差异显示,发现了 /home/christine/scripts/sneakyFile.exe 这个文件的SUID权限问题。

Previous report's false/nologin shells:
44

****** SUID/SGID Audit *****

Creating report. This may take a while...

Differences between this report and the last:
82d81 < /home/christine/scripts/sneakyFile.exe

1.2 脚本改进建议

为了让脚本更加完善,可以考虑以下改进:
- 添加额外审计 :例如对新添加的账户或登录失败尝试进行报告。
- 限制报告数量 :控制 AuditReports 目录中存储的报告数量。
- 使用校验和 :通过校验和(如SHA512sum)来确保报告未被修改。

1.3 脚本的其他应用场景

除了审计脚本,shell脚本还可以用于以下方面:
- 数据归档和备份 :使用 tar 命令在shell脚本中创建归档文件,并管理归档目录中的文件。
- 用户账户删除 :编写脚本完成删除用户账户的四个步骤,通过创建函数来处理重复代码,使代码更易读和修改。脚本可以根据需求设计为用于 cron 表的自动化脚本或交互式脚本。

2. 版本控制与Git环境搭建

2.1 版本控制的重要性

在团队协作编写和修改脚本时,版本控制至关重要。以一个系统管理团队维护备份脚本为例,当需要更新脚本以提高处理速度和可靠性时,如果没有有效的版本控制,团队成员在获取最新脚本版本、进行修改和测试时会面临诸多问题,如沟通成本高、容易出错等。

版本控制(也称为源代码控制或修订控制)是一种组织项目文件并跟踪其更新的方法或系统。它可以提供一个集中的地方来存储和合并脚本文件,确保最新版本易于访问,保护文件不被意外覆盖,减少不必要的沟通。

2.2 Git简介

Git是由Linus Torvalds在2005年为Linux项目开发的分布式版本控制系统(VCS),它在敏捷和持续软件开发环境中广泛应用,也适用于管理Bash shell脚本。

2.3 Git环境的关键组成部分

组成部分 描述
工作目录 脚本的创建、修改和审查的地方,通常是脚本编写者主目录下的子目录,如 /home/christine/scripts 。为每个项目创建一个新的子目录是最佳实践,因为Git会在该位置放置跟踪文件。
暂存区(索引) 位于与工作目录相同的系统上,通过 git add 命令将工作目录中的脚本注册到暂存区。暂存区使用工作目录中的隐藏子目录 .git ,通过 git init 命令创建。脚本被编入暂存区时,Git会在索引文件 .git/index 中创建或更新脚本信息,包括校验和、时间戳和关联的脚本文件名。同时,Git会压缩脚本文件并存储为对象(blob)在 .git/objects/ 目录中。
本地仓库 包含每个脚本文件的历史记录,使用工作目录的 .git 子目录。通过 git commit 命令将脚本文件版本之间的关系(项目树)和提交信息存储为对象在 .git/objects/ 目录中。每次提交创建一个新的快照,旧的快照也会保留,并且可以根据需要返回之前的快照。
远程仓库 通常是基于云的代码托管服务,如GitHub、GitLab、BitBucket和Launchpad等。也可以在本地网络的其他服务器上设置代码托管站点作为远程仓库,具体选择取决于项目需求和团队成员的位置。

2.4 Git的额外特性

  • 分支 :在本地仓库中为特定项目部分创建的区域。例如,在脚本项目中可以有一个主分支 main ,当需要对脚本进行修改时,创建一个新的分支(如 modification )进行修改和测试。测试成功后,将修改后的脚本合并回主分支,确保主分支的脚本始终可用于生产环境。
  • 克隆 :可以复制一个项目。新团队成员可以从远程仓库克隆脚本和跟踪文件,立即开始参与脚本修改项目。对于脚本的特殊版本,如包含加密功能的备份脚本,在主脚本更新后,负责特殊版本的团队可以克隆项目,添加加密功能到改进后的脚本中。

2.5 使用Git进行版本控制的好处

  • 性能 :Git主要使用本地文件操作,速度更快,除了与远程仓库进行文件传输时。
  • 历史记录 :Git在文件注册到索引时捕获其内容,每次提交到本地仓库时创建并存储该时间点的快照引用。
  • 准确性 :使用校验和保护文件完整性。
  • 去中心化 :脚本编写者可以在不同的网络或系统上协作,不受地理位置限制。

2.6 搭建Git环境的步骤

2.6.1 安装Git

不同的Linux发行版安装Git的命令不同:
- CentOS

$ sudo dnf install git

安装过程中会显示依赖项信息和交易摘要,输入 y 确认安装。安装完成后,可以使用 which git 命令验证Git是否安装成功。

[sudo] password for christine:
[...]
Dependencies resolved.
=====================================================================
 Package               Arch        Version                 Repository      Size
=====================================================================
Installing:
 git                   x86_64      2.18.4-2.el8_2          AppStream      186 k
Installing dependencies:
 git-core              x86_64      2.18.4-2.el8_2          AppStream      4.0 M
 git-core-doc          noarch      2.18.4-2.el8_2          AppStream      2.3 M
 perl-Error            noarch      1:0.17025-2.el8         AppStream       46 k
 perl-Git              noarch      2.18.4-2.el8_2          AppStream       77 k
 perl-TermReadKey      x86_64      2.37-7.el8              AppStream       40 k

Transaction Summary
=====================================================================
Install  6 Packages

Total download size: 6.6 M
Installed size: 36 M
Is this ok [y/N]: y
Downloading Packages:
[...]
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
[...]
Installed:
  git-2.18.4-2.el8_2.x86_64              git-core-2.18.4-2.el8_2.x86_64
  git-core-doc-2.18.4-2.el8_2.noarch     perl-Error-1:0.17025-2.el8.noarch
  perl-Git-2.18.4-2.el8_2.noarch         perl-TermReadKey-2.37-7.el8.x86_64

Complete!
$ which git
/usr/bin/git
  • Ubuntu
$ sudo apt install git

安装过程中会提示是否继续,输入 Y 确认。安装完成后同样使用 which git 验证。

[sudo] password for christine:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  git-man liberror-perl
[...]
After this operation, 38.4 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
[...]
Fetched 5,464 kB in 1min 33s (58.9 kB/s)
Selecting previously unselected package liberror-perl.
(Reading database ... 202052 files and directories currently installed.)
[...]
Unpacking git (1:2.25.1-1ubuntu3) ...
Setting up liberror-perl (0.17029-1) ...
Setting up git-man (1:2.25.1-1ubuntu3) ...
Setting up git (1:2.25.1-1ubuntu3) ...
Processing triggers for man-db (2.9.1-1) ...
$ which git
/usr/bin/git
2.6.2 创建工作目录

在本地主文件夹中创建一个子目录作为工作目录,例如:

$ mkdir MWGuard
$ cd MWGuard/
$ pwd
/home/christine/MWGuard
2.6.3 初始化 .git/ 目录

在工作目录中使用 git init 命令初始化 .git/ 目录:

$ git init
Initialized empty Git repository in /home/christine/MWGuard/.git/
$ ls -ld .git
drwxrwxr-x 7 christine christine 4096 Aug 24 14:49 .git
2.6.4 配置全局用户信息

如果是第一次在系统上创建 .git/ 子目录,建议添加用户名和电子邮件地址到全局Git仓库的配置文件中,以便跟踪文件更改。

$ git config --global user.name "Christine Bresnahan"
$ git config --global user.email "cbresn1723@gmail.com"
$ git config --get user.name
Christine Bresnahan
$ git config --get user.email
cbresn1723@gmail.com
2.6.5 查看Git配置信息

可以使用 git config --list 命令查看所有配置信息:

$ git config --list
user.name=Christine Bresnahan
user.email=cbresn1723@gmail.com
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
2.6.6 建立远程仓库

配置好本地Git环境后,需要建立项目的远程仓库。以GitHub为例,可以通过 github.com/join 链接设置一个免费的远程仓库。

2.7 Git环境搭建流程图

graph LR
    A[安装Git] --> B[创建工作目录]
    B --> C[初始化.git/目录]
    C --> D[配置全局用户信息]
    D --> E[查看Git配置信息]
    E --> F[建立远程仓库]

通过以上步骤,你可以搭建一个完整的Git环境,用于管理你的Bash shell脚本项目。在实际使用中,合理利用Git的各种功能,如分支和克隆,可以提高团队协作效率,确保脚本的安全性和可维护性。同时,不断改进脚本实用工具,添加更多的审计和功能,让脚本更好地服务于Linux系统的管理。

3. 使用Git进行脚本项目管理

3.1 基本操作流程

在搭建好Git环境后,就可以使用Git对脚本项目进行管理了。以下是一个基本的操作流程:
1. 创建或修改脚本 :在工作目录中创建或修改脚本文件。
2. 添加到暂存区 :使用 git add 命令将修改后的脚本添加到暂存区。

$ git add script.sh
  1. 提交到本地仓库 :使用 git commit 命令将暂存区的内容提交到本地仓库,并添加有意义的提交信息。
$ git commit -m "Update script.sh: add new feature"
  1. 推送到远程仓库 :使用 git push 命令将本地仓库的内容推送到远程仓库。
$ git push origin main
  1. 从远程仓库拉取更新 :使用 git pull 命令从远程仓库拉取最新的更新。
$ git pull origin main

3.2 分支操作

3.2.1 创建分支

当需要对脚本进行修改或开发新功能时,可以创建一个新的分支。

$ git branch new-feature
3.2.2 切换分支

使用 git checkout 命令切换到新创建的分支。

$ git checkout new-feature

也可以使用以下命令直接创建并切换到新分支。

$ git checkout -b new-feature
3.2.3 合并分支

在新分支上完成修改并测试通过后,可以将其合并回主分支。

$ git checkout main
$ git merge new-feature
3.2.4 删除分支

合并完成后,如果不再需要该分支,可以将其删除。

$ git branch -d new-feature

3.3 克隆项目

如果有新成员加入项目,或者需要复制一个项目,可以使用 git clone 命令从远程仓库克隆项目。

$ git clone https://github.com/username/repository.git

3.4 查看历史记录

使用 git log 命令可以查看项目的历史提交记录。

$ git log

可以使用不同的选项来格式化输出,例如只显示最近的几次提交。

$ git log -n 5

3.5 Git操作命令总结

操作 命令 说明
添加到暂存区 git add <file> 将指定文件添加到暂存区
提交到本地仓库 git commit -m "message" 将暂存区的内容提交到本地仓库,并添加提交信息
推送到远程仓库 git push origin <branch> 将本地仓库的指定分支推送到远程仓库
从远程仓库拉取更新 git pull origin <branch> 从远程仓库拉取指定分支的最新更新
创建分支 git branch <branch-name> 创建一个新的分支
切换分支 git checkout <branch-name> 切换到指定分支
合并分支 git merge <branch-name> 将指定分支合并到当前分支
删除分支 git branch -d <branch-name> 删除指定分支
克隆项目 git clone <repository-url> 从远程仓库克隆项目
查看历史记录 git log 查看项目的历史提交记录

3.6 Git操作流程图

graph LR
    A[创建或修改脚本] --> B[添加到暂存区: git add]
    B --> C[提交到本地仓库: git commit]
    C --> D[推送到远程仓库: git push]
    D --> E[从远程仓库拉取更新: git pull]
    F[创建分支: git branch] --> G[切换分支: git checkout]
    G --> H[在分支上修改脚本]
    H --> I[合并分支: git merge]
    J[克隆项目: git clone] --> K[开始项目开发]

4. 脚本实用工具与Git的结合应用

4.1 脚本更新与版本控制

在脚本实用工具的开发过程中,随着功能的不断添加和改进,脚本会不断更新。使用Git可以很好地管理这些更新,记录每个版本的变化。例如,当对审计脚本进行改进,添加新的审计功能时,可以按照以下步骤操作:
1. 创建一个新的分支用于开发新功能。

$ git checkout -b audit-feature
  1. 在新分支上修改脚本,添加新的审计功能。
  2. 测试修改后的脚本,确保新功能正常工作。
  3. 将修改后的脚本添加到暂存区并提交到本地仓库。
$ git add audit-script.sh
$ git commit -m "Add new audit feature to audit-script.sh"
  1. 切换回主分支,将新分支合并到主分支。
$ git checkout main
$ git merge audit-feature
  1. 将主分支的更新推送到远程仓库。
$ git push origin main

4.2 团队协作开发

在团队协作开发脚本实用工具时,Git的版本控制和分支管理功能可以大大提高开发效率。不同的团队成员可以在不同的分支上进行开发,互不干扰。例如,一个成员负责开发数据归档和备份脚本,另一个成员负责开发用户账户删除脚本。具体操作如下:
1. 每个成员从远程仓库克隆项目到本地。

$ git clone https://github.com/team/repository.git
  1. 各自创建自己的开发分支。
$ git checkout -b backup-script
$ git checkout -b user-delete-script
  1. 在各自的分支上进行开发和测试。
  2. 开发完成后,将各自的分支推送到远程仓库。
$ git push origin backup-script
$ git push origin user-delete-script
  1. 团队成员可以在远程仓库上查看彼此的分支,并进行代码审查。
  2. 审查通过后,将分支合并到主分支。

4.3 脚本安全与备份

Git不仅可以管理脚本的版本,还可以作为脚本的备份工具。由于远程仓库通常存储在云端或其他服务器上,即使本地系统出现问题,也可以从远程仓库恢复脚本。同时,Git使用校验和保护文件完整性,确保脚本在传输和存储过程中不被篡改。

5. 总结与展望

5.1 总结

通过本文的介绍,我们了解了如何编写简单的脚本实用工具,如审计脚本、数据归档和备份脚本、用户账户删除脚本等。同时,详细介绍了Git的版本控制原理、环境搭建和使用方法,包括工作目录、暂存区、本地仓库和远程仓库的概念,以及分支、克隆等功能的使用。在实际的脚本项目管理中,合理结合脚本实用工具和Git的功能,可以提高开发效率、确保脚本的安全性和可维护性。

5.2 展望

随着Linux系统的不断发展和应用场景的不断扩大,脚本实用工具的需求也会越来越多。未来,可以进一步扩展脚本的功能,如添加更多的审计规则、优化备份策略等。同时,Git作为一种强大的版本控制工具,也会不断发展和完善,为脚本项目的管理提供更多的便利。在团队协作方面,可以结合更多的开发工具和流程,如持续集成和持续部署(CI/CD),进一步提高开发效率和质量。

总之,掌握脚本实用工具的编写和Git的使用,对于Linux系统的管理和开发人员来说是非常重要的。希望本文能够帮助读者更好地应用这些技术,提高工作效率和技能水平。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值