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...
C语言中有趣的烫烫烫
在学校使用 Windows 下的 Visual Studio 2017 进行课堂C的学习过程中遇到过很多类似于 烫烫烫烫烫烫 , 锟斤拷,屯屯屯 等比较有意思的乱码,也闹出了一些比较有意思的事情。 一、现象以下是部分乱码在不同的编码类型下的编码值: 字符 简体中文(GB2312) Unicode Unicode (UTF-8) 烫 CCCC EB70 E783AB 锟 EFBF 1F95 E9949F 斤 BDEF A465 E696A4 拷 BFBD F762 E68BB7 屯 CDCD 6F5C E5B1AF 锘 EFBB 1895 E99498 傻 C9B5 BB50 E582BB 二、分析以上比较有意思的乱码情况仅出现在使用Visual Studio或者VC6.0自带的MSVC编译器进行编译时才会出现,也就是说通常只有在Windows环境下使用Visual Studio或者VC6.0进行代码开发,并且处于Debug的运行模式才会出现。 2.1、烫(0xCCCC)MSVC编译器会将未被初始化的栈内存使用0XCC进行填充,导致我们在使用...
Ghost博客成功"更新"至0.11.9
Ghost真的是一个让我又爱又恨的博客平台,界面的简洁之美,写作的流畅与舒适,还有那烦人的安装与更新操作。在差不多一年之前吧,我安装了版本是 0.7.4 的Ghost平台,那时候用的是Ghost中文网中的那个 Ghost 中文集成版 ,当时也是费了很多周折,使用到现在也没有出现什么问题。也是在最近几天,闲着没事去Ghost中文网看了看,竟然还是 0.7.4 的版本!心想难道Ghost一直没更新?于是去英文官网看了看,才发现原来Ghost有两个路线,一个是 Alpha 版本,已经更新到了 Alpha.21 ,一个是正式版,也已经更新到了 0.11.9 ;而Ghost中文网的内容就有点滞后了,希望可以尽快更新。之后我就想体验新版本的Ghost。开始吧~ 一、尝试更新Ghost根据Ghost英文官网的 How-To-Upgrade更新指导步骤,我整理如下: 备份:在后台中的”实验室”栏目中导出一个 .json文件 ,并且将Ghost根目录中的 content目录 进行备份(这里存放着博客站点的所有上传图片和主题)。而我直接是把 整个Ghost目录和数据库 进行了备份。记住:一定要备份...
树、二叉树、完全/满/平衡二叉树的理解与对比
一、树树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构,很像自然界中的树那样。树型结构也是信息的重要组织形式之一,一切具有层次关系的问题都可用树来描述。 1.1、相关概念 路径:顺着节点的边从一个节点走到另一个节点,所经过的节点的顺序排列就称为路径; 根:树顶端的节点称为根,一棵树只有一个根,如果要把一个节点和边的集合称为树,那么从根到其他任何一个节点都必须有且只有一条路径; 父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点; 子节点:一个节点含有的子树的根节点称为该节点的子节点; 兄弟节点:具有相同父节点的节点互称为兄弟节点; 叶节点:没有子节点的节点称为叶节点,也叫叶子节点; 子树:每个节点都可以作为子树的根,它和它所有的子节点、子节点的子节点等都包含在子树中; 节点的层次:从根开始定义,根为第一层,根的子节点为第二层,以此类推; 深度:对于任意节点n,n的深度为从根到n的唯一路径长,根的深度为0; 高度:对于任意节点n,n的高度为从n到一片树叶的最长路径长,所有树叶的高度为0; 森林:0个或多个不...
利用Ngrok搭建私有的内网穿透服务器
一、关于NgrokNgrok 是用Go语言写的一个反向代理软件,Ngrok 服务可以分配给你一个域名让你本地的web项目可供外网访问,Ngrok解决了内网穿透这十分棘手的问题,可以让我们不需要公网IP的情况下,轻松向他人展示本机的Web Demo等信息。Ngrok 官网本身还提供了公共服务,只需要注册一个帐号,运行它的客户端,就可以快速把内网映射出去,不过这么好的服务,没多久就被墙了,幸运的是,Ngrok的1.x的源码被公布了出来,我们可以利用它的源码去构建属于我们自己的Ngrok内网穿透服务器。 据官方所说由于 Ngrok 存在一些已知的问题,例如内存泄漏等对稳定使用影响较大,原文内容如下: DO NOT RUN THIS VERSION OF NGROK (1.X) IN PRODUCTION. Both the client and server are known to have serious reliability issues including memory and file descriptor leaks as well as crashes. There ...

