Linux面试题,面试总结的

1、linux 开机流程:
    BIOS开机自检->MBR引导->加载GRUB->加载Linux内核->运行init进程,读取/etc/inittab ->执行/etc/rc.d/rc.sysinit脚本 ->
    执行/etc/rc.d/rc脚本,运行/etc/rc.d/rcX.d中的脚本,X表示inittab中指定的运行级别 ->执行/etc/rc.d/rc.local脚本 ->
    启动mingetty进程 ->等待用户登录
    
    
 2、TCP三次握手、四次挥手:
    第一次握手--->建立连接时,客户端发送syn包(syn=j)到服务器,并进入syn_send状态,等待服务器确认;
    
    第二次握手--->服务器收到syn包,必须确认客户端的syn(ack=j+1),同时自己也发送一个syn包(syn=k),
    即syn+ack包,此时的服务器进入syn_recv状态;
    
    第三次握手--->客户端收到服务器发送的syn+ack包,向服务器发送ack(ack=k+1),此包发送完毕,客户端和服务端进入了established状态 ,X表示inittab中指定的运行级别
    完三次握手,客户端与服务器开始传送数据。
    
    第一次挥手--->客户端发送一个FIN,用来关闭客户端到服务器的数据传输,客户端进入FIN_WAIT_1状态;
    
    第二次挥手--->服务器收到FIN后,发送一个ACK包给客户端,确认序列号为收到序列号+1,服务器进入CLOSE_WAIT状态;
    
    第三次挥手--->服务器发送一个FIN,用来关闭服务器到客户端的数据传输,服务器进入LAST_ACK状态;
    
    第四次挥手--->客户端收到个 FIN,客户端进入TIME_WAIT状态,接着发送一个ACK给服务器,确认序列号+1
    服务器进入CLOSE状态,完成四次挥手。
    
3、包过滤防火墙与代理应用防火墙有什么区别,能列举几种相应的产品吗?

    包过滤防火墙工作在网络层,它只对IP包的源地址、目标地址及相应端口进行处理,因此速度快,能够处理的并发连接比较多,
    缺点就是对应用层的攻击能力无能为力。
    代理服务器防火墙工作在应用层,它将收到的IP包还原成高层协议的通讯数据,比如http连接信息,因此能够对基于高层协议的攻击
    进行拦截。缺点就是处理速度比较慢,能够处理的并发连接比较少。
    代理防火墙:天融信 GFW 4000
    包过滤防火墙:华为 NE 16E
    
4、什么是NAT,常见分为那几种,DNAT与SNAT有什么不同,应用事例有那些?

    NAT(Network Address Translation,网络地址转换)是将IP数据包头中的IP地址转换为另一个IP地址的过程,
    分为DNAT(目的网络地址转换)和SNAT(源网络地址转换)。
    SNAT 主要是用于内网主机通过路由器或网关访问外网
    DNAT 将外部地址和端口的访问映射到内部地址和端口
    
5、如何将本地80端口的请求转发到8080端口,当前主机IP为192.168.16.1,其中本地网卡eth0

    IPTABLES -t NAT -A PREROUTING  -d 192.168.16.1 -p tcp --dport 80 -j DNAT --to 192.168.16.1:8080
    
6、在11 月份内,每天的早上6 点到12 点中,每隔2 小时执行一次/usr/bin/httpd.sh 怎么实现:

    0 6-12/2  * 11 * /usr/bin/httpd.sh
    
