Linux考试题

第一关

1.  创建目录/data/oldboy ,并且在该目录下创建文件oldboy.txt,然后在文件oldboy.txt里写入内容"inet addr:10.0.0.8 Bcast:10.0.0.255 Mask:255.255.255.0"(不包含引号)。

    mkdir -p /data/oldboy

    cd /data/oldboy

    touch oldboy.txt

    echo "inet addr:10.0.0.8 Bcast:10.0.0.255 Mask:255.255.255.0" > oldboy.txt

2.  将题1中的oldboy.txt文件内容通过命令过滤只输出如下内容:

    10.0.0.8 10.0.0.255  255.255.255.0

    awk -F '[ :]+' '{print $3,$5,$7}' oldboy.txt

3.  将题1中的oldboy目录移动到/tmp目录下,并将/etc/passwd文件复制到/tmp/oldboy下。  

    mv /data/oldboy /tmp

    cp /etc/passwd /tmp/oldboy

4.  在题3的基础上使用awk取passwd文件的第10行到20行的第三列重定向到/tmp/oldboy/test.txt文件里。

    awk 'NR>9&&NR<21' passwd | awk -F ":" {'print $3'} > /tmp/oldboy/test.txt

    awk -F ':' 'NR>9&&NR<21 {print $3}' passwd > /tmp/oldboy/test.txt  第二种方法更简单

5.  在题3的基础上要求用命令rm删除文件时提示如下禁止使用rm的提示,并使该效果永久生效。

    [root@oldboy oldboy]# rm -f passwd

    Do not use rm command.

    修改用户主目录下的.bashrc文件,添加如下内容:alias rm=' echo "Do not use rm command."'

    然后执行命令,source .bashrc,使配置永久生效。

    或者追加到/etc/bashrc文件中。

6.  在题3的基础上,删除/tmp/oldboy/下除passwd以外的其他文件。

    rm -f `ll  /tmp/oldoby | grep -v "passwd" | awk {'print $9'}`

    find /tmp/oldboy -type f ! -name "passwd" | xargs \rm -f 

7.  在题3的基础上,请打印/etc/passwd文件中的第2-5行(不低于三种方法)

    sed -n  '2,5'p /etc/passwd

    awk 'NR>1&&NR<6' /etc/passwd

    head -5 /etc/passwd | tail -4

8.  在题3的基础上,使用命令调换passwd文件里root位置和/bin/bash位置?即将所有的第一列和最后一列位置调换?

    例:

      默认:root:x:0:0:root:/root:/bin/bash

      修改后:/bin/bash:x:0:0:root:/root:root

      awk -F ":" 'NR==1{print $7":"$2":"$3":"$4":" $5":" $6":"$1}' passwd  只修改第一行

      awk -F ":" '{print $7":"$2":"$3":"$4":" $5":" $6 ":"$1}' passwd  修改文件中所有行

9.  把/data目录及其子目录下所有以扩展名.txt结尾的文件中包含oldgirl的字符串全部替换为oldboy。

    sed -i 's#oldgril#oldboy#g' `ll -R /data | grep *.txt | awk {'print $9'}`

    find /tmp/oldboy/ -type f -name "*.txt" | xargs sed -i 's#oldboy#oldgril#g'  注意sed是整个单词匹配

10.  查找/oldboy下所有7天以前以log结尾的大于1M的文件移动/tmp下

    cp -a `find /data/ -type f -name "*.txt"  -mtime +7 -size +1` /tmp

    find /data/ -type f -name "*.txt"  -mtime +7 -size +1  -exec mv {} /tmp \;

11.  什么是linux的运行级别,请描述linux的运行级别不同数字的含义? (附加题)

    linux运行状态

    0  关机

    1  单用户模式

    2  多用户,但是没有NFS,没有网络

    3  多用户命令行模式

    4  预留

    5  图形界面

    6  重启

12.  请描述buffer和cache的区别(附加题)?

    buffer 数据写入到内存的空间,叫做缓冲区

    cache 数据从内存读取的空间,叫做缓存区

13.  请说出你知道的下列字符在linux里可以代表的意义(附加题)。

    ~  用户家目录

    -  回到上一次所在目录

    .  当前目录

    ..  当前目录的父目录

    |  管道符号

    >  输出重定向,会清空原有的文件内容

    >>  追加输出重定向,数据在文件尾部

    <  输入重定向

    <<  输入多行内容

    !  非

    &  后台运行

14.  如何过滤出/data目录下的所有一级目录?

    ll /data | grep '^d'

    ls -F /data | grep '/$'  对文件类型添加提示符

    ls -p /data | grep '/$'  对目录添加/

    ll | sed -n '/^d/p'

    ll | awk '/^d/'

15.  假如当前目录是/data,然后我进入了/tmp,如何回到/data?

    cd -  回到上一次所在目录

16.  日志跟踪

    tail -f /var/log/messages

    taif /var/log/messages

17.  打印配置文件的行号

    cat -n /appliation/nginx.conf

    grep -n . /application/nginx.conf

    nl /application/nginx.conf

    awk '{print NR,$0}' nginx.log

    less -N nginx.log 

 18.  ps aux中VSZ和RSS的含义是什么?

    VSZ:该进程的虚拟内存使用量Kbytes

    RSS:该进程的固定内存使用量Kbytes

19.  ps aux中的STAT有几种,分别是什么意思?

    R:该程序正在运行

    S:正在睡眠,可以被唤醒

    D:不可被唤醒的睡眠状态,可能正在等待IO

    T:停止状态

    Z:僵尸状态

