Linux系统下统计目录及其子目录文件个数

 http://www.sina.com.cn 2008年06月23日 08:13 赛迪网

 作者:sixth

 查看某目录下文件的个数

 ls -l |grep “^-“|wc -l

 或

 find ./company -type f | wc -l

 查看某目录下文件的个数,包括子目录里的。

 ls -lR|grep “^-“|wc -l

 查看某文件夹下目录的个数,包括子目录里的。

 ls -lR|grep “^d”|wc -l

 说明:

 ls -l

 长列表输出该目录下文件信息(注意这里的文件,不同于一般的文件,可能是目录、链接、设备文件等)

 grep “^-“

 这里将长列表输出信息过滤一部分,只保留一般文件,如果只保留目录就是 ^d

 wc -l

 统计输出信息的行数,因为已经过滤得只剩一般文件了,所以统计结果就是一般文件信息的行数,又由于一行信息对应一个文件,所以也就是文件的个数。

Zend Studio 7.2 自动换行

  在zend studio 6系列中自动换行一直是一个比较麻烦的问题,不太明白这么强大的一个编辑器为什么没有提供自动换行的功能,不过当时可以通过安装相应的插件来完成。不过在zend studio 7.2中,这个问题可以直接解决了。

方法如下:

  在代码窗口中单击右键,然后选择“Toggle Word Wrap”即可。

  缺点:关于行号,如果是一行自动换为两行,显示的行号是2而不是1。

PHP是否支持mail()函数

WordPress无法发送邮件,通常都是放置博客的服务器自身问题,而不是WordPress程序的问题。Linux主机还算幸福,一般不用操心mail()函数的问题。Win主机大多支持情况不是很好,主要现在垃圾邮件横行,IDC商也是头大的很,干脆禁了mail()函数,一了百了。

WordPress发送邮件的原理很简单,它是通过PHP中的mail()函数来实现的,所以我们首先要解决的就是测试服务器对mail()函数的支持情况,小拼提供三种解决方案,随你喜欢。

1)新建一个PHP文件,命名为mail_test.php,加入以下代码:

<?php phpinfo(); ?>

将mail_test.php上传至网站根目录,访问该文件,就可以看到你的服务器PHP详细配置信息了,其中的sendmail_path组件,如果值是-t -i,则说明你的服务器支持mail()函数。

2)在上面的mail_test.php文件中,加入以下代码:

<?php$text = "This is a test!";// 将邮箱地址改成你的$mail = 'xpsem2010@gmail.com'; // 发送邮件mail($mail, "Mail Test", $text);echo "Message has been sent !";?>

同上,访问mail_test.php文件,如果你的邮箱收到名为Mail Test的新邮件,那表示你的服务器是支持mail()函数发送邮件的。

3)在mail_test.php中加入如下代码:

<?phpif (function_exists('mail')) echo "^_^ mail()函数可以使用!";else echo "- -! mail()函数不可以使用!";?>

以上三种方法,就可以准确地测试出你的服务器对mail()函数的支持情况了。如果不支持mail()函数的话,就去找你的IDC商沟通吧!

新浪微博不支持多个参数

日前,写了个插件程序给ECShop,并按领导要求,添加了新浪微博的分享和腾讯微博的分享。结果有人报告,在插件详情页上的新浪微博的分享,有mysql错误显示,但能生成短地址,而腾讯微博正常。

这个错误很妖异,放狗搜了一下,也没搜到类似的案例。仔细考虑了一下,一般,分享框都是标题和地址,现在只有地址,没有标题,说明是标题生成出了问题。但生成的HTML页面上,title又是能正常生成的(因为新浪微博的分享按钮,通常在未做指定的情况下,是直接取HTML页面的title元素的)。考虑到通常的商品详情页面的新浪微博分享又是正常的,猜测是因为该页面的URL地址有两个参数,形如:http://www.xxx.com/xxx.php?a=b&c=d,其中a=b是选择不同的页面动作,于是将这个动作,独立写成一个PHP文件,将地址缩短到形如http://www.xxx.com/xxx.php?a=b,果然,立刻吃嘛嘛香,身体倍儿棒,新浪微博分享立刻显示正常。看来这是由于新浪的分享功能不支持当前页面的URL地址有多个参数,从而无法获取标题造成的。

如何将apache伪静态规则转换成nginx

  很多用户的程序,官方仅提供了apache或IIS的伪静态规则,无法加载到我公司的nginx服务器上,下面就简单介绍下如何将apache转换成nginx可以使用的规则。

        RewriteEngine On

        RewriteRule ^/([a-z]+)/p_([0-9]+)\.html$ /list\.php\?id=$1

  以上为apache的伪静态规则。下面为转换后的nginx规则:

  rewrite ^/([a-z]+)/p_([0-9]+)\.html$ /list.php?id=$1 last;

  请注意:apache后则不能直接使用点和问号,所以将/list\.php\?id=$1中的”\”去掉,即:/list.php?id=$1

  然后,将RewriteRule 换为 rewrite,并在在每条规则后加上”last;“

  这样逐条修改就完成了。

