
Linux
文章平均质量分 85
anzhsoft
程序猿一枚毕业于南开工作于上海。喜欢读书,喜欢跑步,激情似火,心静如水。喜欢编程,喜欢寻根问底各种技术,在各种新技术中汲取营养。喜欢分享,因此以一些高质量的博文来回报各位可爱可敬的程序猿们
展开
-
sed-加速你在Linux的文件编辑
1. Sed简介sed是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。以下原创 2014-01-03 10:01:49 · 12685 阅读 · 3 评论 -
Shell在大数据时代的魅力:从一道百度大数据面试题想到的点滴
对于在Linux下开发的同学来说,Shell可以说是一种基本功。对于运维的同学来说,Shell可以说是一种必备的技能,而且应该要非常熟练的书写Shell。对于Release Team,软件配置管理的同学来说,Shell也起到了非常重要的作用。尤其是分布式系统发展的如火如荼,很多开源项目都开展的如火如荼(好像不是分布式的系统都不好意思拿出来说事)。分布式系统的配置,管理,Shell也起到了非常重要的作用,虽然只是简单的文件拷贝,但是谁让Shell天生是做这些的呢?当然了,以上不是本文的主题。本文的主题是原创 2014-07-17 00:59:38 · 19504 阅读 · 2 评论 -
存储那些事儿(二): 下一代Linux文件系统BTRFS简介
BTRFS,通常念成 Butter FS,Better FS 或B-tree FS。下一代的Linux文件系统。 它基于写时拷贝(copy-on-write),支持高效的snapshot和clone。它使用b-tree作为存储的数据结构。在BTRFS项目主页上对自己是这么描述的:"一个新的针对Linux的写时复制文件系统,致力于实施高级的功能,同时关注容错、修复和管理方便性。" 它有哪些高级功能呢?下面的feature来自BTRFS的项目主页:http://btrfs.wiki.kerne原创 2014-03-03 14:26:32 · 10628 阅读 · 1 评论 -
并发编程(一): POSIX 使用互斥量和条件变量实现生产者/消费者问题
boost的mutex,condition_variable非常好用。但是在Linux上,boost实际上做的是对pthread_mutex_t和pthread_cond_t的一系列的封装。因此通过对原生态的POSIX 的mutex,cond的生成者,消费者的实现,我们可以再次体会boost带给我们的便利。原创 2014-02-10 19:57:05 · 15260 阅读 · 4 评论 -
Linux Debugging(七): 使用反汇编理解动态库函数调用方式GOT/PLT
本文主要讲解动态库函数的地址是如何在运行时被定位的。首先介绍一下PIC和Relocatable的动态库的区别。然后讲解一下GOT和PLT的理论知识。GOT是Global Offset Table,是保存库函数地址的区域。程序运行时,库函数的地址会设置到GOT中。由于动态库的函数是在使用时才被加载,因此刚开始GOT表是空的。地址的设置就涉及到了PLT,Procedure Linkage Table,它包含了一些代码以调用库函数,它可以被理解成一系列的小函数,这些小函数的数量其实就是库函数的被使用到的函数的数量原创 2014-03-06 18:46:50 · 16954 阅读 · 2 评论 -
Linux Debugging(六): 动态库注入、ltrace、strace、Valgrind
实际上,Linux的调试方法非常多,针对不同的问题,不同的场景,不同的应用,都有不同的方法。很难去概括。本篇文章主要涉及本专栏还没有涵盖,但是的确有很重要的方法。本文主要包括动态库注入调试;使用ltrace命令处理动态库的调试;使用strace调试系统调用的问题;Valgrind的简要介绍。原创 2014-03-06 11:20:23 · 13678 阅读 · 2 评论 -
Linux Debugging(五): coredump 分析入门
作为工作几年的老程序猿,肯定会遇到coredump,log severity设置的比较高,导致可用的log无法分析问题所在。 更悲剧的是,这个问题不好复现!所以现在你手头唯一的线索就是这个程序的尸体:coredump。你不得不通过它,来寻找问题根源。本文通过一个常见的coredump,逐步讲解如何发现导致coredump的原因原创 2014-01-27 17:33:00 · 31080 阅读 · 0 评论 -
Linux Debugging(四): 使用GDB来理解C++ 对象的内存布局(多重继承,虚继承)
关于C++虚函数,很多博文从各个角度来探究虚函数是如何实现的,或者说编译器是如何实现虚函数的。本文通过GDB来从另外一个角度来理解C++ object的内存布局,一来熟悉语言背后编译器为了实现语言特性为我们做了什么;二来熟悉使用GDB来调试程序。 同时,本文也将对如何更好的理解C++语言提供了一个方法:使用GDB,可以很直观的理解编译器的实现,从根本上掌握C++!我们不单单只会开车,还应该知道车的内部的构造。原创 2014-01-27 13:53:27 · 25820 阅读 · 1 评论 -
Linux Debugging(三): C++函数调用的参数传递方法总结(通过gdb+反汇编)
上一篇文章《Linux Debugging:使用反汇编理解C++程序函数调用栈》没想到能得到那么多人的喜爱,因为那篇文章是以32位的C++普通函数(非类成员函数)为例子写的,因此只是一个特殊的例子。本文将函数调用时的参数传递方法进行一下总结。总结将为C++普通函数、类成员函数;32位和64位进行总结。 本文对分析栈溢出导致的coredump十分有益。原创 2014-01-25 16:46:38 · 20593 阅读 · 5 评论 -
Linux Debugging(二): 熟悉AT&T汇编语言
没想到《Linux Debugging:使用反汇编理解C++程序函数调用栈》发表了收到了大家的欢迎。但是有网友留言说不熟悉汇编,因此本书列了汇编的基础语法。这些对于我们平时的调试应该是够用了。 本科时候大家学的基本上都是Intel的8086汇编语言,微软采用的就是这种格式的汇编。GCC采用的是AT&T的汇编格式, 也叫GAS格式(Gnu ASembler GNU汇编器)。1、寄存器命名不同AT&TIntel说明%eaxeaxIntel的不带百分号2、操作数顺序不同原创 2014-01-24 23:30:29 · 21484 阅读 · 4 评论 -
Linux Debugging(一): 使用反汇编理解C++程序函数调用栈
拿到CoreDump后,如果看到的地址都是????,那么基本上可以确定,程序的栈被破坏掉了。GDB也是使用函数的调用栈去还原“事故现场”的。因此理解函数调用栈,是使用GDB进行现场调试或者事后调试的基础,如果不理解调用栈,基本上也从GDB得不到什么有用的信息。本文还可以帮助你深入理解C++函数的局部变量。我们学习时知道局部变量是是存储到栈里的,内存管理对程序员是透明的。通过本文,你将明白这些结论是如何得出的。原创 2014-01-24 17:23:50 · 32584 阅读 · 8 评论 -
工作中常用的Linux命令
1.从其他机器拷贝文件夹格式: scp -r 文件夹名 用户名@机器名:/路径范例: scp -rsearch work@zjm-testing-ps23.zjm.baidu.com:/home/work/2.查看哪个程序在用特定端口格式: netstat-nap | grep 端口号范例: netstat -nap| grep 80803.实时监控日志文件内容格式:原创 2014-01-03 09:54:58 · 12574 阅读 · 4 评论 -
Linux C 下的大文件操作
这里说的大文件指大小超过2G的文件。小于2G的文件,用基础篇和高级篇中的函数都可以打开、读写。大文件的打开:在32位环境下,linux默认打开、读、写超过2G的文件会返回错误。定义如下宏可以突破这个限制,对read/write和fread/fwrite同时有效。注意它必须定义在所有头文件之前。#ifndef _FILE_OFFSET_BITS#define _FIL原创 2014-01-13 16:23:44 · 12722 阅读 · 1 评论 -
Linux 共享内存 详解
一、什么是共享内存区共享内存区是最快的可用IPC形式。它允许多个不相关的进程去访问同一部分逻辑内存。如果需要在两个运行中的进程之间传输数据,共享内存将是一种效率极高的解决方案。一旦这样的内存区映射到共享它的进程的地址空间,这些进程间数据的传输就不再涉及内核。这样就可以减少系统调用时间,提高程序效率。共享内存是由IPC为一个进程创建的一个特殊的地址范围,它将出现在进程的地址空间中。其他进程可原创 2014-01-13 14:27:48 · 12594 阅读 · 0 评论 -
awk 详解+实例
1. awk简介awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk的处理文本和数据的方式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想原创 2014-01-03 10:06:52 · 13954 阅读 · 4 评论 -
Linux Debugging (九) 一次生产环境下的“内存泄露”
如何解决一个valgrind和gpreftools都检查不出的”内存泄露“?原创 2014-11-17 20:45:47 · 11571 阅读 · 0 评论