ts

ts 一个 调用 有道词典 在命令行里翻译单词的 linux shell 脚本 author: Hex Lee lihe757@gmail.com 1.添加此脚本到~/.bashrc的末尾 2.source ~/.bashrc ts hello 你好 #youdao ts(){ curl -s "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=dict.top" -d "type=AUTO& i=$1&doctype=json&xmlVersion=1.4&keyfrom=fanyi.web&ue=UTF-8&typoResult=true&flag=false" | sed -E -n 's/.\*tgt":"([^"]+)".\*entries":["","([^"]+)".*/1n 2/p'; return 0; } #sed -E -n 's/.\*tgt":"([^"]+)".*/1/p' ; #sed -E -n 's/.\*tgt":"([^"]+)".\*entries":["","([^"]+)".*/1n 2/p';

2012-03-27 · 1 min · 45 words · -

so, dll, 动态链接库

so, dll, 动态链接库 不同操作系统的动态链接库文件格式稍有不同,Linux称之为共享目标文件 (Shared Object),文件后缀为.so,Windows的动态链接库 (Dynamic Link Library)文件后缀为.dll。 https://zhuanlan.zhihu.com/p/235551437 ‘windows dll, Linux so’ http://blog.csdn.net/yang_lang/article/details/5926486 摘要: 动态链接库技术实现和设计程序常用的技术,在Windows和Linux系统中都有动态库的概念,采用动态库可以有效的减少程序大小,节省空间,提高效率,增加程序的可扩展性,便于模块化管理。 但不同操作系统的动态库由于格式 不同,在需要不同操作系统调用时需要进行动态库程序移植。本文分析和比较了两种操作系统动态库技术,并给出了将Visual C++编制的动态库移植到Linux上的方法和经验。 引言 动态库 (Dynamic Link Library abbr,DLL) 技术是程序设计中经常采用的技术。其目的减少程序的大小,节省空间,提高效率,具有很高的灵活性。 采用动态库技术对于升级软件版本更加容易。与静态库 (Static Link Library) 不同,动态库里面的函数不是执行程序本身的一部分,而是根据执行需要按需载入,其执行代码可以同时在多个程序中共享。 在 Windows和Linux操作系统中,都可采用这种方式进行软件设计,但他们的调用方式以及程序编制方式不尽相同。本文首先分析了在这两种操作系统中通 常采用的动态库调用方法以及程序编制方式,然后分析比较了这两种方式的不同之处,最后根据实际移植程序经验,介绍了将VC++编制的Windows动态库 移植到Linux下的方法。 动态库技术 2.1 Windows动态库技术 动态链接库是实现Windows应用程序共享资源、节省内存空间、提高使用效率的一个重要技术手段。常见的动态库包含外部函数和资源,也有一些动态库只包含 资源,如Windows字体资源文件,称之为资源动态链接库。通常动态库以.dll,.drv、.fon等作为后缀。 相应的windows静态库通常以.lib结尾,Windows自己就将一些主要的系统功能以动态库模块的形式实现。 Windows动态库在运行时被系统加载到进程的虚拟空间中,使用从调用进程的虚拟地址空间分配的内存,成为调用进程的一部分。DLL也只能被该进程的线程所访问。DLL的句柄可以被调用进程使用;调用进程的句柄可以被DLL使用。 DLL 模块中包含各种导出函数,用于向外界提供服务。DLL可以有自己的数据段,但没有自己的堆栈,使用与调用它的应用程序相同的堆栈模式;一个DLL在内存中 只有一个实例;DLL实现了代码封装性;DLL的编制与具体的编程语言及编译器无关,可以通过DLL来实现混合语言编程。DLL函数中的代码所创建的任何 对象 (包括变量) 都归调用它的线程或进程所有。 根据调用方式的不同,对动态库的调用可分为静态调用方式和动态调用方式。 (1) 静态调用,也称为隐式调用,由编译系统完成对DLL的加载和应用程序结束时DLL卸载的编码 (Windows系统负责对DLL调用次数的计数) ,调用方式 简单,能够满足通常的要求。通常采用的调用方式是把产生动态连接库时产生的.LIB文件加入到应用程序的工程中,想使用DLL中的函数时,只须在源文件中 声明一下。 LIB文件包含了每一个DLL导出函数的符号名和可选择的标识号以及DLL文件名,不含有实际的代码。Lib文件包含的信息进入到生成的应用程序中,被调用的DLL文件会在应用程序加载时同时加载在到内存中。 (2)动态调用,即显式调用方式,是由编程者用API函数加载和卸载DLL来达到调用DLL的目的,比较复杂,但能更加有效地使用内存,是编制大型应用程序时的重要方式。在Windows系统中,与动态库调用有关的函数包括: ①LoadLibrary (或MFC 的AfxLoadLibrary) ,装载动态库。 ②GetProcAddress,获取要引入的函数,将符号名或标识号转换为DLL内部地址。 ③FreeLibrary (或MFC的AfxFreeLibrary) ,释放动态链接库。 在 windows中创建动态库也非常方便和简单。在Visual C++中,可以创建不用MFC而直接用C语言写的DLL程序,也可以创建基于MFC类库的DLL程序。每一个DLL必须有一个入口点,在VC++ 中,DllMain是一个缺省的入口函数。DllMain负责初始化(Initialization)和结束(Termination)工作。 ...