20.  硬链接与软链接的区别?

    1.  概念:

        硬链接:一个文件的多个入口

        软链接:类似于windows的快捷方式

    2.  使用命令:

        硬链接:ln  源文件  目标文件

        软链接:ln -s   源文件  目标文件

    3.  针对文件

        硬链接:

          1.  一个文件可以有多个硬链接文件,使用的是一个inode

          2.  删除一个硬链接文件,不影响其他硬链接文件

          3.  有几个硬链接文件,ls -i里面的节点数就为多少

          4.  硬链接文件不能跨分区

        软链接:

          1.  一个文件可以有多个软链接,软链接文件与源文件的inode不同。

          2.  删除软链接,不会影响源文件,删除源文件,软链接就飘红

          3.  软链接可以跨分区

          4.  软链接的文件类型表示为l

    4.  针对目录

        硬链接:

          1.  硬链接不能对目录设置

          2.  目录默认的硬链接数为2,添加一个子目录,硬链接数加1.

        软链接:

          1.  软链接可以针对目录,多用于版本升级的时候

21.  Linux删除文件的原理?

    1.  当向分区写入数据时,linux会回收inode为0,并且i_link为0的文件,然后给新申请的数据空间,这样原来的数据就被彻底删除了。

       也就是此文件没有硬链接文件,并且没有程序调用。

    2.  实战例子:

       apache服务器web日志满了,查看df -h,发现已经使用了100%.

       然后删除了一些不使用的web日志,发现硬盘空间并没有减少,后来重启一下apache服务,硬盘空间就被释放了。

22.  一个目录中有很多文件(ls查看时好多屏),想最快速度查看到最近更新的文件。如何看?

    ls -ltr

    -t  按修改时间排序,第一个是最新修改时间

    -r  逆序排列结果

    所以结合起来最后一行就是最近修改的文件或目录

23.  过滤出/etc/services 包含3306和1521的行的内容。  

     egrep 3306\|1521 /etc/services  使用egrep命令,注意要转义|符号

24.  如何查看/etc/services文件的行数?

     wc -l /etc/services

25.  已知如下命令及结果:

[oldboy@test ~]$ echo "I am oldboy,myqq is 31333741">>oldboy.txt

[oldboy@test ~]$ cat oldboy.txt

I am oldboy,myqq is 31333741

现在需要 取文件中的oldboy,31333741字符串,请给出命令.

awk -F "[ ,]+" '{print $3","$6}' oldboy.txt

26.  如何优化linux系统?

    1.  关闭防火墙

    2.  关闭selinux服务

    3.  关闭不用的服务,保留使用的服务

    4.  关闭登录linux的内核版本显示

    5.  linux时间做一个定时任务,能够保证时间准确

    6.  设置linux的语言环境,最好是用英文

    7.  不使用root用户,使用普通用户,创建sudo用户。

第二关

[口头表达技能考试题]
1.  描述linux的开机到登陆界面的启动过程(记时2分钟)

  1.  centos6

      第一步,加电自检(检测硬件是否有问题,内存,cpu,硬盘,raid卡等)

      第二步,默认启动使用硬盘引导,它会找到硬盘,读取并执行MBR的boot Loader。硬盘0柱面0磁道1扇区的前446byte。

      第三步,加载grub,加载linux系统内核kernel,kernel会检测硬件及加载硬件驱动程序。cat /etc/grub.conf

      第四步,内核会调用第一个init进程,init会取得run-level信息。读/etc/inittab文件。进程号为1。

      第五步,init执行/etc/rc.d/rc.sysinit文件来准备软件执行的操作环境(网络,时区)

      第六步,init执行run-level的各个服务的启动。

      第七步,init执行/etc/rc.d/rc.local文件。

      第八步,init执行终端机模拟程序mingetty来启动login进程,最后等待用户登录。

      图解如下:

https://blog.csdn.net/qq_27754983/article/details/75212666  里面centos6与centos7的启动流程

2.  描述linux下软链接和硬链接的区别。(记时2分钟)

    解答:

    1.  概念:硬链接类似于房间多了一个入口,多个硬链接指向的都是一个inode;软链接类似于windows的快捷方式,软链接和源文件的inode不一样。

    2.  命令:ln,ln -s

    3.  针对目录:硬链接不能在目录之间创建,一个目录的硬链接数默认为2,增加一个子目录硬链接数加1.

            软链接可以在目录之间创建,删除软链接不会影响源目录。

    4.  针对文件:硬链接可以在文件之间创建,但是不能跨分区,删除硬链接不会影响源目录。

            软链接可以在文件之间创建,删除软链接不会影响源目录。

3.  linux shell中单引号和双引号或不加引号的区别(记时2分钟)

    解答:

    1.  单引号里面是什么就输出什么。

    2.  双引号里面有命令或者变量会先解析命令和变量。

    3.  不加引号与双引号一样。
4.  linux运行级别0-6(记时1分钟)

    解答:

    这个没问题
5.  描述linux下文件删除的原理(3分钟)

Linux是通过link的数量来控制文件删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除。一般来说,每个文件都有2个link计数器:i_count 和 i_nlink。
i_count的意义是当前文件使用者(或被调用)的数量,i_nlink 的意义是介质连接的数量(硬链接的数量);可以理解为i_count是内存引用计数器,i_nlink是磁盘的引用计数器。

当一个文件被某一个进程引用时,对应i_count数就会增加;当创建文件的硬链接的时候,对应i_nlink数就会增加。

