一、Linux 体系结构
体系结构主要分为用户态(用户上层活动)和内核态。
Linux 启动时会先启动内核即 Kernel。内核本质是一段管理计算机硬件设备的程序,包括 cpu、内存空间、硬盘接口、网络接口等等。所有计算机操作都要通过内核传递给硬件。
用户态即上层应用程序的活动空间。应用程序的执行必须依托内核提供的资源,包括 cpu 资源、存储资源、IO 资源等。为了使上层应用访问到这些资源,内核必须为上层应用提供访问的接口,即系统调用,是一种不能再简化的操作,类似于原子操作。一个操作系统的功能可以看作系统调用组合的结果。一个操作系统不可能做出超越系统调用的动作。
公共函数库实现对系统调用的封装,将简单的业务逻辑接口呈现给用户,方便用户调用。简单操作直接调用系统调用来访问资源,复杂操作借助库函数实现。
Shell 本质上是命令解释器,下通系统调用,上通应用程序,通常充当胶水的角色。没有图形界面之前,Shell 充当用户界面,当用户运行某些应用的时候,通过 Shell 输入命令,已建立运行程序。Shell 是可编程的,可以执行符合 Shell
语法的文本,这样的文本称为 Shell 脚本。Shell 语句对系统调用做了一层封装,为了方便用户和系统交互,一般一个 Shell 对应一个终端,终端是一个硬件设备,呈现给用户的是一个图形化窗口。
常用 Shell 指令:
查询目录下的文件:ls(平铺)、ll(列表)
创建文件夹 mkdir
移动 mv
拷贝 cp
删除文件夹 rm -r(递归)f(不询问)
新建文件 touch
查看文件内容:cat (所有)、less 、more 、head、tail
编辑文件:vi、vim
ps:用来查看当前运行的进程状态,一次性查看。如果需要动态连续结果使用 top。
df:显示磁盘空间使用情况。获取硬盘被占用了多少空间,目前还剩下多少空间
等信息。
du:对文件和目录磁盘使用的空间的查看。
free:显示系统内存使用情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。
netstat:显示各种网络相关信息。
chmod:控制文件或目录的访问权限。该命令有两种用法:一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。
目前用的 Shell 是 Linux 主流中的 bash,输入指令 echo $SHELL 查看当前 Shell的版本。cat /etc/shells 查看本机器支持的 Shell 版本。chsh -s Shell 路径,切换到指定的 Shell(chsh 即 change shell)。
Linux 常用命令、已知服务的端口和 IP,如何找到该服务所在的位置
二、查找特定文件
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 指令还可以移动和搜索数据
sed 指令还可以移动和搜索数据