月度归档:2008 年十月

A content management system(CMS) is a computer application used to create, edit, manage, and publish content in a consisitently organized fashion. CMSs are frequently used for storing,controlling,versioning, and publishing industry-specific documentation such as news articles,operators’ manuals, technical manuals,sales guides, and marketing brochures(小册子).The content managed may include computer files,image media, audio files, video files, electronic documents, and Web content.
A CMS may support the following features:
identification of all key users and their content management roles;
the ability to assign roles and responsibilities to different content categories or types;
definition of workflow tasks for collaborative creation, often coupled with event messaging so that content managers are alerted to changes in content(For example, a content creator submits a story, which is published only after the copy editor revises it and the editor-in-chief approves it.);
the ability to track and manage multiple versions of a single instance of content;
the ability to capture content(e.g. scanning);
the ability to publish the content to a repository to support access to the content(Increasingly(越来越多地), the repository is an inherent part of the sytem, and incorporates(包含,加上) enterprise search and retrieval.);

linux crontab 时间格式

分 時 日 月 星期
43 21 * * * 21:43 执行
15 05 * * *    05:15 执行
0 17 * * * 17:00 执行
0 17 * * 1 每周一的 17:00 执行
0,10 17 * * 0,2,3 每周日,周二,周三的 17:00和 17:10 执行
0-10 17 1 * * 毎月1日从 17:00到7:10 毎隔1分钟 执行
0 0 1,15 * 1 毎月1日和 15日和 一日的 0:00 执行
42 4 1 * *     毎月1日的 4:42分 执行
0 21 * * 1-6   周一到周六 21:00 执行
0,10,20,30,40,50 * * * * 每隔10分 执行
*/10 * * * *        每隔10分 执行
* 1 * * *         从1:0到1:59 每隔1分钟 执行
0 1 * * *         1:00 执行
0 */1 * * *        毎时0分 每隔1小时 执行
0 * * * *         毎时0分 每隔1小时 执行
2 8-20/3 * * *      8:02,11:02,14:02,17:02,20:02 执行
30 5 1,15 * *       1日 和 15日的 5:30 执行

linux du命令详解

du的英文原义为“disk usage”,含义为显示磁盘空间的使用情况,是属于使用相对比较频繁的命令linux初学者必须要掌握得命令。

功能:统计目录(或文件)所占磁盘空间的大小。

语法:du [选项] [Names…]

说明:该命令逐级进入指定目录的每一个子目录并显示该目录占用文件系统数据块(1024字节)的情况。若没有给出Names,则对当前目录进行统计。

该命令的各个选项含义如下:

-s 对每个Names参数只给出占用的数据块总数。

-a 递归地显示指定目录中各文件及子孙目录中各文件占用的数据块数。若既不指定-s,也不指定-a,则只显示Names中的每一个目录及其中的各子目录所占的磁盘块数。

-b 以字节为单位列出磁盘空间使用情况(系统缺省以k字节为单位)。

-k 以1024字节为单位列出磁盘空间使用情况。

-c 最后再加上一个总计(系统缺省设置)。

-l 计算所有的文件大小,对硬链接文件,则计算多次。

-x 跳过在不同文件系统上的目录不予统计。

下面举例说明du命令的使用:

例1:查看/mnt目录占用磁盘空间的情况。 $ cd /mnt $ ls -lFR total 10 -rwxrwxrwx 2 root root ll0 Ju1 3l 00:33 aa*

drwxr-xr-x 2 root root l024 Ju1 20 14:16 dev/

-rw-r–r– 1 root root 6229 Aug 2 0l:39 s1ack

drwxrwxrwx 2 root root 1024 Aug 2 02:09 var/

1rwxrwxrwx 1 root root l0 Aug 2 0l:51 wei->/home/wei/

dev:

tota1 0

lrwxrwxrwx 1 root root 8 Ju1 20 l4:l6 cdrom->/dev/hdb

var:

tata1 37

-r-xr-xr-x l root root 36064 Aug 2 02:09 rawrite. exe*

例2:列出各目录所占的磁盘空间,但不详细列出每个文件所占的空间。

$ du

l ./dev

38 ./var

48 .

输出清单中的第一列是以块为单位计的磁盘空间容量,第二列列出目录中使用这些空间的目录名称。

注意不带选项的du命令将从当前目录开始沿着目录结构向下工作直到列出所有目录的容量为止。这可能是一个很长的清单,有时只需要一个总数。这时可在du命令中加-s选项来取得总数:

$ du –s /mnt

/mnt

例3:列出所有文件和目录所占的空间(使用a选项),而且以字节为单位(使用b选项)来计算大小。

$ du -ab

8 ./dev/cdrom

l032 ./dev

36064 ./var/rawrite. exe

37088 ./var

6229 ./s1ack

1l0 ./aa