SVN自动同步到发布文件夹

首先做下语境定义,以下的所有说明,均基于以下设定:

客户端:开发人员用来编辑修改程序的电脑,可以是windows也可以是Linux、MacOS等

SVN端:提供SVN服务的电脑,通常简称为SVN服务器

Web服务器:提供Web SVN服务的电脑,在本文中和SVN端共用一台电脑。

这三者之间的关系:开发人员在客户端,用TortoiseSVN等单独的SVN客户端,或者内嵌SVN功能的IDE,如Zend Studio,将自己编写的代码同步到SVN端,这一步,一般来说,开发人员只需拿到属于自己的用户名密码、属于自己的项目就好了,不用多说;但是SVN端对这些数据都是二进制文件的方式保存成数据库,无法直接用肉眼查看,所以我打算在这台服务器上建立Web服务器,将数据从SVN端同步到Web服务器,这样就可以成为一个测试服务器,开发人员写完代码,SVN同步一下,就可以在Web服务器上看到效果。


服务器配置:

硬件:普通Intel CPU的PC机

操作系统:FreeBSD 64-bit

主要软件:Nginx、MySQL、PHP、Subversion(独立版,因为没装Apache)

SVN库保存目录设定:/var/svn

xy280库的保存目录:/var/svn/xy280

Web服务的Document Root:/var/vhosts/

xy280项目对应的目录:/var/vhosts/test.xxx.com


cd /var/vhosts/test.xxx.com

(注意,本项目在公网上是保存在二级目录下的,所以要先进入顶级目录,这样从SVN端同步到Web服务器时,就可以正好将带出的目录作为二级目录,如果项目保存在顶级目录下的话,这里就要进入Document Root)

svn co file:///var/svn/xy280

这一步就是将SVN库中的数据拷贝到Web服务器上的对应目录

进入xy280库目录下的hooks目录,将post-commit.tmpl拷贝为post-commit,去除所有原有未被注释的语句,输入以下

SVN=/usr/local/bin/svn

WEB=/var/vhosts/xytest.xxx.com/xy280
CHOWN=/usr/sbin/chown
CHMOD=/bin/chmod
 
cd /var/vhosts/xytest.xxx.com/xy280
$SVN cleanup
cd /var/svn/xy280/hooks
$SVN update –username aaa –password bbb $WEB //这里的用户名密码无论是字母数字,均无需加双引号
 
$CHOWN -R svn:svn /var/vhosts/xytest.xxx.com/xy280

$CHMOD -R 757 /var/vhosts/xytest.xxx.com/xy280/.svn

退出后chmod +x post-commit,给该文件加上执行权限,chown svn:svn post-commit,使之属于SVN用户,SVN组,拥有足够权限以便被执行

进入/usr/local/etc/nginx,修改nginx.conf

将原来user www www;修改为user svn svn;这一修改的目的是保证SVN和Nginx使用同样的用户名和组,从而最大限度地避免权限不够的问题

在another server这一块给你的域名做设置,基本类似于此:

    server {

        listen 80;
        server_name xytest.xxx.com;
        root /var/vhosts/xytest.xxx.com;
        index index.php;
 
        location ~ \.php$ {
         fastcgi_pass 127.0.0.1:9000;
         fastcgi_index index.php;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
         include fastcgi_params;
        }
        access_log /var/log/access_xytest.xxx.com.log main;

    }

这样基本上就可以达到我们的目的了

触发器实现Mysql同服务器跨库同步

我用了discuzX2.0来展示内容,但是考虑到Discuz是得升级的,数据库结构之类的说不定就调整了,自己的应用数据要单独出来,因此就产生了这两个数据库的某些内容进行同步的需求。查了一下,触发器。网上搜了下代码,报了1046错误。原因是没有用delimiter设置分隔符,而本来sql中又有分号,另一个原因就是delimiter得放在drop后面,这个为什么没懂,暂时也不追究,我想实现了再说。代码如下:

DROP TRIGGER IF EXISTS t_afterinsert_on_post;delimiter //CREATE TRIGGER t_afterinsert_on_post  AFTER INSERT ON 数据库1.1FOR EACH ROWBEGIN  insert into 数据库2.2(字段2) values(new.字段1);END;//delimiter ;

语句分隔符是可以自己设置的。触发器的一些内容请参见:http://yxgyh.iteye.com/blog/222671