shell笔试题汇总

shell脚本学习-3(百度shell脚本笔试题)

1. a.log文件中提取包含"WARNING""FATAL",同时不包含"IGNOR"的行,然后提取以":"分割的第5个字段

2. 编写一个脚本,只想简单的减法运算,要求提示输入变量

3. Shell脚本阅读(解释下面执行的功能),请挑出下面程序或脚本中的错误,并说明错在哪里。

#!/bin/bash

#监控cpuserpoint端口是否正常

logname="/home/forum/log/lpointlog.wf"

flagfile="/home/forum/log/lognum.txt"

lodnum=sed -n "1,1 p"$flagfile

newnum=wc -l ${logname}

echo $newnum >$flagfile

totalnum=expr $newnum -$oldnum

tail -n $totalnum $logname |grep "POINT_THREAD WARNING"

if [$?==0]

then

mail -s "cpuser point "端口异常,请处理!" [email protected]</dev/null

fi>

答案:

1.

#!/bin/bash

awk -F: '{if ($0~/(WARNING|FATAL)/ && $0!~/IGNOR/) print $5}' test.txt

或者

awk -F: '$0 ~/WARNING|FATAL/ && $0 !~/IGNOR/ print $5}' test.txt

或者:egrep 'WARNING|FATAL' a.log | grep-v 'IGNOR' | awk -F: '{print $5 }'

错误写法,主要{}的位置:awk -F: 'if ($0~/(WARNING|FATAL)/ && $0!~/IGNOR/) {print $5}' test.txt

2.

#!/bin/bash
read -p "input a num:" num1
read -p "input another num:" num2
result=`expr $num1 - $num2`
#let "result=num1-num2"
#let result=num1-num2
echo $result

错误写法(1)":"符号放到外面了:read -p "input another num": num2

(2)$num1-$num2之前没有空格:result=`expr $num1-$num2`

3.命令行替换用反引号,if [$?==0] 应该写做if [ $?=0 ],用来判断上次命令是否执行成功;

倒数第二行应该是>/dev/null,最后fi后面的>去掉。

6. sed -i '/Root/s/no/yes/g' /etc/ssh/sshd_config sed在这个文里Root的一行,匹配Root一行,将no替换成yes.
7.如何杀掉mysql进程:
ps aux|grep mysql|grep -v grep|awk '{print $2}'|xargs kill -9 (从中了解到awk的用途)
killall -TERM mysqld
kill -9 `cat /usr/local/apache2/logs/httpd.pid` 试试查杀进程PID

9.如何在编写SHELL显示多个信息,用EOF
cat << EOF
+--------------------------------------------------------------+
|  === Welcome to Tunoff services ===    |
+--------------------------------------------------------------+

EOF

15.因为同事要统计一下服务器下面所有的jpg的文件的大小,写了个shell给他来统计.原来用xargs实现,但他一次处理一部分,搞的有多个总和....,下面的命令就能解决啦.

find month_0802/ -name '*.jpg'|xargs ls -l |awk '{print $5}'|awk '{a+=$0} END {print a}'

57264035

37.清除僵死进程。

ps -eal | awk '{ if ($2 == "Z") {print $4}}' | kill -9

或者:ps aux|awk '{if($8=="Z") print $2}'| kill -9

腾讯Linux系统工程师面试题

两个文件,file1,file2,各包含100万个唯一的qq号码,但两个文件中的号码有部分重复

要求:
1、找出file1中有而file2中没有的qq号码
2、找出file2中有而file1中没有的qq号码
3、找出两个文件中都有的号码

1、找出file1中有而file2中没有的qq号码

sort file1> file1_tmp

sort file2>file2_tmp

comm -23 file1_tmp file2_tmp

或者:

sort file1 file2|uniq -d > file3

sort file1 file3|uniq -u

或者:grep -f file1 -v file2

2、找出file2中有而file1中没有的qq号码

sort file1> file1_tmp

sort file2>file2_tmp

comm -13 file1_tmp file2_tmp

或者:

sort file1 file2|uniq -d > file3

sort file2 file3|uniq -u

或者:grep -f file2 -v file1

3、找出两个文件中都有的号码

sort file1 file2|uniq -d

或者sort file1> file1_tmp

sort file2>file2_tmp