l0 ./wei

45493 .

$du -ch ./
显示当前目录下面的目录及其子目录的占用磁盘大小.

su命令详解

信息显示命令 su 详解
这个命令非常重要,它可以使一个一般用户拥有超级用户或其他用户的权限,也可以使超级用户以一般用户的身分做些事情。但一般用户使用该命令时必须有超级用户或其他用户的口令。如果要退出当
前用户的登陆,可以输入exit。
1.作用

su的作用是变更为其它使用者的身份,需要键入该使用者的密码(超级用户除外)。

2.格式

su [选项]… [-] [USER [ARG]…]

3.主要参数

-f , –fast:不必读启动文件(如 csh.cshrc 等),仅用于csh或tcsh两种Shell

-l , –login:加了这个参数之后,就似乎是重新登陆为该使用者一样,大部分环境变量(例如HOME、SHELL和USER等)都是以该使用者(USER)为主,并且工作目录也会改变。假如没有指定USER,缺省情况是root

-m, -p ,–preserve-environment:执行su时不改变环境变数。

-c command:变更账号为USER的使用者,并执行指令(command)后再变回原来使用者。

USER:欲变更的使用者账号,ARG传入新的Shell参数。

4.应用实例

变更账号为超级用户,并在执行df命令后还原使用者。  su -c df root

top命令详解

[url=javascript:;]top[/url]
命令是Linux下常用的
[url=javascript:;]性能分析[/url]
工具,能够实时显示系统中各个进程的资源占用状况,类似于
[url=javascript:;]Windows[/url]

[url=javascript:;]任务管理器[/url]
。下面详细介绍它的使用方法。
top – 01:06:48 up 1:22, 1
[url=javascript:;]user[/url]
, load average: 0.06, 0.60, 0.48
Tasks: 29
[url=javascript:;]total[/url]
, 1 running, 28 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si
[url=javascript:;]Mem[/url]
: 191272k total, 173656k used, 17616k free, 22052k buffers
Swap: 192772k total, 0k used, 192772k free, 123988k cached
[url=javascript:;]PID[/url]
USER PR NI VIRT RES SHR S %CPU %MEM TIME+
[url=javascript:;]COMMAND[/url]
1379
[url=javascript:;]root[/url]
16 0 7976 2456 1980 S 0.7 1.3 0:11.03 sshd
14704 root 16 0 2128 980 796 R 0.7 0.5 0:02.72 top
1 root 16 0 1992 632 544 S 0.0 0.3 0:00.90 init
2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
统计信息区
前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:
01:06:48 当前时间
up 1:22 系统运行时间,格式为时:分
1 user 当前登录用户数
load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。
三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:
Tasks: 29 total 进程总数
1 running 正在运行的进程数
28 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
Cpu(s): 0.3% us 用户空间占用CPU百分比
1.0% sy 内核空间占用CPU百分比
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
98.7% id 空闲CPU百分比
0.0% wa 等待输入输出的CPU时间百分比
0.0% hi
0.0% si
最后两行为内存信息。内容如下:
Mem: 191272k total 物理内存总量
173656k used 使用的物理内存总量
17616k free 空闲内存总量
22052k buffers 用作内核缓存的内存量
Swap: 192772k total 交换区总量
0k used 使用的交换区总量
192772k free 空闲交换区总量
123988k cached 缓冲的交换区总量。
内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,
该数值即为这些内容已存在于内存中的交换区的大小。
相应的内存再次被换出时可不必再对交换区写入。
进程信息区
统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。
序号 列名 含义
a PID 进程id
b PPID 父进程id
c RUSER Real user name
d UID 进程所有者的用户id
e USER 进程所有者的用户名
f GROUP 进程所有者的组名
g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
h PR 优先级
i NI nice值。负值表示高优先级,正值表示低优先级
j P 最后使用的CPU,仅在多CPU环境下有意义
k %CPU 上次更新到现在的CPU时间占用百分比
l
[url=javascript:;]TIME[/url]
进程使用的CPU时间总计,单位秒
m TIME+ 进程使用的CPU时间总计,单位1/100秒
n %MEM 进程使用的物理内存百分比
o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
r CODE 可执行代码占用的物理内存大小,单位kb
s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
t SHR 共享内存大小,单位kb
u nFLT 页面错误次数
v nDRT 最后一次写入到现在,被修改过的页面数。
w S 进程状态。
D=不可中断的睡眠状态
R=运行
S=睡眠
T=跟踪/停止
Z=僵尸进程
x COMMAND 命令名/命令行
y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
z Flags 任务标志,参考 sched.h
默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通过下面的快捷键来更改显示内容。
更改显示内容
通过 f 键可以选择显示的内容。按 f 键之后会显示列的列表,按 a-z 即可显示或隐藏对应的列,最后按回车键确定。
按 o 键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。
按大写的 F 或 O 键,然后按 a-z 可以将进程按照相应的列进行排序。而大写的 R 键可以将当前的排序倒转。
命令使用
1. 工具(命令)名称
top
2.工具(命令)作用
显示系统当前的进程和其他状况; top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止. 比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间 对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定.
3.环境设置
在Linux下使用。
4.使用方法
4.1使用格式
top [-] [d] [p] [q] [c] [C] [S] [s] [n]
4.2参数说明
d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
p 通过指定监控进程ID来仅仅监控某个进程的状态。
q该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
S 指定累计模式
s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
i 使top不显示任何闲置或者僵死进程。
c 显示整个命令行而不只是显示命令名
4.3其他
下面介绍在top命令执行过程中可以使用的一些交互命令。从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。
Ctrl+L 擦除并且重写屏幕。
h或者? 显示帮助画面,给出一些简短的命令总结说明。
k 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
i 忽略闲置和僵死进程。这是一个开关式命令。
q 退出程序。
r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
S 切换到累计模式。
s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
f或者F 从当前显示中添加或者删除项目。
o或者O 改变显示项目的顺序。
l 切换显示平均负载和启动时间信息。
m 切换显示内存信息。
t 切换显示进程和CPU状态信息。
c 切换显示命令名称和完整命令行。
M 根据驻留内存大小进行排序。
P 根据CPU使用百分比大小进行排序。
T 根据时间/累计时间进行排序。
W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。

