- 浏览: 2870716 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (2529)
- finance (1459)
- technology (218)
- life (343)
- play (150)
- technology-component (0)
- idea (6)
- house (74)
- health (75)
- work (32)
- joke (23)
- blog (1)
- amazing (13)
- important (22)
- study (13)
- Alternative (0)
- funny (8)
- stock_technology (12)
- business (16)
- car (21)
- decorate (4)
- basketball (2)
- English (16)
- banker (1)
- TheBest (1)
- sample (2)
- love (13)
- management (4)
最新评论
-
zhongmin2012:
BSM确实需要实践,标准ITIL服务流程支持,要做好,需要花费 ...
BSM实施之前做什么 -
shw340518:
提示楼主,有时间逻辑bug:是你妈二十那年写的 那会儿连你爹都 ...
80后辣妈给未来儿子的信~我的儿,你也给我记住了~~~ -
guoapeng:
有相关的文档吗?
it项目管理表格(包含146个DOC文档模板) -
solomon:
看到的都是 这种 CTRL+C 和 CTRL+V 的文章, ...
Designing a website with InfoGlue components -
wendal:
恩, 不错. 有参考价值
Designing a website with InfoGlue components
1.要求分析Apache访问日志,找出里面数量在前面100位的ip数.日志大约在78M左右.一下是apache日志文件
节选(其中日志access.log):
218.107.27.137 .....
202.112.32.22 ....[26/Mar/2006:23:59:55 +0800].......
shell程序如下:
方法一:
(1)#!/bin/bash
#先找出唯一IP
cat access.log|awk '{print $1}'|sort -d >ip.txt
(2) 再用唯一的IP去日志里面计算出现的次数
while read IP
do
COUNT=`cat access.log|grep $IP|wc -l`
echo $COUNT:$IP >>count.txt
done< ip.txt
cat count.txt|sort -n -r|head -100 > top100.txt
echo "" > count.txt
方法二:
awk '{print $1}' access.log|sort -n -t. +0 +1 +2 +3|uniq -c|sort -nr|head -100
方法三:
cat access.log|awk '{print $1}'|sort|uniq -c|awk 'NR<=100{print $1,$2}'|sort -r
方法四:
cat access.log|awk '{print $1}'|sort -n|uniq -c|sort -nr|head -100
2. 百度上使用site inurl语法查询,输入site:www.baidu.com inurl:news,则会搜出所有在www.baidu.com
站点上的包含"news"子串的url.
现在有两份数据:一份是site_inurl.txt,一份是url.txt.其中,site_inurl.txt中每一行是一个site
inurl 语法组成的查询串,url.txt保存的是url列表.
在url列表中找出所有能被site_inurl.txt中查询串检索到的url
如:site中inurl.txt内容如下:
site:www.baidu.com inurl:/more
site:zhidao.baidu.com inurl:/browse/
site:www.sina.com.cn inurl:www20041223am
url.txt内容如下:
http://www.baidu.com/guding/more.html
http://www.baidu.com/events/20060105/photomore.html
http://www.sina.com.cn/head/www20021123am.html
http://www.sina.com.cn/head/www20041223am.html
则你的程序运行结果应该为:
http://www.baidu.com/guding/more.html
http://www.sina.com.cn/head/www20041223am.html
shell程序:
#!/bin/bash
#file.sh
while read -r line
do
set $(echo $line|awk -F"[: ]" '{print $2,$4}')
grep "$1.$2" url.txt
done < inurl.txt
注意公式:
echo "forum-45-85.html|cut -d- -f3|cut -d. -f1
1.编写一个名为cala的shell过程,其功能是小型计算器,可以进行加减乘除运算。两个操作数由位置给出
(位置参数1和3为两操作数,位置参数2是运算符),并将四种运算加到cala文件中。
#!/bin/sh
#operation.sh
a_number() //注释:判断是否为数字的函数
{
_NUM=$1
_NUM=`echo $1|awk '{if($0~/[^0-9]/) print "1"}'`
if [ -z $NUM ]
then
return 1
else
return 0
fi
}
ARGS=3
TESTFILE=cala
E_BADARGS=65
if [ "$#" -ne "$ARGS" ]
then
echo "Usage:`basename $0` the operation needs right parameters"
echo $E_BADARGS
fi
if a_number $1 -a a_number $3 ; then
echo "error parameters"
exit 1
fi
case $2 in
+) A=$(($1 + $2))
echo "$1 + $3 = $A" >>$TESTFILE
;;
-) A=$(($1 - $2))
echo "$1 - $2 = $A" >>$TESTFILE
;;
\*) A=`expr $1 \* $3` //注释:等号后面不能有空格,否则bash不识别
echo "$1 * $3 = $A" >>$TESTFILE
;;
/) A=`expr $1 / $3`
echo "$1 /$3 = $A" >>$TESTFILE
;;
esac
exit $?
2. 将一目录的所有文件的扩展名改为bak
(1)#!/bin/sh
#changextent.sh
for i in *
do
if [ -f $i ] ; then
mv $i ${i%%.*}.bak
fi
done
(2) for myfile in *
do
if [ -f $myfile ]
then
if [ ${myfile##*.}!="bak" ]
then
mv $myfile ${myfile%.*}.bak
fi
fi
done
3.将两个文件a和b中相同的单词删除,区分大小写
#!/bin/sh
#letterdel.sh
File1=a
File2=b
File3=a.$$
File4=b.$$
tr -sc 'A-Za-z' '\012' <$File1|sort|uniq >$File3
tr -sc 'A-Za-z' '\012' <$File2|sort|uniq >$File4
while read line
do
temp=`awk -v output=$line '{if($1==output) print "1"}' $File4`
if [ "$temp" ==1 ]
then
sed "s/$line\>//g" $File1 >a.bak
sed "s/$line\>//g" $File2 >b.bak
rm $File1
rm $File2
mv a.bak $File1
mv b.bak $File2
fi
done <$File3
rm $File3 >/dev/null 2>&1
rm $File4 >/dev/null 2>&1
1.按照运行结果,编写一个名为xunhuan的shell过程
0
10
210
3210
43210
543210
6543210
76543210
876543210
程序如下:
#!/bin/sh
#xunhuan
for(i=0;i<9;i++)
do
a=$i$a
echo $a
done
2.shell编程,实现一下功能:/tmp路径下有800个文件,文件名的格式:filename_YYYYMMDD_序列号((001-999)
.dat,例如:filename_20040108_089.dat,现在想把这些文件名改名,文件名为:file_TODAY(当前日期_序列号
(从500开始,到达999之后从001开始).dat,例如_089为_589,099为_599.
#!/bin/sh
DEST_FILE_PART2="_`date '+%Y%m%d'`_"
EXT_NAME=".dat"
SRC_FILE_LIST=`find /tmp -name "*_*_*$EXT_NAME" -print`
for each in $SRC_FILE_LIST
do
DEST_FILE_PART1=`echo $each|awk -F_ '{print $1}'`
OLD_NUM=`echo $each|awk -F_ '{print $3}'|awk -F. '{print $1}'`
DEST_FILE_PART3=`expr $OLD_NUM + 500`
[ $DEST_FILE_PART3 -gt 999 ] && DEST_FILE_PART3=`expr $OLD_NUM - 499`
&& DEST_FILE_PART3=`printf %03d $DEST_FILE_PART3`
DEST_FILE=$DEST_FILE_PART1$DEST_FILE_PART2$DEST_FILE_PART3
mv $each $DEST_FILE
done
3.设计一个shell程序,在/userdata目录下建立50个目录,即user1-user50,并设置每个目录的权限,其中其他
用户的权限为:读;文件所有者的权限:读,写,执行;文件所有者:读,执行.
#!/bin/bah
#adddir.sh
i=1
while [ $i -le 50 ]
do
if [ -d /userdata ]
then
mkdir -p /userdata/user$i
else
mkdir /userdata
mkdir -p /userdata/user$i
fi
chmod 754 /userdata/user$i
i=$(($i+1))
done
4.编写shell程序,实现自动删除50个账号的功能,账号为stud1至stud50
#!/bin/sh
#deluser.sh
i=1
while [ $i -le 50 ]
do
if [ -n "`cat /etc/passwd|grep stud$i`" ]
then
userdel -r stdu$i
else
echo "No find stud$i"
i=$(($i + 1))
fi
done
5.打印1-99之间的奇数到文件
方法一:
seq >newfile 1 2 99
方法二:
#!/bin/bash
i=1
while [ $i -le 99 ]
do
if [ $i % 2 == 1 ]
then
echo "$i" >newfile
fi
done
6.将当前目录下的以数字开头的文件打包
打包命令: tar -cvf 文件名 要打的文件(仅打包)
tar -zcvf 文件名 要打的文件(以gzip压缩)
压缩命令: tar -zxvf 解压缩文件
程序如下:
#!/bin/sh
#tar.sh
List=`ls -l|awk '{print $9}'|grep '^[0-9]'`
tar -cvf soft.tar $List
7.从a.log文件中提取包含"WARNING"或"FATAL",同时不包含"IGNOR"的行,然后提取以":"分割的第5个字段.
grep -E 'WARNING|FATAL' file|grep -v 'IGNOR'|awk -F: '{print 5}'
1.有一个文件,里面有二列,第一列ip地址,第二列是时间,同一个ip可能出现多次,但时间不同.
文件类似下面的样子:
192.168.1.2 13:10
192.127.12.1 13.11
192.168.1.2 14:22
现要求写一脚本,显示出现最多的ip top 10
awk '{print $1}' file|sort|uniq -c|sort -nr|head -10
2.假设Apache产生的日志文件为access.log,在Apache正在运行的时候,执行命令mv access.log access.bak
,执行完毕后,请问新的apache日志会打印到那里?为什么?
答: 新的日志会打印在access.bak中. 因为apache启动时,会找到access.log文件,随时准备向文件中追
加日志,虽然此时文件被改名,但是由于服务正在运行,因为它的inode节点的位置没有变,程序打开的
fd仍然会指向原来的那个inode.不会因为文件名的改变而改变,但若重启服务器之后,系统就会检查
access.log文件是否存在,不存在,则创建.
3.在shell环境中,如何查看远程Linux系统运行了多少时间?
ssh user@被监控的主机ip "uptime"|awk '{print $3,$4}'
4.处理一下文件内容,将域名取出并进行计数排数,如处理:
http://www.baidu.com/index.html
http://post.baidu.com/index.html
http://mp3.baidu.com/index.html
得到如下结果:域名的出现次数,域名
2 post.baidu.com
1 mp3.baidu.com
shell程序如下:
方法一: #cat file|sed -e 's/http:\/\///' -e 's/\/.*//'|sort|uniq -c|sort -nr|head -10
方法二: #awk -F/ '{print $3}' file|sort -r|uniq -c|awk '{print $1 "\t",$2}'
5.如果得到随机的字串,长度和字串中出现的字符表可定义并将字串倒序显示,如把0123456789作为基准的
字串字符表,产生一个6位的字串642031,打印出的字符串为130246,可使用bash/perl/php/c任一种。
bash程序如下:
#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
6.如何查看当前Linux状态。如cpu使用,内存使用,负载情况等
答:linux 中,"/proc"是个伪文件目录,不占用系统空间,及时反应出内存现在使用的进程情况
其中许多文件都保存系统运行状态和相关信息。
对于/proc可以浏览其文件内容:
cpuinfo 主机cpu信息
filesystems 文件系统信息
meninfo 主机内存信息
version Linux版本信息
diskstatus 磁盘负载情况
另外top命令可以动态的显示出当前系统进程用户的使用情况,free命令可以查看内存信息
ps 查看进程情况。
7.比如,ext2文件系统,如果异常死机,开机如何修复文件系统?
答:如果异常死机,如断电,通知机房的人开机之后,我们需要远程修复,检查文件系统。除了
/ 分区之外,其他分区:umount /home
fsck -y /home
/ 分区需要开机之后由机房人员检查。随后我们登录并扫描/home分区
8.如何检查一个进程所使用的文件句柄?
答:看这里面/proc/进程号/fd/ 的文件个数就行了
9.查看Apache的进程数。
# ps -ef|grep httpd|wc -l
10.如何统计apache的每秒访问数?
tail access_log|awk '{print $1,$4}'
其中文件在:/etc/httpd/access_log
11.说明一下/proc/sys子目录的作用
答:该子目录的作用是报告各种不同的内核参数,并让你能交互的更改其中某些。与/proc中所有
其他文件不同,该目录中的某些文件可以写入,不过针对root。一下是该子目录的两个最常见
的用途:
(1)允许路由:即便是Mandrakelinux 默认的内核也是允许路由的。你必须显式允许它这么做
为此:#echo 1 >/proc/sys/net/ipv4/ip_forward.
如果您要禁用,则让上述1改为0
(2)阻止ip欺骗:ip欺骗会让人认为某个来自于外部的某个数据包来自于它到达的那个接口,
这一技术常被crack利用。你可以阻止这种入侵:
#echo 1 >/proc/sys/net/ipv4/conf/all/rp_filter.
这次改变仅由系统运行时有效,系统重启后,会改变为默认值。你可以将以上命令添加到
/etc/rc.d/rc.local中,启动就会运行。另一方法:修改/etc/sysctl.conf
1.有10台被监控主机,一台监控机,在监控机上编写脚本,一旦某台监控机器/分区使用率大于80%,就发出
报警,放到crontab里面,每10分钟检查一次。
(1)首先,建立信任关系 1 VS 10. 但拿两台机器(192.168.1.6,192.168.1.4)做试验
#ssh-keggen -b 1024 -t rsa //(以root用户)
#cd .ssh/
#ls
id_rsa
id_rsa.pub
knows_host
#scp id_rsa.pub 192.168.1.4:/root/.ssh/192.168.1.6
这里把公钥取名为可信任主机的IP地址
现在登录到192.168.1.4机器
#cd .ssh/
#cat 192.168.1.6 >> authorized_keys
然后回到192.168.1.6机器。
#ssh 192.168.1.4
这样就可以了,里面可能涉及到权限问题。一般.ssh/文件夹为755,authorized_keys 600或644
(2)脚本如下:
#!/bin/sh
#script:df_check.sh
FSMAX="80"
remote_user='root'
remote_ip=(192.168.1.2 192.168.1.3 192.168.1.4 .......) //十个ip地址
ip_num='0'
while [ "$ip_num" -le "$(expr ${#remote_ip[@]} - 1)" ]
do
read_num='1'
ssh "$remote_user"@"${remote_ip[$ip_num]}" df -h >/tmp/diskcheck_tmp
grep '^/dev/*' /tmp/diskcheck_tmp|awk '{print $5}'|sed 's/\%//g' >
/tmp/diskcheck_tmp_num
while [ "$read_num" -le $(wc -l < /tmp/diskcheck_tmp_num)] //计算有多少行
do
size=$(sed -n "$read_num"'p' /tmp/diskcheck_tmp_num)
if [ "$size" -gt "$FSMAX" ]
then
$(grep '^/dev/*' /tmp/diskcheck_tmp|sed -n $read_num'p' >
/tmp/disk_mail)
$(echo $(remote_ip[$ip_num]) >> /tmp/disk_mail)
$(mail -s "diskcheck_alert" admin </tmp/disk_mail)
fi
read_num=$(expr $read_num + 1)
done
ip_num=$(expr $ip_num + 1)
done
(3)放在crontab里面
#######################################################################
################让脚本每十分钟执行一次#################################
在cron表中:
0/10 * * * * /home/codefei/diskcheck.sh 2>&1
2.自动ftp上传.
#!/bin/sh
ftp -n << END_FTP
open 192.168.0.102
user athos athosczx
binary
prompt off //关闭提示
mput test //上传test
close
bye
END_FTP
3.自动登录ssh.从A到B再到C
#!/usr/bin/expect -f
set timeout 30
spawn ssh athos@192.168.0.102
expect "password"
send "PPPPPPP\r"
expect "*]"
send "ssh athos@192.168.0.102"
expect "password:"
send "pppppppp\r"
interact
4.腾讯一shell试题.
假设qq.tel文件内容:
12334:13510014336
12345:12334555666
12334:12343453453
12099:13598989899
12334:12345454545
12099:12343454544
分类如下:
[12334]
13510014336
12343453453
...........
[12099]
13598989899
12343454544
............
实现如下:
cat qq.tel|sort|awk -F: '{if(tmp!=$1){tmp=$1;print "["tmp"]";}print " $2";}"
发表评论
-
New Enterprise Security Solutions
2011-09-13 15:46 0<!-- [if !mso]> <styl ... -
ES Announces Enterprise Security Solutions
2011-09-13 15:40 0<!-- [if !mso]> <styl ... -
linux下如何将文件打包、压缩并分割成制定大小?
2010-09-15 18:52 3266将大文件或目录打包、 ... -
rhel4 yum安装, 使用
2010-09-07 16:37 0第一种方法: yum源来自chinalinuxpub.com ... -
Windows: 远程自动安装程序
2010-08-26 15:48 1033问题的提出 作为 ... -
Oracle体系结构
2010-08-07 09:53 964Oracle体系结构 Oracle Server包括Oracl ... -
ocp sesson 3
2010-07-31 14:39 0show parameter undo 只有 默认情况下服务 ... -
ocp session 2
2010-07-25 17:00 0/home/oracle/raInventory/orains ... -
ocp session 1
2010-07-24 13:02 0ocp first lesson D:\oracle_cou ... -
Python的xmlrpc调试
2010-07-19 23:55 2065Python的xmlrpc 调 试 ----------- ... -
mdadm使用详解及RAID 5简单分析
2010-07-11 16:19 1344http://blog.csdn.net/chinalinux ... -
Linux的lvm的基本配置步骤
2010-07-11 14:53 12401.增加硬件 增加的ide硬盘前缀为hd,scs ... -
OCP study material
2010-07-11 13:52 0\\192.168.1.105watch -n 1 'stat ... -
apache+python+mod_python+django 编译安装指南
2010-06-24 17:25 14371、本文将知道你在 linux 下使用源码包安装 ... -
在ubuntu下配置apache运行python脚本
2010-06-22 16:11 2231常用的简单命令 sudo apt ... -
Python 2.5 Quick Reference
2010-06-21 11:18 1407... -
shell 面试题汇集
2010-06-10 19:50 1000利用 top 取某个进程的 CPU 的脚本 : ... -
EMC技术支持工程师笔试部分试题回忆
2010-06-07 15:16 1591要查看更多EMC公司笔经相关信息,请访问EMC公司校园招聘CL ... -
linux shell 条件语句
2010-06-03 23:29 1729... -
删除所有表的所有记录(MSSQL)
2010-05-25 14:20 1530昨天对一测试库要删除所有记录后生成一个备份 ...
相关推荐
面试题2:编码实现希尔(Shell)排序 11.2 交换排序 面试题3:编码实现冒泡排序 面试题4:编码实现快速排序 11.3 选择排序 面试题5:编码实现直接选择排序 面试题6:编程实现堆排序 11.4 基数排序 面试题7:编程实现...
集合自身春招经验整理出的软件测试工程师的常见面试题,适合应届毕业生,内容主要是软件测试、shell脚本、Linux操作系统,包括软件测试基础知识、web测试基本方法、爬虫基础、Linux操作系统、微信小程序、shell脚本...
就像任何其他典型的操作系统一样,Linux拥有所有这些组件:内核,shell和GUI,系统实用程序和应用 程序。Linux比其他操作系统更具优势的是每个方面都附带其他功能,所有代码都可以免费下载。 Linux 开机启动过程? 1...
《跟老男孩学Linux运维:Shell编程实战》第五部分为第17章~第20章,着重讲解Linux信号及trap命令的企业应用实践、Expect自动化交互式程序的应用实践、贯穿全书技术的面试题和企业实战案例,以及子Shell知识。
本书可分为五大部分:第一部分为第1章~第4章,此...第五部分为第17章~第20章,着重讲解Linux信号及trap命令的企业应用实践、Expect自动化交互式程序的应用实践、贯穿全书技术的面试题和企业实战案例,以及子Shell知识。
1、一张表,里面有 ID 自增主键,当 insert 了 17 条...15、Mysql 驱动程序是什么 16、TIMESTAMP 在 UPDATE CURRENT_TIMESTAMP 数据类型上做什么 17、主键和候选键有什么区别 18、如何使用 Unix shell 登录 Mysql ...
本书可分为五大部分:部分为第1章~第4章,此部分...第五部分为第17章~第20章,着重讲解Linux信号及trap命令的企业应用实践、Expect自动化交互式程序的应用实践、贯穿全书技术的面试题和企业实战案例,以及子Shell知识。
本书可分为五大部分:部分为第1章~第4章,此部分...第五部分为第17章~第20章,着重讲解Linux信号及trap命令的企业应用实践、Expect自动化交互式程序的应用实践、贯穿全书技术的面试题和企业实战案例,以及子Shell知识。
本书可分为五大部分:第一部分为第1章~第4章,此...第五部分为第17章~第20章,着重讲解Linux信号及trap命令的企业应用实践、Expect自动化交互式程序的应用实践、贯穿全书技术的面试题和企业实战案例,以及子Shell知识。
本书可分为五大部分:第一部分为第1章~第4章,此...第五部分为第17章~第20章,着重讲解Linux信号及trap命令的企业应用实践、Expect自动化交互式程序的应用实践、贯穿全书技术的面试题和企业实战案例,以及子Shell知识。
本书可分为五大部分:第一部分为第1章~第4章,此...第五部分为第17章~第20章,着重讲解Linux信号及trap命令的企业应用实践、Expect自动化交互式程序的应用实践、贯穿全书技术的面试题和企业实战案例,以及子Shell知识。
本书可分为五大部分:第一部分为第1章~第4章,此...第五部分为第17章~第20章,着重讲解Linux信号及trap命令的企业应用实践、Expect自动化交互式程序的应用实践、贯穿全书技术的面试题和企业实战案例,以及子Shell知识。
2.8 面试题选与实例精讲 2.8.1 面试题选 2.8.2 实例精讲 2.9 习题 第3章 C程序控制结构和gcc编译器 3.1 C程序的控制结构 3.1.1 C程序语句概述 3.1.2 C程序的3种基本控制结构...
java开发笔试题面试题真棒明星 我的 GitHub 星星的精选列表! 生成者 内容 动作脚本 - 具有 Flash 回退功能的 HTML5 网络摄像头图像捕获库 艾达 - C++ 和 Ada 的简单命令行参数解析器。 苹果脚本 - 一款 Mac 工具,...
2.8 面试题选与实例精讲 2.8.1 面试题选 2.8.2 实例精讲 2.9 习题 第3章 C程序控制结构和gcc编译器 3.1 C程序的控制结构 3.1.1 C程序语句概述 3.1.2 C程序的3种基本控制结构...
2.8 面试题选与实例精讲 2.8.1 面试题选 2.8.2 实例精讲 2.9 习题 第3章 C程序控制结构和gcc编译器 3.1 C程序的控制结构 3.1.1 C程序语句概述 3.1.2 C程序的3种基本控制结构...
2.8 面试题选与实例精讲 2.8.1 面试题选 2.8.2 实例精讲 2.9 习题 第3章 C程序控制结构和gcc编译器 3.1 C程序的控制结构 3.1.1 C程序语句概述 3.1.2 C程序的3种基本控制结构...
2.8 面试题选与实例精讲 2.8.1 面试题选 2.8.2 实例精讲 2.9 习题 第3章 C程序控制结构和gcc编译器 3.1 C程序的控制结构 3.1.1 C程序语句概述 3.1.2 C程序的3种基本控制结构...