对于删除命令rm而言,实际就是减少磁盘引用计数i_nlink。这里就会有一个问题,如果一个文件正在被某个进程调用,而用户却执行rm操作把文件删除了,那么会出现什么结果呢?当用户执行rm操作删除文件后,再执行ls或者其他文件管理命令,无法再找到这个文件了,但是调用这个删除的文件的进程却在继续正常执行,依然能够从文件中正确的读取及写入内容。这又是为什么呢?

这是因为rm操作只是将文件的i_nlink减少了,如果没其它的链接i_nlink就为0了;但由于该文件依然被进程引用,因此,此时文件对应的i_count并不为0,所以即使执行rm操作,但系统并没有真正删除这个文件,当只有i_nlink及i_count都为0的时候,这个文件才会真正被删除。也就是说,还需要解除该进程的对该文件的调用才行。

[技术技能笔试考试题]
1.  如何取得文件/etiantian的权限对应的数字,如-rw-r--r-- 为644,取得644这样的数字。
    解答:

      stat test.txt | sed -n '4p' | awk -F '[ /]+' '{print $1}' | awk -F '0' '{print $2}'

      ll /etiantian | cut -c 2-10 |tr "rwx-" "4210"| awk -F "" '{print $1+$2+$3""$4+$5+$6""$7+$8+$9}'

      stat etiantian | awk -F "[0/]" 'NR==4 {print $2}'

      stat -c %a etiantian  思想:当使用命令可以看到所要的结果的时候,可能命令本身就有取你要的结果。


2.  linux下通过mkdir命令创建一个新目录/oldboy/ett,它的硬链接数是多少,为什么?
    解答:它的硬链接数为2,因为它本身是一个,它的目录下有一个.,也是一个硬链接。


3.  请执行命令取出linux中eth0的IP地址(请用cut,有能力者也可分别用awk,sed命令答)。
    解答: 

      ifconfig | sed -n '2p' | awk '{print $2}'

      ifconfig ens32 | awk 'NR==2 {print $2}'

      grep 'IPADDR' /etc/sysconfig/network-scripts/ifcfg-ens32 | cut -d = -f 2


4.  请给出默认情况eth0网卡配置文件的路径及客户端DNS的路径。
    解答:/etc/sysconfig/network-scripts/ifcfg-eth0  /etc/resolv.conf
 
5.  查找当前目录下所有文件,并把文件中的www.etiantian.org字符串替换成www.oldboy.cc
    解答:

      find . -type f | xargs sed -i "s#www.etiantian.org#www.oldboy.cc#g"

      find . -type f -exec sed -i "s#www.etiantian.org#www.oldboy.cc#g" {} \;
 
6.  问题:如何赋予oldboy文件 -rw-r--r-x权限属性
    解答:  

      chmod 645 oldboy

      chmod o+x oldboy


7.  执行下面命令时发现提示需要输入密码,请问提示输入的密码是哪个用户的密码。
    [test@oldboy ~]$ sudo su - oldboy
    解答:切换到哪个用户上,就是哪个用户的密码,此时应当是oldboy用户。

8.  问题:请问在一个命令上加什么参数可以实现下面命令的内容在同一行输出。
    echo "oldboy";echo "oldboy" 
    解答:

      echo -ne "yangjianbo\t" ; echo "yangjianbo"
      \t  表示插入tab键


9.  问题:请给出如下格式的date命令 例:11-02-26
    解答:date +"%y-%m-%d"
     
10.  实现按周输出 比如:周六 输出为 6
    解答:date +"%w"
 
11.  问题:扩展问题:打印三天前的日期格式如:2011-02-26
    解答:date -d "3 day ago" +"%Y-%m-%d"
 
12.  已知/oldboy/test.txt文件内容为:
    oldboy
 
    xizi
 
    xiaochao
    请问如何把文件中的空格过滤掉(要求命令行实现)。
    解答:grep -v '^$' test.txt
 
13.  已知/oldboy/ett.txt文件内容为:
    oldboy
    olldboooy
    test
    请使用grep或egrep正则匹配的方式过滤出前两行内容
    解答:

    grep -e '^ol' test.txt 

    egrep '^ol' test.txt


14-15.  请描述下列路径的内容是做什么的?
      /var/log/message   系统日志文件,记录系统一些服务信息
      /var/log/secure    系统安全日志文件,记录系统登录情况
      /var/spool/clientmqueue  系统邮件队列
      /proc/interrupts  每个CPU每个IO的中断信息    
      /etc/fstab  开机文件系统自动挂载配置文件

16.  利用正则表达式取出服务器的IP地址

    ifconfig eno16777736 | sed -n '2p' | sed 's#^.*net ##g'| sed 's#  net.*$##g'

    ifconfig eno16777736 | sed -n '2s#^.*net ##gp'|sed 's#  net.*$##g'

    ifconfig ens32 | sed -nr 's#^.*net (.*)  net.*$#\1#gp'

17.  利用正则取出文件的权限

    stat passwd | sed -nr '4s#^.*\(0(.*)\/-.*$#\1#gp'

18.  利用正则把passwd文件里面的第一行第一列root和最后一列/bin/bash换位置。

    之前已经用awk实现互换功能。

    现在利用正则进行互换。

    sed -nr 's#([^:]+)(:.*:)(.*bash$)#\3\2\1#gp' passwd

    思路:先以非:号开头的字符匹配1个或多个进行分组,然后以:号开始以:号结束进行分组,最后以.*开始bash结尾第三组,然后第三组和第一组进行调换,结果就出来了。

第三关

1)   如果在某用户的crontab文件中有以下记录, 该行中的命令多久执行一次(RHCE考试题)?
    30 4 * * 3 mycmd
          A 每小时。
          B 每周。
          C 每年三月中每小时一次。

    B