2012-03-27 · 2 min · 243 words · -

tunctl

tunctl tunctl is used to set up and maintain persistent TUN/TAP network interfaces, enabling user applications to simulate network traffic. Such interfaces is useful for VPN software, virtualization, emulation, simulation, and a number of other applications. -t _interface _Specifies the desired interface name. **-b **Brief output, prints just the interface name -d _interfacename _Delete the specified interfacename (set it to non-persistent) -t _interface _Specifies the desired interface name. -u _user _Specifies the owner of the interface. This user is allowed to attach to the “network/wire” side. ...

2012-03-25 · 1 min · 96 words · -

virt-manager error

virt-manager error After I finished the install of the “kvm ,qemu-kvm ,libvirt-bin,virtinst,virt-manager”. I want to connect to my vms through the virt-manager .But I come to this error: Unable to open a connection to the libvirt management daemon. Libvirt URI is: qemu:///system Verify that: The ’libvirtd’ daemon has been started And more details: Unable to open connection to hypervisor URI ‘qemu:///system’: unable to connect to ‘/var/run/libvirt/libvirt-sock’, libvirtd may need to be started: Permission denied ...

2012-03-24 · 1 min · 146 words · -

LSM-Tree

LSM-Tree LSM-Tree, Log Structured Merge Tree LSM-Tree 能将离散的随机写请求都转换成批量的顺序写请求 (WAL + Compaction),以此提高写性能。 十多年前,谷歌发布了大名鼎鼎的"三驾马车"的论文,分别是 GFS(2003年),MapReduce (2004年),BigTable (2006年),为开源界在大数据领域带来了无数的灵感,其中在 “BigTable” 的论文中很多很酷的方面之一就是它所使用的文件组织方式,这个方法更一般的名字叫 Log Structured-Merge Tree。在面对亿级别之上的海量数据的存储和检索的场景下,我们选择的数据库通常都是各种强力的NoSQL,比如 Hbase, Cassandra, Leveldb, RocksDB 等等,这其中前两者是 Apache 下面的顶级开源项目数据库,后两者分别是 Google 和 Facebook 开源的数据库存储引擎。而这些强大的 NoSQL 数据库都有一个共性,就是其底层使用的数据结构,都是仿照 “BigTable” 中的文件组织方式来实现的,也就是我们今天要介绍的 LSM-Tree。 influxdb 使用的 TSM 存储引擎也是根据 LSM Tree 针对时间序列数据优化而来 什么是 LSM-Tree LSM-Tree全称是 Log Structured Merge Tree,是一种分层,有序,面向磁盘的数据结构,其核心思想是充分了利用了磁盘批量的顺序写要远比随机写性能高出很多的特性 围绕这一原理进行设计和优化,以此让写性能达到最优,正如我们普通的 Log 的写入方式,这种结构的写入,全部都是以 Append模式 追加,不存在删除和修改。当然有得就有舍,这种结构虽然大大提升了数据的写入能力,却是以牺牲部分读取性能为代价,故此这种结构通常适合于写多读少的场景。故 LSM 被设计来提供比传统的 B+树 更好的写操作吞吐量,通过消去随机的本地更新操作来达到这个目标。这里面最典型的例子就是 Kakfa 了,把磁盘顺序写发挥到了极致,故而在大数据领域成为了互联网公司标配的分布式消息中间件组件。 虽然这种结构的写非常简单高效,但其缺点是对读取特别是随机读很不友好,这也是为什么日志通常用在下面的两种简单的场景: 数据是被整体访问的,大多数数据库的 WAL (write ahead log) 也称 预写log,包括 mysql 的 Binlog 等 数据是通过文件的偏移量offset访问的,比如 Kafka。 想要支持更复杂和高效的读取,比如按key查询和按range查询,就得需要做一步的设计,这也是LSM-Tree结构,除了利用磁盘顺序写之外,还划分了 内存+磁盘 多层的合并结构的原因,正是基于这种结构再加上不同的优化实现,才造就了在这之上的各种独具特点的 NoSQL 数据库,如 Hbase,Cassandra,Leveldb,RocksDB,MongoDB, TiDB 等。 ...

