第1题:如何将本地80端口的请求转发到8080端口,当前主机IP为192.168.1.80
[root@linux ~] iptables -t nat -A PREROUTING -d 192.168.2.1 -p tcp --dport 80 -j DNAT --to 192.168.16.1:8080
或
[root@linux ~] iptables -t nat -A PREROUTING -i eth0 -d 192.168.1.80 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -A PRETOUTING -d 10.0.0.254 -p tcp –dprot 80 -j DNAT –to-destination 10.0.0.254:8080
第2题:如何过滤出已知当前目录下new中的所有一级目录(不包含子目录,即只能是一级目录)
方法1:find ./ -type d -maxdepth 1
方法2:ls -F
方法3:ls -l | grep ^d
方法4:ls -F | grep /$
方法5:ls -l | grep -v ^-
方法6:tree -L 1 /
方法7:根据颜色来区分文件和目录
方法8:ls -l | sed -n /^d/p
第14题:一个目录中有很多文件(ls查看时好多屏),想最快速度查看到最近更新的文件,如何看?
ls -lrt /etc #最底部的就是最新更新的文件
参数说明:-r, –reverse #翻转排序 -t #按照修改时间排序
第15题:已知apache服务的访问日志按天记录在服务器本地目录/app/logs下,由于磁盘空间紧张,现在要求只能保留最近7天访问日志!请问如何解决?
提示:可以从apache服务配置上着手,也可以从生成出来的日志上着手
1>.服务自身的功能实现
2>.手动删除
find ./ -mtime +7 -type f -name "*.log" -exec rm -f {} \; #查找7天以前的日志并删除之
第17题:如何迅速返回到上一次的目录?
cd – #环境变量OLDPWD始终记录着上一次的位置
第18题:调试系统服务时,希望能实时查看系统日志/var/log/messages的更新,如何做?
方法1:tail -f /var/log/messages
方法2:tail -F /var/log/messages #和-f比多个重试的功能,就是文件不存在了,会不断尝试
第19题:安装完系统(CentOS/RHEL)后,希望让网络文件共享服务NFS,仅在3级别上开机自启该如何做?
chkconfig –level 3 nfs off
第19题:etc/inittab 过滤出最后一行并显示行号
cat -n /etc/inittab | tail -1
grep -n $ /etc/inittab| tail -1
策略路由–>静态路由–>动态路透–>缺省路由(默认路由)
第123题:如何查看二进制文件的内容
hexdump -C FILENAME
第124题:ps aux 中的VSZ和RSS含义
VSZ:虚拟内存集,进程占用的虚拟内存空间
RSS:物理内存集,进程战用实际物理内存空间
第126题:符号链接与硬链接的区别
1.链接原文件/链接文件inode号及data block相同,软链接原文件/链接文件inode号及 data block不同
2.修改软硬链接的源文件或者链接文件会使得有相同inode号的文件一起改变
3.硬链接不能对目录进行创建,只能对已存在的文件进行创建;软链接可以对已存在的和不存在的文件或目录创建软链接
4.硬链接文件大小跟原文件一样。软链接文件大小与原文件不同, 软链接文件较小
5.硬链接不能跨文件系统建立链接, 软链接没有任何文件系统的限制
6.硬链接会增加INODE计数,创建软链接时,链接数不会增加
7.软连接删除源文件 则连接文件不能使用,软链接删除链接文件 不影响源文件
8.软链接有自己的文件属性及权限等
9.硬链接删除源文件或者链接文件 不影响有相同inode号的文件
第111题:当你在浏览器输入一个网址,如http://www.didichuxing.com,按回车之后发生了什么?请从技术的角度描述,如浏览器、网络(UDP、TCP、HTTP等),以及服务器等各种参与对象上由此引发的一系列活动,请尽可能的涉及到所有的关键技术点。
参考答案:
1) DNS域名解析:浏览器缓存、系统缓存、路由器、ISP的DNS服务器、根域名服务器。把域名转化成IP地址。 2)与IP地址对应的服务器建立TCP连接,经历三次握手:SYN,ACK、SYN,ACK 3)以get,post方式发送HTTP请求,get方式发送主机,用户代理,connection属性,cookie等 4)获得服务器的响应,显示页面
第113题:在浏览器输入www.didichuxing.com域名,其DNS查询过程是怎样的?请简述DNS查找过程。
参考答案:
1、在浏览器中输入www.didichuxing.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
2、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
3、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/ip参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
4、如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
5、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www.qq.com主机。
6、如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。
第149题:当用户在浏览器当中输入一个网站,说说计算机对dns解释经过那些流程?注:本机跟本地dns还没有缓存。
a.用户输入网址到浏览器;
b.浏览器发出DNS请求信息;
c.计算机首先查询本机HOST文件,看是否存在,存在直接返回结果,不存在,继续下一步;
d.计算机按照本地DNS的顺序,向合法dns服务器查询IP结果;
e.合法dns返回dns结果给本地dns,本地dns并缓存本结果,直到TTL过期,才再次查询此结果;
f.返回IP结果给浏览器;
g.浏览器根据IP信息,获取页面;
第110题:请阐述traceroute的工作原理?
参考答案:
trcertroute建立一个UDP数据包,不断修改TTL值并发送出去,如果收到"超时错",表示刚刚到达的是路由器,而如果收到的是"端口不可达"错误,表示刚刚到达的就是目的主机。这样路由跟踪完成,程序结束。
第154题:apache有几种工作模式,分别介绍下其特点,并说明什么情况下采用不同的工作模式?
工作模式:
prefork,worker,event (在configure配置编译参数时,可使用 --with-mpm=prefork|worker|event 来指定一种MPM)
1.这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销
2.可以防止意外的内存泄漏
3.在服务器负载下降的时候会自动减少子进程数
worker的特点是:支持混合的多线程多进程的多路处理模块
Apache httpd 能更好的为有特殊要求的站点定制。例如,要求 更高伸缩性的站点可以选择使用线程的 MPM,即 worker 或 event; 需要可靠性或者与旧软件兼容的站点可以使用 prefork。
HDLC,VTP,OSPF,RIP,DDOS,system,GNU,netscreen,ssh,smartd,apache,WAIT_TIME 什么含义。
HDLC:高级链路控制;VTP:vlan 传输协议;OSPF:开放最短路径优先;RIP:路由信息协议;DDOS:分布式拒绝服务攻击;system V:UNIX版本V;GNU:非UNIX,开放源码软件工程;netscreen:国际著名防火墙厂家之一,04年后被juniper收购,变为其防火墙的一个系列;ssh:安全外壳,防止中间人攻击的一种连接方式;smartd:硬盘检测工具s.m.a.r.t的进程;Apache:web服务器软件;WAIT_TIME:netstat命令显示的参数,客户端正在等待。
第145题:说出你知道的几种linux/unix发行版本。
Redhat、CentOS、Fedora、SuSE、Slackware、Gentoo、Debian、Ubuntu、FreeBSD、Solaris、SCO、AIX、HP…
第146题:列出linux常见打包工具并写相应解压缩参数(至少三种)
打包工具:Tar gz bz
Tar -xvzf gzip -d bzip2 -d
第147题:计划每星期天早8点服务器定时重启,如何实现?
Crontab -e
0 8 * * 7 /sbin/reboot
第148题:列出作为完整邮件系统的软件,至少二类。
Sendmail,postfix,qmail
第157题:在命令行下发一邮件,发件人:123@abc.com, 收信人:abc@xyz.com
[root@localhost ~]# echo "hello"|mail -s "test" abc@xyz.com -- -f 123@aaa.com
第159题:linux下如何添加路由
Route add -net 10.1.1.0/24 eth1
第160题:简述linux下编译内核的意义与步骤
编译内核的意义在于让系统更稳定,性能更好
第158题:linux下如何改IP,主机名,DNS
第162题:简述DDOS攻击的原理
第71题: 说明系统/etc/inittab中各个启动级别的含意
第164题:简述VPN,常见有哪几种?
VPN是指在公共的网络上建立专用网络的技术,但是两个节点间并没有物理上的专用的端到端链路,而是通过广域网或者运营商提供的网络平台之上的逻辑网络,用户数据在逻辑链路中传输,它可以有效的节省一般需要达到DDN专线所能达到的同样的目的,而且VPN采用身份验证和加密技术,充分保证了安全性。常见的VPN有:ipsec vpn、PPTP vpn、L2TP vpn、SSL vpn
第133题:显示/etc/inittab中以#开头,且后面跟了一个或者多个空白字符,而后又跟了任意非空白字符的行
grep "^# \{1,\}[^ ]" /etc/inittab
第134题:显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行
grep "\:[0-9]\{1\}\:" /etc/inittab
第128题:手动安装grub
grub–install /dev/sda
第108题:列举一个实际生产的例子,网站访问速度慢是因为数据库访问慢导致的
问题情况描述:
突然有一天,有同事反应,网站访问速度很慢,有时候会出现打不开网站的情况,刷新等待好长时间后又正常打开。
解决步骤:
登陆数据库执行show full processlist 看到有很多相同的查询动作且征对同一张表,因此确定网站打不开的原因是这个,故将此IP禁止访问。日常工作中避免此类问题发生解决方法如下:可以将数据库读写分离;安装数据缓存服务器,尽量将大部分的请求不直接对接数据库。
第109题:一个shell 脚本手工可以执行,放入定时任务后不能执行,可能的原因?
手工可以执行,表明脚本本身不存在逻辑上的问题,可能原因有以下几点
1)定时任务书写有错误导致,执行的脚本没有写绝对路径,找不到脚本
2)环境变量问题导致。
第59题:linux系统nginx与Php环境,发现PHP-FPM进程高,请说出可能的原因以及如何解决?
1)php的插件程序与现有的PHP版本存在不兼容情况,解决方法从php.ini中禁止相关插件
2)软件本身存在问题,需要开发协同运维一同处理,查找原因
3)php程序存在死循环现象,使用服务器负载过高,解决方法使用top命令查看
第60题:磁盘报错:nospace left on device,但是df-h查看空间没有满,为什么?
原因:系统inode满了,因为所有的文件的文件名信息都是存放在inode里面的,文件内容是存放在block里面
可以使用df -i 来查看inode的使用情况
[root@mysql-1 download]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda2 1234576 138303 1096273 12% /
tmpfs 60785 1 60784 1% /dev/shm
/dev/sda1 51200 38 51162 1% /boot
第61题:磁盘空间满了,删除一部分nginx日志后,但是磁盘空间还是满的,为什么?
删除的日志信息,一部分可能还是被进程调用,因此,需要重启nginx服务来释放进程;或者实际生产环境中使用>/log/access.log清空文件
第64题:公司机房的服务器接近254台了,请你设计一个解决方案,如何划分网段,并实现业务平滑迁移。
第一种方案:变长子网掩码的方法,加大IP地址的可使用范围,全网分发/etc/hosts文件
第二种方案:增加核心交换机,在核心交换机划分VLAN,将新增的服务器加入新的VLAN中,全网分发/etc/hosts文件
第55题:TCP段头最小长度是多少字节?
64字节
第56题:让某普通用户能进行cp /dir1/file1 /dir2的命令时,请说明dir1 file1最小具有什么权限?
读取和执行权限rx
第58题: /var/log/messages日志出现kernel:nf_conntrack:tablefull,dropping packet,请问是什么原因导致的,如何解决?
此报错为iptables报错信息,连接跟踪表已满,开始丢包,可能的原因是由于频繁的连接、关闭,或者网络的一些TCP的连接导致的
解决方法:
1)加大跟踪表的大小
2)禁用一些不必跟踪的连接状态
3)禁用模块 ip_vs nf_conntect
第66题:说出netstat -an命令结果中最后一列status对应的不同网络连接状态含义
listen 服务启动后首先处于的状态(监听状态)
established 建立连接,表示建立连接的两端可以正常通信了
close_wait 对方主动关闭连接或网络异常而中断,因此状态会变成
time_wait 主动断开连接,收到对方确认后的状态,相当于释放资源,可以设置些种状态的参数,也就是主动断开后,下一次再连接的时间间隔
syn_sent 请求连接的状态,需要访问其它机器时首先发出的同步信号
第77题:请详细说明keepalived的故障切换工作原理
这种故障切换是通过VRRP协议来实现的,主节点会按一定的时间间隔发送心跳信息的广播包,告诉备节点自己的存活状态信息,当主节点发生故障时,备节点在一段时间内就收到广播包,从而判断主节点出现故障,因此会调用自身的接管程序来接管主节点的IP资源及服务,当主节点恢复时,备节点会主动释放资源,恢复到接管前的状态,从而来实现主备故障切换。
第142题:什么是NAT,常见分为那几种,DNAT与SNAT有什么不同,应用事例有那些?
SNAT,DNAT,MASQUERADE都是NAT。
MASQUERADE是SNAT的一个特例。
SNAT是指在数据包从网卡发送出去的时候,把数据包中的源地址部分替换为指定的IP,这样,接收方就认为数据包的来源是被替换的那个IP的主机。
MASQUERADE是用发送数据的网卡上的IP来替换源IP,因此,对于那些IP不固定的场合,比如拨号网络或者通过dhcp分配IP的情况下,就得用MASQUERADE。
DNAT,就是指数据包从网卡发送出去的时候,修改数据包中的目的IP,表现为如果你想访问A,可是因为网关做了DNAT,把所有访问A的数据包的目的IP全部修改为B,那么,你实际上访问的是B
因为,路由是按照目的地址来选择的,因此,DNAT是在PREROUTING链上来进行的,而SNAT是在数据包发送出去的时候才进行,因此是在POSTROUTING链上进行的。
第143题:包过滤防火墙与代理应用防火墙有什么区别,能列举几种相应的产品吗?
包过滤防火墙是根据包头进行的过滤,并且是处于网络层的,根据包的源ip地址,目标ip地址,协议类型,端口号,进行过滤;代理应用防火墙工作在应用层,他使用代理服务器技术,将内网对外网的访问,变为防火墙对外网的访问,可以对包的内容进行分辨,从而过滤。
第115题:常见的服务器模型有哪些?你使用过哪些?怎样使用的?
参考答案:同步阻塞式,多进程,多线程,select+多线程,epoll+多线程, epoll+线程池
第78题:写出一个curl命令,访问指定服务器61.135.169.121上的如下URL:http://www.baidu.com/s?wd=test,访问的超时时间是20秒:
curl –connect-timeout 20 http://61.135.169.121/s?wd=test
第79题:用netstat命令配合其他shell命令,按照源IP统计所有到80端口的ESTABLISHED状态链接的个数,输出结果类似(第一列为连接数,第二列为IP):
[root@~]# netstat -an|grep ESTABLISHED
tcp 0 52 139.224.199.85:22 101.47.33.86:51763 ESTABLISHED
tcp 0 0 139.224.199.85:45368 106.11.68.13:80 ESTABLISHED
[root@ ~]# netstat -an|grep ESTABLISHED|grep ":80"
tcp 0 0 139.224.199.85:45368 106.11.68.13:80 ESTABLISHED
[root@ ~]# netstat -an|grep ESTABLISHED|grep ":80″|awk 'BEGIN{FS="[[:space:]:]+"}{print $4}'
139.224.199.85
说明:FS 是字段分隔符
如果需要进行整理并排序的话,完整命令如下
[root@ ~]# netstat -an|grep ESTABLISHED|grep ":80″|awk 'BEGIN{FS="[[:space:]:]+"}{print $4}'|sort|uniq -c|sort -nr
memcache清除缓存两种方法
memcache默认监听11221端口,清空服务器上memecache的缓存,一般使用如下
telnet localhost 11211
flush_all
同样也可以使用:
echo "flush_all" | nc localhost 11211
使用flush_all 后并不是删除memcache上的key,而是置为过期
如何让history命令显示具体时间?
HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S"
export HISTTIMEFORMAT
重新开机后会还原,可以写/etc/profile
MaxKeepAliveRequests表示一次连接可以进行的HTTP请求的最大请求次数。
第116题:linux如何挂在windows下的共享目录
mount.cifs //192.168.1.3/server /mnt/server –o user=administrator,pass=123456
linux 下的server需要自己手动建一个 后面的user与pass 是windows主机的账号和密码 注意空格 和逗号
第117题:查看http的并发请求数与其TCP连接状态
netstat –n | awk '/^tcp/ {++b[$NF]} END {for(a in b) print a, b[a]}'
ulimit -n 查看linux系统打开最大的文件描述符,默认1024,不修改这里web服务器修改再大也没用。修改/etc/security/limits.conf 重启后生效
* soft nofile 10240
* hard nofile 10240
第119题:如何查看/var/log目录下的文件数?
ls /var/log/ -lR| grep "^-" |wc -l
find /var/log -type f | wc -l
第94题:strings命令有什么作用?
strings命令用来提取和显示非文本文件中的文本字符串。(LCTT 译注:当用来分析你系统上莫名其妙出现的二进制程序时,可以从中找到可疑的文件访问,对于追查入侵有用处)
第84题:patch命令是什么?如何使用?
顾名思义,patch命令就是用来将修改(或补丁)写进文本文件里。patch命令通常是接收diff的输出并把文件的旧版本转换为新版本。举个例子,Linux内核源代码由百万行代码文件构成,所以无论何时,任何代码贡献者贡献出代码,只需发送改动的部分而不是整个源代码,然后接收者用patch命令将改动写进原始的源代码里。
创建一个diff文件给patch使用,
diff -Naur old_file new_file > diff_file
旧文件和新文件要么都是单个的文件要么都是包含文件的目录,-r参数支持目录树递归。
一旦diff文件创建好,我们就能在旧的文件上打上补丁,把它变成新文件:
patch < diff_file
第95题:tee 过滤器有什么作用 ?
tee 过滤器用来向多个目标发送输出内容。如果用于管道的话,它可以将输出复制一份到一个文件,并复制另外一份到屏幕上(或一些其它程序)。
linuxtechi@localhost:~$ ll /etc | nl | tee /tmp/ll.out
在以上例子中,从ll输出可以捕获到 /tmp/ll.out 文件中,并且同样在屏幕上显示了出来。
第88题:哪条命令用来查看bond0的状态?
cat /proc/net/bonding/bond0
第62题:如何查看apache进程数
perfork模式:
ps -ef|grep http|grep -v grep|wc -l
worker模式:
pstree -a|grep httpd|wc -l
第35题:Linux系统中的/proc文件系统有什么用?
答:
/proc文件系统是一个基于内存的文件系统,其维护着关于当前正在运行的内核状态信息,其中包括CPU、内存、分区划分、I/O地址、直接内存访问通道和正在运行的进程。这个文件系统所代表的并不是各种实际存储信息的文件,它们指向的是内存里的信息。/proc文件系统是由系统自动维护的。
第69题:请详细描述MySQL主从复制原理
原理:主库开启binlog功能并授权从库连接主库同步的用户权限 ,将数据库的修改或变化生成bin-log日志,从库通过change mster的语句得到主库的相关信息,从库开启slave并连接主加进行相关验证,验证通过后,主库的IO线程根据从库的请求将相关位置点信息,与最新的blnlog信息发送给从库的IO线程,从库的IO线程将SQL语句的信息放在relay-log中,最后从库的SQL线程将relay-log中的SQL语句应用到从库中,实现主库与从库之间的数据同步,然后不断重新上述动作
第101题:权威DNS和递归DNS含义,智能DNS的实现原理
权威DNS是经上一级授权对域名进行解析的DNS服务器,同时它可以把解析授权转授给其他服务器;
递归DNS负责接受用户对任何域名的查询,并返回结果给用户,它可以缓存结果避免用户再向上查询;
智能DNS就是将对用户发起的查询进行判断出是哪个运营商的用户查询,然后将请求转发给相应的运营商IP处理,减少跨运营访问的时间,提高访问速度。
第151题:一个EXT3的文件分区,当使用touch test.file命令创建一个新文件时报错,报错的信息是提示磁盘已满,但是采用df -h命令查看磁盘大小时,只使用了,60%的磁盘空间,为什么会出现这个情况,说说你的理由。
两种情况,一种是磁盘配额问题,另外一种就是EXT3文件系统的设计不适合很多小文件跟大文件的一种文件格式,出现很多小文件时,容易导致inode 耗尽了。
第82题:如何在linux上重建初始化内存盘镜像文件?
在CentOS 5.X / RHEL 5.X中,可以用mkinitrd命令来创建初始化内存盘文件。
mkinitrd -f -v /boot/initrd-$(uname -r).img $(uname -r)
在CentOS 6.X / RHEL 6.X中,dracut -f能给当前的系统版本创建初始化内存盘,给特定的内核版本重建初始化内存盘文件则使用
dracut -f initramfs-2.x.xx-xx.el6.x86_64.img 2.x.xx-xx.el6.x86_64
第73题:每周一下午三点将/tmp/logs目录下面的后缀为*.log的所有文件rsync同步到备份服务器192.168.1.100中同样的目录下面,crontab配置项该如何写:
00 15 * * 1 rsync -avzP /tmp/logs/*.log root@192.168.1.100:/tmp/logs
第52题:写一个脚本把指定文件里的/usr/local替换为别的目录。
sed 's:/user/local:/tmp:g' filename
第75题:配置mysql服务器的时候,配置了auto_increment=3,请问这里的3意味着什么?
auto_increment每次插入新记录时,自动创建主键字段的值,此处起始值是3
第46题:写一个脚本查找最后创建时间是3天前,后缀是*.log的文件并删除。
find / -name "*.log" -ctime +3 -exec rm -f {} \;
第47题:写一个脚本将某目录下大于100k的文件移动至/tmp下。
for i in `find /test -type f -size +100k`;do cd /test && mv $i /tmp;done
第48题:找到/tmp/目录下面的所有名称以”_s1.jpg”结尾的普通文件,如果其修改日期在一天内,则将其打包到/tmp/back.tar.gz文件中
find /tmp -type f -name ".*_sj.jpg" -mtime 1|xarges tar zxf /tmp/back.tar.gz
第90题:如何在/usr目录下找出大小超过10MB的文件?
find /usr -size +10M
第91题:如何在/home目录下找出120天之前被修改过的文件?
find /home -mtime +120
第92题:如何在/var目录下找出90天之内未被访问过的文件?
find /var \! -atime -90
第93题:在整个目录树下查找文件”core”,如发现则无需提示直接删除它们。
find / -name core -exec rm {} \;
第103题:编写脚本实现将/usr/local/test目录下大于100K文件,将它拷贝到/tmp目录下
#!/bin/bash
for file in `ls /usr/local/test`
do
if [ -f $file ];then
if [ `ls -l $file`|awk '{print $5}' -gt 10000];then
mv $file /tmp/
fi
fi
done
第118题:用tcpdump嗅探80端口的访问看看谁最高
tcpdump –i eth0 –tnn dst port 80 –c 1000 | awk –F"." '{print $1″."$2″."$3″."$4}' | sort | uniq –c | sort –nr |head –5
第50题:写一个脚本进行nginx日志统计,得到访问ip最多的前10个(nginx日志路径:/home/logs/nginx/default/access.log
awk '{a[$1]++}END{for (j in a) print a[j],j}' /home/logs/nginx/default/access.log|sort -nr|head -10
第122题:统计出apache的access.log中访问量最多的5个IP
cat access_log | awk '{print $1}' | sort | uniq –c | sort –n –r | head –5
awk '{print $1}' access.log|uniq -c|sort -rn |head -5
第135题:怎么把脚本添加到系统服务里,即用service来调用
在脚本里加入
!/bin/bash
# chkconfig: 345 85 15
# description: httpd
然后保存 chkconfig httpd –add 创建系统服务 现在就可以使用service 来 start or restart
第105题:如何实现nginx代理的节点访问日志记录的是真实访客的IP,不是代理的IP
配置nginx.conf配置文件增加下同的标记内容;修改完成后,重新加载nginx即可:/application/nginx/sbin/nginx -s reload
server{
listen 80;
server_name blog.text.com;
location / {
proxy_pass http://test_servers;
proxy_set_header Host $host;
proxy_set_headerX-Forwarded-For $remote_addr;
}
第74题:写出如何给apache增加virtualhost,让访问http://www.test.com和http://www.test.cn的时候,都打开/var/www/html目录下面的文件:
ServerAdmin admini@abc.com
DocumentRoot "/var/www/html"
ServerName www.test.com
ServerAlias test.cn
ErrorLog "logs/bbs-error_log"
CustomLog "logs/bbs-access_log" common
第40题:写一个脚本将数据库备份并打包至远程服务器192.168.1.1 /backup目录下。
mount 192.168.1.1:/backup /mnt
cd /mnt
/usr/local/mysql/bin/mysqldump -hlocalhost -uroot test >test.sql
tar czf test.sql.tar.gz test.sql
rm -f test.sql
第49题:写一个防火墙配置脚本,只允许远程主机访问本机的80端口。
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
iptables -X
iptables -A INPUT -i eth0 -p tcp –dport 80 -j ACCEPT
iptables -P INPUT DROP
第106题:MYSQL 一主多从,主库宕机,如何合理切换到从库,其它从库如何处理?
1)登陆所有从库查看post信息,使用POST最大的做为新的主库,然后将从为提升为新的主库,登陆从库(新的主库)执行stop slave,
2)修改my.cnf配置文件,开启log-bin并重新启动数据库服务,登陆数据库执行restet master ,show master status\G;查看主库信息,最后创建授权同步用户与权限和网站使用数据库的用户与权限,同步所有机器的/etc/hosts文件(这时就体现了之前全网用域名则不是用IP的作用了,不然还得修改网站程序切换到新主库服务器IP上,否则无法连接到数据库);
3)登陆其它从库,执行change master操作,查看同步状态。
第107题:误操作drop语句导致数据库数据破坏,请给出恢复的实际大体步骤
所有数据恢复的基础都在于备份,必须要有完整的备份,否则恢复无从谈起,误操作导致的数据库破坏需要使用增量恢复的方法进行恢复数据库,具体步骤如下:
1)查看备份与binlog文件
2)刷新并备份binlog文件
mysqladmin -uroot -pmysql123 -S /data/mysql.sockflush-logs
3)将binlog文件恢复成sql语句
mysqlbinlog –no-defaults mysql-bin.000061 mysql-bin.000062 >bin.sql
4)将其中误操作的语句删除(就是drop的动作)
5)解压全备文件,恢复全备文件
gzip -d mysql_backup_2016-10-12.sql.gz
mysql -uroot -pmysql123 -S/data/3306/mysql.sock < mysql_backup_2016-10-12.sql
如果有对表的操作,恢复数据时需要接表名
6)恢复误操作前的binlog文件记录的sql语句
mysql -uroot -pmysql123 -S/data/3306/mysql.sock < bin.sql
最后登陆数据库,查看数据是否恢复成功,如果有确定的误操作时间,就直接恢复这段时间的数据即可。
第67题:binlog是什么?binlog记录的是什么?有几种模式及优缺点,企业中选择哪种模式做同步?
binlog:是用于记录所有更新了数据的操作语句,语句以事件的形式保存,它描述数据的更改过程
作用:用于实时备份数据,数据库的主从复制
log_bin 打开记录binlog功能
binlog的查看
mysqlbinlog /home/mysql/binlog/binlog.000003
binlog的删除:可分为自动与手动删除
自动删除
能过binlog参数expire_logs_days来实现
show binary logs;
show variables like "expire_logs_days;"
set gloable expire_logs_days=3;
手工删除
reset master 删除主的binlog
reset slave 删除从的中继日志
三种模式:
Row level模式 :日志会记录每一行数据被修改的形式,然后在从端对相同的数据进行修改
优点:可以不记录执行SQL语句上下文相关的信息,只记录哪一条数据被修改,修改成什么样了
缺点:所有执行的语句都当记录到日志文件中,而且都会以每行记录的修改来记录,会产生大量的日志内容
statement模式:每一条修改数据的SQL都会记录master的bin-log中,slave在复制的时候SQL进程会解析成和原来master端执行过的相同的SQL来执行
优点:解决了上row level模式的缺点,不需要记录每一行数据的变化,减少日志量,可以得高性能
缺点:由于记录的是执行语句,在此模式下会有主从无法复制的问题出现
mixed自动模式:MYSQL会根据执行的每一条具体SQL语句来区分对待记录的日志格式,
企业使用场景:
1)如果不会用到mysql特殊的功能,基本都是默认的模式statement模式
2)如果会到mysql的一些特殊功能,基本都是会使用row level模式
第70题:用一条命令将除了sshd、crond、network、rsyslog几个服务之外的服务全部关闭(无需开机自动)
方法一:
[root@centos6~]# for name in `chkconfig –list|grep 3:on|awk '{print $1}'|grep -Ev "sshd|crond|rsyslog|network"`;dochkconfig $name off;done
[root@centos6~]# chkconfig –list|grep 3:on
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
方法二:
[root@centos6 ~]# chkconfig–list|grep 3:on|awk '{print $1}'|grep -Ev"sshd|crond|rsyslog|network"|sed -r "s#(.*)#chkconfig \1off#g"|bash
[root@centos6~]# chkconfig –list|grep 3:on
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
第65题:Nginx反向代理如何实现代理RS节点上的不同虚拟主机,请说出原理和配置方法或思路。
客户端向反向代理发送请求,反向代理按一定的规则转发至目标服务器,并将返回的内容返回给客户端,可分为以下两种:
配置内部不同服务器转发:
upstream app1 {
server 192.168.1.10:80 weight=5;
server 192.168.1.11:80 weight=5;
}
upstream app2 {
server 192.168.1.20:80 weight=5;
server 192.168.1.21:80 weight=5;
}
配置server
server{
listern 80;
server_name app.abc.com
}
配置匹配转发规则:
location /app1/ {
proxy_pass http://example.com/app1;
proxy_set_header Host $host;
}
location/app2/ {
proxy_passhttp://example.com/app2;
proxy_set_header Host $host;
}
做为负载均衡
配置负载均衡服务器池,也就是调度规则
upstream test_servers {
server 192.168.1.2:80 weight=5;
server 192.168.1.4:80 weight=5;
server 192.168.1.6:82 weight=15;
}
然后配置server标签,
server {
listen 80;
server_name www.abc.com;
proxy_pass http://test_servers;
proxy_set_header Host $host
}
配置完成后,重新加载nginx服务
第112题:用变量a给出下面的定义
1 一个整型数
2 一个指向整型数的指针
3 一个指向指针的指针,它指向的指针是指向一个整型数
4 一个有10个整型数的数组
5 一个有10个指针的数组,该指针是指向一个整型数
6 一个指向有10个整型数数组的指针
7 一个指向函数的指针,该函数有一个整型参数,并返回一个整型数
8 一个指向函数的指针,该函数有一个整型参数并返回一个整型数
参考答案:
int a;
int *a;
int **a;
int a[10];
int* a[10];
int (*a)[10];
int (*a)(int);
int (*a)(int);
第144题:iptables是否支持time时间控制用户行为,如有请写出具体操作步骤。
支持。需要增加相关支持的内核补丁,并且要重新编译内核。
或者使用crontab配合iptables,首先:vi /deny.bat 输入/sbin/iptables -A OUTPUT -p tcp -s 192.168.1.0/24 --dport 80 -j DROP 保存退出
打开crontab -e
输入:00 21 * * * /bin/sh /deny.bat
第145题:下面代码,调用函数,接收函数返回值,根据返回值进行判断哪里出错。
Disk_Mod $1
Res=$?
[ $Res–eq 0 ] && exit 0
[ $Res–eq 66 ] && echo "Error! Invalid input."
[ $Res–eq 67 ] && echo "Error! Command -> dd <- Faild."
[ $Res–eq 68 ] && echo "Error! Command -> fdisk <- Faild."
[ $Res–eq 69 ] && echo "Error! Command -> mke2fs <- Faild."
第136题:写一个脚本,实现批量添加20个用户,用户名为user1-20,密码为user后面跟5个随机字符
#!/bin/bash
#description: useradd
for i in `seq –f"%02g" 1 20`;do
useradd user$i
echo "user$i-`echo $RANDOM|md5sum|cut -c 1-5`"|passwd –stdinuser$i >/dev/null 2>&1
done
第137题:写一个脚本,实现判断192.168.1.0/24网络里,当前在线的IP有哪些,能ping通则认为在线
#!/bin/bash
for ip in `seq 1 255`
do
{
ping –c 1 192.168.1.$ip > /dev/null 2>&1
if [ $? –eq 0 ]; then
echo 192.168.1.$ip UP
else
echo 192.168.1.$ip DOWN
fi
}&
done
wait
第138题:写一个脚本,判断一个指定的脚本是否是语法错误;如果有错误,则提醒用户键入Q或者q无视错误并退出其它任何键可以通过vim打开这个指定的脚本
[root@localhost tmp]# cat checksh.sh
#!/bin/bash
read –p "please input check script->" file
if [ –f $file ]; then
sh –n $file > /dev/null 2>&1
if [ $? –ne 0 ]; then
read –p "You input $file syntax error,[Type q to exit or Type vim toedit]" answer
case $answer in
q | Q)
exit 0
;;
vim)
第139题:写一个脚本:(26包括3个小题)
1、创建一个函数,能接受两个参数:
1)第一个参数为URL,即可下载的文件;第二个参数为目录,即下载后保存的位置;
2)如果用户给的目录不存在,则提示用户是否创建;如果创建就继续执行,否则,函数返回一个51的错误值给调用脚本;
3)如果给的目录存在,则下载文件;下载命令执行结束后测试文件下载成功与否;如果成功,则返回0给调用脚本,否则,返回52给调用脚本;
[root@localhost tmp]# cat downfile.sh
#!/bin/bash
url=$1
dir=$2
download()
{
cd $dir >> /dev/null 2>&1
if [ $? –ne 0 ];then
read –p "$dir No such file or directory,create?(y/n)" answer
if [ "$answer" == "y" ];then
mkdir –p $dir
cd $dir
wget $url 1> /dev/null 2>&1
if [ $? –ne 0 ]; then
return "52"
fi
else
return "51"
fi
fi
}
download $url $dir
echo $?
第153题:编写个shell脚本将当前目录下大于10K的文件转移到/tmp目录下
#/bin/sh
#Programm :
# Using for move currently directory to /tmp
for FileName in `ls -l |awk '$5>10240 {print $9}'`
do
mv $FileName /tmp
done
ls -la /tmp
echo "Done! "
第156题:编写shell脚本获取本机的网络地址。比如:本机的ip地址是:192.168.100.2/255.255.255.0,那么它的网络地址是192.168.100.1/255.255.255.0
方法一:
#!/bin/bash
#This script print ip and network
file="/etc/sysconfig/network-scripts/ifcfg-eth0″
if [ -f $file ] ;then
IP=`grep "IPADDR" $file|awk -F"=" '{ print $2 }'`
MASK=`grep "NETMASK" $file|awk -F"=" '{ print $2 }'`
echo "$IP/$MASK"
exit 1
fi
方法二:
#!/bin/bash
#This programm will printf ip/network
#
IP=`ifconfig eth0 |grep 'inet ' |sed 's/^.*addr://g'|sed 's/Bcast.*$//g'`
NETMASK=`ifconfig eth0 |grep 'inet '|sed 's/^.*Mask://g'`
echo "$IP/$NETMASK"
exit
第140题:写一个脚本:(27包括2个小题)
1、创建一个函数,可以接受一个磁盘设备路径(如/dev/sdb)作为参数;在真正开始后面步骤之前提醒用户有危险,并让用户选择是否继续;而后将此磁盘设备上的所有分区清空(提示,使用命令dd if=/dev/zero of=/dev/sdb bs=512 count=1实现,注意其中的设备路径不要写错了;
如果此步骤失败,返回67给主程序;
接着在此磁盘设备上创建两个主分区,一个大小为100M,一个大小为1G;如果此步骤失败,返回68给主程序;
格式化此两分区,文件系统类型为ext3;如果此步骤失败,返回69给主程序;
如果上述过程都正常,返回0给主程序;
2、调用此函数;并通过接收函数执行的返回值来判断其执行情况,并将信息显示出来;
local Darray=(`ls /dev/sd[a–z]`)
for i in ${Darray};do
[[ "$i" == "$1" ]] && Sd=$i &&break
done
else
return66
fi
当匹配成功,进入选择,告诉用户,是否继续,输错的话进入无限循环,当用户选择Y,则清空目标分区,且跳出while循环
while :;do
read –p "Warning!!!This operation will clean $Sd data.Next=y,Quit=n [y|n]:" Choice
case $Choice in
y)
dd if=/dev/zero of=$Sd bs=512 count=1 &> /dev/null &&break || return 67 ;;
n)
exit 88 ;;
*)
echo "Invalid choice,please choice again." ;;
esac
done
使用echo传递给fdisk进行分区,如果此命令失败,则跳转出去,错误值68,需要注意的是,有时候这个返回值很诡异,笔者之前成功与否都是返回的1,后来重启之后,就好了,如果慎重的话,可以对创建的分区,进行判断,不过就需要使用其他工具截取相关字段了,虽有些小麻烦,但无大碍
echo–e "n\np\n1\n\n+100M\nn\np\n2\n\n+1024M\nw\n"|fdisk /dev/sdb&> /dev/null || return 68
格式化之前,让内核重新读取磁盘分区表,值得注意的是,有的系统版本,使用partprobe无效,譬如笔者的环境是rhel5.8,而rhel6.0以后,这个命令就很危险了,而使用partx -a /dev/sdb则效果更好…此项需慎重,如果格式化失败,则告知把失败的分区定义成变量,且跳出函数,并带出错误值69
`partprobe`
Part=`fdisk –l /dev/$Sd|tail –2|cut –d" " –f1`
for M in ${Part};do
mke2fs –j $M &> /dev/null && ErrorPart=$M &&return 69
done
return 0
}
第166题:简述windows不同情况下下抓hash的几种方式?假如cmdshell是system权限,可不可以IPC到目标机器,如果可以应该怎么做?
第168题:以下PHP代码经过mysql_real_escape_string过滤还存在漏洞?为什么?
id=
i
d
=
_GET[‘id’];
id=mysqlrealescapestring(
i
d
=
m
y
s
q
l
r
e
a
l
e
s
c
a
p
e
s
t
r
i
n
g
(
id);
getid="SELECTfirstname,lastnameFROMusersWHEREuserid=
g
e
t
i
d
="
S
E
L
E
C
T
f
i
r
s
t
n
a
m
e
,
l
a
s
t
n
a
m
e
F
R
O
M
u
s
e
r
s
W
H
E
R
E
u
s
e
r
i
d
=
id”;
result=mysqlquery(
r
e
s
u
l
t
=
m
y
s
q
l
q
u
e
r
y
(
getid) or die(‘
’ . mysql_error() . ’
’ );
num=mysqlnumrows(
n
u
m
=
m
y
s
q
l
n
u
m
r
o
w
s
(
result);
参考答案:
这里$id变量没有经过任何的过滤,直接传入了sql语句,造成数字型注入,mysql_real_escape_string只对’ ” \ null字符做转义,而数字型注入不需要’闭合,所以仍存在注入漏洞。
第169题:如果拿到了一台服务器的webshell,如何再进一步渗透内网?请详细描述,并给出尽量多的方法。
参考答案:无
第170题:请尽可能多的列举你所了解的一个互联网公司可能面对的安全技术问题。如果能针对列举的安全问题能提供一些防护思路则会加分(不是列举具体的事例,而是分类列举安全技术类别,譬如:员工账户密码过于简单导致密码泄露)
参考答案:无
第171题:有用户反映滴滴打车软件打开速度慢,请描述下排查方案?
第172题:提供一个二叉树的子树查找函数,完成如下的功能:
输入参数:root, node
输出:1.node所在的深度(0表示不存在,最小深度为1);2.node对应的路径(从root开始,左为L,右为R, 按逗号分隔);
说明:1.node所在位置相同,左右子树和name都必须相同;
请用熟悉的语言,用两种方式(递归和栈)完成此函数
第176题:一个文件,大概1亿行,每行一个ip,将出现次数最多的top10输出到一个新的文件中
第165题:系统设计
请考虑以下系统的设计. 您可以翻阅资料,查询任何您有帮助的资料、指南等。
您有的资源:8台安装Linux (2.6内核) 的双网卡PC服务器以及相关开源软件,交换机
Apache 2.2.x Tomcat 5.5.X 数据库系统 最多8个Internet IP地址,请您设计一个系统:
1、使用双apache web server前端;
2、采用AJP连接后段的3台Tomcat应用服务器,这些tomcat被配置成cluster, 因此需要考虑apache对后端的分配,分配采用完全平衡的方法;配置使用cookie来实现session stickness;
3、1台数据库服务器只有tomcat才需要连接,也不需要对Internet提供服务。
4、考虑系统的安全性和维护方便性;
5、通过rewrite规则配置把下属URL规则改写成友好的URL
http://server/webapp/getinfo?id=XXXX&name=YYYY –> http://server/getinfo/YYYY/XXXX
您需要提交
1、服务器规划,包括:
* 网络结构图
* 每台机器的IP地址分配
* 每台机器上运行的关键软件
* 您从安全性和维护性方面的考虑
2、Apache的以下配置文件给我们:
* extra/http-proxy-ajp.conf
* extra/http-rewrite.conf
2.你可以采取任何设备和不同操 作系统服务器设计对两台WWW服务器和两台FTP服务器做负载均衡,用网络拓扑图表示并加以说明!(方法越多越好)
第一种方法: DNS轮巡
www1 IN A 192.168.1.1
www2 IN A 192.168.1.2
www3 IN A 192.168.1.3
ftp1 IN A 192.1.1.4
ftp2 IN A 192.1.1.5
ftp3 IN A 192.1.1.6
www IN CNAME www1
www IN CNAME www2
www IN CNAME www3
ftp IN CNAME ftp1
ftp IN CNAME ftp2
ftp IN CNAME ftp3