Tmux使用记录
一、简介Tmux是Linux中一款终端窗口复用的工具。对比与iTerm来说,iTerm只是作为一款GUI软件,在一个窗口中只能显示一个Shell的内容,但是Tmux却可以在一个窗口中显示多个Shell内容;对比与Screen来说,Screen是GNU 软件,而 Tmux 使用的是 BSD 协议,最为重要的是 Tmux 支持 Vi/Emacs 风格的键盘映射,更好的接口和文档,以及更好的脚本控制。 二、基本概念Tmux的主要元素分为三层: Session :一组窗口的集合,通常用来概括同一个任务,可以设置不同的名字以便于任务之间的切换; Window: 单个可见窗口,Window有自己的编号,也可以认为和 iTerm2 中的 Tab 类似; Pane: 窗格,被划分成小块的窗口,类似于 Vim 中 C-w +v 后的效果; 三、安装与使用3.1、安装brew install tmux # OSXpacman -S tmux # archlinuxapt-get install tmux # Ubuntuyum install tm...
三种洗牌算法shuffle
一、简介洗牌算法可以被理解为三种洗牌算法,分别是抽牌(Fisher-Yates Shuffle算法),换牌(Knuth-Durstenfeld Shhuffle算法)和插牌算法。 二、具体算法2.1、Fisher-Yates 洗牌算法(抽牌算法)这个洗牌方法最早由Ronald A. Fisher和Frank Yates提出,即 Fisher–Yates Shuffle,其基本思想就是从原始数组中随机取一个之前没取过的数字到新的数组中,具体如下: 初始化原始数组和新数组,原始数组长度为n(已知); 从还没处理的数组(假如还剩k个)中,随机产生一个[0, k)之间的数组下标数字p; 从剩下的k个数中把下标为p的数取出,放在新数组的末尾(末尾有数字则放在末尾前一位,依次往前); 重复步骤2和3直到数字全部取完,新数组的数字序列就是一个随机的序列; 下面证明其随机性,即每个元素被放置在新数组中的第i个位置是1/n(假设数组大小是n): **证明:**一个元素m被放入第i个位置的概率P = 前i-1个位置选择元素时没有选中m的概率 * 第i个位置选中m的概率,即:...
TCP状态转换详解
一、TCP的状态转换图示 1.1、TCP标志位 CWR(Congestion Window Reduce):拥塞窗口减少标志,由发送端设置,用来表明发送端接收到了设置ECE标志的TCP包,发送端通过降低发送窗口的大小来降低发送速率; ECE(ECN Echo):ECN响应标志,在TCP的3次握手时表明一个TCP端是具备ECN(Explicit Congestion Notification)功能的,并且表明接收到的TCP包的IP头部的ECN被设置为11,更多信息请参考RFC793; URG(Urgent):表示紧急标志(The Urgent Pointer)有效,目前已经很少使用; ACK(Acknowledgment):取值为1时表示确认号有效,这是一个确认的TCP包,取值为0则不是确认包; PSH(Push):该标志置位时,一般表示发送端缓存中已经没有待发送的数据,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用处理,在处理Telnet或Rlogin等交互模式的连接时,该标志总是被置位的; RST(Reset):用于复位相应的TCP连接,通常在发生异常或者错误的时候会...
MacOS下的常用指令
记录了一些 MacOS 下的常用的指令组合方式,比如重置 Launchpad 等。 系统操作相关# 重置 Launchpadcd ~/Library/Application\ Support/Dock/rm ~/Library/Application\ Support/Dock/*.db && killall Dockdefaults write com.apple.dock ResetLaunchPad -bool true && killall Dock
Linux下的常用指令
记录了一些 Linux 下的常用的指令组合方式,比如查看 CPU 数量,查看指定进程的线程情况,释放页面缓存,关闭透明大页,Docker 相关命令等。 CPU相关# 查看CPU物理核心cat /proc/cpuinfo | grep 'physical id' | sort -u | wc -l# 查看CPU核心总数cat /proc/cpuinfo | grep 'cpu cores' | wc -l# 查看逻辑CPUcat /proc/cpuinfo | grep 'processor' | wc -l# 查看指定进程的线程情况ps -mp 8463 -o THREAD,tid,time# 查看进程的线程CPU占用top -H -p 32286 内存相关# 释放页面缓存echo 1 > /proc/sys/vm/drop_caches# 释放目录缓存、文件缓存echo 2 > /proc/sys/vm/drop_caches# 释放页面缓存、目录缓存、文件缓存echo 3 > /proc/sys/...
Docker学习笔记 - Docker底层设计
传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便,本文列出了 Docker 和传统虚拟化方式的不同的设计。 一、基本架构 Docker 采用了 C/S 架构,包括客户端和服务端。Docker 守护进程 (Daemon)作为服务端接受来自客户端的请求,并处理这些请求(创建、运行、分发容器)。 客户端和服务端既可以运行在一个机器上,也可通过 socket 或者 RESTful API 来进行通信。 Docker 守护进程一般在宿主主机后台运行,等待接收来自客户端的消息。 Docker 客户端则为用户提供一系列可执行命令,用户用这些命令实现跟 Docker 守护进程交互。 二、命名空间命名空间是 Linux 内核一个强大的特性。每个容器都有自己单独的命名空间,运行在其中的应用都像是在独立的操作系统中运行一样。命名空间保证了容器之间彼此互不影响。 2.1、pid 命名空间不同用户的进程就是通过 pid 命名空间隔离开的,且不同...
Docker学习笔记 - Docker镜像制作
Dockerfile 是一种被 Docker 程序解释的脚本,由一条一条指令组成,本质是一组指令的集合。Dockerfile 有自己的命令格式,Docker 程序会读取 Dockerfile,并将这些指令翻译成 Linux 命令,根据命令制成相应的镜像文件,使用户清晰的了解镜像的制作过程;镜像的定制实际上就是定制每一层所添加的配置、文件,如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。 一、Dockerfile指令1.1、FROM 指定基础镜像所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制。而 FROM 就是指定基础镜像,因此一个 Dockerfile 中 FROM 是必备的指令,并且必须是第一条指令。 除了选择现有镜像为基础镜像外,Docker 还存在一个特殊的镜像,名为 scratch。这个镜像是虚拟的概念,并不实际存在,它表示一个空白的镜像。如果你以 scratch 为基础镜像的话,意味着你不以任何镜像为基础,接下来所写的指令将作为镜像第一层开始存在。 不以任...
Linux进程的状态解析
一、状态解析1.1、状态 R(TASK_RUNNING):可执行状态 S(TASK_INTERRUPTIBLE):可中断的睡眠状态 D(TASK_UNINTERRUPTIBLE):不可中断的睡眠状态 T(TASK_STOPPED/TASK_TRACED):停止状态或者跟踪状态 Z(TASK_DEAD - EXIT_ZOMBIE):退出状态(进程成为僵尸状态) X(TASK_DEAD - EXIT_DEAD):退出状态(进程即将被销毁,基本很少见) W(TASK_SWAP):进入内存交换(从内核2.6开始无效) 其他状态(可通过ps等指令查看到) <:较高优先级的进程 N:较低优先级的进程 L:数据页被锁进内存 s:包含子进程 l:多线程,克隆线程 +:位于后台的进程组 1.2、状态解析1.2.1、R(TASK_RUNNING) - 可执行状态只有在该状态的进程才可能在CPU上运行,同一时刻可能有多个进程处于可执行状态,这些进程的task_struct结构(进程控制块)被放入对应CPU的可执行队列中(一个进程最多只能出现在一个CPU的可执行队列中)。进程调度器的任务就是...
Docker学习笔记 - Docker入门篇
Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 开始,则进一步演进为使用 runC 和 containerd。 一、Docker架构Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。 Docker 镜像(Images):Docker 镜像是用于创建 Docker 容器的模板; Docker 容器(Container):容器是独立运行的一个或一组应用; Docker 客户端(Client):Docker 客户端通过命令行或者其他工具使用 Docker API (h...
Linux的信号与信号量机制
一、信号(Signal)机制Signal,又简称为信号(软中断信号)用来通知进程发生了异步事件,是一种处理异步事件的方式。一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。信号机制除了基本通知功能外,还可以传递附加信息。 按照不同的分类角度(可靠性方面,与时间的关系上)可以对信号进行区分: 可靠信号(实时信号):支持排队, 信号不会丢失,发多少次进程就可会收到多少次,信号值取值区间为34~`64`; 不可靠信号(非实时信号):不支持排队,信号可能会丢失,比如发送多次相同的信号,进程只能收到一次,信号值取值区间为1~`31`; 2.1、信号表2.1.1、不可靠信号(非实时信号)表 取值 名称 解释 取值 名称 解释 1 SIGHUP 挂起 2 SIGINT 中断 3 SIGQUIT 退出 4 SIGILL 非法指令 5 SIGTRAP 断点或陷阱指令 6 SIGABRT abort...

