Linux面试题总结

1、/var/log/messages日志中找到相关信息:kernel: nf_conntrack: table full, dropping packet。出现这些信息会导致什么后果?该如何解决?(此试题为网上他人总结,自己拿来学习)

解答:这个报错意思是,连接跟踪表已满,开始丢包。

出现上述结果会导致业务访问很慢。解决方法如下:

方案1:进行相关的系统参数的可以调优。

sysctl -a | grep nf_conntrack(在/etc/sysctl.conf文件中 ):

net.netfilter.nf_conntrack_max  =   1048576  
net.netfilter.ip_conntrack_tcp_timeout_established  =   3600  
net.netfilter.nf_conntrack_tcp_timeout_close_wait  =   60  
net.netfilter.nf_conntrack_tcp_timeout_fin_wait  =   120  
net.netfilter.nf_conntrack_tcp_timeout_time_wait  =   12

方案2:使用祼表,添加“不跟踪”标识。如下示例更适合桌面系统或随意性强的服务器。因为它开启了连接的状态机制,方便和外部通信。修改 /etc/sysconfig/iptables 文件:

*raw 
# 对TCP连接不启用追踪,解决ip_contrack满导致无法连接的问题 
-A PREROUTING -p tcp -m tcp --dport 80 -j NOTRACK 
-A PREROUTING -p tcp -m tcp --dport 22 -j NOTRACK 
-A PREROUTING -p tcp -m tcp --dport 21 -j NOTRACK 
-A PREROUTING -p tcp -m tcp --dport 11211 -j NOTRACK 
-A PREROUTING -p tcp -m tcp --dport 60000:60100 -j NOTRACK 
-A PREROUTING -p tcp -s 192.168.10.1 -j NOTRACK 
-A OUTPUT -p tcp -m tcp --sport 80 -j NOTRACK 
-A OUTPUT -p tcp -m tcp --sport 22 -j NOTRACK 
-A OUTPUT -p tcp -m tcp --sport 21 -j NOTRACK 
-A OUTPUT -p tcp -m tcp --sport 11211 -j NOTRACK 
-A OUTPUT -p tcp -m tcp --sport 60000:60100 -j NOTRACK 
-A OUTPUT -p tcp -s 192.168.10.1 -j NOTRACK COMMIT 
*filter 
# 允许ping 
-A INPUT -p icmp -j ACCEPT # 对本地回路、第5张网卡放行 
-A INPUT -i lo -j ACCEPT -A INPUT -i eth4 -j ACCEPT # 连接状态跟踪,已建立的连接允许传输数据 
-A INPUT -m state --state ESTABLISHED,RELATED,INVALID,UNTRACKED -j ACCEPT # filter表里存在但在raw里不存在的,默认会进行连接状态跟踪 
-A INPUT -s 192.168.10.31 -p tcp --dport 2669 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT

方案3:如果对安全没有要求,比如在内网。这种情况下,可以使用下面的方法进行解决
关闭防火墙,并设置不自动开启
chkconfig iptables off 
chkconfig ip6tables off 
service iptables stop 
service ip6tables stop
切记:在防火墙关闭状态下,不要通过iptables指令(比如 iptables -nL)来查看当前状态!因为这样会导致防火墙被启动,而且规则为空。虽然不会有任何拦截效果,但所有连接状态都会被记录,浪费资源且影响性能并可能导致防火墙主动丢包!

方案4:加大防火墙跟踪表的大小,优化对应的系统参数
  1、状态跟踪表的最大行数的设定,理论最大值 CONNTRACK_MAX = RAMSIZE (in bytes) / 16384 / (ARCH / 32)
    以64G的64位操作系统为例,CONNTRACK_MAX = 64*1024*1024*1024/16384/2 = 2097152
    即时生效请执行:
sysctl –w net.netfilter.nf_conntrack_max = 2097152
  2、其哈希表大小通常为总表的1/8,最大为1/2。CONNTRACK_BUCKETS = CONNTRACK_MAX / 8
    同样64G的64位操作系统,哈希最佳范围是 262144 ~ 1048576 。
    运行状态中通过 sysctl net.netfilter.nf_conntrack_buckets 进行查看,通过文件 /sys/module/nf_conntrack/parameters/hashsize 进行设置
    或者新建 /etc/modprobe.d/iptables.conf ,重新加载模块才生效:
options nf_conntrack hashsize = 262144

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

ifconfig bond0 | sed -n 2p | cut -d : -f2 |cut -c 1-13
ifconfig bond0 | sed -n 2p | awk -F ‘[ :]+‘ ‘{print $4}‘
ifconfig bond0 | awk  -F ‘[ :]+‘ ‘NR==2 {print $4}‘
ifconfig bond0 | grep "inet addr:*" | awk -F ‘[ :]+‘ ‘{print $4}‘
ifconfig bond0 | sed -n 2p | sed ‘s#^.*addr:##g‘|sed ‘s#B.*$##g‘

解释:处理需要的目标(获取的字符串如上题的IP地址)前的字符串一般用以..开头(^.*)来匹配开头,匹配的结尾协商实际的字符,如:"^.*addr:"表达式匹配,结尾同开头匹配方式一致

取出Bcast

ifconfig bond0 |sed -n 2p | sed ‘s#^.*75[[:space:]]##g‘ | sed ‘s#:.*$##g‘ 
ifconfig bond0 |sed -n 2p | sed ‘s#^.*75  ##g‘ | sed ‘s#:.*$##g‘

用分组的方法来匹配

sed ‘s#(ddd)(fff)\1\2##g‘
ifconfig bond0 | sed -n ‘s#^.*addr:\(.*\)  B.*$#\1#gp‘

3、查找当前目录下所有文件,并把文件中的www.a.org字符串替换成www.b.cc

find . -type f -name "*.txt" | xargs sed -i ‘s#www.a.org#www.b.cc#g‘
find . -type f -name "*.txt" -exec sed -i ‘s#www.a.org#www.b.cc#g‘ {} \;

4、请给出如下格式的date命令 例:11-02-26

date +%F
date +%y-%m-%d
显示时分秒
date +%Y-%m-%d\ %T
date +%F\ %T
cp space.sh space.sh$(date +%F)   以时间结尾来备份  或者cp space.sh space.sh`date +%F`  (反引号)
结果为:space.sh2017-05-04
打印三天前的日期:date +%F --date "-3 day"
打印三天后的日期:date +%F -d "3 day"   date +%F -d "+3 day"

5、

编写个 shell 脚本将/root/script 目录下大于 20K 的文件转移到/root/file 目录下

法1:
#!/bin/bash
for file in `ls -l /root/script`
do
if [ -f $file ]; then
if [ `ls -l $file|awk ‘{print $5}‘` -gt 10000 ]; then
mv $file /root/file
fi
fi
done
法2:
#/bin/bash
#=========bk file great 20K to other dirctory
cd /root/script
file=`ls -lk`
dir=/root/file
if
  [ -d $dir ] 
    then
       echo "directory is exsit"  
       find . -size +10k | xargs -I ‘{}‘ mv {} $dir
    else 
       mkdir -p /root/file
       find . -size +10k | xargs -I ‘{}‘ mv {} $dir
fi
时间: 2024-10-29 19:56:04

Linux面试题总结的相关文章

Linux面试题

Linux面试题总结一下   一.有文件file1  1.查询file1 里面空行的所在行号  awk '{if($0~/^$/)print NR}' file  or  grep -n ^$ file |awk 'BEGIN{FS=":"}{print $1}'  2.查询file1 以abc 结尾的行  grep abc$ file1  3.打印出file1 文件第1 到第3 行  sed -n '1,3p' file1  head -3 file1  二.如何将本地80 端口的请

Linux面试题集锦

1.给你一个rpm包,查询是否安装,安装了如何删除 rpm -qa rsync  查看是否安装rsync包 rpm -e  rsync 卸载rsync包  --nodeps   忽略依赖关系 2. 查看磁盘空间 df -h 3.443端口是什么服务 cat /etc/service https 4. 有一些文件,如何把文件的扩展名.txt改为.html 方法1: rename .txt  .html   *.txt 方法2: find . -type f-name "*.txt" -p

嵌入式linux面试题解析(二)——C语言部分二

