精华内容
下载资源
问答
  • 运维学shell还是python
    2020-12-17 09:13:09

    shell脚本是运维工程师必不可少的一项技能,现在大多数企业招聘都需要掌握shell、python、PHP等其中一项或两项,对于运维工程师,shell无疑是最好的选择,因为shell有上千个Linux命令做支撑。对于一些常规业务应用,使用shell脚本更符合Linux运维简单、易用、高效的三大基本原则。

    shell脚本的执行方式有三种利用bash或sh执行(或cat 脚本路径|bash,实质是一样的)[root@shell shell]# cat first.sh#!/bin/bash#date:2019-06-11cd /var/log/pwdls -l messages[root@shell shell]# bash first.sh/var/log-rw-------. 1 root root 915415 6月 12 04:01 messages

    2.利用绝对路径或相对路径执行,需要执行权限(chmod +x 脚本路径)[root@shell shell]# chmod +x first.sh[root@shell shell]# ll first.sh-rwxr-xr-x 1 root root 61 6月 12 04:32 first.sh[root@shell shell]# ./first.sh/var/log-rw-------. 1 root root 915542 6月 12 05:01 messages

    3.source或“.”执行,在当前shell下执行,相当于在命令行执行命令[root@shell shell]# source first.sh/var/log-rw-------. 1 root root 915542 6月 12 05:01 messages[root@shell log]#

    总结:方式1和3执行脚本时,是不需要加执行权限的;方式1和2执行脚本时,是打开一个新的子shell执行,执行完脚本退回到父shell,同时脚本执行的结果返回给父shell,但是脚本中产生的变量随着子shell的退出而消失。

    通常执行自己写的脚本时使用方式1和2比较多,方式3的使用有两种情况:一是加载环境变量(比如 source /etc/profile);二是在一个脚本中调用另外一个脚本时。

    如果你理解了shell脚本三种执行方式的不同,那么来猜一猜下面两个脚本执行后打印变量A的值分别会是什么?[root@shell shell]# cat first.sh#!/bin/bash#date:2019-06-11cd /var/log/A=$(pwd)ls -l messages[root@shell shell]# bash first.sh-rw-------. 1 root root 915542 6月  12 05:01 messages[root@shell shell]# echo $A[root@shell shell]# cat first.sh#!/bin/bash#date:2019-06-11cd /var/log/A=$(pwd)ls -l mes

    更多相关内容
  • Linux运维对比:Shell运维 VS Python运维

    千次阅读 2020-07-04 17:21:33
    通过简单的例子去找出Linux运维中使用shell与使用python的一些不同,分析两者的主要知识点 二、实例 2.1、需求 查询当前主机是否支持超线程 查询当前内存使用情况 2.2、通过Shell实现 既然是在Linux,那么...

    目录

     

    一、目的所在

    二、实例

    2.1、需求

    2.2、通过Shell实现

    2.3、通过Python实现

    2.4、扩展

    Shell

    Python

    主要区别:

    实现功能:

    跨平台性:


    一、目的所在

    通过简单的例子去找出Linux运维中使用shell与使用python的一些不同,分析两者的主要特点

    二、实例

    2.1、需求

    1. 查询当前主机是否支持超线程

    2. 查询当前内存使用情况

    2.2、通过Shell实现

    既然是在Linux,那么肯定要先使用Linux自身的工具,实现脚本内容如下:

    g='\e[1;32m'
    e='\e[0m'
    prin(){
            echo -e "$1"
    }
    cpu_red(){
            #内核数[即线程]
            cpu_processor=`grep processor /proc/cpuinfo | wc -l`
            #CPU数量[即多路]
            cpu_number=`cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l`
            #CPU物理内核
            cpu_core=`cat /proc/cpuinfo | grep "cpu cores" | sed -n '1p' | awk '{print $4}'`
            #CPU型号
            cpu_info=`cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c`
    }
    mem_red(){
            #总内存[单位MB]
            total=`free -m | grep -v "Swap" | awk '{print $2}' | sed -n "2p"`
            used=`free -m | grep -v "Swap" | sed -n '2p' | awk '{print $3}'`
            free=`free -m | grep -v "Swap" | sed -n '2p'| awk '{print $4}'`
            shared=`free -m | grep -v "Swap" | sed -n '2p' | awk '{print $5}'`
            cache=`free -m | grep -v "Swap" | sed -n '2p' | awk '{print $6}'`
    }
    print_cpu(){
            cpu_red
            echo -e "CPU物理数:${g}${cpu_number}${e}\nCPU内核数:${g}${cpu_core}${e}\nCPU型号:${g}${cpu_info}${e}"
            if [[ ${cpu_core} == ${cpu_processor} ]];then
                    echo -e "超线程:${g}支持${e}"
            else
                    echo -e "超线程:${g}不支持${e}"
            fi
    }
    print_mem(){
            mem_red
            d="当前主机内存信息 总内存:${g}${total}MB${e} 当前已用:${g}${used}MB${e} 当前可用:${g}${free}MB${e} 共享占用:${g}${shared}MB${e} 缓存占用:${g}${cache}MB${e}"
            for i in $d;do
                    prin "$i"
            done
    }
    print_cpu
    print_mem
    

    执行结果如下:

     

    2.3、通过Python实现

    源码如下:

    import psutil
    def cpu():
        info = psutil.cpu_times()
        luoji = psutil.cpu_count()
        wuli = psutil.cpu_count(logical=False)
        if luoji == wuli:
            print("主机CPU不支持超线程")
        else:
            i = int(luoji/2)
            if wuli == i:
                print("主机CPU支持超线程")
    def mem():
        mems = psutil.virtual_memory()
        print('当前主机总内存:', int(mems.total/1024/1024), 'MB')
        print('当前已使用:', int(mems.used/1024/1024), 'MB')
    cpu()
    mem()
    

    执行结果如下:

    2.4、扩展

    下面附上Windows端的执行结果

    Shell

    Python

    主要区别:

    实现功能:

    • Shell需要通过相关命令进行特定的筛选,灵活性比较高,但是比较复杂

    • Python只需要调用别人写好的模块即可实现相关功能,且不需要熟悉Linux命令,但是能够实现的功能相对来说不够灵活,总体就是简单

    跨平台性:

    • Shell可以在任意Linux平台上运行

    • Python可以在任意平台上运行,所以Python的跨平台性更强

     

    展开全文
  • 运维DBA要不要学python

    2020-12-04 00:56:44
    运维DBA要不要学python我个人认为是:要现在 python运维 数据库 的工作中主要用在1、编写一些运维脚本2、编写运维管理平台3、研究互联网大厂的运维脚本/工具并应有特别是运维开源数据库的时候,第三点特别重要,...

    运维DBA要不要学python

    我个人认为是:要

    现在 python 在运维 数据库 的工作中主要用在

    1、编写一些运维脚本

    2、编写运维管理平台

    3、研究互联网大厂的运维脚本/工具并应有

    特别是运维开源数据库的时候,第三点特别重要,例如 MongoDB 的zabbix监控数据库脚本就是用老外用python写的,如果要改一下里面的指标

    肯定要用到python

    一些互联网大厂开源的数据库脚本和工具,例如 mysql 相关工具,基本都是用python写的,这些工具/轮子我们肯定会用到

    所以python是如此重要,当然用shell也可以完成第一点,如果强硬用python来写也只是用python来调用一下某些shell命令

    但是,既然要学python,用python,做一个pythoner,那么最好所有工作都用python,有些人不这么认为,某些任务,shell可以做的python做不了

    python一定要调用shell命令来做,这个是的,既然是调用shell命令为何不直接用shell

    但是我个人觉得shell有个最大的缺点:格式化

    shell几乎是没有格式的,只有简单的缩进,也没有专用的shell编辑器,那么,当你写了几百行代码的时候,如果没有很好的缩进习惯,那么review你的shell脚本

    的那个人简直就是灾难,也由于没有专用的shell编辑器,编写shell的时候很容易出错,也不好调试

    用python就没有这些问题,python可以用pycharm(本人觉得除了pycharm其他 工具 都不行)或者其他工具,python有严格的格式化,编辑器也非常强大

    pdb,ipdb,print调试手段手到擒来

    我记得之前有个招S银行技术部的招聘信息,其中有一条

    必须会写shell,并且有写过单个脚本超过10000行shell代码的经验

    当时觉得这个要求非常蛋疼,能在单个脚本写超过10000行shell代码的可能是高人也可能是SB,反正觉得招S银行的技术也好不到哪里好

    据我所知,他们的mysql运维也是外包给某数据库服务公司,反正大部分都是外包,核心技术应该无啥

    最后,还有一个语言,go语言

    go作为互联网界的C/C++,虽然发展历史不长,但是最近几年确实比较火,go虽然是静态语言,也是带GC功能的

    因为需要GC,所以 go 语言不适合做

    1、系统编程:系统编程依然是C/C++做主导,由于GC的关系,性能比不上C/C++

    2、大数据:依然是 JAVA 的天下,当时hadoop诞生的时候,go语言还没出生,所以大数据领域还是无法取代JAVA

    3、电商:依然是JAVA的天下,JAVA有最成熟的解决方案,阿里巴巴的业务大量使用JAVA就是一个例子

    go语言适合做

    1、云计算:在云计算领域,go语言没有对手,go语言一般用于非cpu密集型业务,cdn,对象存储,docker,consul,k8s

    其实性能上,go语言应该是比JAVA逊色不少,发展历史没有JAVA长,GC功能没有JAVA的完善

    至于在运维领域,其实go语言的性能比python是要强,毕竟是静态语言,而且可以利用多核优势,没有python的GIL锁问题

    但是在运维领域,更注重的是运维生态,而不是性能,我们开发的运维工具和运管平台其实都不需要很高性能

    如果没有运维生态支持,运维将会非常难做,例如,现在每种数据库基本都有python驱动(mongodb,DB2,oracle,mssql,mysql,pgsql,sqlite等等),

    spark编写作业也可以用python来编写,openstack本来用python来开发,有很完善的python API,kvm管理也有很完善的python API,

    Linux内置python,Windows安装python也比较简单

    python有相应的库可以编写Windows服务,国内公有云厂商基本都有python API等等,几乎每种工具、系统、软件都支持python

    而这种运维生态,go语言是没有的,原因是go语言是2009年诞生,到现在才10年时间,而python到现在已经有30年历史

    所以python才会有这种运维生态,所以才会有每种工具、系统、软件都支持python

    而且目前互联网大厂用go语言来写的开源数据库运维工具和脚本非常少

    当然,如果对python有几年经验并且很扎实了,那么可以用空余时间学学go语言

    还有一个提醒:据我所知,go语言最流行的web框架beego问题比较多,没有python的django框架那么完善

    如果要用go语言来开发运维管理平台,要注意这个坑

    最后总结一句:对于运维或DB运维,个人觉得真没有必要学go语言,毕竟go语言是静态语言,门槛相对比较高,而且go语言没有运维生态

    如有不对的地方,欢迎大家拍砖o(∩_∩)o

    本文版权归作者所有,未经作者同意不得转载。

    展开全文
  • 展开全部运维学2113习Python到底能够带来多大的5261收益?上午我QQ的一个运维技术群不知4102道什么时候开始聊起作为运维人有没有1653必要再学习一门编程语言,什么最好等,一开始开始我没看,没想到竟然在群里讨论...

    展开全部

    运维学2113习Python到底能够带来多大的5261收益?

    上午我QQ的一个运维技术群不知4102道什么时候开始聊起作为运维人有没有1653必要再学习一门编程语言,学什么最好等,一开始开始我没看,没想到竟然在群里讨论了近2个小时,一般情况这种问题的都是运维新人,可能目前运维整体情况还不太了解,所以为了让更多的让新入行朋友不在迷茫,今天呢我就这个问题表达下我的看法。

    一、那作为运维人员要不要学习一门编程语言?

    我给出的答案是:“如果不学习一门编程语言,再过2年你可能就得下岗”,我这绝不是危言耸听,不信你搜下现在对运维岗位的技能要求看看,但如果不够深刻,那接下里我们从现在运维的情况和未来运维的发展来分析下具体原因:

    早些年的运维,基本是会部署个环境,懂点linux命令,再往后点呢,能用shell写出日常用的自动化脚本,满足业务的需求基本就可以了,企业对运维要求也是这些,一句话:别出事。但随着计算机技术的发展,凡是跟技术沾边的都经过不断迭代更新,运维属于技术机的一个分支,也经历了翻天覆地变化,现在这个时期我个人判断是要体现运维价值的时代,所以不创造价值的工作将逐渐被自动化运维平台所取代,也就是说之前上线部署很复杂的操作,通过一个运维自动化平台点点鼠标就可以完成实现,彻底拜托了对人的依赖,这个时期最明显的就是各个公司基本都有自己的运维平台,要么再建设中,要么已经建完了,如果平台就已建完,出于对公司人力成本的考虑,最基础的运维操作会由类似客服部门的人来负责,所以随着时间的推移,一些只做日常操作的运维将逐渐从公司消失,那按这个逻辑,既然要搭建运维平台,用shell肯定是不能满足了,所以你必须学习一门编程语言,这样你才可能拿到进入这个行业的门票。

    resize,m_lfit,w_600,h_800,limit_1

    二、谈谈未来,其实也不能算未来,只能说是趋势,大家都知道云计算非常火,国内公有云平台发展也很迅速,我个人猜测,不出三年,传统的运维都要变成基于云的运维,如果都变成了基于云的运维,你要做一些自动化的任务(比如IP切换),最简单的方式是调用云的sdk接口,这些sdk都不是shell的sdk,用shell是不行的,所以这也就要求你必须会一门编程语言,运维的角度会逐步从纯运维转变成DevOps,相信大家对这个概念并不陌生。

    谈到这,问题就算结束了,接下来我们说运维学什么语言最好,其实从语言角度来说,你应该会什么语言,就用你最擅长的语言去实现,但因为每个人的学习时间有限,同时考虑开发的时间成本,从这点看我认为python最为合适,一方面linux系统本身就有自带python,不用安装,之前我用php写过脚本,但总不能每台都安装个php解释器吧,另外python有这很好的网络资源,它本身有很多标准库,这样就大大减少了从头开发的成本,实现一个功能时间周期非常短,对运维来讲实现功能为主要,最后谈一点,它的从学习入门成本比较低,容易快速上手。

    resize,m_lfit,w_600,h_800,limit_1

    以上就是我对大家所讨论问题的看法,不对的地方请斧正,如果您也认同,请让更多的人看到,让密迷茫的人不在迷茫,最后一句话送给大家共勉,做技术:

    时间千万不要浪费在选择上,而要多用在行动上!Python是个非常牛B的脚本语言,能满足绝大部分自动化运维的需求,又能做后端C/S架构,又能用WEB框架快速开发出高大上的Web界面,只有当你自已有能力做出一套运维自动化系统的时候,你的价值才体现出来,你才有资格跟老板谈重视。加企鹅Q秋:444加513和089连在一起,如果你想学习,这就是你的一个学习机会,提升你的个人价值,你跟大牛只差一次努力的学习!吹过牛逼不如努力一搏,还在迷茫,还在停滞不前的运维终究会被努力的别人所超越!

    展开全文
  • PYTHONSHELL 有什么区别?1653天天问这种好水的问题,我实在受不了,决定帮大家扫扫盲,求求新手们,以后别他妈瞎问了。现阶段,掌握一门开发语言已经成为高级运维工程师的必备计能,不会开发,你就不能充分...
  • 总之一句话:先学shell,再学python!!!!!! py很强大,我承认。但在运维方面,py不但不强大,还有硬伤。正因为有下述硬伤,所以我们运维还是shell多,用py极少。 ------只从shell角度,详细对比...
  • 呼啦一阵风1、linux系统基础,这个不用说了,是基础中的基础,...但基础的服务肯定要掌握,如FTP, DNS,SAMBA, 邮件, 这几个大概一下就行,LAMP和LNMP是必须要熟练,我所指的不是光光会搭建,而是要很熟悉里面的相...
  • 在我们的认知中,运维工程师就是一个背锅侠,那么咱们怎么样来避免做背锅侠那?可能有人会告诉你,你需要去懂一门开发语言,其实在现价段,掌握一门开发语言已经成为高级运维工程师的必备计能。不会开发,你就不能...
  • 一、目的所在通过简单的例子去找出Linux运维中使用shell与使用python的一些不同,分析两者的主要特点二、实例2.1、需求1.查询当前主机是否支持超线程2. 查询当前内存使用情况2.2、通过Shell实现既然是在Linux,那么...
  • shell 是 Unix/Linux 系统的基础用户界面。能互动式或脚本式,接受内建命令以实行自身操作,浏览文件系统,启动其它程序,脚本,以及图形界面。比如你输入一个程序名字 gedit 就会打开 gedit 程序。命令行概念来自 ...
  • 目前Linux系统下最流行的运维自动化语言就是shellPython了。两者之间,shell几乎是IT企业必须使用的运维自动化编程语言,特别是在运维工作中的服务监控、业务快速部署、服务启动停止、数据备份及处理、日制分析等...
  • 基于Python本身的优点:简单,易学,速度快,免费、开源,高层语言,可移植性,解释性,可扩展性,可嵌入性,丰富的库,独特的语法。Python已经成为现在编程的必备语言。作为“胶水语言”它能够把其他语言制作的各种...
  • 运维如何通过学习python学会编程运维必须懂开发,特别是python开发,已经形成大家的共识,不懂开发的运维,路会越走越窄。 黄哥,从2012年底,从事python教学过程中,接触到很多运维的朋友。部分运维是自学的Linux ...
  • 为什么运营工程师需要学习PythonPython本身的优点是简单,易学,快速,免费,开源,高级语言,可移植性,可解释性,可扩展性,可嵌入性,丰富的库和独特的语法。 Python现在已经成为编程的基本语言。 作为一种...
  • 展开全部运维工程师和开发人员一样,同...现阶段,掌握一门Python开发已经成为高级运维工程师的必备技能了,那么Python运维要学习哪些内容,如何才能学好?个人建议学习的路线如下:初级入门:1、Linux基础知识、基...
  • 1、开源社区的驱动若干年前,Python是怎么兴起以及替代运维工程师常用的Shell和Perl呢主要是由于DevOps文化的驱动,运维工程师不甘心再写一些脚本式的简单功能Python能够写一些更加项目化的项目,可以保持项目的扩展...
  • 自动化运维脚本,实现各组件一键化安装和远程运维控制。给运维带来便捷方式。
  • 定义 对于运维而言,系统链接:https://pan.baidu.com/s/1rTHqQd3tDTO2k1pJXhKkHQ 提取码:5180运行过程中变化小,重复性非常高。Python 是高层语言,只需要(编辑-测试-调试)...很多shell 解决不了的东西python 可以.
  • 运维第一工具-shell编程 shell历史 执行脚本 基本语法 Shell脚本语法 条件测试:test [ if/then/elif/else/fi case/esac for/do/done while/do/done break和continue 位置参数和特殊变量 shell输入输出 ...
  • 退出后Linux子系统的所有进程都会被关闭,如果你撞了Mysql之类的服务要想随时运行的话就要保持Bash shell的随时开启,更坑的是这些服务并不会随之进入Bash shell而自动启动, 我只好写一个Python脚本用于管理这些...
  • 现在,我们已经知道如何在不同的操作系统中使用和安装Python以及如何使用EVE-NG搭建网络拓扑。在本章中,我们将学习如何使用目前常用的网络自动化库自动完成各种网络任务。Python可以在不同的网络层上与网络设备进行...
  • Shell到java到expect再到python,慢慢的变得习惯用写运维工具的方式来解决日常运维问题。本次写的运维工具让我get到了很多新技能,觉得很有必要把思绪、过程详细的记录下来,以便日后回顾复习。该工具其实就是一个...
  • 现阶段,掌握一门开发语言已经成为高级运维工程师的必备计能,不会开发,你就不能充分理解你们系统的业务流程,你就不能帮助调试、优化开发人开发的程序, 开发人员有的时候很少关注性能的问题,这些问题就得运维...
  • 现阶段,掌握一门开发语言已经成为高级运维工程师的必备计能,不会开发,你就不能充分理解你们系统的业务流程,你就不能帮助调试、优化开发人开发的程序,开发人员有的时候很少关注性能的问题,...为什么要学Python...
  • 第一部分: shell: 第一章: shell快速入门: 一、运维简介: 1.运维简介以及企业中的那些事: 2、简单的运维知识 规划: 需要多少资源来支持项目的运行; 管理: 项目运行过程中的所有内容都管理起来; 流程规范: 所有操作...
  • 生产环境中常用shellPython脚本汇总

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 29,184
精华内容 11,673
关键字:

运维学shell还是python