存档

‘计算技术’ 分类的存档

JQuery选择过滤器

2011年12月21日

1.DOM对象与JQuery包装集

1.通过document.getElementById(),document.getElementsByName()等取的就是DOM对象或DOM对象集,前者取的是对象,后者取得DOM对象集

var text11_dom=document.getElementById("text11"); var text11_dom=document.getElementsByName("text11")[0]; var text11_dom=document.all.text11;//此处text11即可以是name值也可以是id值 var text11_dom=document.all[10];

2.如果要使用JQuery提供的函数首先要构造JQuery包装集,通过$()返回的即是JQuery包装集。

var text11_jquery=$("#text11");

2.JQuery包装集与DOM对象互相转换
1.DOM对象不能使用JQuery属性方法,但DOM对象可以通过$()转换成JQuery包装集

var text11_dom=document.getElementById("text11"); var text11_jquery=$(text11_dom);

2.JQuery包装集可以使用部分DOM对象的属性方法如.length,但也有个别属性方法不能使用如.value,可以通过在JQuery包装集后面加中括号及索引值获取对应DOM对象

var text11_dom=$("#text11")[0];

3.在each循环时或触发事件时的this也是DOM对象

$("#text11").click(function(){ var text11_dom_value=this.value; alert(text11_dom_value); });

3.$符号在JQuery中代表对JQuery对象的引用,JQuery的核心方法有四个
1.jQuery(html[,ownerDocument]):根据HTML原始字符串动态创建Dom元素

$("<div><p>Hello!</p></div>").appendTo("body");

2.jQuery( elements ):将一个或多个Dom对象封装为jQuery包装集,就是上面的DOM对象与JQuery包装集转换
3.jQuery( callback ):$(document).ready()的简写方式

$(function(){ alert("Hello!"); });

4.JQuery(selector[,context]):在指定范围内查找符合条件的JQuery包装集,context为查找范围,context可以是DOM对象集也可以是JQuery包装集
在所有tr标签中查找id为text11元素的JQuery包装集

var text11_query=$("#text11","tr");

===================jQuery选择器===================

1. 基础选择器 Basics
1.根据标签名进行选择

var input_query=$("input");

2.根据id值选取

var text11_query=$("#text11");

3.根据class值进行选取

var text11_query=$(".text11");

4.同时选择多个符合条件的JQuery包装集用,号分隔条件

var text_query=$("#text11,.text12");

5.选择所有DOM元素

var all_query=$("*");

2.层次选择器 Hierarchy
1.从所有tr标签中获取其下面的所有id值为text11的元素

var text11_query=$("tr #text11");

2.获取所有td标签下的所有直接input子元素

var input_query=$("td>input");

3.获取id为text11元素后面的class为button11元素,只获取一个符合条件的元素。text11与button11在地位上属于同级关系

var button11_query=$("#text11+.button11");

4.获取id为text11元素后面的所有class为button11的元素

var button11_query=$("#text11~.button11");

3.基本过滤器 Basic Filters
1.获取第一个input元素

var input_query=$("input:first");

2.获取最后一个input元素

var input_query=$("input:last");

3.获取所有未被选中的input元素

var input_query=$("input:not(:checked)");

4.第一个input元素算一,查找所有第奇数个的input元素

var input_query=$("input:even");

5.从第二个input算起,查找所有第偶数个的input元素

var input_query=$("input:odd");

6.查找索引为1的input元素,索引值从0算起

var input_query=$("input:eq(1)");

7.查找索引大于0的所有input元素

var input_query=$("input:gt(0)");

8.查找索引小于2的所有input元素

var input_query=$("input:lt(2)");

9.获取页面所有<h>标题元素

var h_query=$(":header");

10.获取所有正在执行动画效果的元素

var animated_query=$(":animated");

4. 内容过滤器 Content Filters
1.查找所有html内容含有”你好世界!”的h1元素

var h1_query=$("h1:contains('你好世界!')");

