Linux

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 表示第一行数据

awk

抓包指令

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中断操作。

Ty.Wings wechat
欢迎您订阅我的公众号,并在GitHub上为我Star!