面试题--乱1
1,Linux服务器运行中会在哪些地方产生瓶颈?如何测试这些瓶颈
磁盘i/o,用dd命令可以简单测试磁盘读写速度,也可以用vmstat 1命令査看wa列是否很高
査看cpu负载的命令及用法,要考虑系统有多个cpu的情况
top査看cpu的情况,top回车后按1可以査看到所有cpu的使用情况•
査看磁盘负载,内存使用的命令:
使用iotop命令可以査看进程对磁盘的读写速度
free -m命令可以査看内存的使用,我们需要看第二行的free列
vmstat 1命令可以査看系统的瓶颈点,当内存不足时,则swpd列会有较大的数值,并且在不断增加,同时si so两列的数值也在不断变化,如果磁盘有负载,wa列数值会偏高.
2,如何记录一个前台执行的非守护进程的执行时间,程序执行的时间会分为几个部分
time command ;程序执行时间会分为三部分,一个是real time,一个是user —个是sys
1) real是时钟时间-程序从开始至结束的总时间,他包括期间其他进程所占用的时间片和进程被阻塞的时间(如10等待的时间〉
2) user被测试程序在用户棋式下所花的CPU时间,他是进程执行的正真的CPU时间.其他进程调度的时间片以及阻塞(如10)的时间不包含在内
3) sys是进程在内核中所花费的CPU时间。他表示进程在内核调用中所花的CPU时间,而程序的库调用仍然运行在用户空间下user+sys表示程序所执行的CPU时间(不包括10以及其他进程的CPU时间).
3,什么是守护进程
守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。由于在linux中,每个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端被称为这些进程的控制终端,当控制终端被关闭的时候,相应的进程都会自动关闭。但是守护进程却能突破这种限制,它脱离于终端并且在后台运行,并且它脱离终端的目的是为了避免进程在运行的过程中的信息在任何终端中显示并且进程也不会被任何终端所产生的终端信息所打断。它从被执行的时候开始运转,直到整个系统关闭才退出。
4,常用的网络连通性测试工具为ping和traceroute
1) ping:网络上的机器都有唯一确定的IP地址,我们给目标IP地址发送一个数据包,对方就要返回一个同样大小的数据包,根据返回的数据包我们可以确定目标主机的存在,可以初步判断目标主机的操作系统等。
2) traceroute: traceroute 是利用ICMP 及IP 头部的TTL。首先,traceroute 送出一个TTL 是1的IP数据包(其实,每次送出的为3个40字节的包,包括源地址,目的地址和包发出的时间标签)到目的地,当路径上的第一个路由器收到IP数据包时,将TTL减1»此时,TTL变为0,所以将该路由器会将此IP数据包丢掉,并返回一个ICMP数据包(包括发IP 包的源地址,IP包的所有内容及路由器的IP地址),当traceroute收到这个消息后,接着继续发生TTL为2的IP数据包给第二个路由器。以此类推,直到IP数据包达到最后一台路由器时,会返回一个ICMP echo reply的数据包
Linux如何挂载windows下的共享目录?
mount.cifs /IP地址/server/ /mnt/server -O user=administrator password=yourpasswd
查看http的并发请求数与其TCP连接状态
netstat -ant |awk '{print $5}' |awk -F ":" '{s[$1]++}END{for(i in s){print s[i],i}}' |sort -rn |
ulimit -n 查看linux系统打开最大的文件描述符,这里默认1024
vim /etc/security/linits.conf
* soft nofile 102400
* hard nofile 102400
重启生效
tcpdump嗅探80端口的访问看看谁最高
tcpdump -i eth0 port 80 -nn -c 100 | awk -F"." '{print $1"."$2"."$3"."$4"."}'|sort |uniq -c | sort -nr | head -5 (未测试)
查看/var/log目录下的文件数
find /var/log ! -type d -ls | wc -l
ls /var/log/ -lR |grep "^-" |wc -l (这个比较好 ,应该加R)
查看Linux系统每个ip的连接数:
netstat -tan |awk 'NR> 2 {print $5}' |awk -F : '{c[$1]++}END{for(i in c ){print c[i],i}}' |sort -rn (不是很满意,意思差不多)
随机生成32 位密码
date +%F |sha256sum | base64 | head -c10 ;echo
< /dev/urandom tr -dc a-z | head -c10 ;echo (全小写)
openssl rand -base64 32
apache access.log 访问最多的5个IP
awk '{c[$1]}END{for (i in c)END{print c[i]},i }' |awk -nr | heard -5
cat access.log | awk ‘{print $1}’ | sort | uniq -c | sort -n -r | head -5
一般通过hexdump命令 来查看二进制文件的内容。
hexdump -C XXX(文件名) -C是参数 不同的参数有不同的意义
-C 是比较规范的 十六进制和ASCII码显示
-c 是单字节字符显示
-b 单字节八进制显示
-o 是双字节八进制显示
-d 是双字节十进制显示
-x 是双字节十六进制显示
ps aux 中的VSZ代表什么意思,RSS代表什么意思?
VSZ:虚拟内存集,进程占用的虚拟内存空间
RSS:物理内存集,进程占用实际物理内存空间
修复检测/dev/hda3
fsck用来检查和维护不一致的文件系统。若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查
简单的linux 开机启动顺序
BIOS------>MBR------>GRUB----->内核(内核文件系统)-----第一个进程-------inittab ------内核模块----系统环境启动脚本----执行/etc/rc.local------/bin/log/ ----/bin/bash
符号连接与硬连接的区别:
保存当前磁盘分区的分区表
dd 命令是以个强大的命令,在复制的同时进行转换
dd if=/dev/sda of=./mbr.txt bs=1 count=512
手动 grub grub-install /dev/sda
修改内参数 vim /etc/sysctl.conf sysctl -p
apache 限制每秒连接数
iptables -A INPUT -p tcp --port 80 -m limit --limit 1/second -j ACCEPT (大概这意思)
FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。
PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请 求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT 命令告诉服务器:“我打开了XX端口,你过来连接我”。
于是服务器从20端口向客户端的 XX端口发送连接请求,建立一条数据链路来传送数据。
PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请 求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV 命令告诉客户端:“我打开了XX端口,你过来连接我”。
于是客户端向服务器的XX端口 发送连接请求,建立一条数据链路来传送数据。
显示/etc/inittab中以#开头,且后面跟了一个或者多个空白字符,而后又跟了任意非空白字符的行
grep -E "^#[[:blank:]]+[^[:blank:]]+"
显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行
grep "\:[0-9]\{1\}:" a.txt
批量添加20 个用户
for i in `swq -w 01 20 ` ; do
if [ ! ` id i `] ;
then
passwd=`<dev/urandom tr -dc a-z | head -c 5`
useradd i && echo "user $i :passwd $passwd " && echo "$passwd" | passwd --stdin $i
done
脚本判断ip 是否在线
for ip in `seq 1 254 `
do
ping -c1 -w 1 ip.$ip &>/dev/null
[ $?] && echo "ip is up "
done
创建一个函数,能接受两个参数:
1)第一个参数为URL,即可下载的文件;第二个参数为目录,即下载后保存的位置;
2)如果用户给的目录不存在,则提示用户是否创建;如果创建就继续执行,否则,函数返回一个51的错误值给调用脚本;
3)如果给的目录存在,则下载文件;下载命令执行结束后测试文件下载成功与否;如果成功,则返回0给调用脚本,否则,返回52给调用脚本;
#bin/bash
url=$1
dir=$2
download(){
cd $dir &>/dev/null
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 &>/dev/null
else
return "51"
fi
else
wget $url &>/dev/null
fi
if [ $? -ne 0 ];then
return "52"
fi
}
download
history 显示 命令事件
HISTTIMEFORMAT=“%Y-%m-%d `whoami `” >> /etc/profile
生成32位随机密码
yum -y install expect
mkpasswd -l 32
openssl rand -base64 8 | md5sum | cut -c1-32
伪随机数
openssl rand 用于产生指定长度个bytes的随机字符。-base64或-hex对随机字符串进行base64编码或用hex格式显示。
openssl rand -base64 8 | md5sum | cut -c1-8 #八位字母和数字的组合,3a61800e
openssl rand -base64 8 | cksum | cut -c1-8 #八位数字,10784736
date +%s%N #生成19位数字,1287764807051101270
date +%s%N | cut -c6-13 #取八位数字,21793709
date +%s%N | md5sum | head -c 8 #八位字母和数字的组合,87022fda
cat /dev/urandom | head -n 32 | md5sum | head -c 32
需要抓取ethl网卡上从127.10.32.5发到本机8080端口的数据包
tcpdump -nn -i eth1 port 8080 and host 127.xxxxx
mv/tmp/filel /data/ (请简述这个命令操作的详细过程〉
1) 移动/tmp目录的filel文件到/data/目录,如果/data/存在同名文件会提示是否覆盖。
2) mv文件在同一个分区之内是执行的rename的操作,不会更改i节点的信息
该操作对inode表没有影响,对数据的位置也没有影响,不移动任何数据。只需要构造一个现有i节点的新目录项,并解除和旧目录项的链接。不论文件有多大,执行mv的时间都是“瞬间”完成。
netstat 发现大量的time-wait
客户端发送FIN 服务端接收一直到服务端发送FIN ,客户端发送ACK 后,客户端处于TIME-WAIT状态,需要停留2msl,目的:
1) 可靠地实现TCP全双工连接的终止
2) 允许老的重复分解在网络中消逝
首先解释第一条,在客户端接收到服务器端的FIN报文之后,会回复一个ACK,但是该ACI(报文 有可能会丢失,服务器就会重新发送FIN报文给客户端,所以为了处理可能出现的重发FIN报文,必须保持一段实现再推出(这是从服务器端考虑。怕服务器端接收不到ACK,而在一定时间后继续向客户端发送FIN包)
第二条原因,假设客户端用相同的IP地址和端口号,再次连接相同的服务器的IP地址和端口号, 那么上一次的连接的报文可能在第二次连接中才发送到,为了避免这种混淆,TIMEJ/VAIT等待2MSUMSL为单个报文在传递过程中的生命期).保证上一次所有的报文都到达,或者在链路中被丢弃,才可以进行下一次连接.(从客户端考虑,客户端关闭后,立即有进程申请相同的ip和端口与服务器通信,但是服务器端还没有释放之前的连接状态信息)
Twemproxy是一种代理分片机制,由Twitter开源• Twemproxy作为代理,可接受来自多个程序的访问,按照路由规则,转发给后台的各个Redis服务器,再原路返回。该方案很好的解决了单个Redis实例承载能力的问题.当然,Twemproxy本身也是单点,需要用Keepalived做高可用方案。通过Twemproxy可以使用多台服务器来水平扩张redis服务,可以有效的避免单点故陣问題。虽然使用Twemproxy需要更多的硬件资源和在redis性能有一定的损失(twitter测试约20%),但是能够提高整个系统的HA也是相当划算的。不熟悉
twemproxy的同学,如果玩过nginx反向代理或者mysql proxy,那么你肯定也慊twemproxy 了•其实twemproxy不光实现了redis协议,还实现了memcached协议,什么意思?换句话说,twemproxy不光可以代理redis,还可以代理memcached* (没背)
在tomcat中,负贵连接客户端(可以是浏览器或web服务器)请求至servlet容器内的web应用程序的组件是C连接器(connector)
依据mysql binlog日志恢复截止到2016.1.110:01:15之前的数据(b丨nlog文件database-binlog.000992)
/usr/local/mysql/bin/mysqlbinlog - stop-datetime=f 2016-1-110:01:15 */data/database-binlog.000992 | mysql - uroot -ppassword
TCP: time wait bucket table overflow
引起该现象的原因是服务器tcp的连接数太多,超出了内核 echo 20000 > /proc/sys/net/ipv4/tcp_max_tw_buckets 永久有效可如下
vim /etc/sysctl.conf
net.ipv4.tcp_max_tw_buckets = 20000
# sysctl -p定义的最大数
netstat -an | grep 80| awk '{print $6}' | sort | uniq -c | sort -rn
可统计当前个连接的个数
故障表现:
一:系统日志频繁出现:kernel: TCP: time wait bucket table overflow
二:服务器连接中,有大量TIME_WAIT
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
TIME_WAIT 5009
FIN_WAIT1 19
ESTABLISHED 3
FIN_WAIT2 2
SYN_RECV 14
CLOSING 146
LAST_ACK 1
解决方案:
vi /etc/sysctl.conf
增加以下几行:
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000 ##已经修改
说明:
net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
net.ipv4.ip_local_port_range = 1024 65000 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
net.ipv4.tcp_max_syn_backlog = 8192 表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_tw_buckets = 5000 表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改 为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参 数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。
执行以下命令使配置生效:
sysctl -p
主机A需要给主机B传输一份10GB的数据,从应用层上可以做哪些传输优化?从TCP上可以做哪些传输优化?
答:从应用层上可以适当压缩文件,可以加快传输速度。从tcp上,不要使用ssh传输通道,可以借助nc命令来传输
scp /usr/bin/qpress yankay01:/usr/bin/qpress
ssh yankay01 "nc -l 12345 | qpress -dio > /home/yankay/data" &
qpress -o /home/yankay/data |nc yankay01 12345
第一行是将gpress安装到远程机器上,第二行在远程机器上使用nc监听一个端口,第三行压缩并传送数据。
ddos问题产生的本质是什么,阐述你想到的防御思路
答:本质:他们是黑客通过网络上事先留了木马后门的価尸主机发动的,只不过他们装的和正常访问的数据几乎一样,使得NF或其他防
护设备根本无法识别哪些是非法的数据流量,最后达到瘫痪网络的作用。
防御思路:1、采用高性能的网络设备引
2、尽量避免NAT的使用
3、充足的网络带宽保证
4、升级主机服务器硬件
5、把网站做成静态页面
6、充分利用CDN来抵御攻击
last命令可以査看用户登录成功的历史信息, 用less/var/log/secure可以看登录日志
utmp:记录有关当前登录用户的信息使用who命令査看
wtmp:记录历史用户登录信息,使用last命令査看
Lastlog:记录最后一次登录信息使用lsatlog命令査看
Messages:系统基础日志,内核、用户服务的日志•
linux服务器间怎么实现无密码登录
1,在本地生成公司钥,
2,复制生成的公钥到目标主机的家目录下的.ssh 目录下
2)将公钥传送到远程主机host上面,将公钥保存文件中,就可以实现无密码登录了。
要注意关闭selinux
iptables -t nat -A POSTROUTE -p tcp -d ip --dport 80 -j REDIRECT --to-ports 8080 (本地)
-j DNAT --to ip:8080
允许本机对外连接80端口(本机能出数据包通过80 端口
iptables -A OUTPUT --dport 80 -j ACCEPT
ipatables -A INPUT -t tcp --dport 3306
禁止外界ping 本机
ipatables -A INPUT -p icmp --icmp-type 8 -j DROP
防范DDOS攻击脚本
#防止SYN攻击 轻量级预防
iptables -N syn-flood
iptables -A INPUT -p tcp --syn -j syn-flood
iptables -I syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURN
iptables -A syn-flood -j REJECT
#防止DOS太多连接进来,可以允许外网网卡每个IP最多15个初始连接,超过的丢弃
iptables -A INPUT -i eth0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
#用Iptables抵御DDOS (参数与上相同)
iptables -A INPUT -p tcp --syn -m limit --limit 12/s --limit-burst 24 -j ACCEPT
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
nginx与php-fpm的两种连接方式及其优缺点
一种是tcp/ip,一种是socket*前者用的是网络连接,本地和远程都可以连,而socket 只能在本地连接• Socket这种方式不依赖于网
络,也不会消耗网络连接的资源,理论上貌似要比tcp/ip那种方式要快•其实,两者在使用上,速度和效率相差不大
linux 集群 高可用和负载均衡两种
时间戳转换日期
date --date='@2147483647'
当前系统中最长用的十条命令
history | awk '{print $2}' | sort -n |uniq -c | sort -nr | head
空行所在行号
grep -n "^$" /etc/grub2.cfg
打印1-3行
sed -n '1,3p' /etc/grub2.cfg
替换使用 sed -r
sed -r 's/#(.*)$/#@/' 22
LAMP的调优跟安全访问工作有哪些?
答:
1) apache的调优主要包括设置默认虚拟主机并限制访问、配置访问日志并切割、配置静态文件过期时间、配置防盗链等
2) Mysql的调优参考23套mysql部分第6题
3) Php优化参考21套10题
4) 安全访问主要包括用户的访问认证、配置允许或者拒绝ip访问、根据user_agent限制
浏览器访问等
os7层
答:(1)物理层(Physical Layer)物理层是0SI参考模型的最低层,它利用传输介质为数据链路层提供物理连接。为此,该层定义了物理链
路的建立、维护和拆除有关的机械、电气、功能和规程特性。包括信号线的功能、“0”和“1”信号的电平表示、数据传输速率、物理
连接器规格及其相关的属性等。物理层的作用是通过传输介质发送和接收二进制比特流。
(2) 数据链路层(Data Link Layer)数据链路层是为网络层提供服务的,解决两个相邻结点之间的通信问题,传送的协议数据单元称为数据
帧。数据帧中包含物理地址(又称MAC地址)、控制码、数据及校验码等信息。该层的主要作用是通过校验、确认和反馈重发等手段,
将不可靠的物理链路转换成对网络层来说无差错的数据链路•此外,数据链路层还要协调收发双方的数据传输速率,即进行流童控制,以
防止接收方因来不及处理发送方来的高速数据而导致缓冲器溢出及线路阻塞。
(3) 网络层(Network Layer)网络层是为传输层提供服务的,传送的协议数据单元称为数据包或分组。该层的主要作用是解决如何使数据
包通过各结点传送的问题,即通过路径选择算法(路由)将数据包送到目的地。另外,为避免通信子网中出现过多的数据包而造成网络阻
塞,需要对流入的数据包数童进行控制(拥塞控制)•当数据包要跨越多个通信子网才能到达目的地时,还要解决网际互连的问题。
(4) 传输层(TransportLayer)传输层的作用是为上层协议提供端到端的可靠和透明的数据传输服务,包括处理差错控制和流置控制等问
题。该层向高层屏蔽了下层数据通信的细节,使高层用户看到的只是在两个传输实体间的一条主机到主机的、可由用户控制和设定的、可
靠的数据通路。传输层传送的协议数据单元称为段或报文。
(5) 会话层(Session Layer)会话层主要功能是管理和协调不同主机上各种进程之间的通信(对话),即负贵建立、管理和终止应用程序之间
的会话。会话层得名的原因是它很类似于
两个实体间的会话概念。例如,一个交互的用户会话以登录到计算机开始•以注销结束。
(6) 表示层(PresentationLayer)表示层处理流经结点的数据编码的表示方式问题,以保证 —个系统应用层发出的信息可被另一系统的应用
层读出.如果必要,该层可提供一种标准表示形式,用于将计算机内部的多种数据表示格式转换成网络通信中采用的标准表示形式。数据
压缩和加密也是表示层可提供的转换功能之一。
(7) 应用层(Application Layer)应用层是OSI参考模型的最高层,是用户与网络的接口. 该层通过应用程序来完成网络用户的应用需求,如
文件传输、收发电子邮件等
写一条iptables规则,丢掉每个IP每秒访问80端口超过30次的数据包 限速
iptables -A INPUT -p tcp --dport 80 -tcp-flags FIN,SYN,RST,ACK -m connlimit --connlimit-ablove 30
使用rsync + inotify实现两台server间,文件实时同步。
history 显示时间
显示某程序的依赖库
ldd `which ssh`
查看某进程打开了哪些文件
进程--进程-PID lsof -p 进程号
使用tcpdump抓取两台serverl到server2的新建连接的数据包。答:假如361^61*11卩为1.1.1.1,361^6犷2 1卩为2.2.2.2
tcpdump -nn src host 1.1.1.1 and dst host 2. 2. 2. 2
50 内的随机数
echo $((RANDOM%50))
dns相关的常用命令答
scp和rsync都是可以远程传输文件
scp在传输的时候是整个文件备份,传输的时候霈要初入对方的密码
rsync传输的时候是增量备份,可以更改配置为在传输文件的时候不用输入对方的密码进行
批量创建用户加密码
seq -w 01 20

浙公网安备 33010602011771号