Linux find命令详解

由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下。即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权限。
在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)。
一、find 命令格式

1、find命令的一般形式为;

find pathname -options [-print -exec -ok ...]
2、find命令的参数;

pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为’command’ { } \;,注意{ }和\;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
3、find命令选项

-name
按照文件名查找文件。
-perm
按照文件权限来查找文件。
-prune
使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。
-user
按照文件属主来查找文件。
-group
按照文件所属的组来查找文件。
-mtime -n +n
按照文件的更改时间来查找文件, – n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项。
-nogroup
查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
-nouser
查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newer file1 ! file2
查找更改时间比文件file1新但比文件file2旧的文件。
-type
查找某一类型的文件,诸如:
b – 块设备文件。
d – 目录。
c – 字符设备文件。
p – 管道文件。
l – 符号链接文件。
f – 普通文件。
-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
-fstype:查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。
-mount:在查找文件时不跨越文件系统mount点。
-follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
-cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。
另外,下面三个的区别:
-amin n
查找系统中最后N分钟访问的文件
-atime n
查找系统中最后n*24小时访问的文件
-cmin n
查找系统中最后N分钟被改变文件状态的文件
-ctime n
查找系统中最后n*24小时被改变文件状态的文件
-mmin n
查找系统中最后N分钟被改变文件数据的文件
-mtime n
查找系统中最后n*24小时被改变文件数据的文件
4、使用exec或ok来执行shell命令

使用find时,只要把想要的操作写在一个文件里,就可以用exec来配合find查找,很方便的
在有些操作系统中只允许-exec选项执行诸如l s或ls -l这样的命令。大多数用户使用这一选项是为了查找旧文件并删除它们。建议在真正执行rm命令删除文件之前,最好先用ls命令看一下,确认它们是所要删除的文件。
exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{ },一个空格和一个\,最后是一个分号。为了使用exec选项,必须要同时使用print选项。如果验证一下find命令,会发现该命令只输出从当前路径起的相对路径及文件名。
例如:为了用ls -l命令列出所匹配到的文件,可以把ls -l命令放在find命令的-exec选项中
# find . -type f -exec ls -l { } \;
-rw-r–r– 1 root root 34928 2003-02-25 ./conf/httpd.conf
-rw-r–r– 1 root root 12959 2003-02-25 ./conf/magic
-rw-r–r– 1 root root 180 2003-02-25 ./conf.d/README
上面的例子中,find命令匹配到了当前目录下的所有普通文件,并在-exec选项中使用ls -l命令将它们列出。
在/logs目录中查找更改时间在5日以前的文件并删除它们:
$ find logs -type f -mtime +5 -exec rm { } \;
记住:在shell中用任何方式删除文件之前,应当先查看相应的文件,一定要小心!当使用诸如mv或rm命令时,可以使用-exec选项的安全模式。它将在对每个匹配到的文件进行操作之前提示你。
在下面的例子中, find命令在当前目录中查找所有文件名以.LOG结尾、更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示。
$ find . -name “*.conf” -mtime +5 -ok rm { } \;
? n
按y键删除文件,按n键不删除。
任何形式的命令都可以在-exec选项中使用。
在下面的例子中我们使用grep命令。find命令首先匹配所有文件名为“ passwd*”的文件,例如passwd、passwd.old、passwd.bak,然后执行grep命令看看在这些文件中是否存在一个sam用户。
# find /etc -name “passwd*” -exec grep “sam” { } \;
sam:x:501:501::/usr/sam:/bin/bash
二、find命令的例子;

