Akawa

ETY001的博客

昨天用shell脚本实现了(akawa.ink/2012/03/08/use-mv-replace-rm-without-params.html),把rm替换为mv,今天我又尝试了下写个简单的C程序来实现,也顺便练习下vim写代码,gcc编译。直接贴代码,不废话~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <string.h>
#define LANG 1000
char *file_path = "/home/ety001/.trash/";
int main(int argc, char* argv[])
{
int i;
char str[LANG] = "mv ";
for(i=1;i<argc;i++)
{
if(argv[i][0]!='-')
{
strcat(str,argv[i]);
strcat(str," ");
}
}
strcat(str,file_path);
system(str);
return 0;
}

另外需要注意的是strcat这个函数,之前,第八行一直写的是char* str = “mv “; 然后运行总是报错(段错误),原因就是因为这句如果写成这样,就已经把str指向的空间长度指定的了,这样strcat函数再向这个字符串后面加字符串的时候肯定就会溢出了。详细的说明看这里:http://topic.csdn.net/t/20030525/20/1832507.html,所以说写这种跟指针打交道的代码还是要小心呀。

由于单位的服务器是多人使用的,每次都会有人误删除文件,所以说就想到写个shell脚本用mv命令替换rm,但是随之问题就是,写出来的rm命名的shell脚本在使用的时候,大家还是按照原来的习惯,在删除文件夹的时候,使用rm -rf 这样的形式,而mv是没有-rf参数的,所以就会导致报错,为了解决这个问题,又完善了下shell脚本代码。

1
2
3
4
5
6
7
8
9
#! /bin/bash
dst = "/home/ety001/test_trash/"
for src_file in $@;
do
if echo $src_file | grep -v '^-'
then
mv $src_file $dst
fi
done

转自:http://hi.baidu.com/afantihome/blog/item/2a8abe1b319112fdaf513391.html

刚学习linux的时候,对文件重命名首先想到的就是rename命令,但是按照在windows下对文件重命名的方式试了N多次都没有反应,在网上一搜索,发现很多人都对rename命令知之甚少,甚至有一部分人说linux下没有rename命令,建议大家用mv命令。鉴于此,于是man rename一下,好好的研究了一下它的用法 ,在此对rename命令和mv命令在重命名文件方面做一个比较,有不足之处,希望各位博友指正!

首先来说一下mv命令,在man mv中我们可以看到对于mv命令的介绍是这样的:

mv -move(rename) files

可以看到mv命令确实有重命名的功能,但是实际应用中,它只能对单个文件重命名,命令如下:

mv [path/]oldfilename [path/]newfilename

“mv命令只能对单个文件重命名”,这实就是mv命令和rename命令的在重命名方面的根本区别。

再来说rename命令,在man rename的说明如下:

NAME

rename -Rename files

SYNOPSIS

rename from to file….

DESCRIPTION

rename will rename the specified files by replacing the first occurrence of from in their name by to.

For example, given the files foo1, …, foo9, foo10, …, foo278, the commands

rename foo foo0 foo?

rename foo foo0 foo??

will turn them into foo001, …, foo009, foo010, …, foo278.

And

rename .htm .html *.htm

will fix the extension of your html files.

可以看出rename命令是专用于文件重命名的,而且根据其后的例子可以看出,rename除了给单个文件重命名,还可以批量文件重命名。同时,值得注意一点的是,rename命令是带3个参数而不是很多人认为的2个参数。

上面的例子中给出了两种文件批量重命名的用法,而实际上,rename结合通配符使用,它的功能比上面的例子所显示的更强大。基本的通配符有以下几个:

? 可替代单个字符

  • 可替代多个字符

[charset] 可替代charset集中的任意单个字符

下面以例子加以说明:

如文件夹中有这些文件foo1, …, foo9, foo10, …, foo278,如果使用

rename foo foo0 foo?

则它只会把foo1到foo9的文件重命名为foo01到foo09,因为?通配符只能替代单个字符,所以被重命名的文件只是有4个字符长度名称的文件,文件名中的foo被替换为foo0。

再继续使用

rename foo foo0 foo??

