4.5 常用运维命令 |
|
所有熟悉Linux的人都知道,最有效率的方式就是使用命令来操作和管理系统。本节就介绍一些常用的运维命令。
grep是一种强大的文本搜索工具命令,用于查找文件中符合指定格式的字符串,支持正则表达式。若不指定任何文件名称,或是所给予的文件名为“-”,则grep命令从标准输入设备读取数据。grep家族包括grep、egrep和fgrep。egrep和fgrep命令只跟grep有很小不同。egrep是grep的扩展,fgrep就是fixed grep或fast grep,该命令使用任何正则表达式中的元字符表示其自身的字面意义,不再特殊。其中egrep就等同于“grep-E”,fgrep等同于“grep-F“。Linux中的grep功能强大,支持很多丰富的参数,使用它可以方便地进行文本处理工作。grep常用参数说明如表4.5所示。
表4.5 grep命令常用参数说明
(续表)
grep单独使用时至少有两个参数,若少于两个参数,grep会一直等待,直到该程序被中断。如果遇到这样的情况,可以按Ctrl+C键终止。默认情况下只搜索当前目录,如果递归查找子目录,可使用r选项。详细使用方法如示例4-15所示。
【示例4-15】
grep支持丰富的正则表达式,常见的正则元字符含义如表4.6所示。
表4.6 grep正则参数说明
(续表)
awk和sed为Linux系统中强大的文本处理工具,其使用方法比较简单,而且处理效率非常高,本节主要介绍awk和sed命令的使用方法。
awk命令用于Linux下的文本处理。数据可以来自文件或标准输入,支持正则表达式等功能,它是Linux下强大的文本处理工具。示例4-16是一个简单的awk使用方法。
【示例4-16】
注意
当指定awk时,首先从给定的文件中读取内容,然后针对文件中的每一行执行print命令,并发送至标准输出,如屏幕。在awk中,“{}”用于将代码分块。由于awk默认的分隔符为空格等空白字符,因此上述示例的功能为将文件中的每行打印出来。
在修改文件时,如果不断地重复某些编辑动作,那么可用sed命令完成。sed命令为Linux系统上将编辑工作自动化的编辑器,使用者无须直接编辑数据。它是一种非交互式上下文编辑器,一般的Linux系统本身即安装有sed工具。使用sed可以完成数据行的删除、更改、添加、插入、合并及交换等操作。同awk类似,sed命令可以通过命令行、管道或文件输入。
sed命令可以打印指定的行至标准输出或重定向至文件。打印指定的行可以使用p命令,可以打印指定的某一行或某个范围的行,如示例4-17所示。
【示例4-17】
注意
“2p”表示只打印第2行,而“2,3p”表示打印一个范围。
以上只介绍了awk和sed命令的基本用法,awk和sed为Linux下强大的文本处理工具,如需了解更多功能,可以参考相关帮助文档。
tar命令用于将文件打包或解包,扩展名一般为.tar,指定特定参数可以调用gzip或bzip2制作压缩包或解开压缩包,扩展名为.tar.gz或.tar.bz2。tar命令常用参数说明如表4.7所示。
表4.7 tar命令常用参数说明
tar命令相关的包一般使用.tar作为文件名标识。如果加z参数,则以.tar.gz或.tgz来代表gzip压缩过的tar。tar的应用如示例4-18所示。
【示例4-18】
zip是Linux系统下广泛使用的压缩程序,文件压缩后扩展名为.zip。zip常见的参数如表4.8所示。
表4.8 zip命令常用参数说明
zip命令的基本用法是:zip [参数] [打包后的文件名] [打包的目录路径]。路径可以是相对路径,也可以是绝对路径。其使用方法如示例4-19所示。
【示例4-19】
zip命令用来将文件压缩为常用的zip格式。unzip命令则用来解压缩zip文件,如示例4-20所示。
【示例4-20】
Linux系统中的uptime命令主要用于获取主机运行时间和查询Linux系统负载等信息。uptime命令可以显示系统已经运行了多长时间,信息显示依次为:现在时间、系统已经运行了多长时间、目前有多少登录用户、系统在过去的1分钟/5分钟/15分钟内的平均负载。uptime命令用法十分简单,直接输入uptime即可。
【示例4-21】
06:30:09表示系统当前时间,up 8:15表示主机已运行时间,时间越大,说明机器越稳定。3 users表示用户连接数,是总连接数而不是用户数。load average表示系统平均负载,统计最近1分钟、5分钟、15分钟内的系统平均负载。系统平均负载是指在特定时间间隔内运行在队列中的平均进程数。对于单核CPU,负载小于3表示当前系统性能良好,3~10表示需要关注,系统负载可能过大,需要做对应的优化,大于10表示系统性能有严重问题。另外,15分钟系统负载需重点参考并作为当前系统运行情况的负载依据。
free命令会显示内存的使用情况,包括实体内存、虚拟的交换文件内存、共享内存区段,以及系统核心使用的缓冲区等。常用参数说明如表4.9所示。
表4.9 free命令常用参数说明
free使用方法如示例4-22所示。
【示例4-22】
-/+ buffers/cached:表示物理内存的缓存统计。Swap表示硬盘上交换分区的使用情况,如剩余空间较小,需要留意当前系统内存使用情况及负载。
第1行数据16040表示物理内存总量,13128表示总计分配给缓存(包含buffers与cache)使用的数量,但其中可能部分缓存并未实际使用,2911表示未被分配的内存。shared为0,表示共享内存,329表示系统分配但未被使用的buffers数量,6265表示系统分配但未被使用的cache数量。
以上示例显示系统总内存为16040MB,如需计算应用程序占用内存,可以使用以下公式计算total-free-buffers-cached=16040-2911-329-6265=6535,内存使用百分比为6535/16040= 40%,表示系统内存资源能满足应用程序需求。若应用程序占用内存量超过80%,则应该及时进行应用程序算法优化。
at可以设置在指定的时间执行一个指定任务,只能执行一次,使用前确认系统开启了atd服务。如果任务指定的时间已经过去,系统会放在第2天执行。at命令的使用方法如示例4-23所示。
【示例4-23】
不过,并不是所有用户都可以执行at计划任务。利用/etc/at.allow与/etc/at.deny这两个文件来进行at的使用限制。系统首先查找/etc/at.allow这个文件,写在这个文件中的使用者才能使用at,没有在这个文件中的使用者则不能使用at。如果/etc/at.allow不存在,就寻找/etc/at.deny这个文件。若使用者写在at.deny中则不能使用at,而没有在at.deny文件中的使用者可以使用at命令。
crond在Linux系统中用来周期性地执行某种任务或等待处理某些事件,如进程监控、日志处理等,和Windows下的计划任务类似。安装操作系统时默认会安装此服务工具,并且会自动启动crond进程。crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,就自动执行该任务。crond的最小调度单位为分钟。
Linux下的任务调度分为两类:系统任务调度和用户任务调度。
(1)系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个文件就是系统任务调度的配置文件。
/etc/crontab文件包括下面几行,如示例4-24所示。
【示例4-24】
前3行是用来配置crond任务运行的环境变量,第1行的SHELL变量指定了系统要使用哪个Shell,这里是bash;第2行的PATH变量指定了系统执行命令的路径;第3行的MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,若MAILTO变量的值为空,则表示不发送任务执行信息给用户。后面几行表示的含义将在下个小节详细讲述。
(2)用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用crontab工具来定制自己的计划任务。所有用户定义的crontab文件都被保存在/var/spool/cron目录中。其文件名与用户名一致。
在用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为6个字段,前5个字段是时间设定段,第6个字段是要执行的命令段,格式为minute hour day month week command(/etc/crontab文件的第7-14行),具体说明参考表4.10。
表4.10 crontab任务设置对应参数说明
其中,crond是Linux用来定期执行程序的命令。当操作系统安装完成之后,默认便会启动此任务调度命令。crond命令每分钟会定期检查是否有要执行的工作,crontab命令常用参数如表4.11所示。
表4.11 crontab命令常用参数说明
crontab的一些使用方法如示例4-25所示。
【示例4-25】
poweroff就是systemctl的链接,关机是由systemctl控制的,如示例4-26所示。
【示例4-26】
systemd是所有进程的祖先﹐其进程号始终为1﹐所以发送TERM信号给systemd会终止所有的用户进程﹑守护进程等。关机时使用的命令就是使用这种机制。Linux定义了7个运行级别,不同的运行级定义如表4.12所示。
表4.12 运行级别参数说明
使用命令init加上运行级别对应的数字,就可以切换到对应的运行级别,如示例4-27所示。
【示例4-27】