1、查找当前用户主目录下的所有文件:

下面两种方法都可以使用
$ find $HOME -print
$ find ~ -print

2、让当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件;

$ find . -type f -perm 644 -exec ls -l { } \;
3、为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径;

$ find / -type f -size 0 -exec ls -l { } \;
4、查找/var/logs目录中更改时间在7日以前的普通文件,并在删除之前询问它们;

$ find /var/logs -type f -mtime +7 -ok rm { } \;
5、为了查找系统中所有属于root组的文件;

$find . -group root -exec ls -l { } \;
-rw-r–r– 1 root root 595 10月 31 01:09 ./fie1
6、find命令将删除当目录中访问时间在7日以来、含有数字后缀的admin.log文件。

该命令只检查三位数字,所以相应文件的后缀不要超过999。先建几个admin.log*的文件 ,才能使用下面这个命令
$ find . -name “admin.log[0-9][0-9][0-9]” -atime -7 -ok
rm { } \;
? n
? n
? n
? n
7、为了查找当前文件系统中的所有目录并排序;

$ find . -type d | sort
8、为了查找系统中所有的rmt磁带设备;

$ find /dev/rmt -print
三、xargs

xargs – build and execute command lines from standard input
在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现 溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。
find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。
在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高;
而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。
来看看xargs命令是如何同find命令一起使用的,并给出一些例子。
下面的例子查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件
#find . -type f -print | xargs file
./.kde/Autostart/Autorun.desktop: UTF-8 Unicode English text
./.kde/Autostart/.directory: ISO-8859 text\
……
在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中:
$ find / -name “core” -print | xargs echo “” >/tmp/core.log
上面这个执行太慢,我改成在当前目录下查找
#find . -name “file*” -print | xargs echo “” > /temp/core.log
# cat /temp/core.log
./file6
在当前目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限:
# ls -l
drwxrwxrwx 2 sam adm 4096 10月 30 20:14 file6
-rwxrwxrwx 2 sam adm 0 10月 31 01:01 http3.conf
-rwxrwxrwx 2 sam adm 0 10月 31 01:01 httpd.conf
# find . -perm -7 -print | xargs chmod o-w
# ls -l
drwxrwxr-x 2 sam adm 4096 10月 30 20:14 file6
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 http3.conf
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 httpd.conf
用grep命令在所有的普通文件中搜索hostname这个词:
# find . -type f -print | xargs grep “hostname”
./httpd1.conf:# different IP addresses or hostnames and have them handled by the
./httpd1.conf:# VirtualHost: If you want to maintain multiple domains/hostnames
on your
用grep命令在当前目录下的所有普通文件中搜索hostnames这个词:
# find . -name \* -type f -print | xargs grep “hostnames”
./httpd1.conf:# different IP addresses or hostnames and have them handled by the
./httpd1.conf:# VirtualHost: If you want to maintain multiple domains/hostnames
on your
注意,在上面的例子中, \用来取消find命令中的*在shell中的特殊含义。
find命令配合使用exec和xargs可以使用户对所匹配到的文件执行几乎所有的命令。
四、find 命令的参数

下面是find一些常用参数的例子,有用到的时候查查就行了,像上面前几个贴子,都用到了其中的的一些参数,也可以用man或查看论坛里其它贴子有find的命令手册
1、使用name选项

文件名选项是find命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用。
可以使用某种文件名模式来匹配文件,记住要用引号将文件名模式引起来。
不管当前路径是什么,如果想要在自己的根目录$HOME中查找文件名符合*.txt的文件,使用~作为 ‘pathname’参数,波浪号~代表了你的$HOME目录。
$ find ~ -name “*.txt” -print
想要在当前目录及子目录中查找所有的‘ *.txt’文件,可以用:
$ find . -name “*.txt” -print
想要的当前目录及子目录中查找文件名以一个大写字母开头的文件,可以用:
$ find . -name “[A-Z]*” -print
想要在/etc目录中查找文件名以host开头的文件,可以用:
$ find /etc -name “host*” -print
想要查找$HOME目录中的文件,可以用:
$ find ~ -name “*” -print 或find . -print
要想让系统高负荷运行,就从根目录开始查找所有的文件。
$ find / -name “*” -print
如果想在当前目录查找文件名以两个小写字母开头,跟着是两个数字,最后是.txt的文件,下面的命令就能够返回名为ax37.txt的文件:
$find . -name “[a-z][a-z][0--9][0--9].txt” -print
2、用perm选项