则文件夹中的foo01到foo99的所有文件都被重命名为foo001到foo099,而foo100及其以后的文件名都不变,因为通配符?的使用,所以只重命名5个字符长度名称的文件,文件名中的foo被替换为foo0。

如果再继续使用

rename foo foo0 foo*

则foo001到foo278的所有文件都被重命名为foo0001到foo0278,因为通配符*可替代多个字符,所以,所有以foo开头的文件都被重命名了,文件名中的foo被替换为foo0。

我们再来看通配符[charset]的用法,还是继续在上面所说的文件夹中,执行如下命令

rename foo0 foo foo0[2]*

则从foo0200到foo0278的所有文件都被重命名为foo200到foo278,文件名中的foo0被替换为foo。

在使用中,三种通配符可以一起结合使用,关于具体的其它用法就只有自己不断的摸索了。

转自:http://davidx.me/2009/09/14/lightweight-efficient-linux-based-on-archlinux/

以前一直使用Gnome作为桌面系统, 后来慢慢的视觉疲劳了, 于是决定换掉它, 既然换, 就干脆换一个轻量级的桌面系统, 于是下面的组合出现了!

先说我使用的各个组件
1.窗口管理 — openbox, 轻量又好用, 简约而不简单
2.登录管理器 — slim, DM中比较轻量的一款了
3.文件管理器 — pcmanfm, nautilus的替代品
4.panel — tint2, 以前一直用fbpanel, 今天才发现一个比它更好看和好用的
5.背景更换 — feh, 由于没有rox这样的桌面管理软件, 所以还是需要自己设定下背景的(朋友说可以用pcmanfm来管理桌面的, 不过我还没有尝试)
6.系统监视 — conky, 没的说, 定制性最强的系统监视软件了
7.终端 — sakura, 以前一直用gnome-terminal, 后来有尝试xterm, 但是不支持鼠标右键, 而且配置比较复杂, 这里找到一个替代品, 可以完全替代gnome-terminal了

转自:http://www.forzw.com/archives/652

启动nginx时出错。。。

/usr/local/webserver/nginx/sbin/nginx
/usr/local/webserver/nginx/sbin/nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory

从错误看出是缺少lib文件导致,进一步查看下

[root@vps1 pcre-8.30]# ldd $(which /usr/local/webserver/nginx/sbin/nginx)

linux-vdso.so.1 => (0x00007fff5dd56000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fa8c1857000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007fa8c161f000)
libpcre.so.1 => not found
libssl.so.6 => /lib64/libssl.so.6 (0x00007fa8c13d3000)
libcrypto.so.6 => /lib64/libcrypto.so.6 (0x00007fa8c1082000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fa8c0e7e000)
libz.so.1 => /lib64/libz.so.1 (0x00007fa8c0c6a000)
libc.so.6 => /lib64/libc.so.6 (0x00007fa8c0912000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa8c1a72000)
libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 (0x00007fa8c06e4000)
libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0x00007fa8c044f000)
libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007fa8c024d000)
libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0x00007fa8c0028000)
libkrb5support.so.0 => /usr/lib64/libkrb5support.so.0 (0x00007fa8bfe20000)
libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007fa8bfc1e000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fa8bfa09000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fa8bf7f1000)
libsepol.so.1 => /lib64/libsepol.so.1 (0x00007fa8bf5ab000)

可以看出 libpcre.so.1 => not found 并没有找到,进入/lib64目录中手动链接下

[root@vps1 lib64]# ln -s libpcre.so.0.0.1 libpcre.so.1

之后启动正常。

由于各种原因,有些朋友注册了校内人人网后却忘记了注册账号,现在给大家个简单的方法:

第一步:用其他账号登陆校内人人网(自己再申请一个,或者用别人的)搜索自己的注册用户名,进入已经忘记了账号的主页,例如http://www.renren.com/profile.doid=1234567890&pma;=p_profile_m_pub_sharefriends_a_profile

第二步:复制地址栏中等于号后面的那串数字(例如:1234567890)

第三部:打开人人网桌面(没有安装的可以下载安装一个)然后再用户名里面粘贴刚才复制的那串数字,然后输入自己注册时的密码,就可以登陆了,登陆成功后就可以通过人人桌面进入自己的主页

