Linux技术研究-基础篇(日志和计划任务,网络)
2011-05-21 11:27
519 查看
Linux技术研究-基础篇(日志和计划任务,网络)
日志 linux中的程序执行时透过标准输出和错误输出我们能够观测到程序的运行状态 当遇到后台执行的程序或内核自身来说就不能将运行状态信息输出到屏幕了 他们会切断与终端主控制台的连接,即使输出到屏幕 我们也不能24小时的盯着屏幕. 为了让管理员能随时查看程序运行的历史与当前状态,linux引入了日志服务 它可以收集任何服务产生的日志,并且存储成文件,以备管理员随时查看 日志分为三大组件 klogd kernel log daemon 专门收集内核产生的日志 syslogd system log daemon 专门收集应用程序或服务产生的日志 logger 日志工具,可以手动写出各个对象和级别的日志信息 日志服务的启动和关闭 service syslog restart 日志服务的配置文件 server : /etc/sysconfig/syslog client : /etc/syslog.conf /etc/syslog.conf 的格式 AAAA.BBBB CCCC 其中AAAA代表产生日志的对象,BBBB代表产生的日志级别,CCCC代表日志的存放位置 系统定义了很多对象 authpriv 与安全验证有关的信息 cron 包含at cron定时任务产生的日志 daemon 后台进程的信息 kern 内核产生的信息 lpr 打印系统产生的信息 mail mail系统产生的信息 news 新闻系统产生的信息 syslog 日志服务本身产生的信息 user 一般用户产生的信息 uucp UUCP子系统产生的信息 localN 保留给其他应用程序使用的 N = 0-7 共8个 日志级别 debug 除错信息,开发人员使用 info 正常信息 notice 稍微需要注意的信息 warn 警告信息 err 错误信息 crit (critical) 危急的错误信息 alert 特别留意的报警信息 emerg (emergency) 紧急的错误信息 级别的写法 err 代表等于或高于; err相当于 err+crit+alert+emerg =err 代表恰好等于; =err相当于 只有 err 本身 !err 代表取反; !err相当于 debug+info+notice+warn+crit+alert+emerg 存储位置的写法 /var/log/messages 直接存储在文件中 username 发送给登录的用户 @[hostname | IP] 发送给某台主机 对象和级别都可以用*来代表所有 *.* 所有对象的所有等级 存储日志的格式 date time hostname app(name)[pid]:messages 集中管理日志 服务器端配置 /etc/sysconfig/syslog # Options to syslogd # -m 0 disables 'MARK' messages. # -r enables logging from remote machines # -x disables DNS lookups on messages recieved with -r # See syslogd(8) for more details SYSLOGD_OPTIONS="-m 0 -r -x" 客户端配置 /etc/syslog.conf *.* @10.10.10.254 既保存到本地又保存到服务器上 *.* /var/log/messages *.* @10.10.10.254 定时任务 如果你希望服务器每天夜里去把某个目录备份,当然你不能每天夜里爬起来登录服务器上去操作 更多时候系统管理员都在使用计划任务,计划任务在linux里提供两种,一种at,一种cron 定时服务AT at队列 用来存储尚未执行的任务,一旦执行了就从队列中将任务删除 队列的保存位置/var/spool/at/ at服务 用来检测和执行任务,每间隔1一分钟就会检查队列中是否有到时的任务. at工具 用来添加,查看,删除定时任务的工具 at服务的启动和停止 service atd restart at 参数 -l 查看任务列队 -d 删除任务 建立任务 [root@gw ~]# date 2009年 05月 29日 星期五 18:23:36 CST [root@gw ~]# at 23:30 at> mkdir /root/2330_dir at> <EOT> job 1 at 2009-05-29 23:30 [root@gw ~]# at 23:40 at> touch /root/2330_dir/2340_file at> <EOT> job 2 at 2009-05-29 23:40 [root@gw ~]# 查看任务 jobID datetime class owner a:at的任务 b:batch的任务 batch: when the load average drops below 0.8 [root@gw ~]# batch 23:50 at> rm -rf /root/2330_dir/2340_fil at> <EOT> job 4 at 2009-05-29 23:50 [root@gw ~]# at -l 1 2009-05-29 23:30 a root 2 2009-05-29 23:40 a root 4 2009-05-29 23:50 b root [root@gw ~]# cd /var/spool/at/ [root@gw at]# ls a00001013c4442 a00002013c444c b00004013c4456 spool [root@gw at]# 查看任务内容 [root@gw at]# at -c 4 rm -rf /root/2330_dir/2340_fil at的控制方法: /etc/at.allow /etc/at.deny 1.如果at.allow存在,则只有设定在文件里的使用者才能使用at 2.如果at.deny存在,则除了文件里的使用者都可以使用at 3.如果两个文件都存在,则遵循只有at.allow的情况. 4.如果两个文件都不存在,则只有root可以使用at atrun 当某些因素导致at任务没执行时,可以手动执行 atrun 计划任务cron at任务之能执行一次,若希望每周执行任务则at无法满足,此时应该使用cron cron胜任周期性任务 cron的启动关闭 service crond restart cron格式 min hour day mon week commands min: 分 00-59 hour: 时 00-23 day: 日 1-31 mon: 月 1-12 week: 周 0-7 0和7都是周日 command:要执行的任务 使用方法 1,单一时间 00 11 * * * cmd 2,多个时间 00 9,18,22 * * * cmd 3,连续时间 00 9-18 * * * cmd 9-18点 4,所有时间 * * * * * cmd 5,间隔时间 */5 * * * * cmd 每5分钟 添加计划任务 crontab -e 添加 crontab -l 查看 crontab -r 删除 crontab -u username 查看某个用户的计划任务 cron的使用控制 /etc/cron.allow /etc/cron.deny 1.如果cron.allow存在,则只有设定在文件里的使用者才能使用cron 2.如果cron.deny存在,则除了文件里的使用者都可以使用cron 3.如果两个文件都存在,则遵循只有cron.allow的情况. 4.如果两个文件都不存在,则只有root可以使用cron 系统自带的计划任务 # cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly 其中 root 是 user栏位,指明由哪个用户来执行 run_parts 后面必须接目录 会执行目录中每一个执行文件 按文件名的顺序 linux网络 网络接口名称 以太 标识 ethN 光纤 标识 fddiN PPP 标识 pppN 环回 标识 lo 在IPC进程间通信及没有网络时使用 网卡的状态 mii-tool 查看网卡的信息 ifconfig [ -a | interface ] 不带-a则只查看已经启动的网卡,-a 则所有网卡 [root@gw cron.daily]# ifconfig eth0 Link encap:Ethernet HWaddr 00:0C:29:BF:AC:86 inet addr:10.10.10.254 Bcast:10.10.10.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2332 errors:0 dropped:0 overruns:0 frame:0 TX packets:1851 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:201708 (196.9 KiB) TX bytes:233403 (227.9 KiB) Interrupt:177 Base address:0x1400 Link encap: 网卡位于OSI模型中的名称 HWaddr : 网卡的物理地址 inet addr:Bcast:Mask: 配置的IP 广播 掩码 MTU:Metric:最大传输单元 和 默认的路由成本(跳数) RX 接收 TX 发送 collisions:碰撞次数 txqueuelen:发送队列的长度 Frame Errors: An incorrect CRC and a non-integer number of bytes are received. This is usually the result of collisions or a bad Ethernet device. 错误的CRC效验数据,或一个非整数的字节数,这个错误通常是CSMA/CD碰撞或设备损坏引起 FIFO and Overrun Errors: The number of times that the NIC was unable of handing data to its memory buffers because the data rate the capabilities of the hardware. This is usually a sign of excessive traffic. 网卡的buffer溢出,通常是出了网卡的负荷传输数据引起的错误. Carrier Errors: Errors are caused by the NIC card losing its link connection to the hub or switch. Check for faulty cabling or faulty interfaces on the NIC and networking equipment 物理连接错误,一般是网卡接口或与连接线,或者连接的交换机的错误 网卡的启用与停用 # ifconfig eth0 down # ifconfig eth0 up service network restart 网卡的配置文件 /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-eth1 [root@gw ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 # Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] DEVICE=eth0 BOOTPROTO=none ONBOOT=yes HWADDR=00:0c:29:bf:ac:86 IPADDR=10.10.10.254 NETMASK=255.255.255.0 TYPE=Ethernet [root@gw ~]# vim /usr/share/doc/initscripts-8.45.25/sysconfig.txt 配置网络的GUI工具 system-config-network IP别名 原则上,一个网卡一个IP,但有时候只有一个网卡时又要使用个IP. 此时可以使用IP别名的方法,将一个网卡绑定多个IP ifconfig eth0:1 IP/mask 主机名: # hostname 修改主机名 /etc/sysconfig/network /etc/hosts hostname host_name DNS的客户端的设置 [root@gw ~]# cat /etc/resolv.conf search uplooking.com # 当解析一个主机名时,自动在此域中搜索主机 nameserver 127.0.0.1 # 解析域名的服务器DNS地址 可以三个 [root@gw ~]# /etc/hosts 10.10.10.10 gw.uplooking.com 解析主机的简易DNS文件 解析的顺序 顺序由 /etc/nsswitch.conf 中定义 hosts: files dns linux路由 路由是TCP/IP网络中用来定义到达某一个网络的路径. 存储路由的信息的表叫路由表,linux的路由表是由kernel维护的.内核维护的路由表在内存中 service network restart 会自动更新路由表 设置默认网关的有效值 都包含GATEWAY哪个默认网关值最高 /etc/sysconfig/network /etc/sysconfig/network-scripts/ifcfg-eth0 加载顺序 network --> ifcfg-eth0 --> ifcfg-eth1 最后加载的网卡则是默认网关 [root@gw ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 10.10.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1 0.0.0.0 10.10.10.254 0.0.0.0 UG 0 0 0 eth0 [root@gw ~]# Destination 路由的目的地 Gateway 该路由的网关位置 Genmask 目的地址的掩码 Flags 标记 Metric 路由成本 Ref 到达目的网络的其他路由参考数,非内核提供的路由 Use 环回时使用的这条路由次数 Iface 到达目的网络要从哪个网卡出发 更改路由表 route {add | del} {-net | -host} target [ netmask NETMASK ] [gw GATEWAY] [root@gw ~]# route add -net 202.106.10.0/24 gw 10.10.10.1 [root@gw ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 202.106.10.0 10.10.10.1 255.255.255.0 UG 0 0 0 eth0 [root@gw ~]# route del -net 202.106.10.0/24 gw 10.10.10.1 更改默认网关 route add default gw 10.10.10.10 三次握手和四次握手 客户端状态 服务器端状态 LISTEN (被动打开) 主动打开 SYN_SENT ---syn j---------> SYN_RCVD ESTABLISHED <--syn k +ack j+1- ---ack k+1 -----> ESTABLISHED 主动关闭 FIN_WAIT_1 ---fin m---------> CLOSE_WAIT(被动关闭) FIN_WAIT_2 <--ack m+1-------- TIME_WAIT <--fin n---------- LAST_ACK ---ack n+1-------> CLOSED 也就是TCP/IP设计者本来是这么设计的 主要有两个原因 1。防止上一次连接中的包,迷路后重新出现,影响新连接 (经过2MSL(最大分段周期),上一次连接中所有的重复包都会消失) 2。可靠的关闭TCP连接 在主动关闭方发送的最后一个 ack(fin) ,有可能丢失,这时被动方会重新发 fin, 如果这时主动方处于 CLOSED 状态 ,就会响应 rst 而不是 ack。所以 主动方要处于 TIME_WAIT 状态,而不能是 CLOSED 。 TIME_WAIT 并不会占用很大资源的,除非受到攻击。 还有,如果一方 send 或 recv 超时,就会直接进入 CLOSED 状态 CLOSED: 这个没什么好说的了,表示初始状态。 LISTEN: 这个也是非常容易理解的一个状态,表示服务器端的某个SOCKET处于监听状态,可以接受连接了。 SYN_RCVD: 这个状态表示接受到了SYN报文,在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用netstat你是很难看到这种状态的,除非你特意写了一个客户端测试程序,故意将三次TCP握手过程中最后一个ACK报文不予发送。因此这种状态时,当收到客户端的ACK报文后,它会进入到ESTABLISHED状态。 SYN_SENT: 这个状态与SYN_RCVD遥想呼应,当客户端SOCKET执行CONNECT连接时,它首先发送SYN报文,因此也随即它会进入到了SYN_SENT状态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT状态表示客户端已发送SYN报文。 ESTABLISHED:这个容易理解了,表示连接已经建立了。 FIN_WAIT_1: 这个状态要好好解释一下,其实FIN_WAIT_1和FIN_WAIT_2状态的真正含义都是表示等待对方的FIN报文。而这两种状态的区别是:FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET即进入到FIN_WAIT_1状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2状态,当然在实际的正常情况下,无论对方何种情况下,都应该马上回应ACK报文,所以FIN_WAIT_1状态一般是比较难见到的,而FIN_WAIT_2状态还有时常常可以用netstat看到。 FIN_WAIT_2:上面已经详细解释了这种状态,实际上FIN_WAIT_2状态下的SOCKET,表示半连接,也即有一方要求close连接,但另外还告诉对方,我暂时还有点数据需要传送给你,稍后再关闭连接。 TIME_WAIT: 表示收到了对方的FIN报文,并发送出了ACK报文,就等2MSL后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。 CLOSING: 这种状态比较特殊,实际情况中应该是很少见,属于一种比较罕见的例外状态。正常情况下,当你发送FIN报文后,按理来说是应该先收到(或同时收到)对方的ACK报文,再收到对方的FIN报文。但是CLOSING状态表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什么情况下会出现此种情况呢?其实细想一下,也不难得出结论:那就是如果双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报文的情况,也即会出现CLOSING状态,表示双方都正在关闭SOCKET连接。 CLOSE_WAIT: 这种状态的含义其实是表示在等待关闭。怎么理解呢?当对方close一个SOCKET后发送FIN报文给自己,你系统毫无疑问地会回应一个ACK报文给对方,此时则进入到CLOSE_WAIT状态。接下来呢,实际上你真正需要考虑的事情是察看你是否还有数据发送给对方,如果没有的话,那么你也就可以close这个SOCKET,发送FIN报文给对方,也即关闭连接。所以你在CLOSE_WAIT状态下,需要完成的事情是等待你去关闭连接。 LAST_ACK: 这个状态还是比较容易好理解的,它是被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。当收到ACK报文后,也即可以进入到CLOSED可用状态了。 tcpdump -i eth0 -p arp icmp tcp udp [ src | det ]port 80 -nn 以数字方式显示IP和端口(不做解析) 使用tcpdump抓包 查看三次握手 四次握手过程 # tcpdump -i eth0 -p tcp port 80 -nn -t IP 125.34.40.173.2096 > 118.102.27.18.80: S 3684006233:3684006233(0) win 65535 <mss 1452,nop,wscale 2,nop,nop,timestamp 0 0,nop,nop,sackOK> IP 118.102.27.18.80 > 125.34.40.173.2096: S 2985962741:2985962741(0) ack 3684006234 win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 7> IP 125.34.40.173.2096 > 118.102.27.18.80: . ack 1 win 64240 IP 118.102.27.18.80 > 125.34.40.173.2096: F 1:1(0) ack 1 win 46 IP 125.34.40.173.2096 > 118.102.27.18.80: . ack 2 win 64240 IP 125.34.40.173.2096 > 118.102.27.18.80: F 1:1(0) ack 2 win 64240 IP 118.102.27.18.80 > 125.34.40.173.2096: . ack 2 win 46 |
相关文章推荐
- Linux技术研究-基础篇(特殊权限和高级命令)
- Linux技术研究-基础篇(linux常用指令和权限管理)
- Linux技术研究-基础篇(内核,模块)
- Linux运维 第二阶段 (十三)计划任务及日志管理
- linux下的日志功能和计划任务-sa2
- Linux技术研究-基础篇(内核,模块)
- Linux任务计划命令和日志讲解视频-羽飞作品
- linux计划任务,系统日志,故障处理
- Linux的归档及压缩,Linux的cron时间计划任务, NTP网络时间协议 , 查看网络连接
- linux下的周期性任务(任务计划)-阅linux系统管理技术整理
- Linux 计划任务 Crontab 笔记与总结(4)crontab 的日志
- 详述Linux计划任务的 at和crontab的命令 以及如何查看crontab日志
- Linux技术研究-基础篇(raid与LVM,配额)
- Linux技术研究-基础篇(启动和自动挂载)
- Linux技术研究-基础篇(特殊权限和高级命令)
- Linux下使用crontab来执行定时任务计划----执行每晚12点多执行移动log日志文件操作
- Linux计划任务
- linux下使用crontab实现定时PHP计划任务失败的原因分析
- linux 下计划任务的实现
- 【转】PHP计划任务:如何使用Linux的Crontab执行PHP脚本