月度归档:2014年05月

linux下删除乱码文件

根据inode 来修改或删除linux 下乱码的文件

1. 创建测试文件:
    touch 1?.txt

2. 查询inode :
[oracle@test]$ ll -i
total 14694452
17956913 -rw-r–r– 1 oracle oinstall          0 Jan 18 20:24 1?.txt

3. 修改测试文件名:
find . -inum 17956913 -exec mv {} file.txt \;

4. 检查修改结果
[oracle@test]$ ll
total 14694452
….
-rw-r–r– 1 oracle oinstall          0 Jan 18 20:24 file.txt

记录:删除乱码的文件可使用 find . -inum 17956913 -exec rm {} \;

16M闪存版小度路由刷如意云、华硕、极路由固件教程

首先强调一下,玩这几个固件互刷需要把路由器升级为16M闪存,没有能力或者不愿拆机的朋友就不要看了。

本帖介绍了基于小度路由换Uboot和各种固件互刷的方法,提到一个抛砖引玉的作用,希望基础较为薄弱的网友从中体会到其他路由的相应做法,举一反三。

我自己的小度路由已经升级为双16M闪存,256M内存,双外置天线,引出TTL口至外壳。硬改方法及效果不在这里讨论。

固件互刷教程,包括:

1、百度路由更换UBOOT

2、百度固件刷极路由1S编程器固件

3、极路由固件回刷百度固件

4、刷如意云固件和华硕RT-N14固件

请注意:

小度路由刷如意云和华硕RT-N14时,必须用极路由1S的UBOOT

下面是教程连接,请自行下载

http://pan.baidu.com/s/1eQ7mRy6



关于闪存分区:

每家固件对闪存的分区定义是不同的,导致eeprom和固件的存放地址不一致,具体地址安排在教程内有说明。因为分区定义不同,所以Uboot也必须不一样,否则会出现无法启动或者不能正确获取eeprom等问题。

闪存分区定义主要有两种:百度路由自成一家,如意云、华硕和极路由是另外一家(定义和7620N的基本一致)。



关于Uboot:

1、uboot主要用来预处理、引导固件和刷机等操作。

2、
小度路由和极路由1S是7620A方案,如意云一代、华硕RT-N14是7620N方案,UBOOT不能互换。互刷uboot之后可能会变砖!

3、
目前7621A方案的UBOOT有两个

lintel的Uboot主要用于百度路由固件和相应的潘多拉固件,分为64M/128M/256M三种内存版本,每种版本又分57600和115200两个波特率。
但是刷如意云、华硕和极路由就不行,不能正确获取eeprom(主要是因为闪存分区定义不一样,这个在教程里有解释)

极路由1S的UBOOT只能识别128M内存,更换256M内存后也只能识别到128M,64M内存的没有尝试是否可以刷(64M内存用户请慎重)。1S的UBOOT可以刷如意云、华硕固件,具体方法参见教程。


,也许极二的Uboot也可以(应该更好,因为支持256M内存),但是暂时还没发现有人放出改Uboot或者编程器固件。估计再等一段时间就会有相关Uboot放出。请各位有兴趣的朋友仔细看教程,用心体会理解,看完教程后有疑问或者建议的,可以回帖提问;如果不仔细看教程,就不要随便问了。

修改openwrt的配置界面luci的方法

也许你想修改一下openwrt那个路由配置的丑陋界面,也许你想事项自己软件的一些功能。但是却没有办法去修改luci。在路由器上直接修改那就算了,我想说的是如何修改该luci的源代码,这样子你编译好的bin镜像文件直接刷入路由器中就ok了。

你先得了解一下luci,包括它的模块怎么写的,用的是lua语言等:
LuCI实现启动应用程序等脚本命令
然后你想知道怎么将luci编译进固件中去:

输入./scripts/feeds/ install luci

这样子你会发现feeds文件夹下面有luci了,但是里面除了文件夹一无所有,但是回到menuconfig中去回发现有luci了,还可以选择ddns等模块,还可以选择中文语言了,可以编译到固件中去了。那么我们就编译一下试试吧。

在dl文件夹中,我们看到了luci-0.10+svn7976.tar.gz

这证明源码其实是在这里的
我们又进入build_dir/target-mips_uClibc-0.9.30.1这个文件夹下面发现了解压的上述文件了,好了,其实这个就是编译的文件夹啦。看看里面有什么?theme啊什么的,找个theme里面的header.htm改改编译后看看,发现在新的固件中已经出现了改动了。