第四步:打开主页后就可以更改注册账户的邮箱了,这样下一次就可以直接登陆了。

注:如果只是密码忘了,可以申诉。但如果注册账户和密码都忘了,那就无力回天了。

一些运行在Nginx上的网站有时候会出现“502 Bad Gateway”错误,有些时候甚至频繁的出现。以下是从Google搜集整理的一些Nginx 502错误的排查方法,供参考:

Nginx 502错误的原因比较多,是因为在代理模式下后端服务器出现问题引起的。这些错误一般都不是nginx本身的问题,一定要从后端找原因!但nginx把这些出错都揽在自己身上了,着实让nginx的推广者备受置疑,毕竟从字眼上理解,bad gateway?不就是bad nginx吗?让不了解的人看到,会直接把责任推在nginx身上,希望nginx下一个版本会把出错提示写稍微友好一些,至少不会是现在简单的一句 502 Bad Gateway,另外还不忘附上自己的大名。

Nginx 502的触发条件

502错误最通常的出现情况就是后端主机当机。在upstream配置里有这么一项配置:proxy_next_upstream,这个配置指定了 nginx在从一个后端主机取数据遇到何种错误时会转到下一个后端主机,里头写上的就是会出现502的所有情况拉,默认是error timeout。error就是当机、断线之类的,timeout就是读取堵塞超时,比较容易理解。我一般是全写上的:

proxy_next_upstream error timeout invalid_header http_500 http_503;
不过现在可能我要去掉http_500这一项了,http_500指定后端返回500错误时会转一个主机,后端的jsp出错的话,本来会打印一堆 stacktrace的错误信息,现在被502取代了。但公司的程序员可不这么认为,他们认定是nginx出现了错误,我实在没空跟他们解释502的原理 了……

503错误就可以保留,因为后端通常是apache resin,如果apache死机就是error,但resin死机,仅仅是503,所以还是有必要保留的。

解决办法

遇到502问题,可以优先考虑按照以下两个步骤去解决。

1、查看当前的PHP FastCGI进程数是否够用:

netstat -anpo | grep “php-cgi” | wc -l
如果实际使用的“FastCGI进程数”接近预设的“FastCGI进程数”,那么,说明“FastCGI进程数”不够用,需要增大。

2、部分PHP程序的执行时间超过了Nginx的等待时间,可以适当增加nginx.conf配置文件中FastCGI的timeout时间,例如:

……
http
{
……
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
……
}
……
php.ini中memory_limit设低了会出错,修改了php.ini的memory_limit为64M,重启nginx,发现好了,原来是PHP的内存不足了。

如果这样修改了还解决不了问题,可以参考下面这些方案:

一、max-children和max-requests

一台服务器上运行着nginx php(fpm) xcache,访问量日均 300W pv左右

最近经常会出现这样的情况: php页面打开很慢,cpu使用率突然降至很低,系统负载突然升至很高,查看网卡的流量,也会发现突然降到了很低。这种情况只持续数秒钟就恢复了

检查php-fpm的日志文件发现了一些线索

Sep 30 08:32:23.289973 [NOTICE] fpm_unix_init_main(), line 271: getrlimit(nofile): max:51200, cur:51200
Sep 30 08:32:23.290212 [NOTICE] fpm_sockets_init_main(), line 371: using inherited socket fd=10, “127.0.0.1:9000″
Sep 30 08:32:23.290342 [NOTICE] fpm_event_init_main(), line 109: libevent: using epoll
Sep 30 08:32:23.296426 [NOTICE] fpm_init(), line 47: fpm is running, pid 30587
在这几句的前面,是1000多行的关闭children和开启children的日志

原来,php-fpm有一个参数 max_requests,该参数指明了,每个children最多处理多少个请求后便会被关闭,默认的设置是500。因为php是把请求轮询给每个 children,在大流量下,每个childre到达max_requests所用的时间都差不多,这样就造成所有的children基本上在同一时间 被关闭。