2)   如果在某用户的crontab文件中有以下记录, 该行中的命令多久执行一次(RHCE考试题)?
    */5 * * * * mycmd
      A 每5分钟一次。
      B 每小时过5分钟。
      C 不会运行, 格式无效。

      A

简答:
1.  每隔1分钟,打印一个+号到oldboy.log ,请给出crontab完整命令。
    解答:*/1 * * * * /usr/bin/echo "+" >>/tmp/oldboy.log

2.  每隔2个小时 将/etc/service文件打包备份到/tmp下(最好每次备份成不同的备份包)。
    解答:  00 */2 * * * tar zcvf /tmp/`date +"%F-%H-%M"`.tar.gz /etc/services

3.  每天晚上12点,打包站点目录/var/www/html 备份到/data目录下(最好每次备份按时间生成不同的备份包)
    解答:  00 00 * * * tar cf backup_$(date +'%Y-%m-%d').tar /var/www/html

4.  每周 六、日 上午9:00和下午14:00 来老男孩这里学习(执行程序/server/script/oldboy.sh代替学习)。
    解答:       00 9,14 * * 6,0 /bin/bash /server/script/oldboy.sh

5.  请描述下列路径的内容是做什么的?
    /etc/sysctl.conf  linux系统内核参数配置文件
    /etc/rc.local   开机执行命令文件
    /etc/hosts    本地解析文件

6.  请说出下列正则表达式的含义
    ^  以什么开头
    $  以什么结尾
    .(点号)  匹配任意一个字符
    \    转义符
    *    匹配0个或多个前一个字符
    \{n,m\}  匹配前一个字符n次到m次
    [^t]  匹配除了t的字符
    ^[^t]  匹配以除了t的开头的字符

7.  vi命令考察,根据中文给出命令
    解答:

      退出保存  wq
      退出并强制保存,!为强制的意思      wq!
      强制退出,不保存    q!
      光标移动到文件的最后一行  G
      光标移动到文件的第一行   gg    
      从光标所在位置将光标移动到当前行的开头  HOME   0       或者shift +^
      从光标所在位置将光标移动到当前行的结尾       END $     或者shift+ $
      取消上一次的动作  u       
      删除一行   dd
      向下搜索     n
      向上搜索    N

8.  授权oldboy及其子目录755的权限,请给出命令。
      解答:   chmod -R 755 oldboy 

9.  把oldboy及其子目录的属主改为oldboy,组改为root,请给出命令。
      解答:   chown -R oldboy.root oldboy

10.  描述下umask的作用
      解答: 文件预设权限,用来配置默认文件和目录的权限的指令

网络知识

    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状态,完成四次挥手。 

    TCP的十一种状态

     

第四关

笔试题

1.  查看当前系统每IP的连接数

    netstat -ntp | grep "ESTABLISHED" |awk -F '[ :]+' '{print $6}' | sort -r | uniq -c | sort -rn

2.  请列出以下服务使用的端口

    http  TCP80

    https  TCP443

    ftp  TCP21 20

    telnet  TCP 23

    ssh  TCP22

    rsync  TCP UDP 873

    dns  TCP 53  UDP53

    mysql    TCP 3306

    grep -wE "^(http|https|telnet|ssh|rsync|dns|mysql|ftp)" /etc/services 

3.  请列出linux系统下常用的几种文件系统格式

    ls /lib/modules/3.10.0-123.el7.x86_64/kernel/fs

-rw-r--r--. 1 root root 21765 6月 30 2014 binfmt_misc.ko
drwxr-xr-x. 2 root root 21 4月 15 2017 btrfs
drwxr-xr-x. 2 root root 26 4月 15 2017 cachefiles
drwxr-xr-x. 2 root root 20 4月 15 2017 cifs
drwxr-xr-x. 2 root root 22 4月 15 2017 cramfs
drwxr-xr-x. 2 root root 19 4月 15 2017 dlm
drwxr-xr-x. 2 root root 22 4月 15 2017 exofs
drwxr-xr-x. 2 root root 20 4月 15 2017 ext4
drwxr-xr-x. 2 root root 48 4月 15 2017 fat
drwxr-xr-x. 2 root root 23 4月 15 2017 fscache
drwxr-xr-x. 2 root root 34 4月 15 2017 fuse
drwxr-xr-x. 2 root root 20 4月 15 2017 gfs2
drwxr-xr-x. 2 root root 21 4月 15 2017 isofs
drwxr-xr-x. 2 root root 20 4月 15 2017 jbd2
drwxr-xr-x. 2 root root 21 4月 15 2017 lockd
-rw-r--r--. 1 root root 19541 6月 30 2014 mbcache.ko
drwxr-xr-x. 4 root root 4096 4月 15 2017 nfs
drwxr-xr-x. 2 root root 23 4月 15 2017 nfs_common
drwxr-xr-x. 2 root root 20 4月 15 2017 nfsd
drwxr-xr-x. 2 root root 4096 4月 15 2017 nls
drwxr-xr-x. 2 root root 23 4月 15 2017 pstore
drwxr-xr-x. 2 root root 24 4月 15 2017 squashfs
drwxr-xr-x. 2 root root 19 4月 15 2017 udf
drwxr-xr-x. 2 root root 19 4月 15 2017 xfs

如果记不得路径:只要记得linux内核命令,uname -r ,然后通过find找到内核这个目录,就能找到支持的文件系统。

       ext2,3,4都是带日志的文件系统。

       xfs

4.  ext与xfs有什么区别?

    xfs格式化速度快,ext格式化速度慢    

