liunx 一些面试笔试题目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
liunx 一些面试笔试题目
 
1、Linux挂载Winodws共享文件夹
 
2、查看http的并发请求数及其TCP连接状态:
 
3、用tcpdump嗅探80端口的访问看看谁最高
 
4、统计/var/log/下文件个数
 
5、查看当前系统每IP连接数
 
6、shell下32位随机密码生成
 
7、统计出apache的access.log中访问量最多的5个IP
 
8、如何查看二进制文件的内容
 
9、ps aux 中VSZ代表什么意思 RSS代表什么 
 
10、检测并修复/dev/hda5
 
11、Linux开机启动顺序
 
12、符号链接和硬链接的区别
 
13、保存当前磁盘分区的分区表
 
15、手动安装grub
 
16、改内核参数
 
17、在1-39内取随机数
 
18、限定apache每秒钟连接数为1,峰值为3
 
19、FTP主动与被动模式
 
20、显示/etc/inittab中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行;
 
21、显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行;
 
22、怎么把自己写的脚本添加到服务里面,即可以使用service命令来调用
 
23、写一个脚本,实现批量添加20个用户,用户名为user1-20,密码为user后面跟5个随机字符
 
24、写一个脚本,实现判断192.168.1.0/24网络里,当前在线的IP有哪些,能ping通则认为在线
 
25、写一个脚本,判断一个指定的脚本是否是语法错误;如果有错误,则提醒用户键入Q或者q无视错误并退出其它任何键可以通过vim打开这个指定的脚本;
 