7、简述raid0 raid1 raid5 三种工作模式的工作原理及特点。

    RAID 0:连续以位或字节为单位分割数据,并行读/写于多个磁盘上,因此具有很高的数据 传输率,但它没有数据冗余,因此并不能算是真正的RAID 结构。
    RAID 0 只是单纯地提高 性能,并没有为数据的可靠性提供保证,而且其中的一个磁盘失效将影响到所有数据。因此,RAID 0 不能应用于数据安全性要求高的场合。
    
    RAID1:它是通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据。当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID 1 可以提高读取性能。
    RAID1 是磁盘阵列中单位成本最高的,但提供了很高的数据安全性和可用性。当一个磁盘失效时, 系统可以自动切换到镜像磁盘上读写 ,而不需要重组失效的数据。
    简单来说就是:镜象结 构,类似于备份模式,一个数据被复制到两块硬盘上。
    
    RAID10:高可靠性与高效磁盘结构一个带区结构加一个镜象结构,因为两种结构各有优缺点,因此可以相互补充。主要用于容量不大,但要求速度和差错控制的数据库中。
    
     RAID5:分布式奇偶校验的独立磁盘结构,它的奇偶校验码存在于所有磁盘上,任何一个硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据。
     支持一块盘掉线后仍然正常运行。
     
8、计划每星期天早8点服务器定时发送一封内容为:test的邮件。发信人:user1@ab.com 收信人:test1@example.com,如何实现?
    crontab -e
    00 08 * * 7  echo "test" | /bin/mail -r user1@ab.com -s test test1@example.com &>/dev/null
    
9、用ls 查看目录或者文件时,第二列的数值表示什么意思?如果一个目录的这列的值为3,那么这个3是如何得到的?
    第二列的数值表示硬链接数,默认情况下,新建一个目录,该目录就会包含一个指向自身的目录“.”和指向其上一级目录的父目录“..”,该数值是2,
    若分别在新建的目录里建一个文件和一个目录,那么再次查询时,就会发现该数值变为了3,由此类推..
    
10、如果设置 umask 为 001 , 那么用户默认创建的目录和文件的权限是什么样子的?

    目录:776  文件:666
    
11、出于安全考虑,如何实现让别人ping不通你的在线的服务器。

    有多种方法
    防火墙上用ACL封ICMP协议或者在服务器上使用iptables封icmp
    或者在服务器上修改内核参数:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
    
12、怎样防止他人在服务器前通过按下 ctrl+alt+del 强行重启系统(提示,仔细看/etc/inittab)
    vim /etc/init/control-alt-delete.conf 
    exec /sbin/shutdown -r now "Control-Alt-Delete pressed"    这一项注释掉,保存退出
    
13、当在对服务器进行大负荷操作的时候,你不希望现在有普通用户登录上来,你该怎么做?不能剪网线。
    touch /etc/nologin
    创建一个nologin文件,此文件为特殊文件,创建之后所有普通用户不能登录;系统维护结束后删除此文件,用户可以恢复登录;
    只限于shell登录用户,本身shell为/sbin/nologin 的用户本身就无法登录shell,不受影响;

14、你新建了一批用户,出于安全考虑,要求这些用户在第一次登录的时候 就必须要更改密码,怎么实现?
    查看密码和账户过期信息:chage -l username  
    将密码设置为过期,用户登陆必须要更改密码:chage -d0 username 或 passwd -e username 

15、如何把一个目录下的所有文件(不含目录)权限改为644?
    find ./ ! -type d -exec chmod 644 \;
    
16、请实现下面这个需求:只允许使用普通账户登陆,而普通账户登录后,可以不输入密码就能sudo切换到root账户,root是不允许远程登录的。
    vim /etc/ssh/sshd_config
    PerimtRootLogin             设置为no,禁止root远程登录
    /etc/init.d/sshd reload     重新加载sshd配置文件生效
    visudo,添加一行:user        ALL=(root)      NOPASSWD:/bin/su
    
17、如何使文件只能写不能删除? 如何使文件不能被删除、重命名、设定链接接、写入、新增数据?
    chattr +a  只能向文件中添加数据,而不能删除
    chattr +i 文件不能被删除、改名、设定链接关系,同时不能写入或新增内容
    
