crontab调度

调度的基本格式


*    *     *    *     *       cmd
分  时    日   月    周      命令

第1列表示分钟  0 - 59,每分钟用 * 或者 */1表示。
第2列表示小时  0 - 23,0表示0点。
第3列表示日期 1 - 31
第4列表示月份  1 - 12
第5列表示星期 0 - 6, 0表示星期日
第6列是要运行的命令

月和周的属性值还可以用相应英语单词的前3个字母来表示,如jan表示一月,mon-wen表示周一到周三。

特殊符号:

  • 逗号,来分隔多个时间值,
  • - 表示一个时间范围,
  • *表示该属性的所有取值,是否有效取决于相关属性的值。
  • /n代表每隔n个时间单位的意思,*/5表示每隔5个单位,1-10/2表示1至10之间每隔2个时间单位,也就是1,3,5,7。
  • 如果时属性指定了具体值,而分属性是*则表示整点。

注意:因为日期属性与周属性都表示某一天,两者之间的关系是比较微妙的。

  • 如果两个属性都是*,当然是按每天调度。
  • 如果两个属性中有一个是具体的,如0-3,另一个是*,则按具体的属性调度,*不再表示所有取值。
  • 如果两个属性都是具体值,则按两个规则调度,都有效。

继续阅读

awk 学习笔记

awk分别代表其作者姓氏的第一个字母。

awk 基础

awk语法有两种形式:
awk [-F ERE] [-v assignment] 'program' [argument ...]
awk [-F ERE] -f progfile ... [-v assignment] ...[argument ...]

注意:第一种形式的 命令(program) 必须是用单引号引起。 awk -v a='a b c' 'BEGIN {print a; a=123} END{print a}'

标准的awk命令行参数主要由以下三个:

  • -F ERE:定义字段分隔符,该选项的值可以是一个字符串或扩展的正则表达式(ERE),如: -F: 表示以冒号分隔字段。
  • -f progfile:指定awk脚本,可以同时指定多个脚本,它们会按照在命令行中出现的顺序连接在一起。
  • -v assignment:定义awk变量,形式同awk中的变量赋值,即name=value,赋值发生在awk处理文本之前。

awk是一种编程语言,逐行扫描文件,寻找匹配特定模式的行,并在这些行上执行操作。
awk可以同时指定多个输入文件,如果输入文件的文件名为-,表示从标准输入读取内容。

Awk的输入被解析成多个记录(Record),默认情况下,记录的分隔符是 \n,因此可以认为一行就是一个记录,记录的分隔符可以通过内置变量RS更改。当记录匹配某个pattern时,才会执行后续的action命令。

而每个记录又进一步地被分隔成多个字段(Field),默认情况下字段的分隔符是空白符,例如空格、制表符等等,也可以通过-F ERE选项或者内置变量FS更改。在awk中,可以通过 $1,$2… 来访问对应位置的字段,同时 $0 存放整个记录,这一点有点类似shell下的命令行位置参数。

继续阅读

Linux/Unix 设计思想 摘记

良好的程序员写出优秀的软件,优秀的程序员“偷窃”优秀的软件。

NIH(Not Invented Here)综合征的特点就是人们会为了证明自己能够提供更加卓越的解决方案而放弃其他开发人员已经完成的工作。

Unix哲学准则:

  1. 小即是美
  2. 让每一个程序只做好一件事情
  3. 尽快建立原型
  4. 舍高效率而取可移植性
  5. 使用纯文本文件来存储数据
  6. 充分利用软件的杠杆效应
  7. 使用shell脚本来提高杠杆效应和可移植性
  8. 避免强制性的用户界面
  9. 让每一个程序都成为过滤器

Unix哲学的次要准则:

  1. 允许用户定制环境
  2. 尽量使操作系统内核小而轻巧
  3. 使用小写字母,并尽量保持简短
  4. 保护树木
  5. 沉默是金
  6. 并行思考
  7. 各部分之和大于整体
  8. 寻找90%的解决方案
  9. 更坏就是更好
  10. 层次化思考

如果你准备开始编写一个程序,请从小规模开始并尽量保持。

软件开发应该力求简短。

小程序往往只具有单一功能,而单一功能的程序往往也很小。

注:关于小程序和单一功能,我想到以前在IBM DW上看到的一篇文章提出的一种实践规则:
1、一个方法只做一件事;
2、一个方法的代码具有相同的逻辑层次;
3、遵循前面两个规则自然将产生大量短小、具有单一功能的方法,这些方法便于重用。


