buddyinfo, slabinfo, zoneinfo

buddyinfo, slabinfo, zoneinfo /proc/buddyinfo是linuxbuddy系统管理物理内存的debug信息。 在linux中使用buddy算法解决物理内存的外碎片问题,其把所有空闲的内存,以2的幂次方的形式,分成11个块链表,分别对应为1、2、4、8、16、32、64、128、256、512、1024个页块。 而Linux支持NUMA技术,对于NUMA设备,NUMA系统的结点通常是由一组CPU和本地内存组成,每一个节点都有相应的本地内存,因此buddyinfo 中的Node0表示节点ID;而每一个节点下的内存设备,又可以划分为多个内存区域(zone),因此下面的显示中,对于Node0的内存,又划分类DMA、Normal、HighMem区域。而后面则是表示空闲的区域。 此处以Normal区域进行分析,第二列值为100,表示当前系统中normal区域,可用的连续两页的内存大小为1002PAGE_SIZE;第三列值为52,表示当前系统中normal区域,可用的连续四页的内存大小为522^2PAGE_SIZE cat /proc/buddyinfo Node 0, zone DMA 23 15 4 5 2 3 3 2 3 1 0 Node 0, zone Normal 149 100 52 33 23 5 32 8 12 2 59 Node 0, zone HighMem 11 21 23 49 29 15 8 16 12 2 142 文件/proc/slabinfo统计slab分配器相关信息 % cat /proc/slabinfo https://zhuanlan.zhihu.com/p/358891862 slab 分配器 在Linux中,伙伴分配器(buddy allocator)是以页为单位管理和分配内存。 但在内核中的需求却以字节为单位(在内核中面临频繁的结构体内存分配问题)。 假如我们需要动态申请一个内核结构体(占 20 字节), 若仍然分配一页内存,这将严重浪费内存。那么该如何分配呢? slab 分配器专为小内存分配而生, 由 Sun 公司的一个雇员 Jeff Bonwick 在 Solaris 2.4中 设计并实现。slab 分配器分配内存以字节为单位, 基于伙伴分配器的大内存进一步细分成小内存分配。换句话说,slab 分配器仍然从 Buddy 分配器中申请内存,之后自己对申请来的内存细分管理。 ...

2011-08-28 · 1 min · 113 words · -

迭代器模式, Iterator

迭代器模式, Iterator 迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。把游走的任务放在迭代器上,而不是聚合上。这样简化了聚合的接口和实现,也让责任各得其所。 @startuml abstract class Aggregate Aggregate : public abstract Iterator createIterator() class ConcreteAggregate ConcreteAggregate : Object[] objArray ConcreteAggregate : public ConcreteAggregate(Object[] objArray) ConcreteAggregate : public Iterator createIterator() ConcreteAggregate : public Object getElement(int index) ConcreteAggregate : public int size() Aggregate<|--ConcreteAggregate interface Iterator Iterator : public void first() Iterator : public void next() Iterator : public boolean isDone() Iterator : public Object currentItem() class ConcreteIterator ConcreteIterator : private ConcreteAggregate agg ConcreteIterator : private int index ConcreteIterator : private int size ConcreteIterator : public ConcreteIterator(ConcreteAggregate agg) ConcreteIterator : public void first() ConcreteIterator : public void next() ConcreteIterator : public boolean isDone() ConcreteIterator : public Object currentItem() Iterator<|--ConcreteIterator ConcreteAggregate .right.> ConcreteIterator ConcreteIterator-left->ConcreteAggregate class Client Client .left.> Aggregate Client .right.> Iterator @enduml 迭代器模式涉及到以下几个角色: ...

2011-08-27 · 2 min · 425 words · -

mplayer

mplayer 基本播放控制 → 前进10秒 ← 后退10秒 ↑ 前进60秒 ↓ 后退60秒 PageUP 前进10分钟 PageDown 后退10分钟 Enter 全屏 Space 暂停 Esc 退出 q 退出 音量调节 9 降低音量 0 增大音量 / 降低音量 * 增大音量 a 切换声道 mplayer command monitoraspect mplayer -monitoraspect 1.25 6.rmvb 全屏 mplayer -aspect 16:9 -fs debian 6 smplayer 声音小 Options > preferences > audio > output driver select “alsa” http://www.wiloon.com/?p=2850 smplayer 中文字幕 option > preference > subtitles > encoding select utf8 ...