18、编写shell脚本获取本机的IP/netmask。
    ifconfig|awk -F "[ :]+" ‘NR==2 {print $4}’
    1grep+cut:
    ifconfig eth0|grep "inet addr"|cut -d: -f2|cut -d ' ' -f1

    2) awk:
    ifconfig eth0|awk -F "[ :]+" 'NR==2 {print $4}'

    ifconfig eth0|awk -F "[ :]+" '$0 ~ "inet addr" {print $4}'

    ifconfig eth0|awk -F "[ :]+" '/inet addr/ {print $4}'

    3) grep+awk:
    ifconfig eth0|grep "inet addr"|awk -F "[ :]+" '{print $4}'
    ifconfig eth0|grep "inet addr"|awk '{print $2}'|awk -F: '{print $2}'

    4) grep+awk+cut:
    ifconfig eth0|grep "inet addr"|awk '{print $2}'|cut -d: -f2

    5) sed:
    ifconfig eth0|sed -n 's#^.*addr:\(.*\) Bacst.*#\1#g'p  
    
19、编写个shell脚本将当前目录下大于100K的文件转移到/tmp目录下
    find . -size +100K xargs -I {} mv {} /tmp     或find . -size +100k -exec cp {} /tmp \;

    
20、apache有几种工作模式,分别介绍下其特点,并说明什么情况下采用不同的工作模式?

    Apache主要有两种工作模式:prefork(预派生,默认安装模式)和worker(支持混合的多线程多进程的多路处理模块,可以在编译的时候加参数--with-mpm=worker指定为worker模式)
    prefork的特点:
    1、prefork MPM 使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接。这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销。
    2、可以防止意外的内存泄漏,但这种模式消耗的内存比较大;
    3、在服务器负载下降的时候会自动减少子进程数;
    
    worker的特点:
    worker MPM 使用多个子进程,每个子进程有多个线程。每个线程在某个确定的时间只能维持一个连接。通常来说,在一个高流量的HTTP服务器上,Worker MPM是个比较好的选择,
    因为Worker MPM的内存使用比Prefork MPM要低得多。但worker MPM也由不完善的地方,假如一个线程崩溃,整个进程就会连同其任何线程一起"死掉".由于线程共享内存空间,
    所以一个程式在运行时必须被系统识别为"每 个线程都是安全的"21、我们都知道,dns既采用了tcp协议,又采用了udp协议,什么时候采用tcp协议?什么时候采用udp协议?为什么要这么设计?
    首先了解一下TCP与UDP传送字节的长度限制: UDP报文的最大长度为512字节,而TCP则允许报文长度超过512字节。当DNS查询超过512字节时,协议的TC标志出现删除标志,
    这时则使用TCP发送。通常传统的UDP报文一般不会大于512字节。
    区域传送时使用TCP:
    辅域名服务器会定时(一般时3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,则会执行一次区域传送,进行数据同步。
    区域传送将使用TCP而不是UDP,因为数据同步传送的数据量比一个请求和应答的数据量要多得多,并且TCP是一种可靠的连接,保证了数据的准确性。 
    域名解析时使用UDP: 
    客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。不用经过TCP三次握手,这样DNS服务器负载更低,响应更快。
    虽然从理论上说,客户端也可以指定向DNS服务器查询的时候使用TCP,但事实上,很多DNS服务器进行配置的时候,仅支持UDP查询包。

22、一个EXT3的文件分区,当使用touch test.file命令创建一个新文件时报错,报错的信息是提示磁盘已满,但是采用df -h命令查看磁盘大小时,
只使用了,60%的磁盘空间,为什么会出现这个情况,说说你的理由。
    df -i 查看inode使用情况
    一般是inode满了造成的
    查找发现 /tmp 目录下有很多sess_xxxxx的 session临时文件。
    ls -lt /tmp | wc -l  
    进入/tmp目录,执行find -exec命令       sudo find /tmp -type f -exec rm {} \;  
    遍历寻找0字节的文件,并删除。   sudo find /home -type f -size 0 -exec rm {} \;  

23、简述DDOS攻击的原理,有没有解决办法?有,如何解决?
    分布式服务拒绝攻击就是用一台主服务器来控制N台肉鸡对目标服务器进行合理的资源请求,导致服务器资源耗尽而不能进行正常的服务。
    几种流行的DDOS攻击方式:SYN/ACK FLOOD攻击、TCP全连接攻击、CC攻击(百科:攻击者借助代理服务器生成指向受害主机的合法请求,
    实现DDOS,和伪装就叫:cc(ChallengeCollapsar)。CC主要是用来攻击页面的。)
    一个简单的测试: 首先是网站如果打不开的话,可以尝试着用3389连接一下服务器看看,然后还可以用PING命令来测试,再一种方式就是用telnet来登录80端口看看,
    看会不会出现黑屏。如果这些方式测试都连接不上的话,那就说明受到DDOS攻击了。
    然后如果除了80端口之外的其他端口连接都正常,PING命令测试也正常,但就是80端口访问不了,然后看看IIS是否正常,可以把80端口改成其他端口测试,
    如果可以正常访问,那就说明很可能受到CC攻击。
    防御DDOS攻击:
    <1>要有充足的网络带宽和稳定安全的机房:选择口碑好、服务好、安全防护好点的机房,网络带宽直接决定了能抗受攻击的能力。
    <2>软硬设备的防护:硬件DDOS防火墙黑洞、冰盾都不错,软件如web服务器都有相应的ddos防护模块,iptables,做单IP的并发限制,流量限制,syn及部分攻击限制。
    <3>网站架构优化,避免单点提供服务,集群,冗余,负载均衡、缓存技术的架设。
    <4>服务器系统自身的优化及安全参数调配
    <5>采用高性能的网络设备

24、在Linux环境下mysql的root密码忘记解决方法
    MySQL密码的恢复方法之一
    vi /etc/my.cnf 
    在[mysqld]的段中加上一句:skip-grant-tables 保存并且退出vi。
    mysql> UPDATE user SET Password = password ( 'new-password' ) WHERE User = 'root' ; 
    mysql> flush privileges ; 
    MySQL密码的恢复方法之二
    safe_mysqld --skip-grant-tables &
    
25、MySQL5.6.16版本的主从复制搭建:

    主机A IP:192.168.233.131

    主机B IP:192.168.233.132

    1)修改mysql的配置文件:
    (1)开启二进制日志功能
    (2)server-id = 1  //另外一台设置为2

    2)在slave数据库上添加授权复制用户,在master数据库上进行授权:
    create user 'repl'@'192.168.1.%' identified by 'your-password';

    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%'; 

    flush privileges;

    3)在master数据库上执行`show master status;`命令:(查看)

    mysql> show master status\G;
    *************************** 1. row ***************************
                 File: mysql-master-bin.000005
             Position: 120
         Binlog_Do_DB: 
     Binlog_Ignore_DB: 
    Executed_Gtid_Set: 
    1 row in set (0.00 sec)

    4)在slave数据库上执行:
    mysql> change master to master_host='192.168.233.131', master_user='repl',master_password='your-password',master_auto_position=1;

    Query OK, 0 rows affected, 2 warnings (0.24 sec)

    mysql> start slave;

    Query OK, 0 rows affected, 1 warning (0.04 sec)

    5)在slave上执行`show slave status;`查看slave的状态:如果下面这俩个文件都为YES,则表示mysql主从复制搭建成功:

    Slave_IO_Running: Yes

    Slave_SQL_Running: Yes