2012-03-22 · 3 min · 450 words · -

undefined reference to ...

undefined reference to … https://zhuanlan.zhihu.com/p/81681440 /usr/bin/ld: cannot find -lxxx 的解决办法 在软件编译过程中,经常会碰到类似这样的编译错误: /usr/bin/ld: cannot find -lhdf5 这表示找不到库文件 libhdf5.so,若是其它库文件,则是 cannot find -lxxx 了,其中 xxx 是库文件的名字。 将库文件所在路径添加到gcc的搜索路径 使用以下命令查询gcc能否搜寻到指定的库文件: gcc -lgsasl –verbose 查询库文件 libhdf5.so 是否能在搜索路径中找到。 使用 /etc/ld.so.conf 配置文件 将库文件所在的路径加入到 /etc/ld.so.conf 尾部,并使之生效: $ sudo echo ‘/opt/biosoft/hdf5-1.8.15-patch1/lib/’ » /etc/ld.so.conf libhdf5.so 在路径 /opt/biosoft/hdf5-1.8.15-patch1/lib/ 下,将该路径加添加到配置文件中 $ sudo ldconfig 运行该命令,重新载入 /ext/ld.so.conf 中的路径,使修改生效。 ls -l /lib/x86_64-linux-gnu cat /etc/ld.so.conf include /etc/ld.so.conf.d/*.conf ls -l /lib/x86_64-linux-gnu

2012-03-22 · 1 min · 63 words · -

计算器 bc, expr、dc、echo、awk)

计算器 bc, expr、dc、echo、awk) Linux下的计算器 bc, expr、dc、echo、awk) bc # install bc sudo pacman -S bc # 将16进制的A7输出为10进制, 注意,英文只能大写 echo "ibase=16;A7" |bc bc在默认的情况下是个交互式的指 令。在bc工作环境下,可以使用以下计算符号: + 加法 – 减法 * 乘法 / 除法 ^ 指数 % 余数 示例: bc #bc 1.07.1 #Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc. #This is free software with ABSOLUTELY NO WARRANTY. #For details type `warranty'. 2.7*8 # 21.6 3+6 <=加法 4+2_3 <=加法、乘法 (4+2)_3 <=加法、乘法 (优先) 4_6/8 <=乘法、除法 10^3 <=指数 1000 18%5 <=余数 3+4;5_2;5^2;18/4 <=一行输入多个计算,用;相隔。 quit <=退出 bc scale=3 <=设小数位 1/3 .333 quit 以上是交互的计算,那到也可以不进行交互而直接计算出结果。 ...

2012-03-18 · 2 min · 411 words · -

pathmunge

pathmunge pathmunge是linux系统redhat系列版本系统变量/etc/profile中的函数,如果想要把某个二进制程序可以在所有的shell不用全路径运行,就需要将其所在的目录放在profile中,用过的命令正是pathmunge (目录命) pathmunge{ if ! echo $PATH | /bin/egrep -q “(^|:)$1($|:)";then if["$2”=“after”];then PATH=$PATH:$1 else PATH=$1:$PATH fi fi export PATH } pathmunge大致的作用是: 判断当前系统的PATH中是否有该命令的目录,如果没有,则判断是要将该目录放于PATH之前还是之后 echo “PATH” 输出PATH变量的内容以供egrep查询, grep是利用正则表达式来搜索文本的工具,egrep用的是扩展的正则表达式 -q:do not write anything to the standart output “(^|:)$1($|:)“为要搜索的文本,()和|都是扩展的正则表达式,()查找组,|用或的方式查找字符串,^和$是基础的正则表达式,表示待查找的字符串在开头或结尾,&1是命令所在的目录,整个表达式的意思就是在PATH开头或以: 开头,末尾是文本的末尾或以: 为末尾的该目录 !表示查找的字符串不在PATH中 下来两个if很好理解,如果你想把该目录放于整个PATH变量的后边,pathmunge (目录名) after 则PATH=$PATH:$1,否则PATH=$1:PATH export 将新设置的变量输出,使其在当前的shell和以后的shell中都生效