26、写一个脚本:
1、创建一个函数,能接受两个参数:
1)第一个参数为URL,即可下载的文件;第二个参数为目录,即下载后保存的位置;
2)如果用户给的目录不存在,则提示用户是否创建;如果创建就继续执行,否则,函数返回一个51的错误值给调用脚本;
3)如果给的目录存在,则下载文件;下载命令执行结束后测试文件下载成功与否;如果成功,则返回0给调用脚本,否则,返回52给调用脚本;
 
 
27、写一个脚本:
1、创建一个函数,可以接受一个磁盘设备路径(如/dev/sdb)作为参数;在真正开始后面步骤之前提醒用户有危险,并让用户选择是否继续;
   而后将此磁盘设备上的所有分区清空(提示,使用命令dd if=/dev/zero of=/dev/sdb bs=512 count=1实现,注意其中的设备路径不要写错了
   ;如果此步骤失败,返回67给主程序;
   接着在此磁盘设备上创建两个主分区,一个大小为100M,一个大小为1G;如果此步骤失败,返回68给主程序;
   格式化此两分区,文件系统类型为ext3;如果此步骤失败,返回69给主程序;
   如果上述过程都正常,返回0给主程序;
2、调用此函数;并通过接收函数执行的返回值来判断其执行情况,并将信息显示出来;
 
  
 
#####################################################################################################################
 
答案:
 
1、Linux挂载Winodws共享文件夹
# mount -t cifs //1.1.1.254/ok /var/tmp/share/ -o username=administrator,password=yourpass
 
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
 
4、统计指定目录的文件个数
find / -type f | wc -l
 
5、查看IP连接数
netstat -n | awk '/^tcp/ {print $5}'| awk -F: '{print $1}' | sort | uniq -c | sort -rn
 
6、【shell下32位随机密码生成】
tr -dc \~\`\!@#\$\%\^\&\*\(\)\-\_\+\=\|\\\?\/\.\>\,\<a-za-z0-9_ <="" dev="" urandom|head="" -c="" 32|xargs
 
7、统计出apache的access.log中访问量最多的5个IP
cat access_log_2011_06_26.log |awk '{print $1}'|uniq -c|sort -n |head 5
 
8、如何查看二进制文件的内容
  [root@new55 ~]# echo /etc/passwd | hexdump -C      <== 规范的十六进制和ASCII码显示(Canonical hex+ASCII display )
 
9、ps aux 中VSZ代表什么意思 RSS代表什么 
     aux
     a 显示所有与终端相关的进程,由终端发起的.
     x 显示所有与终端无关的进程.
     u 显示用户导向的用户列表.
VSZ 虚拟内存集,进程占用的虚拟内存空间
RSS     物理内存集,进程战用实际物理内存空间.
S 可中断的睡眠态
R 运行态
D 不可中断的睡眠态
T 停止态
Z 僵死态
 
10、检测并修复/dev/hda5
e2fsck -p /dev/hda5
 
11、Linux开机启动顺序
启动顺序:
POST(加电自检)-->由BIOS决定启动设备次序-->MBR(bootloader)-->解压kernel,加载Kernel到内存-->加载init进程(/etc/inittab)
 
12、符号链接和硬链接的区别
硬链接:不同路径的文件指定的是同一个inode
     硬链接不能跨分区存在
     硬链接不能链接到目录(要避免循环引用)
     删除硬链接只会减少文件被硬链接的次数,源文件不会动.
软链接:是一个独立的文件,有自己独立的inode
     引用的是路径本身,不是inode
     删除软链接,跟源文件没任何关系
     软链接没有存储任何数据,只是存储了访问文件的另一种路径.
     软链接可以对目录创建,也可以跨分区
     源文件被删除,软连接将不可用.
 
13、保存当前磁盘分区的分区表
# sfdisk -d /dev/sdb >/etc/sdbpar.bak 保存分区表
# sfdisk /dev/sdb
14、检测并自动修复文件系统
e2fsck - check a Linux ext2/ext3 file system
     -B     指定块大小
     -f     强制检测.
     -p     自动修复文件系统
 
15、手动安装grub
手动安装grub
# grub-install --root-directory=(指定boot目录) DEVICE
或者
grub
grub>root (hd0,0)
grub>setup (hd0)
 
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每秒钟连接数为1,峰值为3
# iptables -A INPUT -d 172.16.100.1 -p tcp --dport 80 -m limit --limit 1/second --limit-burst 3 -j ACCEPT
 
19、FTP主动与被动模式
主动模式
    1. 任何大于1024的端口到FTP服务器的21端口。(客户端初始化的连接)
    2. FTP服务器的21端口到大于1024的端口。 (服务器响应客户端的控制端口)
    3. FTP服务器的20端口到大于1024的端口。(服务器端初始化数据连接到客户端的数据端口)
    4. 大于1024端口到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口)
被动模式
    1. 从任何大于1024的端口到服务器的21端口(客户端初始化的连接)
    2. 服务器的21端口到任何大于1024的端口(服务器响应到客户端的控制端口的连接)
    3. 从任何大于1024端口到服务器的大于1024端口(客户端初始化数据连接到服务器指定的任意端口)
    4. 服务器的大于1024端口到远程的大于1024的端口(服务器发送ACK响应和数据到客户端的数据端口)
 
客户端与服务端建立连接,经过TCP三次握手,连接建立完成之后,客户端就可以通过建立的连接通道向服务器发送命令了,服务器根据客户端的命令,
 
向客户端发送数据,发送数据的时候,服务端会再跟客户端建立一个TCP连接,用于专门的传输数据,这个连接就是数据连接。
数据连接有两种工作模式:主动模式和被动模式
主动模式指的是服务器是主动的
被动模式指的是服务器是被动的
主动模式:
服务器端自动打开20号端口,即数据传输端口。主动的去连接客户端的命令端口+1的端口。当数据传输完成后,数据连接自动断开。
被动模式:
服务器端向客户端通知自己打开的端口,通知客户端来连接自己的数据端口,客户端使用命令端口+1的端口,去连接服务器端的数据端口。
被动模式下,服务器的数据连接端口使用的是一个随机端口。主动模式服务端使用的是20端口。
 
 
 
20、显示/etc/inittab中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行;
# grep "^\#[[:space:]]\{1,\}.\{1,\}" /etc/inittab
 
21、显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行;
# grep "\:[0-9]\{1\}\:" /etc/inittab
 
22、怎么把自己写的脚本添加到服务里面,即可以使用service命令来调用
#!/bin/bash
# chkconfig: - 90 10
# description: just a test
echo "Hello,$1"
 
# mv test /etc/init.d/
# chmod +x /etc/init.d/test
# chkconfig --add test
# service test start        //可以看到Hello,start表示成功

 

shell 面试题 (一)  待续

如下用实际文件代替 file1 

1、查询 file1 里面空行的所在行号  grep -n "^$" stl_stable_sort.cc    参考:grep 常用命令

2、查询 file1 以 abc 结尾的行  grep -n "^.*abc$" stl_stable_sort.cc   参考:正则表达式 30 分钟入门教程   grep 常用命令   

3、打印出 file1 文件第 1 到第三行   sed -n '1,3'p stl_stable_sort.cc    参考:sed 指令简单使用

二、如何将本地 80 端口的请求转发到 8080 端口,当前主机 IP 为 192.168.2.1   

三、crontab

在 11 月份内,每天的早上 6 点到 12 点中,每隔 2 小时执行一次 /usr/bin/httpd.sh 怎么实现    

编辑 /etc/crontab 文件  加入

0 6-12/2     * * *   root    /usr/bin/httpd.sh

四、编写个 shell 脚本将 /usr/local/test 目录下大于 100K 的文件转移到 /tmp 目录下     ls -l|grep ^-|awk '$5>100000'|awk '{print $8}'|xargs -t -I {} cp {} test  参考:[命令技巧]ls  xargs 命令

       备注: {} 可以理解为你前面传来的参数。看例子                 ls a |xargs -I mv  {} {}.bak                 -I 和 -i 一样

七、如何查看占用端口 8080 的进程  lsof -i:8080  参考:lsof 常用命令