在这期间,nginx无法将php文件转交给php-fpm处理,所以cpu会降至很低(不用处理php,更不用执行sql),而负载会升至很高(关闭和开启children、nginx等待php-fpm),网卡流量也降至很低(nginx无法生成数据传输给客户端)

解决问题很简单,增加children的数量,并且将 max_requests 设置未 0 或者一个比较大的值:

打开 /usr/local/php/etc/php-fpm.conf

调大以下两个参数(根据服务器实际情况,过大也不行)

5120
600
然后重启php-fpm。

二、增加缓冲区容量大小

将nginx的error log打开,发现“pstream sent too big header while reading response header from upstream”这样的错误提示。查阅了一下资料,大意是nginx缓冲区有一个bug造成的,我们网站的页面消耗占用缓冲区可能过大。参考老外写的修 改办法增加了缓冲区容量大小设置,502问题彻底解决。后来系统管理员又对参数做了调整只保留了2个设置参数:client head buffer,fastcgi buffer size。

三、request_terminate_timeout

如果主要是在一些post或者数据库操作的时候出现502这种情况,而不是在静态页面操作中常见,那么可以查看一下php-fpm.conf设置中的一项:

request_terminate_timeout

这个值是max_execution_time,就是fast-cgi的执行脚本时间。

0s

0s为关闭,就是无限执行下去。(当时装的时候没仔细看就改了一个数字)

发现,问题解决了,执行很长时间也不会出错了。

优化fastcgi中,还可以改改这个值5s 看看效果。

php-cgi进程数不够用、php执行时间长、或者是php-cgi进程死掉,都会出现502错误。

如果您还有其他的解决方法,欢迎留言!

永久链接 : http://www.ha97.com/4004.html

今天在开发一个j2me程序的时候,需要用到json数据的解析,从百度上搜了一圈都是各种教你怎么用的,但问题是没有一个说,这个包从哪里获得。。。从一个老外的blog找到一个jar包,还看到一个非jar包的。先说jar包的,转自:http://per.liedman.net/2010/06/07/the-lack-of-a-json-parser-for-j2me/

In a pet project I’m spending my nights working on (hopefully more about that in a later post), I found myself in need of a JSON parser, or deserializer, for J2ME/CLDC. A bit to my surprise, I found that such a thing was not easy to find, even with the whole of the internets at my disposal.

To summarize, it appears that there has been a JSON lib for J2ME up on json.org at some point, but at least I can’t find it any longer. Also, some project on java.net is popular to link to, but come on, no download link? No pre-compiled JAR-file?

Anyway, after asking over at stackoverflow.com and getting surprisingly few answers, at least I found a link to some code that was easy enough to grab.

As some kind of attempt to give back to the community, I upload the compiled JAR from that source code here. So if you need to serialize, deserialize, marshal or unmarshal JSON from J2ME/CLDC, grab this JAR and go ahead:

The code is most likely a copy of the one that was previously posted on json.org, and is distributed under the json.org license according to the copyright notice in the source (most importantly: “The Software shall be used for Good, not Evil.”)

As a very tiny modification, I have added the methods remove and removeAll to the class JSONArray, since I really needed them. I hope you don’t mind too much.

非jar包:https://github.com/upictec/org.json.me/

最近不知道怎么安装过什么东西,导致了双击PHP文件打开Aptana Studio的时候,总是弹出failed to create the java virtual machine的错误提示框,但是Aptana Studio如果手动是能开启的。这个事情非常的让人郁闷,上百度搜了一圈都是说eclipse的处理方式的,后来在google上找到一篇英文的(http://kisdigital.wordpress.com/2011/06/16/speeding-up-aptana-studio-3/),大体意思是说按照eclipse的那个方法修改Aptana的配置文件也是可以成功的,于是我就复制了一下他给的配置文件,然后就好了,现在贴出来配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-name
Aptana Studio 3
-vmargs
-Xms512m
-Xmx512m
-Declipse.p2.unsignedPolicy=allow
-Djava.awt.headless=true
-XX:PermSize=128m
-XX:MaxPermSize=128m
-Xverify:none
-XX:+UseParallelGC
-XX:+AggressiveOpts
-XX:+UseFastAccessorMethods
0%