2012-03-15 · 1 min · 45 words · -

linux distribution, 发行版

linux distribution, 发行版 Archlinux Gentoo Alpine Ubuntu Centos Fedora Debian Redhat

2012-03-14 · 1 min · 11 words · -

RedHat Enterprise Linux 网络配置

RedHat Enterprise Linux 网络配置 一、$/sbin/ifconfig //显示ifconfig命令查看网络接口的信息 #ifconfig eth0 //显示指定接口的信息 #ifconfig -a //显示所有接口的信息 (无论是否活跃) #ifconfig eth0 192.168.0.2 netmask 255.255.255.0 //临时修改接口IP地址 (无需重启接口) 二、$/sbin/route //显示当前Linux主机中的路由表信息 #route del default gw 192.168.0.1 //临时删除默认网关192.168.0.1 #route add default gw 192.168.0.1 //临时添加默认网关192.168.0.1 #route add -net 192.168.1.0/24 gw 192.168.0.254 //临时添加一条静态路由 /*本文中提及临时操作的地方,即主机重启后该操作将失效,如果希望每次系统重启后自动添加静态路由条目,则可以将该语句写入/etc/rc.d/rc.local中。*/ 三、#ping //测试与其他主机的网络连接 #ping -c 4 192.168.0.1 //指定发出ICMP包个数 四、#traceroute //测试当前主机到目的著急的网络连接 五、#hostname //查看当前主机的主机名 #hostname linsrv //临时修改当前主机名 六、#nslookup //测试DNS域名解析 server //显示当前DNS服务器 server 192.168.0.1 //临时指定DNS服务器地址 七、#dhclient //为当前主机申请网络配置信息 八、#netconfig //通过向导在字符界面下修改网络配置信息 九、#/etc/init.d/network restart //重启网络服务 ...

2012-03-13 · 1 min · 168 words · -

Disable Network Manager In Ubuntu

Disable Network Manager In Ubuntu This brief tutorial will show you how to quickly disable Network Manager in Ubuntu Lucid and configure a static or DHCP setting manually. This method will not remove or uninstall Network Manager, but makes it inactive every time you login to your computer. If Network Manager is misbehaving, this is also another way to disable it. sudo apt-get purge network-manager network-manager-gnome gedit /etc/network/interfaces auto lo ...

2012-03-13 · 1 min · 118 words · -

XMMS

XMMS X Multimedia System (XMMS)是一套自由的音频播放器,其外表极像Winamp,但是运行在Unix-like 操作系统。 XMMS原来的名字是"X11Amp",是由Peter and Mikael Alm在1997年11月所编写的,原因是 “Linux没有好的mp3播放器”。 这个播放器是故意模仿Winamp的,其第一个版本是在翌年5月发行的。自其发行后,XMMS皆支持Winamp的面板。虽然原来的授权是闭源的,但现已变为开源,采用GNU General Public License。 在1999年6月10日,4Front Technologies决定赞助X11Amp开发并将计划名称改成"XMMS"- 这个名称解为"X MultiMedia System"。大部份XMMS使用者将X解为X11或X-Windows ,但实际上X是解为"跨平台"。 批评 XMMS一直坚持使用古老的GTK+程式包来编写,最基本的不升级原因是因为大部份插件皆依赖于旧的GTK环境。很多程序设计员亦认为XMMS的源代码设计得太差,很难维护。基于以上原因,网络上出现了很多相关的改进计划: • Beep Media Player,是以GTK+ 2来重新编写XMMS的音频播放器,在2003年开始计划。 • 而有一个并不著名的以GTK+ 2重新编写XMMS的计划,称为XMMS2,是由Mohammed Sameer主持的,但此计划已停止维护。 • XMMS2计划,是打算将XMMS的代码全部重新编写的,由Peter Alm主持,在2002冬季开始。 编辑本段 特色 XMMS现在支持以下的音频和视频档案: • 音乐光碟, 包含 经由FreeDB支持CDDB • libmikmod 所支持的格式 (including .XM, .MOD, .IT) • MPEG Layer 1,2 and 3 (即是 MP3), 经由 mpg123程式库支持 • Vorbis • WAV • TTA - 经由第三方插件支持 • WavPack - 经由第三方插件支持 ...

2012-03-10 · 1 min · 103 words · -

第一届黑客信息战 MIT CTF 2011记录