comm -12 file1_tmp file2_tmp

或者grep -f file1 file2

2.添加一个新组为class01,然后,添加属于这个组的30个用户,用户名的形式为stdXX,其中,XX从01到30?

3.在每个月的第一天备份并压缩/etc目录下的所有内容,存放在/root/backup 目录里,且文件名为如下形式yymmdd_etc,yy为年,mm 为月,dd为日。shell程序fileback存放在/usr/bin 目录下?

4.用shell 编程,判断一文件是不是字符设备文件,如果是将其拷贝到/dev 目下?

5.某系统管理员需要每天做一定的重复工作,编制一个解决方案:

(1).从下午4:50 删除/abc 目录下的全部子目录和全部文件;

(2).从早上8:00~下午6:00每小时读取/xyz目录下x1 文件中每行第一个域的全部数

据加入到/backup目录下的back01.txt文件内;

(3).每逢周一下午5: 50 将/data 目录下的所有目录和文件归档并压缩为文件

backup.tar.gz;

(4).在下午5:55 将IDE接口的CD-ROM�载(假设CD-ROM 的设备名为hdc);

(5).在早上8:00 开机后启动。

2. groupadd class01;for((i=1;i<=9;i++));do useradd std0$i -G

class01;done;for((i=10;i<=30;i++));do useradd std$i -Gclass01;done

3.1)编写脚本:fileback.sh

-------------------------

#!/bin/bash

tar-zcf /root/backup/`date +%y%m%d`_etc /etc

-------------------------

2)

cp fileback.sh /usr/bin/

3)使用管理员身份执行:crontab-e

-------------------------

00 02 01 * * /bin/sh /usr/bin/fileback.sh

4. copychar.sh

---------


#!/bin/bash

read -p "Please enter your filename:" FILENAME

if [ -c $FILENAME ]; then

cp $FILENAME /dev

else

echo "The $FILENAME is not c file."

fi

---------

5.使用计划任务来完成:

crontab -e

-----------------------

