Linux面试题总结
1、简述Apache两种工作模式,以及它们之间的区别。
答:(1)prefork MPM使用多个子进程,每个子进程只有一个线程来处理一个http请求,直到这个TCP连接被释放。root主进程在最初建立startserver个子进程后,等待1秒钟,创建2个进程,再等待1秒钟,再创建4个进程,直到满足最小空闲进程的数量,这就是预派生的由来。这种模式可以不必在请求到来时再产生新的进程,从而提高了访问效率。
(2)worker模式使用多个子进程,每个子进程负责接收请求,该进程下多个线程来处理请求。由于线程之间共享地址空间,所以内存消耗小,而且资源利用率高,但是一个线程的崩溃会牵连到其他线程,所以一个程序在运行时必须被系统识别为每个线程都是安全的。
(3)woker和prefork的切换,cd /usr/sbin ,mv httpd httpd.prefork,mv httpd.worker httpd,service http restart
2、用iptables添加一个规则允许192.168.0.123访问本机3306端口
iptables -I INPUT -p tcp -s 192.168.0.123 -d 127.0.0.1 --dport 3306 -j ACCEPT
3、如何对一台Linux服务器进行系统性能调优,列举出参数。
答:主机的存活状态、系统负载值、CPU的使用率、磁盘IO量,swap进出量,网络流量,数据库的主从复制状态、LVS+keepalived的VIP。
4, DNS服务器的工作原理。
答:首先客户机的应用进程将待解析的域名放在DNS请求报文中,以UDP用户数据报方式发给本地域名服务器(使用UDP是因为它无连接,开销小),本地域名服务器查看缓存是否对对应域名和IP地址的映射关系,如果有,直接返回IP地址给主机,如果没有,就将向转发器发出查询请求,转发器是网络上的DNS服务器,目的是提高解析效率,如果连转发器也没有的话,就进行递归解析,转发报文从根域名服务器-顶级域名服务器-二级域名服务器等一直找到完整的域名后,进行反向回溯给交本地域名服务器,缓存后再由本地域名服务器将对应的IP地址放在应答报文中,从而主机得到IP地址即可通信。
5、修改第一块网卡的路径是什么。
/etc/sysconfig/network-scripts/ifcfg-eth 0
6、 简述I节点是什么,并说出Linux 文件系统通过i 节点把文件的逻辑结构和物理结构转换的工作过程?
答:I节点是一个多级索引的数据结构,它的基本思想是给每个文件赋予一张成为I节点的小表,在这张小表中列出了文件属性以及文件各数据块中在磁盘中的地址。那么它的工作工程:当需要访问文件时,内核查看文件目录项找到对象的文件名和I节点号,那么再通过这个I节点号来找磁盘的地址,实现逻辑结构和物理结构的转换,返回给数据给用户显示。
7、使用shell,建立classl用户组,再批量建立stu 1--stu30的用户,并指定用户组为
classl。
答:vi yonghu.sh
#!/bin/bash
groupadd class1
for((i=1;i<=30;i=i+1))
do
useradd stu$i -G class1
done
8、日常监控都需要监控哪些?
1)硬件:CPU:cat /proc/cpuinfo,内存: cat /proc/meminfo,硬盘:fdisk -l(dmesg是用来查看硬件信息的)
2)系统:负载:cat /proc/loadavg, uptime查看实时load average、swap,虚拟内存:vmstat(参数一s; 2 4),vmstat 5 5(表示在5秒时间内进行5次采样)。
系统日志:tail -f /var/log/messages
logwatch一print一range Today一service SSHD一service pam_unix
3)网络:Host_ Alive,Ping,端口,连接
9、如何将本地80端口的请求转发到8080端口,当前主机IP为192.168.16.1,其中本地网卡eth0。
答:#iptables -t nat -A PREROUTING -p tcp -i eth0 -d 192.168.16.1--dport
80 -j REDIRECT --to-port 8080
10、包过滤防火墙与代理应用防火墙有什么区别,能列举几种相应的产品吗?
答:①包过滤防火墙工作在网络协议IP层,它只对IP包的源地址、目标地址及相应端口进行处理,因此速度比较快,能够处理的并发连接比较多,缺点是对应用层的攻击无能为力。②应用代理防火墙将收到的IP包解封装成高层协议的通讯数据,比如http连接信息,因此能够对基于高层协议的攻击进行拦截。缺点是处理速度比较慢,能够处理的并发数比较少。事实上还有状态监测防火墙(ip_conntrack):状态监测防火墙是在当今企业中部署最为常见的。他们建立在基于防火墙保持每个活动连接状态信息的包过滤上。当有一个新的包到达防火墙时,过滤机制首先检查这个包是否是当前活动连接(前面已经授权过的)的一部分。只有当这个包没有出现在当前的活动连接列表里时,防火墙才会以它的规则库评估这个包。状态监测防火墙之所以如此常见是因为:它们是效率最高、性价比最高的防火墙,并且广泛适用于保护网络的边界。ASA、PIX、firewall
11、iptables是否支持time时间控制用户行为,如有请写出具体操作步骤
iptables -A INPUT -p ICMP --icmp-type 8 -m time --timestart 00:00:00 --timestop 23:59:59 --weekdays Mon -j DROP
限制在每个星期一的0点0分0秒到23点59分59秒这个时间段内,所有icmp协议报文的应答都会拒绝,
12、Linux常见打包工具并写相应解压缩参数?
答:①用tar调用bzip2将file1,file2,file3生成压缩包
tar -jcvf file.tar.bz2 file{1,2,3} 解压:tar -jxvf file.tar.bz2
②用tar调用gzip将file1,file2,file3生成压缩包
tar -zcvf file.tar.gz file{1,2,3} 解压:tar -zxvf file.tar.gz
③.用tar调用xz将file1,file2,file3生成压缩包
tar -Jcvf file.tar.xz file{1,2,3} 解压:tar -Jxvf file.tar.xz
13、当用户在浏览器当中输入一个网站,说说计算机对dns解释经过那些流程?注:本地dns还没有缓存。
答:a.用户输入网址到浏览器
b.浏览器发出DNS请求报文
c.计算机首先查询本机HOSTS文件,看是否存在,存在直接返回结果,不存在,继续转发请求报文
d.计算机按照本地DNS的顺序,向合法dns服务器查询IP结果,
e.合法dns返回dns结果给本地dns,管理该域的本地dns服务器缓存本结果,直到缓存时间过期,才再次查询此结果。
14、DNS什么使用TCP,什么时候使用UDP,为什么这么设计?
答:DNS在区域复制的使用TCP,因为主域名服务器传输数据到辅助域名服务器,必须得保证我们传输的数据是可靠的,是没有差错的;那么在浏览器发出DNS请求报文的时候使用UDP,原因是为了减少它的开销,无连接,把这个数据包扔了就走,什么都不用管。
15、请解释FTP控制连接的工作模式?
答:①在主动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的TCP 21号端口发起连接,然后开放N+1号端口进行监听,并向服务器发出PORT N+1命令(用来告诉服务器连接它的哪个新端口)。服务器接收到命令后,会用其本地的FTP数据端口(通常是20)来连接客户端指定的端口N+1,进行数据传输。
②在被动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,同时会开启N+1号端口。然后向服务器发送PASV命令,通知服务器自己处于被动模式(此端口是空闲的、可用的)。服务器收到命令后,会开放一个大于1024的端口P进行监听,然后用PORT命令通知客户端,自己的数据端口是P。客户端收到命令后,会通过N+1号端口连接服务器的端口P,然后在两个端口之间进行数据传输。
总的来说,主动模式的FTP是指服务器主动连接客户端的数据端口,被动模式的FTP是指服务器被动地等待客户端连接自己的数据端口。
附:传输模式是二进制模式和ASCII文本模式,常用ftp命令有get、put、ls、dir
16、vi file
50 16 * * * rm -r /abc/* #每天下午4:40删除
55 17 * * * umount /dev/hdc #卸载CDROM
0 8-18/1 * * * cut -f 1 /xyz/x1 >> /backup/bak01.txt
#每天的8:00-18:00时间段内每隔1小时,都会截取/xyz/x1的第一列(每行第一个域)的数据以追加的方式放入到/backup/bak01.txt文件中
50 5 * * 1 tar -zcvf backup.tar.gz /data 每周星期一的下午5:50将/data目录下所有文件打包并压缩
root@yhc#: crontab file #这样也能进行定时任务而不用edit
17、linux启动过程简述:加载BIOS、读取MBR、Boot Loader、加载内核、/sbin/init进程会读取/etc/inittab文件,并依据此文件来进行初始化工作、init进程执行rc.sysinit(加载一系列配置信息)、启动内核模块、执行不同运行级别的脚本程序、执行/etc/rc.d/rc.local(用来用户自定义启动信息)、执行/bin/login程序,进入登录状态。
启动第一步--加载BIOS
当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了。
启动第二步--读取MBR
众所周知,硬盘上第0磁道第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,别看地方不大,可里面却存放了预启动信息、分区表信息。
系统找到BIOS所指定的硬盘的MBR后,就会将其复制到0×7c00地址所在的物理内存中。其实被复制到物理内存的内容就是Boot Loader,而具体到你的电脑,那就是lilo或者grub了。
启动第三步--Boot Loader
Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。
Boot Loader有若干种,其中Grub、Lilo和spfdisk是常见的Loader。
我们以Grub为例来讲解吧,毕竟用lilo和spfdisk的人并不多。
系统读取内存中的grub配置信息(一般为menu.lst或grub.lst),并依照此配置信息来启动不同的操作系统。
启动第四步--加载内核
根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时,屏幕一般会输出“Uncompressing Linux”的提示。当解压缩内核完成后,屏幕输出“OK, booting the kernel”。
系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。至此,Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了。
启动第五步--用户层init依据inittab文件来设定运行等级
内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作。
其实/etc/inittab文件最主要的作用就是设定Linux的运行等级,其设定形式是“:id:5:initdefault:”,这就表明Linux需要运行在等级5上。Linux的运行等级设定如下:
0:关机
1:单用户模式
2:无网络支持的多用户模式
3:有网络支持的多用户模式
4:保留,未使用
5:有网络支持有X-Window支持的多用户模式
6:重新引导系统,即重启
关于/etc/inittab文件的学问,其实还有很多,在后序文章中设计到的,卖个关子,敬请期待,呵呵
启动第六步--init进程执行rc.sysinit
在设定了运行等级后,Linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它做的工作非常多,包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等。如果你有兴趣,可以到/etc/rc.d中查看一下rc.sysinit文件,里面的脚本够你看几天的
启动第七步--启动内核模块
具体是依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。
启动第八步--执行不同运行级别的脚本程序
根据运行级别的不同,系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。
启动第九步--执行/etc/rc.d/rc.local
你如果打开了此文件,里面有一句话,读过之后,你就会对此命令的作用一目了然:
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don’t
# want to do the full Sys V style init stuff.
rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里。
启动第十步--执行/bin/login程序,进入登录状态
此时,系统已经进入到了等待用户输入username和password的时候了,你已经可以用自己的帐号登入系统了。:
18、解释I节点在文件系统中的作用?
答:I节点一种逻辑结构和物理结构进行转换的多级索引文件结构。在Linux文件系统中,是以块为单位存储信息的,为了找到某个文件在存储空间的位置,用i节点对一个文件进行索引。I节点描述了文件属性和各数据块在磁盘上位置的一张小表。文件属性包括文件大小、创建时间、最后访问时间、存取权限等保护信息。但是i节点是不保存文件名的。文件名是保存在一个文件目录项中。每一个目录项中都包含了文件名和i节点。
19、 什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
答:链接分硬链接和符号链接。符号链接可以建立对于文件和目录的链接。符号链接可以跨磁盘分区,符号链接的文件类型位是I,链接文件具有新的i节点;硬链接不可以跨磁盘分区。它只能建立对文件的链接,硬链接的文件类型位是-号,且硬链接文件的i节点同被链接文件的i节点相同。
20、简述进程的启动、终止的方式以及如何进行进程的査看。
在 Linux中启动一个进程有手工启动和调度启动两种方式: (1) 手工启动
用户在输入端发出命令,直接启动一个进程的启动方式。可以分为:
①前台启动:直接在SHELL中输入命令进行启动。
②后台启动:启动一个目前并不紧急的进程,如打印进程。
(2) 调度启动
系统管理员根据系统资源和进程占用资源的情况,事先进行调度安排,指定任务运行的时间和场合,到时候系统会自动完成该任务。
经常使用的进程调度命令为:at、batch、crontab。进程查看ps -aux | grep httpd,进程终止kill-9 进程号。
21、Linux硬盘分了多少个块?
答:linux硬盘组织方式为:引导区、超级块、索引结点、数据块、目录块;其中超级块中包含了关于该硬盘或分区上的文件系统的整体信息,如文件系统的大小等,超级决包含了i节点表和空闲块表等的文件系统信息;超级块后面的数据结构是索引结点,包含了针对某一个具体文件的几乎全部信息,如文件的存取权、所有者、大小、建立时间以及对应的目录块和数据块等:数据块是真正存储文件内蓉的位置。但是索引结点中不包括文件的名字,文件名是放在目录块里的。目录块里包含有文件的名字以及此文件的索引结点编号。
22、NTFS与FAT的区别?
答:NTFS的特性相比FAT有很多优点。①提供文件和文件夹的安全性,支持加密和设置权限②高可靠性,NTFS是一种可恢复的文件系统,并且支持坏簇映射,检测出现错误的磁盘区域 ,标记并将数据存储在其他区域③NTFS支持磁盘配额管理,另外支持对文件、文件夹以及分区的压缩。④NTFS采用了更小的簇,4KB左右,避免了对磁盘空间的;浪费。那么FAT记录文件分配表的格式,缺点是仅用于单用户系统,而且没有防止碎片的措施,并且易受损害。
23、http://a.domain.com/1.html http://b.domain.com/1.html
http://c.domain.com/1.html http://a.domain.com/2.html
http://b.domain.com/2.html http://a.domain.com/3.html
统计网站出现的次数,并按数字由大到小进行排列?
答:awk ‘BEGIN{FS=”/”}{arr[$3]++}END{for (domain in arr){print arr[domain],domain}}’| sort -r
FS(Field separator)字符域分隔符表示操作的时候以什么为分割符,$3就是域名,-r是按自然数从大到小反向排序。
输出如下:
3 a.domain.com
2 b.domain.com
1 c.domain.com
24、如何用mysql 命令进行备份和恢复?,以test库为例
答:mysqldump备份:mysqldump -u root -p 123456 -h 127.0.0.1 test > testbackup.sql // -p是password,前面都是连着写的,输出数据库到test.sql文件中
mysqldump还原:mysql -u root -p 123456 -h 127.0.0.1 test< testbackup.sql //将test.sql文件输入到mysql数据系统中,进行恢复,恢复的时候直接加mysql,不用dump。直接跟数据库名称即可
25、如何挂载windows共享的目录?
答:mount -t cifs -o username=administrator,password=admin //192.168.1.1/share/ /windows/ #optional非强制的,可选的,CIFS是公共的或开放的SMB协议版本,Common Internet File System通用网络文件系统,并由Microsoft使用,/windows/是我们的挂载点。
26、源目节点的网络是互通的,最少列出五种传输文件的服务
答:NFS、FTP、Samba、通过云盘服务访问别人共享的文件相当于就使用http协议、rsync(remote synchronize)远程同步服务器。
27、请介绍Bind的智能DNS的原理?
答:智能DNS的功能是可以智能的判断访问网站的用户,然后根据不同的访问者把域名分别解析成不同的地址。如访问者是网通用户,智能DNS服务器会把域名对应的网通IP地址解析给这个访问者。如果电信用户,智能DNS服务器会把域名对应的电信IP地址解析给这个访问者。智能就体现在这儿。那么基本的原理就是在配置文件中设定了 view,在每个view 都有客户端的本地DNS负责的IP 地址段,bind 服务器根据请求解析客户端的本地DNS,匹配不同的view,再根据该view 的配置,找到相应的配置文件进行查询,将解析的IP地址结果返回给请求的客户端,相当于一个二级索引结构。
28、如果得到随机的字串,长度和字串中出现的字符表可定义,并将字串倒序显示,如
把0123456789 作为基准的字串字符表,产生一个6 位的字串642031,打印出的字串为
130246,使用awk编程。
答:awk -v count=6 'BEGIN
{srand( );str="0123456789";len=length(str);for(i=count;i>0;i--)
marry[i]=substr(str,int(rand()*len),1);for(i=count;i>0;i--)
printf("%c",marry[i]);printf("\n");for
(i=0;i<=count;i++) printf("%c",marry[i]);printf("\n")}'
838705
507838
29、如何查看当前Linux 系统的状态,如CPU 使用,内存使用,负载情况等.
答:Linux 系统中/proc是个伪文件目录,不占用系统空间,及时的反应出内存现在使用的进程情况......其中许多文件都保存系统运行状态和相关信息
对于/proc中文件可使用文件查看命令浏览cat其内容,文件中包含系统特定信息:
cpuinfo 主机CPU 信息
filesystems 文件系统信息
meminfo 主机内存信息
version Linux 内存版本信息
diskstatus 磁盘负载情况
另外top 命令可以动态的显示服务器健康状况的使用情况. free 命令呢可以查看真实使用的内存 一般用free -m 。使用lsof (list open files)是一个列出当前系统打开文件的工具使用lsof -i:8080, -i 用以显示符合条件的进程情况
ps -aux 可以查看详细的每个进程的使用状况,还有uptime查看负载命令
dmesg 也是常用来查看系统性能及硬件的命令
30、解释top命令和vmstat命令
答:top命令:查看CPU状态、内存状态、进程状态、交换分区状态,系统启动时间以及负载情况。vmstat 2 1现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况,2表示每个两秒采集一次服务器状态,1表示只采集一次。如果不加1就一直采集。
vmstat 5 6
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 3029876 199616 690980 0 0 0 2 3 2 0 0 100 0 0
31、用sed命令和cat将test.txt所有回车替换为空格?
答:cat test.txt | tr "\n" " " ;sed 's/\n/ /g' test.txt; route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1 ;
sed '1c Hi' ab #第一行代替为Hi
sed '1,2c Hi' ab #第一行到第二行代替为Hi
sed s/\'//g 替换单引号为空
格式:sed 's/要替换的字符串/新的字符串/g' (要替换的字符串可以用正则表达式)
32、匹配ipv4的正则表达式?
答:?代表匹配前面的子表达式零次或一次,,{n},n是一个非负整数,匹配确定的n次,2[0-4]/d取值范围是200-249,/d代表0-9的十进制,[01]代表0或1中的一个。
250——255,用正则可以写成:25[0-5];
200——249可以这样写:2[0-4]/d;
0——199有些麻烦,不过可以继续分拆,这样写起来更加简单明了,0——9、10——99、100——199,这样分开考虑,就得到了三个式子:/d、/d/d(有冗余)、1/d/d,这三个式子我们可以像合并同类项一样把它们合并到一起:[01]?/d?/d
这样,一段地址的表达式就是:2[0-4]/d |25[0-5]| [01]?/d?/d意思就是这三大类地址选一个即可
(2[0-4][0-9]|25[0-5]|[0-1]?[0-9]?[0-9].) 这是一个IP地址加上小点的表达式,逻辑或语句代表前面可有可不有,只要有一个就算成功。
匹配这样的地址有3个字段,最后一个字段不加小点
(2[0-4][0-9]|25[0-5]|[0-1]?[0-9]?[0-9].) {3}2[0-4][0-9]|25[0-5]|[0-1]?[0-9]?[0-9]
33、prefork和worker模式的切换?
答:1.将当前的prefork模式启动文件改名
mv httpd httpd.prefork
2.将worker模式的启动文件改名
mv httpd.worker httpd
3.修改Apache配置文件
vi /usr/local/apache2/conf/extra/httpd-mpm.conf
找到里边的如下一段,可适当修改负载等参数:
<IfModule mpm_worker_module>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
4.重新启动服务
/usr/local/apache2/bin/apachectl restart
即可换成worker方式启动apache2
34、请写出apache2.X版本的两种工作模式,以及各自工作原理。如何查看apache当前所支持的模块,并且查看是工作在哪种模式下?
答案:prefork的工作原理是:用进程的一个线程响应用户请求,控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止。这种预派生的模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。 worker是一个进程下多个线程来响应多个用户请求的MPM。由于共享系统资源,所以内存消耗小,但是一个线程崩溃会牵连当前所有线程。可以通过命令httpd -l,可以查看apache当前的模块,如果带有worker.c就是工作在worker模式下,如果有prefork.c就是工作在prefork的模式下。
35、如何看到用户登录日志?
答:more /var/log/secure是记录了所有用户登陆信息 ,who /var/log/wtmp可以干了些什么?root账户下输入su - username,切换到username下输入history,能看到这个用户历史命令,默认最近的1000条。还可以用last命令显示自从文件第一次创建以来登录过的用户
35、Linux中utmp,wtmp,lastlog,messages各文件的作用
1、有关当前登录用户的信息记录在文件utmp中;======who命令2、登录进入和退出纪录在文件wtmp中;========w命令3、最后一次登录文件可以用lastlog命令察看;4、messages======从syslog中记录信息
36、Apache nginx lighttpd 各优缺点,适合那些场合?
答:一般来说nginx主要用于负载均衡, 他对于处理静态页面比较好,其次,占用内存低。lighttpd存在对Flash streaming和对fastcgi的支持,占用内存也比较低,但是不如nginx那么稳定,apache庞然大物一个,模块化集成,功能强大,比较稳定。场合:Apache 后台服务器(主要处理php及一些动态请求 ),Nginx 前端服务器(利用它占用系统资源少得优势来处理静态页面大量请求),Lighttpd 图片服务器
37、RAID0,1,5,0+1的含义?
答:raid0 就是把多个(最少2个)硬盘合并成1个逻辑盘使用,数据读写时对各硬盘同时操作,不同硬盘写入不同数据,速度快。
raid1就是同时对2个硬盘读写(同样的数据)。强调数据的安全性。比较浪费。
raid5也是把多个(最少3个)硬盘合并成1个逻辑盘使用,数据读写时会建立奇偶校验信息,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。相当于raid0和raid1的综合。
raid10就是raid1+raid0,比较适合速度要求高,又要完全容错,最少需要4块硬盘(注意:做raid10时要先作RAID1,再把数个RAID1做成RAID0,这样比先做raid0,再做raid1有更高的可靠性)
38、dmesg命令中看到ip_conntrack:table full,dropping packet,如何解决?
答:原因是一些TCP连接从来就没有释放过,所以导致这种问题。首先 cat /proc/sys/net/ipv4/ip_conntrack_max(1): 加大ip_conntrack_max 值:
echo "81920" > /proc/sys/net/ipv4/ip_conntrack_max,这个效果是暂时的, 如果要每次开机都使用新的数值, 需将上述指令写入 /etc/rc.d/rc.local
(2)降低 ip_conntrack timeout 时间,
echo "600" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
39、常用命令实例:
(1)打印出含有空行的行号:grep -n ^$ b.bash |awk 'BEGIN{FS=":"}{print$1}'
其中分隔符等价于awk -F ":" '{print $1}’
(2)打印文件的第2行到第5行:sed -n '2,5p' b.bash
(3)把文件中第10行的sum改为yhc:sed '10s/sum/yhc/g' b.bash
(4)在匹配式样“done”的行之后插入一空行:sed '/done/G' b.bash (G附加暂存空间到模式空间)
(5)在文件第10行首添加5个空格:sed '10s/^/ /g' b.bash
(6)从a.log文件中提取包含“warning”或者“fatal”,同时不包含“IGNOR”的行,然后提取“:”分割的第五个字段
egrep 'WARNING|FATAL' a.log | egrep -v 'IGNOR' | awk -F ":" '{print $5}'
40、在Shell环境下,如何查看远程Linux系统运行了多少时间?
答:ssh user@被监控主机ip "uptime"
在每个月的第一天备份并压缩/etc目录下的所有内容,存放在/root/backup目录下,文件名为yymmdd_etc,shell程序fileback.sh存放在/usr/bin目录下?
#!/bin/bash
filename=`date +%y%m%d`_etc.tar.gz #date +%y%m%d直接就能输出160612
cd /etc
tar -zcvf $filename *
mv $filename /root/backup/ #必须先要创建这个文件才行。
#echo * * 1 * * root ./fileback.sh & >>/etc/crontab
答:(1)DNAT模式:画图说明
(2)隧道模式:调度器在数据报文的头部再添加一个IP地址的,类似于在VPN中, 公有IP封装在外,私有IP在内,RS收到后再进行解封装,这种情况主要用于远程站点,比如说有台服务器部署在美国,他要求调度器和RS都要支持隧道协议。
(3)DR直接路由模式,要求RS和调度器共享一个VIP,并且他们的真实IP都处于同一个网段,以便发出ARP请求,在调度器的出接口将目的MAC地址替换为RS的目的MAC地址并转发出去,RS收到数据包处理后,直接返回客户端,不经过调度器了。
调度算法分为静态调度和动态调度,比如轮询和加权最少连接。
42、linux上进程有5种状态:
1. 运行(正在运行或在运行队列中等待)
2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)
43、30道面试题
netstat -n | awk '/^tcp/ {++b[$NF]} END {for(a in b) print a, b[a]}'
(2)、linux如何挂载windows的共享文件夹
mount -t cifs -o username=WindowsLogin,password=passwordinWindows//16.187.190.50/test /mnt/ (-o optional 可选的)
(3)统计出apache的access.log中访问量最多的5个IP:
cat access_log | awk '{print $1}' | sort | uniq -c | sort -n -r | head -5
(uniq命令可以去除排序过的文件中的重复行,-c :进行计数,sort -n,你有没有遇到过10比2小的情况。我反正遇到过。出现这种情况是由于排序程序将这些数字按字符来排序了,排序程序会先比较1和2,显然1小,所以就将10放在2前面。我们如果想改变这种现状,就要使用-n选项,来告诉sort,“要以数值来排序”,-r代表降序排序)
(4)ps aux 中的VSZ代表什么意思,RSS代表什么意思
VSZ:虚拟内存集,进程占用的虚拟内存空间
RSS:物理内存集,进程占用实际物理内存空间
a 显示所有与终端相关的进程,由终端发起的.
x 显示所有与终端无关的进程.
u 显示用户导向的用户列表.
(5)Linux系统的开机启动顺序
加载BIOS–>读取MBR–>Boot Loader–>加载内核–>用户层init根据inittab文件来设定系统运行的等级(一般3或者5,3是多用户命令行,5是界面)–>init进程执行rc.syninit–>启动内核模块–>执行不同级别运行的脚本程序–>执行/etc/rc.d/rc.local(本地运行服务)–>执行/bin/login,就可以登录了。
(6)保存当前磁盘分区的分区表
dd 命令(diskcopy):指定大小的块拷贝一个文件,在复制的同时进行转换。
dd if=/dev/sda of=./mbr.txt bs=1 count=512
(7)符号链接与硬链接的区别
我们可以把符号链接,也就是软连接 当做是 windows系统里的 快捷方式。
硬链接 就好像是 又复制了一份.
ln 3.txt 4.txt 这是硬链接,相当于复制,不可以跨分区,但修改3,4会跟着变,若删除3,4不受任何影响。
ln -s 3.txt 4.txt 这是软连接,相当于快捷方式。修改4,3也会跟着变,若删除3,4就坏掉了。不可以用了。
我们一般通过hexdump命令 来查看二进制文件的内容。
(9)在1-39内取随机数
echo $[$RAMDOM %40] ,RANDOM 随机数,%39 取余数
(10)显示/etc/inittab中以#开头,且后面跟了一个或者多个空白字符,而后又跟了任意非空白字符的行
grep "^# \{1,\} [^ ]" /etc/initab
(11)显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行
grep “\:[0-9]\{1\}}\:” /etc/inittab #{1}确定前面的匹配一次
(12)怎么把自己写的脚本添加到服务里面,即可以使用service命令来调用?
mv test /etc/init.d/ chmod +x /etc/init.d/test chkconfig –add test service test start
写一个脚本,命名为test,最后chkconfig test on所有等级运行时都开启test服务
(13)1)第一个参数为URL,即可下载的文件;第二个参数为目录,即下载后保存的位置;2)如果用户给的目录不存在,则提示用户是否创建;如果创建就继续执行,否则,函数返回一个51的错误值给调用脚本;3)如果给的目录存在,则下载文件;下载命令执行结束后测试文件下载成功与否;如果成功,则返回0给调用脚本,否则,返回52给调用脚本
#!/bin/bash
#function:download a onefile
url=$1
dir=$2
download()
{
[ ! -d $dir ] && read -p "no such file,do you want to creat it?(y/n)" answer
if[ $answer eq "y"|"Y" ];then
mkdir ./dir/
else
exit 51
fi
cd $dir #进入该目录就能自动保存文件
wget $1>&/dev/null
[ $? eq 0 ]&&exit 0 || exit 52
}
download $url $dir #调用此函数
[ $# -ne 2 ]&& echo "Usage:sh $0 URL,directory"
(14)、将文件file1的前20行、文件file2的最后15行合并成一个test?
head -20 file1>test && tail -15 file2 >> test
(15)、移动.txt文件,并按大小排序显示
#!/bin/bash
for file in `ls ./*.txt`
do
mv $file /tmp/
done
ls -al /tmp/ | sort -nr -k5 key位置
(16)设置DNS、网关
echo "nameserver 202.16.53.68" >> /etc/resolv.conf
route add default gw 192.168.1.1
(17)比如两个文件file1和file2,删除两个文件中共同的部分,留下两个文件中独自有的部分
第一种:grep -v -f file1 file2 && grep -v -f file2 file1 -v表示反向匹配invert match,前一部分输出文件2中的内容,但是剔除包含在文件1中的内容,f指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式
第二种:awk '{print $0}' file1 file2|sort|uniq -u >1.txt表示依次读取file1 file2,打印出每行,NR是行号,$0代表整行。命令uniq,进行报告或者忽略重复的行,参数-u,表示只是打印出唯一的行
第三种:comm -3 file1 file2 默认输出有三列:只在file1中有的行、只在file2中有的行、在file1和file2中共有的行。有参数-1 -2 -3,分别来抑制输出对应的列,解决一切疑难杂症
(18)获取远程服务器的主机名
ssh 192.168.1.1 cat /etc/sysconfig/network |awk -F “=”’/HOSTNAME/ {print $2}’
(19)删除指定时间之前的文件
第一种:location=”/root/sqlback”,find $location -mtime +30 -type f |xrags rm -f删除30天前的东西。再加入定时任务文件crontab -e :10 4 1 * * /bin/bash deletesqlback.sh
第二种:find /root/sqlback/ -mtime +30 -type f -name *.gz -exec rm -f {} \;
(20)取出两个文件的并集(重复的行只保留一份)
cat file1 file2 | sort | uniq
取出两个文件的交集(只留下同时存在于两个文件中的文件)
cat file1 file2 | sort | uniq -d(repeated只输出重复的行)
删除交集,留下其他的行
cat file1 file2 | sort | uniq –u(uniq只显示唯一的行)
(21)通过apache访问日志access.log 统计IP和每个地址访问的次数,按访问量列出前10名。
cat /var/log/httpd/access_log |awk ‘{print $1}’|sort -r |head -10 |uniq -c
uniq -c :uniq本身具有输出功能,并且-c选项对输出结果相同行的次数统计
(22)、编写IPTABLES使用内网某台机器的80端口可以在公网访问,假设公网IP为10.10.1.1 ,实现192.168.1.0/24段的NAT?
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to 10.10.1.1
( 1.PREROUTING:可以在这里定义进行目的NAT的规则,因为路由器进行路由时只检查数据包的目的ip地址,所以为了使数据包得以正确路由,我们必须在路由之前就进行目的NAT; 2.POSTROUTING:可以在这里定义进行源NAT的规则,系统在决定了数据包的路由以后在执行该链中的规则。)
44、你觉得服务器通常会出现哪些故障,请试着举例说出解决思路?
答:(1)系统无法正常启动
a、grub损坏(MBR损坏、grub配置文件丢失)
b、某文件系统无法正常挂载、驱动不兼容
c、因为某个自启服务故障,从而导致无法启动系统
d、用户无法登陆系统(bash程序损坏)
e、开机发出滋滋滋的响声(内存条接触不好,硬盘扇区损坏)
(2)机器频繁重启、风扇故障、电源不供电
(3)外网无法访问自己(涉及到路由交换、DNS、物理线路、防火墙策略问题)
解决思路:①观察服务器故障现象,注意报错消息②查看相应的系统日志,排障由广到深,
逐步缩小范围③理解故障发生的原因最好的办法是人为使其重现故障,涉及到修改文件时,必须备份原文件,或者将这个故障机器的文件与正常运作的机器的文件进行对比,最好还原为缺省配置。平时做的准备工作也很重要,不要经常更新为好,备份工作的习惯更是要深入到灵魂,条件反射。
答:一是网络基础设施:保障物理上的安全,如机房、服务器、路由交换设备、用户PC正常运作;二是网络操作系统:防漏洞、防入侵、使用权限、密钥管理;三是网络服务:用户身份认证、安装配置、排障;四是用户操作使用培训教育;五是制定完善的网络运营维护文档、日志管理;六是系统备份、数据灾难恢复机制,这也是最难的一点。
46、有多台服务器需部署相同应用文件,文件会持续更新,你用什么方式实现不同服务器间的文件同步?
答:这个问题很常见,可是又没有很完美的解决方案。最直观的想法是写入第三方云平台,只要联网,知道用户密码,就能实现多点登录这个账号;第二个方案,参考一下DNS的主域名服务器和辅助域名服务器的区域复制功能,能不能有所想法。第三个方案,我想这个同步问题早就被人研究了,一定有其他大公司开发出了同步备份系统软件,我们只需要去搜一下就可以去使用了,可能要花点租金,但是值得。比如filegee企业文件同步备份系统、rsync软件。
47、64位和32位操作系统有何不同?
答:(1)很明显,运算速度不同,即CPU处理能力64位比32位高一倍
(2)64位操作系统只能安装在64位的计算机上,而32位操作系统既能安装在32位计算机,又能安装在64位的计算机上
(3)计算机的地址位宽会影响虚拟内存的大小和寻址能力
* 如果要对32位系统进行扩展内存,使用PAE物理地址扩展技
48、chroot /mnt/sysimage做何理解?有何作用?
答:将/mnt/sysimage作为根目录,原有系统的根目录都被挂载到了/mnt/sysimage目录下。在经过 chroot 之后,在新根下将访问不到旧系统的根目录结构和文件,这样就增强了系统的安全性。chroot 的作用就是切换系统的根位置,而这个作用最为明显的是在系统初始引导磁盘的处理过程中使用,从初始 RAM 磁盘 (initrd) 切换系统的根位置并执行真正的 init。另外,当系统出现一些问题时,我们也可以使用 chroot 来切换到一个临时的内存系统。
49、Nginx相对于Apache优点:
1)高并发响应性能非常好,官方Nginx处理静态文件并发5w/s
2)反向代理性能非常好。(可用于负载均衡)
3)内存和cpu占用率低。(为Apache的1/5-1/10。)
4)功能较Apache少(常用功能均有)
5)对php可使用cgi方式和fastcgi方式。
50、cgi和fastgcgi的区别?
答:首先CGI是用来web服务器进程和动态网页程序交互的一种协议,fastcgi和其原理一样,不同的是fastcgi处理完一个请求后不会终止整个进程,而是出于挂起状态等待下一个请求的到来,这样它就避免了像cgi那样频繁创建进程,从而提高它的访问效率。
答:(1)进程:子进程是父进程的复制品。
(2)线程:一个进程可以容纳多个线程,相对进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享资源,但拥有自己的栈空间,拥有独立的执行序列。两者都可以提高程序的并发度,提高程序运行效率和响应时间。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。根本区别就一点:用多进程每个进程有自己的地址空间(address space),线程则共享地址空间。所有其它区别都是由此而来的:
(1)速度:线程产生的速度快,线程间的通讯快、切换快等,因为他们在同一个地址空间内。(2)资源利用率:线程的资源利用率比较好也是因为他们在同一个地址空间内。
(3)同步问题:线程使用公共变量/内存时需要使用同步机制还是因为他们在同一个地址空间内。
52、time_filename.txt 改成filename_time.txt。例如20111111_me.txt改成me_201111111.txt要如何修改?
答:#! /bin/sh
for eachfile in `ls -l`
do
filename=${eachfile%.txt}
filehead=`echo $filename | awk -F _ '{print $1 }'`
filelast=`echo $filename | awk -F _ '{print $2 }'`
mv $filename.txt ${filelast}_$filehead.txt
done
53、线程的优缺点是什么?什么情况不用线程?什么情况使用线程提高效率?
答:优点:相比进程,线程是一个更接近执行体的概念,一个进程内可以拥有多个线程,他们可以并发运行,共享地址空间,而且线程产生的速度快,线程调度之间切换也快,那么因为共享地址空间体现的优点是:系统开销小,资源率利用比较高。
缺点:线程之间的同步机制非常繁琐,(互斥锁、读写锁、条件变量、线程信号),线程之间也会发生死锁,一个线程崩溃的时候 ,会牵连到其他线程。
使用线程的情况:线程适合在对称多处理机上运行
54、buffer和cache有何区别?
答:缓存是用来加速从硬盘中读取数据的,一个程序读取了一个数据,先放在缓存里,下一个程序再来需要的时候,直接调用缓存即可,因为很显然内存的存取速度要大于硬盘嘛,而缓冲是用来加速向硬盘写入数据的,我保存数据到硬盘,不是立刻生效,而是在内存缓冲积累到一定程度后,再全部放入硬盘,避免硬盘被频繁操作,从而影响系统的运行情况。他们二者本质都是内存,不能被进程调用,只能被Linux内核使用。
55、 有一web服务器,一天某用户投诉上某个网站速度很慢,如果你是服务器的管理员,请问 你如何查找原因?
答:首先我自己要试一下访问这个网站的速度如何?从而判断是客户端那边有问题还是服务端有问题,因为客户端涉及到网络拥塞和DNS解析的问题。那么我主要负责服务端这边的问题,如果我这边也不行的话,先从这台主机的系统本身故障入手,先看日志/var/log/messages,如果日志没什么反应的话,我再去看web服务日志的情况,看是不是有恶意访问,比如DDOS攻击,造成正常用户无法得到应答,如果这边也没问题的话,就要涉及到PHP响应慢和MySQL响应慢的问题了。