Linux例行工作与系统管理
Linux 系统的任务是由crond这个系统服务来控制的,Linux系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的.另外,由于使用者自己也可以设置计划任务,所以Linux系统也提供了使用者控制计划任务的命令,crontab,at,等命令,下面的配置我们将逐一说明这些命令的使用方法.
Linux系统例行工作
Linux上例行工作的常用作用
如果你曾经使用过 Linux 一阵子,那么你大概会发现到 Linux 会主动的帮我们进行一些工作,比如:自动升级、自动updatadb更新文件名数据库,自动进行日志文件的分析工作,这些功能的实现其实说白了就是操作系统自己的例行工作.基本上 Linux 系统常见的例行工作有:
● 进行日志文件的轮询(log rotate)
Linux系统会主动记录系统所发生的各种信息,这就是日志文件,如果不进行轮询,日志文件会越来越大,因此系统的默认计划任务,会自动帮助我们实现日志的轮询工作.
● 进行日志文件分析任务(logwatch)
如果系统发生了软件问题,硬件错误,绝大多数的错误信息,都会被记录到日志文件中,我们的系统提供了一个程序,logwatch来主动分析日志信息,这也是系统的计划任务的其中一部分.
● 更新文件查询数据库(locate)
当我们使用locate进行文件查找是,是不是感觉速度很快,其实它并没有查询文件目录,而是直接读取/var/lib/mlocate/中的数据,所以查询速度快,我们的系统会在每次开机时自动执行updatedb来更新这个数据库文件.
● whatis数据库的建立
这个数据库与locate数据库类似,whatis数据库是与man page相关的查询命令,不过要使用whatis数据库,需要更新whatis数据库,这个工作也是通过系统的例行工作来完成的.
● RPM日志文件的建立
由于系统可能会常常更新软件,包括软件的安装、升级等,都会造成软件名的差异,为了方便以后的管理工作,系统也帮我们将软件名做个排序并记录下来,有时候系统也会通过系统调度来帮RPM的数据库的生成.
● 删除一些临时文件
当我们的系统运行过一段时间后,会产生很多的系统垃圾,如果不清理,会影响以后的系统维护,系统通过例行工作,在一段时间后执行,tmpwatch的命令来删除这些临时数据的.
其实你的系统会进行的例行性工作与你安装的软件多少有关,如果你安装过多的软件,某些服务功能的软件都会附上分析工具,那么你的系统就会多出一些例行性工作,其实也就增加了系统的负担.
at 系统定时任务
at命令用于在指定时间执行命令,at允许使用一套相当复杂的指定时间的方法.它能够接受在当天的hh:mm(小时:分钟)式的时间指定.假如该时间已过去,那么就放在第二天执行.当然也能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点),等比较模糊的词语来指定时间.用户还能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午.也能够指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年),指定的日期必须跟在指定时间的后面.
上面介绍的都是绝对计时法,其实还能够使用相对计时法,这对于安排不久就要执行的命令是很有好处的.指定格式为:now + count time-units,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期).count是时间的数量,究竟是几天,还是几小时,等. 更有一种计时方法就是直接使用today(今天)、tomorrow(明天)来指定完成命令的时间.
at 命令的运行方式.
事实上,我们使用 at 这个命令来添加所要运行的工作,并将这个工作以文本格式方式写入 /var/spool/at/ 目录内,该工作便能等待 atd 这个服务的取用与运行了,就这么简单,不过,并不是所有的人都可以进行 at 定时任务,at命令有以下排除方式.
我们可以利用 /etc/at.allow 与 /etc/at.deny 这两个文件来进行 at 的使用限制,加上这两个文件后 at 的工作情况其实是这样的:
● 先找寻 /etc/at.allow 这个文件,写在这个文件中的使用者才能使用 at 没有在这个文件中的使用者则不能使用 at (即使没有写在 at.deny 当中)
● 如果 /etc/at.allow 不存在,就寻找 /etc/at.deny 这个文件,若写在这个 at.deny 的使用者则不能使用 at 而没有在这个 at.deny 文件中的使用者,就可以使用 at
● 如果两个文件都不存在,那么只有 root 可以使用 at 这个命令.
通过上面的说明:我们知道 /etc/at.allow 是管理较为严格的方式,而 /etc/at.deny 则较为松散.在一般的发行版当中,由于假设系统上的所有用户都是可信任的,因此系统通常会保留一个空的 /etc/at.deny 文件,意思是允许所有人使用 at 命令的意思(您可以自行检查一下该文件).不过,万一你不希望有某些使用者使用 at 的话,将那个使用者的帐号写入 /etc/at.deny 即可.一个帐号写一行.
在介绍命令之前我们首先要说明的是,这个at命令,在精简版的系统中是不存在的,我们首先要先安装一下,并设置为开机自启动.
[root@localhost ~]# yum install -y at |
接着继续来看一下at命令的常用语法吧.
[root@localhost ~]# at --help |
事实上,当我们使用 at 时会进入一个 at shell 的环境来让用户执行工作命令,此时建议你最好使用绝对路径来执行你的命令,由于在at工作调度的使用上,系统会将该项at工作独立出你的bash环境中,直接交给atd程序来接管,也就是说,当我们执行了at命令的时候,就可以立即脱机啦,系统会帮我们执行.
定时1: 在两天后的下午 5 点钟,执行/bin/ls
命令
[root@localhost ~]# at 5pm+2 days |
定时2: 在明天17点30分,输出时间到指定文件内
[root@localhost ~]# at 17:30 tomorrow |
atq查询任务: 通过使用 atq 命令查看系统中的计划任务
[root@localhost ~]# atq |
删除at任务: 删除一个已设置的计划任务
[root@localhost ~]# atq |
显示指定at任务: 显示指定设置计划的任务内容
[root@localhost ~]# atq |
其他小例子: 其他定时例子
Minute at now + 5 minutes 任务在5分钟后运行 |
jobs 工作管理
jobs命令用于显示Linux中的任务列表及任务状态,包括后台运行的任务.该命令可以显示任务号及其对应的进程号.其中任务号是以普通用户的角度进行的,而进程号则是从系统管理员的角度来看的,一个任务可以对应于一个或者多个进程号.
在Linux系统中执行某些操作时候,有时需要将当前任务暂停调至后台,或有时须将后台暂停的任务重启开启并调至前台,这一序列的操作将会使用到 jobs、bg、和 fg 三个命令以及两个快捷键来完成.
这个工作管理 (job control)是用在 bash 环境下的,也就是说:『当我们登陆系统取得一个shell之后,在单一终端下同时进行多个工作的行为管理 』.举例来说,我们在登陆 bash 后,想要一边复制文件、一边进行数据搜寻、一边进行编译,还可以一边进行 vi 程序编写,这就是实现了在一个终端的情况下进行多个工作任务.
假设我们只有一个终端,因此在可以出终端提示符让你操作的环境就称为前台(foreground),其他工作就可以让你放入后台(background)去暂停或者运行,这里要注意的是,放入后台的工作想要运行的话,它必须不能与用户交互.而放入后台的工作无法使用Ctrl+C来终止.
总之要进行bash的job control管理必须注意以下限制:
● 这些工作所触发的进程必须来自于你的shell的子进程
● 前台:当前终端正在进行标准输出到显示器上的工作
● 后台:不用将命令执行过程标准输出到显示器的工作
● 后台中:后台中的进程是正在运行的,不能使用强制终止
● 当前终端的工作只能当前终端管理,其它终端不能管理
● 放入后台的工作必须是能持续运行的,否则程序会被暂停
那么如何将工作放到后台 ?
通过命令
&
可以将工作转到后台,并持续运行
通过热键ctrl+z
可以将工作放到后台,并暂停执行
说了这么多理论,下面说一下jobs命令的语法,以及常用参数
[root@localhost ~]# jobs --help |
命令放入后台: 通过 &
符号将vim编辑器放入后台
[root@localhost ~]# vim lyshark.sh & |
杀死后台任务: 终止序号是[1]的那个后台任务
[root@localhost ~]# jobs -l |
恢复暂停工作: 使用fg命令,将后台暂停的工作恢复到前台,继续执行
[root@localhost ~]# jobs -l |
激活后台工作: 使用bg让后台工作脱离终端运行,就是激活工作
[root@localhost ~]# jobs -l |
crond 例行工作
crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务,相对于 at 是仅运行一次的工作,循环运行的例行性工作的调度则是由 crond 这个系统服务来控制的,这个系统服务是默认启动的.
用户如果想添加计划任务的话,可以使用crontab命令设置,不过为了安全性的问题,与at命令类似我们也可以通过配置文件限制用户列表,下面我们先来看一下他的两个配置文件吧.
● /etc/cron.allow
此配置文件记录可以使用crontab任务的用户,若不在这个文件内的用户则不可以使用crontab
● /etc/cron.deny
此配置文件记录了不可以使用crontab设定计划任务的用户列表
同样的,以优先顺序来说 /etc/cron.allow
比 /etc/cron.deny
要优先,而判断上面,这两个文件只选择一个来限制而已,因此,建议你只要保留一个即可,免得影响自己在配置上面的判断,一般来说,系统默认是保留 /etc/cron.deny
这个配置文件的,你可以将不想让他运行 crontab 的那个使用者写入 /etc/cron.deny
当中,书写格式是一个帐号一行.
另外当使用者使用 crontab 这个命令来新建工作调度时,该项任务就会被纪录到 /var/spool/cron/
里面去,而且是以帐号来作为判断依据的,cron 运行的每一项工作都会被纪录到 /var/log/cron 这个文件里,所以如果你的 Linux 不知道是否被植入木马时,也可以搜寻一下 /var/log/cron 这个文件,查看一些.
Linux下的任务调度分为两类:系统任务调度和用户任务调度
系统任务调度: 系统周期性所要执行的工作,比如写缓存数据到硬盘,日志清理等,在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件,也就是说,如果我想让所有用户都执行这些任务,可以将此任务写入 /etc/crontab
这个文件里,这样一来无论使用那个用户登录,都会执行这些任务.
/etc/crontab文件包括下面几行:
SHELL=/bin/bash |
前四行是用来配置crond任务运行的环境变量
第一行:SHELL变量指定了系统要使用哪个shell,这里是bash
第二行:PATH变量指定了系统执行命令的路径
第三行:MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户
第四行:HOME变量指定了在执行命令或者脚本时使用的主目录
用户任务调度: 用户定期要执行的工作,比如用户数据备份、定时邮件提醒等,用户可以使用 crontab 工具来定制自己的计划任务,所有用户定义的crontab文件都被保存在/var/spool/cron目录中,其文件名与用户名一致,使用者权限文件如下:
/etc/cron.deny 该文件中所列用户不允许使用crontab命令 |
crontab文件的含义: 用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
-------------------------------------------------------------------------------------- |
光说不练等于零,下面是crontab命令的语法,以及常用参数,紧接着我来举几个小例子吧.
[root@localhost ~]# crontab --help |
实例1: 周一到周五每天17:00,执行任务
0 17 * * 1-5 echo "1" > /proc/sys/vm/drop_caches |
实例2: 每周一、三、五的8点30分,执行任务
30 8 * * 1,3,5 echo "1" > /proc/sys/vm/drop_caches |
实例3: 8点到18点之间每隔2小时执行一次
0 8-18/2 * * * echo "1" > /proc/sys/vm/drop_caches |
实例4: 每隔3天执行一次计划任务
0 * */3 * * echo "1" > /proc/sys/vm/drop_caches |
实例5: 每分钟执行一次,计划任务
* * * * * echo "1" > /proc/sys/vm/drop_caches |
实例6: 每小时第3,和第15分钟执行一次
3,15 * * * * echo "1" > /proc/sys/vm/drop_caches |
实例7: 在上午8点到11点的,第3和第15分钟执行
3,15 8-11 * * * echo "1" > /proc/sys/vm/drop_caches |
实例8: 每隔两天的,上午8点到11点,的第3和第15分钟执行
3,15 8-11 */2 * * echo "1" > /proc/sys/vm/drop_caches |
实例9: 每个星期一的上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 echo "1" > /proc/sys/vm/drop_caches |
实例10: 每月1、10、22日的4 : 45重启smb
45 4 1,10,22 * * /etc/init.d/smb restart |
Linux系统进程管理
一个程序被加载到内存当中运行,那么在内存内的那个数据就被称为程序(process).程序是操作系统上非常重要的概念,所有系统上面跑的数据都会以程序的类型存在.在 Linux 系统当中:『触发任何一个事件时,系统都会将他定义成为一个程序,并且给予这个程序一个 ID 称为 PID,同时依据触发这个进程的相关用户与相关属性关系,给予这个 PID 一组有效的权限设置』 从此以后这个 PID 能够在系统上面进行的动作,就与这个 PID 的权限有关了.
什么是程序? 如何产生一个程序?
我们通过执行一个程序或一个命令,就可以产生一个事件从而取得一个PID,我们的系统只认识二进制文件,当我让系统工作时当然就需要触发二进制文件,那个被触发的东西就叫做程序(program).通俗地说,能够代替人管理操作系统,完成特定任务,解决特定问题的一段代码的集合就是程序.
什么是进程? 如何产生一个进程?
程序一般是放在磁盘中的,当我们的程序被触发后,执行者的权限与属性,都会被加载到内存,操作系统并给予这个内存单元一个标识符(PID),可以这么说,进程就是一个正在运行的程序.
关于系统的子进程与父进程?
子进程与父进程是相互依存的,而父进程所产生的子进程,其权限也是父进程的权限所给予的,打个比方:当我们登陆系统后会取得一个BASH接口,然后我们使用这个接口,去执行另一个命令,则这个BASH接口就是父进程,而执行的那个命令,是从父进程中衍生出来的,其权限也是父进程给予的,我们把这种进程称作子进程.
关于常驻内存的进程?
常驻内存的进程通常都是负责一些系统所提供的功能以服务各种用户的任务,通常我们把这些常驻进程称作服务,而这些服务,一旦被启动他就会一直持续不断的运行着,我们把这种狗皮膏药叫做,常驻内存进程.
其实我们了解并学会使用系统进程管理,对我们的日常维护大有好处,一个称职的管理员,必须要熟练进程的管理才行,否则系统发生问题时很难去解决,接下来我们就来学习一下,进程管理当中的查询,终止,重启,以及调节进程优先级等操作吧:
进程的查看
PS-静态查询进程
ps命令用于报告当前系统的进程状态,可以搭配kill指令随时中断,删除不必要的程序,ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等,总之大部分信息都是可以通过执行该命令得到的,静态查看系统中的进程,查询的是命令执行一瞬间的进程的状态.
紧接着,我们先来看一下PS命令的常用参数吧,后期我们会分别说明各种参数和显示结果的说明.
[root@localhost ~]# ps --help |
通过PS -l 仅查看自己的bash相关进程
系统整体运行的进程是非常多的,但如果使用 ps -l 则仅列出与你的操作环境(bash)有关的进程而已,即最上层的父进程会是你自己的 bash 而没有延伸到 init 这个进程上去.
[root@localhost ~]# ps -l |
参数解释环节
F:代表进程标志,说明这个进程的权限
若为4:表示此进程权限为root
若为1:表示此进程可以被复制fork
S:代表进程的状态(STAT),进程的主要状态有:
R(Running):运行中
S(Sleep):睡眠中
D:不可被唤醒的
T(Stop):停止状态
Z(Zombie):僵尸进程
UID/PID/PPID:代表进程号:
PID:进程的PID号
UID:用户身份标识
PPID:父进程的PID号
C:代表CPU的使用率,单位是百分比
PRI/NI:进程CPU执行优先级
ADDR/SZ/WCHAN:内存参数,主要有:
ADDR:该进程在内存的那个部分
SZ:代表次进程用掉多少内存
WCHAN:目前进程是否运行中,-代表运行
TTY:代表执行的终端编号
TIME:进程使用掉的CPU时间
CMD:终端执行的命令
通过PS aux 查看系统所有进程
此命令,是unix通用命令,在Linux下同样保留了下来,此命令可以用来查看系统的所有进程,默认也是使用人数最多的一个查询命令.
[root@localhost ~]# ps aux |
关于ps aux命令,参数解释环节
USER:该进程的运行用户
PID:进程的PID号
%CPU:进程占用的cpu的百分比
%MEM:进程占用物理内存的百分比
VSZ:占用的虚拟内存的大小(KB)
RSS:占用物理内存的大小(KB)
tty:登录终端(Alt+F1-F6)
stat:进程执行状态
START:进程启动时间
TIME:进程运行的时间(总时间),非系统时间
COMMAND:产生此进程的命令
STAT 进程常用状态
D:无法中断的休眠状态(通常 IO 的进程)
R:正在运行的进程
S:处于休眠状态
T:停止或被追踪
W:进入内存交换(从内核2.6开始无效)
X:死掉的进程(基本很少见)
Z:僵尸进程
<:优先级高的进程
N:优先级较低的进程
L:被锁进内存的进程
s:进程的领导者(在它之下有子进程)
l:多进程的
+:位于后台的进程组
TOP-动态查询进程
top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具,通过top命令所提供的互动式界面,用热键可以管理,使用方便,事实性高.
废话不多说,先看一下常用参数吧.
[root@localhost ~]# top --help |
关于 top 命令的输出信息的解释,与汉化.
[root@localhost ~]# top |
进程的管理
程序之间是可以互相控制的,举例来说,你可以关闭、重新启动服务器软件,服务器软件本身是个程序,你既然可以让她关闭或启动,当然就是可以控制该程序啦,那么程序是如何互相管理的呢,其实是通过给予该程序一个信号(signal)去告知该程序想要让他做什么操作,因此这个信号就很重要啦,默认情况下我们可以使用kill -l
命令来查询系统支持的信号,但是常用的信号,无非就一下几种.
信号数字 | 信号名称 | 信号内容 |
---|---|---|
1 | SIGHUP | 启动被终止的进程,可让该PID重新读取自己的配置文件,类似重启 |
2 | SIGINT | 相当于使用Ctrl+C 来中断一个进程 |
9 | SIGKILL | 强制杀死一个进程的执行 |
15 | SIGTERM | 已正常的结束进程来终止该进程的执行 |
17 | SIGSTOP | 相当于使用Ctrl+Z 来暂停一个进程 |
上面仅是常见的 signal 而已,如果想知道更多关于信号的东西,请自行 man 7 signal 吧,一般来说你只要记得 『1,9,15』 这三个号码的意义即可,那么我们如何传送一个信号给某个程序呢? 就是通过 kill 或 killall 下面我们分别来看看:
Kill命令-杀死指定进程
kill命令用来删除执行中的程序或工作,kill可将指定的信息送至程序,预设的信息为SIGTERM(15),可将指定程序终止,若仍无法终止该程序,可使用SIGKILL(9)信号尝试强制删除程序,程序或工作的编号可利用ps指令或job指令查看.
下面是kill命令的常用格式,和基本参数
[root@localhost ~]# kill --help |
重启进程: 使用kill -1
重启一个syslog程序
[root@localhost ~]# ps aux | grep "syslog" | grep -v "grep" | awk '{print $2}' |
强制终止指定程序: 使用kill -9
强制终止一个VIM程序
[root@localhost ~]# ps aux | grep "vim" |
强制终止Jobs任务: 使用Kill -9 %
命令,强制结束一个jobs工作
[root@localhost ~]# jobs |
Killall命令-杀进程
由于 kill 后面必须要加上 PID (或者是 job number)所以,通常 kill 都会配合 ps,pstree 等命令,因为我们必须要找到相对应的那个程序的PID号码,才能够去结束它,但是这样的话很是麻烦,那么我们的killall命令可以直接通过进程名称来操作指定程序,不过这个包默认是没有安装的,您需要执行yum install -y psmisc
先来安装一下,下面我们就一起来学习一下吧.
[root@localhost ~]# killall --help |
总之,要终止某个程序,我们可以使用 PID 或者是启动该程序的命令名称,而如果要终止某个服务呢,最简单的方法就是利用 killall 因为他可以将系统当中所有以某个命令名称启动的服务全部终止.
pkill命令-剔除终端
pkill命令可以按照进程名杀死进程,pkill和killall应用方法差不多,也是直接杀死运行中的程序.如果您想杀掉单个进程,请用kill来杀掉.下面演示一下,通过pkill命令,下线一个终端
[root@localhost ~]# who |
调节优先级
我们知道 Linux 是多任务,多用户的工作环境,由 top 的输出结果我们也发现,系统同一时间内有非常多的进程在运行中,只是绝大部分的进程都在休眠(sleeping)状态而已,想一想,如果所有的进程同时被唤醒,那么 CPU 应该要先处理那个进程呢,这就得要考虑到进程的优先运行序(Priority)与CPU 调度问题了.CPU调度指的是每个程序被 CPU 运行的运算规则,而例行性工作则是将某个任务安排在某个时间再交由系统运行,CPU调度与操作系统较具有相关性.
在介绍命令之前我们先来看一下关于PRI与NICE值的问题,Linux系统给每一个进程分配了一个PRI进程优先级,不过这个PRI值是由内核动态调整的,用户无法直接调整PRI的值,先来看看它的格式吧.
[root@localhost ~]# ps -l |
上面我们可以看到PRI的存在,由于 PRI 是由内核动态调整的,我们使用者也无权去干涉 PRI ,那如果你想要调整程序的优先运行序时,就得要通过 Nice 值了,Nice 值就是上表的 NI 字段内容,一般来说 PRI 与 NI 的相关性如下:
PRI(new) = PRI(old) + Nice |
不过我们要注意的是,Nice值有正负之分,Nice可调整的范围是(-20-19),系统会将PRI的值和Nice相加,得到的结果越小,优先值就越高.
关于Nice值的注意事项:
1.nice值的范围是-20-19
2.root可随意调整自己或他人的Nice值
3.一般用户只可以调整自己的Nice值
4.一般用户只可以调高nice不能减小
使用nice: 新执行vim程序,并赋予-5的权限
[root@localhost ~]# nice -n -5 vim & |
使用renice: 使用renice,给一个已经运行的进程修改nice值
[root@localhost ~]# jobs |
Linux系统资源管理
除了系统的程序之外,我们还必须就系统的一些资源进行检查,举例来说,我们使用 top 可以看到很多系统的资源,那么还有没有其他的工具可以查阅的?当然有,下面这些工具命令可以玩一玩
free 查看内存使用
Linux 系统为了要加速系统效能,所以会将最常使用到的或者是最近使用到的文件数据缓存 (cache) 下来,这样未来系统要使用该文件时,就直接由内存中搜寻取出,而不需要重新读取硬盘,速度上面当然就加快了,因此实体内存被用光是正常的喔
[root@localhost ~]# free --help |
[root@localhost ~]# free -h |
uname 查系统版本
这个东西我们前面使用过很多次了,uname 可以列出目前系统的内核版本、 主要硬件平台以及 CPU 类型等.
[root@localhost ~]# uname --help |
uptime 查系统负载
uptime命令能够打印系统总共运行了多长时间和系统的平均负载,uptime命令可以显示的信息显示依次为:现在时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载.
[root@localhost ~]# uptime |
vmstat 检测系统资源
如果你想要动态的了解一下系统资源的运行,那么这个 vmstat 确实可了解一下,vmstat 可以检测『 CPU / 内存 / 磁盘输入输出状态 』等
[root@localhost ~]# vmstat --help |
[root@localhost ~]# vmstat 1 3 |
dmesg 分析启动数据
系统在启动的时候,核心会去侦测系统的硬件,你的某些硬件到底有没有被捉到,那就与这个时候的侦测有关.dmesg命令被用于检查和控制内核的环形缓冲区,kernel会将开机信息存储在ring buffer中.您若是开机时来不及查看信息,可利用dmesg来查看.开机信息保存在/var/log/dmesg文件里.
[root@localhost ~]# dmesg |
lsof 查进程打开文件
lsof命令用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP).找回/恢复删除的文件,是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需要root用户执行.
[root@localhost ~]# lsof --help |
实例: 列出进程打开或正在使用的文件信息
[root@localhost ~]# lsof |
Linux系统网络管理
本小结内容将具体介绍几个常用的网络测试命令的使用,在日常工作中,网络方面的命令还是要经常使用的,比如排查网络故障等操作,下面我们就来介绍几个常用的网络管理命令吧.
ping 测试网络连通性
ping命令用来测试主机之间网络的连通性,执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没问题,就会回应该信息,因而得知该主机运作正常.
[root@localhost ~]# ping --help |
指定探测次数: 通过使用-c
可以指定要探测的次数,默认是一直探测下去.
[root@localhost ~]# ping -c 3 www.baidu.com |
启用极限检测: 通过使用-f
参数,一直检测下去.
[root@localhost ~]# ping -f www.baidu.com |
使用安静模式: 非交互模式ping一个主机,写脚本用.
[root@localhost ~]# ping -q www.baidu.com > /dev/null |
ifconfig 查询网络信息
ifconfig命令被用于配置和显示Linux内核中网络接口的网络参数,用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在.要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了,这里需要注意的是,精简模式的Linux下没有这个命令,请执行 yum install -y net-tools
安装.
[root@localhost ~]# ifconfig --help |
启动/关闭指定网卡:
[root@localhost ~]# ifconfig eth0 up 或者 ifup eth0 |
临时分配一个IP地址:
[root@localhost ~]# ifconfig eth0 192.168.1.10 |
临时分配一个子网口:
[root@localhost ~]# ifconfig eth0:0 192.168.1.10 |
为网卡配置和删除IPv6地址:
[root@localhost ~]# ifconfig eth0 add 33ffe:3240:800:1005::2/64 #为网卡eth0配置IPv6地址 |
启动/关闭ARP协议:
[root@localhost ~]# ifconfig eth0 arp #开启网卡eth0 的arp协议 |
设置最大传输单元:
[root@localhost ~]# ifconfig eth0 mtu 1500 #设置能通过的最大数据包大小为 1500 bytes |
netstat 查网络连接状态
Netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息.Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况,netstat命令用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况.
[root@localhost ~]# netstat --help |
列出所有端口(包括监听和未监听的)
[root@localhost ~]# netstat -a #列出所有端口 |
列出所有处于监听状态的Sockets
[root@localhost ~]# netstat -l #只显示监听端口 |
显示每个协议的统计信息
[root@localhost ~]# netstat -s #显示所有端口的统计信息 |
在netstat输出中显示 PID 和进程名称
[root@localhost ~]# netstat -pt |
traceroute 追踪数据包
traceroute用于追踪数据包在网络上的传输时的全部路径,它默认发送的数据包大小是40字节,通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径.当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的.
traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间.一条路径上的每个设备traceroute要测3次.输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其ip地址,注意精简模式的Linux下没有这个命令,请执行 yum install -y traceroute
安装.
[root@localhost ~]# traceroute --help |
测试与百度的路由次数
[root@localhost ~]# traceroute -q 1 www.baidu.com |
route 查询与设置路由
route命令用来显示并设置Linux内核中的网络路由表,route命令设置的路由主要是静态路由.要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现.
在Linux系统中设置路由通常是为了解决以下问题:该Linux系统在一个局域网中,局域网中有一个网关,能够让机器访问Internet,那么就需要将这台机器的ip地址设置为Linux机器的默认路由.要注意的是,直接在命令行下执行route命令来添加路由,不会永久保存,当网卡重启或者机器重启之后,该路由就失效了,可以在/etc/rc.local
中添加route命令来保证该路由设置永久有效.
[root@localhost ~]# route --help |
显示当前路由: 使用route
命令显示当前路由表.
[root@localhost ~]# route |
其中Flags为路由标志,标记当前网络节点的状态,Flags标志说明:
U ————-> (Up)表示此路由当前为启动状态
H ————-> (Host)表示此网关为一主机
G ————-> (Gateway)表示此网关为一路由器
R ————-> (Reinstate Route)使用动态路由重新初始化的路由
D ————-> (Dynamically)此路由是动态性地写入
M ————-> (Modified)此路由是由路由守护程序或导向器动态修改
! ————-> (false)表示此路由当前为关闭状态
添加网关/设置网关: 增加一条到达192.168.10.0
的路由.
[root@localhost ~]# route add -net 192.168.10.0 netmask 255.255.255.0 dev ens32 |
屏蔽一条路由: 增加一条屏蔽的路由,目的地址为192.168.10.0
将被拒绝.
[root@localhost ~]# route add -net 192.168.10.0 netmask 255.255.255.0 reject |
删除路由记录: 删除192.168.10.0
这条路由记录.
[root@localhost ~]# route |
添加网关: 添加设置默认网关.
[root@localhost ~]# route add default gw 192.168.1.1 |
删除网关: 删除设置默认网关.
[root@localhost ~]# route del default gw 192.168.1.1 |
Nmcli 管理网络配置
RHEL7与CentOS7中默认的网络服务由NetworkManager提供,这是动态控制及配置网络的守护进程,它用于保持当前网络设备及连接处于工作状态,同时也支持传统的ifcfg类型的配置文件.NetworkManager在RHEL系统中也叫nmcli,经常使用ifconfig的用户应该在RHEL中避免使用ifconfig了,nmcli的功能要强大、复杂的多.
查询网络连接: 通过nmcli命令查询网络连接详情.
[root@localhost ~]# nmcli connection show #显示所有网络连接 |
启用与禁止网络连接: 下面的命令用来启动和禁止连接网络.
[root@localhost ~]# nmcli connection up ens32 #启动ens32网卡 |
修改网络地址: 修改网络连接单项参数,如下.
nmcli con add con-name ens32 type ethernet ifname ens32 动态获取IP方式的网络连接配置 |
以上nmcli命令修改所对应的文件条目:
nmcli con mod ————-> ifcfg-* 文件
ipv4.method manual ————-> BOOTPROTO=none
ipv4.method auto ————-> BOOTPROTO=dhcp
connection.id eth0 ————-> NAME=eth0
ipv4.addresses ————-> IPADDR0=192.168.1.10
192.168.1.0/24 ————-> PREFIX0=24
192.168.1.1 ————-> GATEWAY0=192.168.1.1
ipv4.dns 8.8.8.8 ————-> DNS0=8.8.8.8
pv4.dns-search example.com ————-> DOMAIN=example.com
pv4.ignore-auto-dns true ————-> PEERDNS=no
connection.autoconnect yes ————-> ONBOOT=yes
connection.interface-name eth0 ————-> DEVICE=eth0
802-3-ethernet.mac-address… ————-> HWADDR=…
配置一个IPV6地址: 使用上面的方法配置一个IPV6地址.
a.先查看一下网卡名称,看一下名称是否能够匹配.
[root@system1 ~]# nmcli connection |
b.紧接着修改管理方式为auto,并配置上IP地址.
[root@localhost ~]# nmcli connection modify eth0 ipv6.method auto |
c.重启服务,并查看配置是否生效inet6 200e:ac18::e0a
.
[root@localhost ~]# systemctl restart network |
配置聚合网络(拓展): 给本机配置要给聚合网络,并使用eth1
和eth2
接口,实现当eth1
失效后自动切换到eth2
.
a.拷贝配置文件模板,默认配置模板.
[root@localhost ~]# cd /usr/share/doc/teamd-1.9/example_ifcfgs/1 |
b.修改tteam_test0模板.
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-team_test0 |
d.修改eth1网卡,修改两处位置即可.
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1 |
d.修改eth2网卡,修改两处位置即可.
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth2 |
e.重启网络看效果,到此聚合配置完毕.
[root@localhost ~]# systemctl restart network |