第一届黑客信息战 MIT CTF 2011记录 这个是前两天我朋友 dcluo 在 MIT(麻省理工学院) 参加的一个黑客竞赛的实战记录 分享给大家看看 感受一下国外的技术竞赛魅力 ———————————————————————— 第一届 MIT CTF 2011 信息战随笔 – 此次经历,值得记录 (我尽量写的详细,希望各大学校组织效仿这类比赛) 前言: 事情追溯到几个月前在 hackathon 有幸认识了一位MIT 计算机女强人 haoqi 同学。 (hacakthon是微软举办的一个过夜的"搞破坏者"的集会。)在大约凌晨2点左右。。 我和她都被微软强行推荐的 Windows 7 Phone 寂寞无聊的不行。 我突然对她说,你对网络入侵感兴趣么? 一下子,一拍即合。于是引导了今天和昨天 20个小时的入侵攻防信息战模拟。 比赛名称: MIT CTF 2011 时间: 4月2~3日 早8: 30 – 晚9:00点 地点: MIT 人物: 韩国网安内核牛+haoqi+我 + 其他12个组 (~45人) 比赛规格: 13组小队 (MIT,BU,UMASS,NE…) 一个组一个VM (ubuntu 10.10 + 最新apache+MySQL+wordpress) 分别运行在同一个虚拟机服务器上但是不同IP和Domain。 每个组一个SWITCH BOX 和 名为 ctfuser 的用户权限(ssh) 和三个密码 (ssh+wordpress+评分页密码) WordPress 每随机一段时间会要求安装一个plugin。 每天可以有一个snapshot和三次全盘恢复机会。 任务目标: ...

2012-03-06 · 3 min · 448 words · -

systemd timer, cron, crond, crontab, linux 定时任务, cronie

systemd timer, systemd-timer, cron, crond, crontab, linux 定时任务, cronie 安装了 systemd 的系统, 可以用 systemd-timer 来替代 cron 和 anacron。 When using the systemd init system, (persistent) timers are available as a replacement of (ana)cron. Since version 197 systemd supports timers, making cron unnecessary on a systemd system. Since version 212 persistent services are supported, replacing even anacron. Persistent timers are run at the next opportunity if the system was powered down when the timer was scheduled to run. ...

2012-03-02 · 6 min · 1075 words · -

可执行文件

可执行文件 目标文件与可执行文件格式的小历史 目标文件与可执行文件的格式和操作系统和编译器密切相关,不同的系统平台下会有不同的格式,但是这些格式又大同小异,可以说,目标文件与可执行文件格式的历史几乎是操作系统的发展史。 COFF是由Unix System V Release 3首次提出并使用的格式规范,后来Microsoft在其基础上,制定了PE格式标准,并将其应用于自家的Windows NT系统。后台,System V Release 4 在 COFF的基础上引入了ELF格式,目前流行的Linux系统也是以ELF作为基本的可执行文件格式。这也是为什么目前PE和ELF如此相似的原因,因为它们都是源于同一种可执行文件格式COFF。 在COFF之前,Unix最早的可执行文件格式是a.out格式,中文意为汇编器输出。因其设计简单,以至于后来共享库出现的时候,a.out格式变得捉襟见肘,难以满足共享库实现的要求,于是从Unix System V Release 3开始被COFF取代。由于COFF格式的设计非常通用,以至于COFF的继承者PE和ELF目前还在被广泛地使用。COFF的主要贡献是在目标文件中引入了“段”的机制,不同的目标文件可以拥有不同数量及不同类型的段。另外,还定义了调试数据的格式。 可执行文件(Executable File)是指可以由操作系统直接加载执行的文件,在Windows操作系统中可执行文件就是PE文件结构,在Linux下则是ELF文件 PE文件整体结构 PE结构可以大致分为: DOS部分 PE文件头 节表(块表) 节数据(块数据) 调试信息 PE文件种类如下表所示: 种类 主扩展名 可执行系列 EXE, SCR 库系列 DLL, OCX, CPL, DRV 驱动程序系列 SYS, VXD 对象文件系列 OBJ 在Windows下所谓PE文件即Portable Executable,意为可移植的可执行的文件。常见的.EXE、.DLL、.OCX、.SYS、.COM都是PE文件。PE文件有一个共同特点:前两个字节为4D 5A (MZ)。如果一个文件前两个字节不是4D 5A则其肯定不是可执行文件。比如用16进制文本编辑器打开一个“.xls”文件其前两个字节为:0XD0 0XCF;打开一个“.pdf”其前两个字节为:0X25 0X50。 ———————————————— 版权声明:本文为CSDN博主「Apollon_krj」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/Apollon_krj/article/details/77069342 https://www.ascotbe.com/2020/03/23/PortableExecutable/ ELF (Executable Linkable Format) ELF (Executable Linkable Format):linux下的可执行文件格式,按照ELF格式编写的文件包括:.so、.a等 Mach-O Mach-O:iOS/MacOS下可执行文件格式,平时常见的.app或者ipa只是zip压缩包并非可执行文件,可执行文件在压缩包中。在mac下使用file命令打印任意可执行文件便可以看到如下内容: file /Applications/filename.app/Contents/MacOS/filename Mach-O 64-bit executable x86_64 ...