2.获取所有不含子标签或html内容为空的td元素

var td_query=$("td:empty");

3.查找所有含有input子元素的td元素

var td_query=$("td:has(input)");

4.查找所有含有子标签或有html内容的td元素

var td_query=$("td:parent");

5.可见性过滤器  Visibility Filters
1.查找所有隐藏的input元素

var input_query=$("input:hidden");

2.查找所有可见的input元素

var input_query=$("input:visible");

6.属性过滤器 Attribute Filters
1.查找所有含有id属性的input元素

var input_query=$("input[id]");

2.查找name值为text11的input元素

var input_query=$("input[name='text11']");

3.查找name值不等于text11的所有input元素

var input_query=$("input[name!='text11']");

4.查找name值以text开头的input元素

var input_query=$("input[name^='text']");

5.查找name值以11结尾的所有input元素

var input_query=$("input[name$='11']");

6.查找name值中含有ext的所有input元素

var input_query=$("input[name*='ext']");

7.查找所有含有id属性并且name值中含有ext的input元素

var input_query=$("input[id][name*='ext']");

7.子元素过滤器 Child Filters
1.查找所有在父元素中的所有子元素中排第2的input元素
nth-child()里参数可选even在这里算偶数,odd在这里算奇数,n任意数即选取所有有父元素的input元素,数字是直接选排在第几个的input元素,第一个input元素算一

var input_query=$("input:nth-child(2)");

2.查找所有在父元素中的所有子元素中排第一的input元素

var input_query=$("input:first-child");

3.查找所有在父元素中所有子元素中排最后一个的input元素

var input_query=$("input:last-child");

4.查找所有在父元素中是唯一子元素的input元素

var input_query=$("input:only-child");

8.表单选择器 Forms
1.查找所有input元素

var input_query=$(":input");

2.查找所有文本框元素

var text_query=$(":text");

3.查找所有密码框元素

var password_query=$(":password");

4.查找所有复选框

var checkbox_query=$(":checkbox");

5.查找所有提交按钮元素

var submit_query=$(":submit");

6.查找所有图像域元素

var image_query=$(":image");

7.查找所有重置按钮元素

var reset_query=$(":reset");

8.查找所有按钮元素

var button_query=$(":button");

9.查找所有文件域元素

var file_query=$(":file");

9.表单过滤器 Form Filters
1.查找所有可用的input元素

var input_query=$("input:enabled");

2.查找所有不可用的input元素

var input_query=$("input:disabled");

3.查找所有选中的单选复选框

var input_query=$("input:checked");

4.查找所有选中的下拉框

var option_query=$("option:selected");

 

计算技术

GPS日志插件更新

2010年8月27日

终于在两年后把gps的这个插件加上了照片导入功能。现在显示的gps轨迹已经带了照片的经纬度并显示照片。通过php读取exif信息读出经纬度然后存入数据库。

同时还需要做的就是将这个照片导入和wordpress的相册插件结合起来,另外增加一些别的功能如相册浏览,exif信息等。

下一步需要增加海拔和速度的图表,更加直观。

gps日志系统 , ,

linux rsync 同步文件夹

2010年5月9日

备份是系统管理中最艰巨、最容易被忽略的工作之一,同时也是最重要的工作之一。备份是防御硬件故障、非法入侵和系统安全的最大威胁——终端用户的最后一道防线。

Rsync 是一个小巧的算法的强大实现。它最基本的功能是高效地镜像一个文件系统的能力。使用 rsync,可以灵活地选用一组网络协议,诸如 nfs、smb 或 ssh,方便地让一个文件系统与另一个文件系统保持同步更新。Rsync 的第二个功能,也就是备份系统使用的功能,它可以把已经发生改变或是被删除的文件的老的版本归档。

1.1  软件简介

Rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。Rsync本来是用以取代rcp的一个工具,它当前由rsync.samba.org维护。Rsync使用所谓的“Rsync演算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。运行Rsync server的机器也叫backup server,一个Rsync server可同时备份多个client的数据;也可以多个Rsync server备份一个client的数据。
Rsync可以搭配rsh或ssh甚至使用daemon模式。Rsync server会打开一个873的服务通道(port),等待对方Rsync连接。连接时,Rsync server会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份。
Rsync支持大多数的类Unix系统,无论是Linux、Solaris还是BSD上都经过了良好的测试。此外,它在windows平台下也有相应的版本,比较知名的有cwRsync和Sync2NAS。

Rsync的基本特点如下:
1.可以镜像保存整个目录树和文件系统;
2.可以很容易做到保持原来文件的权限、时间、软硬链接等;
3.无须特殊权限即可安装;
4.优化的流程,文件传输效率高;
5.可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接;
6.支持匿名传输。

1.3  命令语法

rsync的命令格式可以为以下六种:

rsync [OPTION]… SRC DEST
rsync [OPTION]… SRC [USER@]HOST:DEST
rsync [OPTION]… [USER@]HOST:SRC DEST
rsync [OPTION]… [USER@]HOST::SRC DEST
rsync [OPTION]… SRC [USER@]HOST::DEST
rsync [OPTION]… rsync://[USER@]HOST[:PORT]/SRC [DEST]

对应于以上六种命令格式,rsync有六种不同的工作模式:
1)拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号”:”分隔符时就启动这种工作模式。
2)使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号”:”分隔符时启动该模式。
3)使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号”:”分隔符时启动该模式。
4)从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含”::”分隔符时启动该模式。
5)从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含”::”分隔符时启动该模式。
6)列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。

1 同步本机文件测试

rsync –help
你可以看到很多参数,选择自己觉得需要的参数即可。

先测试一下本机同步:

rsync -vzrtopgu –progress /Data/scripts/ /tmp/back_srcipt/

会看到文件在传输,再运行一次,就知道没有运行复制,因为文件没有修改过

增加文件测试:
touch /Data/scripts/test.txt

再运行上面的脚本就可以看到把这个新文件传输过去了,没有复制别的文件。

3 服务器间同步文件

要在服务器间rsync传输文件,需要有一个是开着rsync的服务,而这一服务需要一个配置文件,说明当前运行的用户名和用户组,这个用户名和用户组讲在改变文件权限和相关内容的时候有用,否则有时候会出现提示权限问题。配置文件也说明了模块,模块化管理服务的安全性,每个模块的名称都是自己定义的,可以添加用户名密码验证,也可以验证IP,设置目录是否可写等。

vi /etc/rsyncd.conf

uid=root
gid=root
#这里指定的用户名和用户组是root,权限过高了,出于安全考虑可以用别的

[web_aslibra]
# 这里是认证的模块名,在client端需要指定
path = /Data/webapps/www.aslibra.com/
# 需要做镜像的目录
comment = test
ignore errors
# 可以忽略一些无关的IO错误
read only = yes
# 只读,如果是no,则可以从client发送文件到此服务器
list = no
# 不允许列文件
auth users = aslibra
# 认证的用户名,如果没有这行,则表明是匿名
secrets file = /etc/rsyncd.pass
# 认证文件名

[web_aslibra_public]
path = /Data/webapps/www.aslibra.com/
ignore errors
read only = yes
list = no

[web_aslibra_write]
path = /Data/webapps/www.aslibra.com/
ignore errors
read only = no
hosts allow = 192.168.1.2
list = no

服务启动方式:

/Data/apps/rsync/bin/rsync –daemon

第一个模块,用户验证方式,需要指定用户名密码:

在/etc/下新建一文件rsyncd.pass
#vi /etc/rsyncd.pass
aslibra:aslibra.com
一行一个用户,用户名:密码
修改rsyncd.pass权限
chmod 600 /etc/rsyncd.pass
此步省略会导致rsync无法启动

客户端也需要有密码文件,当然路径可以不一样