好我再模仿application文件夹下面的一些程序 如luci-ddns写了一个luci-smustar的配置程序界面放到这个文件夹下面,回头到menuconfig中发现没有啊,怎么办?别急 回到feeds/luci/luci中找到makefile加入
$(eval $(call application,smustar,smustar for 802.1x,\
+PACKAGE_luci-app-smustar:smustar-scipts))
^_^,再回到menuconfig中就看到了,果断的选了,然后就编译到固件中去了

乎,折腾了我几天的luci终于在bulder_dir下找到源码可以修改,不过最好别该这里要改就makefile和dl下的源码吧,省的有时候buldr_dir下面的源码会呗dl下的那个压缩文件解压过去,扔在里面的文件就会丢失,小心!

好了,差不多了,剩下的就靠各位自己探索吧。可以去luci官网看看它的api接口,自己就可以任意发挥了!

如何编写Makefile

简单的说,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至可以在makefile中执行shell脚本。makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

  关于程序的编译和链接

  一般来说,无论是C还是C++,首先要把源文件编译成中间代码文件,在Windows下也就是 .obj 文件,UNIX下是 .o 文件,即 Object File,这个动作叫做编译(compile),一般来说,每个源文件都应该对应于一个中间目标文件(O文件或是OBJ文件)。然后再把大量的Object File合成执行文件,这个动作叫作链接(link)。

  编译时,编译器需要的是语法的正确,函数与变量的声明的正确。对于后者,通常是你需要告诉编译器头文件的所在位置(头文件中应该只是声明,而定义应该放在C/C++文件中),只要所有的语法正确,编译器就可以编译出中间目标文件。

  链接时,主要是链接函数和全局变量,所以,我们可以使用这些中间目标文件(O文件或是OBJ文件)来 链接我们的应用程序。链接器并不管函数所在的源文件,只管函数的中间目标文件(Object File),在大多数时候,由于源文件太多,编译生成的中间目标文件太多,而在链接时需要明显地指出中间目标文件名,这对于编译很不方便,所以,我们要给 中间目标文件打个包,在Windows下这种包叫“库文件”(Library File),也就是 .lib 文件,在UNIX下,是Archive File,也就是 .a 文件。

  下面我们开始看看如何自己写出makefile。

  Makefile的规则

  目标 : 需要的条件 (注意冒号两边有空格)

    命令  (注意前面用tab键开头)

  解释一下:

  1 目标可以是一个或多个,可以是Object File,也可以是执行文件,甚至可以是一个标签。

  2 需要的条件就是生成目标所需要的文件或目标

  3 命令就是生成目标所需要执行的脚本

  总结一下,就是说一条makefile规则规定了编译的依赖关系,也就是目标文件依赖于条件,生成规则用命令来描述。在编译时,如果需要的条件的文件比目标更新的话,就会执行生成命令来更新目标。

  下面举个简单的例子说明。如果一个工程有3个头文件,和8个C文件,我们为了完成前面所述的那三个规则,我们的Makefile应该是下面的这个样子的。

  edit : main.o kbd.o command.o display.o /

           insert.o search.o files.o utils.o

            cc -o edit main.o kbd.o command.o display.o /

                       insert.o search.o files.o utils.o

    main.o : main.c defs.h

            cc -c main.c

    kbd.o : kbd.c defs.h command.h

            cc -c kbd.c

    command.o : command.c defs.h command.h

            cc -c command.c

    display.o : display.c defs.h buffer.h

            cc -c display.c

    insert.o : insert.c defs.h buffer.h

            cc -c insert.c

    search.o : search.c defs.h buffer.h

            cc -c search.c

    files.o : files.c defs.h buffer.h command.h

            cc -c files.c

    utils.o : utils.c defs.h

            cc -c utils.c

    clean :

            rm edit main.o kbd.o command.o display.o /

               insert.o search.o files.o utils.o

 

  将上面的内容写入到Makefile文件中,然后执行make就可以进行编译,执行make clean就可以删除所有目标文件。解释一下,也就是说生成最终的目标文件edit,依赖于一系列的.o目标文件,而这些.o文件又是需要用源文件来编译生成的。

  需要注意的是,clean后面没有条件,而clean本身也不是文件,它只不过是一个动作名字其冒号后什么也没有,那么,make就不会自动去找文件的依赖性,也就不会自动执行其后所定义的命令。

  make是如何工作的

  在默认的方式下,也就是我们只输入make命令。那么,

 

    1、make会在当前目录下找名字叫“Makefile”或“makefile”的文件。

    2、如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“edit”这个文件,并把这个文件作为最终的目标文件。

    3、如果edit文件不存在,或是edit所依赖的后面的 .o 文件的文件修改时间要比edit这个文件新,那么,他就会执行后面所定义的命令来生成edit这个文件。

    4、如果edit所依赖的.o文件也不存在,那么make会在当前文件中找目标为.o文件的依赖性,如果找到则再根据那一个规则生成.o文件。(这有点像一个堆栈的过程)

    5、当然,你的C文件和H文件是存在的啦,于是make会生成 .o 文件,然后再用 .o 文件生命make的终极任务,也就是执行文件edit了。

  makefile中使用变量

  前面的知识已经足以让你自己完成一个简单的makefile了,不过makefile的精妙之处远不止如此,下面来看看如何在makefile中使用变量吧。

  在上面的例子中,先让我们看看edit的规则:

 

      edit : main.o kbd.o command.o display.o /

                  insert.o search.o files.o utils.o

            cc -o edit main.o kbd.o command.o display.o /

                       insert.o search.o files.o utils.o

 

  我们可以看到[.o]文件的字符串被重复了两次,如果我们的工程需要加入一个新的[.o]文 件,那么我们需要在两个地方加(应该是三个地方,还有一个地方在clean中)。当然,我们的makefile并不复杂,所以在两个地方加也不累,但如果 makefile变得复杂,那么我们就有可能会忘掉一个需要加入的地方,而导致编译失败。所以,为了makefile的易维护,在makefile中我们 可以使用变量。makefile的变量也就是一个字符串,理解成C语言中的宏可能会更好。

  于是,我们使用变量objects

  objects = main.o kbd.o command.o display.o /

              insert.o search.o files.o utils.o

  这样一来,原来的makefile变成如下的样子:

  objects = main.o kbd.o command.o display.o /

              insert.o search.o files.o utils.o

    edit : $(objects)

            cc -o edit $(objects)

    main.o : main.c defs.h

            cc -c main.c

    kbd.o : kbd.c defs.h command.h

            cc -c kbd.c

    command.o : command.c defs.h command.h

            cc -c command.c

    display.o : display.c defs.h buffer.h

            cc -c display.c

    insert.o : insert.c defs.h buffer.h

            cc -c insert.c

    search.o : search.c defs.h buffer.h

            cc -c search.c

    files.o : files.c defs.h buffer.h command.h

            cc -c files.c

    utils.o : utils.c defs.h

            cc -c utils.c

    clean :

            rm edit $(objects)

  这样看起来方便多了吧,也更加省事了。如果有新的.o文件怎么办?当然是在objects里面添加了,这样只需要一处改变,很方便吧。

  让make自动推导

  GNU的make很强大,它可以自动推导文件以及文件依赖关系后面的命令,于是我们就没必要去在每一个[.o]文件后都写上类似的命令,因为,我们的make会自动识别,并自己推导命令。

  只要make看到一个[.o]文件,它就会自动的把[.c]文件加在依赖关系中,如果make找到一 个whatever.o,那么whatever.c,就会是whatever.o的依赖文件。并且 cc -c whatever.c 也会被推导出来,于是,我们的makefile再也不用写得这么复杂。我们的是新的makefile又出炉了。

  objects = main.o kbd.o command.o display.o /

              insert.o search.o files.o utils.o

    edit : $(objects)

            cc -o edit $(objects)

 

    main.o : defs.h

    kbd.o : defs.h command.h

    command.o : defs.h command.h

    display.o : defs.h buffer.h

    insert.o : defs.h buffer.h

    search.o : defs.h buffer.h

    files.o : defs.h buffer.h command.h

    utils.o : defs.h

  clean :

            rm edit $(objects)

  当然,如果你觉得那么多[.o]和[.h]的依赖有点不爽的话,好吧,没有问题,这个对于make来说很容易,谁叫它提供了自动推导命令和文件的功能呢?来看看最新风格的makefile吧。

  objects = main.o kbd.o command.o display.o /

              insert.o search.o files.o utils.o

    edit : $(objects)

            cc -o edit $(objects)

 

    $(objects) : defs.h

    kbd.o command.o files.o : command.h

    display.o insert.o search.o files.o : buffer.h

    clean :

            rm edit $(objects)

  不过话说回来,本人并不推荐这种方法。虽然简单,但是这种方法破坏了文件本身的依赖关系。如果文件过多的话,可能你自己都不清楚了