欢迎关注我的微信公众号: coderbee笔记,可以更及时回复你的讨论。

sed 笔记

sed 简介

sed(stream editor)是一个流编辑器,一次处理流的一行内容。

sed 命令模式
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)

常用options

  • -n 取消默认输出,只有经过sed特殊处理行(或者动作)才会被列出来。
  • -e 多重编辑模式。在命令行中同时指定多个操作指令时才需要用到。
  • -f 指定sed脚本文件名。
  • -i 直接修改文件内容。

sed 不会直接修改原文件,要直接修改原文件有2种方式:
1. 使用 -i 选项;
2. 使用重定向,重定向的目标文件不能与输入文件相同。

sed 的处理流程

每条操作指令由pattern和procedure两部分组成,pattern一般是用 ‘/’ 分隔的正则表达式(在sed中也可能是行号),procedure则是一连串的编辑命令。

sed的处理流程简化为:
1. 读入新的一行内容到缓存空间;
2. 从指定的操作命令中取出第一条指令,判断是否匹配pattern;
3. 如果不匹配,则忽略后续的编辑命令,回到第2步继续取出下一条指令;
4. 如果匹配,则针对缓存的行执行后续的编辑命令;完成后,回到第2步继续取出下一条指令;
5. 当所有指令都应用之后,输出缓存行的内容;回到第1步继续读入下一行内容;
6. 当所有行都处理完成之后,结束。

从流程上可以看出,前一个命令的执行结果影响后一个命令的执行,命令按先后顺序执行。

继续阅读

scp 文件传输

scp

scp是Security copy,基于ssh协议登录,用于在两台主机之间加密拷贝文件或目录,既可以从本机拷贝到远程主机,也可以从远程主机拷贝到本机。


root@coderbee:~# scp
usage: scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program]
           [[user@]host1:]file1 ... [[user@]host2:]file2

参数说明:

  • -1 强制scp命令使用ssh1协议。
  • -2 强制scp命令使用ssh2协议。
  • -4 强制scp命令只使用IPv4寻址。
  • -6 强制scp命令只使用IPv6寻址。
  • -B 使用批处理模式(传输过程中不询问传输口令或短语)。
  • -C 允许压缩。(将-C标志传给ssh,从而使用压缩传输)
  • -p 保留原文件的修改时间、访问时间和访问权限。
  • -q 不显示传输进度。
  • -r 递归复制整个目录。
  • -v 详细方式显示输出。scp和ssh(1)会显示整个过程的调试信息。用于调试连接、验证和配置问题。
  • -c cipher 以 cipher对数据传输进行加密,这个选项将直接传递给ssh。
  • -F ssh_config 指定一个ssh配置文件,此参数直接传递给ssh。
  • -i identity_file 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
  • -l limit 限制用户所能使用带宽,以k bit/s为单位。
  • -o ssh_config
  • -P port 大写P,port是传输数据使用的端口号。
  • -S program 指定加密传输时所使用程序,此程序必须能够理解ssh(1)的选项。
  • [[user@]host1:]file1 … 源文件或目录
  • [[user@]host2:]file2 目的文件或目录

选项参数说明来自:http://www.cnblogs.com/xuxm2007/archive/2010/08/04/1792179.html

scp的基本使用形式: scp [-r] 源文件或目录 目的文件或目录-r选项用于拷贝目录。

在本机上的文件或目录是不需要指定用户名和host的。远程主机可以不指定用户名,在命令执行后会要求输入用户名和密码。主机与路径之间是用冒号:分隔的。

对于拷贝遵循:

  • 拷贝文件时,如果目的路径是个目录,则拷贝到目的目录下,文件名不变;如果目的路径是个文件,则拷贝到以此路径指向的文件里,也就是说可以通过指定不同的文件名来直接重命名。
  • 如果是拷贝目录,则目的路径必须是个目录,且必须使用 -r 选项。

举例:

  • 从远程主机拷贝文件到本地目录: scp coderbee@coderbee.net:/home/coderbee/soft/setup.sh .
  • 从本地拷贝文件到远程主机并重命名: scp my.txt coderbee@coderbee.net:/home/coderbee/soft/mytxt
  • 拷贝本地目录到远程主机目录: scp -r basic coderbee@coderbee.net:/home/coderbee/soft/

欢迎关注我的微信公众号: coderbee笔记,可以更及时回复你的讨论。