按照文件权限模式用-perm选项,按文件权限模式来查找文件的话。最好使用八进制的权限表示法。
如在当前目录下查找文件权限位为755的文件,即文件属主可以读、写、执行,其他用户可以读、执行的文件,可以用:
$ find . -perm 755 -print
还有一种表达方法:在八进制数字前面要加一个横杠-,表示都匹配,如-007就相当于777,-006相当于666
# ls -l
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 http3.conf
-rw-rw-rw- 1 sam adm 34890 10月 31 00:57 httpd1.conf
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 httpd.conf
drw-rw-rw- 2 gem group 4096 10月 26 19:48 sam
-rw-rw-rw- 1 root root 2792 10月 31 20:19 temp
# find . -perm 006
# find . -perm -006
./sam
./httpd1.conf
./temp
-perm mode:文件许可正好符合mode
-perm +mode:文件许可部分符合mode
-perm -mode: 文件许可完全符合mode
3、忽略某个目录

如果在查找文件时希望忽略某个目录,因为你知道那个目录中没有你所要查找的文件,那么可以使用-prune选项来指出需要忽略的目录。在使用-prune选项时要当心,因为如果你同时使用了-depth选项,那么-prune选项就会被find命令忽略。
如果希望在/apps目录下查找文件,但不希望在/apps/bin目录下查找,可以用:
$ find /apps -path “/apps/bin” -prune -o -print

4、使用find查找文件的时候怎么避开某个文件目录

比如要在/usr/sam目录下查找不在dir1子目录之内的所有文件
find /usr/sam -path “/usr/sam/dir1″ -prune -o -print
find [-path ..] [expression] 在路径列表的后面的是表达式
-path “/usr/sam” -prune -o -print 是 -path “/usr/sam” -a -prune -o
-print 的简写表达式按顺序求值, -a 和 -o 都是短路求值,与 shell 的 && 和 || 类似如果 -path “/usr/sam” 为真,则求值 -prune , -prune 返回真,与逻辑表达式为真;否则不求值 -prune,与逻辑表达式为假。如果 -path “/usr/sam” -a -prune 为假,则求值 -print ,-print返回真,或逻辑表达式为真;否则不求值 -print,或逻辑表达式为真。
这个表达式组合特例可以用伪码写为
if -path “/usr/sam” then
-prune
else
-print
避开多个文件夹
find /usr/sam \( -path /usr/sam/dir1 -o -path /usr/sam/file1 \) -prune -o -print
圆括号表示表达式的结合。
\ 表示引用,即指示 shell 不对后面的字符作特殊解释,而留给 find 命令去解释其意义。
查找某一确定文件,-name等选项加在-o 之后
#find /usr/sam \(-path /usr/sam/dir1 -o -path /usr/sam/file1 \) -prune -o -name “temp” -print

5、使用user和nouser选项

按文件属主查找文件,如在$HOME目录中查找文件属主为sam的文件,可以用:
$ find ~ -user sam -print
在/etc目录下查找文件属主为uucp的文件:
$ find /etc -user uucp -print
为了查找属主帐户已经被删除的文件,可以使用-nouser选项。这样就能够找到那些属主在/etc/passwd文件中没有有效帐户的文件。在使用-nouser选项时,不必给出用户名; find命令能够为你完成相应的工作。
例如,希望在/home目录下查找所有的这类文件,可以用:
$ find /home -nouser -print

6、使用group和nogroup选项

就像user和nouser选项一样,针对文件所属于的用户组, find命令也具有同样的选项,为了在/apps目录下查找属于gem用户组的文件,可以用:
$ find /apps -group gem -print
要查找没有有效所属用户组的所有文件,可以使用nogroup选项。下面的find命令从文件系统的根目录处查找这样的文件
$ find / -nogroup-print

7、按照更改时间或访问时间等查找文件

如果希望按照更改时间来查找文件,可以使用mtime,atime或ctime选项。如果系统突然没有可用空间了,很有可能某一个文件的长度在此期间增长迅速,这时就可以用mtime选项来查找这样的文件。
用减号-来限定更改时间在距今n日以内的文件,而用加号+来限定更改时间在距今n日以前的文件。
希望在系统根目录下查找更改时间在5日以内的文件,可以用:
$ find / -mtime -5 -print
为了在/var/adm目录下查找更改时间在3日以前的文件,可以用:
$ find /var/adm -mtime +3 -print
8、查找比某个文件新或旧的文件

如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用-newer选项。它的一般形式为:
newest_file_name ! oldest_file_name
其中,!是逻辑非符号。
查找更改时间比文件sam新但比文件temp旧的文件:
例:有两个文件
-rw-r–r– 1 sam adm 0 10月 31 01:07 fiel
-rw-rw-rw- 1 sam adm 34890 10月 31 00:57 httpd1.conf
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 httpd.conf
drw-rw-rw- 2 gem group 4096 10月 26 19:48 sam
-rw-rw-rw- 1 root root 2792 10月 31 20:19 temp
# find -newer httpd1.conf ! -newer temp -ls
1077669 0 -rwxrwxr-x 2 sam adm 0 10月 31 01:01 ./httpd.conf
1077671 4 -rw-rw-rw- 1 root root 2792 10月 31 20:19 ./temp
1077673 0 -rw-r–r– 1 sam adm 0 10月 31 01:07 ./fiel
查找更改时间在比temp文件新的文件:
$ find . -newer temp -print

