
Linux
文章平均质量分 79
slvher
这个作者很懒,什么都没留下…
展开
-
【Linux学习笔记】Linux动态共享对象(动态链接库)装载过程
之前开发项目时,曾遇到一个问题:模块中用到的某so文件与模块某源码文件中存在同名函数(在链接器linker来看,是同名符号)时,so文件中同名函数被“覆盖”,从而导致模块启动时崩溃。当时曾专门做过实验,得到了避免出问题的一些小技巧(参见之前的某篇笔记),但其实对引发问题的底层原因并特别不清楚(当时由于这类问题对应的术语及其英文关键词一无所知,导致google不出干货)。最近,阅读《程序员的自我修养原创 2013-04-12 00:51:58 · 2984 阅读 · 0 评论 -
【Git笔记】"error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed"解决方法
使用git通过https方式从github clone git repo源码时,报错如下:Cloning into 'git'...fatal: unable to access 'https://github.com/git/git.git/': SSL certificate problem, verify that the CA cert is OK. Details:error:1原创 2014-01-08 17:49:41 · 27532 阅读 · 0 评论 -
【Git笔记】运行man git时报错"No manual entry for git"的解决方法
从github下载git源码(version 1.8.5.2)解压,执行以下步骤后安装git成功: a. make configure b. ./configure --prefix=xxx c. make d. make install e. 在~/.bash_profile中将GITP原创 2014-01-07 20:40:25 · 3705 阅读 · 0 评论 -
【Git笔记】使用技巧:命令自动补全及命令别名的配置方法
1. Auto-Completion在linux机器上安装完git后,默认不支持命令自动补全。对于bash用户来说,实现git命令补全非常简单:1) 下载git源码,cd至contrib/completion目录,找到git-completion.bash文件2) 将上述文件copy至个人home目录,可设为隐藏文件以免后续被误删:cp ./git-completion.bash ~/原创 2014-04-11 18:36:32 · 2437 阅读 · 0 评论 -
【Linux笔记】samba源码安装及基本使用说明
前段时间项目中碰到从windows机器上传多媒体文件至linux服务器的需求(人工审核并触发同步),调研了几种上传机制或实现方案:1) http方式上传至WebServer用PHP或Python脚本上传给WebServer,但由于多媒体文件动辄几百兆,PHP由于最长执行时间的限制首先被排除,另外由于用脚本上传需要增加失败重试等控制逻辑,Python虽然可以实现这些功能,但考虑到开发成本及服原创 2014-08-22 15:01:49 · 2704 阅读 · 0 评论 -
【Git笔记】"error:0D0890A1:asn1 encoding routines:ASN1_verify:unknown message digest algorithm"的解决方法
备注:本笔记所描述的问题的前提是机器上已安装成功git且通过配置ca证书支持以https方式获取远程仓库,如果使用git时碰到这篇文章描述的问题,那么按那篇文章给出的办法解决即可。 最近从github clone repo时,git clone命令报错如下(以vim代码补全插件youcompleteme为例):$ git clone https://github.com/Val原创 2014-11-25 17:44:36 · 7709 阅读 · 0 评论 -
【Linux笔记】linux系统下链接可执行文件时,linker如何查找共享库
当要编译的可执行程序依赖共享库时,linker按下面所示顺序查找其依赖的库。下面的内容出自gcc manual,作为笔记,记录于此。The linker uses the following search paths to locate required shared libraries. 1. Any directories specified by -rpath-link op原创 2014-12-24 16:08:46 · 1642 阅读 · 0 评论 -
【Linux笔记】如何利用logrotate工具自动切分滚动中的日志文件
在很多实际项目中,应用程序会持续写日志,如果程序代码中没有调用支持自动切分(如按filesize或date切割)的日志库,则日志文件会很快增长到G级别。单机操作大文件对后续跟进日志来说非常不方便。本文介绍如何利用logrotate这个工具来在应用程序外部切分日志。1. logrotate是什么logrotate是大多数linux系统自带的日志切割工具,在shell终端输入"man lo原创 2015-03-11 16:40:09 · 4629 阅读 · 0 评论 -
OpenSSL中RC4加解密过程调研
最近项目用到rc4加密数据,对其实现过程做了基本调研,在此记录一下初步调研结果。 首先shell中man RC4,了解其基本函数调用方法,知道了怎么用,但对其实现原理还有疑问,继续调研 然后google一把ssl rc4,发现这篇文章讲得比较清楚了: http://blog.youkuaiyun.com/k1988/article/details/4854369 本地写原创 2013-03-16 14:05:41 · 6042 阅读 · 0 评论 -
【Linux学习笔记】kill及kill -9的用法及如何实现进程的优雅退出
本篇笔记主要说明两个问题:1)如何在shell中终止一个后台进程;2)一个后台服务进程如何实现优雅退出1. kill与signals 我们这里所说的kill是指作为shell command的那个kill(相对地,linux系统中还有个叫做kill的system call, man 2 kill可查看其功能及用法),shell终端中输入man kill可以看到,kill的作用原创 2013-05-26 19:58:22 · 16281 阅读 · 2 评论 -
日志收集系统Flume调研笔记第1篇 - Flume简介
用户行为数据的收集无疑是构建推荐系统的先决条件,而Apache基金会下的Flume项目正是为分布式的日志收集量身打造的,本文是flume基本用法的调研笔记。本文所用的Flume版本为目前最新版的ver1.5.2,它属于Flume-NG,在系统架构上与Flume-OG有所区别,二者的不同可以参考FlumeWiki文档的说明。1. Flume是什么Flume是Apache基金会下的一个开源原创 2015-04-29 18:52:07 · 3257 阅读 · 0 评论 -
日志收集系统Flume调研笔记第2篇 - Flume配置及使用实例
上篇笔记对Flume的使用场景和系统架构做了介绍,本篇笔记以实例说明Flume的配置方法。下面开始正文。1. Flume使用实例1.1 配置Flume agent的3个组件及其拓扑关系是在配置文件中指定的,总的原则是必须列出source/channel/sink的name/type等重要的配置项,并通过channel将source(s)和sink(s)连接起来,此外,1个source可原创 2015-04-29 19:13:09 · 2360 阅读 · 0 评论 -
【网络编程笔记】Linux系统常见的网络编程I/O模型简述
1. 典型的I/O模型根据”Unix Network Programming Volume 1”一书第6.2节的说明,Linux系统支持的典型I/O模型包含下面5种:阻塞I/O(blocking I/O)非阻塞I/O(nonblocking I/O)I/O多路复用(I/O multiplexing, e.g. select and poll)信号驱动型I/O(signal driven I原创 2015-06-29 19:15:17 · 1620 阅读 · 1 评论 -
【Git笔记】如何在同主机同账户下实现多个gitlab帐号管理各自的remote repo
我们可能会遇到下面的场景: 1)多人共用同一台Linux开发机,该开发机只有一个共用的work帐号,很多人都用这个帐号登录主机进行日常开发; 2)该work帐号下统一安装了git客户端供多人使用; 3)项目采用gitlab进行云端代码托管; 4)每个开发人员均使用自己的gitlab帐号进行版本管理。在上面的场景下,需要解决一个问题: 在同主机且共用工作帐号的情况下,如何使用各自的gitla原创 2015-08-22 22:05:08 · 3836 阅读 · 0 评论 -
C/C++中用va_start/va_arg/va_end实现可变参数函数的原理与实例详解
在C/C++中,我们经常会用到可变参数的函数(比如printf/snprintf等),本篇笔记旨讲解通过va_start/va_arg/va_end这簇宏来实现可变参数函数的原理,并在文末给出简单的实例。 备注:本文的分析适用于Linux/Windows,其它操作系统平台的可变参数函数的实现原理大体相似。1. 基础知识 如果想要真正理解可变参数函数背后的运行原创 2013-08-10 17:51:04 · 16018 阅读 · 0 评论 -
【Linux C调试笔记】Linux系统下借助mcheck实现c/c++程序的堆内存异常检查
C/C++编程中,内存管理(这里特指堆内存管理)一直是个让大家如履薄冰的topic,尤其是由成千上万行代码构成的模块中,由于堆内存被越界改写而导致程序崩溃的情况非常普遍。最让人头大的是,程序崩溃的地方往往不是"案发地"(一般情况是,堆内存越界很长时间后,程序才会表现出异常行为),因此,此类问题通常很难定位,在多线程程序中,情况会更糟。 那么,有什么方法可以让程序在堆内存越界时就立原创 2013-08-28 16:17:55 · 5373 阅读 · 0 评论 -
【Linux学习笔记】栈与函数调用惯例—上篇
栈与函数调用惯例(又称调用约定)— 基础篇 记得一年半前参加百度的校招面试时,被问到函数调用惯例的问题。当时只是懂个大概,比如常见函数调用约定类型及对应的参数入栈顺序等。最近看书过程中,重新回顾了这些知识点,对整个调用栈又有了较深入的理解。作为笔记,记录于此。 NOTICE:本文笔记以32位Linux系统为背景,可能与Windows操作系统的底层机制有些小差异(原创 2013-04-21 20:40:49 · 3115 阅读 · 0 评论 -
【Linux学习笔记】栈与函数调用惯例—下篇
栈与函数调用惯例(又称调用约定)— 正篇 在前篇笔记的基础上,本文继续介绍栈与函数调用约定的相关内容。1. 函数调用的栈帧结构 IA32程序用栈来实现函数调用。机器用栈来传递函数参数、保存返回地址、保存寄存器(即函数调用的上下文)及存储本地局部变量等。为单个函数调用分配的那部分栈称为栈帧(stack frame),栈帧的边界由2个指针界定:寄存器%ebp为原创 2013-04-21 20:56:32 · 2980 阅读 · 0 评论 -
【案例分享】关于工程中同时链接了某库源码和该库so情况下,模块运行崩溃的问题跟进
1. 问题背景 最近在Linux Redhat平台下开发模块时,由于种种原因,工程中同时使用了公司某内部库的源码和对其封装的so库(比较蛋疼,不过一言难尽。。。),模块编译时通过-l参数链接该so库,编译成功,程序启动时崩溃。gdb调试显示,代码调用了so中的A函数,而A函数又调用了B函数,恰好源码中也有个同名的B函数,因此,so中A函数调用的B函数实际执行的是源码中的B函数,由原创 2012-12-07 15:34:20 · 1767 阅读 · 0 评论 -
【Linux学习笔记】Linux C中内联汇编的语法格式及使用方法(Inline Assembly in Linux C)
在阅读Linux内核源码或对代码做性能优化时,经常会有在C语言中嵌入一段汇编代码的需求,这种嵌入汇编在CS术语上叫做inline assembly。本文的笔记试图说明Inline Assembly的基本语法规则和用法(建议英文阅读能力较强的同学直接阅读本文参考资料中推荐的技术文章 ^_^)。 注意:由于gcc采用AT&T风格的汇编语法(与Intel Syntax相对应,二者的区原创 2013-04-28 20:53:07 · 20179 阅读 · 4 评论 -
vim7.3编译报错error: cannot compute sizeof (off_t)解决方法
在 Redhat x86_64 GNU/Linux环境下以源码方式编译安装vim 7.3 (vim官网),运行./configure --prefix=/home/work/tools/vim-7.3一段时间后报错: configure: error: cannot compute sizeof (off_t) See `config.log' for more details.原创 2012-12-29 16:10:50 · 10132 阅读 · 3 评论 -
Linux内置命令free的输出详解
背景: 最近协助QA测试自己开发的server模块,压测下观察进程内存使用情况时,用到了linux系统内置指令free,不得不说,对于Linux新手来说,这个指令的输出结果可能让人摸不着头脑。 为搞清出其输出含义,查了一些资料,作为笔记,记录于此,也希望能帮助到同样疑惑的新手。实例: 在运行server进程的机器命令行输入:free -m原创 2013-03-23 15:39:03 · 2562 阅读 · 0 评论 -
【Linux学习笔记】Linux主机如何实现无需输入密码的远程登录或脚本远程执行
linux机器日常运维过程中,经常需要在本地运行脚本执行针对远程主机的命令。正常情况下,ssh登陆远程机器时会提示输入密码,这会影响到脚本的自动执行,(因为shell脚本中没有自动填充密码的命令)。 总的来说,有两个办法来解决问题: 1)建立主机间的ssh信任关系 2)用python脚本模拟scp命令的密码输入过程,避免每次手工输密原创 2013-05-31 21:27:59 · 3443 阅读 · 0 评论 -
linux主机load average的概念&&计算过程&&注意事项
最近开发的一个模块需要根据机房各节点的负载情况(如网卡IO、load average等指标)做任务调度,刚开始对Linux机器load average这项指标不是很清楚,经过调研,终于搞清楚了其计算方法和影响因素,作为笔记,记录于此。1. load average 当在shell终端键入top命令时,默认情况下,在输出内容的第一行会有load average这项指标值,如下所原创 2013-06-28 20:13:53 · 6600 阅读 · 0 评论 -
【读书笔记】linux系统用semaphore来解决经典的生产者-消费者问题
在Linux系统下处理多进程或多线程的并发编程时,进程/线程同步是经常要遇到的问题。而在众多同步问题的场景中,生产者-消费者问题(Producer-Consumer Problem)是一个几乎每部涉及到同步问题的经典教材都会提到的经典模型。在linux系统中,实现同步的典型思路是借助内核提供的3种变量,分别是:1) 互斥量(mutex); 2) 信号量(semaphore); 3) 条件变量(原创 2013-07-14 17:28:06 · 2566 阅读 · 0 评论 -
linux iostat命令输出简要说明
iostat是Linux系统内置工具,用于查看机器的CPU时间片分配情况统计或硬盘IO统计。由于强大的top命令的存在(输出更详细的CPU/Memory统计数据),因此,在绝大多数场合下,iostat用来查看硬盘设备的IO状态,在分析机器IO压力或瓶颈时尤其有用。 本笔记主要参考了man iostat英文解释,旨在说明iostat的典型用法及其输出数据的含义。1. iostat原创 2013-06-29 18:20:57 · 2948 阅读 · 0 评论 -
【读书笔记】并发编程需要注意的几个典型问题
本文为《Computer Systems: A Programmer's Perspective》第12.7节—并发编程问题的读书笔记。下面开始正文。1. 线程安全 若一个线程安全(thread-safety)的函数应满足条件:当且仅当被多个并发线程反复调用时,它会一直产生正确的结果。相对地,若一个不是线程安全的函数被称为线程不安全(thread-unsafety)函数。原创 2013-07-21 17:05:30 · 1536 阅读 · 0 评论 -
【Linux学习笔记】用nc实现两台主机间的文件传输(不需要输密码)
通常,可以用scp完成两台主机间的文件传输任务,但在主机间未建立信任关系的情况下,scp每次都需要输入密码,用起来感觉不是很方便,之前这篇笔记介绍过不用输入密码执行脚本或传输文件的方法,但对于一些临时性的任务,准备工作还是比较麻烦。 本笔记介绍一种简单的不用密码即可实现两台主机间的文件传输的技巧—借助Linux的nc工具,方便之处:1) Linux系统通常默认安装nc工具,不需额原创 2013-07-31 15:41:34 · 10781 阅读 · 1 评论 -
mysql报错"ERROR 1206 (HY000): The total number of locks exceeds the lock table size"的解决方法
1. 问题背景 InnoDB是新版MySQL(v5.5及以后)默认的存储引擎,之前版本的默认引擎为MyISAM,因此,低于5.5版本的mysql配置文件.my.cnf中,关于InnoDB的配置默认是被注释起来的。在实际使用时,发现不少人只是把mysql的配置文件拷贝到需要的路径下后,就启动mysqld,而建表时偏偏又指定engine=innodb。正常情况下,即使不显式配置inn原创 2013-07-27 19:58:27 · 12834 阅读 · 0 评论 -
自动化部署工具Fabric简介
在持续集成/灰度发布越来越流行的今天,模块在预览或生产环境的部署流程自动化显得越来越重要。本文要介绍的Fabric就是一个帮助我们在上线时减少重复/繁琐操作的自动化部署利器,对于缺乏成熟运维平台的众多小公司的运维或开发人员来说,掌握这个工具是有必要的。1. Fabric是什么Fabric官方文档的描述如下: Fabric is a Python (2.5-2.7) library and comm原创 2015-12-27 19:00:15 · 5870 阅读 · 0 评论