2011-08-27 · 1 min · 84 words · -

Yasm

Yasm Yasm是一个完全重写的NASM汇编。目前,它支持x86和AMD64指令集,接受NASM和气体汇编语法,产出二进制, ELF32 , ELF64 , COFF , Mach - O的 ( 32和64 ) , RDOFF2 ,的Win32和Win64对象的格式,并生成STABS 调试信息的来源,DWARF 2 ,CodeView 8格式。

2011-08-27 · 1 min · 21 words · -

modprobe, `lsmod`

modprobe, lsmod modprobe 可载入指定的个别模块,或是载入一组相依的模块。modprobe 会根据 depmod 所产生的相依关系,决定要载入哪些模块。 若在载入过程中发生错误,在 modprobe 会卸载整组的模块 https://blog.csdn.net/future_fighter/article/details/3862795 lsmod 功能: 列出内核已载入模块的状态 用法: lsmod 描述: lsmod 列出 /proc/modules 的内容。 输出为: Module(模块名) Size(模块大小) Used by(被…使用) # 查看某一个模块是否已经被加载 lsmod|grep wireguard 手动加载卸载 控制内核模块载入/移除的命令是 kmod 软件包提供的 # 手动加载内核模块 sudo modprobe wireguard # 手动卸载内核模块 modprobe -r wireguard # 或者 rmmod wireguard load kernel module at boot vim /etc/modules-load.d/wireguard.conf # load wireguard module at boot wireguard command systool -v -m module_name modprobe --show-depends modinfo 查看内核模块的信息,包括开发人员信息,依赖信息 modinfo module_name https://wiki.archlinux.org/index.php/Kernel_modules_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87

2011-08-20 · 1 min · 74 words · -

grep command

grep command grep: Global Regular Expression Print 按行处理, 输出文件中包含搜索字符串的所有行。 grep [OPTION...] PATTERNS [FILE...] 或 grep -E '123|abc' filename // 找出文件(filename)中包含 123 或者包含 abc 的行 egrep '123|abc' filename // 用 egrep 同样可以实现 判断指定文件中是否包含指定的字符串 # 文件中包含字符串,命令正常退出 $? = 0, 不包含 $? = 1 grep "prod" /path/to/file/web.xml > /dev/null if [ $? -eq 0 ]; then echo "Found!" else echo "Not found!" fi grep xxx -A5 grep xxx -B1 grep -C 5 foo file 显示 file 文件里匹配 foo 字串那行以及上下 5 行 #regex grep ".*A.*" foo.txt grep "foo\|bar" foo.txt # 统计某个字符串出现的次数 grep -o objStr filename|wc -l # 搜索子目录, recursively grep -r 'linux' * 参数 -i, –ignore-case: 忽略大小写 -A, –after-context=NUM print NUM lines of trailing context -B <显示行数> -before-context=<显示行数> #除了显示符合样式的那一行之外,并显示该行之前的内容。 -C 显示 file 文件里匹配 foo 字串那行以及上下5行 -r, -recursive, 搜索子目录 -l, -files-with-matches, 查询多文件时只输出包含匹配字符的文件名, 不打印匹配的文件内容。 -G, -basic-regexp BRE 模式,也是默认的模式 -E, -extended-regexp ERE 模式 -h, 查询多文件时不显示文件名。 -a, –text: 强制作为文本文件处理, 报错: Binary file [some_file] matches 的时候可以用。 -w pattern files : 只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical') -q, –quiet, –silent, 不显示任何东西到 stdout -P, –perl-regexp 使用 PCREs -n, –line-number 打印行号 grep 正则 https://blog.csdn.net/yufenghyc/article/details/51078107 ...

2011-08-20 · 7 min · 1447 words · -

dmesg

dmesg # 显示时间戳 dmesg -T Display messages in kernel ring buffer Linux命令dmesg用来显示开机信息,kernel会将开机信息存储在 ring buffer 中。您若是开机时来不及查看信息,可利用dmesg来查看。开机信息亦保存在/var/log目录中,名称为dmesg的文件里。 dmesg[1] - print or control the kernel ring buffer dmesg用于检测和控制内核环缓冲。程序用来帮助用户了解系统的启动信息 dmesg |grep scsi -A 3 https://www.jianshu.com/p/4a029091b705