rsync -rvlHpogDtS –progress –password-file=/etc/rsyncd.pass aslibra@192.168.1.3::web_aslibra /tmp/aslibra.com/

我有时候总是验证不对,不知道是否两个服务器间版本有差异的问题

第二个模块是没有验证的情况,都可读

rsync -rvlHpogDtS –progress aslibra@192.168.1.3::web_aslibra_public /tmp/aslibra.com/

第三个是验证ip,而且可写

发送文件很简单,把后面两个参数反过来就可以,拿上一个例子

rsync -rvlHpogDtS –progress /tmp/aslibra.com/ aslibra@192.168.1.3::web_aslibra_public

这样会提示出错,因为web_aslibra_public是只读的

rsync -rvlHpogDtS –progress /tmp/aslibra.com/ aslibra@192.168.1.3::web_aslibra_write

这样就可以了,但要看从哪个IP来的了,否则也失败

下面是摘录的一些详细的参数说明:

rsyncd.conf参数
uid
该选项指定当该模块传输文件时守护进程应该具有的uid,配合gid选项使用可以确定哪些可以访问怎么样的文件权限,默认值是”nobody”。
gid
该选项指定当该模块传输文件时守护进程应该具有的gid。默认值为”nobody”。
exlude
用来指定多个由空格隔开的多个模式列表,并将其添加到exclude列表中。这等同于在客户端命令中使用–exclude来指定模式,不过配置文件中指定的exlude模式不会传递给客户端,而仅仅应用于服务器。一个模块只能指定一个exlude选项,但是可以在模式前面使用”-“和”+”来指定是exclude还是include。
但是需要注意的一点是该选项有一定的安全性问题,客户很有可能绕过exlude列表,如果希望确保特定的文件不能被访问,那就最好结合uid/gid选项一起使用。
exlude from
指定一个包含exclude模式的定义的文件名,服务器从该文件中读取exlude列表定义。
include
用来指定多个由空格隔开的多个rsync并应该exlude的模式列表。这等同于在客户端命令中使用–include来指定模式,结合include和exlude可以定义复杂的exlude/include规则。一个模块只能指定一个include选项,但是可以在模式前面使用”-“和”+”来指定是exclude还是include。
include from
指定一个包含include模式的定义的文件名,服务器从该文件中读取include列表定义。
auth users
该选项指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户和系统用户没有任何关系。如果”auth users”被设置,那么客户端发出对该模块的连接请求以后会被rsync请求challenged进行验证身份这里使用的challenge/response认证协议。用户的名和密码以明文方式存放在”secrets file”选项指定的文件中。默认情况下无需密码就可以连接模块(也就是匿名方式)。
secrets file
该选项指定一个包含定义用户名:密码对的文件。只有在”auth users”被定义时,该文件才有作用。文件每行包含一个username:passwd对。一般来说密码最好不要超过8个字符。没有默认的secures file名,需要限式指定一个。(例如:/etc/rsyncd.secrets)
strict modes
该选项指定是否监测密码文件的权限,如果该选项值为true那么密码文件只能被rsync服务器运行身份的用户访问,其他任何用户不可以访问该文件。默认值为true。
hosts allow
该选项指定哪些IP的客户允许连接该模块。客户模式定义可以是以下形式:
o xxx.xxx.xxx.xxx,客户主机只有完全匹配该IP才允许访问。例如:192.167.0.1
o a.b.c.d/n,属于该网络的客户都允许连接该模块。例如:192.168.0.0/24
o a.b.c.d/e.f.g.h,属于该网络的客户都允许连接该模块。例如:192.168.0.0/255.255.255.0
o 一个主机名,客户主机只有拥有该主机名才允许访问,例如:backup.linuxaid.com.cn。
o *.linuxaid.com.cn,所有属于该域的主机都允许。
默认是允许所有主机连接。
hosts deny
指定不允许连接rsync服务器的机器,可以使用hosts allow的定义方式来进行定义。默认是没有hosts deny定义