5.  在linux下给网卡的第一个口配置IP,网关和增加路由

      ifconfig eth0:1 172.16.1.100 netmask 255.255.255.0 up

      route add -net 10.0.0.0/24 gw 192.168.0.1 dev eth0

      route del -net 10.0.0.0/24 gw 192.168.0.1 dev eth0

6.  请详细描述请求DNS的过程,以访问baidu为例。

    hosts文件

    本地DNS服务器

    迭代查询

7.  介绍raid1,0,5工作原理。

    raid0

      优点:  容易扩展,读写性能高

      缺点:  坏一块,数据丢失

    raid1

      优点:  冗余  

      缺点:  容量少一半

    raid5

      优点:至少三块硬盘组成,允许坏一块硬盘        

 

      缺点:写入性能会有影响

    

8.  磁盘使用率检测   

#!/bin/bash
IP=`ifconfig ens160 | awk 'NR==2{print $2}'`
SPACE=`df -Ph | awk '{print int($5)}'`
for i in $SPACE
do
  if [ $i -ge 37 ]
  then
    echo "$IP disk is exceed."
  fi
done

9.  LVS  

    1.  LVS负载均衡策略

        NAT  Tunnel  DR

    2.  谈谈对LVS的理解

        LVS是一个基于四层的负载均衡软件。他有三部分组成:负载调度器,真实服务器,共享存储。

    3.  负载均衡的原理是什么

        客户端发送请求给负载均衡器,负载均衡器根据自己的调度算法,指定真实的服务器响应请求。

    4.  LVS由哪两部分组成

        ipvs和ipvsadm

        ipvs  一段代码工作在内核空间

        ipvsadm  工作在用户空间,用来管理ipvs,定义ipvs规则

    5.  与lvs相关的术语

        VIP  虚拟IP地址

        DIP  调度器IP地址

        RIP  真实服务器IP地址

        CIP  客户端IP地址

        DS  调度器

        RS  真实服务器

    6.  LVS-NAT模式的原理

        客户端以VIP作为目标IP地址,发送给负载均衡器;负载均衡器接收以后,查看自己的prerouting链,发现发送给自己本机的,就转给INPUT链,ipvs经过对比,把目标IP地址改为RIP地址,然后转给POSTROUTING链,POSTROUTING链转发数据包给RIP,RIP响应请求,然后返回数据包给DS。DS讲源IP地址改为VIP地址,发送给客户端。

    7.  LVS-NAT模式的特性

        1.   真实服务器的网关指向DIP

        2.  DIP和RIP必须在同一个网段

        3.  请求和响应都经过DS,DS容易成为瓶颈

    8.  LVS-DR模式的原理

        客户端以VIP作为目标IP地址,发送给负载均衡器;负载均衡器接收以后,查看自己的prerouting链,发现发送给自己本机的,就转给INPUT链,ipvs经过对比,把源mac地址修改为DS的mac地址,目标mac地址修改为RS的mac地址。由于DS和RS在同一个网络中,所以通过二层传输。POSTROUTING链检查目标MAC地址为RIP的mac地址,将数据包发往RS。RS响应请求包,从lo接口传送给eth0网卡向外发出。

    9.  LVS-DR模式的特性

        1.  DS和RS必须在同一个物理网络

        2.  请求报文经过DS,响应报文不经过DS

        3.  RS的lo接口配置VIP的IP地址

        4.  RS的网关不允许指向DIP

    10.  LVS的负载调度算法

        1.  rr  轮询

        2.  wrr  加权轮询

        3.  lc  最少连接

        4.  wlc  加权最少连接                    

        5.  sh  源地址哈希

        6.  dh  目标地址哈希

        7.  sed  最短期望延迟

        8.  LBLC  基于局部性的最少连接

        9.  LBLCR  带复制的基于局部性的最少连接

    11.  LVS与nginx的区别

        1.  一个四层,一个七层,LVS抗负载能力更强

        2.  LVS配置性低

        3.  LVS工作稳定

        4.  LVS无流量

        5.  LVS对网络要求比nginx高

     12.  负载均衡的作用

        1.  转发请求

        2.  后端服务器检测

        3.  后端服务器恢复添加

10.  Keepalive

    1.  什么是keepalive

        一个解决主机高可用问题的开源软件,核心功能是健康检查和故障切换,使用VRRP协议解决单点故障问题。      

    2.  如何理解VRRP协议

        虚拟路由冗余协议,早期用来解决单点路由故障问题。一组路由器中,有master和backup,当master不可用时,会从backup中重新选举出新的master,当原master恢复,新的master会自动退位。

    3.  keepalive工作原理

        keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。

    4.  出现脑裂的原因

        1.  心跳线链路问题

        2.  防火墙屏蔽VRRP协议通信

    5.  如何解决keepalive脑裂问题

        1.  多条心跳链路

        2.  做好监控keepalive

11.  Nginx

    1.  nginx的负载均衡调度算法

        rr

        wrr

        ip_hash

        least_conn

        fair

        url_hash

    2.  nginx负载均衡主要使用的模块

        upstream

        http_proxy_module                       

    3.  nginx如何实现四层负载均衡

        从nginx1.9开始,nginx新增一个模块stream,实现四层协议转发功能

    4.  为什么使用nginx

        1.  上万的高并发连接

        2.  占用内存少

        3.  配置简单

        4.  可以做web,做代理服务器,可以做缓存服务器

        5.  内置的健康检查功能

        6.  客户端是异步请求

    5.  nginx的性能为什么比apache高?

        nginx采用的是epoll模型,apache采用的select模型

    6.  epoll的组成       