记录下安装authpuppy server中的一些问题

直接从官方的getting started起步做就行了

http://www.authpuppy.org/doc/Getting_Started

几个问题点。

添加官方提供的配置文件到/etc/apache2/httpd.conf,然后重启apache,报错。

root@ubuntu2:/var/www# service apache2 restart
 * Restarting web server apache2                                                                                                                                                 apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName
apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName
Action ‘start’ failed.
The Apache error log may have more information.
                                                                                                                                                                          [fail]
无法重新启动,其实原因不是域名问题,是authpuppy日志文件目录不存在,手工添加目录及文件即可成功重新启动。

       ErrorLog /var/log/apache2/authpuppy/error.log
  
       # Possible values include: debug, info, notice, warn, error, crit,
       # alert, emerg.
       LogLevel warn
  
       CustomLog /var/log/apache2/authpuppy/access.log combined

root@ubuntu2:/var/www# service apache2 restart
 * Restarting web server apache2                                                                                                                                                 apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName
apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName
                                                                                                                                                                          [ OK ]

其他就没了 直接next去安装就好。

ubuntu安装Symfony环境

先安装ubuntu-12.04.3-server-i386,然后在最后选择安装程序包的时候 选择安装web server,安装好lamp环境。

然后运行”check_configuration.php”看一看  发现有xsl  apc 没安装

