linux面试题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux面试题相关的知识,希望对你有一定的参考价值。
1、Linux挂载Winodws共享文件夹:
1)在windows下建立一个共享文件夹。
2)确认你的linux安装了samba软件包及其客户端程序(smbclient),因为samba就是提供linux与windows互访的程序。
3)开始查看windows下的共享文件目录:smbclient –L //192.168.1.1,如果连接正常,就可以看到windows下的共享目录了(字符形式)。
4)挂载共享目录:mount –t cifs –ousername=“”,passwd=“”//192.168.1.1/共享文件夹/ /mnt/
2、查看http的并发请求数及其TCP连接状态:
netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a,S[a]}‘
3、用tcpdump嗅探80端口的访问看看谁最高:
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." ‘{print$1"."$2"."$3"."$4}‘ | sort | uniq -c | sort -nr|head -20
1)tcpdump -i eth0 -tnn dst port 80 -c 1000:统计本机中目标端口为80的数据包,-tnn:直接以IP及port number显示,而非主机名与服务名称,并且不显示时间戳。-c 1000:统计1000个数据包。
2)awk -F"." ‘{print$1"."$2"."$3"."$4}‘:对tcpdump的输出一行一行得进行处理,以.作为分隔域,将远程主机IP依次打印出来。
3)sort:对输出的访问端IP进行排序。
4)uniq –c:将相同行合并,并统计相同行的数量。
5)sort –nr:以相同行数量进行排序,反向排序,最大的放在最前面。
6)head -20:提取前20行。
4、统计指定目录的文件个数:
find / -type f | wc –l
1)find / -type f:找出根目录下,一般文件。
2)wc –l:统计行数。
5、查看IP连接数(访问本机的远程主机数量):
netstat -n | awk ‘/^tcp/ {print $5}‘| awk -F: ‘{print $1}‘ |sort | uniq -c | sort –rn
1)netstat –n:列出本机的所有网络连接,包括TCP/UDP和Unix socket两部分。
2)awk ‘/^tcp/ {print $5}‘:/^tcp/:条件是以tcp开头的行,^:在此处代表行首的意思。{print $5:将第5个字段打印出来,代表远程主机的IP和port,默认是以tab作为分隔域。
3)awk -F: ‘{print $1}‘:“-F:”:以:作为分隔域;打印第一个字段,将port去掉,只显示IP。
4)sort:将IP进行排序。
5)uniq –c:将相同行合并,并统计相同行的数量。
6)sort –nr:以相同行数量进行排序,反向排序,最大的放在最前面。
6、shell下32位随机密码生成(数字加字母):
方法1:(有点问题)
cat /dev/urandom | sed –e ‘s/[^a-zA-Z0-9]//g’|strings –n 32|head –n 1
1)/dev/urandom:产生随机数的文件。
2)sed –e ‘s/[^a-zA-Z0-9]//g’:将产生的数据,一行一行进行处理,非字母数字内容删除掉。
3)string –n 32:设置字符串的位数为32位,也是对每一行进行处理。
4)head –n 1:提取第一行的内容。
方法2:
cat /proc/sys/kernel/random/uuid| md5sum| cut –c 1 -32
1)cat /proc/sys/kernel/random/uuid:读取UUID码文件,每次获得的数据都会不同,为8-4-4-4-12形式数字加字母的字符串。
2)md5sum :将UUID码转换为MD5码(有问题?);
3)cut –c 1-32:选取每行中的1-32字符的内容。
7、统计出apache的access.log中访问量最多的5个IP:
cat access_log_2011_06_26.log |awk ‘{print $1}‘|uniq -c|sort -rn|head -n 5
1)查看日志文件即可
8、如何查看二进制文件的内容:
hexdump -C [filename]:使用hexdump命令即可。
9、ps aux 中VSZ代表什么意思 ,RSS代表什么:
1)ps aux:查看系统正在运行的所有进程。
[1]a:显示所有与终端相关的进程,由终端发起的.
[2]x:显示所有与终端无关的进程.
[3]u:显示用户导向的用户列表.
1)VSZ:虚拟内存集,进程占用的虚拟内存空间
2)RSS :物理内存集,进程占用实际物理内存空间.
3)S:可中断的睡眠态
4)R:运行态
5)D:不可中断的睡眠态
6)T:停止态
7)Z:僵死态
10、检测并修复/dev/hda5:
umount /dev/hda5 ; e2fsck -p /dev/hda5;mount /dev/hda5:卸载/dev/hda5;-p:不询问使用者意见,便自动修复文件系统;检测并修复完毕后,记得再重新挂载/dev/hda5。
11、Linux开机启动顺序:
开机顺序:
1)Bios程序读取CMOS上的信息到内存中,取得各项硬件的参数,对硬件进行检测和初始化(POST,Power-on self-test,加电自检),并决定启动设备次序。
2)BIOS读取MBR中的引导装载程序(boot loader)到内存中。
3)引导装载程序将内核文件读入内存,内核加载后,重新检测硬件并加载各硬件的驱动程序,使硬件准备就绪!
4)运行第一个进程initrd,并逐步启动各种服务。
5)此外,如果是多系统主机,还包括引导加载程序和grub的内容。每个分区也会有引导扇区(boot sector),用于完成多重引导功能。
12、符号链接和硬链接的区别:
1)硬连接(实际连接):在目录的block中将多个文件名对应一个inode,可以理解为文件的别名,不需要占有额外的inode和block,只需要在目录的block下添加点数据。只能对文件使用硬连接,对目录不行。使用命令 ln filename1 filename2,将文件filename1产生一个硬连接(别名)filename2.
2)符号连接(快捷方式):创建一个文件(inode+block),block记载需连接文件的目录的inode及该文件的文件名,变形成了符号链接,可以理解为快捷方式。符号连接可以针对目录。ln –s filename1 filename2
13、保存当前磁盘分区的分区表:
sfdisk -d /dev/sdb >/etc/sdbpar.bak :保存分区表
1)sfdisk –d /dev/sdb:查看整块硬盘sdb的分区表。
14、检测并自动修复文件系统:
e2fsck - check [a Linux ext2/ext3 file system]
-B 指定块大小
-f 强制检测.
-p 自动修复文件系统
1)与第10题一样
15、手动安装grub:
手动安装grub
1.grub-install --boot-directory=[指定boot目录]
DEVICE(文件系统)
2.grub
grub>root (hd0,0):第一个硬盘的第一个分区
grub>setup (hd0):
1)grub为开机后系统的引导程序,提供开机时选择进入哪个系统(多系统环境)。
16、改内核参数:
# sysctl
-p 不用重启系统,让内核重读/etc/sysctl.conf文件
-a 显示所有内核参数及其正在使用的值.
-w 临时设置/etc/sysctl.conf参数sysctl -w net.ipv4.ip_froward=0
17、在指定范围内取随机数:
echo $[$RANDOM%39]:对39进行取余,余数肯定是39以内的数字.
18、限定apache的HTTP服务器:每秒钟连接数为1,峰值为3:
iptables -A INPUT -d 172.16.100.1 -p tcp --dport 80 -m limit--limit 1/second --limit-burst 3 -j ACCEPT
1)–A INPUT:新增加一条INPUT表格规则。
2)–d 172.16.100.1:目标主机的IP即本机。此处也可换乘-i
eth0:eth0为HTTP的对外网卡,表示想要进入此网卡的数据包。
3)–p tcp --dport 80:tcp协议,目标端口为80。
4)–m limit --limit 1/second –limit-burst 3:限制每秒钟连接数为1,峰值为3。
5)–j ACCEPT:操作为接受。
19、FTP主动与被动模式:
1.主动模式
1)客户端随机启动一个大于1024的端口A,和FTP服务器端的命令端口21,经过三次握手后,建立命令传送通道。
2)客户端再启动一个端口(端口号为:A+1),并通过命令传送通道,告知服务器端。
3)服务器端接受到端口后(A+1),就主动通过20端口和客户端A+1端口进行三次握手连接,建立数据传送通道。
4)但是由于客户端可能存在防火墙的原因,使得服务器端无法连接到客户端的A+1端口,这就产生了被动连接模式了。
2.
被动模式
1)客户端随机启动一个大于1024的端口A,和FTP服务器端的端口21,经过三次握手后,建立命令传送通道。
2)服务器端随机启动一个端口B,并通过命令传送通道告知客户端。
3)客户端接受到端口后(B),就启动端口(A+1),和服务器端的B端口经过三次握手连接,建立数据传送通道
20、显示/etc/inittab中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行:
grep "^\#[[:space:]]\{1,\}.\{1,\}"/etc/inittab
1)^:行首;\#:转义字符;[[:space:]]\{1,\}:代表一个或多个空白字符。
2).\{1,\}:.:代表一定有一个任意字符。
21、显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行:
grep "\:[0-9]\:" /etc/inittab
1)\:转义字符
2)[0-9]:代表一定有0-9中的一个数字,
22、怎么把自己写的脚本添加到服务里面,即可以使用service命令来调用:
1)编写测试脚本test#!/bin/bash
chkconfig: - 90 10
description: just a test
echo "Hello,$1"
2)使脚本能够被service命令调用
[1]mv test /etc/init.d/:将脚本放置到stand alone目录下。
[2]chmod +x /etc/init.d/test:对文件添加x权限,代表可执行。
[3]chkconfig --add test:增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。
[4]service test start
:开机系统服务“test”。
23、写一个脚本,实现批量添加20个用户,用户名为user1-20,密码为user后面跟5个随机字符:
#!/bin/bash
for i in {1..20};
do
pass=$( cat /proc/sys/kernel/random/uuid| md5sum | cut –c 1 -32):读取uuid文件,生成一个包含5个数字或字母的随机数,${cmd}为取得命令的结果。
useradd user${i}:添加用户user1-user20
echo $pass | passwd user${i} –stdin:给用户设置密码,--stdin:通过前一个管道输出,来作为密码输入。
echo "user${i} <=============> $pass">> ./userlist.out:将用户和密码以累加的方式写入到userlist.out文件中。
done
echo ‘Sucess,passwd is in userlist.out‘:添加成功。
24、写一个脚本,实现判断192.168.1.0/24网络里,当前在线的IP有哪些,能ping通则认为在线:
1)方法1,使用ping命令:
#!/bin/bash
ips="192.168.1."
for i in {1..254}; do
ping -W 1 -c 1 ${ips}${i} &>/dev/null && echo"${ips}${i} is up" | tee -a uplog.txt || echo "${ips}${i} isdown"
[1]ping -W 1 -c 1 ${ips}${i}:向指定IP发送ICMP数据包,-W 1:等待1秒钟;-c 1:ping一次。
[2]&>/dev/null: &>等同2>1&:将错误信息和正确信息分开,输入到/dev/null,此处只有错误信息,因此也可使用2>/dev/null。
[3]&& echo "${ips}${i} is up":如果能够ping通过,输出IP在线的信息。
[4]|tee -a uplog:以累加方式将在线IP记录到文件uplog.txt。
[5]|| echo "${ips}${i} is down":如果通过ping不通过,输出IP不在线的信息。
done
echo "Please read uplog to know which host is online. ":在线用户在文件uplog中。
2)方法2,使用nmap命令
nmap –sp 192.168.1.0/24:通过数据包检测,分析局域网内有几台主机是启动的。
以上是关于linux面试题的主要内容,如果未能解决你的问题,请参考以下文章