嵌入式linux面试题解析(二)--C语言部分二 1..h头文件中的ifndef/define/endif 的作用?    答:防止该头文件被重复引用. 2.#include 与 #include "file.h"的区别?    答:前者是从Standard Library的路径寻找和引用file.h,而后者是从当前工作路径搜寻并引用file.h. 3.描述实时系统的基本特性    答 :在特定时间内完成特定的任务,实时性与可靠性. 4.全局变量和局部变量在内存中是否有区别?如果有,是

嵌入式linux面试题解析(一)——ARM部分二

嵌入式linux面试题解析(一)--ARM部分二 1.描述一下嵌入式基于ROM的运行方式基于RAM的运行方式有什么区别. 基于RAM的运行方式:需要把硬盘和其他介质的代码先加载到ram中,加载过程中一般有重定位的操作: 基于ROM:没有上面的操作. 基于ROM:速度较基于RAM的慢,因为会有一个把变量,部分代码等从存储器(硬盘,flash)搬移到RAM的过程:可用RAM资源比基于RAM的多: 基于RAM:速度较基于ROM的快,可用RAM比基于ROM的少,因为所有的代码,数据都必须存放在RAM中.

嵌入式linux面试题解析(三)——Linux应用编程部分一

嵌入式linux面试题解析(三)--Linux应用编程部分一 1.TCP与UDP的区别 TCP:是面向连接的流传输控制协议,具有高可靠性,确保传输数据的正确性,有验证重发机制,不会出现丢失或乱序. UDP:是无连接的数据报服务,不对数据报进行检查与修改,无须等待对方的应答,会出现分组丢失.重复.乱序,但具有较好的实时性,UDP段结构比TCP的段结构简单,因此网络开销也小. 2.流量控制和拥塞控制 拥塞控制    网络拥塞现象是指到达通信子网中某一部分的分组数量过多,使得该部分网络来不及处理,以致

Linux 面试题

Linux 面试题(1) Linux 面试题(2) Linux 面试题(3) Linux 面试题(4) Linux 面试题(5) Linux 面试题(6) Linux 面试题(7) Linux 面试题(8) Linux 面试题(9) Linux 面试题(10)

嵌入式linux面试题解析(二)——C语言部分三

嵌入式linux面试题解析(二)--C语言部分三 1.下面的程序会出现什么结果#include <stdio.h>#include <stdlib.h> #include <string.h>void getmemory(char *p){    p=(char *) malloc(100);    strcpy(p,"hello world");}int main( ){    char *str=NULL;    getmemory(str); 

Linux面试题汇总答案

转自:小女生的Linux技术~~~Linux面试题汇总答案~~ 一.填空题:1. 在Linux系统中,以 文件 方式访问设备 .2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统.3. Linux文件系统中每个文件用 i节点 来标识.4. 全部磁盘块由四个部分组成,分别为引导块 .专用块 . i节点表块 和数据存储块.5. 链接分为: 硬链接 和 符号链接 .6. 超级块包含了i节点表 和 空闲块表 等重要的文件系统信息.7. 某文件的权限为:d-rw-_r--_r

Linux面试题及答案(转)

一.填空题:1. 在Linux系统中,以 文件 方式访问设备 .2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统.3. Linux文件系统中每个文件用 i节点 来标识.4. 全部磁盘块由四个部分组成,分别为引导块 .专用块 . i节点表块 和数据存储块.5. 链接分为: 硬链接 和 符号链接 .6. 超级块包含了i节点表 和 空闲块表 等重要的文件系统信息.7. 某文件的权限为:d-rw-_r--_r--,用数值形式表示该权限,则该八进制数为: 644 ,该文件属

嵌入式linux面试题

基础试题(C语言) 一.ANSI C/C++方面的知识 一.1.简答题.下面的题目必须全部答对才给分(20分): 1. 如何在C中初始化一个字符数组. char s[100]={' '}; 2. 如何在C中为一个数组分配空间. char s[10]; s=malloc(10*sizeof(char)); 3. 如何初始化一个指针数组. int *pt[10]={NULL}; 4. 如何定义一个有10个元素的整数型指针数组. int *pt[10]={NULL}; 5. s[10]的另外一种表达方