9、使用type选项

在/etc目录下查找所有的目录,可以用:
$ find /etc -type d -print
在当前目录下查找除目录以外的所有类型的文件,可以用:
$ find . ! -type d -print
在/etc目录下查找所有的符号链接文件,可以用
$ find /etc -type l -print

10、使用size选项

可以按照文件长度来查找文件,这里所指的文件长度既可以用块(block)来计量,也可以用字节来计量。以字节计量文件长度的表达形式为N c;以块计量文件长度只用数字表示即可。
在按照文件长度查找文件时,一般使用这种以字节表示的文件长度,在查看文件系统的大小,因为这时使用块来计量更容易转换。
在当前目录下查找文件长度大于1 M字节的文件:
$ find . -size +1000000c -print
在/home/apache目录下查找文件长度恰好为100字节的文件:
$ find /home/apache -size 100c -print
在当前目录下查找长度超过10块的文件(一块等于512字节):
$ find . -size +10 -print
11、使用depth选项

在使用find命令时,可能希望先匹配所有的文件,再在子目录中查找。使用depth选项就可以使find命令这样做。这样做的一个原因就是,当在使用find命令向磁带上备份文件系统时,希望首先备份所有的文件,其次再备份子目录中的文件。
在下面的例子中, find命令从文件系统的根目录开始,查找一个名为CON.FILE的文件。
它将首先匹配所有的文件然后再进入子目录中查找。
$ find / -name “CON.FILE” -depth -print

12、使用mount选项

在当前的文件系统中查找文件(不进入其他文件系统),可以使用find命令的mount选项。
从当前目录开始查找位于本文件系统中文件名以XC结尾的文件:
$ find . -name “*.XC” -mount -print

linux环境下shell编程之时区转换

今天和同事一起讨论了一下时区转换的问题.
执行下面的语句:
TZ=’America/Los_Angeles’ date +”%Y-%m-%d %H” –date=”`TZ=’Asia/Shanghai’ date –date=”2008-10-10 15:00:00″`”

结果:2008-10-10 14
显然是错误的.

直接看一下后面的语句:TZ=’Asia/Shanghai’ date –date=”2008-10-10 15:00:00″
结果:Fri Oct 10 15:00:00 CST 2008

为什么呢?搜了一下,CST代表了很多时区:
CST Central Standard Time (USA) UT-6:00
CST Central Standard Time (Australia) UT+9:30
CST China Standard Time UT+8:00
CST Cuba Standard Time UT-4:00

原来很多系统里面CST都变成了GMT-6,也就是美国中部时间.

然后分别试了一下香港和台湾的时区,也都会被自动转为CST.

最后试了一下新加坡的时区:SGT(Asia/Singapore)

TZ=’America/Los_Angeles’ date +”%Y-%m-%d %H” –date=”`TZ=’Asia/Singapore’ date –date=”2008-10-10 15:00:00″`”

一切OK,

附录:各洲时区列表:http://us.php.net/manual/en/timezones.php

windows下一些启动服务的命令

