学习Linux命令(二)

本文是学习Linux命令 (Learn linux command)系列文章的第二篇,在这里会介绍一些让大家平时都会经常用到的命令。注意,命令出现的顺序与重要程度无关。

echo - display a line of text

echo命令是一个shell内置命令,但是你往往可以在系统上找到独立的echo程序,例如我的系统上echo位于/usr/bin下:

[kodango@devops ~]$ which echo
/usr/bin/echo

但是这并不妨碍我们把它当成一个内置命令来对待

echo命令可以用于简单的文本打印:

[kodango@devops ~]$ echo "hello world"
hello world

继续阅读

学习Linux命令(一)

Linux下的命令到底有多少,没人清楚。但是有一些命令是大多数系统都包含的,这些命令基本上都包含在GNU Coreutils包中。当然也有一些不包含在Coreutils包中,但是也很基本,很实用的软件,例如Sed,Awk,Grep等等。很多人包括我自己可能只用过其中的部分命令,而且即使对这部分命令,也可能只掌握了部分功能而已。另外一方面,网上有很多初学者,面对这么多的命令往往不知道如何下手,频繁着问如何学习Linux命令,因为他们不知道哪些命令有用,哪些参数有用。我们都是从新手走过来,而且学海无涯,我们依然需要不断的学习与总结,这也是我为什么要写这一系列文章的原因所在。

本系列的名称为学习Linux命令 (Learn linux command),至于学习哪些Linux命令,我自己也说不上来,只能说学习一些有用的命令,让人效率提升的命令,并且是一些基本的命令(系统自带的,所以不包括一些工具命令)。在这个系列里,我和各位一样也是一个学生,共同学习。

继续阅读

Sed and awk 笔记之 awk 篇:快速了解 Awk(三)

上一篇中,主要介绍了awk中的一些基础概念,包括记录与字段、表达式、变量、语句等等,本篇在此基础上进一步介绍下awk中的函数。

awk的函数分成数学函数、字符串函数、I/O处理函数以及用户自定义的函数,其中用户自定义的函数我们在上一篇中也有简单的介绍,下面我们一一来介绍这几类函数。

数学函数

继续阅读

Sed and awk 笔记之 awk 篇:快速了解 Awk(二)

上一篇文章中,我们从awk使用的命令行语法入手,简单介绍了它是如何使用的。在这一篇里,我们要介绍awk编程语言的基本元素和概念,简单介绍它是如何处理文本的。

记录(Record)与字段(Field)

对于数据库来说,一个数据库表是由多条记录组成的,每一行表示一条记录(Record)。每条记录由多列组成,每一列表示一个字段(Field)。Awk将一个文本文件视为一个文本数据库,因此它也有记录和字段的概念。默认情况下,记录的分隔符是回车,字段的分隔符是空白符,所以文本文件的每一行表示一个记录,而每一行中的内容被空白分隔成多个字段。利用字段和记录,awk就可以非常灵活地处理文件的内容。

继续阅读

Sed and awk 笔记之 awk 篇:快速了解 Awk(一)

Sed&awk笔记之Sed篇完成之后,我又偷懒了一段时间,昨天狠狠地给自己抽根鞭子,一定要把这半个坑填上。相信看过Sed篇的同学都清楚,这一系列文章虽名日笔记,事实上有很多我自己个人的理解,加上遣词造句都是我自己的内容,所以转载一定要标明出处,详见文章后方。

Awk是什么

Awk、sed与grep,俗称Linux下的三剑客,它们之间有很多相似点,但是同样也各有各的特色,相似的地方是它们都可以匹配文本,其中sed和awk还可以用于文本编辑,而grep则不具备这个功用。sed是一种非交互式且面向字符流的编辑器(a "non-interactive" stream-oriented editor),而awk则是一门模式匹配的编程语言,因为它的主要功能是用于匹配文本并处理,同时它有一些编程语言才有的语法,例如函数、分支循环语句、变量等等,当然比起我们常见的编程语言,Awk相对比较简单。

继续阅读

Shell 脚本避免多次重复 source

source语法的引入,使得shell的脚本也可以像其它语言一样,一份代码能够分成多个模块,基本的模块可以像库文件一样被多个脚本使用。例如/etc/init.d/functions,它被多个服务脚本使用。

source除了导入库代码的作用之外,它还可以用于导入配置文件,这个在Linux系统中使用的非常广泛,因为大多数配置文件都是文本格式的,而shell本身又没有解析过于复杂的配置文件的能力,例如xml、json等。典型的例子有,/etc/default/rcS或者/etc/sysconfig/network等等。

也正因为如此,一旦Shell脚本的代码量到达一定的规模,模块化的趋势是必然的,很多地方都会用到source,所以理解source是很有必要的。source的过程,其实就是将脚本导入到当前的执行环境下,并且依次执行其中的代码。因此对于被source的脚本来说,它的一切环境变量都是与当前环境保持一致的,被source脚本中对环境做的任何改动都会影响到当前的执行环境。

继续阅读

Sed and awk 笔记之 sed 篇:实战

相信大家肯定用过grep这个命令,它可以找出匹配某个正则表达式的行,例如查看包含"the word"的行:

$ grep "the word" filename

但是grep是针对单行作匹配的,所以如果一个短句跨越了两行就无法匹配。这就给我们出了一个题目,如何用sed模仿grep的行为,并且支持跨行短句的匹配呢?

当单词仅出现在一行时很简单,用普通的正则就可以匹配,这里我们用到分支命令,当匹配时则跳转到最后:

/the word/b

继续阅读