ignore errors
指定rsyncd在判断是否运行传输时的删除操作时忽略server上的IP错误,一般来说rsync在出现IO错误时将将跳过–delete操作,以防止因为暂时的资源不足或其它IO错误导致的严重问题。
ignore nonreadable
指定rysnc服务器完全忽略那些用户没有访问权限的文件。这对于在需要备份的目录中有些文件是不应该被备份者得到的情况是有意义的

客户端同步命令
v, –verbose 详细模式输出
-q, –quiet 精简输出模式
-c, –checksum 打开校验开关,强制对文件传输进行校验
-a, –archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, –recursive 对子目录以递归模式处理
-R, –relative 使用相对路径信息

rsync foo/bar/foo.c remote:/tmp/

则在/tmp目录下创建foo.c文件,而如果使用-R参数:

rsync -R foo/bar/foo.c remote:/tmp/

则会创建文件/tmp/foo/bar/foo.c,也就是会保持完全路径信息。

-b, –backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用–suffix选项来指定不同的备份文件前缀。
–backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀
-u, –update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
-l, –links 保留软链结
-L, –copy-links 想对待常规文件一样处理软链结
–copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
–safe-links 忽略指向SRC路径目录树以外的链结
-H, –hard-links 保留硬链结
-p, –perms 保持文件权限
-o, –owner 保持文件属主信息
-g, –group 保持文件属组信息
-D, –devices 保持设备文件信息
-t, –times 保持文件时间信息
-S, –sparse 对稀疏文件进行特殊处理以节省DST的空间
-n, –dry-run现实哪些文件将被传输
-W, –whole-file 拷贝文件,不进行增量检测
-x, –one-file-system 不要跨越文件系统边界
-B, –block-size=SIZE 检验算法使用的块尺寸,默认是700字节
-e, –rsh=COMMAND 指定替代rsh的shell程序
–rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
-C, –cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
–existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
–delete 删除那些DST中SRC没有的文件
–delete-excluded 同样删除接收端那些被该选项指定排除的文件
–delete-after 传输结束以后再删除
–ignore-errors 及时出现IO错误也进行删除
–max-delete=NUM 最多删除NUM个文件
–partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
–force 强制删除目录,即使不为空
–numeric-ids 不将数字的用户和组ID匹配为用户名和组名
–timeout=TIME IP超时时间,单位为秒
-I, –ignore-times 不跳过那些有同样的时间和长度的文件
–size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
–modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0
-T –temp-dir=DIR 在DIR中创建临时文件
–compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份
-P 等同于 –partial
–progress 显示备份过程
-z, –compress 对备份的文件在传输时进行压缩处理
–exclude=PATTERN 指定排除不需要传输的文件模式
–include=PATTERN 指定不排除而需要传输的文件模式
–exclude-from=FILE 排除FILE中指定模式的文件
–include-from=FILE 不排除FILE指定模式匹配的文件
–version 打印版本信息
–address 绑定到特定的地址
–config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
–port=PORT 指定其他的rsync服务端口
–blocking-io 对远程shell使用阻塞IO
-stats 给出某些文件的传输状态
–progress 在传输时现实传输过程
–log-format=formAT 指定日志文件格式
–password-file=FILE 从FILE中得到密码
–bwlimit=KBPS 限制I/O带宽,KBytes per second
-h, –help 显示帮助信息

linux

linux nfs和iscsi的配置

2010年5月9日

最近又重拾旧业想把服务器重新虚拟化,以发挥服务器的最大功效。因为esxi 对支持SAN类的网络存储比较好,我的数据量比较大复制数据着实费了一翻力气。NFS 和 ISCSI这两种共享存储都可以用软件模拟。一点设置方法,保留备用。

1 NFS
server端:配置/etc/exports 写入共享内容,然后重启NFS服务

这个文件的内容非常简单,每一行由抛出路径,客户名列表以及每个客户名后紧跟的访问选项构成:

[共享的目录] [主机名或IP(参数,参数)]
其中参数是可选的,当不指定参数时,nfs将使用默认选项。默认的共享选项是 sync,ro,root_squash,no_delay。
当主机名或IP地址为空时,则代表共享给任意客户机提供服务。
当将同一目录共享给多个客户机,但对每个客户机提供的权限不同时,可以这样:
[共享的目录] [主机名1或IP1(参数1,参数2)] [主机名2或IP2(参数3,参数4)]
下面是一些NFS共享的常用参数:
ro 只读访问
rw 读写访问
sync 所有数据在请求时写入共享
async NFS在写入数据前可以相应请求
secure NFS通过1024以下的安全TCP/IP端口发送
insecure NFS通过1024以上的端口发送
wdelay 如果多个用户要写入NFS目录,则归组写入(默认)
no_wdelay 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
hide 在NFS共享目录中不共享其子目录
no_hide 共享NFS目录的子目录
subtree_check 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
no_subtree_check 和上面相对,不检查父目录权限
all_squash 共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
no_all_squash 保留共享文件的UID和GID(默认)
root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squas root用户具有根目录的完全管理访问权限
anonuid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的UID
anongid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的GID

client端: mount 192.168.16.0:/home/share /export/file
完成

2.ISCSI

ISCSI 我使用了windows端的服务端,没什么好说的,唯一的问题就是wintarget和openfiler添加硬盘都必须格式化(可能也可以,我没有具体的好好研究),所以就没用用了国产的ccdisk,挺好用也不必重新格式化硬盘。
linux服务端设置

安装服务端 yum install scsi-target-utils
服务启动 service tgtd start
新建目标 tgtadm –lld iscsi –op new –mode target –tid 1 -T iqn.2010-05.com.k12zy.mail-storage
新建目标盘 tgtadm –lld iscsi –op new –mode logicalunit –tid 1 –lun 1 -b /dev/sda8
添加可控连接端 tgtadm –lld iscsi –op bind –mode target –tid 1 -I 192.168.16.37
查看存在的目标 tgtadm –lld iscsi –op show –mode target

这样就可以了 如果想系统启动即可以用就把中间的三句都加到开机启动里即可
linux端设置

首先安装iscsi的客户端 yum install iscsi-initiator-utils
启动服务 service iscsi start
发现target端 iscsiadm -m discovery -t sendtargets -p 192.168.1.1
返回结果 192.168.1.1:3260,1 iqn.2005-02.com.ricecake.iscsi:00
登陆 iscsiadm -m node -T iqn.2005-02.com.ricecake.iscsi:00 -p 192.168.1.1 -l
退出 iscsiadm -m node -T iqn.2005-02.com.ricecake.iscsi:00 -p 192.168.1.1 –logout

到这里iscsi已经完成了,然后到fdisk里已经能够看到这个盘了,其他的就像本地磁盘一样继续进行后面的操作就可以了。如果想重启后仍然重启,可以将上面挂在的那个语句直接保存到/etc/iscsid/iscsid.conf 的最后。

3.samba
另一个有用的东西挂载samba的共享到系统(可以挂在windows的共享),注意centos里文件格式是cifs

mount -t cifs -o username=billy //192.168.16.20/export/hd3 /export/hd3/

linux, vmware

linux统计文件夹中文件数目和大小

2010年4月30日

第一种方法:

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

ls -l 长列表输出该目录下文件信息(注意这里的文件,不同于一般的文件,可能是目录、链接、设备文件等)。如果ls -lR|grep “^-”|wc-l则可以连子目录下的文件一起统计。

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

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

第二种方法:

find ./ -type f|wc -l

由于默认find会去子目录查找,如果只想查找当前目录的文件用find ./ -maxdepth 1 -type f|wc -l即可。