26、mysql 主从不一致解决方法
    方法一:忽略错误,同步

    该方法适用于主从库数据相差不大,或者要求数据可以不完全统一的情况,数据要求不严格的情况

    解决: 

    stop slave;

    #表示跳过一步错误,后面的数字可变

    set global sql_slave_skip_counter =1;

    start slave;

    之后再用mysql> show slave status\G  查看:

    Slave_IO_Running: Yes

    Slave_SQL_Running: Yes

    ok,现在主从同步状态正常了。。。
    方法二:重新做主从同步;
    
27、写一个防火墙配置脚本,只允许远程主机访问本机的80端口。
    IPTABLES -F
    IPTABLES -X
    IPTABLES -A INPUT -p tcp --dport 80 -j accept
    IPTABLES -A INPUT -p tcp -j reject
    实现172.16.1.0/24段所有主机通过124.32.54.26外网IP共享上网。
    iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 124.32.54.26
    iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE 
    
28、删除data目录下所有的空目录:
    find /data -type d -empty -exec rm-rf {} ;
    
29、统计Nginx访问日志,访问量排在前20 的 ip地址:
    cat access.log|awk '{print $1}'|sort|unic -c|sort -nr|head -20

30、查看目标主机192.168.0.1开放那些端口     nmap -ps 192.168.0.1
31、查看http的并发请求数及其TCP连接状态:netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
32、查看进程-按内存从大到小排列ps -e -o "%C : %p : %z : %a"|sort -k5 -nr
33、查看进程-按cpu利用率从大到小排列ps -e -o "%C : %p : %z : %a"|sort -nr
34、find考察:
    查找当前目录下所有以.tar结尾的文件然后移动到指定目录:find ./ -name "*.tar"  -exec mv {} ./backup;
    查找当前目录30天以前大于100M的LOG文件并删除:find ./ -name "*.log" -mtime +30 -type f -size  +100M|xargs rm -rf {};
    