2011-08-20 · 1 min · 31 words · -

Provider 模式

Provider 模式 首先什么是Provider模式?Provider是由两个设计模式融合而来的: 策略模式+抽象工厂模式。这两个模式具体的介绍我在这里就不多说了,网上一搜一大把。provider模式的作用是为一个API进行定义和实现的分离。这样就通过核心功能的灵活性和易于修改的特点使得API具有灵活性。通俗一点来说就是实现了定义和实现的分离,最终效果就是不需要更改代码即可实现程序不同逻辑的改变。 在BlogEngine中,provider模式被应用于提供不同的数据的持久化。为了保证解压后就能使用默认采用的是xmlProvider。本文研究的重点就是了解这个Provider模式,并知道BlogEngine如何通过provider模式使得不同数据持久化方式之间的灵活切换。 https://www.cnblogs.com/qianlifeng/archive/2010/12/07/1899343.html

2011-08-20 · 1 min · 6 words · -

yaml

yaml http://www.ruanyifeng.com/blog/2016/07/yaml.html YAML 语言 (发音 /ˈjæməl/ ) 的设计目标,就是方便人类读写。它实质上是一种通用的数据串行化格式。 它的基本语法规则如下。 大小写敏感 使用缩进表示层级关系 缩进时不允许使用Tab键,只允许使用空格。 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可 # 表示注释,从这个字符一直到行尾,都会被解析器忽略。 YAML 支持的数据结构有三种。 对象: 键值对的集合,又称为映射 (mapping) / 哈希 (hashes) / 字典 (dictionary) 数组: 一组按次序排列的值,又称为序列 (sequence) / 列表 (list) 纯量 (scalars) : 单个的、不可再分的值

2011-08-19 · 1 min · 36 words · -

蓝牙 HID

蓝牙 HID The Human Interface Device (HID)定义了蓝牙在人机接口设备中的协议、特征和使用规程。典型的应用包括蓝牙鼠标、蓝牙键盘、蓝牙游戏手柄等。该协议改编自USB HID Protocol。 2.一些概念 (1)HID Reports:Bluetooth HID devices支持三种Report:Input, Output, and Feature。 (2)HID建立Control Channel和Interrupt Channel两个通道,report可以在这两条channel上传输,在Control channel上传输的report称为synchronous reports ;在Interrupt channel上传输的report称为asynchronous reports。 (3)Feature reports are always transferred synchronously using GET_REPORT or SET_REPORT requests。 (4)Report Protocol Mode和Boot Protocol Mode。Bluetooth HID Hosts至少支持一种,Bluetooth HID Device则需要支持Report Protocol Mode,并且Report Protocol Mode是Bluetooth HID Device的默认Mode。 HOG (HID OVER GATT) 蓝牙4.0的BLE (bluetooth low en)技术 https://www.zhihu.com/question/23785524 https://developer.aliyun.com/article/376006

2011-08-18 · 1 min · 61 words · -

shell params, 参数

shell params, 参数 在 shell 编程时. 可以使用参数。 Shell 有位置参数和内部参数 位置参数 由系统提供的参数称为位置参数。位置参数的值可以用 $N 得到, N 是一个数字,如果 为 1, 即 $1. 类似 C 语言中的数组, Linux 会把输入的命令字符串分段并给每段进行标号, 标号从 0 开始。第 0 号为程序名字,从 1 开始就表示传递给程序的参数。如 $0 表示程序的名字,$1 表示传递给程序的第一个参数, 以此类推。 内部参数 上述过程中的$0是一个内部变量,它是必须的,而$1则可有可无。和$0一样的内部变量还有以下几个。 # 传递给程序的总的参数数目 $# #上一个代码或者 shell 程序在 shell 中退出的情况,如果正常退出则返回 0,反之为非 0 值。 $? $* –传递给程序的所有参数组成的字符串。 下面举例进行说明 cat test.sh !/bin/bash test shell echo $0 # 第一个参数 echo $1 # 第二个参数 echo $2 # 程序执行结果 echo $? # 传递参数所组成的字符串 echo $* # 参数个数 echo $# ./test.sh yema Bhanv edu network ...

2011-08-12 · 1 min · 123 words · -

sftp config