50 16 * * * /bin/rm -rf/abc/*

00 08-18 * * * /bin/awk '{ print $1 }' /xyz/x1 >> /backup/back01.txt

50 17 * * 01 /bin/tar -zcf /backup/backup.tar.gz /data

55 17 * * * umount/dev/hdc

-----------------------

设定BIOS每日上午08:00开机。

awk方面的题目:

test2.txt中内容如下:

1

2

3

4

5

6

7

8

要求输出结果为:

1, 2, 3, 4

5, 6, 7, 8

awk '{if (NR==1) {printf "%s, ",$0} else if (NR%4==0) {print $0} else {printf "%s, ",$0}}' test.txt

注意printf后面的参数,有一个,+空格

jieyou题目:

test.txt的问题内容如下:

aaa

bbb

aaa

bbb

ccc

aaa

bbb

ddd

如果出现

aaa

bbb

ccc

则替换为

ccc

ccc

ccc

方法1:

#!/bin/sed -nrf

/aaa/{$!N;/aaa\nbbb/{$!N;s/aaa\nbbb\nccc/ccc\nccc\nccc/;P;D};P;D};p

#或者改为 /aaa/{$!N;/aaa\nbbb/{$!N;s/aaa\nbbb\nccc/ccc\nccc\nccc/;P;D};P;D};P;D

test.sed test.txt >> test.txt

解释:$!表示不是最后一行。P:Print up to the first embedded newline of the current pattern space.(就是输出模式空间开头到第一个\n之间的内容)

D:If pattern space contains no newline, start a normal new cycle as if the d command was issued. Otherwise, delete text in the pattern space up to the first newline, and restart cycle with the resultant pattern space, without reading a new line of input.
(是删除模式空间开头到第一个\n(含)之间的内容,并且控制流跳到脚本的第一条语句。这里一定要注意这句话“and restart cycle with the resultant pattern space, without reading a new line of input.”,即它是在不改变当前行号的情况下,从头执行的。)这句话也充分的说明了,为什么很多人不愿意读中文翻译版书籍的原因。:-)

N:Add a newline to the pattern space, then append the next line of input to the pattern space. If there is no more input then sed exits without processing any more commands.
(追加下一个输入行到模板块后面并在二者间嵌入一个新行,意思就是说把下一行记录读到模板块,改变当前行号码例如把2,3,4行合并之后,行号变为2,模板块有可能会出现4行记录。如果没有下一个可处理的行,则退出)

p打印模板块的行。

总体意思:如果找到aaa并且不是最后一行则将下一行读取进来与/aaa\nbbb/对比,如果匹配则将下一行读取进来与/aaa\nbbb\nccc计较,如果不匹配则执行;P;D,即是:打印第一行然后跳到开头重新执行/aaa/{$!N......,$!N;s/aaa\nbbb\nccc/ccc\nccc\nccc/;P;D意思是:如果匹配了,直接打印,否则还是只打印第一行然后跳到开头重新执行。

方法2:参考http://bbs.chinaunix.net/thread-1041058-1-1.html

sed -n '1h;1!H;${g;s#aaa\nbbb\nccc#ccc\nccc\nccc#g;p}' test.txt

1h;1!H
就是把每一行都放到hold space中去,也就是把整个文件都读到了hold space
$当到最后一行的时候,g把hold space的内容放到pattern space中。
完全可以用:a;$!{N;ba;}完成同样的工作。
s#aaa\nbbb\nccc#ccc\nccc\nccc#g; 就是全部替换,然后p打印。

类似的问题:

old.html内容如下
----------------------------------------------------------------------------------------------------------------------------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<STYLE>A:visited {
 TEXT-DECORATION: none
}
A:active {
 TEXT-DECORATION: none
}
A:hover {
 TEXT-DECORATION: underline overline
 由于制作DVDrip的流程较为复杂,需要用到的工具软件也较多,因此事先应该做好准备工作,以免正式开工时手忙脚乱。<FONT
    color=#ffffff>&amp;[$[r</FONT><BR>
 <FONT
    color=#ffffff>&copy;雷傲极酷超级论坛 -- 雷傲极酷超级论坛,最新软件,BT
  下载,游戏娱乐,交友聊天,您网上的自由天堂  W </FONT><BR>

 1、电脑硬件及工具软件的准备<FONT
    color=#ffffff>JNp_O</FONT><BR>
 <FONT color=#ffffff>&copy;雷傲极酷超级论坛 --
  雷傲极酷超级论坛,最新软件,BT
  下载,游戏娱乐,交友聊天,您网上的自由天堂  Y</FONT><BR>

 制作DVDrip是一项对电脑配置要求较高的工作,你最好要拥有一颗强力的CPU,以下为建议配置:<FONT
    color=#ffffff>J+z</FONT><BR>
 <FONT color=#ffffff>&copy;雷傲极酷超级论坛 --
  雷傲极酷超级论坛,最新软件,BT
  下载,游戏娱乐,交友聊天,您网上的自由天堂  }c</FONT><BR>
 现在,只要再加上外挂字幕,一部完整意义上的DVDrip就制成了。<FONT
    color=#f3f6fa>Qs,!~B</FONT><BR>
 * 开始生成 RMVB
 文件。双击图一右下表中的文件项,你可以改变文件的存储位置。然后按下红色的 Encode 按钮,压缩就开始了。 <FONT
    color=#f3f6fa>*/cdmX</FONT><BR>

替换掉<FONT至</FONT>这之间的内容

sed -n '1h;1!H;${g;s#<FONT[^<]*</FONT>##g;p;}'

'[^>]' 指定“非 '>'”字符,其后的 '*' 完成该表达式以表示“零或多个非 '>' 字符”。

或者这样也可以:

sed -n ':a;$!{N;ba;};${s#<FONT[^<]*</FONT>##g;p;}' old.html

