这篇我们介绍下跟操作系统相关的一些内容, 操作系统的技能算是我们运维人的基本功了,因为如果连敲命令都吃力的话也提谈不上什么自动化了, 在linux里我们经常用的命令比如, cp, mv, mkdir, chown,chmod等基本一天下来也就这几个命令反复使用,其实只看这些体现不出来运维的能力,真正体现运维能力的地方是出现问题时如何分析解决,这是难点,这也跟经验有关, 在一个复杂的问题面前,这时候基本功就显得尤为重要,对操作系统理解的深度体现了解决问题的能力差别,如果你想在在操作系统层面理解的更深一点,我推荐你读一下《现代操作系统》这本书,读完这本书你在操作系统层面的认知会有一个比较大的提升,按照运维技术能力的发展,在理解操了操作系统的基础上这个时候我们一般开始接触学习shell编程了, 在这里我说一下做为一个Linux系统管理员,shell是你必须要掌握的技能,虽然Python都能实现,但我仍不建议你跳过shell这个重要阶段,因为如果你做运维,你不可能避免接触shell,就算你不写,你也避免不了去看别人写的shell,还有就是公司不可能就你一个运维,你不用不代表别人不用,你想想如果大家在一个团队里工作,如果都互相看不懂别人的脚本,大家还怎么配合工作?
搞定上面shell阶段后,出于对自己更高的要求(其实想多挣点钱),了解到了现在公司招聘都需要Python,就开始看书发奋学习,在看过书后,开始上手写一些功能脚本,很快就会发现用python很麻烦,不如用shell直接操作方便,不过这也难不倒我们,一顿搜索之后发现了一个宝贝,os.system(), 这个函数可以直接调用shell命令来执行,从那一刻起就像手中有了亚瑟大宝剑,所有需要shell执行的部分全部用这个函数来完成, 等写完某个脚本后感觉非常有成就感,而且感觉自己python水平与日俱增,自我感觉非常良好,但你实际去看写的每个脚本,你发现不到100行的Python代码里有,有一半以上的行都是os.system()调用的shell命令, 好好的shell命令硬生生的在外面包了一层python代码,每当我看到这些代码,我都无语,如果你也在写这种脚本,我建议你尽快停掉这种方式吧,因为你即使写一万行这种代码,对你学习python基本没有质的提升,何必呢,看着都累。
写在最后,因为关于操作系统方面的内容比较基础,我也没准备什么例子去展示,不过为了大家进一步的了解,我列了下一些系统方面的操作供大家参考学习:
判断目录存在和是否文件:
1 2 3 4 5 6 7 8 9 10 |
if os.path.exists('conndb.log'): with open('conndb.log') as f: for line in f: print line if os.path.isfile('conndb.log'): with open('conndb.log') as f: for line in f: print line |
部分常用系统命令:
1 2 3 4 5 6 7 |
shutil.copy('conndb.log', 'conndb.log.back') #拷贝 os.rename('conndb.log','db.log') #重命名 os.path.abspath('conndb.log') #获取绝对路径 os.mkdir('onedir') #建目录 os.listdir('/tmp') #列出目录内容 os.chmod() #修改文件权限 os.chown() #修改属主数组 |
文件匹配,glob模块使用:
1 2 3 4 5 6 7 |
print glob.glob('sys*') #打印以sys开头的文件或目录 print glob.glob('??') #匹配打印2个字符的目录文件 print glob.glob('c*g') #匹配以c开头以g结尾的目录文件 print glob.glob('[cs]*log') #匹配以c或s开头以log结尾的文件 |
在操作系统层面还有对日期时间的处理可以看我之前的文章。
当然有时避免不了要调用shell命令,但我建议用这种方式,os.system()方式以后就取消了。