2012-03-01 · 1 min · 82 words · -

Bootchart, systemd-analyze

Bootchart, systemd-analyze Bootchart 已经成为 systemd 的一部分 https://wiki.archlinux.org/title/Improving_performance/Boot_process#Analyzing_the_boot_process systemd-analyze plot > plot.svg 很多朋友抱怨自己的 Linux 系统启动速度太慢,但又苦于没有什么好途径进行分析,使之能够得到改进。如果你正受到这方面问题的困惑,那么有一个 Bootchart 小工具能够帮助你。 Bootchart 能够对系统的性能进行分析,并生成系统启动过程的图表,以便为你提供有价值的参考信息。综合所得的信息,你就可以进行相应的改进,从而加快你的 Linux 系统启动过程。 在安装 Bootchart 并重新启动系统后,你就可以在 /var/log/bootchart/ 找到它生成的图片文件了。以下是我的系统所生成的启动过程图表,你可以参考一下。 First you need to enable some options in the kernel to use the BSD process accounting. This feature is optional, but is highly recommended for improved accuracy. If you are using genkernel to build your kernel, run the following command: And enable the following options: General setup —> [] BSD Process Accounting [] BSD Process Accounting version 3 file format ...

2012-02-28 · 1 min · 86 words · -

kernel config 3.2.8

kernel config 3.2.8 http://0123.blog.163.com/blog/static/4788312011112214258169/ http://www.cnblogs.com/unicode/archive/2010/05/19/1739675.html http://blog.csdn.net/unsigned_/article/details/6123426 http://blog.csdn.net/woshixingaaa/article/details/5982246 1,仔细了解你电脑的硬件型号,越清楚越好切记切记。 2.一定要把SCSI控制器的驱动及与文件系统有关的都编译进内核,而不是模块。 3.把对启动过程没有关系的驱动,一定要编进模块。 4.一定要把你的.config文件复制出来,作为下次重复编译的起点 5.在编译前,一定要保证系统中至少有一个可以正常启动的内核 6.可能在你正确编译完成后,你的一些系统工具不能正常工作,所以不要盲目追新,和util-bin,linux-util,以及模块工具等不能协同工作就悲摧了。 7.一般来说,手动编译的内核启动速度比发行版提供的要快那么一点点,但是,一般的各发行版定制的内核都经过了不同程度的优化,选择自行编译等于放弃了这些优点。除非你清楚你在做什么,否则编译内核只适合喜欢鼓捣学习提高的童鞋。that’s all,good luck! []Prompt for development and/or incomplete code/drivers 对开发中的或者未完成的代码和驱动进行提示, Linux下的很多东西,比如网络设备、文件系统、网络协议等等,它们的功能、稳定性、或者测试等级等等还不能够符合大众化的要求,还处于开发之中。这就是所谓的α版本(阿尔法版本):最初开发版本;接下来的是β版本(beta版本),公开测试版本。如果这是阿尔法版本,那么开发者为了避免收到诸如"为何这东西不工作"的信件的麻烦,常常不会让它发布出去。但是,积极的测试和使用阿尔法版本对软件的开发是非常好的。你只需要明白它未必工作得很好,在某些情况有可能会出问题。汇报详细的出错情况对开发者很有帮助。这个选项同样会让一些老的驱动可用。很多老驱动在后来的内核中已经被代替或者被移除。除非你想要帮助软件的测试,或者开发软件,或者你的机器需要这些特性,否则你可以选N ,那样你会在配置菜单中得到较少的选项。如果你选了Y, 你将会得到更多的阿尔法版本的驱动和代码的配置菜单。 () Cross-compiler tool prefix 交叉编译工具前缀,如果你要使用交叉编译工具的话输入相关前缀。默认不使用。不需要;交叉编译(cross-compile)大致的意思就是在一个平台上为另外一个平台生成代码,也就是说,你在编译时使用的编译器的host和target是不同的,比如你在x86的机器上生成mips的代码。你给本地机器编内核的话,用不到这个。 (ylxy1.2)Local version - append to kernel release 本地版本-附加内核发行版本. 在你的内核版本后面加上一串字符来表示版本。这些字符在你使用 uname -a命令时会显示出来。你在这设置的版本字符将会出现在文件的目录和内容中,如果这些文件调用了内核的版本号。你的字符最多不能超过64位。 [*]Automatically append version information to the version string 自动生成版本信息。这个选项会自动探测你的内核并且生成相应的版本,使之不会和原先的重复。这需要Perl的支持。由于在编译的命令make-kpkg 中我们会加入-append-to-version选项来生成自定义版本,所以这里选N. []Kernel compression mode (Gzip) ((none))Default hostname [*]Support for paging of anonymous memory(swap) 这是使用交换分区或者交换文件来做为虚拟内存的,当然要选上了。 [*]System V IPC 为进程提供通信机制,这将使系统中各进程间有交换信息与保持同步的能力。有些程序只有在选Y的情况下才能运行,所以不用考虑,这里一定要选。 [*] BSD Process Accounting ...

