Linux开发与配置
文章平均质量分 87
主要讲Linux开发和配置
一个程序员的修炼之路
顺势而为
展开
-
创建动态库时,建议使用的链接选项Bsymbolic
题外话:最近了解了一种轻量级标记语言,叫做Markdown.可以使用Markdown易读的文本格式,然后将其转换为HTML格式。虽然才知道,发现这个语法已经在无处不在了,著名的stack overflow发帖,以及一些wiki,或者一些博客都支持这种语法编辑了。OK,那么博主,这次也尝试下,本次博客采用的是MarkDownPad编辑器编写。问题描述回归正题,前段时间项目开发中,实现原创 2014-05-14 19:08:22 · 12412 阅读 · 0 评论 -
Red Hat 5 USB安装和配置
开场闲话,可略过。在本科的时候,接触了Ubuntu Linux,觉得这种非桌面主流产品的操作系统只有Geek才会去碰他,直到现在还对使用Linux并且在Linux下工作的同行保持高度仰慕。当时感觉在Linux下安装软件问题多多,GNome桌面没那么上手,甚至也没法顺畅的晚上喜爱的Warcraft,于是也逐步的对Linux丧失了热情,决心好好的钻研Windows。三分钟热度永远成不了大神,被Wind原创 2013-10-17 19:52:18 · 4247 阅读 · 0 评论 -
Redhat 6.3中syslog信息丢失
我们采用Linux的syslog来记录产品的debug log。调用其中的一个可执行文件,执行完命令之后,查看debug log的信息,居然从某一条log之后的log都丢失了。多次尝试后,发现每次都在某条固定的log之后的所有log都丢失了。这篇博文就让我们一起来探个究竟。一. 问题发现 在发现真正问题之前我做了以下尝试: (1) 进程是否在固定log之后某种逻辑退出?或者原创 2014-07-10 17:19:28 · 9594 阅读 · 0 评论 -
strace命令不可信任的一种情况
在Linux中在客户环境中诊断问题的一个非常有用的命令就是strace,可以利用其查看程序执行过程中的系统调用,调用库,每一个系统调用的时间,以及接收到的信号等等,在这里就不详细阐述strace的功能了。 最近刚好遇到一个棘手的问题,在一个客户的环境中,应用程序调用系统调用ioctl与产品的内核模块交互总是失败。然后通过strace查看进程的执行过程中的ioctl系统调用是否有异常。查原创 2014-09-03 19:42:14 · 1806 阅读 · 0 评论 -
从图看Linux问题分析的工具
Brendan是Joyent的首席性能分析工程师,在2013年初发了一个关于Linux性能分析和工具详解的书,或者称其为文档吧。无论在性能分析,还是在Linux中其他问题分析,也许都会用到下图所标识的工具。 比如网络分析时会用到tcpdump, traceroute, netstat等工具;I/O分析的时候会用到iostat,iotop等工具;内存分析的时候会用到free,vmstat等工具;进程原创 2015-09-14 14:35:33 · 760 阅读 · 0 评论 -
whereis+whatis+man
使用Linux过程中无论是使用shell命令、程序开发或者用户文档都需要使用到强大的男人man命令。使用方法也十分简单,以查看ls命令的使用方法为例:man lsman的搜索路径通常包括以下两个路径:/usr/local/man//usr/share/man/你可以通过whereis 命令来获取命令或者文档的位置,以搜索ls命令为例:[root@Cent原创 2013-11-14 19:04:18 · 1786 阅读 · 3 评论 -
Redhat6中获取LANG值为空
问题描述首先来描述一下我遇到的问题:如下图所示在我们产品中,服务脚本splx放置在目录/etc/init.d中,在用命令 "service splx start" 后,脚本中启动应用程序entity,entity进程中使用命令 "locale" 来获取当前所使用的语言。但是获取的LANG的值为空......问题追踪首先,在安装了产品的Redhat5上查看是否存在同样的问题(检查原创 2013-11-25 21:27:42 · 2676 阅读 · 0 评论 -
Windows文件换行符转Linux换行符
前段时间,有个朋友碰到由于Windows的换行符和Linux换行符不一样,导致程序编译不通过。这个问题之前自己也碰到过,网上资料也蛮多,不过还是借此总结总结,因为发现总结+实践的方式能够让自己更好的提升。操作系统文件换行符 首先介绍下,在ASCII中存在这样两个字符CR(编码为13)和 LF(编码为10),在编程中我们一般称其分别为'\r'和'\n'。他们被用来作为换行标原创 2015-08-21 18:06:16 · 27245 阅读 · 2 评论 -
GDB读取动态库中定义的全局变量错误
最近看了一篇getopt使用的文章,为了追踪其执行的逻辑,于是采用GDB挂载调试的方式进行查看。但却出现了GDB打印全局变量optind的时候出现错误。问题发现和描述 首先optind是使用getopt时候的全局变量,表示使用getopt时候的下一个argv的指针索引。在应用程序调试的时候设置了多个参数,但是随着多次调用getopt,全局变量optind通过gdb打印出来的值却总原创 2015-09-04 13:23:03 · 2447 阅读 · 0 评论 -
Linux Kernel模块内存泄露的一种查找思路
一.问题描述 最近有个客户报了一个问题:如果运行我们的产品,则每天将会增长大概30M的内存,大概4个多月内存就会耗尽。和大多数程序员的反应一样,“不会吧,在其他客户机器上都跑的好好的啊,从来都没有遇到过这样的问题”。最后的结果,也往往告诉程序员一个铁的事实:你的程序确实出问题了! 如果你某天发现通过“Free”查看内存几乎耗尽,但通过top/ps命令却看不出来用户态应用程序占用原创 2014-02-14 14:12:11 · 17344 阅读 · 3 评论 -
Linux中删除文件,磁盘空间未释放问题追踪
在客户使用我们产品后,发现一个问题:在删除了文件后,磁盘空间却没有释放。是有进程在打开这个文件,还是其他情况?我们一起来看看一下两个场景一. 场景一:进程打开此文件 当一个文件正在被一个进程使用时,用户删除此文件,文件只会从目录结构中删除,但并没有从磁盘删除。当使用这个文件的进程结束后,文件才会真正的从磁盘删除,释放占有的空间。 我们发现剩余磁盘空间比较少时,回去删原创 2014-07-09 14:09:33 · 26395 阅读 · 3 评论 -
Linux Kernel 模块内存泄露查找 (2)
在之前的一篇博文<<Linux Kernel模块内存泄露的一种查找思路>>中,我介绍了一种查找内核内存泄露的一种方法。这不才几个月,又有客户埋怨:使用了产品5天左右后,Suse服务器由于内存耗尽而Crash。O My God,不会吧,在我机器上跑的好好的哇(程序员常用名言 嘿嘿)。 那么就让我们一起来看看,苦逼的博主是如何确定问题并且找到问题的....原创 2014-06-19 10:42:53 · 10039 阅读 · 1 评论 -
文件atime未变问题的研究
在Linux上运行的,很少的应用程序需要获取精确的atime时间,并且Linux核心开发人员从Ext3/Ext4文件系统的性能角度出发,决定在2.6.30版本的内核中修改atime的更新方式,只有在以下三种情况之一才会更新atime:(1) 如果将分区mount的挂载的时候指定采用非relatime方式(默认采用relatime方式),如strictatime.补充:在OS启动的时候,将各个分区挂载到不同的目录,在挂载(mount)的参数中采用strictatime,表明及时更新atime。在2.原创 2013-09-24 20:42:55 · 3642 阅读 · 2 评论 -
链接选项rpath,容易被忽略的一个功能
问题来源最近在做一个项目的客户端的SDK,实现为一个动态链接库,其依赖于其他的若干个动态库文件。那么在利用SDK开发应用程序的时候,编译的时候除了链接SDK库本身,还得链接SDK库所依赖的库,这样编译命令里面得一一的添加这些库。比如,SDK库的名称为liba.so, 其依赖于libb.so和libc.so,那么在编译应用程序的时候使用以下命令:+++++++++++++++++++++原创 2014-05-07 18:28:19 · 19773 阅读 · 1 评论 -
SSH应用
SSH(Secure Shell)可以通过RSA公钥加密算法,进行安全的远程登陆和远程操作。使用SSH,登陆的账号/密码以及命令都是经过加密的传输的,从而保证在传输过程中不会被hacker或者eavesdropper窃取信息。1. SSH 登陆原理理解SSH的加密原理要对公钥和私钥有一定的了解,在SSH信息传递过程中公钥为加密秘钥,私钥为解密秘钥。例子:Client用SSH登陆原创 2013-06-10 12:45:21 · 2590 阅读 · 0 评论