35、sed常用命收集:test.txt做测试
    如何去掉行首的#字符:sed -i 's/^#//g' test.txt
    在行首添加一个a字符: sed 's/^/a/g' test.txt
    在行尾添加一个a字符: sed 's/$/a/' tets.txt
    在特定行后添加一个c字符: sed '/wuguangke/ac' test.txt
    在行前加入一个c字符: sed '/wuguangke/ic' test.txt
    
    
36、写一个脚本将数据库备份并打包至远程服务器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
    
37、新浪面试题:
    1. 以下一些Linux 命令的作用分别是什么?
    rpm -qf /bin/ls     查找/bin/ls文件属于哪个RPM软件包
    2、一台Linux Server要提供HTTP、DNS、数据库、HTTP代理、虚拟机、负载均衡 服务,分别需要安装哪些软件?
    http:apache DNS:BIND9   http代理:squid    虚拟机:vmware for linux或是redhat kvm    负载均衡:LVS
    3、用哪个命令可以对Mysql中的数据库进行备份?
    最常见的mysqldump命令备份,还有mysqldump的加强版mydumper
    4、目前IP地址为192.168.1.10的用户总是恶意连接你的一台Linux服务器的80端口,对此做为系统管理员的你有什么样的对策?
    sudo iptables -A input -s 192.168.1.10 -p tcp -j drop
    

38、面试问得很鸡肋:
    MySQL主从复制延时的主要原因?
    我总结了以下几点:
    1)  问题一:主库的从库太多,导致复制延迟
        从库数据以3-5个为宜,要复制的从节点数量过多,会导致复制延迟
    2)  问题二:从库硬件比主库差,导致复制延迟
        查看Master和Slave的系统配置,可能会因为机器配置不当,包括磁盘I/O、CPU、内存等各方面因素造成复制的延迟。一般发生在高并发大数据量写入场景中
    3)  问题三:慢SQL语句过多
        假如一条SQL语句执行时间是20秒,那么从执行完毕到从库上能查到数据至少需要20秒,这样就延迟20秒了。
        一般要把SQL语句的优化作为常规工作不断地进行监控和优化,如果单个SQL的写入时间长,可以修改后分多次写入。
        通过查看慢查询日志或show full processlist命令,找出执行时间长的查询语句或大的事务
    4)  问题四:主从复制的设计问题
        例如主从复制单线程,如果主库写并发太大,来不及传送到从库,就会导致延迟。更高版本的Mysql可以支持多线程复制,门户网站则会开发自己的多线程同步功能。
    5)  问题五:主从库之间的网络延迟
        主从库的网卡、网线、交换机等网络设备都可能成为复制的瓶颈,导致复制延迟。另外,跨公网的主从复制很容易导致主从复制延迟
    6)  问题六:主库读写压力大,导致复制延迟
        架构的前端要加buffer及缓存层

 

posted @ 2016-09-26 10:36  BigZero  阅读(765)  评论(0编辑  收藏  举报