另外short_open_tag set to off,需要在php配置文件中设置。
先搞定xsl,apt-get install php5-xsl搞定。
然后再运行下检测程序,发现还有两个错误 一个个解决它





********************************
*                              *
*  symfony requirements check  *
*                              *
********************************

php.ini used by PHP: /etc/php5/apache2/php.ini


** Mandatory requirements **

  OK        PHP version is at least 5.2.4 (5.3.10-1ubuntu3.11)

** Optional checks **

  OK        PDO is installed
  OK        PDO has some drivers installed: mysql
  OK        PHP-XML module is installed
  OK        XSL module is installed
  OK        The token_get_all() function is available
  OK        The mb_strlen() function is available
  OK        The iconv() function is available
  OK        The utf8_decode() is available
  OK        The posix_isatty() is available
[[WARNING]] A PHP accelerator is installed: FAILED
            *** Install a PHP accelerator like APC (highly recommended) ***
[[WARNING]] php.ini has short_open_tag set to off: FAILED
            *** Set it to off in php.ini ***
  OK        php.ini has magic_quotes_gpc set to off
  OK        php.ini has register_globals set to off
  OK        php.ini has session.auto_start set to off
  OK        PHP version is not 5.2.9

下载APC的源码包,丢到/mnt下,进去按着INSTALL一做 发现phpsize没有。

apt-get install php5-dev  安装完毕 搞定phpsize
然后 ./configure --with-php-config=/usr/bin/php-config
再make。
发现没有安装make,只能先
apt-get install make
然后make。
报错。
错误是啥记不清了 大概就是/usr/include/php5/ext/pcre这个目录下面php_pcre.h文件里面的29行中
#include "pcrelib/pcre.h"
#else
#include "pcre.h"
但是这个目录里面没有这货!
擦 真是坑爹啊 因为我的lamp是直接用的二进制安装的,没有源码,所以pcre.h这货自然也不存在。
怒了,找到php5.3.17的源码,解压,找的ext里面的pcre,一股脑全部复制到/usr/include/php5/ext/下面,再运行make,
还是报错,貌似这回是else语句的pcre.h没有。
恼火,去pcrelib把pcre.h复制到pcre根目录下面,再make,终于解决问题。

然后去/etc/php5/apache2/php.ini在末尾追加以下配置

  extension=apc.so
  apc.enabled=1
  apc.shm_size=128
  apc.ttl=7200
  apc.user_ttl=7200
  apc.enable_cli=1
然后保存。重启apache,搞定
下一个问题,
[[WARNING]] php.ini has short_open_tag set to off: FAILED
去/etc/php5/apache2/php.ini查找
short_open_tag on  改成off  保存重启apache即可


phpStudy for Linux (lnmp+lamp一键安装包)

hpStudy for Linux 支持Apache/Nginx/Tengine/Lighttpd,

支持php5.2/5.3/5.4/5.5切换
 

已经在centos-6.5,debian-7.4.,ubuntu-13.10测试成功。

下载版:http://lamp.phpstudy.net/phpstudy.bin

完整版:http://lamp.phpstudy.net/phpstudy-all.bin

安装:

wget -c http://lamp.phpstudy.net/phpstudy.bin 

chmod +x phpstudy.bin    #权限设置

./phpstudy.bin     #运行安装



用时十到几十分钟不等,安装时间取决于电脑的下载速度和配置。

也可以事先下载好完整,安装时无需下载。

安装完成

 

如何切换php版:

假如你先安装的apache+php5.3

想切换成nginx+php5.4

你就再走一次./phpstudy.bin

但是你会发现有一行是否安装mysql提示选不安装

这样只需要编译nginx+php5.4

从而节省时间,这样只需要几分钟即可。

使用说明:

服务进程管理:phpstudy (start|stop|restart|uninstall)

站点主机管理:phpstudy (add|del|list)

ftpd用户管理:phpstudy ftp (add|del|list)

【转·岁月杀猪刀系列】生活,就是你逐渐活明白了

下礼拜就38周岁了,感觉很恍惚。



年轻时追求艺术,成为诗人,以为自己是真理别人是狗屎,到了这个年纪才明白,其实一直看不起的脚踏实地追求物质才是生活真理,别的都是虚的。



现在快40了,文凭也没有,交通工具只有脚踏车,房价涨的扑出来这辈子不可能买得起了,还和父母住一起,工资么十来年涨的还没物价一个月猛,十年前还能吃吃喝喝买点儿数码玩具。



现在基本只够吃饭。



年纪大了,朋友同学都结婚,连个说话的都没有,有时候聚会都开车出去周边,我没车老蹭别人也不好意思,而且花销也大吃不消,有时候大家组织去外地旅游,太花钱,真是感觉大家有差别了。



年轻时从来没想过。



年轻时觉的自己最牛逼,别人都是傻逼,别人俗,只知道追求物质一身烟火气,现在才明白,40岁一事无成才是真傻逼,好歹人家收获生活,你只剩下傻逼,内分泌没了,脑子慢了,精神集中超过十分钟就当场崩溃,仔细想想,都被年轻时荷尔蒙骗了,过去当做支柱的诗歌电影音乐,现在看看也不过如此。



生活,就是你逐渐活明白了,现在发现自己还是爱看各种综艺,爱看偷拍走光,爱打听别人隐私,周围谁吃瘪了心里能偷偷乐好久,虚胖,皮松了,腰围呼呼涨,又懒得锻炼,嘴馋,想吃好的没钱,只能吃油大的解馋。



相亲多少次小姑娘一看这么个经济情况扭头就走了,我是想明白了。



当今社会没钱就是不行。



过去生煎一客一块八,大排面两块五,苏大后门喝散啤酒一块钱一斤,现在吃个面吓的要死,真是这样的。



你曾经以为世界是你的,你能,最后发现还是物质第一,你没放没车工资低,年纪大各方面一泡污,你完了。



搞艺术的唯一收获就是秃顶。



“自杀?”



不可能,胆小的要死,以前以为自己无所畏惧,其实是青春无所畏惧,内分泌水平一下来,自己是个什么,真面目马上就露出来了,自己都觉得恶心,几次体检都没敢抽血。



仔细想想,自己可能这辈子就这样了,人一过了30再怎么想努力,首先精神上就泄了。



根本不可能。没权没势没背景,怎么赚钱?我是想不出了。



夏天拿出积蓄和朋友合开一家奶茶档,基本没人喝,旁边酸辣粉人爆满,想不通了,你们他妈的吃完不渴吗?成天工商税务消防街道一波一波的骚扰,上个月人家学校盖楼扯皮,直接把我们门面前面拿墙砌起来了,喷了,刚好彻底关门,赔了50000多。



去广西出差看见人家有一条街都是卖奶茶的,火爆的要死,想不通,回来这吊比地方没人买,都是土鳖,原料都是淘宝买的高质量,冲出来我自己都觉得好味。



现在脑子很乱,躺下就胡思乱想,各种事儿呼呼涌过来,跟放碟一样,一想起年轻时多么风光多么无所畏惧,就觉得活着真没意思,现在只能上网路,装大师,上论坛上微博吐槽,获得一些好感觉。



其实也知道都是假的。



和你瞎起哄的都是年轻人,人家玩的起,而你只是个没钱的老比养,和你一般大的早享受生活去了就你还在网路蛋逼。



有时候都不敢多想,到底下半辈子怎么活,以前觉得结婚都是傻逼,现在自己傻逼了,看着朋友们小儿子小姑娘十来岁生龙活虎的惹人疼,真心觉得自己傻逼透了!40岁只能一个人躺在地上扣墙皮,老爹老妈也知道我心情不好,也没办法,他们也帮不了我,都是普通人,年轻时骂我我听不进去,现在自己明白了也迟了,说也没用。



刚才吃饭时老妈说下礼拜你生日了,给你5000块钱去买个你喜欢的刚度小相机,知道我心里难受。



我真的快哭了。



老爹老妈现在还看到二姨淘汰下来的32寸东芝crt,说液晶看不惯,人是扁的,这个电视还有低音炮声音好,日本的质量好,我知道是不想花钱,我没出息,一家人吃瘪,人家儿子姑娘怎么风光,原来说说现在也不说了。



生活,像一个刚扣出来的铅块,黑沉黑沉的。