• 1. linux -shell编程讲解作者刘东辉
  • 2. 一、后台执行命令在linux系统为了使进程能够在后台运行,就实现了一些台执行命令。 Cron和crontab at命令 &命令 nohup命令 cron 系统调度进程,可以设置一个时间端来运行一个进程。 at 使用它在一个特定的时间运行一些特殊的作业,或者在一些闲的时间端运行。 & 使用它在后台运行一个占用时间不长的进程。 nohup 在后台运行一个命令,用户退出时也不受影响。
  • 3. 1、cron和crontab cron 是一个可以用来根据时间、日期、月份、星期的组合来调度对重复任务的执行的守护进程。 使用 rpm -q vixie-cron 命令,确认是否安装了cron,使用 /sbin/service crond status 命令确认服务是否已运行。 cron可以让系统在指定的时间,去执行某个指定的工作,我们可以使用crontab指令来管理cron机制。 每个用户都可以有一个crontab文件保存调度信息。可以使用它运行任意一个shell脚本或者命令,运行时间间隔任意设置。作为系统管理员,可以通过cron.deny和cron.allow来禁止或允许crontab文件,文件/etc/crontab 参数: -e [UserName]: 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe) -r [UserName]: 删除目前的时程表 -l [UserName]: 列出目前的时程表 -v [UserName]:列出用户cron作业的状态 时间表格式: f1 f2 f3 f4 f5 program 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程式 实例如下:
  • 4. 2、at命令 在一个指定的时间执行一个指定任务,只能执行一次,且需要开启atd进程(ps -ef | grep atd查看, 开启用/etc/init.d/atd start or restart; 开机即启动则需要运行chkconfig --level 2345 atd on)。 at [-f script] [-m -l -r] [time] [date] -f script 是所要提交的脚本命令 -l 列出当前所有等待运行的作业 -r 清除作业 -m 作业完成后给用户发邮件 -time at命令的时间格式非常灵活 -date 日期格式 用at命令提交作业,at命令和at命令提示符; at 11:00 >find / -name "passwd" -print >在11:00执行一个简单的find命令 查看任务列表 at -l 清除任务:atrm job ID
  • 5. &命令 当在前台运行某个作业时,终端被该作业占据;而后台运行作业时,它不会占据终端。&可以把作业放到后台执行 command >out.file 2>&1 & 现在我们运行一个find命令,查找名为“ srm . conf”的文件,并把所有标准输出和错误输 出重定向到一个叫作find . d t的文件中: 在上面的例子中,在我们成功提交该命令之后,系统给出了它的进程号27015。 nohup命令 用途:不挂断地运行命令 nohup Command【Arg..】【&】 退出账户之后继续运行相应的进程,进程不挂起。 nohup command>myout.file 2>&1 ,输出被重定向到myout.file文件中 我们来看一个例子,验证一下在退出帐户后相应的作业是否能够继续运行。我们先提交一个名为p s 1的日志清除进程:现在退出该s h e l l,再重新登录,然后执行下面的命令:我们看到,该脚本还在运行。如果系统不支持ps x命令,使用ps -ef|grep ps1命令。
  • 6. 二、文件置换1、在本章我们将讨论: 匹配文件名中的任何字符串。 匹配文件名中的单个字符。 匹配文件名中的字母或数字字符。 下面就是这些特殊字符: * 匹配文件名中的任何字符串,包括空字符串。 ? 匹配文件名中的任何单个字符。 [...] 匹配[ ]中所包含的任何字符。 [!...] 匹配[ ]中非感叹号!之后的字符。 2、实例 ls app*或者ls *.doc ls ??R*(以任意2个字符开头,接着是R,后面再跟任何字符) ls conf.??.log ls [io]*
  • 7. 三、shell的输入输出使用标准输入、标准输出及标准错误 重定向标准输入输出 本节会全面讨论shell对数据和信息得标准输入、标准输出,对重定向也做了一定介绍 有如下命令: echo、read、cat、管道、tee 标准输入、输出和错误 文件重定向 结合使用标准输出和标准错误 合并标准输出和标准错误 exec 使用文件描述符
  • 8. 1、echo 显示文本行或者变量,或者把字符串输入到文件。 \c 不换行 \f 进纸 \t 跳格 \n换行 echo “what is your name:” echo -n “what is your name:” $ echo "The log files have all been done"> myfile 或者可以追加到一个文件的末尾,这意味着不覆盖原有的内容: $ echo "$LOGNAME carried them out at `date`">>myfile 2、read 用read从键盘或文件的某一行中读入信息,并将其赋给一个变量;如果只指定了一个变量,那么read将会把所有的输入赋给该变量,直至遇到第一个文件结束符 read name hello test echo $name hello test
  • 9. 3、cat 可以用来显示文件内容,创建文件,还可以显示控制字符。cat是一下子显示所有;若是想分页,可以使用more命令; cat [options] [filename][filename] -v 显示控制字符 cat可以输出到重定向文件 4、管道 可以把一个命令的输出传递给领一个命令作为输入。常用|表示 命令1|命令2 ls | grep myfile sed\awk\grep都很适合用管道 grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。强大的文本搜索工具,可以使用正则表达式搜索。 sed 非交互式的编辑,默认输出在屏幕上; # 只查看文件的第100行到第200行 sed -n '100,200p' mysql_slow_query.log awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理 列如:who命令的输出通过管道传递给awk命令 who | awk ‘{print $1"\t"$2}’
  • 10. 5、tee 输出的同时也保存到另一个文件中,用tee命令非常方便 它的一般形式为: tee -a files 其中,- a表示追加到文件末尾。 列如: who | tee who.out cat who.out 6、标准输入、输出和错误 标准输入---0 标准输出----1 标准错误----2 (错误单独保存在一个文件) 7、文件重定向 command>filename 标准输出重定向到一个新文件 command> filename2>&1 把标准输出和标准错误一起重定向到一个文件中 把/ e t c / p a s s w d文件中的用户I D域按 照用户命排列。该命令的输出重定向到s o r t . o u t文件中 cat passwd | awk -F: '{print $1}' | sort 1>sort.out
  • 11. 8、结合使用标准输出和标准错误 先将输出重定向到一个文件,然后再把标准错误重定向到另外一个文件 一个文件存在另一个文件不存在(但是不知道),现在把2个文件合并到一个文件account.err cat account_qtr.doc account_end.doc 1>accounts.out 2>accounts.err 9、合并标准输出和标准错误 将cleanup脚本的输出重定向到cleanup.out文件中,而且其错误也 被重定向到相同的文件中 cleanup >cleanup.out 2>&1 10、exec exec command (通常指一个shell脚本) exec 3<&0:这个命令就是将操作符3也指向标准输入。 别处,这个命令还可以作为find命令的一个选项,如下所示: (1)在当前目录下(包含子目录),查找所有txt文件并找出含有字符串”bin”的行 find ./ -name “*.txt” -exec grep “bin” {} (2)在当前目录下(包含子目录),删除所有txt文件 find ./ -name “*.txt” -exec rm {} 11、使用文件描述符 是个很小的正整数,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表 可以使用exec命令通过文件描述符打开和关闭文件