一、Linux的启动过程?

  1. 开机自检服务器主机开机以后,将根据主板BIOS(Basic Input/Output System,基本输入输出系统)中的设置对CPU、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多数时候会移交给本机硬盘。

  2. MBR引导:当从本机硬盘中启动系统时,首先根据硬盘第1个扇区中MBR(Master Boot Record,主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据MBR记录中的引导信息调用启动菜单(如GRUB)。

  3. GRUB菜单:对于Linux系统来说,GRUB算是使用最为广泛的多系统引导器程序了。系统控制权传递给GRUB以后,将会显示启动菜单提供给用户选择,并根据所选项(或采用默认值)加载Linux内核文件,然后将系统控制权转交给内核。

  4. 加载Linux内核:Linux内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度。内核接过系统控制权以后,将完全掌控整个Linux操作系统的运行过程。在RHEL6系统中,默认的内核文件位于"/boot/vmlinuz-2.6.32-431.e16.x86_64"。

  5. init进程初始化:为了完成进一步的系统引导过程,Linux内核首先将系统中的"/sbin/init"程序加载到内存中运行(运行中的程序称为进程),init进程负责完成一系列的系统初始化过程,最后等待用户进行登录。


二、linux系统监控命令,查看cpu负载内存等情况

top命令是Linux下常用的性能分析工具,比如cpu、内存的使用,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。 

top显示系统当前的进程和其他状况,是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止. 比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。

top命令参数

d:指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。

p:通过指定监控进程ID来仅仅监控某个进程的状态。

q:该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。

S:指定累计模式

s:使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。

i:使top不显示任何闲置或者僵死进程。

c:显示整个命令行而不只是显示命令名

常用操作

top  //每隔5秒显式所有进程的资源占用情况

top -d2//每隔2秒显式所有进程的资源占用情况

top -c//每隔5秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名)

top -p12345 -p6789//每隔5秒显示pid是12345和pid是6789的两个进程的资源占用情况

top -d2 -c -p123456//每隔2秒显示pid是12345的进程的资源使用情况,并显式该进程启动的命令行参数


三、查看网络流量的命令

watch -n 1 "/sbin/ifconfig eth0 | grep  bytes"

Linux运维必会的面试题(二)_第1张图片

四、docker四中网络模式

  1. host模式如果启动容器的时候使用 host 模式,那么这个容器将不会获得一个独立的 Network           Namespace,而是和宿主机共用一个 Network Namespace。容器将不会虚拟出自己的网卡,配置自己的 IP 等,而是使用宿主机的 IP 和端口。

  2. container模式这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过 lo 网卡设备通信。

  3. none模式这个模式和前两个不同。在这种模式下,Docker 容器拥有自己的 Network Namespace,但是,并不为 Docker容器进行任何网络配置。也就是说,这个 Docker 容器没有网卡、IP、路由等信息。需要我们自己为 Docker 容器添加网卡、配置 IP 等。

  4. bridge模式:bridge 模式是 Docker 默认的网络设置,此模式会为每一个容器分配 Network Namespace、设置 IP 等,并将一个主机上的 Docker 容器连接到一个虚拟网桥上。当 Docker server 启动时,会在主机上创建一个名为 docker0 的虚拟网桥,此主机上启动的 Docker 容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。接下来就要为容器分配 IP 了,Docker 会从 RFC1918 所定义的私有 IP 网段中,选择一个和宿主机不同的IP地址和子网分配给 docker0,连接到 docker0 的容器就从这个子网中选择一个未占用的 IP 使用。如一般 Docker 会使用 172.17.0.0/16 这个网段,并将 172.17.0.1/16 分配给 docker0 网桥(在主机上使用 ifconfig 命令是可以看到 docker0 的,可以认为它是网桥的管理接口,在宿主机上作为一块虚拟网卡使用)

    docker常用命令:

1.docker version  //查看docker的版本号,包括客户端、服务端、依赖的Go等

2.docker info  //查看系统(docker)层面信息,包括管理的p_w_picpaths, containers数等

3.docker search  //在docker index中搜索p_w_picpath

4.docker pull  //从docker registry server 中下拉p_w_picpath

5.docker push  //推送一个p_w_picpath或repository到registry

6.docker push:TAG  //同上,指定tag 

7.docker inspect  //查看p_w_picpath或container的底层信息

8.docker p_w_picpaths  //查看本机p_w_picpaths

9.docker p_w_picpaths –a  //列出所有的p_w_picpaths

10.docker ps   //默认显示正在运行中的container 


六、docker怎么实现容器间的独立

使用核心技术Namespaces

1.pid namespace:不同用户的进程就是通过pid namespace 隔离开的,且不同 namespace中可以有相同pid。所有的LXC进程在docker中的父进程为docker进程,每个lxc进程具有不同的 namespace 。

2.net namespace:有了pid namespace, 每个 namespace 中的pid能够相互隔离,但是网络端口还是共享 host 的端口。网络隔离是通过 net namespace 实现的,每个 net namespace 有独立的  networkdevices, IP addresses, IP routing tables, /proc/net  目录。这样每个 container 的网络就能隔离开来。docker默认采用veth的方式将 container 中的虚拟网卡同 host 上的一个docker bridge: docker0 连接在一起。

3.ipc namespace:container中进程交互还是采用linux常见的进程间交互方法 (interprocess communication - IPC),包括常见的信号量、消息队列和共享内存。container 的进程间交互实际上还是host 上具有相同pid namespace 中的进程间交互。

4.mnt namespace:类似chroot,将一个进程放到一个特定的目录执行。mnt namespace 允许不同 namespace 的进程看到的文件结构不同,这样每个 namespace  中的进程所看到的文件目录就被隔离开了。在container里头,看到的文件系统,就是一个完整的linux系统,有/etc、/lib 等,通过chroot实现。

5.uts namespace:UTS("UNIX Time-sharing System")namespace 允许每个 container 拥有独立的 hostname 和 domain name, 使其在网络上可以被视作一个独立的节点而非 Host 上的一个进程。

6.usernamespace:每个 container 可以有不同的 user  和  groupid,  也就是说可以在 container 内部用 container 内部的用户执行程序而非 Host 上的用户。


七、实现高可用的工具有哪些?

1.hearbeat

2.keepalived

...


八、MySQL数据库备份工具?

MySQLdump工具:

1.是mysql自带的备份工具,目录在bin目录下面:/usr/local/mysql/bin/mysqldump,支持基于innodb的热备份。但是由于是逻辑备份,所以速度不是很快,适合备份数据比较小的场景。Mysqldump完全备份+二进制日志可以实现基于时间点的恢复。

2.是 mysql 用于备份和数据转移的一个工具。它主要产生一系列的 SQL 语句,可以封装到文件,该文件包含有所有重建你的数据库所需要的 SQL 命令如 CREATE DATABASE,CREATE TABLE,INSERT 等等。可以用来实现轻量级的快速迁移或恢复数据库。

3.是将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。

4.数据库导出对象可以针对单个表、多个表、单个数据库、多个数据库、所有数据库进行导出的操

作。

percona提供的xtrabackup工具:

Xtrabackup 实现是物理备份,而且是物理热备

1.支持innodb的物理热备份,支持完全备份,增量备份,而且速度非常快,支持innodb存储引起的数据在不同数据库之间迁移,支持复制模式下的从机备份恢复备份恢复,为了让xtrabackup支持更多的功能扩展,可以设立独立表空间,打开innodb_file_per_table功能,启用之后可以支持单独的表备份。

2.(1)备份过程快速、可靠;

   (2)备份过程不会打断正在执行的事务;

   (3)能够基于压缩等功能节约磁盘空间和流量;

   (4)自动实现备份检验;

   (5)还原速度快。


九、awk和sed的区别?

awk:

awk是一种程序语言,对文档资料的处理具有很强的功能。awk擅长从格式化报文或从一个大的文本文件中抽取数据。

awk的命令格式为:

awk [-F filed-separator] “commands” input-file(s)

awk将一行文字按分隔符(filed-separator)分为多个域,依次记为$ 1,$ 2 . . . $ n。$0代表所有域值。因此awk更适合于以域为单位来处理文件。加之ARGIND等内置变量,使awk能处理多个文件。典型的应用为查找一个文件中的某个字段是否在另一个文件中出现


sed:

sed是一个精简的、非交互式的编辑器。它能执行与编辑vi和emacs相同的编辑任务,但sed编辑器不提供交互使用方式,只能在命令行下输入编辑命令。

sed的命令格式为:

sed [options] 'command' file(s)  

sed [options] -f scrīptfile file(s)  

作为编辑器,当然少不了插入(a/、i/)、删除(d)、查找替换(s)等命令。

如果文件是格式化的,即由分隔符分为多个域的,优先使用awk

awk适合按列(域)操作,sed适合按行操作

awk适合对文件的抽取整理,sed适合对文件的编辑。


十、cacti报警已经知道了,怎么关闭报警?

将“Threshold Enabled”前面选项框中的勾去掉,即disabled阈值,当达到设置的告警阈值也不报警。