查看linux文件目录的大小和文件夹包含的文件数
统计总数大小
du -sh xmldb/
du -sm * | sort -n //统计当前目录大小 并安大小 排序
du -sk * | sort -n
du -sk * | grep chuangtse //看一个人的大小
du -m | cut -d “/” -f 2 //看第二个/ 字符前的文字
查看此文件夹有多少文件 /*/*/* 有多少文件
du xmldb/
du xmldb/*/*/* |wc -l
40752
解释:
wc [-lmw]
参数说明:
-l :多少行
-m:多少字符
-w:多少字

linux, 计算技术

nginx 图形化状态

2009年1月12日

    前段时间弄了mrtg的监控AWStats 的日志处理,并和nginx状态、xcache状态、mysql管理等整合到了一起,通过status.k12zy.com来访问。

    因为nginx状态是文字的没什么直观性,看到有弄成图形化的统计很直观,试着做了下,效果还不错。

    首先下载pl文件,rrd_nginx.pl.txt,将其txt扩展名去掉修改如下部分。

#!/usr/bin/perl
use RRDs;
use LWP::UserAgent;

# define location of rrdtool databases
my $rrd = ‘/opt/rrd';
# define location of images
my $img = ‘/opt/rrd/html';
# define your nginx stats URL
my $URL = http://your-domain.com/nginx_status;

另外安装rrdtool,我在centos里通过三方的yum安装的rrdtool,和perl的rrd的模块。

然后定义cron自动运行,其实这个pl里面有两个内容一个是获取nginx的文本状态信息并存到rrd的数据,然后生成图片,所以可以把这两个内容分开比如每5分钟获取一次数据,一个小时生成一次图片节省系统资源,但是实际运行看来差别不大。

下面是效果图。 阅读全文…

linux, 我的网站 , ,

nginx X-Accel-Redirect 文件下载控制

2009年1月7日

原来是用的 NginxHttpAccessKeyModule 这个nginx的插件,效果可以,但是对下载控制有些吃力,比如下载次数或之前的下载减分等都不太好做,近来发现了个方法,还是延续之前通过动态程序读取文件内容再转发给用的的方法,但是读取文件内容的工作就从动态程序转到的web服务器,对动态程序的性能是一个极大的解放。

很多服务器都有这个功能,apache可以通过外部mod来实现。
lighttpd X-Sendfile
nginx X-Accel-Redirect

我用的是nginx具体实现方法

nginx conf

location /down{
internal;
alias /www/down;
}

internal为允许nginx读取文件内容,但是外部无法访问

php内

< ?php
// Get requested file name
$path = $_GET[“path”];

//所有你需要在下载前做的东西

header(“X-Accel-Redirect: /down/” . $path);
?>

参考:http://blog.kovyrin.net/2006/11/01/nginx-x-accel-redirect-php-rails/lang/en/

linux, 我的网站

AWStats 的使用

2008年12月28日

AWStats 以前用过,因为现在用了nginx服务器,nginx对perl支持不是太好用不想多开个apache来浪费资源,后来觉得直接在每天更新时生成静态页然后nginx里直接建个目录浏览就好了。也是一个解决办法。

awstats_buildstaticpages.pl 文件在awstats内的tools文件夹内。

/var/www/cgi-bin/awstats_buildstaticpages.pl -update -config=down -dir=/www/status/awstats/down/ -awstatsprog=/var/www/cgi-bin/awstats.pl -lang=cn

命令行统计增加: -databasebreak=day
报表输出时增加: &databasebreak=day&day=DD
即可按天进行统计, 解决按月统计,归档数据过大导致统计过慢/失败的问题。

在配置文件内加上搜索引擎的具体抓取页面–引自车东的blog
http://www.chedong.com/blog/archives/001200.html 阅读全文…

linux, 计算技术 ,

今天遇到的几个设置方法

2008年11月28日

nginx
定义错误页面 error_page 404 http://www.k12zy.com;

限速 limit_rate  20k;

虚拟目录 alias /export/file/cn/;

linux
mount windows共享服务: mount -t cifs -o username=***,password=*** //192.168.16.10/e$ /export/ss/

