2008-12-19

Linux 后台工作设置命令

用SSH管理linux服务器,有时可能要下载点大的软件或者文件包.又或者要打包一个上5G的文件夹,那是多么漫长的等待.

    更麻烦的是,下载的时候如果SSH 客户端N久没动作会断掉连接,于是下载到一半的东西也会跟着死掉.

    当然,你说我可以打开多个SSH客户窗口来操作,那我不得不说,这是个笨办法.

    比如我想打包一个文件夹,可以用如下的命令

    #tar zcvf file.tar.gz /path/document/*

    不想等,就把他放到后台去(后面加个&)

    #tar zcvf file.tar.gz /path/document/* &

    如果你要回来.就使用fg 命令

    我们想当然的,下载也是这样

    #wget http://www.phpv.net/file.tar.gz &

    但如果你超时或者有事离开而退出SSH 那正在下载的file.tar.gz 文件也会随之停下了...

    怎么办?让我们用nohup 来完成/

    NAME
    nohup - run a command immune to hangups, with output to a non-tty

    SYNOPSIS
    nohup COMMAND [ARG]...
    nohup OPTION

    DESCRIPTION
    Run COMMAND, ignoring hangup signals.

    --help display this help and exit

    --version
    output version information and exit

    REPORTING BUGS
    Report bugs to <bug-coreutils@gnu.org>.

    SEE ALSO
    The full documentation for nohup is maintained as a Texinfo manual. If
    the info and nohup programs are properly installed at your site, the
    command

    info nohup

    should give you access to the complete manual.

    以上是man nohup出来的.

    用法很简单,就在命令前加 nohup

    #nohup wget http://www.phpv.net/file.tar.gz

    nohup: appending output to `nohup.out'

    没反映...死机了?

    CTRL+Z 回到命令行模式...

    要避免上面的方法,就加个 & 在命令后面

    #nohup wget http://www.phpv.net/file.tar.gz &

    #

    好了.现在随便你怎样exit,睡一觉回来看,什么工作都完成了.

2008-12-18

Vi入门 的好文章

一、Unix编辑器概述

编辑器是使用计算机的重要工具之一,在各种操作系统中,编辑器都是必不可少的部件。Unix及其相似的ix操作系统系列中,为方便各种用户在各个不同的环境中使用,提供了一系列的ex编辑器,包括 ex, edit,ed 和vi.其中ex,edit,ed都是行编辑器,现在已很少有人使用,Unix提供他们的原因是考虑到满足各种用户特别是某些终端用户的需要。

值得庆幸的是,Unix提供了全屏幕的Vi编辑器,这使我们的工作轻松不少。不少DOS用户抱怨Vi编辑器不象DOS下的编辑器如edit那么好用,这是因为Vi考虑到各种用户的需要,没有使用某些通用的编辑键(在各个不同的终端机上他们的定义是不同的,在某些终端机上甚至没有这些键)。而是采用状态切换的方法,但这只是习惯的问题,一旦你熟练的使用上了vi你就会觉得它其实也很好用。虽然 Vi采用了状态切换的方法,但电脑的硬件及操作系统多种多样,某些电脑的键盘上没有特定的几个功能键!那麽不就有某些功能不能用了?这个问题在 Unix 系统上也一样,几乎各大电脑厂商都有自己的Unix 系统,而 vi 的操作方法也会随之有点出入。这里我们采用 PC 的键盘来说明 vi 的操作,但在具体的环境中还要参考相应的资料,这一点是值得注意的。

二、Vi入门

(一)、进入vi

在系统提示字符(如$、#)下敲入vi <档案名称>,vi 可以自动帮你载入所要编辑的文件或是开启一个新文件(如果该文件不存在或缺少文件名)。进入 vi 后萤幕左方会出现波浪符号,凡是列首有该符号就代表此列目前是空的。

(二)、两种模式

如上所述,vi存在两种模式:指令模式和输入模式。在指令模式下输入的按键将做为指令来处理:如输入a,vi即认为是在当前位置插入字符。而在输入模式下,vi则把输入的按键当作插入的字符来处理。指令模式切换到输入模式只需键入相应的输入命令即可(如a,A),而要从输入模式切换到指令模式,则需在输入模式下键入ESC键,如果不晓得现在是处於什麽模式,可以多按几次 [ESC],系统如发出哔哔声就表示已处于指令模式下了。

付:有指令模式进入输入模式的指令:

新增 (append)

a :从光标所在位置後面开始新增资料,光标後的资料随新增资料向後移动。

A: 从光标所在列最後面的地方开始新增资料。

插入 (insert)

i: 从光标所在位置前面开始插入资料,光标後的资料随新增资料向後移动。

I :从光标所在列的第一个非空白字元前面开始插入资料。

开始 (open)

o :在光标所在列下新增一列并进入输入模式。

O: 在光标所在列上方新增一列并进入输入模式。

(三)、退出vi

在指令模式下键入:q,:q!,:wq或:x(注意:号),就会退出vi。其中:wq和:x是存盘退出,而:q是直接退出,如果文件已有新的变化,vi会提示你保存文件而:q命令也会失效,这时你可以用:w命令保存文件后再用:q退出,或用:wq或:x命令退出,如果你不想保存改变后的文件,你就需要用:q!命令,这个命令将不保存文件而直接退出vi。

(四)、基本编辑

配合一般键盘上的功能键,像是方向键、[Insert] 、[Delete] 等等,现在你应该已经可以利用 vi 来编辑文件了。当然 vi 还提供其他许许多多功能让文字的处理更为方便。

何谓编辑?一般认为是文字的新增、修改以及删除,甚至包括文字区块的搬移、复制等等。先这里介绍 vi的如何做删除与修改。(注意:在 vi 的原始观念里,输入跟编辑是两码子事。编辑是在指令模式下操作的,先利用指令移动光标来定位要进行编辑的地方,然後才下指令做编辑。)

删除与修改文件的命令:

x: 删除光标所在字符。

dd :删除光标所在的列。

r :修改光标所在字元,r 後接著要修正的字符。

R: 进入取替换状态,新增文字会覆盖原先文字,直到按 [ESC] 回到指令模式下为止。

s: 删除光标所在字元,并进入输入模式。

S: 删除光标所在的列,并进入输入模式。

其实呢,在PC上根本没有这麽麻烦!输入跟编辑都可以在输入模式下完成。例如要删除字元,直接按[Delete] 不就得了。而插入状态与取代状态可以直接用 [Insert] 切换,犯不著用什麽指令模式的编辑指令。不过就如前面所提到的,这些指令几乎是每台终端机都能用,而不是仅仅在 PC 上。
在指令模式下移动光标的基本指令是 h, j, k, l 。想来各位现在也应该能猜到只要直接用 PC 的方向键就可以了,而且无论在指令模式或输入模式下都可以。多容易不是。
当然 PC 键盘也有不足之处。有个很好用的指令 u 可以恢复被删除的文字,而 U 指令则可以恢复光标所在列的所有改变。这与某些电脑上的 [Undo] 按键功能相同。
三、附件:vi详细指令表
(一)、基本编辑指令:
新增 (append)

a :从光标所在位置後面开始新增资料,光标後的资料随新增资料向後移动。

A: 从光标所在列最後面的地方开始新增资料。

插入 (insert)

i: 从光标所在位置前面开始插入资料,光标後的资料随新增资料向後移动。

I :从光标所在列的第一个非空白字元前面开始插入资料。

开始 (open)

o :在光标所在列下新增一列并进入输入模式。

O: 在光标所在列上方新增一列并进入输入模式。

x: 删除光标所在字符。

dd :删除光标所在的列。

r :修改光标所在字元,r 後接著要修正的字符。

R: 进入取替换状态,新增文字会覆盖原先文字,直到按 [ESC] 回到指令模式下为止。

s: 删除光标所在字元,并进入输入模式。

S: 删除光标所在的列,并进入输入模式。

(二)、光标移动指令:
由於许多编辑工作是藉由光标来定位,所以 vi 提供许多移动光标的方式,这个我们列
几张简表来说明(这些当然是指令模式下的指令):

指令 说明  功能键
0 移动到光标所在列的最前面 [Home]
$  移动到光标所在列的最後面 [End]
[CTRL][d] 向下半页  [PageDown]
[CTRL][f] 向下一页
[CTRL][u] 向上半页
[CTRL][b] 向上一页 [PageUp]

指令 说明
H 移动到视窗的第一列
M 移动到视窗的中间列
L 移动到视窗的最後列
b 移动到下个字的第一个字母
w 移缴细鲎值牡谝桓鲎帜?nbsp; 
e 移动到下个字的最後一个字母
^ 移动到光标所在列的第一个非空白字元

指令 说明 
n- 减号移动到上一列的第一个非空白字元前面加上数字可以指定移动到以上 n 列
n+ 加号移动到下一列的第一个非空白字元前面加上数字可以指定移动到以下 n 列
nG 直接用数字 n 加上大写 G 移动到第 n 列
指令 说明
fx
往右移动到 x 字元上
Fx 往左移动到 x 字元上 
tx 往右移动到 x 字元前
Tx 往左移动到 x 字元前
; 配合 f&t 使用,重复一次
, 配合 f&t 使用,反方向重复一次
/string 往右移动到有 string 的地方
?string 往左移动到有 string 的地方
n  配合 /&? 使用,重复一次
N  配合 /&? 使用,反方向重复一次

指令 说明 备注
n(
左括号移动到句子的最前面句子是以前面加上数字可以指定往前移动 n 个句子 ! . ? 三种符号来界定
n) 右括号移动到下个句子的最前面前面加上数字可以指定往後移动 n 个句子 ! . ? 三种符号来界定
n{  左括弧移动到段落的最前面 段落是以段落间的空白列界定
n} 前面加上数字可以指定往前移动 n 个段落右括弧移动到下个段落的最前面前面加上数字可以指定往後移动 n 个段落 段落是以段落间的空白列界定

(三)、更多的编辑指令
这些编辑指令非常有弹性,基本上可以说是由指令与范围所构成。例如 dw 怯缮境噶?nbsp;d 与范围 w 所组成,代表删除一个字 d(elete) w(ord) 。
指令列表如下:
d 删除(delete)
y 复制(yank)
p 放置(put)
c 修改(change)
范围可以是下列几个:
e 光晁谖恢玫礁米值淖钺嵋桓鲎帜?br> w 光标所在位置到下个字的第一个字母
b 光标所在位置到上个字的第一个字母
$ 光标所在位置到该列的最後一个字母
0 光标所在位置到该列的第一个字母
) 光标所在位置到下个句子的第一个字母
( 光标所在位置到该句子的第一个字母
} 光标所在位置到该段落的最後一个字母
{ 光标所在位置到该段落的第一个字母
说实在的,组合这些指令来编辑文件有一点点艺术气息。不管怎麽样,它们提供更多编辑文字的能力。值得注意的一点是删除与复制都会将指定范围的内容放到暂存区里,然後就可以用指令 p 贴到其它地方去,这是 vi 用来处理区段拷贝与搬移的办法。
某些 vi 版本,例如 Linux 所用的 elvis 可以大幅简化这一坨指令。如果稍微观察一下这些编辑指令就会发现问题其实是定范围的方式有点杂,实际上只有四个指令罢了。指令 v 非常好用,只要按下 v 键,光标所在的位置就会反白,然後就可以移动光标来设定范围,接著再直接下指令进行编辑即可。对於整列操作, vi 另外提供了更方便的编辑指令。前面曾经提到过删除整列文字的指令 dd 就是其中一个;cc 可以修改整列文字;而 yy 则是复制整列文字;指令 D 则可以删除光标到该列结束为止所有的文字。
(四)、文件操作指令
文件操作指令多以 : 开头,这跟编辑指令有点区别。
:q 结束编辑(quit)
:q! 不存档而要放弃编辑过的文件。
:w 保存文件(write)其後可加所要存档的档名。
:wq 即存档後离开。
zz 功能与 :wq 相同。
:x 与:wq相同

FTP命令使用实例

ftp命令是标准的文件传输协议的用户接口。ftp是在TCP/IP网络上的计算机之间传输文件的简单有效的方法。它允许用户传输ASCII文件和二进制文件。
在ftp会话过程中,用户可以通过使用ftp客户程序连接到另一台计算机上。从此,用户可以在目录中上下移动、列出目录内容、把文件从远程机拷贝到本地机上、把文件从本地机传输到远程系统中。需要注意的是,如果用户没有那个文件的存取权限,就不能从远程系统中获得文件或向远程系统传输文件。
为了使用ftp来传输文件,用户必须知道远程计算机上的合法用户名和口令。这个用户名/口令的组合用来确认ftp 会话,并用来确定用户对要传输的文件可以进行什么样的访问。另外,用户显然需要知道对其进行ftp 会话的计算机的名字或IP地址。


Ftp命令的功能是在本地机和远程机之间传送文件。该命令的一般格式如下:
$ ftp 主机名/IP
其中“主机名/IP”是所要连接的远程机的主机名或IP地址。在命令行中,主机名属于选项,如果指定主机名,ftp将试图与远程机的ftp服务程序进行连接;如果没有指定主机名,ftp将给出提示符,等待用户输入命令:
$ ftp
ftp >
此时在ftp>提示符后面输入open命令加主机名或IP地址,将试图连接指定的主机。
不管使用哪一种方法,如果连接成功,需要在远程机上登录。用户如果在远程机上有帐号,就可以通过ftp使用这一帐号并需要提供口令。在远程机上的用户帐号的读写权限决定该用户在远程机上能下载什么文件和将上载文件放到哪个目录中。
如果没有远程机的专用登录帐号,许多ftp站点设有可以使用的特殊帐号。这个帐号的登录名为anonymous(也称为匿名ftp),当使用这一帐号时,要求输入email地址作为口令。
如果远程系统提供匿名ftp服务,用户使用这项服务可以登录到特殊的,供公开使用的目录。一般专门提供两个目录:pub目录和incoming目录。pub目录包含该站点供公众使用的所有文件,incoming目录存放上载到该站点的文件。
一旦用户使用ftp在远程站点上登录成功,将得到“ftp>”提示符。现在可以自由使用ftp提供的命令,可以用 help命令取得可供使用的命令清单,也可以在 help命令后面指定具体的命令名称,获得这条命令的说明。
最常用的命令有:
ls 列出远程机的当前目录
cd 在远程机上改变工作目录
lcd 在本地机上改变工作目录
ascii 设置文件传输方式为ASCII模式
binary 设置文件传输方式为二进制模式
close 终止当前的ftp会话
hash 每次传输完数据缓冲区中的数据后就显示一个#号
get(mget) 从远程机传送指定文件到本地机
put(mput) 从本地机传送指定文件到远程机
open 连接远程ftp站点
quit 断开与远程机的连接并退出ftp

? 显示本地帮助信息
! 转到Shell中
下面简单将ftp常用命令作一简介。
启动ftp会话
open命令用于打开一个与远程主机的会话。该命令的一般格式是:
open 主机名/IP
如果在ftp 会话期间要与一个以上的站点连接,通常只用不带参数的ftp命令。如果在会话期间只想与一台计算机连接,那么在命令行上指定远程主机名或IP地址作为ftp命令的参数。
终止ftp会话
close、disconnect、quit和bye命令用于终止与远程机的会话。close和disronnect命令关闭与远程机的连接,但是使用户留在本地计算机的ftp程序中。quit和bye命令都关闭用户与远程机的连接,然后退出用户机上的ftp 程序。
改变目录
“cd [目录]”命令用于在ftp会话期间改变远程机上的目录,lcd命令改变本地目录,使用户能指定查找或放置本地文件的位置。
远程目录列表
ls命令列出远程目录的内容,就像使用一个交互shell中的ls命令一样。ls命令的一般格式是:
ls [目录] [本地文件]
如果指定了目录作为参数,那么ls就列出该目录的内容。如果给出一个本地文件的名字,那么这个目录列表被放入本地机上您指

Linux 基本命令

clear : linux清屏命令

1,ls
    ls -a 查看所有文件
    ls -l 查看详细的属性

文件大小查看: ls -sh

内存使用查看: ps aux

cpu使用查看:top

查看硬盘:df -k
看内存: top
查看操作系统本身: uname -a

内存:free,vmstat,
系统运行时间:uptime
CPU: cat /proc/cpuinfo
查看PCI设备:lspci

dmesg

 


2,lsattr
    查看文件的扩展属性,
    如果文件被 chattr +i   添加了写保护,
    用lsattr可以看到添加的属性

 


3,file
查看文件的类型
4,stat
    查看文件的状态

5. 后台运行

一般情况下,我们在命令后面加上&即可,实际上,这样是将命令放入到一个作业队列中了:$ ./test.sh &

对于已经在前台执行的命令,也可以重新放到后台执行,首先按ctrl+z暂停已经运行的进程,然后使用bg命令将停止的作业放到后台运行:

$ ./test.sh
[1]+ Stopped ./test.sh
$ bg %1
[1]+ ./test.sh &

 

apropos    依据所给关键字查找相关的命令和系统调用

  1. 格式:apropos keyword


    例:查找与ftp相关的命令和系统调用



    $apropos ftp


    注:类似的命令有man -k。man -k 其实就是执行apropos




  2. at    在某一特定时间执行指定的命令
    格式:at [-V][-q 队列][-f 文件][-m] time 


    选项说明:

    -V     显示标准的错误输出。


    -f     可将作业存在一个文件中,用这个选项指定文件。例如一个shell文件。


    -q     指定队列名称,默认为c。


    -m     执行后给用户发邮件。

    time 指定开始执行的时间。时间格式为: HH:MM,日期格式:MM/DD/YYMM.DD.YY或MMDDYY。 下面的例子演示了在2004年3月11日21点34分执行一个at命令。



    $at 21:34 03/11/04


    执行这条命令后会得到一条warning:

    commands will be executed using (in order) a)$SHELL b) login shell c)/bin/sh。然后就出现“at>”的提示符。这时你就可以输入你要执行的命令了,结束后按Ctrl+d。你就可以去喝茶了,到时间后系统会自动执行它。



    相关配置文件:


    /etc/at.allow 如果这个文件存在,仅允许这个文件里列出的用户使用at。



    /etc/at.deny 如果这个文件存在,该文件列出的用户都不能使用at服务。当 这个文件为空时,任何用户都可以使用at,这是默认配置。



    当运行at命令时,先检查/etc/at.allow文件是否存在,如果不存在,再检查 /etc/at.deny文件是否存在。不管这两个文件是不是存在,root用户都可以执行at命令。



    相关命令:


    atq:列出用户待执行的任务,除了root用户的外,每个用户的任务都将被列出。



    atrm:通过任务号删除at任务。



    batch:当系统负载允许的时候执行命令。比如当负载低于0.8或者一个指定的值时,指行atrun。




  3. cat    查看文件内容,从键盘读取数据,合并文件等
    格式:cat [-b][-A][-E][-T][-n][-s][-v] 文件名


    选项说明:

    -b     不显示文件中的空行。


    -A     相当于 -v -E -T (-vET)。


    -E     在文件的每一行行尾加上“$”字符。


    -T     将文件中的Tab键用字符“^I”来显示。


    -n     在文件的每行前面显示行号。


    -s     将连续的多个空行用一个空行来显示。


    -v     显示除Tab和Enter之外的所有字符。

    下面的命令演示了如何显示file文件中的行号



    $cat -n file



  4. chmod    修改文件权限
    格式:chmod 选项 文件或目录名


    选项说明:

    u     文件所有者


    g     文件所属组


    o     其它用户


    +     增加权限


    -     取消权限


    =     赋给权限


    a     所有用户


    r     读权限


    w     写权限


    x     执行权限

    下面的命令演示了如何使所有用户都可以读写file文件



    $chmod a+rw file



  5. chown    改变文件所有者
    格式:chown [-R][-c][用户名][组名] 文件或目录名


    选项说明:

    -c     文件属主改变时显示说明。


    -R/r    改变目录下的文件及其子目录下所有文件的属主。

    下面的命令演示了如何改变 dir 目录下的文件及其子目录下的文件的属主为bugboy



    $chown -R bugboy dir



  6. cp    复制文件
    格式:cp 选项 源文件名 目标文件名


    选项说明:

    -R     复制整个目录。


    -f     删除己存在的目标文件。


    -i     使用-f遇到删除文件时给出提示。

    下面的命令演示了如何把 file 文件复制到当前用户的根目录下



    $cp  file  ~/



  7. crontab     制定计划任务

    crontab通过cron服务使用户能够在指定的时间执行某些程序,它通过cron复制,创建列出,删除crontab文件来管理用户权限和计划。



    命令格式:crontab [-u username] [-l] [-e] [-r]


    选项说明:

    -e     编辑当前用户的crontab文件,或者当一个crontab文件不存在时,创建一个crontab 文件。编辑并保存后文件被当前用户的crontab安装。


    -l     列出当前crontab文件内容。


    -r     删除当前用户的crontab文件。


    -u username     指定用户名。

    crontab文件格式:



    crontab文件有六个域,每个域之间用空格或者Tab键分开,前五个域都是整数或者*,格式如下(括号里面是取值范围):



        分钟(0-59)	小时(0-23)  日(1-31)  月(1-12)  星期(0-6)  要执行的命令


    其中星期取值0指星期日,其它取值递推。前面五个域,每个域都可以用*表示所有合法的值,或者用一个列表列出合法的值,各值之间用“,”隔开,也可以用“-”表示一个范围。下面的命令演示每个星期,星期日到星期四晚上23:30分关机。



        30  23  *  *  0-4  halt -p


    下面的例子示出每星期星期一到星期五3:15分清除用户目录下的core文件



        15  3   *  * 1-5  find $HOME -name core 2>/dev/null |xargs rm -f


    下面是一个crontab文件的例子,请用crontab -e 命令编辑。



    SHELL=/bin/bash
    PATH=/usr/bin:/bin:/usr/sbin:/sbin
    MAILTO=bugboy
    HOME=/home/bugboy
    30 23 * * 0-4 halt -p


    前面四行定义环境变量,最后一行是执行的命令,你可以定义要执行多个命令。如果你的crontab文件已经正确编辑,保存退出后会得到一条"crontab:installing new crontab" 的信息。



    相关文件:


    /etc/cron.d/cron.allow     如果这个文件存在,文件中包含的用户名可以使用crontab。



    /etc/cron.d/cron.deny     如果这个文件存在,文件中包含的用户不能使用crontab。



    你可以自己编辑这两个文件,注意每个用户名占一行。




  8. df    查看磁盘剩余空间
    格式:df [-t][-x][-k][-p][-a][-m][filename]


    选项说明:

    -t     只输出类型列在fstype中的文件系统。


    -x     只输出类型没有列在fstype中的文件系统。


    -k     显示空间以K为单位。


    -m     显示空间以M为单位。


    -a     将空间为0的文件系统也输出。


    filename     指定要查看的文件的大小。


  9. fdisk/sfdisk   查看硬盘分区信息
    格式:fdisk -l [-u] [device ...]
    fdisk -s partition


    选项说明:

    -u   列出分区表的时候以扇区的大小代替柱面大小。


    -l   列出给定设备的分区表,如果没有给定设备,则列出/proc/partions中设备的分区表。


    -s partition   给出partition分区的大小(以块为单位)。


  10. file    识别文件类型
    格式:file 文件名



  11. find    查找文件
    格式:find [路径][匹配表达示]


    其中匹配表达示有几种类型:

    -name filename     查找指定名称的文件。


    -user username     查找指定用户名的文件。


    -group grpname     查找指定级名的文件。


    -print     显示查找的结果。


    -size n     查找大小为n块的文件,一块等于512字节。符号“+n”表示查找大小大于n块的文件;符号“nc”表示查找大小为n个字符的文件,同样的也有符号“+nc”。


    -inum n     查找索引结点号(i-node)为n的文件。


    -atime n    查找n天前被访问的文件。“+n”表示超过n天前被访问的文件;“-n”表示不超过n天前被访问的文件。


    -mtime n    类似于atime,但是检查的是文件内容被修改的时间。


    -ctime n   类似于atime,但检查的是文件索引结点被改变的时间。


    -perm mode     查找与给定权限匹配的文件,必须以八进制的形式给出访问权限。


    -newer file     查找比指定文件新的文件,即最后修改时间离现在较近。


    -exec command    对匹配文件执行command命令,command后用了个大括号包括文件名。command必须以反斜杠和一个分号结尾。


    -ok command     执行command的时候请求用户确认。其它与-exec相同。

    例:查找当前目录下所有以.bak结尾的文件,并删除它们
    $find . -name "*.bak" -exec rm {} \;


    注:这里 *.bak 必须要用单引号或者双引号引起来,或者可以写成\*.bak。




  12. head    输出文件内容前面的部分
    格式:head [选项][文件]……


    选项说明:

    -n     输出文件的前n行,默认输出10行。


    -c     指定输出文件的大小,单位为byte。


  13. kill    终止进程
    格式:kill [-s|p][-a] PID


    选项说明:

    -s     指明发送给进程的信号。例如-9(强行终止),默认发送TERM信号。


    -p     显示进程的ID,不发送信号。


    -a     终止所有进程。


    0     给所有在当前进程组中的进程发送信号。


    -1     给所有进程号大于1的进程发送信号。


  14. less    交互式显示文件内容
    格式:less 文件名


    说明:


    可以通过C-v(Page-Down)、C-b(Page-Up)向后向前翻页,C-p、C-n向后向前移一行。这个命令和后面要说的more命令都可以按q键退出。




  15. ln    在文件之间建立链接
    格式:ln [-b][-d][-F][-f][-i][-n][-s][-v] 源文件 目录文件或目录 


    选项说明:

    -b     为删除的文件建立备份。


    -d     允许root用户建立硬链接。


    -F     与b相同。


    -f     强行删除目标文件。


    -i     在删除文件时给出提示。


    -n     当目标文件是目录的符号链接时,替代该符号链接。


    -s     用符号链接代替硬链接(建立符号链接)。


    -v     输出被链接文件的文件名。


  16. ls    用于浏览目录,查看当前目录下的文件和文件名
    格式:ls [选项]


    选项说明:

    -a     显示所有文件(包括隐藏文件)。


    -l     显示文件的详细信息。


    -k     显示文件大小,以K为单位。


    -color     显示文件时用不同颜色加以区别文件类型。


    -d     将根目录作为文件显示。


  17. more    一页一页地显示文件内容
    格式:more [选项] 文件名


    选项说明:

    +n     由第n行开始显示


    +/str     由含有str字符串的地方开始显示。


  18. mount    加载文件系统
    格式:mount 磁盘或分区的设备文件 载入点 选项


    选项说明:

    -t     文件系统类型(fat32为vfat)


    -o     选项 常用的选项有codepage,iocharset(对于中文codepage=936,iocharset=gb2312)


    -loop     挂载ISO文件时用

    举个例子,挂载/dev/hda5到/mnt/wind目录下并且目录支持中文,命令如下:



    #mount -t vfat /dev/hda5 /mnt/wind -o codepage=936,iocharset=gb2312



  19. mv    重命名文件或移动文件
    格式:mv [-b][-f][-i][-u][-v] 源文件 目标文件或文件夹


    选项说明:

    -b     为源文件作备份


    -f     文件重命名时强制覆盖己有文件。


    -i     覆盖文件时给出提示。


    -u     目标文件比源文件新时不覆盖。


    -v     移动文件时给出相应的提示。


  20. oggenc   压缩音乐文件为.ogg格式
    格式:oggenc  文件名


    把*.wav文件压缩为*.ogg格式



    $oggenc *.wav


    同等条件下,ogg会比mp3获得较好的音乐效果




  21. ps    查看进程状态
    格式:ps [选项]


    选项说明:

    -e/A    列出所有进程。


    -u     选择有效的用户ID。


    -p     选择指定终端下的进程。


    -C     选择指定的文件名。


    -f     列出所有详细信息。


    -l     按长格式显示。


    -j     按job格式显示。


    -x     选择没有控制终端的进程。


  22. quota    显示磁盘的使用情况,一般用户可以查看自己使用磁盘的权限
    格式:quota [-g][-u][-v][-p] 用户名或组名


    选项说明:

    -g     显示用户所在组使用磁盘的权限。


    -u     显示用户自己使用磁盘的权限。


    -p     使显示信息简洁化。


  23. rename   批量修改文件名
    格式:rename from to file...


    选项说明:

    from   源字符。


    to    目标字符。


    file   要改名的文件

    下面的命令演示了把所有文件的后辍由rm改为rmvb



    $rename .rm .rmvb *


    下面的命令把所有文件名中的大写改为小写



    $rename 'tr/A-Z/a-z/' *



  24. rpm    redhat软件包管理工具
    格式:rpm [选项] 文件名|软件包名


    选项说明:

    --version     获得rpm程序的版本信息。


    -vv     获得详细的帮助信息。


    -v     打印冗长的信息,常与-i选项合用,获得安装进度。


    -i     安装软件包。


    -U     升级软件包,如果没有旧版的软件包就安装它。


    -F     更新软件包,当有旧的软件包的时候。


    --force     相当于--replacepkgs,--repalcefiles,--oldpackage。


    --nodigest     不验证软件包的独立性。


    --nosignature     不验证软件包或者页眉签名。


    --nodeps     不检查软件包的安装路径。


    --oldpackage     用新软件包替换旧软件包。


    --prefix PATH     指定软件包的安装路径。


    --relocate  OLDPATH=NEWPATH     把原来安装在“OLDPATH”下的软件包重新安装到“NEWPATH”去。


    --replacefiles     安装软件包,即使它们替换掉其它的文件。


    --replacepkgs     替换掉已经安装的同名软件包。


    -e|--erase     软件包名 删除软件包。


    --allmatches     删除软件包的所有版本。


    -q     查询已经安装的软件包。


    -a     选择所有软件包。


    -h     当解开软件包时,打印50个标记,通常与iv选项一起用。

    特别说明:


    在删除软件包时,软件包的名称不等于安装时的文件名。通常一个rpm包由软件包名称+版本号+发行号+发行平台+后辍构成。比如有个文件名为bugboy-1.01-1.i386.rpm,那么它的软件包名称是bugboy,版本号是1.0.1,发行号是1,发行平台是intel 386




  25. rm    删除文件或者目录
    格式:rm [-d][-i][-r][-v][-f] 文件名或目录名


    选项说明:

    -d     使用这个选项后,rm大体想当于unlink。


    -i     删除每个文件时给用户提示。


    -r     删除整个目录,包括文件和子目录。


    -v     删除每个文件时给出提示。


    -f     强制删除,并且不给提示。


  26. sox    转换音频文件
    格式:sox  [选项] from [选项] to


    选项说明:

    -t   文件格式。


    -r   采样频率。

    例:把file1.wav转换成file1.au文件



    $sox  file1.wav  file1.au


    把file1.wav 转换成file1.voc文件,并把采样频率由10000 Hz降为5000 Hz



    $sox  -r 10000 file1.wav -r 5000 file1.voc


    减小文件噪音,让文件通过低通滤波器



    $sox file1.wav file1.voc lowp 2200


    注:对于一些没有许可授权的文件格式,sox不支持




  27. su    改变当前用户的ID。


  28. tail    输出文件内容后面的部分
    格式:tail [选项] 文件名


    选项说明:

    -n     只显示后面的n行。


    -f     动太显示,常用于跟踪消息文件。


  29. tar    解压或压缩文件
    格式:tar [选项] 文件[文件1……] 目录[目录1……]


    选项说明:

    -A     将一个tar文件追加到一个存档中。


    -c     生成一个新的存档文件。


    --delete     从存档中删除。


    -r     将文件添加到一个存档的末尾。


    -l     列出一个存档的内容。


    -u     仅将些存档中内容较新的文件添加到存档中。


    -x     从存档中解压缩文件。


    -v     详细地列出处理过的文件的信息。


    -z     用gzip来处理文件。


    --remove-files     将文件解压之后就删除它们。


    -Z     用compress来处理文件。

    注意:选项中必须包含有A c d r t u x中的一个或多个。




  30. top     查看CPU的使用率,修改进程运行优先级
    格式:top 选项


    选项说明:

    -d delay    指定刷新的秒数。


    -p pid     查看指定pid的CPU使用率。

    默认情况下进程按CPU使用率排序,可按PID(N),时限(A),常驻内存使用率(M),时间(T),和CPU使用率(P)来排序。




  31. type     查看一个命令所在路径
    格式:type command   


    例:查找ls命令所在路径



    $type ls



  32. umount    卸载系统
    格式:umount 磁盘或分区的设备文件(也可以是载入点)



  33. useradd     添加用户或更新新创建用户的默认信息
     格式:useradd  选项 


    选项说明:

    -c comment    描述新用户帐号,通常为用户全名。


    -d home_dir    设置用户主目录,默认值为用户的登录名,并放在/home目录下。


    -D     创建新帐号后保存为新帐号设置的默认信息。


    -e expire_date     用MM/DD/YYYY格式设置帐号过期日期。


    -f inactivity    设置口令失效时间,该值为0使口令失效后帐号立即失效,为-1使该选项失效。


    -g    设置基本组。


    -k skel_dir    设置框架目录,该目录包含用户的初始配置文件,创建用户时该目录下的文件都被复制到用户主目录下。


    -m    自动创建用户主目录,并把框架目录(默认为/etc/skel)下的文件复制到用户主目录下。


    -M    不创建用户主目录。


    -r    允许保留的系统帐号使用用户ID创建一个新帐号。


    -s shell   指定用户的登录shell。


    -u user_id    设置用户ID。

    例:#useradd -m -g users -G Wheel,student  -s /bin/sh -c "Yan Dingcheng" bugboy


    例用usermod修改用户帐号时各选项与useradd命令相似。




  34. userdel    删除用户帐号
    格式:userdel username


    选项说明:

    -r     删除帐号时连同帐号主目录一起删除。

    注意:删除用户帐号时非用户主目录下的用户文件并不会被删除,管理员必须以find命令搜索删除这些文件。下面这条命令删除bugboy用户的所有文件:



    #find / -user bugboy -exec rm {} \;



  35. whatis     查看可以使用的man page和命令的基本功能介绍
    例:$whatis top



  36. whereis    定位可执行文件、源代码文件、帮助文件在文件系统中的位置
    格式:whereis [-bmsu] [BMS 目录名 -f ] 文件名


    选项说明:

    -b     定位可执行文件。


    -m     定位帮助文件。


    -s     定位源代码文件。


    -u     搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件。


    -B     指定搜索可执行文件的路径。


    -M     指定搜索帮助文件的路径。


    -S     指定搜索源代码文件的路径。


  37. w    查看登录用户和他们正在做什么
    格式:w [-hsfV] [user]


    选项说明:

    -h     不打印信息头。


    -s     使用短格式显示信息。


    -f     打印用户来源。


    -V     显示版本信息。


  38. who    查看当前用户的便当情况
    格式:who [-i][-u][-m]


    选项说明:

    -i     显示用户的活动状况。


    -u     与-i相同。


    -m     显示用户自身的情况。

2008-12-13

武汉公交滴神话--搞笑版

武汉公交滴神话~~~

看了个帖子,巨搞笑
1. 某天晚上从江汉路坐601,由于人多,都人挨人的。本人不幸站在自动投币箱边上,看着司机一脸惬意的在甩方向盘。到某站时,司机的神色一变,方向盘一甩,超过301巴士。在加速的那时候,前方又突现了一只比较名贵品种的狗,于是一个紧急刹车,狗得意的跑开了,我差点没扑在前面的玻璃上,回头一看,一车的人紧紧的贴在一起,脸是绿色的,特别安静,没有人说话……司机在几秒钟之内完成超车、加速、紧急刹车的过程。额的神啊!
当年长江大桥翻修的时候不让过,有个557司机不信邪说:大不了不上桥撒。
油门一踩,一个鲤鱼跃龙门,上到龟山顶才换到三档,直接腾空,汉口家乐福门口稳稳落地,然后进四档上立交桥。
车上有个不开眼的小p孩说什么柯受良什么的。
司机来一句:个斑马,我开557的时候,他还在幼儿园踩三轮咧~~~~~
2.来过武汉的和在武汉生活的人都应该知道武汉的521是多么的生猛和剽悍,特别是4 辆521在洪山广场做环形运动的时候,更是壮观.
不知道大家听说过关于521 的这两个神话没有。
一个是521 司机飚车的时候车轮起火了;
另一个是521 刹车的时候,一个乘客把那根直的铁扶手拉弯了……
每每跟同学们说起,同学们就会跟我说他们坐在521上面看着521一辆一辆的超taxi 时的壮观,想着1.2¥换来如此超值的服务是多么的爽。
2.有一回我坐521到中南路的丁字路口,两个521在一起.
我坐的车在后面,司机想超过前面那个521.
但是又是红灯.他又不想停到后头等到.么办列?
他就把车开到右拐的那个道上去了.结果被警察发现了.
他爽快的把本子递到警察 说"要扣就快点扣,我要赶时间."
警察面无表情的扣了分,么话都冒说.
司机以讯雷不及掩耳之势上车作好准备工作,就等绿灯一亮开始彪车.
后来绿灯一亮,马上加大油门抢左边的道.猛甩一盘子,结果当然是超过去了.
只听见后面不知道是哪个角落,有人叫"我的娘哦,你参刀的?"
3.武汉的公车确实非常快,我在武汉生活了n年,开得最快的就是521了。
沿线没有敢超521的。我坐了这多年,也就和车顶碰过百把回.
以前听别人在外面吹牛.....
答:我在武汉开521路公交。
旁人一阵羡慕的眼光……
4.大家在武汉坐车可以完全放心,武汉的公交车司机技术个个都很NB,因为不NB的已经死光了。
武汉的公共汽车最NB的不在于他的速度,而是不仅快而且不出事.
武汉公交车还有一个特点就是:
所有的车,其他地方可能都破烂不堪了,但是惟独刹车极灵,
关键时候绝对一脚就站住!
5. 活活,偶有一回坐729去汉口,在车辆厂门口,和543对飙了起来,一路飙一路骂啊,进站的时候,729一个内切,543立马一个急刹,我坐在靠窗的位置,543的车头离俺只有5公分啊,吓得俺从此再不坐最后一排。倒啊。来了广州,一点都体会不到公车的速度了,那个197,靠,我的一个体重120多的女同事居然每天都能追车,居然每天都能赶上……
武汉的公车……唉…… 真是……
特别是那些司机mm,抡方向盘像拧水龙头……
6.有一次半夜了,坐车从火车站出发,司机还是很负责的靠站停车。
有个小伙子就埋怨司机:半夜了,停个么斯车撒,又冒得人。
连说了好几次,司机毛了,加大马力,从青年广场上坡的时候车子都快飞起来了,一边开一边喊:下一站有没有下滴?!
没人回答他就飞奔而过,到长江大桥的时候,满车人都吓呆了,
那个小伙子自己也不行了,要下车了,司机说:拐子,够不够快?
小伙子下车后骂了一句:个斑马,又不是开F1,瞎几巴冲个卵子!!!
车上的人都笑翻了。那些勺笑滴,莫以为他们是在讲笑话,千真万确是这个样子滴。
7. 有一回坐552路去医学院那边找同学。车开动后就觉得有点不对劲,到了小洪山站就没停,到了八一路,总算停了。但那司机竟对着正要上车的乘客大喊:“快点上,我要赛车!!”我一下子大惊,只见后面竟然紧跟着一辆552。眼看着它已经超了过去,司机火了,加大油门一路狂追,连过十字路口也保持时速30公里简直太精彩了!!等到水果湖的时候,司机身上已经脱得只剩一条短裤,所有的乘客都在注视着司机和前面那辆552。终于,刚过水果湖不久,就超过了前面那辆,中间两车还对飚了大约30秒。在这30秒中,两位司机还不忘用语言来刺激对手,甚至还有手势。在超车的那一刹那,全车竟然起声叫好(我也发出了一点鼓励的声音)。真可谓武汉公交激情一飚。 有一次我从广埠屯到华工门口只用了七分钟……那个强啊,我差点飞起来……
8. 偶有天加班,晚上9点半的样子坐703(还是新换的那种加长空调车),因为在洪山的时候被甩了一盘子,司机郁闷了半天,车到15中的时候突然发彪,问了一句“大东门有没有下的”后开始狂奔。从15中到阅马场虽然只有2站路(中间一个立交桥),但只用了35秒的时间(车上有电子显示屏,所以时间很准确)。一路上最低时速在80码以上,没有不超的车子,全车人没有一个打瞌睡的,全部紧紧抱着前排扶手,死死的盯着车头玻璃,直到上大桥不得不减速了才松一口气。自始至终全车没有一个人说话,异常镇静!
9.上次晚上坐703,从循礼门到华工,25分钟!差点冒把我黑死~~~!! 记得当年坐521时,追前面一个521,那个速度啊!当时有人提醒要注意安全,结果司机一句话,我们全都不言语了,“前头那个都不怕死,我怕个么斯……”
武汉司机n个特点:
第一,女司机众多,并且个个是高音.
第二,武汉司机决不允许小巴士,taxi在他们前面晃悠。
第三,在路上遇到行人,一般不减速.
第四,进站凶猛,甩盘子通常就是这个时候派上大用场

2008-12-11

private 变量继承问题

核心一点,子类中不能访问父类的private 变量,但可以通过机场父类的public方法简介访问。

这是否也意味着private属性能被继承,这个逻辑上感觉有点混乱。

我比较认同的说法是:

private限制访问方式只能在类,的内部,   这仅仅是一个访问控制,   实际上子类对象拥有父类对象的一切.

 

不过无所谓了,细节上争论没什么意思,知道怎么回事怎么用就可以了。

子类构造方法执行过程

譬如有两个类ChineseTokenizing  和 FixedWeightEditDistance

其中 ChineseTokenizing extends FixedWeightEditDistance

那么ChineseTokenizing 中的构造方法不管是否有参数,执行时都是首先调用父类FixedWeightEditDistance的无参数构造方法,然后再执行ChineseTokenizing 构造方法中的语句。当然如果ChineseTokenizing 的构造方法如果显示调用了super,就另当别论了。跟踪下会很清楚

2008-12-09

Dom解析HTML 与 XML --java

 

解析HTML文档

用Dom解析HTML其实跟解析XML过程差不多的,主要区别就在如何把HTML OR XML parser成 org.w3c.dom.Document,经过这一步,后面的处理方法都一样了。

CyberNeko HTML Parser 是一个非常优秀的网页parser工具,可以用它来实现这一点。

其它的不多说,贴两个工具内出来,看看就能全部明白。


package org.dutir.util.dom;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;

import org.cyberneko.html.parsers.DOMParser;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

/**
* @author YeZheng
*
*/
public class HtmlFileToDocument {
    /**
     * Get the xml document from a url.
     *
     * @param url
     * @param encoding
     * @return
     * @throws IOException
     * @throws SAXException
     */
    public Document getDocument(URL url, String encoding) throws IOException,
            SAXException {
        InputStream inputStream = url.openStream();
        try {
            return getDocument(inputStream, encoding);
        } finally {
            inputStream.close();
        }
    }

    /**
     * Get the xml document from a html file.
     *
     * @param file
     * @param encoding
     * @return
     * @throws SAXException
     * @throws IOException
     */
    public Document getDocument(File file, String encoding)
            throws SAXException, IOException {
        FileInputStream inputStream = new FileInputStream(file);
        try {
            return getDocument(inputStream, encoding);
        } finally {
            inputStream.close();
        }
    }

    /**
     * Get the xml document from a html input stream.
     *
     * @param inputStream
     * @param encoding
     * @return
     * @throws SAXException
     * @throws IOException
     */
    public Document getDocument(InputStream inputStream, String encoding)
            throws SAXException, IOException {
        Reader reader = new InputStreamReader(inputStream, encoding);
        return getDocument(reader);
    }

    public Document getDocument(byte[] contents, String encoding) throws SAXException, IOException{
        ByteArrayInputStream bis = null ;
        try{
            bis = new ByteArrayInputStream(contents);
            return getDocument(bis, encoding);
        }finally{
            bis.close();
        }
    }
    /**
     * Get the xml dom document from a reader.
     *
     * @param characterStream
     * @return the xml dom of the character stream.
     * @throws SAXException
     * @throws IOException
     */
    public Document getDocument(Reader characterStream) throws SAXException,
            IOException {
        DOMParser parser = new DOMParser();
        // parser.setFeature(
        // "http://apache.org/xml/features/scanner/notify-builtin-refs",
        // true);
        InputSource inputSource = new InputSource();
        inputSource.setCharacterStream(characterStream);
        parser.parse(inputSource);
        return parser.getDocument();
    }
}

 

/**
*  Created on 2006-6-28 23:42:54
*/
package org.dutir.util.dom;

import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;

import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.dutir.parser.DomNodeHandle;
import org.dutir.util.LogFormatter;
import org.dutir.util.Pair;
import org.dutir.util.net.HtmlFormSelect;

import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;

import com.aliasi.util.Iterators.Array;

/**
*
* @author YeZheng
*/
public class DomNodeUtils {
    private static final Logger log = LogFormatter.getLogger(DomNodeUtils.class);
    /**
     * skip the "#text" node
     * @param node
     * @return
     */
    public static Node getNextSibling(Node node){
        Node nd = node.getNextSibling();
        if(nd != null &&nd.getNodeName().equals("#text")){
            return getNextSibling(nd);
        }
        return nd;
    }
    /**
     * A framework used to process diversity of nodes 
     * @param node
     */
    public static void recTravel(Node node, DomNodeHandle handle){
//        System.out.println(node.getNodeName());
        if(!handle.handle(node)){//if the node is not what we are interested, retrieve its chinldNodes
            NodeList nlist = node.getChildNodes();
            int len = nlist.getLength();
            for(int i=0; i < len; i++){
                Node nd = nlist.item(i);
                recTravel(nd, handle);
            }
        }
    }
    /**
     * Get all the text, include text in childNode
     * @param sb
     * @param node
     */
    public static void getText(StringBuffer sb, Node node) {
        if (node.getNodeType() == Node.TEXT_NODE) {
            sb.append(node.getNodeValue());// 取得结点值,即开始与结束标签之间的信息
        }
        //        System.out.println(node.getNodeName());
        NodeList children = node.getChildNodes();
        if (children != null) {
            int len = children.getLength();
            for (int i = 0; i < len; i++) {
                Node nd = children.item(i);
                    getText(sb, nd);// 递归遍历DOM树
            }
        }
    }
    public static String getText(Node node){
        StringBuffer buf = new StringBuffer();
        getText(buf, node);
        return buf.toString();
    }
    /**
     * get text only if the node is a text-like Node,
     * see the source, if you want to get a detailed point
     * @param node
     * @return
     */
    public static String getTextContent(Node node) {
        String ret = null;
//        System.out.println("node type:" + node.getNodeType());
        switch (node.getNodeType()) {
        case Node.ELEMENT_NODE:
        case Node.ATTRIBUTE_NODE:
        case Node.ENTITY_NODE:
        case Node.ENTITY_REFERENCE_NODE:
        case Node.DOCUMENT_FRAGMENT_NODE:
            Node child = node.getFirstChild();
            if (child != null) {
                ret = child.getNodeValue();
            }
            break;
        case Node.TEXT_NODE:
        case Node.CDATA_SECTION_NODE:
        case Node.COMMENT_NODE:
        case Node.PROCESSING_INSTRUCTION_NODE:
            ret = node.getNodeValue();
            break;
        case Node.DOCUMENT_NODE:
        case Node.DOCUMENT_TYPE_NODE:
        case Node.NOTATION_NODE:
            ret = null;
            break;
        }
        return ret;
    }

    public static String getTitle(org.w3c.dom.Document domdoc) {
        NodeList nodes = domdoc.getElementsByTagName("title");
        if(nodes== null || nodes.getLength() <1){
            return null;
        }
        return getTextContent(nodes.item(0));
    }
    /**
     *
     * @param node
     * @return
     * @deprecated Use {@link #getXmlAsString(Node)} instead.
     */
    public static String toString(Node node) {
        StringBuffer sb = new StringBuffer();
        if (node instanceof Text) {
            if (node.getNodeValue() != null) {
                byte[] bytes = node.getNodeValue().getBytes();
                List<Byte> newBytes = new ArrayList<Byte>();
                for (int i = 0; i < bytes.length; i++) {
                    if (bytes[i] == 63) {
                        byte[] bs = "&nbsp;".getBytes();
                        for (byte b : bs) {
                            newBytes.add(b);
                        }
                    } else {
                        newBytes.add(bytes[i]);
                    }
                }
                byte[] valueBytes = new byte[newBytes.size()];
                for (int i = 0; i < newBytes.size(); i++) {
                    valueBytes[i] = newBytes.get(i).byteValue();
                }
                sb.append(new String(valueBytes));
            }
        } else {
            sb.append("<").append(node.getNodeName());
            NamedNodeMap attrs = node.getAttributes();
            for (int j = 0; j < attrs.getLength(); j++) {
                sb.append(" ").append(attrs.item(j).getNodeName())
                        .append("=\"").append(attrs.item(j).getNodeValue())
                        .append("\"");
            }
            sb.append(">");
            if (node.hasChildNodes()) {
                NodeList children = node.getChildNodes();
                for (int i = 0; i < children.getLength(); i++) {
                    String str = toString(children.item(i));
                    if (str != null)
                        sb.append(str);
                }
            } else {
                sb.append(node.getNodeValue());
            }
            sb.append("</").append(node.getNodeName()).append(">");
        }
        return sb.toString();
    }

    public static Node getChildNodeByName(Node node, String tag){
        String name = node.getNodeName();
        if(tag.equalsIgnoreCase(name)){
            return node;
        }else{
            NodeList nlist = node.getChildNodes();
            for(int i=0, n = nlist.getLength(); i < n; i++){
                Node nl = nlist.item(i);
                getChildNodeByName(nl, tag);
            }
        }
        return null;
    }
    public static ArrayList<Pair> getLinks(Node node){
        ArrayList<Pair> retlist = new ArrayList<Pair>();
        getLinks(node, retlist);
        return retlist;
    }
    public static void getLinks(Node node, ArrayList<Pair> list) {
        if (node != null && node.getNodeName().equalsIgnoreCase("a")) {
            NamedNodeMap map = node.getAttributes();
            if(map != null ){
                Node nd = map.getNamedItem("href");
                if(nd !=null){
                    String link = nd.getNodeValue();
                    String anchor = DomNodeUtils.getText(node);
                    Pair <String, String> o= new Pair<String, String>(anchor, link);
                    list.add(o);
                }
            }
        } else {
            NodeList nlist = node.getChildNodes();
            for (int i = 0, n = nlist.getLength(); i < n; i++) {
                Node nl = nlist.item(i);
                getLinks(nl, list);
            }
        }
    }
    private static Transformer getTransformer() throws TransformerException {
        TransformerFactory factory = TransformerFactory.newInstance();
        Transformer transformer = factory.newTransformer();
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        transformer.setOutputProperty(OutputKeys.STANDALONE, "yes");
        transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
        return transformer;
    }

    /**
     * @param node
     * @return output of the node's xml string.
     * @throws TransformerException
     */
    public static String getXmlAsString(Node node) throws TransformerException {
        Transformer transformer = getTransformer();
        DOMSource source = new DOMSource(node);
        StringWriter xmlString = new StringWriter();
        StreamResult streamResult = new StreamResult(xmlString);
        transformer.transform(source, streamResult);
        return xmlString.toString();
    }

    /**
     * 获取某节点下的子节点(包括孙子……节点)的标签名为tagName的节点。
     *
     * @param node
     * @param tagName
     * @return
     */
    public static NodeList getElementsByTagName(Node node, String tagName) {
        // TODO
        return null;
    }

    /**
     * A <code>select</code> html element, parse it, and return the html form
     * select. pair.
     *
     * @param select
     *            a <code>select</code> html element.
     * @return the html form select.
     */
    public static HtmlFormSelect getSelect(Element select) {
        HtmlFormSelect hfs = new HtmlFormSelect();
//        if (log.isDebugEnabled()) {
//            try {
//                log.debug(getXmlAsString(select));
//            } catch (TransformerException e) {
//                log.warn(e);
//            }
//        }
        hfs.setName(select.getAttribute("name"));
        NodeList options = select.getElementsByTagName("option");
        if (options.getLength() == 0) {// Hack it as html and xhtml are not
            // same in capitalization-sensitivity.
            options = select.getElementsByTagName("OPTION");
        }
        List<String> candidateValues = new ArrayList<String>(options
                .getLength());
        List<String> candidateLabels = new ArrayList<String>(options
                .getLength());
        List<String> values = new ArrayList<String>(options.getLength());
        List<String> labels = new ArrayList<String>(options.getLength());
        String value, label;
        for (int i = 0; i < options.getLength(); i++) {
            Element option = (Element) options.item(i);
            value = option.getAttribute("value");
            label = option.getFirstChild().getNodeValue();
            candidateValues.add(value);
            candidateLabels.add(label);

            Node selectedNode = option.getAttributes().getNamedItem("selected");
//            log.debug("is selectedNode null: " + (selectedNode == null));
//            if (selectedNode != null) {
//                values.add(value);
//                labels.add(label);
//            }
        }

        // 如果没有任何被 selected,那么默认是选择的第一个。
        if (values.size() == 0 && options.getLength() != 0) {
            Element option = (Element) options.item(0);
            values.add(option.getAttribute("value"));
            labels.add(option.getFirstChild().getNodeValue());
        }

        String[] candidateValueStrings = new String[candidateValues.size()];
        candidateValues.toArray(candidateValueStrings);
        hfs.setCandidateValues(candidateValueStrings);
        String[] candidateLabelStrings = new String[candidateLabels.size()];
        candidateLabels.toArray(candidateLabelStrings);
        hfs.setCandidateLabels(candidateLabelStrings);

        String[] valueStrings = new String[values.size()];
        values.toArray(valueStrings);
        hfs.setValues(valueStrings);
        String[] labelStrings = new String[labels.size()];
        labels.toArray(labelStrings);
        hfs.setLabels(labelStrings);
        return hfs;
    }

}

 

 

Java解析XML文档(简单实例)——dom解析xml

一、前言

用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object Module)称为DOM。Sun公司提供了Java API for XML Parsing(JAXP)接口来使用SAX和DOM,通过JAXP,我们可以使用任何与JAXP兼容的XML解析器。
JAXP接口包含了三个包:
(1)org.w3c.dom W3C推荐的用于XML标准规划文档对象模型的接口。
(2)org.xml.sax 用于对XML进行语法分析的事件驱动的XML简单API(SAX)
(3)javax.xml.parsers解析器工厂工具,程序员获得并配置特殊的特殊语法分析器。


二、前提
DOM编程不要其它的依赖包,因为JDK里自带的JDK里含有的上面提到的org.w3c.dom、org.xml.sax 和javax.xml.parsers包就可以满意条件了。


三、使用DOM解析XML文档
我们现在来看看DOM是如何解析XML的吧!同样的,我将从一个简单的不能再简单的例子来说明DOM是如何解析XML文档的,先让我们看看XML是什么内容吧:
<?xml version="1.0" encoding="gb2312"?>
<books>
<book email="zhoujunhui">
<name>rjzjh</name>
<price>jjjjjj</price>
</book>
</books>
简单的不能再简单了。但是该有的都有了,根元素、属性、子节点。好了,能反应问题就行了,下面来看看解析这个XML文件的Java代码吧!
1 public class DomParse {
2 public DomParse(){
3 DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance();
4 try {
5 DocumentBuilder dombuilder=domfac.newDocumentBuilder();
6 InputStream is=new FileInputStream("bin/library.xml");
7 Document doc=dombuilder.parse(is);
8
9 Element root=doc.getDocumentElement();
10 NodeList books=root.getChildNodes();
11 if(books!=null){
12 for(int i=0;i<books.getLength();i++){
13 Node book=books.item(i);
14 if(book.getNodeType()==Node.ELEMENT_NODE){
15 String email=book.getAttributes().getNamedItem("email").getNodeValue();
16 System.out.println(email);
17 for(Node node=book.getFirstChild();node!=null;node=node.getNextSibling()){
18 if(node.getNodeType()==Node.ELEMENT_NODE){
19 if(node.getNodeName().equals("name")){
20 String name=node.getNodeValue();
21 String name1=node.getFirstChild().getNodeValue();
22 System.out.println(name);
23 System.out.println(name1);
24 }
25 if(node.getNodeName().equals("price")){
26 String price=node.getFirstChild().getNodeValue();
27 System.out.println(price);
28 }
29 }
30 }
31 }
32 }
33 }
34 } catch (ParserConfigurationException e) {
35 e.printStackTrace();
36 } catch (FileNotFoundException e) {
37 e.printStackTrace();
38 } catch (SAXException e) {
39 e.printStackTrace();
40 } catch (IOException e) {
41 e.printStackTrace();
42 }
43 }
44 public static void main(String[] args) {
45 new DomParse();
46 }
47 }
四、代码解释
先看看这个程序引用类:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
//下面主要是org.xml.sax包的类
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
上面那么简单的代码一看就明白了,但是为了介绍个DOM编程的大概还是来看看这个程序吧:
(1)得到DOM解析器的工厂实例
DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance();
得到javax.xml.parsers.DocumentBuilderFactory;类的实例就是我们要的解析器工厂
(2)从DOM工厂获得DOM解析器
DocumentBuilder dombuilder=domfac.newDocumentBuilder();
通过javax.xml.parsers.DocumentBuilderFactory实例的静态方法newDocumentBuilder()得到DOM解析器
(3)把要解析的XML文档转化为输入流,以便DOM解析器解析它
InputStream is=new FileInputStream("bin/library.xml");
InputStream是一个接口。
(4)解析XML文档的输入流,得到一个Document
Document doc=dombuilder.parse(is);
由XML文档的输入流得到一个org.w3c.dom.Document对象,以后的处理都是对Document对象进行的
(5)得到XML文档的根节点
Element root=doc.getDocumentElement();
在DOM中只有根节点是一个org.w3c.dom.Element对象。
(6)得到节点的子节点
NodeList books=root.getChildNodes();
for(int i=0;i<books.getLength();i++){
Node book=books.item(i);
}
这是用一个org.w3c.dom.NodeList接口来存放它所有子节点的,还有一种轮循子节点的方法,后面有介绍
(7)取得节点的属性值
String email=book.getAttributes().getNamedItem("email").getNodeValue();
System.out.println(email);
注意,节点的属性也是它的子节点。它的节点类型也是Node.ELEMENT_NODE
(8)轮循子节点
for(Node node=book.getFirstChild();node!=null;node=node.getNextSibling()){
if(node.getNodeType()==Node.ELEMENT_NODE){
if(node.getNodeName().equals("name")){
String name=node.getNodeValue();
String name1=node.getFirstChild().getNodeValue();
System.out.println(name);
System.out.println(name1);
}
if(node.getNodeName().equals("price")){
String price=node.getFirstChild().getNodeValue();
System.out.println(price);
}
}
这段代码的打印输出为:
null
alterrjzjh
jjjjjj
从上面可以看出
String name=node.getNodeValue(); 是一个空值。而
String name1=node.getFirstChild().getNodeValue(); 才是真正的值,这是因为DOM把<name>rjzjh</name>也当作是两层结构的节点,其父节点是<name>,子节点rjzjh才是我们真正想得到的。

实用英语:食品名称中英文对照

在海外,食品可在超级市场、传统摊位市场、杂货店购买到。而在大型超级市场更是主要的采购地点。海外的大型超市里商品分类清楚,很容易辨认。分类牌大多置于货架上方,或者两端。顾客可以非常方便的找到所要寻找的商品。

一般商品分类:

Biscuits饼干类

Snacks零嘴

Crisps各式薯片

Confectionery糖果类

PetFood宠物食品

Toiletries厕所用品

Cereals谷类食品

Poultry家禽类

Pickles各式腌菜

以下将常用的食品的中英对照作整理,以方便大家采购:

A.肉类(鸡,猪,牛)

1)鸡肉类:

FreshGradeLegs新鲜大鸡腿

FreshGradeBreast新鲜鸡胸肉

ChickenDrumsticks鸡腿

ChickenWings鸡翅膀

ChickenLiver鸡肝

其它部位及内藏,英国人都不吃,或给猫、狗吃的。

2)猪肉类:

MincedSteak肉馅

Pig’sLiver猪肝

Pig’sfeet猪脚

Pig’sKidney猪腰

Pig’sHearts猪心

PorkSteak无骨猪排

PorkChops带骨猪排

RolledPorkloin卷好的腰部瘦肉

RolledPorkBelly卷好的带皮猪腩

Porksausagemeat做香肠的绞肉

SmokedBacon醺肉

PorkFillet里肌肉

SpareRibPorkchops带肉猪小排

SpareRibofPork小排骨肉

Porkribs肋骨(可煮汤用)

BlackPudding黑香肠

PorkBurgers汉堡肉

Pork-pieces猪肉块

PorkDripping猪油滴

Lard猪油

Hock蹄膀

CasserolePork带骨的腿肉

Joint肘子

3)牛肉

StewingBeef小块的瘦肉

Steak&Kidney牛排肉加牛腰

Fryingsteak牛排

MincedBeef牛肉馅

RumpSteak牛后腿肉

LegBeef牛腱肉

OXTail牛尾

OXheart牛心

OXTongues牛舌

BarnsleyChops带骨的腿肉

ShoulderChops肩肉

PorterHouseSteak腰上的牛排肉

ChuckSteak牛肩胛肉(筋、油较多)

TenderisedSteak拍打过的牛排

[注]牛杂类在传统摊位市场才可买到,超级市场则不贩卖。有:

Roll牛肠

Cowhells牛筋

Pigbag猪肚

HoneycomeTripe蜂窝牛肚

TripePieces牛肚块

Bestthickseam白牛肚

B.海产类

1)鱼类:

Herring鲱鱼(青鱼)

Salmon鲑鱼(大马哈鱼)

Cod鳕鱼

Tuna鲔鱼(金枪鱼)

Plaice比目鱼

Octopus章鱼

Squid乌贼(鱿鱼)

Dressedsquid花枝

Mackerel鲭鱼

Haddock黑线鳕鱼

Trout鲑鱼(适合清蒸)

Carp鲤鱼

CodFillets鳕鱼块(可做鱼羹,或做成酥鱼片都很好吃)

Conger(Eel)海鳗

SeaBream海鲤

Hake鳕鱼类

RedMullet红鲣(胭脂鱼。可煎或红烧)

SmokedSalmon熏鲑鱼*

Smokedmackerelwithcrushedpeppercorn带有黑胡椒粒的熏鲭*

Herringroes鲱鱼子

BoiledCodroes鳕鱼子

(*以上两种鱼一般是用来烤着吃的。烤好后加柠檬汁十分美味:))

2)海鲜类:

Oyster牡蛎

Mussel蚌类(黑色、椭圆形。没壳的即为淡菜)

Crab螃蟹

Prawn虾

Crabstick蟹肉条

PeeledPrawns虾仁

KingPrawns大虾

Winkles田螺

WhelksTops小螺肉

Shrimps小虾米

Cockles小贝肉

Lobster龙虾

C.蔬果类

Potato马铃薯(土豆),Carrot红萝卜

Onion洋葱,Aubergine茄子

Celery芹菜,WhiteCabbage包心菜

Redcabbage紫色包心菜,Cucumber黄瓜

Tomato蕃茄,Radish小红萝卜

Mooli白萝卜,Watercress西洋菜

Babycorn玉米尖,Sweetcorn玉米

Cauliflower菜花,Springonions小葱

Garlic大蒜,Ginger姜

Chineseleaves大白菜(绍菜。国内有些地方也称津白),Leeks大葱

Mustardcress芥菜苗,GreenPepper青椒

Redpepper红椒,Yellowpepper黄椒

Mushroom圆菇,Broccoli西兰花菜(椰菜花)

Courgettes小胡瓜(荀瓜,西葫芦),Coriander香菜(芫荽)

DwarfBean四季豆(豇豆),FlatBeans豌豆角

Iceberg生菜,Lettuce生菜

SwedeorTurnip芜菁(甘蓝)Okra秋葵(东南亚菜系常见的用菜)

Chilli辣椒,Eddoes小芋头

Taro芋头,Sweetpotato蕃薯

Spinach菠菜,Beansprots绿豆芽

Peas碗豆,Corn玉米粒

Sprout高丽小菜心

D水果类:

Lemon柠檬,Pear梨

Banana香蕉,Grape葡萄

Goldenapple黄绿苹果、脆甜,Grannysmith绿苹果、较酸

Bramleys可煮食的苹果,Peach桃子

Orange橙子,Strawberry草莓

Mango芒果,Pineapple菠萝

Kiwi猕猴桃(奇异果),Starfruit杨桃

Honeydew-melon蜜瓜,Cherry樱桃

Date枣,Lychee荔枝

Grapefruit葡萄柚,Coconut椰子

Fig无花果

E.其它:

1)米:

Longrice长米(较硬,煮前先泡一个小时)Puddingriceorshortrice短米

Brownrice高粱米

THAIFragrantrice泰国香米*,Glutinousrice糯米*

*可在中国商店买到。

2)面粉:

Strongflour高筋面粉,Plainflour中筋面粉

Self-raisingflour自发粉,Wholemealflour小麦面粉

3)糖:

Brownsugar红砂糖,DarkBrownSugar红糖(感冒时可煮姜汤时用)

Custersugar白砂糖,IcingSugar糖粉(可用在打鲜奶油及装饰蛋糕外层)

RockSugar冰糖

F:关于中国超市

海外许对大中城市均有中国城,货品相当繁多,下列只是平时较常用的材料。

无忧雅思网助我越重洋!

Noodles面条,Instantnoodles方便面

Soysauce酱油:(分LightSoySauce生抽,及DarkSoySauce老抽两种),Vinger醋

Cornstarch太白粉(生粉,淀粉),Maltose麦芽糖

SesameSeeds芝麻,Sesameoil麻油

Oystersauce濠油,Pepper花椒

Redchillipowder辣椒粉,Sesamepaste芝麻酱

Beancurdsheet腐竹皮,Tofu豆腐

Sago西米,CreamedCoconut椰膏

Monosidumglutanate味精,Chineseredpepper花椒

Saltblackbean豆鼓,Driedfish鱼干

SeavegetableorSeaweed海带,Greenbean绿豆

RedBean红豆,Blackbean黑豆

Redkidneybean大红豆,Driedblackmushroom冬菇

Pickledmustard-green酸菜,Silknoodles粉丝

Agar-agar燕菜,Rice-noodle米粉

Bambooshoots竹笋罐头,Staranise八角

Wantunskin馄饨皮,Driedchestuts干粟子

Tigerlilybuds金针菇,Reddate红枣

Waterchestnuts荸荠罐头,Mu-er木耳

Driedshrimps海米,Cashewnuts腰果

常见西餐名称

西餐
Western-style food; Western-style cuisine; Western-style dish
西式自助餐 Western buffet
西式冷餐 Western buffet
冷餐 buffet
1.冷菜 cold dish
1)沙拉 salad
沙拉 salad
色拉 salad
火腿沙拉 ham salad
鸡沙拉 chicken salad
鸡脯沙拉 chicken-breast salad
鸡丝沙拉 shredded chicken salad
鸡蛋沙拉 egg salad
鱼片沙拉 fish salad
虾仁沙拉 shrimp salad
大虾沙拉 prawn salad
蟹肉沙拉 crab salad
素沙拉 vegetable salad
蔬菜沙拉 vegetable salad
鲜蔬菜沙拉 fresh vegetable salad
黄瓜沙拉 cucumber salad
鲜黄瓜沙拉 fresh cucumber salad
奶油黄瓜沙拉 cucumber salad with cream
西红柿黄瓜沙拉 cucumber salad with tomato
西红柿沙拉 tomato salad
甜菜沙拉 beetroot salad
红菜头沙拉 beetroot salad
沙拉油 salad dressing; mayonnaise
沙拉酱 salad dressing; mayonnaise
2)肉 meat
冷杂拌肉 cold mixed meat
冷什锦肉 cold mixed meat
冷肉拼香肠 cold meat and sausage
冷火腿蔬菜 cold ham with vegetables
什锦肉冻 mixed meat jelly
肝泥 mashed liver; live paste
牛肝泥 mashed ox liver; ox liver paste
牛脑泥 mashed ox brain; ox brain paste
冷烤牛肉 cold roast beef
冷烤里脊 cold roast fillet
冷烤羔羊腿 cold roast lamb leg
冷烤猪肉 cold roast pork
冷烩茶肠 cold stewed sausage
冷茶肠 cold sausage
奶酪 cheese
3)鱼 fish
红烩鱼片 stewed fish slices with brown sauce
茄汁烩鱼片 stewed fish slices with tomato sauce
鸡蛋鲱鱼泥子 minced herring with eggs
鸡蛋托鲱鱼 herring on eggs
熏鲱鱼 smoked herring
熏鲤鱼 smoked carp
沙丁油鱼 sardines
鱼肉冻 fish jelly
酿馅鱼 stuffed fish
红鱼子酱 red caviar
黑鱼子酱 black caviar
大虾泥 minced prawns
蟹肉泥 minced crab meat
4)家禽 poultry
鸡肉冻 chicken jelly; chicken in aspic
水晶鸡 chicken in aspic
鸡肉泥 minced chicken meat; chicken paste
鸡肝泥 minced chicken liver; chicken liver paste
鸭肝泥 minced duck liver; duck liver paste
酿馅鸡蛋 stuffed eggs
奶酪酿馅鸡蛋 stuffed eggs with cheese
酿馅鸡 stuffed chicken
冷烤油鸡蔬菜 cold roast chicken with vegetables
冷烤火鸡 cold roast turkey
冷烤山鸡 cold roast pheasant
冷烤野鸡 cold roast pheasant
冷烤鸭 cold roast duck
冷烤野鸭 cold roast wild duck
烤鸭冻粉 roast duck jelly
冷烤鹅 cold roast goose
冷烤野鹅 cold roast wild goose
5)素菜 vegetable dish
什锦蔬菜 assorted vegetables
红烩茄子 stewed egg-plant brown sauce
酿青椒 stuffed green pepper
酿西红柿 stuffed tomato
酸蘑菇 sour mushrooms
酸黄瓜 sour cucumbers; pickled cucumbers
泡菜 pickled cabbage; sour and sweet cabbage
2.热小菜 appetizers
奶油烩香肠 stewed sausage with cream
红烩灌肠 stewed sausage with brown sauce
红酒汁烩腰花 stewed kidney with red wine; kidney with red wine
奶油烩腰花 stewed kidney with cream; kidney with cream
芥末煎火腿豌豆 fried ham and peas with mustard
奶油煎火腿豌豆 fried ham and peas with cream
奶油汁煎牛肝 fried liver with cream sauce; liver with cream sauce
鸡蛋汁煎鲱鱼 fried herring with egg sauce
奶酪口蘑烤鱼 fish au gratin
奶酪口蘑烤蟹肉 crab meat au gratin
奶油奶酪口蘑烤蟹肉 crab meat au gratin with cream
清煎鸡蛋 fried eggs
火腿煎蛋 fried eggs with ham; ham and eggs
火腿蛋 fried eggs with ham; ham and eggs
咸肉煎蛋 fried eggs with bacon; bacon and eggs
香肠煎蛋 fried eggs with sausage; sausage and eggs
清炒鸡蛋 omelette/omelet
香肠炒蛋 sausage omelette/omelet
火腿炒蛋 ham omeletter/omelet
番茄炒蛋 tomato omelette/omelet
菜花沙蛋 cauliflower omelette/omelet
豌豆炒蛋 green peas omelette/omelet; omelette/omelet with green peas
鲜蘑炒蛋 mushroom omelette/omelet; omelette/omelet with mushrooms
果酱炒蛋 jam omelette/omelet; omelette/omelet with jam
3.汤 soup
清汤 light soup; clear soup; consomme
浓汤 thick soup; potage
肉汤 broth
奶油火腿汤 creamed ham soup; ham soup with cream
奶油鸡茸汤 creamed mashed chicken soup; mashed chicken soup with cream
奶油蟹肉汤 creamed crab meat soup; crab meat soup with cream
奶油口蘑解肉汤 creamed mushroom soup with crab meat
奶油大虾汤 creamed prawn soup; prawn soup with cream
奶油鲍鱼汤 creamed abalone soup; abalone soup with cream
奶油龙须菜汤 creamed asparagus soup; asparagus soup with cream
奶油芦笋汤 creamed asparagus soup; asparagus soup with cream
奶油菜花汤 creamed cauliflower soup; cauliflower soup with cream
奶油口蘑汤 creamed mushroom soup; mushroom soup with cream
奶油口蘑菜花汤 creamed mushroom soup with cauliflower
奶油西红柿汤 creamed tomato soup; tomato soup with cream
奶油蕃茄汤 creamed tomato soup; tomato soup with cream
奶油菠菜汤 creamed spinach soup; spinach soup with cream
奶油菠菜泥汤 creamed mashed spinach soup; mashed spinach soup with cream
奶油豌豆汤 creamed peas soup; peas soup with cream
奶油豌豆泥汤 creamed mashed peas soup; mashed peas soup with cream
肉杂拌汤 mixed meat soup
牛尾汤 ox-tail soup
牛肉丸子汤 beef balls soup
牛肉蔬菜汤 beef soup with vegetables
牛肉茶 beef tea
冷牛肉茶 cold beef tea
鸡汤 chicken soup
口蘑鸡汤 chicken soup with mushrooms
番茄鸡汤 chicken soup with tomato
鸡腿蔬菜汤 chicken leg soup with vegetables
咖哩鸡丁汤 curry chicken cubes soup
鸡块汤 chicken chips soup
鸡块面条汤 noodles soup with chicken chips
鸡块大米汤 rice soup with chicken chips
高加索鸡块汤 chicken soup a la Caucasus
鸡球蔬菜汤 chicken meatballs soup with vegetables
鸡杂汤 chicken giblets soup
鸡杂菠菜汤 chicken giblets soup with spinach
鱼汤 fish soup
家常鱼汤 fish soup in home style
红鱼汤 fish soup with tomato
红菜汤 borsch
蔬菜汤 vegetables soup; soup with vegetables
丸子蔬菜汤 meat balls soup with vegetables
酸菜汤 sour cabbage soup
龙须菜汤 soup with asparagus
葱头汤 onion soup
洋葱汤 onion soup
西红柿汤 tomato soup
番茄汤 tomato soup
白豆汤 white beam soup
豌豆汤 pea soup
豌豆泥汤 mashed pea soup
清汤肉饼 consomme with meat pie
面球汤 dumplings soup
通心粉汤 soup with macaroni
通心粉清汤 consomme with macaroni
番茄通心粉汤 tomato soup with macaroni
清汤卧果 consomme with poached eggs
4.鱼虾 fish and prawn
炸桂鱼 fried mandarin fish
土豆炸桂鱼 fried mandarin fish with potatoes
番茄汁炸鱼 fried fish with tomato sauce
奶油汁炸鱼 fried fish with cream sauce
鞑靼式炸鱼 fried fish with Tartar sauce
鞑靼汁炸鱼 fried fish with Tartar sauce
清煎鲤鱼 fried carp
火腿汁煎鱼 fried fish with ham sauce
俄式煎鱼 fish a la Russia
罐焖鱼 fish a la Duchesse
罐焖桂鱼 mandarin fish a la Duchesse
火锅鱼片 fish podjarka
火锅鱼虾 fish and prawns podjarka
火锅大虾 prawns podjarka
炭烧鱼串 fish shashlik
炭烧鱼段 fish chips shashlik
铁扒桂鱼 grilled mandarin fish
铁扒比目鱼 grilled turbot
奶油汁烤鱼 baked fish with cream sauce
鱼排 fish steak
奶油口蘑烤桂鱼 mandarin fish au gratin
奶酪口蘑烤鱼虾 fish and prawns au gratin
白汁蒸鱼 steamed fish with white
白酒汁蒸鱼 steamed fish with white wine
红酒蒸鱼 steamed fish with red wine
番茄汁蒸鱼 steamed fish tomato sauce
柠檬汁蒸鱼 steamed fish with lemon sauce
鸡蛋汁蒸鱼 steamed fish with egg sauce
口蘑汁蒸鱼 steamed fish with mushroom sauce
红汁蘑菇蒸鱼 steamed fish with mushrooms and brown sauce
番茄汁蘑菇蒸鱼 steamed fish with mushrooms and tomato sauce
波兰式蒸鱼 steamed fish a la Poland
土豆煮鱼 boiled fish with potatoes
黄油汁土豆煮鱼 boiled fish and potato with butter sauce
炸大虾 fried prawns
炸明虾 fried prawns
软煎大虾 soft-fried prawns
黄油汁煎大虾 fried prawns with butter sauce
罐焖大虾 prawns a la Duchesse
奶酪口蘑烤大虾 prawns au gratin
火腿奶酪炸大虾 fried prawns with ham and cheese
铁扒大虾 grilled prawns
大虾蛋奶酥 prawn souffle
5.素菜 vegetable dish
奶酪口蘑烤蔬菜 vegetables au gratin
黄油菜花 cauliflower with butter
黄油杂拌蔬菜 mixed vegetables with butter
菠菜卧果 spinach with poached egg
奶油汁烤口蘑 baked mushrooms with cream sauce
黄油炒口蘑 fried mushrooms with butter
黄油炒菠菜 fried spinach with butter
黄油炒豌豆 fried peas with butter
黄油炒青豆 fried green peas with butter
炒茄泥 fried mashed egg plants
炸茄子片 fried egg-plant slices
炸番茄 fried tomato
清煎土豆饼 fried potato cake
酿馅西葫芦 stuffed bottle gourd
焖洋白菜卷 braised cabbage rolls
家常焖洋白菜卷 braised cabbage rolls
烩茄子 stewed egg plants
奶油汁烩豌豆 stewed peas with cream sauce
扁豆炒蛋 omelette/omelet with green beans
咖哩素菜 curry vegetables
6.鸡鸭 chicken and duck
烤鸡 roast chicken
烤油鸡 roast chicken
素菜烤鸡 roast chicken with vegetables
棒棒鸡 bon bon chicken
煎鸡 fried chicken
炸笋鸡 fried spring chicken
炸鸡 deep-fried chicken
炸鸡肉串 fried chicken shashlik
鸡肝串 chicken liver shashlik
通心粉煮鸡 boiled chicken with macaroni
奶汁煮鸡 boiled chicken with cream sauce
铁扒笋鸡 grilled spring chicken
焖鸡 braised chicken
家常焖鸡 braised chicken in home style
黄油焖鸡 braised chicken with butter
黄油焖笋鸡 braised spring chicken with butter
黄油焖鸡腿 braised chicken legs with butter
红焖鸡块 braised chicken chips
火锅鸡 podjarka chicken
罐焖鸡 chicken a la Duchesse
罐焖笋鸡 spring chicken a la Duchesse
高加索焖鸡 chicken a la Caucasus
比利时烩鸡 Belgian stewed chicken
奶油烩鸡片 stewed chicken slices with cream
米饭烩鸡鸭 stewed chicken and duck with rice
奶油烩鸡饭 stewed chicken and rice with cream
咖哩鸡饭 curry chicken with rice
细面条白汁鸡腿 chicken legs with spaghetti
鸡肉蛋奶酥 chicken souffle
烤鸭 roast duck
酸菜烤鸭 roast duck with sour cabbage
罐焖鸭 duck a la Duchesse
黄油汁煎鸭肝 fried duck liver with butter sauce
烤野鸭 roast wild duck
酸菜烤野鸭 roast wild duck with sour cabbage
蔬菜烤鸡鸭 roast chicken and duck with vegetables
7.野味 game
黄油焖鸽子 braised pigeon with butter; braised dove with butter
苹果汁烤火鸡 roast turkey with apple sauce
咸肉焖山猫 braised hare with bacon
山鸡串 pheasant shashlik
酸菜烤野鹅 roast wild goose with sour cabbage
烤仙鹤 roast crane
焖沙鸡 braised partridge
焖山鹑 braised partridge
8.肉 meat
红焖里脊 braised fillet
铁扒里脊 grilled fillet
炸里脊片 fried fillet slices
洋葱软炸里脊片 soft fried fillet slices with onion
红酒里脊 fillet with red wine
罐焖里脊 fillet a la Duchesse
里脊串 fillet shashlik
火锅里脊 fillet podjarka
里脊扒 fillet steak
鸡蛋里脊扒 fillet steak with egg
口蘑汁里脊扒 fillet steak with mushroom sauce
奶油口蘑里脊丝 fillet a la Stroganoff
咖哩里脊丝 curry shredded fillet
总会牛排 club steak
牛肉扒 beef steak
牛肉扒托蛋 beef steak with egg
鸡蛋牛肉扒 beef steak with egg
葱头牛肉扒 beef steak with onion
蔬菜牛肉扒 beef steak with vegetables
汉堡牛排 Hamburg steak; hamburger
德式牛肉扒 Hamburg steak; hamburger
德式鸡蛋牛肉扒 Hamburg steak with egg
德式牛肉扒蛋 Hamburg steak with egg
法式牛肉扒 French steak
罗马尼亚式牛肉扒 Rum steak
奶油口蘑牛肉丝 beef a la Stroganoff
番茄汁奶油口蘑牛肉丝 beef a la Stroganoff with tomato sauce
什锦汁牛肉丸子 beef balls with mixed sauce
牛肉丸子米饭 beef balls with rice
咖哩牛肉 curry beef
咖哩牛肉米饭 curry beef with rice
蔬菜烤牛肉 roast beef with vegetables
铁扒牛肉片 grilled beef slices
面条烩牛肉 stewed beef with noodles
焖牛肉 braised beef
家常焖牛肉 braised beef in home style
犹太式焖牛肉 braised beef in Jewish style
洋葱焖牛肉 braised beef with onions
通心粉红焖牛肉 braised beef with macaroni
细面条红焖牛肉 braised beef with spaghetti
咖哩牛肉米饭 braised beef rolls with rice
焖小牛胸口 braised veal breast
酿馅小牛胸口 stuffed veal breast
土豆泥软煎小牛胸口 soft fried veal breast with mashed potatoes
炸小牛肉片 fried veal slices
土豆泥煎小牛排 fried veal chop with mashed potato
煎小牛肝 fried veal liver
小牛肉串 veal shashlik
炸牛腰子 fried ox kidney
炸牛脑 fried ox brain
蔬菜炸牛脑 fried ox brain with vegetables
炸牛舌 fried ox tongue
焖牛舌 braised ox tongue
家常焖牛舌 braised ox tongue in home style
罐焖牛舌 ox tongue a la Duchesse
土豆烧牛肉 goulash
黄油焖羊肉 braised mutton with butter
奶油烩羊肉片米饭 stewed mutton slices in cream with rice
蔬菜炸羊排 fried mutton chop with vegetables
炸羔羊腿 fried lamb leg
烤羔羊腿 roast lamb leg
黄油焖羔羊腰子 braised lamb kidney with butter
羊肉串 mutton shashlik
羔羊肉串 lamb shashlik
清煎猪排 natural fried pork chop
炸猪排 fried pork chop
什锦汁煎猪肉 fried pork with mixed sauce
洋葱汁煎猪肉 fried pork slices with onion sauce
奶油洋葱汁煎猪肉片 fried pork slices with cream and onion sauce
干葱头煎猪肝 fried pork liver with dry onion
烤猪肉 roast pork
酸菜烤猪肉 roast pork with sour cabbage
酸菜烤猪排 roast pork chop with sour cabbage
白豆焖猪排 braised pork chop with white beans
黄油焖猪里脊 braised pork fillet with butter
奶油烩猪肉片 stewed pork slices with cream
火锅猪肉片 pork podjarka
火锅猪排 pork chop podjarka
法式猪排 pork chop a la France
猪里脊串 pork fillet shashlik
罐焖猪肉 pork a la Duchesse
奶油焖山猫 braised hare with cream
奶油烩杂拌肉 stewed mixed meat with cream
奶油烩香肠 stewed sausage with cream
烩丸子 stewed meat balls
肉丸子米饭 meat balls with rice
奶酪口蘑烤杂拌肉 mixed meat au gratin
烤叉烧 barbecued pork
9.通心粉 macaroni
通心粉 macaroni
肉丝炒通心粉 fried macaroni with shredded meat
番茄汁炒通心粉 fried macaroni with tomato sauce
黄油炒通心粉 fried macaroni with butter
鸡肉火腿炒通心粉 fried macaroni with chicken and ham
肉汁炒通心粉 fried macaroni with meat sauce
大虾鸡蛋炒通心粉 fried macaroni with prawns and eggs
奶酪口蘑烤通心粉 macaroni au gratin
奶酪烤通心粉 baked macaroni with cheese
肉丝番茄烤通心粉 baked macaroni with shredded meat and tomato
细通心粉 spaghetti
意式面条 spaghetti
鸡肉火腿炒面 fried spaghetti with chicken and ham
鸡丝番茄炒面 fried spaghetti with shredded chicken and tomato
大虾肉炒面 fried spaghetti with prawn and meat
大虾番茄炒面 fried noodles with prawn and tomato
大虾番茄烤面条 baked noodles with prawn and tomato
10.粥 porridge
牛奶大米粥 rice porridge with milk
麦片粥 oatmeal porridge
11.炒饭 fried rice
炒饭 fried rice
肉末炒饭 fried rice with minced meat
什锦炒饭 fried rice with mixed meat
番茄鸡丁炒饭 fried rice with tomato and chicken cubes
鸡蛋炒饭 fried rice with eggs
鱼丁炒饭 fried rice with chopped fish
大虾炒饭 fried rice with prawns
黄油炒饭 fried rice with butter
12.面包 bread
面包 bread
面包干 rusk
磨牙面包干 teething rusk
面包屑 bread crumbs; crumbs
面包渣儿 bread crumbs; crumbs
新烤的面包 freshly baked bread
不新鲜的面包 stale bread
陈面包 stale bread
未烤透的面包 soggy bread
受潮的面包 soggy bread
水泡的面包 soggy bread
佐餐面包 loaf
面包片 sliced bread; slice of bread
一片面包 a slice of bread
烤面包片 toast
奶酪烤面包片 cheese toast
无黄油烤面包片 dry toast
抹黄油的面包 bread and butter
面包抹黄油 bread and butter
黄油面包 butter bread
无黄油面包 dry bread
白面包 white bread
黑面包 black bread; brown bread; rye bread
裸麦面包 rye bread
粗裸麦面包 pumpernickel
自然发酵面包 self-rising bread
死面面包 unleavened bread
姜饼 ginger bread
法式面包 French bread
小圆面包 bun
小甜面包 bun
奶油面包 cream bun
果酱面包 jam bun
红肠面包 hot dog
热狗 hot dog
面包卷 roll
奶酪面包卷 cheese roll
咖啡面包卷 coffee roll
羊角面包 crescent-shaped roll; crescent; croissant
牛角面包 crescent-shaped roll; crescent; croissant
新月形面包 crescent-shaped roll; crescent; croissant
短棍面包 baton
棒状面包卷 baton roll
法式小面包 French roll
油炸面包丁 croutons
a.三明治 sandwich
夹肉面包 sandwich
三明治 sandwich
火腿三明治 ham sandwich
香肠三明治 sausage sandwich
杂肉三明治 mixed meat sandwich
鸡肉三明治 chicken sandwich
总会三明治 club sandwich
奶酪三明治 cheese sandwich
炒蛋三明治 omelette/omelet sandwich
13.馅饼 pie
馅饼 pie
饼 pie
排 pie
派 pie
小馅饼 patty
肉馅饼 meat pie; patty
牛肉馅饼 hamburger patty; hamburger
汉堡包 hamburger patty; hamburger
薄荷糕 pepper mint patty
苹果饼 apple pie; apple tart
苹果排 apple pie; apple tart
苹果馅饼 apple pie; apple tart
水果馅饼 fruit pie; fruit flan
果馅饼 tart; flan
巧克力馅饼 chocolate pie
巧克力饼 chocolate pie
巧克力排 chocolate pie
柠檬饼 lemon pie
柠檬排 lemon pie
香蕉饼 banana pie
香蕉排 banana pie
奶昔饼 milk curd pie
奶昔排 milk curd pie
法式甜馅饼 French pastry
14.肉饼 cutlet
牛肉饼 minced beef cutlet
清煎小牛肉饼 natural fried veal cutlet
蔬菜猪肉饼 minced pork cutlet with vegetables
土豆泥拌肉饼 minced meat cutlet with mashed potatoes
葱头肉饼 meat cutlet with onion
奶酪口蘑烤鸡排 chicken cutlet au gratin
炸鸡排 fried chicken cutlet
炸鸡肉饼 fried minced chicken cutlet
蔬菜鸡肉饼 chicken cutlet with vegetables
土豆泥清煎鸡肉饼 fried chicken cutlet with mashed potatoes
炸鱼肉饼 fried fish cutlet
炸鱼虾饼 fried fish and prawn cutlet
土豆泥煎鱼饼 fried fish cutlet with mashed potatoes
鲜豌豆饼 fresh pea cutlet
15.饼卷 pancake roll
肉馅煎饼卷 fried pancake roll with meat filling
炸口蘑鸡卷 fried chicken roll with mushrooms
炸奶酪鸡卷 fried chicken roll with cheese
炸龙虾鸡肝卷 fried lobster roll with chicken liver
炸奶酪虾卷 fried prawn roll with cheese
炸口蘑虾卷 fried prawn roll with mushrooms
炸鸭肝馅虾卷 fried prawn roll with duck liver filling
炸枣咸肉卷 fried bacon roll with dates
烤火腿鸭卷 roast duck roll with ham
香肠肉卷 sausage roll
奶油卷 cream roll
鸡蛋卷 crispy egg roll; egg roll
蛋卷 egg roll
果酱鸡蛋卷 egg roll with jam
16.布丁 pudding
布丁 pudding
葡萄干布丁 raisin pudding
牛奶布丁 milk pudding
黄油布丁 butter pudding
面包布丁 bread pudding
水果面包布丁 fruit and bread pudding
大米布丁 rice pudding
奶蛋饼布丁 custard pudding
煎白兰地布丁 fried brandy pudding
17.饭后甜食 dessert
饭后甜食 dessert
甜食 dessert
甜点心 dessert
炸果饼 fritter
炸苹果饼 apple fritter
蛋奶酥 souffle
苹果蛋奶酥 apple souffle
奶酪蛋奶酥 cheese souffle
水果冻 fruit jelly
果冻 fruit jelly
菠萝冻 pineapple jelly
巧克力冻 chocolate jelly
奶油可可冻 chocolate jelly
松糕 trifle
松饼 puff pastry
可可松饼 cocoa puff
奶油松饼 cream puff
奶蛋饼 custard
烩蜜桃 stewed peach
烩杏 stewed apricot
烩梨 stewed pear
烩蜜枣 stewed dates
鲜水果沙拉 fresh fruit salad
蜜桃沙拉 peach salad
菠萝沙拉 pineapple salad
桔子沙拉 orange salad

Popular Posts