??xml version="1.0" encoding="utf-8" standalone="yes"?>
名称Qcat
使用权限Q所有用?
使用方式Qcat [-AbeEnstTuv] [--help] [--version] fileName
说明Q把档案串连接后传到基本输出Q萤q或?> fileName 到另一个档案)
参数Q?
-n ?--number ?1 开始对所有输出的行数~号
-b ?--number-nonblank ?-n 怼Q只不过对于I白行不~号
-s ?--squeeze-blank 当遇到有q箋两行以上的空白行Q就代换Z行的I白?
-v ?--show-nonprinting
范例Q?
cat -n textfile1 > textfile2 ?textfile1 的档案内容加上行号后输入 textfile2 q个档案?
cat -b textfile1 textfile2 >> textfile3 ?textfile1 ?textfile2 的档案内容加上行PI白行不加)之后内定w加到 textfile3
名称 : cd
使用权限 : 所有用?
使用方式 : cd [dirName]
说明 : 变换工作目录?dirName?其中 dirName 表示法可为绝对\径或相对路径。若目录名称省略Q则变换至用者的 home directory (也就是刚 login 时所在的目录)?
另外Q?~" 也表CZؓ home directory 的意思,"." 则是表示目前所在的目录Q?.." 则表C目前目录位|的上一层目录?
范例 : 跛_ /usr/bin/ :
cd /usr/bin
跛_自己?home directory :
cd ~
跛_目前目录的上上两?:
cd ../..
指o名称 : chmod
使用权限 : 所有用?
使用方式 : chmod [-cfvR] [--help] [--version] mode file...
说明 : Linux/Unix 的档案存取权限分ZU?: 档案拥有者、群l、其他。利?chmod 可以藉以控制档案如何被他人所存取?
把计 :
mode : 权限讑֮字串Q格式如?: [ugoa...][[+-=][rwxX]...][,...]Q其中u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群?group)者,o 表示其他以外的hQa 表示q三者皆是?
+ 表示增加权限? 表示取消权限? 表示唯一讑֮权限?
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行?
-c : 若该档案权限实已经更改Q才昄其更改动?
-f : 若该档案权限无法被更改也不要昄错误讯息
-v : 昄权限变更的详l资?
-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)
--help : 昄辅助说明
--version : 昄版本
范例 :档?file1.txt 设ؓ所有h皆可d :
chmod ugo+r file1.txt
档?file1.txt 设ؓ所有h皆可d :
chmod a+r file1.txt
档?file1.txt ?file2.txt 设ؓ该档案拥有者,与其所属同一个群体者可写入Q但其他以外的h则不可写?:
chmod ug+w,o-w file1.txt file2.txt
?ex1.py 讑֮为只有该档案拥有者可以执?:
chmod u+x ex1.py
目前目录下的所有档案与子目录皆设ؓM人可d :
chmod -R a+r *
此外chmod也可以用数字来表C权限如 chmod 777 file
语法为:chmod abc file
其中a,b,c各ؓ一个数字,分别表示User、Group、及Other的权限?
r=4Qw=2Qx=1
若要rwx属性则4+2+1=7Q?
若要rw-属性则4+2=6Q?
若要r-x属性则4+1=7?
范例Q?
chmod a=rwx file
?
chmod 777 file
效果相同
chmod ug=rwx,o=x file
?
chmod 771 file
效果相同
若用chmod 4755 filename可此程式具有root的权?
指o名称 : chown
使用权限 : root
使用方式 : chmod [-cfhvR] [--help] [--version] user[:group] file...
说明 : Linux/Unix 是多人多工作业系l,所有的档案皆有拥有者。利?chown 可以档案的拥有者加以改变。一般来_q个指o只有是由pȝ理?root)所使用Q一般用者没有权限可以改变别人的档案拥有者,也没有权限可以自q档案拥有者改设ؓ别h。只有系l管理?root)才有q样的权限?
把计 :
user : 新的档案拥有者的使用?IDgroup : 新的档案拥有者的使用者群?group)-c : 若该档案拥有者确实已l更改,才显C其更改动作-f : 若该档案拥有者无法被更改也不要显C错误讯?h : 只对于连l?link)q行变更Q而非?link 真正指向的档?v : 昄拥有者变更的详细资料-R : 对目前目录下的所有档案与子目录进行相同的拥有者变?即以递回的方式逐个变更)--help : 昄辅助说明--version : 昄版本
范例 :
档?file1.txt 的拥有者设?users 体的用?jessie :
chown jessie:users file1.txt
目前目录下的所有档案与子目录的拥有者皆设ؓ users 体的用?lamport :
chmod -R lamport:users *
名称Qcp
使用权限Q所有用?
使用方式Q?
cp [options] source dest
cp [options] source... directory
说明Q将一个档案拷贝至另一档案Q或数个档案拷贝至另一目录?
把计?
-a 可能将档案状态、权限等资料都照原状予以复制?
-r ?source 中含有目录名Q则目录下之档案亦皆依序拷贝至目的地?
-f 若目的地已经有相同档名的档案存在Q则在复制前先予以删除再行复制?
范例Q?
档?aaa 复制(已存?Qƈ命名?bbb :
cp aaa bbb
所有的C语言E式拯?Finished 子目录中 :
cp *.c Finished
名称Qcut
使用权限Q所有用?
用法Qcut -cnum1-num2 filename
说明Q显C每行从开头算?num1 ?num2 的文字?
范例Q?
shell>> cat example
test2
this is test1
shell>> cut -c0-6 example ## print 开头算起前 6 个字?
test2
this i
名称 : find
用法 : find
使用说明 :
档案系l内W合 expression 的档案列出来。你可以指要档案的名U、类别、时间、大、权限等不同资讯的组合,只有完全相符的才会被列出来?
find Ҏ下列规则判断 path ?expressionQ在命o列上W一?- ( ) , ! 之前的部份ؓ pathQ之后的?expression。如?path 是空字串则用目前\径,如果 expression 是空字串则?-print 为预?expression?
expression 中可使用的选项有二三十个之多,在此只介l最常用的部份?
-mount, -xdev : 只检查和指定目录在同一个档案系l下的档案,避免列出其它档案pȝ中的档案
-amin n : 在过?n 分钟内被dq?
-anewer file : 比档?file 更晚被读取过的档?
-atime n : 在过?n 天过dq的档案
-cmin n : 在过?n 分钟内被修改q?
-cnewer file :比档?file 更新的档?
-ctime n : 在过?n 天过修改q的档案
-empty : I的档案-gid n or -group name : gid ?n 或是 group 名称?name
-ipath p, -path p : 路径名称W合 p 的档案,ipath 会忽略大写
-name name, -iname name : 档案名称W合 name 的档案。iname 会忽略大写
-size n : 档案大小 ?n 单位Qb 代表 512 位元l的区块Qc 表示字元敎ͼk 表示 kilo bytesQw 是二个位元组?type c : 档案cd?c 的档案?
d: 目录
c: 字型装置档案
b: 区块装置档案
p: 具名贮列
f: 一般档?
l: W号q结
s: socket
-pid n : process id ?n 的档?
你可以?( ) 运式分隔Qƈ使用下列q算?
exp1 -and exp2
! expr
-not expr
exp1 -or exp2
exp1, exp2
范例:
目前目录及其子目录下所有g伸档名是 c 的档案列出来?
# find . -name "*.c"
目前目录其其下子目录中所有一般档案列?
# find . -ftype f
目前目录及其子目录下所有最q?20 分钟内更新过的档案列?
# find . -ctime -20
名称Qless
使用权限Q所有用?
使用方式Q?
less [Option] filename
说明Q?
less 的作用与 more 十分怼Q都可以用来览文字档案的内容,不同的是 less 允许使用者往回卷?
以浏览已l看q的部䆾Q同时因?less q未在一开始就d整个档案Q因此在遇上大型档案的开启时Q会比一般的文书~辑??vi)来的快速?
范例Q?
指o名称 : ln
使用权限 : 所有用?
使用方式 : ln [options] source distQ其?option 的格式ؓ :
[-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}]
[--help] [--version] [--]
说明 : Linux/Unix 档案pȝ中,有所谓的q结(link)Q我们可以将其视为档案的别名Q而连l又可分ZU?: 连l?hard link)与Yq结(symbolic link)Q硬q结的意思是一个档案可以有多个名称Q而Yq结的方式则是生一个特D的档案Q该档案的内Ҏ指向另一个档案的位置。硬q结是存在同一个档案系l中Q而Yq结却可以跨不同的档案pȝ?
ln source dist 是生一个连l?dist)?sourceQ至于用硬q结或Y铄则由参数军_?
不论是硬q结或Y铄都不会将原本的档案复制一份,只会占用非常量的磁空间?
-f : 铄时先与 dist 同档名的档案删除-d : 允许pȝ理者硬铄自己的目?i : 在删除与 dist 同档名的档案时先q行询问-n : 在进行Yq结Ӟ?dist 视ؓ一般的档案-s : q行软链l?symbolic link)-v : 在连l之前显C其档名-b : 在铄时会被覆写或删除的档案进行备?S SUFFIX : 备份的档案都加?SUFFIX 的字?V METHOD : 指定备䆾的方?-help : 昄辅助说明--version : 昄版本
范例 :
档?yy 产生一?symbolic link : zz
ln -s yy zz
档?yy 产生一?hard link : zz
ln yy xx
名称Qlocate
使用权限Q所有用?
使用方式Q?locate [-q] [-d ] [--database=]
locate [-r ] [--regexp=]
locate [-qv] [-o ] [--output=]
locate [-e ] [-f ] <[-l ] [-c]
<[-U ] [-u]>
locate [-Vh] [--version] [--help]
说明Q?
locate 让用者可以很快速的搜寻档案pȝ内是否有指定的档案。其Ҏ是先建立一个包括系l内所有档案名U及路径的资料库Q之后当L时就只需查询q个资料库,而不必实际深入档案系l之中了?
在一般的 distribution 之中Q资料库的徏立都被放?contab 中自动执行。一般用者在使用时只要用
# locate your_file_name
的型式就可以了?参数Q?
-u
-U
建立资料库,-u 会由根目录开始,-U 则可以指定开始的位置?
-e
?
排除在寻扄范围之外?
-l
如果 ?1Q则启动安全模式。在安全模式下,使用者不会看到权限无法看到的档案。这会始速度减慢Q因?locate 必须臛_际的档案pȝ中取得档案的权限资料?
-f
特定的档案pȝ排除在外Q例如我们没有到理要?proc 档案pȝ中的档案攑֜资料库中?
-q
安静模式Q不会显CZQ何错误讯息?
-n
臛_昄 个输出?
-r
使用正规q算?做寻扄条g?
-o
指定资料库存的名U?
-d
指定资料库的路径
-h
昄辅助讯息
-v
昄更多的讯?
-V
昄E式的版本讯?范例Q?
locate chdrv : L所有叫 chdrv 的档?
locate -n 100 a.out : L所有叫 a.out 的档案,但最多只昄 100 ?
locate -u : 建立资料?
名称 : ls
使用权限 : 所有用?
使用方式 : ls [-alrtAFR] [name...]
说明 : 昄指定工作目录下之内容Q列出目前工作目录所含之档案及子目录)?
-a 昄所有档案及目录 (ls内定档案名或目录名U开头ؓ"."的视为隐藏档Q不会列?
-l 除档案名U外Q亦档案型态、权限、拥有者、档案大等资讯详细列出
-r 档案以相反ơ序昄(原定依英文字母次?
-t 档案依建立旉之先后次序列?
-A ?-a Q但不列?"." (目前目录) ?".." (父目?
-F 在列出的档案名称后加一W号Q例如可执行档则?"*", 目录则加 "/"
-R 若目录下有档案,则以下之档案亦皆依序列出
范例Q?
列出目前工作目录下所有名U是 s 开头的档案Q愈新的排愈后面 :
ls -ltr s*
?/bin 目录以下所有目录及档案详细资料列出 :
ls -lR /bin
列出目前工作目录下所有档案及目录Q目录于名称后加 "/", 可执行档于名U后?"*" :
ls -AF
名称Qmore
使用权限Q所有用?
使用方式Qmore [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..]
说明Q类?cat Q不q会以一一늚昄方便使用者逐页阅读Q而最基本的指令就是按I白键(spaceQ就往下一|C,?b 键就会往回(backQ一|C,而且q有搜寻字串的功能(?vi 怼Q,使用中的说明文gQ请?h ?
参数Q?num 一ơ显C的行数
-d 提示使用者,在画面下ҎC?[Press space to continue, q to quit.] Q如果用者按错键Q则会显C?[Press h for instructions.] 而不???
-l 取消遇见Ҏ字元 ^LQ送纸字元Q时会暂停的功能
-f 计算行数Ӟ以实际上的行敎ͼ而非自动换行q后的行敎ͼ有些单行字数太长的会被扩展ؓ两行或两行以上)
-p 不以卷动的方式显C每一,而是先清除萤q后再显C内?
-c ?-p 怼Q不同的是先昄内容再清除其他旧资料
-s 当遇到有q箋两行以上的空白行Q就代换Z行的I白?
-u 不显CZ引号 Q根据环境变?TERM 指定?terminal 而有所不同Q?
+/ 在每个档案显C前搜寻该字ԌpatternQ,然后从该字串之后开始显C?
+num 从第 num 行开始显C?
fileNames Ʋ显C内容的档案Q可为复C?
范例Q?
more -s testfile 逐页昄 testfile 之档案内容,如有q箋两行以上I白行则以一行空白行昄?
more +20 testfile 从第 20 行开始显C?testfile 之档案内宏V?
名称Qmv
使用权限Q所有用?
使用方式Q?
mv [options] source dest
mv [options] source... directory
说明Q将一个档案移臛_一档案Q或数个档案移臛_一目录?
参数Q?i 若目的地已有同名档案Q则先询问是否覆盖旧档?
范例Q?
档?aaa 更名?bbb :
mv aaa bbb
所有的C语言E式U至 Finished 子目录中 :
mv -i *.c
名称Qrm
使用权限Q所有用?
使用方式Qrm [options] name...
说明Q删除档案及目录?
把计?
-i 删除前逐一询问认?
-f 即原档案属性设为唯读,亦直接删除,无需逐一认?
-r 目录及以下之档案亦逐一删除?
范例Q?
删除所有C语言E式档;删除前逐一询问认 :
rm -i *.c
?Finished 子目录及子目录中所有档案删?:
rm -r Finished
名称Qrmdir
使用权限Q于目前目录有适当权限的所有用?
使用方式Q?rmdir [-p] dirName
说明Q?删除I的目录?
参数Q?-p 是当子目录被删除后它也成ؓI目录的话,则顺便一q删除?
范例Q?
工作目录下Q名?AAA 的子目录删除 :
rmdir AAA
在工作目录下?BBB 目录中,删除名ؓ Test 的子目录。若 Test 删除后,BBB 目录成ؓI目录,?BBB 亦予删除?
rmdir -p BBB/Test
名称Qsplit
使用权限Q所有用?
使用方式Qsplit [OPTION] [INPUT [PREFIX]]
说明Q?
一个档案分割成C。而从 INPUT 分割输出成固定大的档案Q其档名依序?PREFIXaa, PREFIXab...QPREFIX 预设gؓ `x。若没有 INPUT 档或?`-Q则从标准输入读q资料?
匡兜?
-b, --bytes=SIZE
SIZE gؓ每一输出档案的大,单位?byte?
-C, --line-bytes=SIZE
每一输出档中Q单行的最?byte 数?
-l, --lines=NUMBER
NUMBER gؓ每一输出档的列数大小?
-NUMBER
?-l NUMBER 相同?
--verbose
于每个输出档被开启前Q列印出侦错资讯到标准错误输出?
--help
昄辅助资讯然后d?
--version
列出版本资讯然后d?
SIZE 可加入单? b 代表 512Q?k 代表 1KQ?m 代表 1 Meg?
范例Q?
PostgresSQL 大型资料库备份与回存Q?
?Postgres 允许表格大过你系l档案的最大容量,所以要表?dump 到单一的档案可能会有问题,使用 splitq行档案分割?
% pg_dump dbname | split -b 1m - filename.dump.
重新载入
% createdb dbname
% cat filename.dump.* | pgsql dbname
名称Qtouch
使用权限Q所有用?
使用方式Q?
touch [-acfm]
[-r reference-file] [--file=reference-file]
[-t MMDDhhmm[[CC]YY][.ss]]
[-d time] [--date=time] [--time={atime,access,use,mtime,modify}]
[--no-create] [--help] [--version]
file1 [file2 ...]
说明Q?
touch 指o改变档案的时间记录?ls -l 可以昄档案的时间记录?
参数Q?
a 改变档案的读取时间记录?
m 改变档案的修Ҏ间记录?
c 假如目的档案不存在,不会建立新的档案。与 --no-create 的效果一栗?
f 不用,是ؓ了与其他 unix pȝ的相Ҏ而保留?
r 使用参考档的时间记录,?--file 的效果一栗?
d 讑֮旉与日期,可以使用各种不同的格式?
t 讑֮档案的时间记录,格式?date 指o相同?
--no-create 不会建立新档案?
--help 列出指o格式?
--version 列出版本讯息?
范例Q?
最单的使用方式Q将档案的时候记录改为现在的旉。若档案不存在,pȝ会徏立一个新的档案?
touch file
touch file1 file2
?file 的时间记录改?5 ?6 ?18 ?3 分,公元两千q。时间的格式可以参?date 指oQ至需输入 MMDDHHmm Q就是月日时与分?
touch -c -t 05061803 file
touch -c -t 050618032000 file
?file 的时间记录改变成?referencefile 一栗?
touch -r referencefile file
?file 的时间记录改?5 ?6 ?18 ?3 分,公元两千q。时间可以?am, pm 或是 24 时的格式,日期可以使用其他格式?6 May 2000 ?
touch -d "6:03pm" file
touch -d "05/06/2000" file
touch -d "6:03pm 05/06/2000" file
名称 : at
使用权限 : 所有用?
使用方式 : at -V [-q queue] [-f file] [-mldbv] TIME
说明 : at 可以让用者指定在 TIME q个特定时刻执行某个E式或指令,TIME 的格式是 HH:MM其中?HH 为小ӞMM 为分钟,甚至你也可以指定 am, pm, midnight, noon, teatime(是下午 4 炚w){口语词?
如果惌指定过一天内的时_则可以用 MMDDYY 或?MM/DD/YY 的格式,其中 MM 是分钟,DD 是第几日QYY 是指q䆾。另外,使用者甚至也可以使用像是 now + 旉间隔来弹性指定时_其中的时间间隔可以是 minutes, hours, days, weeks?
另外Q用者也可指?today ?tomorrow 来表CZ天或明天。当指定了时间ƈ按下 enter 之后Qat 会进入交谈模式ƈ要求输入指o或程式,当你输入完后按下 ctrl+D 卛_完成所有动作,至于执行的结果将会寄回你的帐号中?
把计 :
-V : 印出版本~号
-q : 使用指定的O?Queue)来储存,at 的资料是存放在所谓的 queue 中,使用者可以同时用多?queueQ?queue 的编号ؓ a, b, c... z 以及 A, B, ... Z ?52 ?
-m : 即ɽE式/指o执行完成后没有输出结? 也要寄封信给使用?
-f file : d预先写好的命令档。用者不一定要使用交谈模式来输入,可以先将所有的指定先写入档案后再一ơ读?
-l : 列出所有的指定 (使用者也可以直接使用 atq 而不?at -l)
-d : 删除指定 (使用者也可以直接使用 atrm 而不?at -d)
-v : 列出所有已l完成但未删除的指?
例子 :
三天后的下午 5 炚w执行 /bin/ls :
at 5pm + 3 days /bin/ls
三个星期后的下午 5 炚w执行 /bin/ls :
at 5pm + 2 weeks /bin/ls
明天?17:20 执行 /bin/date :
at 17:20 tomorrow /bin/date
1999 q的最后一天的最后一分钟印出 the end of world !
at 23:59 12/31/1999 echo the end of world !
名称Qcal
使用权限Q所有用?
使用方式Qcal [-mjy] [month [year]]
说明Q?
昄日历。若只有一个参敎ͼ则代表年?1-9999)Q显Cq的q历。年份必d部写出:``cal 89\ 不会是昄 1989 q的q历。用两个参敎ͼ则表C月份及q䆾。若没有参数则显C个月的月历?
1752 q?9 月第 3 日v改用西洋新历Q因q时大部份的国家都采用新历,?10 天被去除Q所以该月䆾的月历有些不同。在此之前ؓ西洋旧历?
匡兜?
-m : 以星期一为每周的W一天方式显C?
-j : 以凯撒历昄Q即以一月一日v的天数显C?
-y : 昄今年q历?
范例Q?
cal : 昄本月的月历?
[root@mylinux /root]# date
Tue Aug 15 08:00:18 CST 2000
[root@mylinux /root]# cal
August 2000
Su Mo Tu We Th Fr Sa
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
[root@mylinux /root]#
cal 2001 : 昄公元 2001 q年历?
[root@mylinux /root]# cal 2001
2001
January February March
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 1 2 3 1 2 3
7 8 9 10 11 12 13 4 5 6 7 8 9 10 4 5 6 7 8 9 10
14 15 16 17 18 19 20 11 12 13 14 15 16 17 11 12 13 14 15 16 17
21 22 23 24 25 26 27 18 19 20 21 22 23 24 18 19 20 21 22 23 24
28 29 30 31 25 26 27 28 25 26 27 28 29 30 31
April May June
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7 1 2 3 4 5 1 2
8 9 10 11 12 13 14 6 7 8 9 10 11 12 3 4 5 6 7 8 9
15 16 17 18 19 20 21 13 14 15 16 17 18 19 10 11 12 13 14 15 16
22 23 24 25 26 27 28 20 21 22 23 24 25 26 17 18 19 20 21 22 23
29 30 27 28 29 30 31 24 25 26 27 28 29 30
July August September
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7 1 2 3 4 1
8 9 10 11 12 13 14 5 6 7 8 9 10 11 2 3 4 5 6 7 8
15 16 17 18 19 20 21 12 13 14 15 16 17 18 9 10 11 12 13 14 15
22 23 24 25 26 27 28 19 20 21 22 23 24 25 16 17 18 19 20 21 22
29 30 31 26 27 28 29 30 31 23 24 25 26 27 28 29
30
October November December
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 1 2 3 1
7 8 9 10 11 12 13 4 5 6 7 8 9 10 2 3 4 5 6 7 8
14 15 16 17 18 19 20 11 12 13 14 15 16 17 9 10 11 12 13 14 15
21 22 23 24 25 26 27 18 19 20 21 22 23 24 16 17 18 19 20 21 22
28 29 30 31 25 26 27 28 29 30 23 24 25 26 27 28 29
30 31
[root@mylinux /root]#
cal 5 2001 : 昄公元 2001 q?5 月月历?
[root@mylinux /root]# cal 5 2001
May 2001
Su Mo Tu We Th Fr Sa
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
[root@mylinux /root]#
cal -m : 以星期一为每周的W一天方式,昄本月的月历?
[root@mylinux /root]# cal -m
August 2000
Mo Tu We Th Fr Sa Su
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
[root@mylinux /root]#
cal -jy : 以一月一日v的天数显CZq的q历?
[root@mylinux /root]# cal -jy
2000
January February
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat
1 32 33 34 35 36
2 3 4 5 6 7 8 37 38 39 40 41 42 43
9 10 11 12 13 14 15 44 45 46 47 48 49 50
16 17 18 19 20 21 22 51 52 53 54 55 56 57
23 24 25 26 27 28 29 58 59 60
30 31
March April
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat
61 62 63 64 92
65 66 67 68 69 70 71 93 94 95 96 97 98 99
72 73 74 75 76 77 78 100 101 102 103 104 105 106
79 80 81 82 83 84 85 107 108 109 110 111 112 113
86 87 88 89 90 91 114 115 116 117 118 119 120
121
May June
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat
122 123 124 125 126 127 153 154 155
128 129 130 131 132 133 134 156 157 158 159 160 161 162
135 136 137 138 139 140 141 163 164 165 166 167 168 169
142 143 144 145 146 147 148 170 171 172 173 174 175 176
149 150 151 152 177 178 179 180 181 182
July August
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat
183 214 215 216 217 218
184 185 186 187 188 189 190 219 220 221 222 223 224 225
191 192 193 194 195 196 197 226 227 228 229 230 231 232
198 199 200 201 202 203 204 233 234 235 236 237 238 239
205 206 207 208 209 210 211 240 241 242 243 244
212 213
September October
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat
245 246 275 276 277 278 279 280 281
247 248 249 250 251 252 253 282 283 284 285 286 287 288
254 255 256 257 258 259 260 289 290 291 292 293 294 295
261 262 263 264 265 266 267 296 297 298 299 300 301 302
268 269 270 271 272 273 274 303 304 305
November December
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat
306 307 308 309 336 337
310 311 312 313 314 315 316 338 339 340 341 342 343 344
317 318 319 320 321 322 323 345 346 347 348 349 350 351
324 325 326 327 328 329 330 352 353 354 355 356 357 358
331 332 333 334 335 359 360 361 362 363 364 365
366
[root@mylinux /root]#
名称 : crontab
使用权限 : 所有用?
使用方式 :
crontab [ -u user ] filecrontab [ -u user ] { -l | -r | -e }
说明 :
crontab 是用来让使用者在固定旉或固定间隔执行程式之用,换句话说Q也是cM使用者的时程表?u user 是指讑֮指定 user 的时E表Q这个前提是你必要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话Q就是表C定自q时程表?
数 :
-e : 执行文字~辑器来讑֮时程表,内定的文字编辑器?VIQ如果你想用别的文字~辑器,则请先设?VISUAL 环境变数来指定用那个文字编辑器(比如?setenv VISUAL joe)
-r : 删除目前的时E表
-l : 列出目前的时E表
时程表的格式如下 :
f1 f2 f3 f4 f5 program
其中 f1 是表C分钟,f2 表示时Qf3 表示一个月份中的第几日Qf4 表示月䆾Qf5 表示一个星期中的第几天。program 表示要执行的E式?
?f1 ?* 时表C每分钟都要执行 programQf2 ?* 时表C每时都要执行E式Q其余类?
?f1 ?a-b 时表CZW?a 分钟到第 b 分钟q段旉内要执行Qf2 ?a-b 时表CZW?a 到第 b 时都要执行Q其余类?
?f1 ?*/n 时表C每 n 分钟个时间间隔执行一ơ,f2 ?*/n 表示?n 时个时间间隔执行一ơ,其余cL
?f1 ?a, b, c,... 时表C第 a, b, c,... 分钟要执行,f2 ?a, b, c,... 时表C第 a, b, c...个小时要执行Q其余类?
使用者也可以所有的讑֮先存攑֜档案 file 中,?crontab file 的方式来讑֮时程表?
例子 :
每月每天每小时的W?0 分钟执行一?/bin/ls :
0 7 * * * /bin/ls
?12 月内, 每天的早?6 点到 12 点中Q每?20 分钟执行一?/usr/bin/backup :
0 6-12/3 * 12 * /usr/bin/backup
周一到周五每天下?5:00 寄一信l?alex@domain.name :
0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata
每月每天的午?0 ?20 ? 2 ?20 ? 4 ?20 ?...执行 echo "haha"
20 0-23/2 * * * echo "haha"
注意 :
当程式在你所指定的时间执行后Q系l会寄一信l你Q显CE式执行的内容,若是你不希望收到q样的信Q请在每一行空一g后加?> /dev/null 2>&1 卛_?
名称 : date
使用权限 : 所有用?
使用方式 :
date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]
说明 :
date 可以用来昄或设定系l的日期与时_在显C方面,使用者可以设定欲昄的格式,格式讑֮Z个加号后接数个标讎ͼ其中可用的标记列表如?:
旉斚w :
% : 印出 %
%n : 下一?
%t : x
%H : 时(00..23)
%I : 时(01..12)
%k : 时(0..23)
%l : 时(1..12)
%M : 分钟(00..59)
%p : 昄本地 AM ?PM
%r : 直接昄旉 (12 时Ӟ格式?hh:mm:ss [AP]M)
%s : ?1970 q?1 ?1 ?00:00:00 UTC 到目前ؓ止的U数
%S : U?00..61)
%T : 直接昄旉 (24 时?
%X : 相当?%H:%M:%S
%Z : 昄时区
日期斚w :
%a : 星期?(Sun..Sat)
%A : 星期?(Sunday..Saturday)
%b : 月䆾 (Jan..Dec)
%B : 月䆾 (January..December)
%c : 直接昄日期与时?
%d : ?(01..31)
%D : 直接昄日期 (mm/dd/yy)
%h : ?%b
%j : 一q中的第几天 (001..366)
%m : 月䆾 (01..12)
%U : 一q中的第几周 (00..53) (?Sunday Z周的W一天的情Ş)
%w : 一周中的第几天 (0..6)
%W : 一q中的第几周 (00..53) (?Monday Z周的W一天的情Ş)
%x : 直接昄日期 (mm/dd/yy)
%y : q䆾的最后两位数?(00.99)
%Y : 完整q䆾 (0000..9999)
若是不以加号作ؓ开_则表C讑֮旉Q而时间格式ؓ MMDDhhmm[[CC]YY][.ss]Q其?MM 为月份,DD 为日Qhh 为小Ӟmm 为分钟,CC 为年份前两位数字QYY 为年份后两位数字Qss 为秒?
把计 :
-d datestr : 昄 datestr 中所讑֮的时?(非系l时?
--help : 昄辅助讯息
-s datestr : 系l时间设?datestr 中所讑֮的时?
-u : 昄目前的格林威L?
--version : 昄版本~号
例子 :
昄旉后蟩行,再显C目前日?:
date +%T%n%D
昄月䆾与日?:
date +%B %d
昄日期与设定时?12:34:56) :
date --date 12:34:56
注意 :
当你不希望出现无意义?0 ?比如?1999/03/07)Q则可以在标C插入 - W号Q比如说 date +%-H:%-M:%-S 会把时分U中无意义的 0 l去掉,像是原本?08:09:04 会变?8:9:4。另外,只有取得权限?比如?root)才能讑֮pȝ旉?
当你?root w分更改了系l时间之后,误得以 clock -w 来将pȝ旉写入 CMOS 中,q样下次重新开机时pȝ旉才会持箋抱持最新的正确倹{?
名称 : sleep
使用权限 : 所有用?
使用方式 : sleep [--help] [--version] number[smhd]
说明 : sleep 可以用来目前动作gq一D|?
参数说明 :
--help : 昄辅助讯息
--version : 昄版本~号
number : 旉长度Q后面可?s、m、h ?d
其中 s 为秒Qm ?分钟Qh 为小Ӟd 为日?
例子 :
昄目前旉后gq?1 分钟Q之后再ơ显C时?:
date;sleep 1m;date
名称Q?time
使用权限Q?所有用?
使用方式Q?time [options] COMMAND [arguments]
说明Q?time 指o的用途,在于量测特定指o执行时所需消耗的旉及系l资源等资讯。例?CPU 旉、记忆体、输入输出等{。需要特别注意的是,部分资讯?Linux 上显CZ出来。这是因为在 Linux 上部分资源的分配函式?time 指o所预设的方式ƈ不相同,以致?time 指o无法取得q些资料?
把计?
-o or --output=FILE
讑֮l果输出档。这个选项会将 time 的输出写?所指定的档案中。如果档案已l存在,pȝ覆写其内容?
-a or --append
配合 -o 使用Q会结果写到档案的末端Q而不会覆盖掉原来的内宏V?
-f FORMAT or --format=FORMAT
?FORMAT 字串讑֮昄方式。当q个选项没有被设定的时候,会用pȝ预设的格式。不q你可以用环境变?time 来设定这个格式,如此一来就不必每次dpȝ都要讑֮一ơ?
一般设定上Q你可以?
\t
表示xQ或者是?
\n
表示换行。每一资料要?% 做ؓ前导。如果要在字串中使用癑ֈ比符Pq 。(学过 C 语言的h大概会觉得很熟悉Q?
time 指o可以昄的资源有四大,分别是:
Time resources
Memory resources
IO resources
Command info
详细的内容如下:
Time Resources
E 执行指o所p的时_格式是:[hour]:minute:second。请注意q个数字q不代表实际?CPU 旉?
e 执行指o所p的时_单位是秒。请注意q个数字q不代表实际?CPU 旉?
S 指o执行时在核心模式Qkernel modeQ所p的时_单位是秒?
U 指o执行时在使用者模式(user modeQ所p的时_单位是秒?
P 执行指o?CPU 的占用比例。其实这个数字就是核心模式加上用者模式的 CPU 旉除以L间?
Memory Resources
M 执行时所占用的实体记忆体的最大倹{单位是 KB
t 执行时所占用的实体记忆体的^均|单位?KB
K 执行E序所占用的记忆体总量Qstack+data+textQ的q_大小Q单位是 KB
D 执行E序的自有资料区Qunshared data areaQ的q_大小Q单位是 KB
p 执行E序的自有堆叠(unshared stackQ的q_大小Q单位是 KB
X 执行E序间共享内容(shared textQ的q_|单位?KB
Z pȝ记忆体页的大,单位?byte。对同一个系l来说这是个常数
IO Resources
F 此程序的主要记忆体页错误发生ơ数。所谓的主要记忆体页错误是指某一记忆体页已经|换到置换档Qswap file)中,而且已经分配l其他程序。此时该늚内容必须从置换档里再d来?
R 此程序的ơ要记忆体页错误发生ơ数。所谓的ơ要记忆体页错误是指某一记忆体页虽然已经|换到置换档中,但尚未分配给其他E序。此时该늚内容q未被破坏,不必从置换档里读出来
W 此程序被交换到置换档的次?
c 此程序被中断Q像是分配到?CPU 旉耗尽Q的ơ数
w 此程序自愿中断(像是在等待某一?I/O 执行完毕Q像是磁读取等{)的次?
I 此程序所输入的档案数
O 此程序所输出的档案数
r 此程序所收到?Socket Message
s 此程序所送出?Socket Message
k 此程序所收到的信?( Signal )数量
Command Info
C 执行时的参数以及指o名称
x 指o的结束代?( Exit Status )
-p or --portability
q个选项会自动把昄格式讑֮成ؓQ?
real %e
user %U
sys %S
q么做的目的是ؓ了与 POSIX 规格相容?
-v or --verbose
q个选项会把所有程式中用到的资源通通列出来Q不但如一般英文语句,q有说明。对不想花时间去熟习格式讑֮或是刚刚开始接触这个指令的人相当有用?
范例Q?
利用下面的指?
time -v ps -aux
我们可以获得执行 ps -aux 的结果和所p的系l资源。如下面所列的资料Q?
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.4 1096 472 ? S Apr19 0:04 init
root 2 0.0 0.0 0 0 ? SW Apr19 0:00 [kflushd]
root 3 0.0 0.0 0 0 ? SW Apr19 0:00 [kpiod]
......
root 24269 0.0 1.0 2692 996 pts/3 R 12:16 0:00 ps -aux
Command being timed: "ps -aux"
User time (seconds): 0.05
System time (seconds): 0.06
Percent of CPU this job got: 68%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.16
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 0
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 238
Minor (reclaiming a frame) page faults: 46
Voluntary context switches: 0
Involuntary context switches: 0
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
名称Q?uptime
使用权限Q?所有用?
使用方式Q?uptime [-V]
说明Q?uptime 提供使用者下面的资讯Q不需其他参数Q?
现在的时?
pȝ开转到现在l过的时?
q线的用者数?
最q一分钟Q五分钟和十五分钟的pȝ负蝲
参数Q?-V 昄版本资讯?
范例Q?uptime
其结果ؓQ?
10:41am up 5 days, 10 min, 1 users, load average: 0.00, 0.00, 1.99
名称Qchfn
使用权限Q所有用?
用法Qshell>> chfn
说明Q提供用者更改个讯,用于 finger and mail username
范例Q?
shell>> chfn
Changing finger information for user
Password: [del]
Name[]:Johnney Huang ### 提供 finger 时的资料
Office[]:NCCU
Office Phone[]: [del]
Home Phone[]: [del]
名称Qchsh
使用权限Q所有用?
用法Qshell>> chsh
说明Q更改用?shell 讑֮
范例Q?
shell>> chsh
Changing fihanging shell for user1
Password: [del]
New shell [/bin/tcsh]: ### [是目前用的 shell]
[del]
shell>> chsh -l ### 展示 /etc/shells 档案内容
/bin/bash
/bin/sh
/bin/ash
/bin/bsh
/bin/tcsh
/bin/csh
?finger [q回]
名称Q?finger
使用权限Q?所有用?
使用方式Q?finger [options] user[@address]
说明Qfinger 可以让用者查询一些其他用者的资料。会列出来的资料有:
Login Name
User Name
Home directory
Shell
Login status
mail status
.plan
.project
.forward
其中 .plan Q?project ?.forward 是使用者在他的 Home Directory 里的 .plan Q?.project ?.forward {档案里的资料。如果没有就没有。finger 指oq不限定于在同一伺服器上查询Q也可以L某一个远端伺服器上的使用者。只要给一个像?E-mail address 一般的地址卛_?
把计?
-l
多行昄?
-s
单行昄。这个选项只显C登入名Uͼ真实姓名Q终端机名称Q闲|时_d旉Q办公室L及电话号码。如果所查询的用者是q端伺服器的使用者,q个选项无效?
范例Q下列指令可以查询本机管理员的资料:
finger root
其结果如下:
Login: root Name: root
Directory: /root Shell: /bin/bash
Never logged in.
No mail.
No Plan.
名称Qlast
使用权限Q所有用?
使用方式Qshell>> last [options]
说明Q显C系l开Z来获是从每月初登入者的讯息
把计?
-R 省略 hostname 的栏?
-num 展示?num ?
username 展示 username 的登入讯?
tty 限制d讯息包含l端Z?
范例Q?
shell>> last -R -2
johnney pts/1 Mon Aug 14 20:42 still logged in
johnney pts/0 Mon Aug 14 19:59 still logged in
wtmp begins Tue Aug 1 09:01:10 2000 ### /var/log/wtmp
shell>> last -2 minery
minery pts/0 140.119.217.115 Mon Aug 14 18:37 - 18:40 (00:03)
minery pts/0 140.119.217.115 Mon Aug 14 17:22 - 17:24 (00:02)
wtmp begins Tue Aug 1 09:01:10 2000
名称:login
q个命o都不会就不要q算了!呵呵我也不在q里多费W墨耽误大家好青春了^_^
名称Qpasswd
使用权限Q所有用?
使用方式Qpasswd [-k] [-l] [-u [-f]] [-d] [-S] [username]
说明Q用来更改用者的密码
参数Q?
-k
-l
-u
-f
-d 关闭使用者的密码认证功能, 使用者在d时将可以不用输入密码, 只有具备 root 权限的用者方可?
-S 昄指定使用者的密码认证U类, 只有具备 root 权限的用者方可?
[username] 指定帐号名称.
名称 : who
使用权线 : 所有用者都可?
使用方式 : who - [husfV] [user]
说明 : 昄pȝ中有那些使用者正在上面,昄的资料包含了使用?IDQ用的l端机,从那边连上来的,上线旉Q呆滞时_CPU 使用量,动作{等?
把计 :
-h : 不要昄标题?
-u : 不要昄使用者的动作/工作
-s : 使用短的格式来显C?
-f : 不要昄使用者的上线位置
-V : 昄E式版本
名称Q?etc/aliases
使用权限Q系l管理?
使用方式Q?L newaliases 更新资料?
说明Q?
sendmail 会用一个在 /etc/aliases 中的档案做用者名U{换的动作。当 sendmail 收到一个要送给 xxx 的信Ӟ它会依据 aliases档的内容送给另一个用者。这个功能可以创造一个只有在信gpȝ内才有效的用者。例?mailing list ׃用到q个功能Q在 mailinglist 中,我们可能会创造一个叫 redlinux@link.ece.uci.edu ?mailinglistQ但实际上ƈ没有一个叫 redlinux 的用者。实?aliases 档的内容是将送给q个使用者的信都收给 mailing list 处理E式负责分送的工作?
/etc/aliases 是一个文字模式的档案Qsendmail 需要一个二q位格式?/etc/aliases.db。newaliases 的功能传是将 /etc/aliases 转换成一?sendmail 所能了解的资料库。范例:
# newaliases
下面命o会做相同的事Q?
# sendmail -bi
相关命o:
mail, mailq, newaliases, sendmail
?mail [q回]
名称Qmail
使用权限Q所有用?
使用方式Qmail [-iInv] [-s subject] [-c cc-addr] [-b bcc-addr] user1 [user 2 ...]
说明Q?
mail 不仅只是一个指令, mail q是一个电子邮件程式,不过利用 mail 来读信的人应该很吧Q对于系l管理者来?mail 很有用Q因为管理者可以用 mail 写成 script Q定期寄一些备忘录提醒pȝ的用者?
参数Q?
i 忽略 tty 的中断讯受?(interrupt)
I 设成互动模式?(Interactive)
v 列印息,例如送信的地炏V状态等{?(verbose)
n 不读?mail.rc 讑֮档?
s 邮g标题?
c cc 邮g地址?
b bcc 邮g地址?
范例Q?
信仉给一个或以上的电子邮件地址Q由于没有加入其他的选项Q用者必输入标题与信g的内容等。?user2 没有L位置Q就会送给邮g伺服器的 user2 使用者?
mail user1@email.address
mail user1@email.address user2
?mail.txt 的内容寄l?user2 同时 cc l?user1 。如果将q一行指令设?cronjob 可以定时将备忘录寄l系l用者?
mail -s 标题 -c user1 user2 < mail.txt
指oQmesg
使用权限 : 所有用?
使用方式 : mesg [y|n]
说明 Q?军_是否允许其他Z讯息到自ql端Z?
把计 ?
y : 允许讯息传到l端Z面上?
n : 不允许讯息传到终端机介面??
如果没有讑֮Q则讯息传递与否则q端机界面目前状态而定?
例子 :
改变目前讯息讑֮Q改成不允许讯息传到l端Z面上 :
mesg n
?mesg 相关的指令有Q?talkQwriteQwall?
名称Q?etc/aliases
使用权限Q系l管理?
使用方式Q?newaliases
说明Q?
sendmail 会用一个在 /etc/aliases 中的档案做用者名U{换的动作。当 sendmail 收到一个要送给 xxx 的信Ӟ它会依据 aliases档的内容送给另一个用者。这个功能可以创造一个只有在信gpȝ内才有效的用者。例?mailing list ׃用到q个功能Q在 mailinglist 中,我们可能会创造一个叫 redlinux@link.ece.uci.edu ?mailinglistQ但实际上ƈ没有一个叫 redlinux 的用者。实?aliases 档的内容是将送给q个使用者的信都收给 mailing list 处理E式负责分送的工作?
/etc/aliases 是一个文字模式的档案Qsendmail 需要一个二q位格式?/etc/aliases.db。newaliases 的功能传是将 /etc/aliases 转换成一?sendmail 所能了解的资料库?
参数Q没有Q何参数?范例Q?
# newaliases
下面命o会做相同的事Q?
# sendmail -bi
相关命o:
mail, mailq, newaliases, sendmail
名称 : talk
使用权限 : 所有用?
使用方式 :
talk person [ttyname]
说明 : 与其他用者对?
把计 :
person : 预备对谈的用者帐P如果该用者在其他机器上,则可输入 person@machine.name
ttyname : 如果使用者同时有两个以上?tty q线Q可以自行选择合适的 tty 传讯?
例子.1 :
与现在机器上的用者Rollaend对谈Q此?Rollaend 只有一个连U?:
talk Rollaend
接下来就是等Rollaend回应Q若Rollaend接受Q则Rollaend输入 `talk jzlee`卛_开始对谈,l束h ctrl+c
例子.2 :与linuxfab.cx上的使用者Rollaend对谈Q用pts/2来对?:
talk Rollaend@linuxfab.cx pts/2
接下来就是等Rollaend回应Q若Rollaend接受Q则Rollaend输入 `talk jzlee@jzlee.home`卛_开始对谈,l束h ctrl+c
注意 : 若萤q的字会出现不正常的字元Q试着?ctrl+l 更新萤幕画面?
名称 : wall
使用权限 : 所有用?
使用方式 :
wall [ message ]
使用说明Q?
wall 会将讯息传给每一?mesg 讑֮?yes 的上U用者。当使用l端Z面做为标准传入时, 讯息l束旉加上 EOF (通常?Ctrl+D)?
例子 :
传讯?hi" l每一个用?:
wall hi
名称 : write
使用权限 : 所有用?
使用方式 :
write user [ttyname]
说明 : 传讯息给其他使用?
把计 :
user : 预备传讯息的使用者帐?
ttyname : 如果使用者同时有两个以上?tty q线Q可以自行选择合适的 tty 传讯?
例子.1 :
传讯息给 RollaendQ此?Rollaend 只有一个连U?:
write Rollaend
接下来就是将讯息打上去,l束h ctrl+c
例子.2 :传讯息给 RollaendQRollaend 的连U有 pts/2Qpts/3 :
write Rollaend pts/2
接下来就是将讯息打上去,l束h ctrl+c
注意 : 若对方设?mesg nQ则此时讯席无法传l对?
名称Qkill
使用权限Q所有用?
使用方式Q?
kill [ -s signal | -p ] [ -a ] pid ...
kill -l [ signal ]
说明Qkill 送出一个特定的信号 (signal) l行E?id ?pid 的行E根据该信号而做特定的动? 若没有指? 预设是送出l止 (TERM) 的信?
把计?
-s (signal) : 其中可用的讯h HUP (1), KILL (9), TERM (15), 分别代表着重跑, 砍掉, l束; 详细的信号可以用 kill -l
-p : 印出 pid , q不送出信号
-l (signal) : 列出所有可用的信号名称
范例Q?
?pid ?323 的行E砍?(kill) :
kill -9 323
?pid ?456 的行E重?(restart) :
kill -HUP 456
名称Qnice
使用权限Q所有用?
使用方式Qnice [-n adjustment] [-adjustment] [--adjustment=adjustment] [--help] [--version] [command [arg...]]
说明Q以更改q的优先序来执行E式, 如果未指定程? 则会印出目前的排E优先序, 内定?adjustment ?10, 范围?-20 (最高优先序) ?19 (最低优先序)
把计?
-n adjustment, -adjustment, --adjustment=adjustment 皆ؓ该原有优先序的增加 adjustment
--help 昄求助讯息
--version 昄版本资讯
范例Q?
?ls 的优先序?1 q执?:
nice -n 1 ls
?ls 的优先序?10 q执?:
nice ls?ls 的优先序?10 q执?
注意 : 优先?(priority) Z业系l用来决?CPU 分配的参敎ͼLinux 使用『回合制(round-robin)』的演算法来?CPU 排程Q优先序高Q所可能获得?CPU旉p多?
名称Qps
使用权限Q所有用?
使用方式Qps [options] [--help]
说明Q显C瞬间行E?(process) 的动?
参数Q?
ps 的参数非常多, 在此仅列出几个常用的参数q大略介l含?
-A 列出所有的行程
-w 昄加宽可以昄较多的资?
-au 昄较详l的资讯
-aux 昄所有包含其他用者的行程
au(x) 输出格式 :
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER: 行程拥有?
PID: pid
%CPU: 占用?CPU 使用?
%MEM: 占用的记忆体使用?
VSZ: 占用的虚拟记忆体大小
RSS: 占用的记忆体大小
TTY: l端的次要装|号?(minor device number of tty)
STAT: 该行E的状?
D: 不可中断的静?(通悸□□~bq行 I/O 动作)
R: 正在执行?
S: 静止状?
T: 暂停执行
Z: 不存在但暂时无法消除
W: 没有_的记忆体分页可分?
<: 高优先序的行E?
N: 低优先序的行E?
L: 有记忆体分页分配q在记忆体?(xpȝ或捱A I/O)
START: 行程开始时?
TIME: 执行的时?
COMMAND:所执行的指?
范例Q?
ps
PID TTY TIME CMD
2791 ttyp0 00:00:00 tcsh
3092 ttyp0 00:00:00 ps
% ps -A
PID TTY TIME CMD
1 ? 00:00:03 init
2 ? 00:00:00 kflushd
3 ? 00:00:00 kpiod
4 ? 00:00:00 kswapd
5 ? 00:00:00 mdrecoveryd
.......
% ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.7 1096 472 ? S Sep10 0:03 init [3]
root 2 0.0 0.0 0 0 ? SW Sep10 0:00 [kflushd]
root 3 0.0 0.0 0 0 ? SW Sep10 0:00 [kpiod]
root 4 0.0 0.0 0 0 ? SW Sep10 0:00 [kswapd]
........
名称Qpstree
使用权限Q所有用?
使用方式Q?
pstree [-a] [-c] [-h|-Hpid] [-l] [-n] [-p] [-u] [-G|-U] [pid|user]
pstree -V
说明Q将所有行E以树状图显C? 树状囑ְ会以 pid (如果有指? 或是?init q个基本行程为根 (root) ,如果有指定用?id , 则树状图会只昄该用者所拥有的行E?
参数Q?
-a 昄该行E的完整指o及参? 如果是被记忆体置换出ȝ行程则会加上括号
-c 如果有重覆的行程? 则分开列出 (预设值是会在前面加上 *
范例Q?
pstree
init-+-amd
|-apmd
|-atd
|-httpd---10*[httpd]
%pstree -p
init(1)-+-amd(447)
|-apmd(105)
|-atd(339)
%pstree -c
init-+-amd
|-apmd
|-atd
|-httpd-+-httpd
| |-httpd
| |-httpd
| |-httpd
....
名称Qrenice
使用权限Q所有用?
使用方式Qrenice priority [[-p] pid ...] [[-g] pgrp ...] [[-u] user ...]
说明Q重新指定一个或多个行程(Process)的优先序(一个或多个根据所下的参数而定)
把计?
-p pid 重新指定行程?id ?pid 的行E的优先?
-g pgrp 重新指定行程组(process group)?id ?pgrp 的行E?(一个或多个) 的优先序
-u user 重新指定行程拥有者ؓ user 的行E的优先?
范例Q?
行E?id ?987 ?32 的行E与行程拥有者ؓ daemon ?root 的优先序L?1 :
renice +1 987 -u daemon root -p 32
注意 : 每一个行E?Process)都有一个唯一?(unique) id?
名称Qtop
使用权限Q所有用?
使用方式Qtop [-] [d delay] [q] [c] [S] [s] [i] [n] [b]
说明Q即时显C?process 的动?
把计?
d : 改变昄的更新速度Q或是在交谈式指令列( interactive command)?s
q : 没有M延迟的显C速度Q如果用者是?superuser 的权限,?top 会以最高的优先序执?
c : 切换昄模式Q共有两U模式,一是只昄执行档的名称Q另一U是昄完整的\径与名称S : 累积模式Q会己完成或消q子行E?( dead child process ) ?CPU time 累积h
s : 安全模式Q将交谈式指令取? 避免潜在的危?
i : 不显CZQ何闲|?(idle) 或无?(zombie) 的行E?
n : 更新的次敎ͼ完成后将会退?top
b : Ҏ档模式,搭配 "n" 参数一起用,可以用来?top 的结果输出到档案?
范例Q?
昄更新十次后退?;
top -n 10
使用者将不能利用交谈式指令来对行E下命o :
top -s
更新显CZơ的l果输入到名UCؓ top.log 的档案里 :
top -n 2 -b < top.log
名称Qskill
使用权限Q所有用?
使用方式Q?skill [signal to send] [options] 选择E序的规?
说明Q?
送个讯号l正在执行的E序,预设的讯息ؓ TERM (中断) , 较常使用的讯息ؓ HUP , INT , KILL , STOP , CONT ,?0
讯息有三U写?分别?-9 , -SIGKILL , -KILL , 可以使用 -l ?-L 已列出可使用的讯息?
一般参敎ͼ
-f 快速模?未完成
-i 互动模式/ 每个动作要被确?
-v 详细输出/ 列出所选择E序的资?
-w 警告讯息/ 未完成
-n 没有动作/ 昄E序代号
参数Q选择E序的规则可以是, l端Z?使用者名U?E序代号,命o名称?
-t l端Z?( tty ?pty )
-u 使用者名U?
-p E序代号 ( pid )
-c 命o名称 可用的讯号:
以下列出已知的讯号名U?讯号代号,功能?
名称 (代号) 功能/ 描述
ALRM 14 d
HUP 1 d
INT 2 d
KILL 9 d/ 关闭
PIPE 13 d
POLL d
PROF d
TERM 15 d
USR1 d
USR2 d
VTALRM d
STKFLT d/ 只适用于i386, m68k, arm ?ppc 体
UNUSED d/ 只适用于i386, m68k, arm ?ppc 体
TSTP 停止 /产生与内容相关的行ؓ
TTIN 停止 /产生与内容相关的行ؓ
TTOU 停止 /产生与内容相关的行ؓ
STOP 停止 /关闭
CONT 从新启动 /如果在停止状态则从新启动,否则忽略
PWR 忽略 /在某些系l中会离开
WINCH 忽略
CHLD 忽略
ABRT 6 核心
FPE 8 核心
ILL 4 核心
QUIT 3 核心
SEGV 11 核心
TRAP 5 核心
SYS 核心 /或许未实作
EMT 核心 /或许未实作
BUS 核心 /核心p|
XCPU 核心 /核心p|
XFSZ 核心 /核心p|
范例Q?
停止所有在 PTY 装置上的E序
skill -KILL -v pts/*
停止三个使用?user1 , user2 , user3
skill -STOP user1 user2 user3
其他相关的命? kill
名称Qexpr
使用权限Q所有用?
### 字串长度
shell>> expr length "this is a test"
14
### 数字商数
shell>> expr 14 % 9
5
### 从位|处抓取字串
shell>> expr substr "this is a test" 3 5
is is
### 数字?only the first character
shell>> expr index "testforthegame" e
2
### 字串真实重现
shell>> expr quote thisisatestformela
thisisatestformela
名称: tr
### 1.比方说要把目录下所有的大写档名换ؓ写档名?
g有很多方式,"tr"是其中一U?
#!/bin/sh
dir="/tmp/testdir";
files=`find $dir -type f`;
for i in $files
do
dir_name=`dirname $i`;
ori_filename=`basename $i`
new_filename=`echo $ori_filename | tr [:upper:] [:lower:]` > /dev/null;
#echo $new_filename;
mv $dir_name/$ori_filename $dir_name/$new_filename
done
### 2.自己试验?..lowercase to uppercase
tr abcdef...[del] ABCDE...[del]
tr a-z A-Z
tr [:lower:] [:upper:]
shell>> echo "this is a test" | tr a-z A-Z > www
shell>> cat www
THIS IS A TEST
### 3.L不想要的字串
shell>> tr -d this ### L有关 t.e.s.t
this
man
man
test
e
### 4.取代字串
shell>> tr -s "this" "TEST"
this
TEST
th
TE
指oQclear
用途:清除萤幕用?
使用ҎQ在 console 上输?clear?
名称: reset, tset
使用Ҏ: tset [-IQqrs] [-] [-e ch] [-i ch] [-k ch] [-m mapping] [terminal]
使用说明:
reset 其实?tset 是一同个命oQ它的用途是讑֮l端机的状态。一般而言Q这个命令会自动的从环境变数、命令列或是其它的组态档军_目前l端机的型态。如果指定型态是 ? 的话Q这个程式会要求使用者输入终端机的型别?
׃q个E式会将l端回原始的状态,除了?login 时用外Q当pȝl端机因为程式不正常执行而进入一些奇怪的状态时Q你也可以用它来重设l端机o 例如不小心把二进位档?cat 指oq到l端机,怼有终端机不再回应键盘输入Q或是回应一些奇怪字元的问题。此时就可以?reset 终端机回复臛_始状态。选项说明:
-p
终端机cd昄在萤q上Q但不做讑֮的动作。这个命令可以用来取得目前终端机的类别?
-e ch
?erase 字元设成 ch
-i ch
中断字元设?ch
-k ch
删除一行的字元设成 ch
-I
不要做设定的动作Q如果没有用选项 -Q 的话Qerase、中断及删除字元的目前g然会送到萤幕上?
-Q
不要昄 erase、中断及删除字元的值到萤幕上?
-r
终端机cd印在萤幕上?
-s
设?TERM 用的命o用字串的型式送到l端ZQ通常?.login ?.profile 中用
范例:
让用者输入一个终端机型别q将l端到该型别的预讄态?
# reset ?
?erase 字元讑֮ control-h
# reset -e ^B
设定用的字串显C在萤幕?
# reset -s
Erase is control-B (^B).
Kill is control-U (^U).
Interrupt is control-C (^C).
TERM=xterm;
名称Qcompress
使用权限Q所有用?
使用方式Qcompress [-dfvcV] [-b maxbits] [file ...]
说明Q?
compress 是一个相当古老的 unix 档案压羃指oQ压~后的档案会加上一?.Z 延档名以区别未压羃的档案,压羃后的档案可以?uncompress 解压。若要将C档案压成一个压~档Q必d档?tar h再压~。由?gzip 可以产生更理想的压羃比例Q一般h多已改用 gzip 为档案压~工兗?
参数Q?
c 输出l果x准输备(一般指荧幕Q?
f 写入档案Q若目的档已l存在,则会被覆?(force)
v 程式执行的讯息印在荧幕?(verbose)
b 讑֮共同字串数的上限Q以位元计算Q可以设定的gؓ 9 ?16 bits 。由于D大,能用的共同字串?多Q压~比例就大Q所以一般用预讑ր?16 bits (bits)
d 压~档解压~?
V 列出版本讯息
范例Q?
?source.dat 压羃?source.dat.Z Q若 source.dat.Z 已经存在Q内容则会被压羃档覆盖?
compress -f source.dat
?source.dat 压羃?source.dat.Z Qƈ列印出压~比例?
-v ?-f 可以一起?
compress -vf source.dat
压~后的资料输出后再导?target.dat.Z 可以改变压羃档名?
compress -c source.dat > target.dat.Z
-b 的D大,压羃比例p大,范围?9-16 Q预讑ր是 16 ?
compress -b 12 source.dat
?source.dat.Z 解压?source.dat Q若档案已经存在Q用者按 y 以确定覆盖档案,若?-df E式则会自动覆盖档案。由于系l会自动加入 .Z 为g伸档名,所?source.dat 会自动当?source.dat.Z 处理?
compress -d source.dat
compress -d source.dat.Z
名称Q?lpd
使用权限Q?所有用?
使用方式Qlpd [-l] [#port]
lpd 是一个常ȝ印表机管理程式,它会Ҏ /etc/printcap 的内Ҏ理本地或远端的印表机?etc/printcap 中定义的每一个印表机必须?/var/lpd 中有一个相对应的目录,目录中以 cf 开头的档案表示一个等待送到适当装置的印表工作。这个档案通常是由 lpr 所产生?
lpr ?lpd l成了一个可以离U工作的pȝQ当你?lpr Ӟ印表Z需要能立即可用Q甚至不用存在。lpd 会自动监视印表机的状况,当印表机上线后,便立卛_档案送交处理。这个得所有的应用E式不必{待印表机完成前一工作?
参数Q?
-l: 一些除错讯息显C在标准输出上?
#port: 一般而言Qlpd 会?getservbyname 取得适当?TCP/IP portQ你可以使用q个参数 lpd 使用指定?port?
范例Q?
q个E式通常是由 /etc/rc.d 中的E式在系l启始阶D|行?
名称 lpq
-- 昄列表列中未完成的工作 用法
lpq [l] [P] [user]
说明
lpq 会显C由 lpd 所理的列表机贮列中未完成的项目?
范例
范例 1. 昄所有在 lp 列表列中的工?
# lpq -PlpRank Owner Job Files Total Size1st root 238 (standard input) 1428646 bytes
相关函数
lpr,lpc,lpd
名称Q?lpr
使用权限Q?所有用?
使用方式Qlpr [ -P printer ]
档案或是由标准输入送进来的资料送到印表列之中,印表机管理程?lpd 会在E后这个档案送给适当的程式或装置处理。lpr 可以用来料资送给本地或是q端的主机来处理?
参数Q?
-p Printer: 资料送至指定的印表机 PrinterQ预讑րgؓ lp?
范例Q?
?www.c ?kkk.c 送到印表?lp?
lpr -Plp www.c kkk.c
名称: lprm
-- 一个工作由印表列中U除 用法
/usr/bin/lprm [P] [file...]
说明
未完成的印表机工作会被攑֜印表列之中,q个命o可用来将常未送到印表机的工作取消。由于每一个印表机都有一个独立的贮列Q你可以?-P q个命o讑֮惌作用的印列机。如果没有设定的话,会用系l预讄印表机?
q个命o会检查用者是否有_的权限删除指定的档案Q一般而言Q只有档案的拥有者或是系l管理员才有q个权限?
范例
印表机 hpprinter 中的W?1123 号工作移?
lprm -Phpprinter 1123
第 1011 号工作由预设印表ZU除
lprm 1011
名称Q?fdformat
使用权限Q?所有用?
使用方式Qfdformat [-n] device
使用说明 :
Ҏ定的软碟|进行低阶格式化。用这个指令对软碟格式化的时候,最好指定像是下面的装置Q?
/dev/fd0d360 碟?A: Q磁片ؓ 360KB 碟
/dev/fd0h1440 碟?A: Q磁片ؓ 1.4MB 碟
/dev/fd1h1200 碟?B: Q磁片ؓ 1.2MB 碟
如果使用像是 /dev/fd0 之类的装|,如果里面的磁不是标准容量,格式化可能会p|。在q种情况之下Q用者可以用 setfdprm 指o先行指定必要参数?
参数Q?
-n 关闭认功能。这个选项会关闭格式化之后的确认步骤?
范例Q?
fdformat -n /dev/fd0h1440
磁机 A 的磁片格式化?1.4MB 的磁片。ƈ且省略确认的步骤?
名称Q?mformat
使用权限Q?所有用?
使用方式Q?
mformat [-t cylinders] [-h heads] [-s sectors] [-l volume_label] [-F] [-I fsVer-sion] [-S sizecode] [-2 sectors_on_track_0] [-M software_sector_size] [-a] [-X] [-C] [-H hidden_sectors] [-r root_sectors] [-B boot_sector] [-0 rate_on_track_0] [-A rate_on_other_tracks] [-1] [-k] drive:
在已l做q低阶格式化的磁片上建立 DOS 档案pȝ。如果在~译 mtools 的时候把 USE_2M 的参数打开Q部分与 2M 格式相关的参数就会发生作用。否则这些参敎ͼ像是 S,2,1,MQ不会发生作用?
参数Q?
-t 柱QsynliderQ数
-h 头QheadQ数
-s 每一轨的磁区数
-l 标签
-F 磁格式化?FAT32 格式Q不q这个参数还在实验中?
-I 讑֮ FAT32 中的版本受这当然也还在实验中?
-S 区大小代码Q计方式ؓ sector = 2^(大小代码+7)
-c 丛QclusterQ的区数。如果所l定的数字会D丛数超q?FAT 表的限制Qmformat 会自动放大磁区数?
-s
-M 软体区大小。这个数字就是系l回报的区大小。通常是和实际的大相同?
-a 如果加上q个参数Qmformat 会生一l?Atari pȝ的序Lq块软碟?
-X Y格式化?XDF 格式。用前必须先用 xdfcopy 指o对Y作低阶格式化的动作?
-C 产生一个可以安?MS-DOS 档案pȝ的磁媄像档Qdisk imageQ。当然对一个实体磁机下这个参数是没有意义的?
-H 隐藏区的数目。这通常适用在格式化碟的分割区Ӟ因ؓ通常一个分割区的前面还有分割表。这个参数未l测试,能不用就不用?
-n 碟序号
-r 根目录的大小Q单位是区数。这个参数只?FAT12 ?FAT16 有效?
-B 使用所指定的档案或是设备的开机磁区做片磁片或分割区的开机磁区。当然当中的体参数会随之更动?
-k 量保持原有的开机磁区?
-0 W?0 轨的资料传输?
-A W?0 轨以外的资料传输?
-2 使用 2m 格式
-1 不?2m 格式
范例Q?
mformat a:
q样会用预设值把 a: Q就?/dev/fd0Q里的磁片格式化?
名称Q?mkdosfs
使用权限Q?所有用?
使用方式Q?mkdosfs [ -c | -l filename ]
[ -f number_of_FATs ]
[ -F FAT_size ]
[ -i volume_id ]
[ -m message_file ]
[ -n volume_name ]
[ -r root_dir_entry ]
[ -s sector_per_cluster ]
[ -v ]
device
[ block_count ]
说明Q?建立 DOS 档案pȝ?device 指你惌建立 DOS 档案pȝ的装|代受像?/dev/hda1 {等?block_count 则是你希望配|的区块数。如?block_count 没有指定则系l会自动替你计算W合该装|大的区块数?
参数Q?
-c 建立档案pȝ之前先检查是否有坏轨?
-l 从得定的档案中读取坏轨记录?
-f 指定档案配置表(FAT , File Allocation Table)的数量。预讑րgؓ 2 。目?Linux ?FAT 档案pȝ不支援超q?2 ?FAT 表。通常q个不需要改?
-F 指定 FAT 表的大小Q通常?12 或是 16 个位元组?2 位元l通常用于碟片,16 位元l用于一般硬的分割区,也就是所谓的 FAT16 格式。这个值通常pȝ会自己选定适当的倹{在碟片上?FAT16 通常不会发生作用Q反之在碟上用 FAT12 亦然?
-i 指定 Volume ID。一般是一?4 个位元组的数字,像是 2e203a47 。如果不l系l会自己产生?
-m 当用者试囄q片片或是分割区开机,而上面没有作业系l时Q系l会l用者一D警告讯息。这个参数就是用来变更这个讯息的。你可以先用档案~辑好,然后用这个参数指定,或是?
-m -
q样pȝ会要求你直接输入q段文字。要特别注意的是Q档案里的字串长度不要超q?418 个字Q包括展开的蟩栏符PTABQ和换行W号Q换行符号在 DOS 底下两个字元!Q?
-n 指定 Volume NameQ就是磁标{。如同在 DOS 底下?format 指o一Pl不l都可以。没有预讑ր{?
-r 指定根目录底下的最大档案数。这里所谓的档案数包括目录。预讑ր是在Y上?112 或是 224 Q在碟上是 512。没事不要改q个数字?
-s 每一个磁丛(clusterQ的区数。必L 2 的次Ҏ。不q除非你知道你在作什么,q个g要ؕl?
-v 提供额外的讯?
范例Q?
mkdosfs -n Tester /dev/fd0 ?A 槽里的磁片格式化ؓ DOS 格式Qƈ标{设?Tester
]]>
??/strong>Q本文首先分析了Java源代码需要加密的原因Q简要介l了DES法及Java密码体系和Java密码扩展Q最后说明了利用DES加密法保护Java源代码的Ҏ及步骤?br />
关键?/strong> Java 加密 DES法
Java语言是一U非帔R用?a class="bluekey" target="_blank">|络~程的语aQ它的基本结构与C++极ؓ怼Q但抛弃?a class="bluekey" target="_blank">C/C++中指针等内容Q同时它吸收了Smalltalk、C++面向对象的编E思想。它h单性、鲁性、可UL性、动态性等特点。这些特点得Java成ؓ跨^台应用开发的一U规范,在世界范围内q泛传?br />
加密Java源码的原?/strong>
Java源代码经q编译以后在JVM中执行。由于JVM界面是完全透明的,Javac?/a>文g能够很容易通过反编?/a>器重新{换成源代码。因此,所有的法、类文g{都可以以源代码的Ş式被公开Q得Y件不能受C护,Z保护产权Q一般可以有以下几种ҎQ?br />
Q?Q?模糊"cLӞ加大?a class="bluekey" target="_blank">~译?/a>反编译源代码文g的难度。然而,可以修改反编译器Q之能够处理这些模p类文g。所以仅仅依?模糊cL?来保证代码的安全是不够的?br />
Q?Q流行的加密工具?a class="bluekey" target="_blank">源文?/a>q行加密Q比?a class="bluekey" target="_blank">PGPQ?a class="bluekey" target="_blank">Pretty Good PrivacyQ或GPGQ?a class="bluekey" target="_blank">GNU Privacy GuardQ。这Ӟ最l用户在q行应用之前必须先进?a class="bluekey" target="_blank">解密。但解密之后Q最l用户就有了一份不加密的类文gQ这和事先不q行加密没有什么差别?br />
Q?Q加密类文gQ在q行中JVM用定制的c装载器QClass LoaderQ解密类文g。Javaq行时装入字节码的机刉含地意味着可以对字节码q行修改。JVM每次装入cL件时都需要一个称为ClassLoader的对象,q个对象负责把新的类装入正在q行的JVM。JVMlClassLoader一个包含了待装入类Q例如java.lang.ObjectQ名字的字符Ԍ然后由ClassLoader负责扑ֈcLӞ装入原始数据Qƈ把它转换成一个Class对象?br />
用户下蝲的是加密q的cLӞ在加密类文g装入之时q行解密Q因此可以看成是一U即时解密器。由于解密后的字节码文g永远不会保存?a class="bluekey" target="_blank">文gpȝQ所?a class="bluekey" target="_blank">H密者很隑־到解密后的代码?
׃把原始字节码转换成Class对象的过E完全由pȝ负责Q所以创建定制ClassLoader对象其实q不困难Q只需先获得原始数据,接着可以进行包含解密在内的M转换?br />
Java密码体系和Java密码扩展
Java密码体系(JCA)和Java密码扩展(JCE)的设计目的是为Java提供与实现无关的加密函数API。它们都用factoryҎ来创建类的例E,然后把实际的加密函数委托l提供者指定的底层引擎,引擎中ؓcL供了服务提供者接口在Java中实现数据的加密/解密Q是使用其内|的JCE(Java加密扩展)来实现的?a class="bluekey" target="_blank">Java开?/a>工具?.1为实现包?a class="bluekey" target="_blank">数字{和信息摘要在内的加密功能Q推Z一U基于供应商的新型灵zd用编E接口。Java密码体系l构支持供应商的互操?同时支持g和Y件实现?br />
Java密码?a class="bluekey" target="_blank">l构设计遵@两个原则:
(1)法的独立性和可靠性?br />
(2)实现的独立性和怺作用性?br />
法的独立性是通过定义密码服务cL获得。用户只需了解密码法的概?而不用去兛_如何实现q些概念。实现的独立性和怺作用性通过密码服务提供器来实现。密码服务提供器是实C个或多个密码服务的一个或多个E序包。Y件开发商Ҏ一定接?各U算法实现后,打包成一个提供器,用户可以安装不同的提供器。安装和配置提供?可将包含提供器的ZIP?a class="bluekey" target="_blank">JAR文g攑֜CLASSPATH?再编辑Java安全属性文件来讄定义一个提供器。Javaq行环境Sun版本? 提供一个缺省的提供器Sun?br />
下面介绍DES法及如何利用DES法加密和解?/a>cL件的步骤?br />
DES法?/strong>
DESQ?a class="bluekey" target="_blank">Data Encryption StandardQ是发明最早的最q泛使用的分l对U加密算法。DES法的入口参数有三个Q?a class="bluekey" target="_blank">Key?a class="bluekey" target="_blank">Data、Mode。其?a class="bluekey" target="_blank">Key?个字节共64位,是DES法的工作密钥;Data也ؓ8个字?4位,是要被加密或被解密的数据QMode为DES的工作方式,有两U:加密或解密?br />
DES法工作程如下Q若Mode为加密模式,则利用Key Ҏ据Dataq行加密Q?生成Data的密码Ş式(64位)作ؓDES的输出结果;如Mode密模式,则利用Key对密码Ş式的数据Dataq行解密Q还原ؓData的明码Ş式(64位)作ؓDES的输出结果。在通信|?/a>l的两端Q双方约定一致的KeyQ在通信的源点用KeyҎ心数据进行DES加密Q然后以密码形式在公共通信|(?a class="bluekey" target="_blank">电话|?/a>Q中传输?a class="bluekey" target="_blank">通信|络的终点,数据到达目的地后Q用同样的Key对密码数据进行解密,便再C明码形式的核心数据。这P便保证了核心数据在公共通信|中传输的安全性和可靠性?br />
也可以通过定期在通信|络的源端和目的端同时改用新的KeyQ便能更q一步提高数据的保密性?br />利用DES法加密的步?br />
Q?Q生成一个安全密钥。在加密或解密Q何数据之前需要有一个密钥。密钥是随同被加密的应用E序一起发布的一D|据,密钥代码如下所C?br />
【生成一个密钥代码?br />
初用HIBERNATE的h也许都遇到过性能问题Q实现同一功能Q用HIBERNATE与用JDBC性能相差十几倍很正常Q如果不及早调整Q很可能影响整个目的进度?/p>
大体上,对于HIBERNATE性能调优的主要考虑点如?
Ø 数据库设计调?/p>
Ø HQL优化
Ø API的正?如根据不同的业务cd选用不同的集合及查询API)
Ø 主配|参?日志Q查询缓存,fetch_size, batch_size{?
Ø 映射文g优化(ID生成{略Q二U缓存,延迟加蝲Q关联优?
Ø 一U缓存的理
Ø 针对二~存Q还有许多特有的{略
Ø 事务控制{略?/p>
1?数据库设?/p>
a) 降低兌的复杂?/p>
b) 量不用联合主?/p>
c) ID的生成机Ӟ不同的数据库所提供的机制ƈ不完全一?/p>
d) 适当的冗余数据,不过分追求高范式
2?HQL优化
HQL如果抛开它同HIBERNATE本n一些缓存机制的兌QHQL的优化技巧同普通的SQL优化技巧一P可以很容易在|上扑ֈ一些经验之谈?/p>
3?主配|?/p>
a) 查询~存Q同下面讲的~存不太一P它是针对HQL语句的缓存,卛_全一L语句再次执行时可以利用缓存数据。但是,查询~存在一个交易系l?数据变更频繁Q查询条件相同的机率q不?中可能会起反作用:它会白白耗费大量的系l资源但却难以派上用场?/p>
b) fetch_sizeQ同JDBC的相兛_C用类|参数q不是越大越好,而应Ҏ业务特征去设|?/p>
c) batch_size同上?/p>
d) 生pȝ中,切记要关掉SQL语句打印?/p>
4?~存
a) 数据库~存:q~存是最高效和安全的Q但不同的数据库可管理的层次q不一P比如Q在ORACLE中,可以在徏表时指定整个表|于~存当中?/p>
b) SESSION~存:在一个HIBERNATE SESSION有效Q这U缓存的可干预性不强,大多于HIBERNATE自动理Q但它提供清除缓存的ҎQ这在大扚w增加/更新操作是有效的。比如,同时增加十万条记录,按常规方式进行,很可能会发现OutofMemeroy的异常,q时可能需要手动清除这一U缓?Session.evict以及Session.clear
c) 应用~存:在一个SESSIONFACTORY中有效,因此也是优化的重中之重,因此Q各cȝ略也考虑的较多,在将数据攑օq一U缓存之前,需要考虑一些前提条?
i. 数据不会被第三方修改(比如Q是否有另一个应用也在修改这些数?)
ii. 数据不会太大
iii. 数据不会频繁更新(否则使用CACHE可能适得其反)
iv. 数据会被频繁查询
v. 数据不是关键数据(如涉及钱Q安全等斚w的问??/p>
~存有几UŞ式,可以在映文件中配置:read-only(只读Q适用于很变更的静态数?历史数据)Qnonstrict-read-writeQread-write(比较普遍的Ş式,效率一?Qtransactional(JTA中,且支持的~存产品较少)
d) 分布式缓?同c)的配|一P只是~存产品的选用不同Q在目前的HIBERNATE中可供选择的不多,oscache, jboss cacheQ目前的大多数项目,对它们的用于集群的?特别是关键交易系l?都持保守态度。在集群环境中,只利用数据库U的~存是最安全的?/p>
5?延迟加蝲
a) 实体延迟加蝲:通过使用动态代理实?/p>
b) 集合延迟加蝲:通过实现自有的SET/LISTQHIBERNATE提供了这斚w的支?/p>
c) 属性gq加?
6?Ҏ选用
a) 完成同样一件事QHIBERNATE提供了可供选择的一些方式,但具体用什么方式,可能用性能/代码都会有媄响。显C,一ơ返回十万条记录(List/Set/Bag/Map{?q行处理Q很可能D内存不够的问题,而如果用Z游标(ScrollableResults)或Iterator的结果集Q则不存在这L问题?/p>
b) Session的load/getҎQ前者会使用二~存Q而后者则不用?/p>
c) Query和list/iteratorQ如果去仔细研究一下它们,你可能会发现很多有意思的情况Q二者主要区?如果使用了SpringQ在HibernateTemplate中对应find,iteratorҎ):
i. list只能利用查询~存(但在交易pȝ中查询缓存作用不?Q无法利用二U缓存中的单个实体,但list查出的对象会写入二~存Q但它一般只生成较少的执行SQL语句Q很多情况就是一?无关??/p>
ii. iterator则可以利用二U缓存,对于一条查询语句,它会先从数据库中扑և所有符合条件的记录的IDQ再通过IDȝ存找Q对于缓存中没有的记录,再构造语句从数据库中查出Q因此很Ҏ知道Q如果缓存中没有MW合条g的记录,使用iterator会生N+1条SQL语句(N为符合条件的记录?
iii. 通过iteratorQ配合缓存管理APIQ在量数据查询中可以很好的解决内存问题Q如:
while(it.hasNext()){
YouObject object = (YouObject)it.next();
session.evict(youObject);
sessionFactory.evice(YouObject.class, youObject.getId());
}
如果用listҎQ很可能出OutofMemory错误了?/p>
iv. 通过上面的说明,我想你应该知道如何去使用q两个方法了?/p>
7?集合的选用
在HIBERNATE 3.1文档的?9.5. Understanding Collection performance”中有详l的说明?/p>
8?事务控制
事务斚wҎ能有媄响的主要包括:事务方式的选用Q事务隔ȝ别以及锁的选用
a) 事务方式选用:如果不涉及多个事务管理器事务的话Q不需要用JTAQ只有JDBC的事务控制就可以?/p>
b) 事务隔离U别:参见标准的SQL事务隔离U别
c) 锁的选用:悲观?一般由具体的事务管理器实现)Q对于长事务效率低,但安全。乐观锁(一般在应用U别实现)Q如在HIBERNATE中可以定义VERSION字段Q显Ӟ如果有多个应用操作数据,且这些应用不是用同一U乐观锁机制Q则乐观锁会失效。因此,针对不同的数据应有不同的{略Q同前面许多情况一P很多时候我们是在效率与安全/准确性上找一个^衡点Q无论如何,优化都不是一个纯技术的问题Q你应该对你的应用和业务特征有够的了解?/p>
9?扚w操作
即是用JDBCQ在q行大批数据更新ӞBATCH与不使用BATCH有效率上也有很大的差别。我们可以通过讄batch_size来让其支持批量操作?/p>
举个例子Q要扚w删除某表中的对象Q如“delete Account”,打出来的语句Q会发现HIBERNATE扑և了所有ACCOUNT的IDQ再q行删除Q这主要是ؓ了维护二U缓存,q样效率肯定高不了,在后l的版本中增加了bulk delete/updateQ但q也无法解决~存的维护问题。也是_׃有了二~存的维护问题,HIBERNATE的批量操作效率ƈ不尽如h?
从前面许多要点可以看出,很多时候我们是在效率与安全/准确性上找一个^衡点Q无论如何,优化都不是一个纯技术的问题Q你应该对你的应用和业务特征有够的了解Q一般的Q优化方案应在架构设计期基本确定,否则可能D没必要的q工Q致佉K目g期,而作为架构师和项目经理,q要面对开发h员可能的抱怨,必竟Q我们对用户需求更改的控制力不大,但技?架构风险是应该在初期意识到ƈ制定好相关的对策?/p>
q有一点要注意Q应用层的缓存只是锦上添花,永远不要把它当救命稻草,应用的根?数据库设计,法Q高效的操作语句Q恰当API的选择{?才是最重要的。?/p>
Hibernate的缓?**********************************
1、首先设|EhCacheQ徏立配|文件ehcache.xmlQ默认的位置在class-pathQ可以放C的src目录下:
Q?xml version="1.0" encoding="UTF-8"?Q?br />QehcacheQ?br /> QdiskStore path="java.io.tmpdir"/Q? QdefaultCache maxElementsInMemory="10000" Q?-- ~存最大数?--Q?br /> eternal="false" Q?-- ~存是否持久 --Q?br /> overflowToDisk="true" Q?-- 是否保存到磁盘,当系l当机时--Q?br /> timeToIdleSeconds="300" Q?-- 当缓存闲|nU后销?--Q?br /> timeToLiveSeconds="180" Q?-- 当缓存存znU后销?-Q?br /> diskPersistent="false" diskExpiryThreadIntervalSeconds= "120"/Q? Q?ehcacheQ?/td> |
Q?-- 讄Hibernate的缓存接口类Q这个类在Hibernate包中 --Q?br />Qproperty name="cache.provider_class"Qorg.hibernate.cache.EhCacheProviderQ?propertyQ? Q?-- 是否使用查询~存 --Q?br /> Qproperty name="hibernate.cache.use_query_cache"QtrueQ?propertyQ?br /> 如果使用spring调用Hibernate的sessionFactory的话Q这栯|: Q?--HibernateSession工厂理 --Q?br /> Qbean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"Q?br /> Qproperty name="dataSource"Q?br /> Qref bean="datasource" /Q?br /> Q?propertyQ?br /> Qproperty name="hibernateProperties"Q?br /> QpropsQ?br /> Qprop key="hibernate.dialect"Qorg.hibernate.dialect.Oracle9DialectQ?propQ?br /> Qprop key="connection.provider_class"Qorg.hibernate.connection.C3P0ConnectionProviderQ?propQ?br /> Qprop key="hibernate.show_sql"QtrueQ?propQ?br /> Qprop key="hibernate.cache.use_query_cache"QtrueQ?propQ?br /> Qprop key="hibernate.cache.provider_class"Qorg.hibernate.cache.EhCacheProviderQ?propQ?br /> Q?propsQ?br /> Q?propertyQ?br /> Qproperty name="mappingDirectoryLocations"Q?br /> QlistQ?br /> QvalueQ?WEB-INF/classes/cn/rmic/manager/hibernate/Q?valueQ?br /> Q?listQ?br /> Q?propertyQ? Q?beanQ?/td> |
package cn.rmic.hibernatesample; import java.util.List; import org.hibernate.CacheMode; import org.hibernate.Criteria; import org.hibernate.Query; import org.hibernate.Session; import cn.rmic.hibernatesample.hibernate.HibernateSessionFactory; import cn.rmic.manager.po.Resources; public class testCacheSelectList ...{ /** *//** * @param args */ public static void main(String[] args) ...{ // TODO Auto-generated method stub Session s=HibernateSessionFactory.getSession(); Criteria c=s.createCriteria(Resources.class); c.setCacheable(true); List l=c.list(); // Query q=s.createQuery("From Resources r") // .setCacheable(true) // .setCacheRegion("frontpages") ; // List l=q.list(); Resources resources=(Resources)l.get(0); System.out.println("-1-"+resources.getName()); HibernateSessionFactory.closeSession(); try ...{ Thread.sleep(5000); } catch (InterruptedException e) ...{ // TODO Auto-generated catch block e.printStackTrace(); } s=HibernateSessionFactory.getSession(); c=s.createCriteria(Resources.class); c.setCacheable(true); l=c.list(); // q=s.createQuery("From Resources r").setCacheable(true) // .setCacheRegion("frontpages"); // l=q.list(); resources=(Resources)l.get(0); System.out.println("-2-"+resources.getName()); HibernateSessionFactory.closeSession(); } } |
初用HIBERNATE的h也许都遇到过性能问题Q实现同一功能Q用HIBERNATE与用JDBC性能相差十几倍很正常Q如果不及早调整Q很可能影响整个目的进度?/p>
大体上,对于HIBERNATE性能调优的主要考虑点如?
Ø 数据库设计调?/p>
Ø HQL优化
Ø API的正?如根据不同的业务cd选用不同的集合及查询API)
Ø 主配|参?日志Q查询缓存,fetch_size, batch_size{?
Ø 映射文g优化(ID生成{略Q二U缓存,延迟加蝲Q关联优?
Ø 一U缓存的理
Ø 针对二~存Q还有许多特有的{略
Ø 事务控制{略?/p>
1?数据库设?/p>
a) 降低兌的复杂?/p>
b) 量不用联合主?/p>
c) ID的生成机Ӟ不同的数据库所提供的机制ƈ不完全一?/p>
d) 适当的冗余数据,不过分追求高范式
2?HQL优化
HQL如果抛开它同HIBERNATE本n一些缓存机制的兌QHQL的优化技巧同普通的SQL优化技巧一P可以很容易在|上扑ֈ一些经验之谈?/p>
3?主配|?/p>
a) 查询~存Q同下面讲的~存不太一P它是针对HQL语句的缓存,卛_全一L语句再次执行时可以利用缓存数据。但是,查询~存在一个交易系l?数据变更频繁Q查询条件相同的机率q不?中可能会起反作用:它会白白耗费大量的系l资源但却难以派上用场?/p>
b) fetch_sizeQ同JDBC的相兛_C用类|参数q不是越大越好,而应Ҏ业务特征去设|?/p>
c) batch_size同上?/p>
d) 生pȝ中,切记要关掉SQL语句打印?/p>
4?~存
a) 数据库~存:q~存是最高效和安全的Q但不同的数据库可管理的层次q不一P比如Q在ORACLE中,可以在徏表时指定整个表|于~存当中?/p>
b) SESSION~存:在一个HIBERNATE SESSION有效Q这U缓存的可干预性不强,大多于HIBERNATE自动理Q但它提供清除缓存的ҎQ这在大扚w增加/更新操作是有效的。比如,同时增加十万条记录,按常规方式进行,很可能会发现OutofMemeroy的异常,q时可能需要手动清除这一U缓?Session.evict以及Session.clear
c) 应用~存:在一个SESSIONFACTORY中有效,因此也是优化的重中之重,因此Q各cȝ略也考虑的较多,在将数据攑օq一U缓存之前,需要考虑一些前提条?
i. 数据不会被第三方修改(比如Q是否有另一个应用也在修改这些数?)
ii. 数据不会太大
iii. 数据不会频繁更新(否则使用CACHE可能适得其反)
iv. 数据会被频繁查询
v. 数据不是关键数据(如涉及钱Q安全等斚w的问??/p>
~存有几UŞ式,可以在映文件中配置:read-only(只读Q适用于很变更的静态数?历史数据)Qnonstrict-read-writeQread-write(比较普遍的Ş式,效率一?Qtransactional(JTA中,且支持的~存产品较少)
d) 分布式缓?同c)的配|一P只是~存产品的选用不同Q在目前的HIBERNATE中可供选择的不多,oscache, jboss cacheQ目前的大多数项目,对它们的用于集群的?特别是关键交易系l?都持保守态度。在集群环境中,只利用数据库U的~存是最安全的?/p>
5?延迟加蝲
a) 实体延迟加蝲:通过使用动态代理实?/p>
b) 集合延迟加蝲:通过实现自有的SET/LISTQHIBERNATE提供了这斚w的支?/p>
c) 属性gq加?
6?Ҏ选用
a) 完成同样一件事QHIBERNATE提供了可供选择的一些方式,但具体用什么方式,可能用性能/代码都会有媄响。显C,一ơ返回十万条记录(List/Set/Bag/Map{?q行处理Q很可能D内存不够的问题,而如果用Z游标(ScrollableResults)或Iterator的结果集Q则不存在这L问题?/p>
b) Session的load/getҎQ前者会使用二~存Q而后者则不用?/p>
c) Query和list/iteratorQ如果去仔细研究一下它们,你可能会发现很多有意思的情况Q二者主要区?如果使用了SpringQ在HibernateTemplate中对应find,iteratorҎ):
i. list只能利用查询~存(但在交易pȝ中查询缓存作用不?Q无法利用二U缓存中的单个实体,但list查出的对象会写入二~存Q但它一般只生成较少的执行SQL语句Q很多情况就是一?无关??/p>
ii. iterator则可以利用二U缓存,对于一条查询语句,它会先从数据库中扑և所有符合条件的记录的IDQ再通过IDȝ存找Q对于缓存中没有的记录,再构造语句从数据库中查出Q因此很Ҏ知道Q如果缓存中没有MW合条g的记录,使用iterator会生N+1条SQL语句(N为符合条件的记录?
iii. 通过iteratorQ配合缓存管理APIQ在量数据查询中可以很好的解决内存问题Q如:
while(it.hasNext()){
YouObject object = (YouObject)it.next();
session.evict(youObject);
sessionFactory.evice(YouObject.class, youObject.getId());
}
如果用listҎQ很可能出OutofMemory错误了?/p>
iv. 通过上面的说明,我想你应该知道如何去使用q两个方法了?/p>
7?集合的选用
在HIBERNATE 3.1文档的?9.5. Understanding Collection performance”中有详l的说明?/p>
8?事务控制
事务斚wҎ能有媄响的主要包括:事务方式的选用Q事务隔ȝ别以及锁的选用
a) 事务方式选用:如果不涉及多个事务管理器事务的话Q不需要用JTAQ只有JDBC的事务控制就可以?/p>
b) 事务隔离U别:参见标准的SQL事务隔离U别
c) 锁的选用:悲观?一般由具体的事务管理器实现)Q对于长事务效率低,但安全。乐观锁(一般在应用U别实现)Q如在HIBERNATE中可以定义VERSION字段Q显Ӟ如果有多个应用操作数据,且这些应用不是用同一U乐观锁机制Q则乐观锁会失效。因此,针对不同的数据应有不同的{略Q同前面许多情况一P很多时候我们是在效率与安全/准确性上找一个^衡点Q无论如何,优化都不是一个纯技术的问题Q你应该对你的应用和业务特征有够的了解?/p>
9?扚w操作
即是用JDBCQ在q行大批数据更新ӞBATCH与不使用BATCH有效率上也有很大的差别。我们可以通过讄batch_size来让其支持批量操作?/p>
举个例子Q要扚w删除某表中的对象Q如“delete Account”,打出来的语句Q会发现HIBERNATE扑և了所有ACCOUNT的IDQ再q行删除Q这主要是ؓ了维护二U缓存,q样效率肯定高不了,在后l的版本中增加了bulk delete/updateQ但q也无法解决~存的维护问题。也是_׃有了二~存的维护问题,HIBERNATE的批量操作效率ƈ不尽如h?
从前面许多要点可以看出,很多时候我们是在效率与安全/准确性上找一个^衡点Q无论如何,优化都不是一个纯技术的问题Q你应该对你的应用和业务特征有够的了解Q一般的Q优化方案应在架构设计期基本确定,否则可能D没必要的q工Q致佉K目g期,而作为架构师和项目经理,q要面对开发h员可能的抱怨,必竟Q我们对用户需求更改的控制力不大,但技?架构风险是应该在初期意识到ƈ制定好相关的对策?/p>
q有一点要注意Q应用层的缓存只是锦上添花,永远不要把它当救命稻草,应用的根?数据库设计,法Q高效的操作语句Q恰当API的选择{?才是最重要的。?/p>
Hibernate的缓?**********************************
1、首先设|EhCacheQ徏立配|文件ehcache.xmlQ默认的位置在class-pathQ可以放C的src目录下:
Q?xml version="1.0" encoding="UTF-8"?Q?br />QehcacheQ?br /> QdiskStore path="java.io.tmpdir"/Q? QdefaultCache maxElementsInMemory="10000" Q?-- ~存最大数?--Q?br /> eternal="false" Q?-- ~存是否持久 --Q?br /> overflowToDisk="true" Q?-- 是否保存到磁盘,当系l当机时--Q?br /> timeToIdleSeconds="300" Q?-- 当缓存闲|nU后销?--Q?br /> timeToLiveSeconds="180" Q?-- 当缓存存znU后销?-Q?br /> diskPersistent="false" diskExpiryThreadIntervalSeconds= "120"/Q? Q?ehcacheQ?/td> |
Q?-- 讄Hibernate的缓存接口类Q这个类在Hibernate包中 --Q?br />Qproperty name="cache.provider_class"Qorg.hibernate.cache.EhCacheProviderQ?propertyQ? Q?-- 是否使用查询~存 --Q?br /> Qproperty name="hibernate.cache.use_query_cache"QtrueQ?propertyQ?br /> 如果使用spring调用Hibernate的sessionFactory的话Q这栯|: Q?--HibernateSession工厂理 --Q?br /> Qbean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"Q?br /> Qproperty name="dataSource"Q?br /> Qref bean="datasource" /Q?br /> Q?propertyQ?br /> Qproperty name="hibernateProperties"Q?br /> QpropsQ?br /> Qprop key="hibernate.dialect"Qorg.hibernate.dialect.Oracle9DialectQ?propQ?br /> Qprop key="connection.provider_class"Qorg.hibernate.connection.C3P0ConnectionProviderQ?propQ?br /> Qprop key="hibernate.show_sql"QtrueQ?propQ?br /> Qprop key="hibernate.cache.use_query_cache"QtrueQ?propQ?br /> Qprop key="hibernate.cache.provider_class"Qorg.hibernate.cache.EhCacheProviderQ?propQ?br /> Q?propsQ?br /> Q?propertyQ?br /> Qproperty name="mappingDirectoryLocations"Q?br /> QlistQ?br /> QvalueQ?WEB-INF/classes/cn/rmic/manager/hibernate/Q?valueQ?br /> Q?listQ?br /> Q?propertyQ? Q?beanQ?/td> |
package cn.rmic.hibernatesample; import java.util.List; import org.hibernate.CacheMode; import org.hibernate.Criteria; import org.hibernate.Query; import org.hibernate.Session; import cn.rmic.hibernatesample.hibernate.HibernateSessionFactory; import cn.rmic.manager.po.Resources; public class testCacheSelectList ...{ /** *//** * @param args */ public static void main(String[] args) ...{ // TODO Auto-generated method stub Session s=HibernateSessionFactory.getSession(); Criteria c=s.createCriteria(Resources.class); c.setCacheable(true); List l=c.list(); // Query q=s.createQuery("From Resources r") // .setCacheable(true) // .setCacheRegion("frontpages") ; // List l=q.list(); Resources resources=(Resources)l.get(0); System.out.println("-1-"+resources.getName()); HibernateSessionFactory.closeSession(); try ...{ Thread.sleep(5000); } catch (InterruptedException e) ...{ // TODO Auto-generated catch block e.printStackTrace(); } s=HibernateSessionFactory.getSession(); c=s.createCriteria(Resources.class); c.setCacheable(true); l=c.list(); // q=s.createQuery("From Resources r").setCacheable(true) // .setCacheRegion("frontpages"); // l=q.list(); resources=(Resources)l.get(0); System.out.println("-2-"+resources.getName()); HibernateSessionFactory.closeSession(); } } |
Struts~点Q?/p>
ActionForms - they’re a pain
Can’t unit test - StrutsTestCase only does integration
Project has been rumored as “dead?/p>
Display TagQ?/p>
Spring MVC~点Q?/p>
Configuration intensive - lots of XML
Requires writing lots of code in JSPs
Almost too flexible - no common parent Controller
WebWork~点Q?/p>
Small Community
Documentation is poorly organized
Tapestry~点Q?/p>
Documentation very conceptual, rather than
pragmatic
Steep learning curve - very few examples
Long release cycles - major upgrades every year
JSF~点Q?/p>
Tag soup for JSPs
Doesn't play well with REST or Security
No single source for implementation
SiteMeshQ?/p>
IDE支持
Struts has a lot of IDE support and even has frameworks built on top of it (i.e. Beehive’s PageFlow)
Spring has Spring IDE - only does XML validation, not a UI/web tool
WebWork has EclipseWork
Tapestry has Spindle - great for coders
JSF has many, and they're getting better and better
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.microsoft.jdbc.sqlserver.SQLServerDriver</property>
<property name="connection.url">jdbc:microsoft:sqlserver://localhost:1433/First</property>
<property name="connection.username">sa</property>
<property name="connection.password">123</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">
org.hibernate.cache.NoCacheProvider
</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">create</property>
<mapping resource="aa/FirstDemo.hbm.xml" />
</session-factory>
</hibernate-configuration>
----------------------------------------------------------------------------------
<session-factory>
<property name="connection.username">sa</property>
<property name="connection.url">jdbc:microsoft:sqlserver://localhost:1433;databasename=First</property>q里写错了晕
<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
<property name="myeclipse.connection.profile">ballacks</property>
<property name="connection.password">sa</property>
<property name="connection.driver_class">com.microsoft.jdbc.sqlserver.SQLServerDriver</property>
<property name="show_sql">true</property>
<mapping resource="bean/Classes.hbm.xml" />
<mapping resource="bean/Student.hbm.xml" />
</session-factory>