lftp mirror: mirror -c –parallel=5 cn /export/file/

mirror [OPTS] [remote [local]]
下載整個目錄(樓上的 get 只能用來抓檔案)
-c 續傳
-e 這個要小心一些, 比較遠端和本地端的檔案, 假如遠端沒有的, 就將本地端的檔案刪除, 也就是將本地端和遠端資料同步。
-R 上傳整個目錄
-n 只下載較新的檔案
-r 不用遞迴到目錄中
–parallel=n 同時下載 n 個檔案(預設一次只下載一個)

samba中文乱码
vi /etc/samba/smb.conf
根据locales的设置,修改该文件:
1. 如果locale是zh_CN.UTF-8,做如下设置:
display charset = UTF-8
unix charset = UTF-8
dos charset = UTF-8
2. 如果locale是zh_CN.GBK或zh_CN.gb2312,做如下设置:
display charset = cp936
unix charset = cp936
dos charset = cp936
重启samba:
service samba restart
则无论从windows的网上邻居,还是直接用securecrt登陆,均可显示正常中文。

批量改文件名
在当前目录下执行 find . -name “*.zip” | while read file; do mv $file $(echo $file|sed s/zip$/rar/g); done

备忘录 , ,

在centos5.2下配置mrtg监控服务器状态

2008年11月26日

在sun下编译过mrtg,图形化显示网络流量,很好用。

在centos下可以直接用yum来安装mrtg,配置比较复杂下面是简单的记录

1.yum安装

yum install net-snmp net-snmp-devel net-snmp-utils mrtg

2.snmp配置

由于mrtg的统计都是通过snmp来做的,所以一般有错误的话都是snmp没有配置好,从网上学习了一个配置文件,可供参考

vi /etc/snmp/snmpd.conf
com2sec local localhost private
com2sec mynet 192.168.16.0/24 public
com2sec public default public

group mygroup v1 mynet
group mygroup v2c mynet
group mygroup usm mynet
group local v1 local
group local v2c local
group local usm local
group public v1 public
group public v2c public
group public usm public

view all included .1 80

access mygroup “” any noauth exact mib2 none none
access public “” any noauth exact all none none
access local “” any noauth exact all all all

syslocation Right here, right now.
syscontact Me
proc mountd
proc ntalkd 4
proc sendmail 10 1
disk / 9689
disk /export/hd3 153327
load 12 14 14

修改完毕后重启 service snmpd start

3.配置mrtg
制作配置文件:cfgmaker –global ‘WorkDir: /var/www/mrtg’–output /etc/mrtg/mrtg.cfg public@127.0.0.1

生成网页:indexmaker -output=/var/www/mrtg/index.html -title=”k12zy.com status” /etc/mrtg/mrtg.cfg

MRTG除了统计流量之外,还可以根据snmp来统计CPU、UPTIME、内存、磁盘使用量等等,具体配置可以参考我下面提供的链接或者下面的mrtg配置文件。

配置结束后启动env LANG=C /usr/bin/mrtg /etc/mrtg/mrtg.cfg 启动三次,因为数据文件的原因前两次会报错,不用理会第三次就好了。

4.配置web服务器

配置自己的web服务器将主目录指向WorkDir,可以设置相关的权限之类的,然后通过浏览器访问就行。

5.配置自动运行

mrtg的运作方式是定时运行,每次运行生成各统计的图片和数据。即他生成的东西都是静态的,但需要经常定时运行。

加入corn 每5分钟运行一次,基本占不了什么资源。

crontab -e
*/5 * * * * env LANG=C /usr/local/mrtg/bin/mrtg /etc/mrtg/mrtg.cfg

下面是我的mrtg的配置文件,包含cpu 内存 硬盘等 大家可以参考。关于硬盘需在snmp里设置好,上面配置文件里的disk / 9689,其中9689这个磁盘大小是根据df -am中的数据来设置的。 阅读全文…

linux, 我的网站 ,