2012-02-28 · 1 min · 144 words · -

IPC, 进程间通信IPC (InterProcess Communication)

IPC, 进程间通信IPC (InterProcess Communication) 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信 (IPC,InterProcess Communication) 进程间通信模型 进程间通信的7种方式 匿名管道 命名管道 消息(Message)队列 共享内存 (share memory) 信号量(semaphore) socket (socket) 管道/匿名管道(pipe) 管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道。 只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程); 单独构成一种独立的文件系统: 管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中。 数据的读出和写入: 一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。 进程间管道通信模型 管道的实质: 管道的实质是一个内核缓冲区,进程以先进先出的方式从缓冲区存取数据,管道一端的进程顺序的将数据写入缓冲区,另一端的进程则顺序的读出数据。 该缓冲区可以看做是一个循环队列,读和写的位置都是自动增长的,不能随意改变,一个数据只能被读一次,读出来以后在缓冲区就不复存在了。 当缓冲区读空或者写满时,有一定的规则控制相应的读进程或者写进程进入等待队列,当空的缓冲区有新数据写入或者满的缓冲区有数据读出来时,就唤醒等待队列中的进程继续读写。 管道的局限: 管道的主要局限性正体现在它的特点上: 只支持单向数据流; 只能用于具有亲缘关系的进程之间; 没有名字; 管道的缓冲区是有限的 (管道制存在于内存中,在管道创建时,为缓冲区分配一个页面大小) ; 管道所传送的是无格式字节流,这就要求管道的读出方和写入方必须事先约定好数据的格式,比如多少字节算作一个消息 (或命令、或记录) 等等; 命名管道(named pipe) 匿名管道,由于没有名字,只能用于亲缘关系的进程间通信。为了克服这个缺点,提出了有名管道(FIFO)。 有名管道不同于匿名管道之处在于它提供了一个路径名与之关联,以有名管道的文件形式存在于文件系统中,这样,即使与有名管道的创建进程不存在亲缘关系的进程,只要可以访问该路径,就能够彼此通过有名管道相互通信,因此,通过有名管道不相关的进程也能交换数据。值的注意的是,有名管道严格遵循先进先出(first in first out),对匿名管道及有名管道的读总是从开始处返回数据,对它们的写则把数据添加到末尾。它们不支持诸如lseek()等文件定位操作。有名管道的名字存在于文件系统中,内容存放在内存中。 匿名管道和有名管道总结: (1) 管道是特殊类型的文件,在满足先入先出的原则条件下可以进行读写,但不能进行定位读写。 (2) 匿名管道是单向的,只能在有亲缘关系的进程间通信;有名管道以磁盘文件的方式存在,可以实现本机任意两个进程通信。 (3) 无名管道阻塞问题: 无名管道无需显示打开,创建时直接返回文件描述符,在读写时需要确定对方的存在,否则将退出。如果当前进程向无名管道的一端写数据,必须确定另一端有某一进程。如果写入无名管道的数据超过其最大值,写操作将阻塞,如果管道中没有数据,读操作将阻塞,如果管道发现另一端断开,将自动退出。 (4) 有名管道阻塞问题: 有名管道在打开时需要确实对方的存在,否则将阻塞。即以读方式打开某管道,在此之前必须一个进程以写方式打开管道,否则阻塞。此外,可以以读写 (O_RDWR) 模式打开有名管道,即当前进程读,当前进程写,不会阻塞。 延伸阅读: 该博客有匿名管道和有名管道的C语言实践 信号 (Signal) 信号是Linux系统中用于进程间互相通信或者操作的一种机制,信号可以在任何时候发给某一进程,而无需知道该进程的状态。 如果该进程当前并未处于执行状态,则该信号就由内核保存起来,知道该进程回复执行并传递给它为止。 如果一个信号被进程设置为阻塞,则该信号的传递被延迟,直到其阻塞被取消是才被传递给进程。 信号 (Signal) 信号是比较复杂的通信方式,用于通知接受进程有某种事件发生, 除了用于进程间通信外,进程还可以发送信号给进程本身;Linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction (实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数) ...

