Java面试12|Linux及Shell脚本
来源:互联网 发布:翻译软件 7.0 编辑:程序博客网 时间:2024/04/30 02:41
1、关于awk命令的面试题
(1)最近登录的5个帐号
last -n
5
| awk -F
':'
(指定域分割符号)
'{print $1}'
-n表示number,有多少行需要显示。读入有'\n'换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是"空白键" 或 "[tab]键",所以$1表示登录用户,$3表示登录用户ip,以此类推。
(2)用awk统计文本行数
awk
'{count++} END{print "user count is ", count}'
/etc/passwd
awk
'END{print "user count is " NR}'
filename
或者直接wc -l 文件名也可以
grep -o
'此设备id在黑名单之内'
jr-adx-dsp_dspbidding.log.20170626* | wc -l
还有很多其它的,如:
(3)Test内容如下:
zhangsan
80
lisi
81.5
wangwu
93
zhangsan
85
lisi
88
wangwu
97
zhangsan
90
lisi
92
wangwu
88
要求输出格式:
name#######average#######total
zhangsan xxx xxx
lisi xxx xxx
wangwu xxx xxx
其中average为平均成绩,而total为总成绩
awk
'{a[$1]+=$2;b[$1]++};END{for(i in a)print i,a[i]/b[i],a[i]}'
test.txt
居然能用$1来当数据索引。
(4)这个文件夹里面每一层级都有个.svn隐藏文件夹,需要删除,使用如下命令:
$find . -type d -name
"*.svn"
| xargs rm -rf
(5)统计以p开始的行的个数:
find -name test.sh -type f -print|xargs awk
'/^p/{count++}END{print count}'
使用了xargs,将找到的文件名做为参数传递给awk命令,如果输出的是一行行内容,就没有必要加xargs了,如下:
$cat a.txt |awk
'{print $2}'
(6)提取文件中含有"apa"的单词并输出到一个文件中
find . -name
"*.txt"
|xargs grep -oE
"[a-zA-Z]*apa[a-zA-Z]*"
|awk -F:
'{print $2}'
参考:http://www.cnblogs.com/chengmo/archive/2010/10/10/1847287.html
2、编写一个简单的Shell脚本
查找/root/目录下是否存在该文件
#/bin/bash
// 以bash shell来解释
echo
"enter a file name:"
read a
// 读取用户输入的信息并向右侧变量分配用户输入的值
if
test -e /root/$a
// test检查文件和比较值,注意变量引用时用$
then echo
"the file is exist!"
else
echo
"the file is not exist!"
fi
if/else条件的格式如下:
if
[表达式]
then
命令语句块
else
命令语句块
fi
3、Linux系统监控命令
(1)top命令:Linux命令。可以查看实时的CPU使用情况。也可以查看最近一段时间的CPU使用情况。
(2)ps命令:Linux命令。强大的进程状态监控命令。可以查看进程以及进程中线程的当前CPU使用情况。属于当前状态的采样数据。
(3)jstack:Java提供的命令。可以查看某个进程的当前线程栈运行情况。根据这个命令的输出可以定位某个进程的所有线程的当前运行状态、运行代码,以及是否死锁等等。
(4)pstack:Linux命令。可以查看某个进程的当前线程栈运行情况。
(5)磁盘使用情况:iostat
具体可以参看文章:https://i.cnblogs.com/EditPosts.aspx?postid=5702288&update=1
4、线上CPU100%,如何定位和排查问题
(1)
1.jps 获取Java进程的PID
2.jstack pid >> java.txt 导出CPU占用高进程的线程栈
3.top -H -p PID 查看对应进程的哪个线程占用CPU过高
4.echo “obase=16; PID” | bc 将线程的PID转换为16进制,大写转换为小写
5.在第二步导出的Java.txt中查找转换成为16进制的线程PID。找到对应的线程栈,分析负载高的线程栈都是什么业务操作。优化程序并处理问题。
(2)
1.使用top 定位到占用CPU高的进程PID,并查看进程具体信息
top
// 命令获取进程相关的信息,并找到占用CPU高的线程
ps aux | grep PID
// 得到PID进程的具体信息,比如是个Tomcat服务进程
2、获取线程相关信息
ps -mp pid -o THREAD,tid,time | sort -rn
ps命令的几个参数:
-m显示所有的线程
-p pid进程使用cpu的时间
-o 用户自定义格式
tid 线程id
sort命令的两个参数:
-n 依照数值的大小排序
-r 以相反的顺序来排序
3.将需要的线程ID转换为16进制格式
printf
"%x\n"
tid
4.打印线程的堆栈信息
jstack pid |grep tid -A
30
-A 30 匹配行的后30行内容
参考文章:
(1)http://www.cnblogs.com/dragonflyyi/p/4343778.html
(2)http://www.cnblogs.com/pangguoping/p/5715848.html
- Java面试12|Linux及Shell脚本
- linux Shell脚本面试25问
- Linux Shell脚本面试基本20问
- Linux Shell脚本面试25问
- Linux Shell脚本面试问题大全
- Linux Shell脚本面试25问
- Linux Shell脚本面试25问
- Linux Shell脚本面试25问
- Linux Shell脚本面试25问
- java 调用linux shell脚本
- 【记录】shell脚本及linux命令
- linux shell脚本 && 和 ||及变量说明
- Linux 系统命令及shell脚本1
- Linux 系统命令及shell脚本2
- 9个实战及面试常用Shell脚本编写
- linux shell java lib(linux shell脚本加载java环境变量)
- java 运行shell命令及脚本
- 【SHELL】 Linux SHELL 脚本语法及使用参考
- [转载]转一篇介绍classload的文章(学习笔记)
- Java面试11|Maven与Git
- 移动游戏技术的成长
- 建索引的几大原则
- 招商
- Java面试12|Linux及Shell脚本
- MySQL中一个双引号的错位引发的血案
- 工程中经常遇到的几个语句用法,Return ,break!!!!!
- 背包问题九讲【转】
- ajax向后台请求数据包含中文乱码问题解决
- 数据结构上机实验之顺序查找
- JavaWeb登录、注销、退出、记住用户名和密码
- 每日一题(42)—— 已知一个数组table,用一个宏定义,求出数据的元素个数
- Java面试13|算法