linux运维面试题1

main.com

12.如果得到随机的字串,长度和字串中出现的字符表可定义,并将字串倒序显示,如把0123456789 作为基准的字串字符表,产生一个6位的字串642031,打印出的字串为130246,可使用bash/perl/php/c 任意一种.

[root@localhost ~]# awk -v count=6 'BEGIN

{srand();str=“0123456789”;len=length(str);for(i=count;i>0;i–)

marry[i]=substr(str,int(rand()*len),1);for(i=count;i>0;i–)

printf("%c",marry[i]);printf("\n");for

(i=0;i<=count;i++) printf("%c",marry[i]);printf("\n")}’

838705

507838

13.有10 台被监控主机、一台监控机,在监控机上编写脚本,一旦某台被监控机器/分区适用率大于80%, 就发邮件报警放到crontab 里面, 每10 分钟检查一次

#测试机器:虚拟机Linux as 4

#1.首先建立服务器间的信任关系。拿两台机器做测试

本机ip:192.168.1.6

[root@codfei ~]# ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

/root/.ssh/id_rsa already exists.

Overwrite (y/n)? y (以为我是第2 次建立关系所以此处覆盖原来的文件)

Enter passphrase (empty for no passphrase):(直接回车无须输入密钥)

Enter same passphrase again:

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

04:37:13:2a:4b:10:af:c1:2b:03:3f:6b:27:ce:b9:62 root@codfei

[root@codfei ~]# cd .ssh/

[root@codfei .ssh]# ll

-rw------- 1 root root 883 Apr 25 17:51 id_rsa

-rw-r–r-- 1 root root 221 Apr 25 17:51 id_rsa.pub

-rw-r–r-- 1 root root 442 Apr 25 17:37 known_hosts

id_rsa 是密钥文件,id_rsa.pub 是公钥文件。

[root@codfei .ssh]# scp id_rsa.pub192.168.1.4:/root/.ssh/192.168.1.6

root@192.168.1.4’s password:

id_rsa.pub 100% 221 0.2KB/s 00:00

这里把公钥文件取名为本机的ip 地址就是为了以后和更多的机器建立信任关系不发生混淆。

现在登陆到192.168.1.4 机器

[root@codfei ~]# cd .ssh/

[root@codfei .ssh]# cat 192.168.1.6 >> authorized_keys

然后回到192.168.1.6 机器直接

[root@codfei .ssh]# ssh 192.168.1.4

Last login: Wed Aug 8 12:14:42 2007 from 192.168.1.6

这样就可以了,里面偶尔涉及到权限问题。一般./ssh 文件夹是755 authorized_keys 为600 或者644

####脚本如下#######################

#!/bin/bash

#SCRIPT:df_check.sh

#Writeen by codfei Mon Sep 3 07:25:28 CST 2007

#PURPOSE:This script is used to monitor for full filesystems.

#######################Begining####################

####################

FSMAX=“80”

remote_user=‘root’ #####完全可以不用root

remote_ip=(192.168.1.5 192.168.1.6 192.168.1.7 192.168.1.8 192.168.1.9

192.168.1.10 192.168.1.11 192.168.1.12 192.168.1.13 192.168.1.14 ) ---->

这里填写你要监控的主机ip

ip_num=‘0’

