Linux基础知识
- 体系结构主要分为用户态和内核太
- 内核:本质上是一段管理计算机硬件设备的程序
- 系统调用:内核的访问接口,是不能再简化的操作
- 公用函数库:系统调用的组合
- Shell:命令解释器,可编程
查找特定文件
- find:
- find path [options] params
- 在指定目录开始递归寻找查找文件;例如:find -name “target.file”
- 全局搜索 find / -name “target.file”,所有的该文件都能显示出来
- 忽略大小写:find / -iname “Target.file”
查找文件内容
- grep
- grep [options] pattern file
- 查找文件里符合条件的字符串
- 找文件中的字符串: grep “moo” target
- 管道操作符 |
- 将两个指令连接起来,前面的指令作为后面指令的输入
- 查找文件:find ~ | grep “target”
- | 右边指令需要能接收标准输入流才能用
- 中括号等字符需要用\转义
进程信息
- ps -ef
对文件内容做统计
- awk
- awk [options] ‘cmd’ file
- 一次读取一行文本,按输入分隔符进行切片分成多个组成部分
- 将切片直接保存在内建变量中
- 支持对单个切片的判断,支持循环判断,默认分隔符为空格(-F 规定分隔符)
- NR默认代表换行符 NR==1 表示第一行数据
抓包指令
IP地址抓包:tcpdump -i any host 192.168.1.123 -n
端口抓包: tcpdump -i any port 8080 -n
诸如ls,pwd等指令不再赘述,可以亲自动手做一做,都算是Linux的常规使用。
进程间通信(IPC)
进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享内存、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。
管道 pipe
管道一般指的是无名管道,是UNIX系统IPC最古老的形式。
- 管道是一种半双工的通信方式,数据只能单向流动
- 只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系
- 内容均为无格式字节流
命名管道FIFO
- 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信
消息队列 Message Queue
消息队列是由消息的链表,存放在内核中并由消息队列标识符(即队列ID)来标识。
- 消息队列允许一个或多个进程向它写入或者读取消息,并且每条消息都有类型(有格式)
- 消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,编程时可以按消息的类型读取
共享内存 Shared Memory
共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。
- 共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。
- 它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。
信号量 Semaphore
信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有。
信号量的值为正的时候,说明它空闲。所测试的线程可以锁定而使用它。若为0,说明它被占用,测试的线程要进入睡眠队列中,等待被唤醒。
- 信号量用于进程间同步,若要在进程间传递数据需要结合共享内存。
- 信号量基于操作系统的 PV 操作,程序对信号量的操作都是原子操作。
- 每次对信号量的 PV 操作不仅限于对信号量值加 1 或减 1,而且可以加减任意正整数。
信号 Signal
信号机制是类UNIX系统中的一种重要的进程间通信手段之一。我们经常使用信号来向一个进程发送一个简短的消息。比如ctrl-C中断操作。