epoll的接口非常简单,一共就三个函数:
1. int epoll_create(int size);
创建一个epoll的句柄,size用来告诉内核这个监听的数目一共有多大。
这个参数不同于select()中的第一个参数,给出最大监听的fd+1的值。
需要注意的是,当创建好epoll句柄后,它就是会占用一个fd值,在linux下如果查看/proc/进程id/fd/,
是能够看到这个fd的,所以在使用完epoll后,必须调用close()关闭,否则可能导致fd被耗尽。
2. int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
epoll的事件注册函数,它不同与select()是在监听事件时告诉内核要监听什么类型的事件,
而是在这里先注册要监听的事件类型。第一个参数是epoll_create()的返回值,
第二个参数表示动作,用三个宏来表示:
EPOLL_CTL_ADD:注册新的fd到epfd中;
EPOLL_CTL_MOD:修改已经注册的fd的监听事件;
EPOLL_CTL_DEL:从epfd中删除一个fd;
第三个参数是需要监听的fd,第四个参数是告诉内核需要监听什么事
3. int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int
timeout);
等待事件的产生,类似于select()调用。
参数events用来从内核得到事件的集合,maxevents告之内核这个events有多大,这个 maxevents的值不
能大于创建epoll_create()时的size,参数timeout是超时时间(毫秒,0会立即返回,-1将不确定,也
有说法说是永久阻塞)。
该函数返回需要处理的事件数目,如返回0表示已超时

    7.  nginx与apache的区别

        nginx是异步的epoll模型,apache是同步多进程模型

        稳定用apache,高性能nginx

    8.  nginx优化都有哪些

        反爬虫

        反盗链

        黑白名单

        防止DDos攻击,waf

        性能参数优化(cpu,进程数)

        隐藏版本信息

        设置开机启动

        访问控制

        gzip压缩

        expires缓存

        日志文件

        ssl优化

        站点目录权限控制

    9.  nginx常用模块

        http_core

        proxy

        upstream

        ssl

        upstream_check

        stream

        gzip

        access

        log

        fastcgi

    10.  nginx常用状态码

        502  错误网关,上游服务器无响应  

        501  服务器无法识别请求方式

        500  服务器错误

        504  网关超时,没有及时从上游服务器收到请求

        301  永久移动

        302  临时移动

        404  服务器找不到请求的网页

        403  服务器拒绝请求

    11.  worker支持的最大并发数        

        worker的连接数是2个时,最大并发数:(worker_connection * worker_processes) /2worker的连接数是4个时,最大并发数:(worker_connection * worker_processes) /4

    12.  配置nginx防盗链

vi /usr/local/nginx/conf/nginx.conf
location ~*\.(jpg|gif|swf)$ {
valid_referers none blocked *.test.com test.com;
if ($invalid_referer) {
rewrite ^/http://www.bt.com/error.png;
} 
}                      

12.  Tomcat

    1.  tomcat做哪些优化

        1.  运行模式

            采用nio模式

        2.  线程配置

            maxThreads="150"  表示同时处理150个连接,最大线程数,默认为200

            minSpareThreads="25"  表示即使没有人使用也开这么多空线程等待

            maxSpareThreads="75"  表示最多的空线程

            acceptCount="100"  当同时连接的人数达到maxThreads时,还可以接收排队的连接数量              

        3.  影响性能的配置

            1.  启用压缩                

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata" compressableMimeType="text/html,text/xml,application/javascript,text/css,text/plain,text/json"/>

            2.  禁用AJP连接器

    <!--
 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    -->                  

                AJP13是一个二进制的TCP传输协议,相比HTTP这种纯文本的协议来说,效率和性能更高,也做了很多优化。显然,浏览器并不能直接支持AJP13协议,只支持HTTP协议。
                所以实际情况是,通过Apache的proxy_ajp模块进行反向代理,暴露成http协议给客户端访问,
                主要应用场景就是动静分离时,两个服务器之间通信使用。

            3.  关闭域名解析

    <Connector port="8080" protocol="HTTP/1.1" enableLookups="false"
               connectionTimeout="20000"
               redirectPort="8443" />

            4.  关闭上传是否使用超时机制

                disableUploadTimeout=false

            5.  长链接保持时间

                connectionTimeout="20000"  单位毫秒,默认值60000毫秒

            6.  乱码问题

                URIEncoding="UTF-8"                           

        4.  优化jvm

            配置bin/catalina.sh

            -Xms  初始Heap内存大小

            -Xmx  最大Heap内存大小

            -XX:NewSize=512M  表示新生代初始内存的大小,应该小于-Xms的值

            -XX:MaxNewSize=1024M  表示新生代最大的内存大小,应该小于-Xmx的值

            -XX:PermSize=1024m  表示持久代的大小

            -XX:MaxPermSize=1024m  表示i持久代的最大内存大小                                          

    2.  tomcat的工作模式

        1.  tomcat作为应用程序服务器,请求来自于前端的web服务器

        2.  tomcat作为独立服务器,请求来自于web浏览器

    3.  怎么监控tomcat的内存使用情况

        jconsole

          

        jvisualvm

          

        重点:使用这两个工具的前提,要在bin/catalina.sh文件中,增加参数:JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=1093 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.2.163"

    4.  tomcat的三个端口及作用

        shutdown  与关闭有关

        http  与浏览器访问有关

        ajp  与其他http服务器有关,如:apache

