剑指Java面试--Linux
目录
一、Linux体系结构
体系结构主要分为用户态(用户上层活动)和内核态。
Linux启动时会先启动内核即Kernel。内核本质是一段管理计算机硬件设备的程序,包括cpu、内存空间、硬盘接口、网络接口等等。所有计算机操作都要通过内核传递给硬件。
用户态即上层应用程序的活动空间。应用程序的执行必须依托内核提供的资源,包括cpu资源、存储资源、IO资源等。为了使上层应用访问到这些资源,内核必须为上层应用提供访问的接口,即系统调用,是一种不能再简化的操作,类似于原子操作。一个操作系统的功能可以看作系统调用组合的结果。一个操作系统不可能做出超越系统调用的动作。
公共函数库实现对系统调用的封装,将简单的业务逻辑接口呈现给用户,方便用户调用。简单操作直接调用系统调用来访问资源,复杂操作借助库函数实现。
Shell本质上是命令解释器,下通系统调用,上通应用程序,通常充当胶水的角色。没有图形界面之前,Shell充当用户界面,当用户运行某些应用的时候,通过Shell输入命令,已建立运行程序。Shell是可编程的,可以执行符合Shell语法的文本,这样的文本称为Shell脚本。Shell语句对系统调用做了一层封装,为了方便用户和系统交互,一般一个Shell对应一个终端,终端是一个硬件设备,呈现给用户的是一个图形化窗口。
常用Shell指令:
查询目录下的文件:ls
查看文件内容:cat 文件名、less 文件名、more 文件名
编辑文件:vi、vim
目前用的Shell是Linux主流中的bash,输入指令echo $SHELL查看当前Shell的版本。cat /etc/shells查看本机器支持的Shell版本。chsh -s Shell路径,切换到指定的Shell(chsh即change shell)。
二、查找特定文件
find在指定目录下查找文件。
find 路径名 -name "XX.java":精确查找文件
find 路径名 -name "XX*":模糊查找文件
find 路径名 -iname "XX*":不区分文件名大小写去查找文件
man find:更多关于find指令的说明
(/是指根目录,所有目录最顶层的目录
~是当前用户的主目录,如果是root用户就是/root/目录,如果是其他用户/home/下用户名命名的目录)
三、检索文件内容
grep查找文件里符合条件的字符串,使用正则表达式搜索文本并把匹配的行打印出来。
grep “要查找的文本内容” XX*:以XX打头的所有文件中查找包含要查找内容的行,grep只会筛选出目标字符串所在的行。
不指定路径,grep从标准输入设备读取数据,系统等待输入,直到输入了要查找的文本内容。
grep -o “正则表达式”:筛选出符合正则表达式的内容。
grep -v "文本内容“:过滤掉包含相关字符串的内容。
管道操作符 | 将前面一个指令传出的正确输出信息即stdoutput的信息,传递给下一个指令作为标准的输入即stdinput
使用管道注意的要点:
1)管道命令只处理前一个命令正确的输出,不处理错误的输出。
2)右边命令必须能够接收标准输入流,否则传递过程中数据会被抛弃。
常用来接收数据管道的命令有sed、awk、grep、cut、head、top、less、more、wc、join、sort、split等
四、对文件内容做统计
awk一次读取一行文本,按输入分割符进行切片,切成多个组成部分。将切片直接保存在内建的变量中,$1,$2...引用指定的变量可以显示指定的切片($0表示行的全部)。支持对单个切片的判断,支持循环判断,默认分割符为空格。
awk '{print $1,$2}' 文件名1 文件名2:文件内容以空格分开,打印第一列和第四列(跟操作相关需要加上{})
awk '$1==条件 && $2==条件{print $0}' 文件名:打印文件中满足条件的全部行
awk '($1==条件 && $2==条件) || NR==1 {print $0}' 文件名:在上一条执行结果的基础上显示表头(NR表示从awk开始执行后按照记录分割符读取的数据次数,默认的记录分割符为换行符,所以NR是默认读取的数据行数)
awk -F "," '{print $1}' 文件名:文件是按,分隔开,打印第一列
awk '{数组名[$1]++}END{for(i in 数组名)print i "\t" 数组名[i]}' 文件名:逐行进行统计,打印第一列和第一列出现的次数,中间以制表符分开(数组名随便起,END表示扫描结束后进行什么操作)
五、批量替换文件内容
sed流编辑器,利用正则表达式对行进行处理做文本的编辑。
替换:
sed -i 's/被替换的正则表达式/替换的目标内容/' 文件名:替换行,s表示对字符串的操作,-i表示改变文本内容,不加只是输出到终端(^表示以某某打头,$表示以某某结尾,特殊字符需要\转译)
eg:sed -i 's/\.$/\;/' 文件名 筛选出以.结尾的行替换成以;结尾
sed -i 's/被替换的正则表达式/替换的目标内容/g' 文件名:g表示全局替换,没有g只替换行中首次符合条件的字符
删除行:
sed -i '/条件/d' 文件名
eg:sed -i '/^ *$/d' 文件名 删除文件中空行(d表示删除符合条件的行)
sed指令还可以移动和搜索数据
推荐资料
《鸟哥的Linux私房菜》基础篇