sftp config cd /root/ssh emacs sshd_config remove the comments for RSAAuthentication, PubkeyAuthentication RSAAuthentication yes PubkeyAuthentication yes generate rsa key pair by puttygen edit file authorized_keys add public key which generate by putty. copy private key to client PC /root/.ssh/id_rsa

2011-08-04 · 1 min · 39 words · -

Flatpak

Flatpak Flatpak 由红帽员工亚历山大·拉尔森(Alexander Larsson)开发,并于2015年正式发布。它是用C编程开发的,提供了在Linux发行版上安装应用程序的一种快速和直接的方法。 Flatpak的工作原理是将一个应用程序组合并编译成一个包。此前,Flatpak被称为xdg-app。这个特定的框架使用了在沙箱环境中运行应用程序而不需要根特权的概念。因此,一些flatpak应用程序不能访问和利用系统的全部资源。 Flatpak应用程序主要针对三种桌面环境——FreeDesktop、KDE和GNOME。不幸的是,Flatpak不支持任何后端工具,因为它只生成在Desktop环境中运行的应用程序。这是这个包管理器的一个主要缺点,因为它不支持服务器,除非您安装像GNOME这样的桌面环境(DE)。 与Snap类似,Flatpak有一个名为Flathub的在线商店,用户可以在那里找到并下载他们想要的应用程序。Flathub首次发布时,只允许开发者发布免费和开源的应用程序。然而,在更新了他们的条款和条件之后,开发人员现在甚至可以发布专有包。 https://blog.csdn.net/weixin_39636364/article/details/120424180 pacan -S flatpak flatpak list flatpak search Spotify flatpak install flathub Spotify flatpak run com.spotify.Client flatpak uninstall <appid> flatpak uninstall --unused sudo apt-get remove --autoremove flatpak sudo apt-get purge flatpak ubuntu sudo apt install flatpak Add the Flathub repository flatpak --user remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo remove flatpak flatpak uninstall --all sudo apt purge flatpak rm -rf ~/.local/share/flatpak sudo rm -rf /var/lib/flatpak

2011-07-29 · 1 min · 74 words · -

shell 彩色 echo

shell 彩色 echo #黑底红字 echo -e 'E[31;40mThis prints in red.'; tput sgr0 #!/bin/bash echo -e 'E[COLOR1;COLOR2mSome text goes here.' COLOR1: Foreground Color COLOR2: Background Color #!/bin/bash echo -e 'E[32;40mThis prints in green.'; tput sgr0 echo -e:enable interpretation of backslash escapes -e "允许 反斜杠 (对字符)的转义" e[32;1m: 控制字体和背景颜色的转义字符,3037是字体颜色、4047是背景颜色 “m"终止该转义序列, 然后文本以结束的转义指定的属性显示. tput sgr0: 把终端设置恢复为原样. 如果省略这一句会使后续在该终端的输出仍为xx色. 色彩 前景色 背景色 黑 30 40 红 31 41 ...

2011-07-28 · 1 min · 83 words · -

linux 环境变量, export, set, env, source, exec

linux 环境变量, export, set, env, source, exec 定义变量时加 export 表示为全局变量,不止对当前 shell 有效,对子进程也有效,不加 export 则为局部变量,只对当前 shell 有效,子进程无效。 set 设置了当前 shell 进程的本地变量,本地变量只在当前 shell 的进程内有效,不会被子进程继承和传递。 env 仅为将要执行的子进程设置环境变量。 export 将一个 shell 本地变量提升为当前 shell 进程的环境变量,从而被子进程自动继承,但是 export 的变量无法改变父进程的环境变量。 source 运行脚本的时候,不会启用一个新的 shell 进程,而是在当前shell进程环境中运行脚本。 exec 运行脚本或命令的时候,不会启用一个新的 shell 进程,并且 exec 后续的脚本内容不会得到执行,即当前shell进程结束了。 https://segmentfault.com/a/1190000013356532 .bashrc 文件 这种方法可以把使用这些环境变量的权限控制到用户级别,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的.bashrc文件就可以了。 (1)用文本编辑器打开用户目录下的.bashrc文件 (2)在.bashrc文件末尾加入: JAVA_HOME=/usr/share/jdk1.5.0_05 export JAVA_HOME PATH=$JAVA_HOME/bin:$PATH export PATH CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export CLASSPATH 重新加载 source .bashrc ########################################################## /etc/profile文件 所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性问题。 (1)用文本编辑器打开/etc/profile (2)在profile文件末尾加入: JAVA_HOME=/usr/share/jdk1.5.0_05 PATH=$JAVA_HOME/bin:$PATH CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_HOME ...

