面试之Linux

Linux的体系结构

  • 体系结构主要分为用户态(用户上层活动)和内核态
  • 内核:本质是一段管理计算机硬件设备的程序
  • 系统调用:内核的访问接口,是一种不能再简化的操作
  • 公用函数库:系统调用的组合拳
  • Shell:命令解释器,可编程

Linux面试常考命令

面:如何查找特定的文件?

答:可以使用find命令。语法:find path [options] params。含义:在指定目录下查找文件。

[spider@izwz9d74k4cznxtxjeeur9z ~]$ find -name "spi*"  #在当前目录下查找以spi开头的文件
./spider-novels
./spider-novels/novels/novels/spiders
[root@izwz9d74k4cznxtxjeeur9z spider]# find / -name "qwert.txt" #从根路径开始查找名为qwert.txt的文件
/home/spider/qwert.txt

面:如何检索文件的内容?

答:可以使用grep命令。语法grep [option] pattern file.

[root@izwz9d74k4cznxtxjeeur9z spider]# cat test*
This is a beautiful girl.
Hello world!
Thank you.
[root@izwz9d74k4cznxtxjeeur9z spider]# grep "Thank" test* #从test开头的文件中,检索出含有Thank的行
Thank you.

若grep后面没有加文件名,则表示从标准输入流中获取输入,此时可以配合管道连接符|一起使用。

[root@izwz9d74k4cznxtxjeeur9z spider]# find -name "test*" | grep "test.txt" #表示find命令的结果作为grep命令的标准输入
./test.txt

面:如何对文件内容(表格)做出统计?

答:可以使用awk命令,语法awk [option] 'cmd' file。一次读取一行文本,按输入分隔符进行切片,切成多个组成部分;将切片直接保存在内建的变量中,$1,$2...($0表示行的全部);支持对单个切片的判断,支持循环判断,默认分隔符为空格。

现有一个文件,格式类似于表格,其中包含了选课信息等。

[root@izwz9d74k4cznxtxjeeur9z spider]# ll
总用量 152
-rw-r--r-- 1 root root 144153 3月  18 10:28 2019年春季学期专业选修课选课表.txt
drwxr-xr-x 3 root root   4096 2月  26 13:43 spider-novels
-rw-r--r-- 1 root root     50 3月  18 08:53 test.txt
[root@izwz9d74k4cznxtxjeeur9z spider]# head 2019*
学生学院    专业班级(方向)        年级      人数      课程名     课程号     课序号     课程属性    学分      学时      开课单位    任课教师    选课限制说明
石工院     海洋油气工程(一班)      2016    24      海洋油气工程仪表与自动化    9111008030      2399    限选      3       48      电信院     杨青      海洋油气1601
石工院     海洋油气工程(一班)      2016    24      海洋完井工程  9111011030      2399    限选      3       48      石工院     熊友明、刘理明 海洋油气1601
石工院     海洋油气工程(一班)      2016    24      海洋油气集输工程        9115006030      2398    限选      3       48      石工院     邓雄      海洋油气1601
石工院     海洋油气工程(二班)      2016    29      海洋油气工程仪表与自动化    9111008030      2399    限选      3       48      电信院     杨青      海洋油气1602
石工院     海洋油气工程(二班)      2016    29      海洋完井工程  9111011030      2399    限选      3       48      石工院     熊友明、刘理明 海洋油气1602
石工院     海洋油气工程(二班)      2016    29      海洋油气集输工程        9115006030      2399    限选      3       48      石工院     朱红钧     海洋油气1602
石工院     石油工程(创新班)       2016    51      油气藏开发地质学(1组)    3404596025      2397    限选      2.5     40      地科院     牟中海     任选其一
石工院     石油工程(创新班)       2016    51      油气藏开发地质学(2组)    3404596025      2398    限选      2.5     40      地科院     赵晓明     
石工院     石油工程(创新班)       2016    51      油气藏开发地质学(3组)    3404596025      2399    限选      2.5     40      地科院     周彦         

如何提取出第一列学生的学院和第四列人数?

[root@izwz9d74k4cznxtxjeeur9z spider]# awk '{print $1, $4}' 2019*
 
学生学院 人数
石工院 24
石工院 24
石工院 24
石工院 29
石工院 29
石工院 29
石工院 51
石工院 51
石工院 51
石工院 32
石工院 32
石工院 32
石工院 27
石工院 27
石工院 27
......

过滤输出院系为计科院、且年级为2015级的选课信息。

分析:院系为第一列,年级为第三列。

