1、简述TCP三次握手四次挥手过程及各过程中客户端和服务器端的状态。


三次握手:
    客户端发送通信请求;并进入SYN_SENT状态,等待服务器确认
    服务端响应客户端请求,进入SYN_RECV状态,并请求客户进行确认通信请求;
    客户端确认请求通信;完成tcp三次握手
    此时一个通信的虚链路已经建立,客户端和服务端处于ESTABLISHED(正常数据传输状态 )

四次断开:一般谁发送请求谁负责断开
    1.客户端发送断开请求并进人FIN_WAIT1(分手等待阶段1);
    2.服务端确认断开请求,此时客户端在接收到请求时转而进入FIN_WAIT2(分手等待阶段2);
    3.服务端释放三次握手阶段客户端用于与服务端进行通信的相关套接字;此时客户端进入CLOSE_WAIT状态
    4.客户段再次确认断开,此时客户端进入CLOSED状态,服务端再次进入 LISTEN(监听状态);

2、说说进程和线程的区别
进程是并发执行的程序在执行过程中分配和管理的基本单位,而线程是由进程产生,故其属于进程的一部分,一个进程可以有多个线程,但在linux中常常不严格区分进程和线程

3、查询file.txt以abc结尾的行
    # grep 'abc$'  file.txt]


4、删除file.txt文件中的空行
# sed '/^$/d'  file.txt


5、打印file.txt文件中的第10行
    # head -10 /file.txt|tail -1


6.、对MySQL数据库test进行备份和恢复
    备份:mysqldump -uroot --databases  test > test.sql
  恢复:# mysql < test.sql


7.用netstat统计系统当前tcp连接的各种状态的连接数。
# netstat -tan | awk '/^tcp\>/{state[$NF]++}END{for(i in state) { print i,state[i]}}'

8.linux下如何将GBK编码格式的test_gbk.txt文件转换成UTF-8编码格式,转化后的文件名为 test_utf8.txt
 #iconv -f GBK -t UTF-8 test_gbk.txt -o test_tf8.txt

9、说说你用过哪些监控软件,并简述其原理及适用场景

zabbix
    agent方式监控:在被监控端安装agent程序,通过zabbix自己的协议主动或被动的发送数据给server端或代理的proxy端使用与服务器,工作站的监控;不使用于交换机、路由器、防火墙的监控
    SNMP方式监控:通过SNMP协议进行监控,需要开启并配置snmp服务;使用与网络设备(路由器交换机等),通信的协议是udp,安全性无发保证,

10、写出查看linux系统性能的命令,如cpu、内存、流量、io等
#top

#free -h

#iftop

#lsof

11.说说nginx的upstream支持的分配策略,并简述其原理

第一种,轮询rr(默认)
    每个请求按时间顺序逐一分配到不同的后端服务器 ,如果后端服务器down掉,能自动剔除。
第二种加权轮询wrr
    根据各主机的负载能力,计算调度至哪台主机    
第三种,ip_hash
    每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
第四种url_hash(第三方)
    按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

12.crontab定时:在11月份内,每天的早上6点到12点中,每隔2小时执行一次/usr/bin/httpd.sh  怎么实现
# crontab -e
    0 6-12/2 * 11 *  /usr/bin/httpd.sh

13.iptables禁止 ip 10.10.10.1 访问本地80端口
# iptables -I INPUT -s 10.10.10.1 -d 172.18.12.20 -p tcp --dport 80 -j DROP

14. 找出在文件a中但不在文件b中的内容,用命令后编写脚本实现
#!/bin/bash
    #seach for different from two file
    #author dy
    #date 2016.06.07
    diff -a $1 $2 > /root/diff.txt
    grep  '^>.*' /root/diff.txt

15.编写shell循环创建100个用户,用户名格式user_[0~99]
# cat useradd.sh
    #!/bin/bash
    #add user
    for (( i=0; i<=99; i++));do
         useradd user_[$i]
    done