Linux面试题

常见的高频Linux面试题目如下:

(1)最近登录的5个帐号

当执行last -n 5命令时,输出的内容如下:

则需要用awk输出名称即可,具体如下:

last -n 5 | awk  '{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}' /etc/passwd

NR表示awk开始执行程序后所读取的数据行数

或者还可以使用wc命令,如下:

wc -l /etc/passwd   

其中的命令参数-l还可以是--lines,表示显示行数。

(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来当数据索引。END之前的逗号有没有都可以。  

(4)这个文件夹里面每一层级都有个.svn隐藏文件夹,需要删除,使用如下命令:  

$find . -type d -name "*.svn" | xargs rm -rf

-type指定为d,而d表示为目录。-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。-r 将目录及以下之档案亦逐一删除。

(5)统计以p开始的行的个数:  

find -name test.sh -type f -print|xargs awk '/^p/{count++}END{print count}'

-type指定为f,表示普通文件。-print表示将结果输出到标准输出。

使用了xargs,将找到的文件名做为参数传递给awk命令,如果输出的是一行行内容,就没有必要加xargs了,如下: 

$cat a.txt |awk  '{print $2}'

xargs 与exec作用相同 ,起承接作用。区别在于 |xargs 主要用于承接删除操作 ,而 -exec 都可用 如复制、移动、重命名等,如:

find /bin -name bash -exec ls -l '{}' \;

对匹配的文件执行该参数所给出的shell命令。 形式为command {} \;,注意{}与\;之间有空格 

(6)提取文件中含有"apa"的单词并输出到一个文件中

find . -name "*.txt"|xargs grep -oE "[a-zA-Z]*apa[a-zA-Z]*"|awk -F: '{print $2}'

sed 命令可以很好的进行行匹配,但从某一行中精确匹配某些内容,则使用 grep 命令并辅以 -o 和 -E 选项可达到此目的。其中 -o 表示“only-matching”,即“仅匹配”之意。光用它不够,配合 -E 选项使用扩展正则表达式则威力巨大。

(7)端口被占用 

在 Web 开发中,经常会遇到「端口被占用」的场景

常规解决方案是:

  • 使用 lsof -i 命令查询占用端口的进程 PID

  • 利用 kill -9 PID 干掉目标进程

虽然只有 2 步,我也觉得很繁琐,即:既要记住命令,又要输入两次 

8、linux查看tcp命令 

使用netstat命令,或者用神器lsof命令 

9、使用Linux命令找出日志文件中访问量最大的top10 IP地址 

检验你是否熟悉Linux命令的常见问题:使用 Linux命令找出日志文件中访问量最大的top10 IP地址 

日志文件test.log格式如下: 

时间  IP   ****

linux 命令如下: 

cat  test.log|awk -F " " '{print $2}'|sort|uniq -c|sort -nrk 1 -t' '|awk -F" " '{print $2}'|head -10

问题剖析: 

1.cat  *.log将文本内容打印到屏幕 

2.使用awk命令可以按照分割符将一行分割为多个列,第一列用$1表示,第二列用$2表示,依次类推 

awk -F " " '{print $2} // 表示用空格作为分隔符进行分割,打印出第2列

3.sort 进行排序,默认是按照ascii码进行排序的 

4.uniq -c 统计相邻的行的重复数量,结果是类似 3  127.13.13.13,前面的数字代码重复的行数 

sort|uniq -c   // 统计重复的行数

5.sort -n是按照数值进行由小到大进行排序, -r是表示逆序,-t是指定分割符,-k是执行按照第几列进行排序 

sort -nr -k 1 -t ' '

6.使用awk命令可以按照分割符将一行分割为多个列,第一列用$1表示,第二列用$2表示,依次类推 

awk -F " " '{print $2}'    // 表示用空格作为分隔符进行分割,打印出第2列

7.head -n表示取前n个 

head -10

  

 

 

  

 

  

  

 

 

 

 

 

 

 

 

  

    

posted @ 2021-02-23 15:52  归去来兮辞  阅读(144)  评论(0编辑  收藏  举报