13.  Mysql

    1.  drop,delete和truncate删除数据的区别

        drop  释放整个表

        delete  删除部分数据,会记录到日志中

        truncate  删除全部数据,保留表结构,但是不记录到日志          

    2.  mysql主从复制原理       

        1)  master服务器上打开binlog记录功能。

        2)  在slave服务器执行start slave命令开启主从复制开关,开始进行主从复制。

        3)  slave的I/O线程会通过在master上已经授权的复制用户权限请求连接到master服务器,并请求从指定binlog日志文件的指定位置(日志文件名和位置就是在配置主从复制服务时执行change master命令指定的)之后开始发送binlog日志内容。

        4)  master服务器接收到来自slave服务器的I/O线程的请求后,master上负责复制的I/O线程会根据slave服务器的I/O线程请求的信息分批读取指定binlog日志文件指定位置之后的binlog日志信息,然后返回给slave端的I/O线程。返回的信息中除了binlog日志内容外,还有在master服务器端记录的新的binlog文件名称,以及在新的binlog中的下一个指定更新位置。

        5)  当slave服务器的I/O线程获取到master服务器上I/O线程发送的日志内容,日志文件及位置后,会将binlog日志内容依次写到slave自身的relay log,并将新的binlog文件名和位置记录到master-info文件中,以便下一次读取master新binlog日志时能够告诉master服务器从新binlog日志的指定文件及位置开始请求新的binlog日志内容。

        6)  slave的sql线程会实时监测relay log中的内容,把它解析成sql语句。       

    3.  mysql主从复制存在哪些问题

        1.  数据丢失,主库宕机

        2.  复制延时,从库延时          

    4.  mysql主从复制延迟的原因和解决方案

        1.  延迟的原因

            1.  主库并发比较高,产生的DDL数量超过了从库的一个sql线程所承受的范围

            2.  从库的大型查询语句产生了锁等待

            3.  网络抖动

        2.  解决方案

            1.  数据库做分库,做一个水平扩展

            2.  读写分离                                                                    

            3.  在数据库前面添加缓存层

            4.  不同业务的数据库放到不同的物理机器上

            5.  从库的机器性能高一点,可以减小延迟

            6.  从数据库设置sync_binlog=0

            7.  从数据库不添加log-slave-updates参数,从数据库从主数据库接收到的更新不计入它的二进制日志

            8.  直接关闭从数据库的binlog

            9.  使用并发复制            

    5.  mysql备份

        1.  物理备份

            xtrbackup            

        2.  逻辑备份 

            mysqldump

            mysqldumper

            mysqlpump

    6.  mysql索引

        普通索引

        唯一索引

        主键索引

        复合索引

    7.  如何加强mysql安全

        1.  服务器层面:做好访问控制,禁止互联网访问

        2.  mysql层面:做好权限控制和授权的客户端,以及配置文件bind,清理无用的账号和库,禁用.mysql_history文件,禁用local-infile

        3.  定期备份数据库

    8.  binlog的格式

        1.  Statement

           只记录执行的SQL,不需要记录每一行数据的变化,极大的减少了binlog的日志量,避免了大量的IO操作,提升了系统的性能

           由于只记录SQL,如果SQL中包含一些函数,可能会导致结果不一致

        2.  ROW

           不记录SQL语句上下文,只记录某一条记录被修改成什么样子

           日志量太大,会带来IO性能问题

        3.  Mixed            

           Statement和ROW的结合体

    9.  MyISAM与InnoDB的区别

        1.  InnoDB支持行级锁,MyISAM不支持

        2.  InnoDB支持事务,MyISAM不支持

        3.  MyISAM支持全文索引,而InnoDB不支持

        4.  InnoDB支持MVCC,而MyISAM不支持  MVCC多版本并发控制

        5.  InnoDB支持外键,而MyISAM不支持                               

    10.  mysql如何做主从数据一致性校验

        使用pt-table-checksum工具

        pt-table-checksum 是 Percona-Toolkit的组件之一,用于检测MySQL主、从库的数据是否一致。其原理是在主库执行基于statement的sql语句来生成主库数据块的checksum,把相同的sql语句传递到从库执行,并在从库上计算相同数据块的checksum,最后,比较主从库上相同数据块的checksum值,由此判断主从数据是否一致。检测过程根据唯一索引将表按row切分为块(chunk),以块为单位计算,可以避免锁表。检测时会自动判断复制延迟、 master的负载, 超过阀值后会自动将检测暂停,减小对线上服务的影响。

        mysqldiff  检查库表结构

14.  Redis

    1.  redis是单线程还是多线程

        redis6.0之后,多线程主要用于网络I/O阶段,执行阶段还是单线程

    2.  redis的使用场景

        缓存,分布式锁,排行榜,计数,消息队列,地理位置,访客统计

    3.  redis常见的数据结构

        字符串

        列表

        哈希

        集合

        有序集合                                        

     4.  redis持久化怎么做的?

        1.  RDB

            将redis在内存中的数据生成快照,并保存到硬盘中

        2.  AOF 

            实现需要三个步骤:命令追加,文件写入,文件同步

            AOF文件过大,redis会有自动重写AOF文件功能               

    5.  redis有哪些架构模式

        单机

        主从复制

        哨兵模式

        集群模式         

    6.  缓存雪崩

        什么是雪崩?

          redis挂掉了,请求全部走后端存储了。

        如何避免雪崩?

          1.  缓存建立高可用

          2.  需要对重要的资源进行隔离限流,Hystrix工具

          3.  提前演练,预案设定          

    7.  缓存穿透

        什么是缓存穿透?

          缓存层不命中。

          存储层不命中,不将空结果写回缓存。

          返回空结果。 

        如何避免穿透?

          1.  缓存空对象

              容易占用更多的内存空间,可以为这类数据设置过期时间

              缓存层和存储层的数据会有一段时间不一致              

          2.  布隆过滤器拦截

    8.  缓存击穿

        什么叫缓存击穿?

          热点key在失效的一瞬间,持续的高并发访问就击破缓存直接访问数据库,导致数据库负载过大

        如何避免缓存击穿

          1.  设置热点数据永不过期

          2.  互斥锁  

    9.  redis为什么这么快       