1. gpedit.msc—–组策略
2. sndrec32——-录音机
3. Nslookup——-IP地址侦测器
4. explorer——-打开资源管理器
5. logoff———注销命令
6. tsshutdn——-60秒倒计时关机命令
7. lusrmgr.msc—-本机用户和组
8. services.msc—本地服务设置
9. oobe/msoobe /a—-检查XP是否激活
10. notepad——–打开记事本
11. cleanmgr——-垃圾整理
12. net start messenger—-开始信使服务
13. compmgmt.msc—计算机管理
14. net stop messenger—–停止信使服务
15. conf———–启动netmeeting
16. dvdplay——–DVD播放器
17. charmap——–启动字符映射表
18. diskmgmt.msc—磁盘管理实用程序
19. calc———–启动计算器
20. dfrg.msc——-磁盘碎片整理程序
21. chkdsk.exe—–Chkdsk磁盘检查
22. devmgmt.msc— 设备管理器
23. regsvr32 /u *.dll—-停止dll文件运行
24. drwtsn32—— 系统医生
25. rononce -p —-15秒关机
26. dxdiag———检查DirectX信息
27. regedt32——-注册表编辑器
28. Msconfig.exe—系统配置实用程序
29. rsop.msc——-组策略结果集
30. mem.exe——–显示内存使用情况
31. regedit.exe—-注册表
32. winchat——–XP自带局域网聊天
33. progman——–程序管理器
34. winmsd———系统信息
35. perfmon.msc—-计算机性能监测程序
36. winver———检查Windows版本
37. sfc /scannow—–扫描错误并复原
38. taskmgr—–任务管理器(2000/xp/2003

40. wmimgmt.msc—-打开windows管理体系结构(WMI)
41. wupdmgr——–windows更新程序
42. wscript——–windows脚本宿主设置
43. write———-写字板
44. winmsd———系统信息
45. wiaacmgr——-扫描仪和照相机向导
46.
47. mem.exe——–显示内存使用情况
48. Msconfig.exe—系统配置实用程序
49. mplayer2——-简易widnows media player
50. mspaint——–画图板
51. mstsc———-远程桌面连接
52. mplayer2——-媒体播放机
53. magnify——–放大镜实用程序
54. mmc————打开控制台
55. mobsync——–同步命令
56. dxdiag———检查DirectX信息
57. drwtsn32—— 系统医生
58. devmgmt.msc— 设备管理器
59. dfrg.msc——-磁盘碎片整理程序
60. diskmgmt.msc—磁盘管理实用程序
61. dcomcnfg——-打开系统组件服务
62. ddeshare——-打开DDE共享设置
63. dvdplay——–DVD播放器
64. net stop messenger—–停止信使服务
65. net start messenger—-开始信使服务
66. notepad——–打开记事本
67. nslookup——-网络管理的工具向导
68. ntbackup——-系统备份和还原
69. narrator——-屏幕“讲述人”
70. ntmsmgr.msc—-移动存储管理器
71. ntmsoprq.msc—移动存储管理员操作请求
72. netstat -an—-(TC)命令检查接口
73. syncapp——–创建一个公文包
74. sysedit——–系统配置编辑器
75. sigverif——-文件签名验证程序
76. sndrec32——-录音机
77. shrpubw——–创建共享文件夹
78. secpol.msc—–本地安全策略
79. syskey———系统加密,一旦加密就不能解开,保护windows xp系统的双重密码
80. services.msc—本地服务设置
81. Sndvol32——-音量控制程序
82. sfc.exe——–系统文件检查器
83. sfc /scannow—windows文件保护
84. tsshutdn——-60秒倒计时关机命令
85. tourstart——xp简介(安装完成后出现的漫游xp程序)
86. taskmgr——–任务管理器
87. eventvwr——-事件查看器
88. eudcedit——-造字程序
89. explorer——-打开资源管理器
90. packager——-对象包装程序
91. perfmon.msc—-计算机性能监测程序
92. progman——–程序管理器
93. regedit.exe—-注册表
94. rsop.msc——-组策略结果集
95. regedt32——-注册表编辑器
96. rononce -p —-15秒关机
97. regsvr32 /u *.dll—-停止dll文件运行
98. regsvr32 /u zipfldr.dll——取消ZIP支持
99. cmd.exe——–CMD命令提示符
100. chkdsk.exe—–Chkdsk磁盘检查
101. certmgr.msc—-证书管理实用程序
102. calc———–启动计算器
103. charmap——–启动字符映射表
104. cliconfg——-SQL SERVER 客户端网络实用程序
105. Clipbrd——–剪贴板查看器
106. conf———–启动netmeeting
107. compmgmt.msc—计算机管理
108. cleanmgr——-垃圾整理
109. ciadv.msc——索引服务程序
110. osk————打开屏幕键盘
111. odbcad32——-ODBC数据源管理器
112. oobe/msoobe /a—-检查XP是否激活
113. lusrmgr.msc—-本机用户和组
114. logoff———注销命令
115. iexpress——-木马捆绑工具,系统自带
116. Nslookup——-IP地址侦测器
117. fsmgmt.msc—–共享文件夹管理器
118. utilman——–辅助工具管理器
119. gpedit.msc—–组策略

vsftpd启动方式配置心得

今天服务器当机,重启后发现ftp无法使用.
[root@localhost ~]# ps -ef|grep ftp
test1     3112  3111  0 16:32 ?        00:00:00 /usr/libexec/openssh/sftp-server
user1      3358  3357  0 16:39 ?        00:00:00 /usr/libexec/openssh/sftp-server
果然ftp服务没有启动.

[root@localhost ~]# netstat -tuln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN
tcp        0      0 127.0.0.1:6010              0.0.0.0:*                   LISTEN
tcp        0      0 127.0.0.1:6011              0.0.0.0:*                   LISTEN
tcp        0      0 :::80                       :::*                        LISTEN
tcp        0      0 :::22                       :::*                        LISTEN
tcp        0      0 ::1:6010                    :::*                        LISTEN
tcp        0      0 ::1:6011                    :::*                        LISTEN

21端口也没有使用.

因为安装时没有记笔记,也几乎忘记了怎样启动,依稀记得当时是以xinetd的方式启动的,为此也查了很多资料.

试着执行下面的命令:
[root@localhost ~]# /usr/local/sbin/vsftpd start

出现下面的错误:
500 OOPS: vsftpd: cannot open config file:start

指定配置文件:
[root@localhost ~]# /usr/local/sbin/vsftpd /etc/vsftpd.conf

接着出现下面的提示:
500 OOPS: tcp_wrappers is set to YES but no tcp wrapper support compiled in

这时以为是防火墙没有启动,于是手动启了一下静态防火墙:
[root@localhost ~]#  service iptables start
Flushing firewall rules:                                   [  OK  ]
Setting chains to policy ACCEPT: filter                    [  OK  ]
Unloading iptables modules:                                [  OK  ]
Applying iptables firewall rules:                          [  OK  ]
Loading additional iptables modules: ip_conntrack_netbios_n[  OK  ]

重新执行上面的命令后依然出现上面的错误.于是查了一下tcp_wrappers到底有没有用,有篇文章介绍http://freebsd.lab.mlc.edu.tw/tcp_wrappers/

仔细想想可能还需要重新编译vsftp,只是安全方面的设置,暂时先注释掉试试...

没想到又出现了下面的问题:
500 OOPS: vsftpd: not configured for standalone, must be started from inetd

后面加上&号后,还是出现上面的错误.突然想起以前好像有人说过最好不要用xinetd启动,于是就查一下如何以standalone方式启.

步骤如下:
1).vi /etc/xinetd.d/vsftpd
将disable=no 改为 disable=yes

