linux命令技巧备忘之grep

配合行附近的n行

grep -C 5 foo file  显示匹配foo字串那行以及前后5行
grep -B 5 foo file  显示匹配foo行及前5行
grep -A 5 foo file  显示匹配foo行及后5行

 

 

安装python模块时出现smor _attribute__before token等错误的解决方法

如果在安装某个python模块时

出现以下几个错误:

error: expected specifier-qualifier-list before XXX_HEAD

error: expected    smor _attribute__before token

error: expected before token

多半是少了

python-devel

 

安装python-devel后再重新安装模块,即可解决问题。

CentOS: yum install python-devel

ubuntu: apt-get install python-dev

 

Eclipse中比较常用的插件安装地址

Pydev
http://sourceforge.net/projects/pydev/

 

SVN
http://subclipse.tigris.org/update_1.10.x
如果想下别的版本的,可以把1.10.x改成1.8.x  1.6.x等等

 

PDT3.0
http://download.eclipse.org/tools/pdt/updates/3.0/releases/

 

FatJ
http://kurucz-grafika.de/fatjar

 

SWT
http://dl.google.com/eclipse/inst/d2wbpro/latest/3.6

关于libc中的system()函数的返回值

先看一个简单的程序:

#include <stdio.h>
#include <string.h>

int main(int argc, const char **argv) {
  int ret=0;
  ret=system("abc");
  //printf("%d",ret);
  return ret;
}

abc是一个不存在命令

按我一直以来的理解,system()的返回值即为所执行命令的返回值

打印了来的ret值为32512

可是执行完这个c程序后,执行echo $?你会发现始终是0

明明printf出来是32512为什么,echo $?出来是0

百思不得其解,请教了冷波才最终解决

libc的man中有这么一段

Otherwise, the return value is the exit status of the child process in its lower 8 bits; bits 8-17 of the return value will hold SIGINT or SIGABRT if the child process was aborted by Ctrl-C or Critical Device Error, respectively; otherwise they will be zero(4). If the child couldn’t be run, system will return -1 and set errno to an appropriate value. Note that if `COMMAND.COM’ was used to run the child, it will always return a 0 status, even if the command didn’t run successfully. However, system only calls `COMMAND.COM’ when it needs to run commands internal to it.

原来system函数返回,取高八位作为子进程的status

32512=0x7f00

而bash取的是返回值最大为8位,所以对于对于直接取自system的返回,echo $?其低8位永远是0

正确的程序是:

#include <stdio.h>
#include <string.h>

int main(int argc, const char **argv) {
  int ret=0;
  ret=system("abc");
  return ret>>8;
}

使用root运行php-fpm

今天php发生了一些问题,执行linux外部命令时总是没有返回,经过长时间的跟踪发现是权限问题

php-fpm默认是以apache来运行的

要使php-fpm以root运行需要两步

1,将php-fpm.conf或php-fpm.d/xxx.conf中的user=apache 为user=root

这时如果你直接运行php-fpm会报无法在root下运行错

2,启动php-fpm时加一个-R的参数

php-fpm -R