1、完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于 HashMap,HashMap 的优势就是查找和操作的时间复杂度都是O(1);
2、数据结构简单,对数据操作也简单,Redis 中的数据结构是专门进行设计的;
3、采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;
4、使用多路 I/O 复用模型,非阻塞 IO;
5、使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis直接自己构建了VM机制,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求

15.  Prometheus  

    1.  prometheus工作原理

        prmetheus server通过收集metric指标,使用prometheus进行存储,根据prometheus的告警规则,使用alertmanager进行警报的处理机制。

    2.  prometheus组件

        prometheus

        alertmanager

        exporter

        pushgateway                                                                     

        web UI

16.  Docker

    1.  Dockerfile中的COPY和ADD命令有什么区别?

        COPY的源只能是本地文件

    2.  容器与诉诸之间的数据拷贝命令

        docker cp /www 容器ID:目录路径

        docker cp 容器ID:目录路径 /www

    3.  Docker安全吗?

        采用namespace空间进行隔离,隔离性虽然不如虚拟机,但是仍然具有很高的安全性

    4.  如何将一台宿主机的docker环境迁移到另一台宿主机

        停止docker服务,将整个docker存储文件复制到另一台宿主机上

    5.  如何停止正在运行的所有容器

        docker kill $(docker ps -q)    

17.  k8S     

    1.  什么是k8s?

        一个基于容器技术的分布式系统平台,由google开源的容器集群管理系统。

        为容器化的应用提供部署运行,资源调度,服务发现和动态伸缩等服务。

    2.  k8s与容器的关系

        k8s是用来管理和编排跨主机的容器的工具

    3.  k8s都有哪些基础概念

        master节点

        node节点

        pod

        Deployment

        Service

        DNS

        label        

    4.  k8s都有哪些组件

        1.  master组件

            kube-apiserver  

              集群的统一入口,各组件协调者,以RESTful API提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给Etcd存储

            kube-controller-manager

              处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的

            kube-scheduler

              根据调度算法为新创建的pod选择一个node节点,可以任意部署,可以部署到同一个节点上,也可以部署到不同的节点上。

            etcd

              分布式键值存储系统。用于保存集群状态数据,比如:pod,service等对象信息

        2.  node组件

            kubelet

              是master在node节点上的agent

            kube-proxy

              在node节点上实现pod网络代理,在node节点上创建网络规则

            docker

              容器引擎   

    4.  k8s的优势与劣势

        1.  优势

            快速部署应用

            快速扩展应用

            轻量级

            开源

            弹性伸缩

            负载均衡

            节省资源,优化硬件资源的使用

        2.  劣势

            安装配置复杂

            管理服务复杂

    5.  kubec-proxy

        1.  作用

            kube-proxy运行在所有节点上,它监听apiserver中service和endpoint的变化情况,创建路由规则以提供服务IP和负载均衡功能。

        2.  原理

            1.  kube-proxy iptables

                通过API Server的Watch接口实时跟踪Service与Endpoint的变更信息,并更新对应的iptable规则,client的请求流量通过iptables的nat机制直接路由到目标pod                

            2.  kube-proxy ipvs               

                使用iptables的扩展ipset,ipset引入了带索引的数据结构,当规则很多时,可以高效地查找和匹配,减少性能损耗。

        3.  kube-proxy iptables和kube-proxy ipvs的异同

            1.  相同

                都是基于Netfilter实现的

            2.  不同            

                ipvs性能更优

                ipvs支持比iptables更复杂的复制均衡算法(最小负载,最少连接,加权)

                ipvs支持服务器健康检查和连接重试等功能

                可以动态修改ipset的集合

    6.  pod使用

        1.  pod状态

            Pending:  API Server已经创建pod,且pod内还有一个或多个容器的镜像没有创建,包括正在下载镜像的过程

            Running:  Pod内所有容器均已创建,且至少有一个容器处于运行状态,正在启动状态或正在重启状态

            Succeeded:  Pod内所有容器均成功执行退出,且不会重启

            Failed:  Pod内所有容器均已退出,但至少有一个容器退出为失败状态

            Unknown:  由于某种原因无法获取该pod状态

        2.  pod创建过程

            1.  客户端提交pod配置信息给API Server

            2.  API Server收到信息,通知controller-manager创建资源对象

            3.  controller-manager通过API Server将pod的配置信息存储到ETCD数据库中

            4.  kube-scheduler检测到pod信息会开始调度预选,过滤掉不符合pod资源配置要求的节点,挑选出适合运行pod的节点,然后将pod的资源配置单发送到node节点的kubelet组件上

            5.  kubelet根据调度器发来的资源配置单运行pod,运行成功后,将pod的运行信息返回给调度器,调度器将返回的pod运行状况的信息存储到etcd数据中心       

        3.  pod重启策略          

            1.  Always:  当容器停止,总是重建容器,默认策略  

            2.  OnFailure:  当容器异常退出时,才重启容器

            3.  Never:  当容器终止退出,从不重启容器

        4.  pod健康检查方式

        5.  pod探针的常见方式

        6.  pod调度方式

    

    

 

 

 

 

  

posted @ 2018-05-12 17:48  奋斗史  阅读(710)  评论(0)    收藏  举报