[root@izwz9d74k4cznxtxjeeur9z spider]# awk '$1=="计科院"&&$3==2015 {print $0}' 2019*  
计科院     计算机科学与技术        2015    177     自主和交互式学习(二课)    5615026020      2499    限选      2       2周      计科院     岳静      
计科院     计算机科学与技术        2015    177     嵌入式程序设计大赛(二课)   5615027020      2499    限选      2       2周      计科院     何志敏     
计科院     软件工程    2015    194     创新创业项目培育孵化(二课)  5815201020      2499    限选      2       2周      计科院     廖浩德     
计科院     软件工程    2015    194     软件外包项目驱动(二课)    5815202020      2499    限选      2       2周      计科院     张剑      
计科院     软件工程    2015    194     程序设计第二课堂(二课)    5815203020      2499    限选      2       2周      计科院     杨力      
计科院     软件工程    2015    194     大数据与机器学习(二课)    5815204020      2499    限选      2       2周      计科院     王兵      
计科院     软件工程(卓越班)       2015    57      科技竞赛(二课)        5815601020      2499    限选      2       2周      计科院     杨力      
计科院     软件工程(卓越班)       2015    57      科研项目(二课)        5815602020      2499    限选      2       2周      计科院     张剑      
计科院     软件工程(卓越班)       2015    57      虚拟创业(二课)        5815603020      2499    限选      2       2周      计科院     杨力      
计科院     软件工程(卓越班)       2015    57      资格认证(二课)        5815604020      2499    限选      2       2周      计科院     廖浩德     
计科院     网络工程    2015    110     信息安全大赛(二课)      6015018020      2499    限选      2       2周      计科院     张恒汝     
计科院     网络工程    2015    110     互联网应用开发大赛(二课)   6015019020      2499    限选      2       2周      计科院     张小洪     
计科院     网络工程    2015    110     网络配置大赛(二课)      6015020020      2499    限选      2       2周      计科院     何中越     
计科院     网络工程    2015    110     创新创业项目培育孵化(二课)  6015021020      2499    限选      2       2周      计科院     陈雁      
计科院     物联网工程   2015    132     物联网应用设计(二课)     9815356030      2499    限选      3       3周      计科院     梅大成     
计科院     信息管理与信息系统       2015    69      电子商务类比赛认证(二课)   7015031010      2499    限选      1       1周      计科院     杨力      
计科院     信息管理与信息系统       2015    69      ERP类比赛认证(二课)    7015032010      2499    限选      1       1周      计科院     钟学燕     

上面的结果没有表头,我们可以使用NR==1输出第一行,即表头。

[root@izwz9d74k4cznxtxjeeur9z spider]# awk 'NR==1 {print $0}' 2019*
学生学院    专业班级(方向)        年级      人数      课程名     课程号     课序号     课程属性    学分      学时      开课单位    任课教师    选课限制说明

面:如何批量替换文本的内容

答:可以使用sed命令,语法:sed [option] 'sed command' filename。全名stream editor,流编辑器;适合用于对文本的行内容进行处理。

现有一个java文件如下:

[root@izwz9d74k4cznxtxjeeur9z spider]# cat replace.java 
Str a = "The beautiful girl's bot friend is Jack'.
Str b = "The beautiful girl often chats with Jack and Jack is Jack".
Str c = "The beautiful girl loves Jack so much".


Integer bf = new Integer(2);

首先需要将每一行的Str修改为String。

[root@izwz9d74k4cznxtxjeeur9z spider]# sed 's/^Str/String/' replace.java #替换后,原文件没有发生改变,如需改变需要加入-i选项
String a = "The beautiful girl's bot friend is Jack'.
String b = "The beautiful girl often chats with Jack and Jack is Jack".
String c = "The beautiful girl loves Jack so much".


Integer bf = new Integer(2);

将每一行的.变为;,需要加入转义字符。

[root@izwz9d74k4cznxtxjeeur9z spider]# sed -i 's/.$/;/' replace.java 
[root@izwz9d74k4cznxtxjeeur9z spider]# cat replace.java 
String a = "The beautiful girl's bot friend is Jack';
String b = "The beautiful girl often chats with Jack and Jack is Jack";
String c = "The beautiful girl loves Jack so much";


Integer bf = new Integer(2);

将每行的Jack都替换成me,注意加入g选项,表示全文替换,否则每一行只有第一个Jack会被替换。

[root@izwz9d74k4cznxtxjeeur9z spider]# sed -i 's/Jack/me/g' replace.java 
[root@izwz9d74k4cznxtxjeeur9z spider]# cat replace.java 
String a = "The beautiful girl's bot friend is me';
String b = "The beautiful girl often chats with me and me is me";
String c = "The beautiful girl loves me so much";


Integer bf = new Integer(2);

删除所有的空行,此时不需加入s选项表示字符串,加入d选项表示操作行。

[root@izwz9d74k4cznxtxjeeur9z spider]# sed -i '/^ *$/d' replace.java 
[root@izwz9d74k4cznxtxjeeur9z spider]# cat replace.java 
String a = "The beautiful girl's bot friend is me';
String b = "The beautiful girl often chats with me and me is me";
String c = "The beautiful girl loves me so much";
Integer bf = new Integer(2);

参考资料

慕课网 剑指Java面试-Offer直通车

原文地址:https://www.cnblogs.com/yunche/p/10551452.html