bash
《Python UNIX和Linux系统管理指南》介绍了Python语言如何为管理uNIx和Linux服务器提供各种更加有效的任务处理方式。书中各章都提出了具体的管理问题,如并发或数据备份,然后通过Python示例提供了解决方案。通过《Python UNIX和Linux系统管理指南》,读者可以学习如何用Python开发自己的一套命令行工具来解决诸多问题
今天被基友催着开始折腾hadoop集群的问题,考虑到要批量部署以及统一性的问题准备写个部署脚本,对bash脚本的话我也写过不少了,然而没想到还是碰到了问题。 因为要安装nutch、hbase、apache-ant、jdk等一堆程序,所以环境变量也有很多需要添加的,所以我没考虑使用echo逐行输入,而是使用了cat重定向到文件的方法,那么问题就来了,作为环境变量,那必然会有一大堆的"$"符号,于是乎……它们全被解析成具体的路径了,这就很尴尬。 在手动修理完后我开始研究怎么样阻止这一悲剧的发生,经过一波搜索,我找到了两个办法
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。 因为 Docker 的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。 下面的命令则启动一个 bash 终端,允许用户进行交互
终端可能会吓到某些人。但终端不仅仅是一个黑屏打字。正常运行shell
如果您通过阅读别人的代码来学习Bash脚本,您可能已经注意到脚本的第一行以#!字符和Bash解释器的路径开头。 此字符#!称为shebang,用于告诉操作系统使用哪个解释器来解析文件的其余部分。 解释器参数是可选的
bash的快捷键 现在碰到的服务器上的用户的默认shell都是bash,所以主要讲下bash的一些快捷键。 删除整行命令:Ctrl + u,对不回显的密码输入同样有效 向前删除单个单词:Ctrl + w,在vim里面同样有效 运行最近一条命令:!! 就是两个感叹号,个人是从sbt(scala下的一个构建工具)里面学来的 搜索最近的命令;Ctrl + r,输入关键字,比如你最近输入了vim /path/to/file,那么Ctrl + r,再输入vim,那么就可以显示出这条命令,回车就直接执行了 在搜索最近的命令的基础上,!vim 可以执行最近这条vim的命名。这个用在什么地方最好呢?如果你最近tail了某个文件,输入!tail就可以直接执行tail了,不用输入文件名 清屏命令:Ctrl + l,效果和clear一样 上一条命令和下一条命令:Ctrl + p,Ctrl + n,个人不是很喜欢用上下键,因为要移动右手,而且有些键盘需要按FN才有上下,比如hhkb-pro,不过这个仁者见仁,智者见智 暂停屏幕输出:Ctrl + s,恢复屏幕输入Ctrl + q,这个用来干嘛呢?类似tail时scroll lock 更多bash快捷键,请google
Bash 里的 word splitting 是很基础的一个知识点,如果没有理解透彻,很多时候会犯下不少奇奇怪怪的错误(参见 Bash Pitfalls,或者本博客翻译 Bash Pitfalls: 编程易犯的错误(一))。 一个例子,现在我们现在要一次读入文件 onefile.txt 的内容并输出,假设文件的内容是这样的: 当我们习惯性地使用 for 循环来解决这个问题时,你会发现输出的结果与预期大相径庭: 给我们的脑子也打开调试开关。首先 onefile.txt 的内容一次性地输出给 for 循环,我在中间用比较形象的 tag 来描述一个空白字符: 这样一来 hello 和 world 被分隔可以很好地解释,但是那又是为什么第二行的空行没有了呢?原来,当 IFS 包含空白字符时(比如回车、空格、制表符等),在任何需要分隔单词的场景下,位于字符串开头和结尾的空白字符会被删除,另外一点是,字符串中间的连续空白会被压缩成一个
这个应该算法是 hexo 的一个BUG或者说是hexo的不足。正常情况下,我们将 markdown 文件渲染为 html 时,需要保护一些特别部分不被渲染,比如说代码块与公式。 很明显这块代码不应该被渲染,公式也是如此,但是对于复杂的公式,可能存在大公式里包含小公式的情况,hexo 有可能只渲染子模块,比如: 所以接下来就是算法设计部分,我们拿到的是markdown 的文字,在渲染前进行 过滤处理
程序(操作系统命令和应用程序)的执行都需要运行环境,这个环境是由多个环境变量组成的。 系统环境变量:公共的,对全部的用户都生效。 用户环境变量:用户私有的、自定义的个性化设置,只对该用户生效
使用Linux或者unix系统的同学可能都对#!这个符号并不陌生,但是你真的了解它吗? Shebang这个符号通常在Unix系统的脚本中第一行开头中写到,它指明了执行这个脚本文件的解释程序。 1. 如果脚本文件中没有#!这一行,那么它执行时会默认用当前Shell去解释这个脚本(即:$SHELL环境变量)。 2. 如果#!之后的解释程序是一个可执行文件,那么执行这个脚本时,它就会把文件名及其参数一起作为参数传给那个解释程序去执行