2).vi /etc/vsftpd.conf
将listen=no 改为 listen=YES

3).service xinetd stop, 停掉xinetd服务.

4)./usr/local/sbin/vsftpd /etc/vsftpd.conf &

启动成功!

再试一下一直搞不明白的被动模式,也可以用了!我想可能和standalone启动方式有关,也可能和tcp_wrappers有关,有待进一步研究.

使用dom4j的xPath解析XML

books.xml:
<?xml version=”1.0″ encoding=”UTF-8″?>
<books>
    <!–This is a test for dom4j, jakoes, 2007.7.19–>
    <book show=”yes” url=”lucene.net”>
        <title id=”456″>Lucene Studing</title>
    </book>
    <book show=”yes” url=”dom4j.com”>
        <title id=”123″>Dom4j Tutorials</title>
    </book>
    <book show=”no” url=”spring.org”>
        <title id=”789″>Spring in Action</title>
    </book>
    <owner>O’Reilly</owner>
</books>

下面我们使用dom4j的xPath来解析:

segment of ParseXML.java:

    public void parseBooks(){
       
        SAXReader reader = new SAXReader();
        try {
            Document doc = reader.read(“books.xml”);
            Node root = doc.selectSingleNode(“/books”);
            List list = root.selectNodes(“book[@url='dom4j.com']“);
           
            for(Object o:list){
               
                Element e = (Element) o;
                String show=e.attributeValue(“show”);
                System.out.println(“show = ” + show);
            }
          
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

  Document doc = reader.read(“books.xml”);的意思是加载XML文档,此是可以用doc.asXML()来查看,它将打印整个xml文档。

  Node root = doc.selectSingleNode(“/books”);是读取刚才加载的xml文档内的books节点下的所有内容,对于本例也是整个xml文档。
  当然我们也可以加载/books下的某一个节点,如:book节点
Node
root = doc.selectSingleNode(“/books/book”);
或:
Node root = doc.selectSingleNode(“/books/*”);
注意:如果有多个book节点,它只会读取第一个
root.asXML()将打印:
<book show=”yes” url=”lucene.net”>
        <title id=”456″>Lucene Studing</title>
</book>

  既然加载了这么多,那我怎么精确的得到我想要的节点呢,别急,看下面:
List list = root.selectNodes(“book[@url='dom4j.com']“);
它的意思就是读取books节点下的
book节点,且book的节点的url属性为dom4j.com
为什么使用list来接收呢,如果有两个book节点,且它们的url属性都为dom4j.com,此时就封闭到list里了。

  如果想读取books下的所有book节点,可以这样:
List list = root.selectNodes(“book”);

  如果想读取books节点下的book节点下的title节点,可以这样:
List list2 = root.selectNodes(“book[@url='dom4j.com']/title[@id='123']“);

  注意:selectNodes()参数的格式:
  节点名[@属性名='属性值'],如:
book[@url='dom4j.com']
  如果有多个节点,用“/”分开,如:
book[@url='dom4j.com']/title[@id='123']

  最近就是读取封闭在List里的内容了,可以用Node来读取,也可以用Element来转换。
attributeValue(“属性”)是读取该节点的属性值
getText()是读取节点的的内容。