2011-07-18 · 2 min · 241 words · -

ln link 软连接和硬连接

ln command, 软连接和硬连接 ln [参数][源文件或目录][目标文件或目录] -f, --force remove existing destination files # 创建软连接 # 原文件: foo # symbolic link : bar ln -s foo bar #硬连接 ln foo bar # 删除链结 unlink link0 # see the actual contents of a symlink ls -l link0 readlink link0 # 打印原始路径 ls -l link0 # 如果 link0 是个目录, 会列出目录下的文件 ls -l link0/ Linux链接分两种,一种被称为硬链接 (Hard Link) ,另一种被称为符号链接 (soft link, Symbolic Link) 。默认情况下,ln命令产生硬链接。 ...

2011-07-13 · 4 min · 769 words · -

apache basic

apache basic apache path /etc/apache2/apache2.conf /etc/apache2/httpd.conf /var/log/apache2 linux apache 版本 linux 自动安装的 apache: sudo apachectl -v 启动/重启/停止apache服务器 Task: Start Apache 2 Server /启动apache服务 # /etc/init.d/apache2 start or $ sudo /etc/init.d/apache2 start Task: Restart Apache 2 Server /重启apache服务 # /etc/init.d/apache2 restart or $ sudo /etc/init.d/apache2 restart Task: Stop Apache 2 Server /停止apache服务 # /etc/init.d/apache2 stop or $ sudo /etc/init.d/apache2 stop

2011-05-29 · 1 min · 59 words · -

开机自动运行

开机自动运行 用户登录时, bash会在用户目录下按顺序查找以下三个文件,执行最先找到的一个. ~/.bash_profile ~/.bash_login ~/.profile 在上述文件中加入相应命令可以启动某些程序. 如: sh /***/tomcat/bin/startup.sh

2011-05-08 · 1 min · 10 words · -

gitosis install

gitosis install 用apt-get update 和 apt-get upgrade 更新当前系统. 安装OpenSSH Server: sudo apt-get install openssh-server 修改ssh服务端配置文件/etc/ssh/sshd_config Port 22 # 修改成你想要的登陆端口,如2222 PermitRootLogin no # 禁止root用户登陆 检查密钥的用户和权限是否正确,默认打开的 设置ssh在接收登录请求之前是否检查用户家目录和rhosts文件的权限和所有 权。这通常是必要的,因为新手经常会把自己的目录和文件设成任何人都有写权限。 StrictModes yes RSAAuthentication yes # 启用 RSA 认证 PubkeyAuthentication yes # 启用公钥认证 ServerKeyBits 1024 #将ServerKey强度改为1024比特 PermitEmptyPasswords no # 禁止空密码进行登录 #修改完成后,重启ssh服务: sudo /etc/init.d/ssh restart 4.安装git: sudo apt-get install git-core 5.安装gitosis (1)建一个临时文件夹,用来存放下载的gitosis文件,如 mkdir ~/tmp (2)安装gitosis cd ~/tmp git clone git://eagain.net/gitosis git://eagain.net/gitosis.git cd gitosis sudo python setup.py install ...

2011-05-04 · 1 min · 106 words · -

git diff

git diff git diff 查看尚未暂存的文件更新了哪些部分 git diff filename 查看尚未暂存的某个文件更新了哪些 git diff –cached 查看已经暂存起来的文件和上次提交的版本之间的差异 git diff –cached filename 查看已经暂存起来的某个文件和上次提交的版本之间的差异 git diff ffd98b291e0caa6c33575c1ef465eae661ce40c9 b8e7b00c02b95b320f14b625663fdecf2d63e74c 查看某两个版本之间的差异 git diff ffd98b291e0caa6c33575c1ef465eae661ce40c9:filename b8e7b00c02b95b320f14b625663fdecf2d63e74c:filename 查看某两个版本的某个文件之间的差异 显示颜色 ~/.gitconfig 中加三行 [color] status = auto branch = auto ui = auto

2011-05-02 · 1 min · 41 words · -