解析:首先设置标签:a,如果不是最后一行则执行{N;ba;},N是读取一行进来,ba表示返回:a标签重新开始执行。${s#<FONT[^<]*</FONT>##g;p;}表示如果是最后一行则执行{s#<FONT[^<]*</FONT>##g;p;}

参考文档:http://bbs.chinaunix.net/thread-1041058-1-1.html

http://wwdhks.blog.51cto.com/839773/869605 ***sed之G、H、g、h使用

3.处理以下文件内容,将域名取出并进行计数排序,如处理:

http://www.baidu.com/index.html

http://www.baidu.com/1.html

http://post.baidu.com/index.html

http://mp3.baidu.com/index.html

http://www.baidu.com/3.html

http://post.baidu.com/2.html

得到如下结果:

域名的出现的次数 域名

3 www.baidu.com

2 post.baidu.com

1 mp3.baidu.com

可以使用bash/perl/php/c任意一种

3、[root@localhost shell]# cat file | sed -e ' s/http://////' -e ' s///.*//' | sort | uniq -c | sort -rn

3 www.baidu.com

2 post.baidu.com

1 mp3.baidu.com

[root@codfei4 shell]# awk -F/ '{print $3}' file |uniq -c|sort -nr|awk '{print $1"\t"$2}'

3 www.baidu.com

2 post.baidu.com

1 mp3.baidu.com

13.编写个shell脚本将当前目录下大于10K的文件转移到/tmp目录下

方法1:

#!/bin/bash

for file in $(find /tmp/ -size +10k')

do

{

cp $file /data/backup/

}

done

方法2,好强大:

ls -l|cp $(awk '$5>10000 {print $NF}') /data/backup/

ls -l|cp `awk '$5>10000 {print $NF}'` /data/backup/

或者cp $(find /tmp/ -size +10k') /data/backup/


这样就会先执行awk 再执行cp命令,``等效于$()

14.在maillog中查找“Senders by message count",然后将之后的内容都打印出来。

cat /var/log/maillog |sed -n '/Senders by message count/,$p'

2.在当前目录中,把所有后缀名为.txt的文件中的"/sss/ttt"替换为"/aaa/bbb/ccc",用C-shell或TCL或perl编程完成。

#!/bin/bash

for file in $(ls *.txt)


do

sed -i 's#/sss/ttt#/aaa/bbb/ccc#g' $file

done

3.使用Perl ,Tcl 或 C实现如下的功能:

从文件mail.list中读取联系人和联系邮箱,并在其中读取@nvidia.com的联系人,按字母表排序并写入nvidia.list。

mail.list文件内容大致类似如下:

<name> <Email>

James  [email protected]

Jenny  [email protected]

Jojo   [email protected]

Keke  [email protected]

Lily   [email protected]

*****,很有难度,现有两个磁盘文件file1 和file 2。file 1有2个字段,分别是A(整数)、B(字符串),字段间以tab分割,共计1千万行,其中A不重复;file 2有2个字段,分别是a(整数)和 d(整数),字段间以tab分割,共计10万行,其中a不重复。需要生成一个新的文件,列出包含所有A=a的情况的B、d两列,tab分隔;对B按ASCII升序排序。请给出如果让你完成本项工作你会采用的工具和具体方式,务必注意实现效率。参考:http://bbs.chinaunix.net/thread-1289370-1-1.html

方法1:awk 'NR==FNR{a[$1]=$2}NR>FNR&&($1 in a){print $2"\t"a[$1]}' file2 file1 | sort

将file2的10w行放到a数组,然后对比1000w次(每次取一行)

方法2:awk 'NR==FNR{a[$1]=$2}NR>FNR&&($1 in a){print a[$1]"\t"$2}' file1 file2 | sort

将file1的1000w行放入a数组,然后对比10w次

对比结果,方法1需要10s,方法需要20s.

参考:http://hi.baidu.com/u200713054/item/bd61e13ea26bb70acfb9fe24

awk中使用NR和FNR的一些例子

1、用某一文件的一个域替换另一个文件中的的特定域?
http://bbs.chinaunix.net/forum/viewtopic.php?t=500015
文件passwd:
s2002408030068:x:527:527::/home/dz02/s2002408030068:/bin/pw
s2002408032819:x:528:528::/home/dz02/s2002408032819:/bin/pw
s2002408032823:x:529:529::/home/dz02/s2002408032823:/bin/pw文件shadow:
s2002408030068:$1$d8NwFclG$v4ZTacfR2nsbC8BnVd3dn1:12676:0:99999:7:::
s2002408032819:$1$UAvNbHza$481Arvk1FmixCP6ZBDWHh0:12676:0:99999:7:::
s2002408032823:$1$U2eJ3oO1$bG.eKO8Zupe0TnyFhWX9Y.:12676:0:99999:7:::用shadow文件中的密文部分替换passwd中的"x",生一个新passwd文件,如下所示
s2002408030068:$1$d8NwFclG$v4ZTacfR2nsbC8BnVd3dn1:527:527::/home/dz02/s2002408030068:/bin/pw
s2002408032819:$1$UAvNbHza$481Arvk1FmixCP6ZBDWHh0:528:528::/home/dz02/s2002408032819:/bin/pw
s2002408032823:$1$U2eJ3oO1$bG.eKO8Zupe0TnyFhWX9Y.:529:529::/home/dz02/s2002408032823:/bin/pw
CODE:
awk 'BEGIN{OFS=FS=":"} NR==FNR{a[$1]=$2}NR>FNR{$2=a[$1];print}' shadow passwdNR==FNR,第一个文件shadow,以$1为下标,将$2的值赋给数组a
NR>FNR,第二个文件passwd,将文件shadow$2的值赋值给文件passwd
2、
cat file1:
0011AAA 200.00 20050321
0012BBB 300.00 20050621
0013DDD 400.00 20050622
0014FFF 500.00 20050401cat file2:
I0011 11111
I0012 22222
I0014 55555
I0013 66666规则:比较 file1的1-4字符 和 file2的2-5 字符,如果相同,将file2 的第二列 与 file1 合并 file30011AAA 200.00 20050321 11111
0012BBB 300.00 20050621 22222
0013DDD 400.00 20050622 66666
0014FFF 500.00 20050401 55555
CODE:
awk 'NR==FNR{a[substr($1,2,5)]=$2}NR>FNR&&a[b=substr($1,1,4)]{print $0, a[b]}' file2 file1 >file3
QUOTE:
3、如果文件a中包含文件b,则将文件b的记录打印出来
文件a:
10/05766798607,11/20050325191329,29/0.1,14/05766798607
10/05767158557,11/20050325191329,29/0.08,14/05767158557

文件b:
05766798607
05766798608
05766798609
通过文件a和文件b对比,导出这样的文件出来.
10/05766798607,11/20050325191329,29/0.1,14/05766798607a
CODE:
awk -F'[/,]' 'ARGIND==1{a[$0]}ARGIND>1{($2 in a);print $0}' b a
awk -F'[/,]' 'NR==FNR{a[$0]}NR>FNR{($2 in a);print $0}' b a
QUOTE:
4、
file1文件内容
1  0.5 100
        10 15 36.5
file2文件
 50 10 9
        3.2 1  5
将两个文件合成一个文件如:
51  10.5 109
               13.2 16  41.5
就是对应的字段进行相加以后的数字。

CODE:
awk '{for (i=1;i<=NF;i++) a[i]=$i;getline <"file2";for (i=1;i<NF;i++) printf $i+a[i]" ";printf $NF+a[NF] "\n"}' file1
QUOTE:
5、
文件a
1000 北京市 地级 北京市 北京市
1100 天津市 地级 天津市 天津市
1210 石家庄市 地级 石家庄市 河北省
1210 晋州市 县级 石家庄市 河北省
1243 滦县 县级 唐山市 河北省
1244 滦南县 县级 唐山市 河北省b文件:
110000,北京市
120000,天津市
130000,河北省
130131,平山县
130132,元氏县
这样的字段
a中第二列在b中可能有可能没有,需要把有的匹配起来生成新的一列:要包含a和b的第一列。没有匹配的按照b原来的格式进行输出。
CODE:
awk 'BEGIN{FS="[ |,]";OFS=","}NR<=FNR{a[$2]=$1}NR>FNR{print $1,$2,a[$2]}' a b

FS="[ |,]" 表示输入分割域为空格或者,
QUOTE:
6、
file1的第一列与file2的第3列相同,
file1的第二列与file2的第4列的3-5位相同,
file1的第三列与file2的最后一列相同,
# cat file1
AAA 001 1000.00
BBB 001 2000.00
DDD 002 4000.00
EEE 002 5000.00
FFF 003 6000.00
# cat file2
01 1111 AAA WW001 $$$$ 1000.00
02 2222 BBB GG001 %%%% 2000.00
03 3333 CCC JJ001 **** 3000.00
04 4444 DDD FF002 &&&& 4000.00
05 5555 EEE RR002 @@@@ 5000.00
06 666 FFF UU003 JJJJ 6000.00
07 777 III II005 PPPP 7000.00
08 8888 TTT TT008 TTTT 8000.00
CODE:
# awk 'NR<=FNR{a[$1]=$1"x"$2"x"$3}
> NR>FNR{b=substr($4,3);c=$3"x"b"x"$6;if(c==a[$3]) print}' file1 file2
01 1111 AAA WW001 $$$$ 1000.00
02 2222 BBB GG001 %%%% 2000.00
04 4444 DDD FF002 &&&& 4000.00
05 5555 EEE RR002 @@@@ 5000.00
06 666 FFF UU003 JJJJ 6000.00

某知名公司shell笔试题

现有文本文件日志:
游戏id 在线时常time QQ号码
6534 456   37354893
6500 056   564572105
6534 4156   37354893
6500 2456   564572100
……… ………
要求,写shell脚本对改文件按照第二列在线时常排序,然后,统计每个QQ号总共时长和。
排序:sort -nk 2 test.txt

统计时长:awk 'NR>1{a[$3]+=$2}END{for (i in a) print i,a[i]}' test.txt

其实和这个原理一样: netstat -na|awk '/^tcp/ {s[$NF]++} END{for (i in s) print i,s[i]}'


文件整理
employee文件中记录了工号和姓名
employee.txt:
100 Jason Smith
200 John Doe
300 Sanjay Gupta
400 Ashok Sharma
bonus文件中记录工号和工资
bonus.txt:
100 $5,000
200 $500
300 $3,000
400 $1,250
要求把两个文件合并并输出如下
处理结果:
400 ashok sharma $1,250
100 jason smith $5,000
200 john doe $500
300 sanjay gupta $3,000

答案:join employee bonus | sort -k 2

$0 $? $! $$ 就是这个符号看看你能知道这几个系统变量的意义, $0就是该bash文件名 $?是上一指令的返回值 $*所有位置参数的内容:就是调用调用本bash shell的参数。 $@基本上与上面相同。只不过是 “$*”返回的是一个字符串,字符串中存在多外空格。 “$@”返回多个字符串。

15.有一个文件,每行记录了字符串(长度为1-127字节),大约有1亿行,请排出重复次数最高的前1000条。(可以用awk、sed等工具)。

比如问如下:

aaa

ccc

ccc

ddd

aaa

aaa

bbb

那么重复次数为:

aaa 3次

ccc 2次

ddd 1次

bbb 1次

当然不局限于shell,这只是一个工具而已,关键在与排序算法

方法1:

time sort testfile|uniq -c|sort -nr|head -1000
real 10m10.407s
user 7m10.591s
sys  1m12.293s
方法2:
time awk '{a[$0]++}END{for(i in a)print i,a[$i]}' testfile|sort -rn|head -1000
real 0m7.066s
user 0m6.564s
sys  0m0.252s

对比:方法2更加高效,特别是当字符重复出现的次数很高的时候,方法1sort1亿行,效率非常低,而方法2,直接把字符出现的次数放到数组,然后print 出来,再sort的时候也许只需要排序1000行记录,这样效率将会大大提高。

公司名称:奇虎360

以下是面试题:

1、写一个脚本查找最后创建时间是3天前,后缀是*.log的文件并删除。

2、写一个脚本将某目录下大于100k的文件移动至/tmp下。

3、写一个脚本将数据库备份并打包至远程服务器192.168.1.1 /backup目录下。

4、写一个防火墙配置脚本,只允许远程主机访问本机的80端口。

5、写一个脚本进行nginx日志统计,得到访问ip最多的前10个(nginx日志路径:/home/logs/nginx/default/access.log)。

6、写出下列命令的含义

(1)MaxKeepAliveRequests 100

(2)Options FollowSymLinks

Order Deny Allow

Deny from all

Allow from 192.168.1.1

7、写一个脚本把指定文件里的/usr/local替换为别的目录。

8、请简单阐述运维工程师的职责。


2、写一个脚本将某目录下大于100k的文件移动至/tmp下。
for i in `find /test -type f -size +100k`;do cd /test && mv $i /tmp;done

或者find . -size +100k -exec cp {} /tmp \;

3、写一个脚本将数据库备份并打包至远程服务器192.168.1.1 /backup目录下。

mount 192.168.1.1:/backup /mnt
cd /mnt
/usr/local/mysql/bin/mysqldump -hlocalhost -uroot test >test.sql
tar czf test.sql.tar.gz test.sql
rm -f test.sql
4、写一个防火墙配置脚本,只允许远程主机访问本机的80端口。
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
iptables -X
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -P INPUT DROP
5、写一个脚本进行nginx日志统计,得到访问ip最多的前10个(nginx日志路径:/home/logs/nginx/default/access.log
awk '{a[$1]++}END{for (j in a) print a[j],j}' /home/logs/nginx/default/access.log|sort -nr|head -10

6.写出下列命令的含义
(1)MaxKeepAliveRequests 100 连接的最大请求数
(2)Options FollowSymLinks 允许192.168.1.1可以列目录
   Order Deny Allow
   Deny from all
 Allow from 192.168.1.1
7.替换文件中的目录
sed 's#/user/local#tmp#g'  filename

出现几率比较高的:
1、简要描述Linux的启动过程?
BIOS启动引导(从mbr中装载启动管理器grub)----GRUB启动引导(装载kernel和initrd到内存)-----内核启动参数-sys init初始化..
2、简要叙述下列端口所运行的服务
21、22、23、25、110、143、873、3306  ftp ssh telnet stmp pop3 IMAP rsync mysql
3、TCP断头最小长度是__64_字节?
4、让某普通用户能进行cp /dir1/file1 /dir2的命令时,请说明dir1 file1最小具有什么权限?
dir1:rx,file1:444
5、简述TCP三次握手的过程?
客户端发送请求SYN,服务器端接收请求确认并回应SYN+ACK,客户端发回ACK回应....

企业运维面试题 分享 大家看看自己会多少 ?
2、当IO出现瓶颈时,应看哪个参数,为什么?
3、怎么查看内存使用情况?看到swap使用量大时,是不是意味着物理内存已不够用?
4、在/var/log下拷贝小于100K的文件到/tmp下,如果有失败的发送邮件到[email protected],用shell/perl/python来实现。


#!/bin/bash

for file in $(find /var/log/ -type f -size -100k);

do

{

cp $file /tmp/

if [ $? -eq 0 ]

then echo "ok"

else

echo "cp $file is failed"|mail -s "Note:cp is failed!" [email protected]

fi

}

done

5、简述智能DNS的工作原理及CDN的作用
7、主机CPU是 2×4核 内存16G 怎么配置mysql
8、监控MYSQL复制,如出现停止、不同步时发邮件到[email protected]
#!/bin/bash

ip=`ifconfig eth0|sed -n 2p|awk '{ print $2 }'|awk -F : '{ print $2 }'`

port=`netstat -anl|grep 3306 |sed -n '1p' |awk '{print $4}'|awk -F: '{ print $2}'`

array=($(mysql -uUSER -pPASSWD -e "show slave status\G"|grep "Running" |awk '{print $2}'))

if [ "$port" == "3306" ]
then
 if [ "${array[0]}" == "Yes" ] && [ "${array[1]}" == "Yes" ]
  then
  echo "slave is OK"
 else
echo " slave is NOT ok"|mail -s " slave is NOT ok !" [email protected]
fi

else
echo " mysql is down"|mail -s " mysql is down " [email protected]
fi

9、在不影响MYSQL正常服务的情况下,如何导出MYSQL数据。

mysqldump -all-databases >allbackupfile.sql 备份数据库

mysql -hhostname -uusername -p databasename < backupfile.sql 还原数据库

mysqldump -hhostname -uusername -ppassword databasename |gzip > backupfile.sql.gz 压缩备份数据库
gunzip < bckupfile.sql.gz |mysql -uusername -ppassword databasename 还原压缩的文件包

mysqldump -hhostname -uusername -ppassword databasename specific_table1 specific_table2 >backupfile.sql 备份单个数据库表
mysqldump -hhostname -uusername -ppassword -databases databasename1 atabasename2 databasename3 >multibackupfile.sql 备份多个数据库
mysqldump -no-data -databases databasename1 databasename2 databasename3>structurbackupfile.sql 备份数据库结构





你可能感兴趣的:(shell,笔试题)