while [ “ i p n u m " − l e " ip_num" -le " ip
n

um"−le"(expr ${#remote_ip[@]} - 1)” ]

do

read_num=‘1’

ssh “ r e m o t e u s e r " @ " remote_user"@" remote
u

ser"@"{remote_ip[$ip_num]}” df -h > /tmp/diskcheck_tmp

grep ‘^/dev/*’ /tmp/diskcheck_tmp|awk ‘{print $5}’|sed ‘s/%//g’ >

/tmp/diskcheck_num_tmp

while [ “$read_num” -le $(wc -l < /tmp/diskcheck_num_tmp) ]

do

size= ( s e d − n " (sed -n " (sed−n"read_num"‘p’ /tmp/diskcheck_num_tmp)

if [ “ s i z e " − g t " size" -gt " size"−gt"FSMAX” ]

then

$(grep ‘^/dev/*’ /tmp/diskcheck_tmp|sed -n $read_num’p’ >

/tmp/disk_check_mail)

$(echo KaTeX parse error: Expected ‘}’, got ‘EOF’ at end of input: {remote_ip[ip_num]} >> /tmp/disk_check_mail)

$(mail -s “diskcheck_alert” admin < /tmp/disk_check_mail)

fi

read_num=$(expr $read_num + 1)

done

ip_num=$(expr $ip_num + 1)

done

#############over################################

################让脚本每十分钟执行一次#############

在cron 表中加入

0/10 * * * * /home/codfei/diskcheck.sh 2>&1

################################################

##########################

14.如何统计apache 的每秒访问数?

tail access_log | awk ‘{print $1,$4}’

[root@localhost logs]# grep -c date -d ‘3 second ago’ +%T access_log

0

15.将一个文本的奇数行和偶数行合并,第2 行和第3 行合并

[root@localhost bin]# cat 1

48 Oct 3bc1997 lpas 68.00 lvx2a 138

484 Jan 380sdf1 usp 78.00 deiv 344

483 nov 7pl1998 usp 37.00 kvm9d 644

320 aug der9393 psh 83.00 wiel 293

231 jul sdf9dsf sdfs 99.00 werl 223

230 nov 19dfd9d abd 87.00 sdiv 230

219 sept 5ap1996 usp 65.00 lvx2c 189

216 Sept 3zl1998 usp 86.00 kvm9e 234

[root@localhost bin]# sed ‘$!N;s/\n/ /g’ 1

48 Oct 3bc1997 lpas 68.00 lvx2a 138 484 Jan 380sdf1 usp 78.00 deiv 344

483 nov 7pl1998 usp 37.00 kvm9d 644 320 aug der9393 psh 83.00 wiel 293

231 jul sdf9dsf sdfs 99.00 werl 223 230 nov 19dfd9d abd 87.00 sdiv 230

219 sept 5ap1996 usp 65.00 lvx2c 189 216 Sept 3zl1998 usp 86.00 kvm9e 234

[root@localhost bin]# sed -n -e 2p -e 3p 1|sed ‘$!N;s/\n/ /’

484 Jan 380sdf1 usp 78.00 deiv 344 483 nov 7pl1998 usp 37.00 kvm9d 644

16.自动ftp 上传

#!/bin/sh

ftp -n<<END_FTP

open 192.168.1.4

user codfei duibuqi //用户名codfei 密码duibuqi

binary

prompt off //关闭提示

mput test //上传test

close

bye

END_FTP

自动ssh 登陆 从A 到B 然后再到c

#!/usr/bin/expect -f

set timeout 30

spawn ssh codfei@B

expect “password:”

send “pppppp\r”

expect “]*”

send “ssh codfei@C\r”

expect “password:”

send “pppppp\r”

interact

17.从a.log 文件中提取包含―WARNING或FATAL,同时不包含―IGNOR的行,然后,提取以―:分割的第五个字段?

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

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

#!/bin/bash

groupadd class1

for ((i=1;i<=30;i++))

do

if [ $i -lt 10 ];then

username=“std0”$i

else

username=“std”$i

fi

useradd -G class1 $username

done#!/bin/bash
groupadd class1
for ((i=1;i<=30;i++))
do
if [ i − l t 10 ] ; t h e n u s e r n a m e = " s t d 0 " i -lt 10 ];then username=“std0” i−lt10];thenusername="std0"i
else
username=“std”$i
fi
useradd -G class1 $username
done

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

crottab -e

00 1 1 * * /usr/bin/fileback

vi /usr/bin/fileback
#!/bin/bash

cd /tmp

tar zcvf date +%Y%m%d_etc /etc

mv date +%Y%m%d_etc /root/backup

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

参考答案:

#!/bin/bash

directory=/dev

for file in anaconda-ks.cfg install.log install.log.syslog

do

if [ -f $file ]

then

cp $file d i r e c t o r y / directory/ directory/file.bak

echo " HI, $LOGNAME $file is backed up already in $directory !!"

fi

done

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

(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 前开机后启动。

解决方案:

(1)用vi 创建编辑一个名为prgx 的crontab 文件;

prgx 文件的内容:

50 16 * * * rm -r /abc/*

(2)、0 8-18/1 * * * cut -f1 /xyz/x1 >;>; /backup/bak01.txt

(3)、50 17 * * * tar zcvf backup.tar.gz /data

(4)、55 17 * * * umount /dev/hdc

(5)、由超级用户登录,用crontab 执行 prgx 文件中的内容:

root@xxx:#crontab prgx;在每日早晨8:00 之前开机后即可自动启动crontab。

21.使用shell,建立class1 用户组,再批量建立stu1–stu30 的用户,并指定用户组为class1。

vi autoaddusr

#!/usr/bin/php -q

补充vim常用快捷方式
dd 删除当前行

G 移动到文章末行

gg移动到文本首行

x 编辑后保存推出,相对于wq!

shift + $ 删除当前位置到行末

shift + G 删除当前位置到文本结束

  • 0
    点赞
  • 1
    收藏 更改收藏夹
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值