dedecms57自动采集更新伪原创完美版插件(Linux/UNIX/自动化系统的底层及基础应用软件的区别)
优采云 发布时间: 2021-12-28 22:11dedecms57自动采集更新伪原创完美版插件(Linux/UNIX/自动化系统的底层及基础应用软件的区别)
一、前言
1 为什么要学习Shell?什么是壳?
Shell脚本语言是实现Linux/UNIX系统管理和自动化运维所必需的重要工具。Linux/UNIX系统的底层和基础应用软件的核心大多涉及到Shell脚本的内容。每一个合格的Linux系统管理员或者运维工程师都需要能够熟练地编写shell脚本语言,能够阅读系统附带的shell脚本内容以及各种软件。只有这样,才能提高运维人员的工作效率,适应日益复杂的工作环境,减少不必要的重复工作,从而为个人职业发展奠定良好的基础。
Shell 是一个命令解释器。它位于操作系统的最外层。它负责与用户直接对话,将用户的输入解释给操作系统,并处理各种操作系统的输出结果,将输出画面返回给用户。
2 什么是shell脚本?
命令、变量和流程控制语句有机地结合在一起。
Shell脚本擅长处理纯文本数据,而在Linux中,几乎所有的配置文件和日志都是纯文本文件。
3 种脚本语言
① 编译语言
定义:是指使用专用的编译器将某种高级语言的源代码翻译成特定操作平台的硬件平台可以直接运行的二进制机器码(带有操作数、指令和相应格式)(操作系统)),这个过程称为编译(./configure make makeinstall);编译后的可执行文件(.exe)可以在相应平台上运行(可移植性差,但效率高)。
典型的编译语言包括C语言、C++等。
② 口译语言
定义:指使用特殊的解释器将源程序一行一行地解释成特定平台的机器码并立即执行的语言;相当于混合了一种编译语言的编译和链接过程,同时完成。
解释型语言执行效率低,没有解释器就无法运行,但其跨平台类型相对容易,只需要提供特定的解释器即可。
常见的解释语言包括 Python(也是一种脚本语言)和 Ruby。
③ 脚本语言
定义:一种计算机编程语言,旨在缩短传统的编辑-编译-链接-运行过程。
特点:程序代码是最终的可执行文件,但这个过程需要解释器的参与,所以脚本语言与解释语言密切相关。脚本语言通常是解释和执行的,程序是文本文件。
典型的脚本语言包括 JavaScript、Python、shell 等。
其他常用的脚本语句类型:
PHP 是一种 Web 程序和脚本语言。它是一种更侧重于网页开发(前端展示)的脚本语言,例如:Dedecms、discuz。PHP程序还可以处理系统日志、配置文件等,PHP还可以调用系统命令。
Perl 脚本语言。它比shell脚本强大得多,语法灵活复杂,实现方法很多,不易阅读,团队合作困难,但它仍然是一种很好的脚本语言,世界上存在大量的程序。MHA 是用 Perl 编写的高可用性。
Python不仅可以开发脚本程序,还可以开发Web程序和软件。在过去的两年里,越来越多的公司会需要 Python。
shell脚本和php/perl/python语言有什么区别和优势?
shell脚本的优点是处理操作系统的底层业务(linux系统内部的应用都是由shell脚本完成的),因为有大量的linux系统命令来支持它。2000多条命令强大支持shell脚本编程,尤其是grep、awk、sed等。 例如:一键软件安装、优化、监控报警脚本,常规业务应用,shell开发更简单快捷,符合以简单、易用、高效的操作和维护原则。
PHP和Python的优势在于运维工具的开发、web界面管理工具的开发、web业务的开发。处理一键式软件安装、优化和报警脚本。PHP/python 也可用于常规业务应用程序。但是开发效率和复杂度比使用shell要差很多。
系统环境描述
[root@oldboy scripts]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@oldboy scripts]# uname -r
3.10.0-693.el7.x86_64
[root@oldboy scripts]# getenforce
Disabled
[root@oldboy scripts]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
4 系统中的外壳
查看系统中的命令解释器
[root@oldboy ~]# cat /etc/shells
/bin/sh/bin/bash/sbin/nologin/usr/bin/sh/usr/bin/bash/usr/sbin/nologin
常用操作系统的默认shell
1.Linux is Bourne Again shell (bash)2.Solaris 和 FreeBSD 默认为 Bourne shell (sh)3.AIX 下的 Korn Shell (ksh)4.HP-UX 默认为POSIX 外壳 (sh)
[root@oldboy ~]# echo $SHELL
/bin/bash
bash 版本
[root@oldboy scripts]# bash -version
GNU bash, 版本 4.2.46(2)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
许可证 GPLv3+: GNU GPL 许可证版本3或者更高
这是免费软件,您可以自由更改和重新分发它。在法律允许的范围内不提供任何保证。
bash shell 漏洞
使用 命令 env x='() { :;}; echo be careful' bash -c "echo this is a test"
如果返回结果为一行,则为正常,
[root@oldboy ~]# env x='() { :;}; echo be careful' bash -c "echo this is a test"
this is a test
#解决办法 升级当前的bash版本
yum install update bash
sh和bash的关系
[root@oldboy ~]# ll /bin/sh
lrwxrwxrwx. 1 root root 4 11月 13 11:15 /bin/sh -> bash
/bin 和 /user/bin 的关系
[root@oldboy ~]# ll /bin -d
lrwxrwxrwx. 1 root root 7 11月 13 11:15 /bin -> usr/bin
二、脚本编写规范
1 脚本存放在统一目录中
[root@oldboy ~]# mkdir -p /server/scripts/
[root@oldboy ~]# cd /server/scripts/
2 选择翻译
注意格式:“#!” 开头的字符也称为幻数。当执行一个bash脚本时,内核会根据“#!”后面的解释器来决定应该使用哪个程序来解释脚本的内容。
<p>[root@oldboy scripts]# head -1 /etc/init.d/*
==> /etc/init.d/functions /etc/init.d/netconsole /etc/init.d/network