2012-02-28 · 7 min · 1475 words · -

sysstat

sysstat system performance tools for Linux The sysstat package contains the following system performance tools: sar: collects and reports system activity information; iostat: reports CPU utilization and disk I/O statistics; mpstat: reports global and per-processor statistics; pidstat: reports statistics for Linux tasks (processes); sadf: displays data collected by sar in various formats. The statistics reported by sar deal with I/O transfer rates, paging activity, process-related activities, interrupts, network activity, memory and swap space utilization, CPU ...

2012-02-27 · 1 min · 91 words · -

eBPF

eBPF eBPF 的用处 有了 eBPF,无需修改内核,也不用加载内核模块,程序员也能在内核中执行自定义的字节码。eBPF 和内核紧密联系,下面先介绍一些相关的基本概念。 Linux 系统分为内核空间和用户空间。内核空间是操作系统的核心,对所有硬件都具备不受限制的完整的访问能力,例如内存、存储以及 CPU 等。内核既然具备了这样的超级权限,势必需要严加保护,仅允许运行最可靠的代码。而用户空间运行的就是非内核的进程——例如 I/O、文件系统等。这些进程仅能通过内核开放的系统调用,对硬件进行有限的访问。换句话说,用户空间的程序一定要经过内核空间的过滤。 系统调用接口能够满足绝大多数需要,开发者在面对新的硬件、文件系统、网络协议甚至自定义的系统调用时,还是需要更多的弹性的。在不修改内核源码的情况下,用户代码要直接访问硬件怎么办呢?可以使用 Linux 内核模块 (LKM)。用户空间一般是需要通过系统调用来访问内核空间,而 LKM 是直接加载到内核的,是内核的一部分。LKM 最有价值的特点之一,就是可以在运行时加载,不用编译内核也不用重启机器。 what is ebpf 1 图 1:LKM 的动态加载和卸载 LKM 非常有用,但是也引入了很多风险。内核和用户空间不同,要进行不同的安全考量。内核空间是为了操作系统内核这样的特权代码准备的。系统调用连接了内核和用户空间,让用户空间能够对硬件进行合适的操作。换个说法,LKM 是能够让内核崩溃的。模块和内核的紧密关系,使得安全和升级成本直线升高。 eBPF 是什么 eBPF 是一个用于访问 Linux 内核服务和硬件的新方法。这一新技术已经用于网络、出错、跟踪以及防火墙等方面。 dtrace 是一个 Solaris 和 BSD 操作系统上的动态跟踪工具,eBPF 受到 dtrace 的启发,原意是设计一个更好的 Linux 跟踪工具。跟 dtrace 不同的是,Linux 无法获取运行中系统的鸟瞰视图,它被系统调用、库调用以及函数所限制。一小撮工程师在 Berkeley Packet Filter (BPF)基础之上,构建一个内核虚拟机级别的包过滤机制,提供了类似 dtrace 的功能。2014 年第一个版本适配了 Linux 3.18,提供的功能相对较少。要使用完整的 eBPF,需要 Linux 4.4 或以上。 what is ebpf 2 上图对 eBPF 架构进行了一个简单的展示。eBPF 程序需要满足一系列的需求,才能被加载到内核。Verifier 中有一万多行代码用来对 eBPF 程序进行检查。Verifier 会遍历对 eBPF 程序在内核中可能的执行路径进行遍历,确保程序能够在不出现导致内核锁定的循环的情况下运行完成。除此之外还有其它必须满足的检查,例如有效的寄存器状态、程序大小以及越界等。安全控制方面,eBPF 和 LKM 是颇有差异的。 ...

2012-02-27 · 1 min · 90 words · -