丹道真诀

Standard

打坐述真诠,端身跏趺盘,巍巍形不动,双手放身前。
周身须挺立,松肩体自闲,身不着拙相,调身首为先。
调心更玄妙,须得细精研,除却七情欲,炼己断魔顽。
灵山拴意马,玉树锁心猿,心中无一物,体泰性自闲。
意须空静无,结印太极玄,轻轻盘上放,闭口鹊桥连。
回光勿轻视,垂帘法中玄,且勿圆睁目,神光勿外现。
闭目非正法,阴火误眼前,首正是妙法,清静须自然。
仰面并低首,任督脉易断,如此长久坐,走火必生偏。
腰躬气不畅,污浊生此间,调息须自然,自然息便绵。
绵绵真息现,气气归丹元,切记回光照,返归下丹田。
勿须顽神守,着意法便偏,妙在不即离,勿忘勿助间。
微意守丹元,寂静待玄关,万法皆勿用,道在须弥间。
打坐有三关,疼痛入定难,睡魔阴气盛,破关依志坚。
腿麻与腰酸,或者身疲倦,心猿意马动,刹那心魔欢。
痛苦初发现,首见第一关,横心长久持,尼虹升九天。
次谓入定难,欲定越心烦,非是不能静,心法须口传。
观音言妙法,化己分坤乾,听守二法施,入定刹那间。
回光返照法,太上胎息玄,体性合太乙,坐忘虚无边。
不动无消息,乃是功未全,此时勿烦躁,心境须坦然。
静极忽生动,阴中阳自见,后天之火见,额中明月悬。
壶中火过热,卧龙取水添,丹炉热难忍,甘露灌顶巅。
此间有变化,切记心头间,坐上沉沉睡,非是功夫偏。
乃谓魔出现,睡魔第三关,真正谓魔道,须战睡魔关。
坐上法中行,功法同时现,坎离颠倒术,修行第一鞭。
心意勿散乱,万缘勿挂牵,醉饮醍醐酒,墙头花月圆。
子时先后天,一阳生时辨,万物始复苏,易谓复卦间。
二次地泽临,二阳乃发现,重炼水中金,周易龙在田。
三阳开泰时,三候佳期限,斩尽墙头花,搬运归故园。
辛勤熬一夜,明月天上悬,陈疴固疾祛,日月换新天。
参透三昧法,行功归自然,时时待阳现,刻刻守一玄。
修真功纯熟,刹那便豁然,先天离火降,烧开水中关。
真元神力大,火焰力冲天,直射到海底,九层铁鼓穿。
海底驾法船,奔腾上九天,切勿停巅顶,下桥归家园。
任督关通毕,才塑法身玄,坎离初交媾,法转小周天。
此谓子午地,太乙循经玄,**徐徐转,细研炼汞铅。
风和日丽暖,紫气绕身边,温温祥霭气,沐浴法身坚。
常此温和坐,先天性自圆,待到惊雷响,法力大无边。
震动重楼破,奇经八脉翻,六根皆搐动,两肾如汤煎。
海底红日照,肘后金晶现,真元行有经,运转大周天。
此非最终法,还须颠倒颠,欲求明珠现,丹鼎须重安。
元精牢封固,后天化先天,首明天地理,次须阴阳辨。
周天重头数,乾坤颠倒安,药生如何采,巽风呼啸天。
药盛及时采,打马跃河间,炼精化真气,精气养胎圆。
再言用神法,三家乃相见,青龙会白虎,黍米落黄田。
百日筑基法,即难亦非难,凝神入归中,功纯结元丹。
时时忘言守,刻刻待玄关,十月怀胎满,明珠出黄田。
性命同证法,炼性更须言,七情六欲净,九年纯阳玄。
述时真容易,修炼亦简便,药生知老嫩,恰当精细间。
药老难烹炼,药嫩乃不坚,正逢花盛开,采药归壶间。
火候亦用精,文武须善辨,文火温养用,武火乃采炼。
散功导引法,法法玄中玄,转睛乃明目,降火养神全。
五劳七伤祛,山根乃头安,叩齿添肾水,赤龙搅海玄。
玉液还丹法,吞津入丹田,再运周天气,炼气助道坚。
韦驮献杵式,降魔护道全,弯弓乃射虎,左右安心田。
擎天翘剪式,黄庭主人安,霸王举鼎法,三田一脉穿。
倒转河车法,再养心神全,双龙入海式,太极化腰间。
搬足须用力,修炼息自然,浴面法中法,摩睛乃相间。
提轮勿忘却,昆仑照顶玄,欲求修真术,须得明师传。
口传与心授,纸上难明言,得法还须炼,只要道心坚。
依法长修持,丹道自然圆。

下文原为阎政昌祖师传于栖心子先生的七言格丹道真诀,1988年栖心子先生在迁居时不慎遗失。为将真诀传承下来,栖心子先生于1992年以五言格形式追忆写出。期间,曾有本门派中人阅过此文。1997年后再次遗失。现此文惊现于网站“武林绝技之家”,不知出于何处,请知情者提供线索。观此文,已有不少错漏,内容已失去原意。现栖心子先生对此文进行了校正,刊发于此,以对祖师负责,对后人负责,亦为了以正视听。

丹 道 真 诀

栖心子

打坐述真诠,端身跏趺盘,巍巍形不动,双手放身前。

周身须挺立,松肩体自闲,身不着拙相,调身首为先。

调心更玄妙,需得细精研,除却七情欲,炼己断魔顽。

灵山栓意马,玉树锁心猿,心中无一物,体泰性自闲。

意须空静无,结印太极玄,轻轻盘上放,闭口鹊桥连。

回光勿轻视,垂帘法中玄,且勿园睁目,神光勿外现。

闭目非正法,阴火误眼前,首正是妙法,清静须自然。

仰面并低首,任督脉易断,如此长久座,走火必生偏。

腰躬气不畅,污浊生此间,调息需自然,自然息便绵。

绵绵真息现,气气归丹元,切记回光照,返归下丹田。

勿须顽神守,着意法便偏,妙在不即离,勿忘勿助间。

微意守丹元,寂静待玄关,万法皆勿用,道在须弥间。

打坐有三关,疼痛入定难,睡魔阴气盛,破关依志坚。

腿麻与腰酸,或者身疲倦,心猿意马动,刹那心魔欢。

痛苦初发现,首见第一关,恒心长久持,尼虹升九天。

次为入定难,欲定心亦烦,非是不能静,心法要口传。

观音言妙法,化己分坤乾,听守二法施,入定刹那间。

回光返照法,太上胎息玄,体性合太乙,坐忘虚无边。

不动无消息,乃是功未全,此时勿烦躁,心境须坦然。

静极忽生动,阴中阳自见,后天之火现,额中明月玄。

壶中火过热,卧龙取水添,丹炉热难忍,甘露灌顶巅。

此间有变化,切记心头间,坐上沉沉睡,非是功夫偏。

乃谓魔出现,睡魔第一关,欲待真阳现,须战睡魔关。

坐上法中行,功法同时现,坎离颠倒术,修行第一剑。

心意勿散乱,万缘勿挂牵,醉饮醍醐酒,墙头花月圆。

子时先后天,一阳生时辨,万物始复苏,易谓复卦间。

二次地泽临,二阳乃发现,重炼水中金,周易龙在田。

三阳开泰时,三候佳期现,斩尽墙头花,搬运归故园。

辛勤熬一夜,明月天上玄,陈疴固疾去,日月换新天。

参透三味法,行功归自然,时时待阳现,刻刻守一玄。

修真功纯熟,刹那便豁然,先天离火降,烧开水中关。

真元神力大,火焰力冲天,直射到海底,九层铁鼓穿。

海底驾法船,奔腾上九天,切勿停巅顶,下桥归家园。

任督脉通毕,才塑法身玄,坎离初交媾,法转小周天。

此谓子午法,太乙循经玄,真(jie)徐徐转,细研炼汞铅。

风和日丽暖,紫气绕身边,温温祥霭气,沐浴法身坚。

常此温和坐,先天性自圆,待到惊雷响,法力大无边。

震动重楼破,奇经八脉翻,六根皆搐动,两肾如汤煎。

海底红日照,毫光照大千,真元行有径,运转大周天。

此非最终法,还需巅倒巅,药生如何采,巽风呼啸天。

药生及时采,打马越河涧,炼精化真气,精气养胎圆。

再言用神法,三家乃相见,青龙会白虎,黍米落黄田。

百日筑基法,既难亦非难,凝神入归中,功纯结元丹。

时时忘言守,刻刻待玄关,十月怀胎满,圣婴出黄田。

性命同证法,炼性更须言,七情六欲净,九年纯阳玄。

述时真容易,修炼亦简便,药生知老嫩,恰当精细间。

药老难烹炼,药嫩乃不坚,正逢花盛开,采药归壶间。

火候亦用精,文武须善辨,文火温养用,武火乃采炼。

散功导引法,法法玄中玄,转睛乃明目,降火养神全。

五劳七伤法,山根乃头安,叩齿添肾水,赤龙搅海玄。

玉液还丹法,吞津入丹田,再运周天气,炼气助道安。

韦陀献杵式,降魔护道全,弯弓乃射虎,左右安心田。

擎天翘剪式,黄庭主人安,霸王举鼎法,三田一脉穿。

倒转河车法,再养心神全,双龙入海式,太极化腰间。

搬足需用力,修炼息自然,浴面法中强,摩睛乃相间。

提轮勿忘却,昆仑照顶玄,欲求修真术,须得明师传。

口传与心授,纸上难明言,得法还须炼,只要道心坚。

依法长修持,丹道自然圆。

丘处机《磻溪集》

Standard

丘处机《磻溪集》

殷诚安 点校

序一
玉峰老人讲经四十年,缘深未断。丙午春,演羲易于条阴之北郊。有三仙者自陇山来谒我祗宫,囊出一篇,乃磻溪丘公长春举扬玄谛、开诱迷朋而作也。启缄阅焉,其文豪纵,意出新奇,盖匪俗学所能知者。昔玉官李乐然,与玉峰俱出靳秀觉之门,而李自颖悟,玄言惊人,非世才之所能窥。既与序而传之矣。嘉哉!道之聪非世之聪也,道之言非世之言也。何以征之乎?俗学者虽能鼓颊挥毫,不过歌咏情性,搜罗景物。至造理者,明天人之际,助圣贤之教,亦可与日月争悬。若夫悟真之士特不斯然,发无言之言,上明造化;彰无形之形,下脱死生。信手拈来,不劳神思,空喑自震,奋为雷霆,本文不作,灿成斗星。玉峰老人,今于群仙而证之,不求高而自高,不期神而自神。岂非一气通彻,六窗洞辟,动容无不妙,出语总成真,本来如是非,假他通者邪?如《磻溪集》云:“手握灵珠常奋笔,心开天籁不吹箫。”又云:“顶戴松花吃松子,松溪和月饮松风。”又云:“遍撮山头三伏暑,都教化作一团冰。”又云:“有无皆自定,贪爱复何为?”又云:“酒倾金露滑,茶点玉芝香。”又词云:“般般放下头头是,选甚花街并柳市。虚空体,本来一物无凝滞。”又云:“天下周游身不动,人间照了心无用。”又云:“踏尽铁鞋迷,不出庵门透。”略举二三数,读者当广知也。呜呼,今之仙缘,必宿有仙契者乎?昔在东庵与王风仙全真结缘,在长安与马丹阳结缘。去秋(氵睿)州人来,与谭仙结缘。唯丘公远处陇上,是数者皆风仙之徒,今悉得结其缘,非人力之所能致也。虽然,丘仙之道,岂为吾而显也?盖光辉之大,世有不可掩者。于是乎,亦得与结缘焉。
时大定丙午五月   日,中条山玉峰老人胡光谦序。
序二
兰生深林,不以无人而不香;鹤鸣九皋,自然有闻而及外。高人胜士,或幽栖穷处,甘枯槁于山樊;或混杂同尘肆,沉沦于廛市。虽室迩而人远,觉心静而地偏。飘飘泛泛,喻孤飞之云,不系之舟,隐起灭于丹霄沧溟之际,将何往而不自适耶?加之玄元为师,泰和为友,遐襟旷迹,渊停谷虚。效内观之达人,法勤行之上士,修真养命,累功及人间。亦寄兴言怀,高吟大著,遵皇人之紫笔,演大洞之空歌。文辞章句,往往见于世焉。是以兰之吹香,鹤之声闻乎?我仪图之,今长春子丘公,非斯人之徒欤,而谁欤?公本登州栖霞人,与刘公、谭公、马公,俱图学于终南王风子。先生著名海上,远近敬仰,号丘刘谭马。若古《祛惑论》所谓神仙道士,若太上说养性得仙三十六法,寂寞在人间者也。门人弟子赍公所作诗曲杂文,来谒序引。余素未遂觏止临江之表,而获睹雄编,嘉其恬淡闲逸,纵凡俪俚,无所拘碍。若游戏于翰墨畦迳外者,不雕不琢,匪丹匪青,土鼓蒉桴之不求响奏,玄酒大羹之不事味享。知音知美,其在斯乎!唐蒋防称静福山廖冲曰:“仙书无文,仙语无词,以心传心,天地不知,放情逍遥,今古为谁?”予丘公复云。
时大定丁未长至日,文林郎前太常博士兼校书郎云骑尉致仕平阳毛麾序。

序三
且夫至道之妙,不得以声色求,而不得以形迹窥。必赖至人为驯致计,(扌离)章摘句,俾得传播诵之、歌咏之,而渐能游圣域而造玄门者也。然而句乏警策,文无渊底,则乌可以歆艳当时而激励后学者哉?今见长春子丘公《磻溪集》,片言只字,皆足以警聋瞽而洗尘嚣也。宁非生而颖悟,未弱冠而志于道,不寐者余四十载,日记三千言,身行万里地,三教九流贮蓄于胸臆,照耀于神识故也!宜乎声驰丹阙,有纶音之邀,契偶真仙,喜金鳞之得。因知从重阳之役者无虑千百辈,唯丘刘谭马四公,时为秀出,然翘翘之誉,独有归焉。适有旧友陇西公亨道,自东莱直抵奉城郡署,恳求集序,拜手而加款者数四,自知弓刀簿领之手,不足为形容仿佛。然稔慕风声,恨未披际,况季侯之来,引绳不可挹。故让之无计,而勉书数字。
时泰和丙寅岁重午后一日,昭义大将军武定军节度使兼奉圣州管内观察使提举常平仓护军漆水郡开国侯食邑一千户食实封一百户移刺霖题。

序四
昔蒙庄著书三十三篇,大率寓言藉外之论。后之谈道者亦然,以黜聪去羡,颐神养气为本。至于接物诱俗,革顽释蔽,亦不免托默于语。东州高士长春子丘公,世居登之栖霞。未冠一年,游昆嵛山遇重阳子王害风,一言而道合,遂师事之。王遗以诗,有“被余缓缓收纶线,拽入蓬莱永自由”。其深入理窟可知已。久之,与同志马公、谭公、刘公,陪从重阳子游南京。识者目丘刘谭马为林下四友。居无几,重阳子捐馆。四人护丧归殡终南,庐于墓次。服除,各议所之适。惟公乐秦陇之风,居磻溪庙六年,龙门山七年。丐食饮以度朝夕,声名籍甚。大定戊申,世宗皇帝闻之,驿召至京师,赐以冠巾绦服,见于便殿。前后凡四进长短句,以述修真之意。上嘉叹焉。及还山之后,接物应俗,随宜答问,有诗颂歌词,无虑若干首。文直而理到,信乎无欲观妙,深造自得者欤。其徒裒为巨帙,将锓木以广其传,谒文以冠篇首。愚以谓:古隐君子有三概。或自放草泽,名往从之,人主之尊,犹物色而招访或持峭行,不屈于俗,虽有所应,终不可縻以物务,使人人想望风采;或资槁薄而乐山林,逃空虚而不返,使天下常高其德,不可加訾。长春子兼而有之,宜乎以野服承圣问,使四方怀想而企慕焉。非如放利之徒,假隐自名,欺愚诳瞽,为得计哉。先生今在栖霞太虚观,未有承颜接膝之期,所以序其崖略者,庶他时邂逅,不以我为生客。
泰和戊辰闰四月望日,翰林学士中顺大夫知制诰兼国子司业轻车都尉颖川县开国伯食邑七百户赐紫金鱼袋安东陈大任序。

磻溪集卷一
栖霞长春子丘处机撰

七言律诗

秦川
秦川自古帝王州,景色蒙笼瑞气浮。
触目山河俱秀发,披颜人物竞风流。
十年苦志忘高卧,万里甘心作远游。
特纵孤云来此地,烟霞洞府习真修。

磻溪
故人别后信天缘,浪迹西游住虢川。
宛转风尘过万里,盘桓岩谷洎三年。
安贫只解同今日,抱朴畴能继古仙。
幸得清凉无垢地,栖真且放日高眠。

磻溪凿长春洞
峨峨峻岭接云衢,古柏参差一万株。
瑞草不容凡客见,灵禽唯只道人呼。
凿开洞府群仙降,炼就丹砂百怪诛。
福地名山何处有,长春即是小蓬壶。

幽居
台边水谷尤清旷,野外山家至寂寥。
绝塞云收天耿耿,空林夜静月萧萧。
扬眉瞬目开怀抱,散发披襟远市朝。
自解偷生岩嶂窟,谁能阐化法轮桥。

春晓雨
雨晴春色倍光辉,风引泉声出翠微。
宿鸟繁吟朝斗巧,游人远适夜忘归。
参差绿树初腾秀,浩汗青苗乍长肥。
洞口时闻三岛鹤,天隅来访一蓑衣。

坚志
吾之向道极心坚,佩服丹经自早年。
遁迹岩阿方十九,飘蓬地里越三千。
无情不作乡中梦,有志须为物外仙。
假使福轻魔障重,挨排功到必周全。

自咏
自游云水独峥嵘,不恋红尘大火坑。
万顷江湖为旧业,一蓑烟雨任平生。
醉来石上披襟卧,觉后林间掉臂行。
每到夜深云霁处,蟾光影里学吹笙。

答甘北镇孟秀才(乃虔州也)
一别家乡整十年,飘蓬云水入秦川。
衣宽放荡秋来补,食饱萧条夜处眠。
陕右不干浮世事,天涯曾遇大罗仙。
功亏未得长生信,坐待嘉音旷峪前。

答李四秀才邀住渭北
彼有诗,年前曾许过河来。
本来今岁合云游,性劣那堪道未周。
故我身心随日月,与他岩壑度春秋。
深承虢邑多才士,远访磻溪遁迹流。
不在相邀居北郭,此中亦可论真修。

道友邀游磻溪太公庙以诗辞之
自无狂兴不追游,议破诸余万事休。
谁向磻溪消郁闷,闲居岩壑且淹留。
昔违海上三千里,鲁涉途中二十州。
看尽名山无限景,大都身外没堪酬。

磻溪庙觅驰马
闻说磻溪隐太公,岩高树密壮祠雄。
花朝石窟龙吟雾,月夜山门虎啸风。
万载熊罴名不朽,三春驰马献无穷。
将诗为觅千余匹,染翰聊为度日功。

答宰公子许秀才
森森绿桧锁天涯,峭壁中藏野客家。
碧洞经年无火烛,青山终日有烟霞。
虚心实腹唯求饭,待客迎宾不点茶。
自乐安闲微得趣,门风何足向人夸。

答清河氏
神明虽是落凡胎,气直终须有道材。
只恐丹砂脐下去,重教白雪耳边来。
如何脱免红尘境,似我登临碧嶂台。
步步嬉游天汉出,时时腾踏野云开。
赠泾州(足夹)趺郎中暨刘解元
凡为道友欲相寻,不用浮财礼数钦。
俗物光辉难买道,人情拘束易劳心。
疏慵寡学文章浅,淡泊幽居岁月深。
格外闲愁都绝想,云中来听一高吟。

赠王周二生见访
二公何事挈盘餐,出郭嬉游草莽间。
宛转寻村来访道,因循乐道暂偷闲。
深知旧有逍遥志,远看虚无崒(“山”下“律”)山。
尽日开怀恣谈笑,夜深同步月明还。

众道友问修行
余今踪迹任蹉跎,宁论修行事若何?
道眼无光慵入市,天心难合且随波。
饥时只解巡门乞,饱后兼能鼓腹歌。
除此一身愚作外,万般余事不知他。

寄道友觅败布故履
余在西虢六年,未尝一新衣履,每至中秋,唯余补褐衲耳。
秋风忽起雨天凉,木叶萧疏草渐黄。
褐衲悬鹑唯关补,芒鞋伏兔不能狂。
有身易着饥寒苦,无福难逃日月长。
但愿诸公怀恻隐,扶持同步入仙乡。

次韵银张八秀才
郁郁烟霞满谷中,冥冥心迹体虚空。
长歌爱履临春水,独坐看云对晓风。
远害诚能依道力,施恩未解接神功。
经书突奥君常究,返照何须更系东?

虢县银张五秀才处借书
盛族文章旧得名,芝兰玉树满阶庭。
光辉代代生豪杰,讲论时时聚德星。
顾我微才弘道晚,知君博学贯心灵。
嘲吟不用多披览,续借闲书混杳冥。

中秋不见月
几年明月不昭彰,玳席虚劳设万方。
每恨他时遭雨隔,那知今夜复云藏。
仙娥莫是簪花睡,玉兔还为捣药忙。
世俗欢娱无所益,冥冥物外且韬光。

见月
沉沉云退晚风幽,皎皎蟾光奋九州。
万里碧天清照夜,四郊黄叶冷飞秋。
高空似睹虾蟆现,大野还知魍魉囚。
脱洒圆明孤且洁,飘飘尘外不淹留。

王宅月桂(借其义也)
太原门下景幽深,一簇仙花压古今。
根干发从云上面,祖宗来自月中心。
香苞灼灼披红粉,茂叶重重锁绿阴。
朵朵精神皆异俗,飘然特使众人钦。

又  栽月桂
匠手亲封月桂栽,幽人自植宝花台。
灵根妙绝非凡种,秀气冲和是道材。
日月交流千古异,乾坤独王四时开。
英贤好顾长春景,莫把群芳一类裁(亦作猜)。

山居

龙门峡水净滔滔,南激朱崖雪浪高。
万壑泉源争涌凑,千岩石壁竞呼号。
周流截断红尘境,宛转翻开白玉膏。
胜境无穷言不尽,临风时顾一挥毫。

不怨深山自采樵,山中别有好清标。
幽居石室仙乡近,不假环墙世事遥。
饮食高呼天外鹤,摩云仰看峡中雕。
时时皂白浮沉景,显贯真空慰寂寥。

独自深山(扌益)寂寥,闲云作伴屏喧嚣。
耽慵不念生涯拙,好静唯便熟境销。
著假空贪齐李杜,明真何必等松乔?
研穷寿算文章力,岂夺虚无造化标?

芭蕉(陇山也)
一叶青笺仰掌开,三湫白浪散花回(山有禹庙下俯三湫)。
日中有客频来赏,月下无人独自陪。
造化乾坤难比大(草木之中唯蕉叶最大),寻常风雨莫教摧。
留君日日当金案,与客时时庆玉杯(茅君学道于齐,不见使人,而金案玉杯自来人前)。

赞丹阳长真悟道
马氏谭君达圣朝,疑情万古一时超。
云中采药烹金鼎,火后收丹贮玉瓢。
手握灵珠常奋笔,心开天籁不吹箫。
看看跨鹤乘风去,海上人间影迹遥。


一种灵禽体性高,丹砂为顶雪为毛。
冥冥巨海游三岛,矫矫长风戾九皋。
洒落精神超俗物,飞腾志气接仙曹。
搏风整翮云霄上,万里峥嵘自不劳。

岭北西京留守夹谷清神索
东海疏狂犹目断,西京留守未心开。
去年奉敕三冬往,今夏斋书九月来。
北地官荣何日罢,南山道隐几时回。
直须早作彭城计,燕国家风自不(阜贵)。(彭城乃海蟾公也)

易州西山(耳炎)公堂
高高云外(耳炎)公堂,闪闪云霞照洞光。
千仞峰峦排左右,万株松柏互低昂。
山翁不解谈今古,野客时来讲混茫。
休道一生空打坐,也胜尘世走忙忙。

福山县黄箓醮感应(并序)
明昌甲寅秋九月,建黄箓于福山县。二十八日午后,将传符受戒,有鹤十一翱翔乎坛上,终夕不去。越一日设醮,闻天关震响,北极下红光烛地,可辨纤悉,士民靡不见者。
华灯照耀积金山,人在蓬壶咫尺间。
下士倾心开地府,高真威力动天关。
千门列祭严香火,万口同声启笑颜。
三界十方功德备,彩云仙鹤自回还。

承安丁巳冬至后苦雪(时有事北边)
冬前冬后雪漫漫,淑气销沉万物干。
出塞马惊山路险,防边人苦铁衣寒。
虽愁海北边灵苦,幸喜山东士庶安。
日费国资三十万,如何性命不凋残?

平山堂(四首)
(栖霞太虚观也)

年年三伏上平山,山上游人绝往还。
目视青霄云澹澹,身横碧落性闲闲。
孤高迥出林峦表,旷望殊非海岱间。
白日红尘车马客,谁能到此一凭栏?

山堂高洁倚天凉,天外清风入坐长。
青鸟有时来顾盼,白云终日自飞扬。
金坛玉宇知何在?绛阙琼楼古未详。
争似山家休歇去,身心不动到仙乡。

山堂昼静客来稀,匝坐亭亭列翠微。
碧汉无瑕红日转,青山不动白云飞。
参差万有彰神化,渺邈三灵合范围。
终始盖由清净道,人能天地悉皆归。

三竿红日眠犹在,十里青山坐对闲。
不觉人来幽圃外,时惊犬吠白云间。
无心自得成长往,了一何须问大还?
只恐逡巡下天诏,悠扬无计乐平山。(聊戏之耳)

海上观涛
大风时起北溟寒,万里惊涛辊雪山。
怒色冲天昏气象,雷声出地骇尘寰。
江神汹浪潜输(矣欠),河伯威灵溢汗颜。
白马素车空有势,非仙无路可跻攀。

题诸潘庵
登郡西南十里余,大开泉石致幽居。
山深海阔相依映,地僻云闲任卷舒。
夹道清池通熠耀,倚天高柳挂蟾蜍。
鸣琴坐对烟霞客,笑指劳生一梦虚。

中秋日与道友游诸潘
(时有将赴秋闱者)
爽气清高暑气阑,园林欲变锦纹斑。
长风渡海来沙漠,短晷经天下玉关。
设席邀宾龙树侧,鸣琴待月虎溪间。
良朋自得真佳趣,不待蟾宫把桂攀。

秋旦与蓬莱道友游西溪
临水登山跨晓风,虚心瞪目俯秋空。
云迷海峤沉沉碧,日射天轮灿灿红。
游兴不随他物转,和光聊与世尘同。
三年四度乘嘉会,又到山西涨海东。

途中作
明昌二年十月,余到栖霞。三年五月,蓬莱道友相邀度夏,自后数年为例,五月相邀耳。
年年五月到蓬莱,麦秀金银次第开。
野客充饥饶紫葚,行人止渴待黄梅。
云头勃勃连山耸,两脚涔涔拍海来。
朱夏胜游多壮观,情如天网亦恢恢。

送陈秀才完颜舍人赴试(二首)

六合之中万物生,人于万物最高明。
能穷物外阴阳数,解夺人间富贵名。
自昔丹砂唯九转,而今天路只三程。(谓今三试)
谪仙才调无留滞,坐看飞腾上太清。

丈夫高节气凌云,十载潜看万卷真。
满腹诗书虽合道,出群头角未惊人。
奔牛计策元无敌,立马文章自有神。
异日功成心爽悟,黄粱惊觉梦中身。

泰和辛酉清明后三日霜
雨后方看丽景韶,风前忽耳万花凋。
园林一夜无颜色,气候三春太寂寥。
正遇东君时作巧,那堪青女势还骄?
生灵跋扈知难免,造化根源尚未超。

落花
昨日花开满树红,今朝花落万枝空。
滋荣实藉三春秀,变化虚随一夜风。
物外光阴元自得,人间生灭有谁穷?
百年大小荣枯事,过眼浑如一梦中。

赴蓬莱狄氏醮踏晓登山
鸡鸣喔喔动精神,闭息登山上涌身。
路恶才分瞥窃道,林深不辨往还人。
披云直下观东海,绝顶孤高映北辰。
日用孳孳为善者,虚心牢落且同尘。

赴潍州北海醮(温迪罕千户请)
北极阴风渡海扇,海山风物尽萧然。
山阴积雪寒铺地,海上层冰冻接天。
鸿鹄预辞千里塞,蛟龙深卧九重渊。
道人守拙何为耳?酷冒冰霜赴醮筵。

昌阳黄箓醮
十月昌阳五谷饶,追思黄箓建清标。
华灯羽服罗三殿,绛节霓旌下九霄。
法事升坛千众集,香云结盖万神朝。
从兹降福穰穰满,一县潜推百祸消。

过盖公岘山
岘石崎岖马不禁,溪风萧飒虎难寻。
山横剑戟参差大,气郁烟霞(日奄)蔼深。
道众不游闲景色,天涯都是好丛林。
因循北海修黄箓,宛转东莱谒翠岑。

避事过盖公岘
乘闲杖策蹑仙踪,度石穿林望盖公。
西海有云波惨澹,东山初日气濛鸿。
崎岖万壑深潜迹,牢落三州暗转蓬。
出处自非心染着,从教著棒打虚空。

骤雨
万叠浓云霭霭屯,千寻白雨下山门。
阴阳气激风雷急,草木声号宇宙昏。
鸟兽相迷烟惨惨,鱼龙交错水浑浑。
一时造化惊天地,咫尺中间孰见根?

季冬八日大雪(二首)

昨夜南风又北风,晓来天地一濛鸿。
零珠碎玉随高下,万壑千岩合异同。
日月不知安顿处,山川塞在杳冥中。
返观性命阴阳理,始识虚无造化功。

昨夜南风又北风,晓来天地一濛鸿。
山村野店家家异,柳絮梅花处处同。
石室松堂云敛后,瑶台琼榭月明中。
何须更问丰年瑞?(禾氏)此深佳大道功。

酬同知定海军节度使张侯雪中见访(二首)

法宇沉沉不下帏,清斋兀兀坐忘机。
纷纷满地天花落,浩浩盈山海月微。
淡日悠扬金殿晓,冲风散漫玉尘飞。
三冬瑞雪真嘉庆,万古何人识是非?

瑞雪飘飘野兴浓,开门杖策久从容。
贪看六出瑶花坠,不觉三清宝殿封。
暗室郊原彰玉马,斜拖阙角隐金龙。
高人冷冽寒岩下,莫辨遥山第几重。

竹轩(太虚观也)
小轩幽槛不栽花,只种琅玕主岁华。
直节自非凡草木,虚心真合道生涯。
风吹瑟瑟香还冷,雨洗涓涓净更嘉。
不待岁寒方见重,吟窗朝夕思无邪。

登临有感
陟彼高岗马足跷,观乎大地我心摇。
山河气象连天阔,洞府神仙避世遥。
白玉黄金终莫守,春花秋月固难饶。
百年一觉浮生梦,万事俱非恨寂寥。

赠刘师鲁(二首)
定海军节度使致政,刘师鲁挈其子见访于栖霞太虚观。

数骑翩翩出郡城,西风摇荡菊花清。
吟诗马上无横槊,访道人间暂濯缨。
露下天高秋气爽,金声玉振晓霞明。
山堂尽日萧然坐,似觉浮生梦且轻。

师鲁先生有宴息之所,榜曰中室。又从而索诗。
一阴一阳之谓道,太过不及俱失中。
道贯三乘玄莫测,中包万有体无穷。
高人未悟犹占僻,下士能明便发蒙。
儒释道源三教祖,由来千圣古今同。

次韵答奉圣州节度使移刺仲泽佳什
忘机不用苦清谈,大隐何烦住小庵?
海印发光吞宝月,天心烛物迈寒潭。
黄庭雅弄琴三叠,紫府高吟酒半酣。
西北文章贤太守,肯将珠玉寄东南。

送蓬莱州节度使邹应中移镇兖州
人生七十古来稀,不夜功成赋式微。
便欲休官栽菊去,还令杖节与心违。
行藏未出阴阳数,夙夜难逃变化机。
异日挂冠须在早,莫教林下有人识。

赞道
造物悠扬气势雄,三光日夜转鸿濛。
冥冥会合阴阳秀,矫矫神奇幻化丛。
春去秋来生杀异,天长地久古今同。
灵台有个真消息,未悟那堪性不通。

达士
随机接物外同尘,应变无方内入神。
心地出离三界苦,洞天游赏四时春。
金丹大药经年久,火枣交梨逐日新。
一服定超生死海,不知谁是有缘人。

灵虚观赏梨花
妙景从来说武官,周天回斡暮春看。
千株白锦霜凝雪,一派香风吐麝兰。
羽客徘徊升月榭,高真依约下星坛。
神功暗结灵虚秀,化作无边碎玉团。

旧游
秦川渭水好行程,不问长亭及短亭。
西岳云开仙掌白,南山雨过佛头青。
丹霄仿佛舒晨彩,碧岫参差列画屏。
海上交朋闻我道,虚心侧耳尽来听。

磻溪集卷二
七言绝句
礼正
关中土民纯质,向善者甚众。道门尚七,释氏转八。每至年交,各大集其众,午后于圣前礼诵经忏,谓之礼正。至一月终方毕。
雪霁春光显太平,风和日暖倍鲜明。
高歌合会休怀闷,大煮圆焦作礼正。

答樊生
莫问天机事怎生,唯修阴德念常更。
人情反覆皆仙道,日用操持尽力行。

刘二道友索
其人爱饮酒奕棋
欢来日饮千钟酒,静处时抨一局棋。
白发流年当远鉴,红尘闲事莫多知。

警泾阳强居

隋何陆贾总归空,千古惺惺一梦中。
争似忘机合著口,潜心捉住九天风。

百年万事一场空,急景浑如过隙中。
浮世奈何人不悟,痴心刚待撮春风。

寄杨五信士
题诗欲寄纸还无,检帙搜文得故书。
书后殷勤题一绝,嘱君行善莫踟蹰。

还杨五所惠纸扇
谢公惠我白芭蕉,山谷多风不用招。
城市炎天无爽气,请君执捧自闲摇。

答乔生
彼新丧偶,欲休心入道
物外归心绝大魔,闲中遣兴益高歌。
灵台著欲于今少,健骨乘风已后多。

题杨五纸扇
突兀高峰上倚天,巉岩绝壁远含烟。
披襟自古嵩阳客,傲世从来华岳仙。

题王生纸扇
自爱寥天夏日长,谁憎酷暑火云昌?
三焦毒热多年尽,一握清风万古凉。

题乔生纸扇
炎炎赤日火云飞,路上行人汗浴肌。
碧洞深山无事客,优游松下正抨棋。

题王二纸扇
蕤宾节后转加炎,毒热薰蒸无处潜。
唯有长春碧岩洞,清凉终日自安恬。

题周道全纸扇
溪风飒飒如霜下,涧水泠泠似雪翻。
尽日殊无劳役重,何时更有郁蒸烦?

题目庞氏藤扇
纤纤妙理织银丝,习习轻风散玉姿。
秋后虽然飚运爽,待君应也不多时。

泺里陈氏草堂
茅堂高结半原阴,乔木参差翠竹深。
车马不闻名利远,安闲终日好栖心。

段生放(木伐)值水涨漂没空身还归
段生放(木伐)下西山,时值波涛尽出关。
回首无心怨河伯,高歌且喜脚轻还。

飞仙
蓬莱方丈及瀛洲,三岛神仙一处游。
混合九天无挂碍,飞腾八极信周流。

钟吕画
无我无人性自由,一师一弟话相投。
谈经演法三山坐,驾雾腾云万里游。

景福山居

虎啸烈风潜兽愕,魔交长夜睡魂惊。
何时朴直道心显?慧日开张天眼明。

景福淹沉人事少,龙门闲澹虎溪清。
时闻结果加咤语,似听(金句)(车舟)格磔声。
山间一种红鸡,作结果加咤声。入山樵采者,戏语以雪妥也。下去转之(金句)(车舟)格磔,鹧鸪鸟声也。

述怀

我道欲求神自放,龙门时复虎相干。
山头烈火三冬炽,涧底阴风五月寒。

清虚妙理横天下,大朴淳风满世间。
至道有名那见实?通人无语自知还。

入道根源唯自许,出尘消息有谁知。
南华始遇逍遥乐,北海终投汗漫期。

野鹤孤云闲活计,清风明月道生涯。
千山磊落收云气,四海光明耀日华。

陇州杨氏携月桂栽见访

汨没尘埃甚可怜,追随俗态几经年。
偶因上士游山水,得遇高真伴圣贤。

一枝孤秀倚寒山,四海群芳怀腼颜。
若遇清风佳气会,天香飘落满人寰。

游初禀气得真诠,续艳联芳似火传。
世上百花难逮月,人间唯此可穷年。

树密山高隐地蟠,风多露少怯天寒。
他时复向蟾宫里,五岳云收四海观。

放雁
放去欲齐支遁鹤,笼归宁效右军鹅。
虽符庄子能鸣义,恐学茅君着爱魔。

陇州堂下清梦轩
清梦轩中清士居,清闲高卧养真如。
真如养就清无梦,无梦清欢乐有余。

答陇州萧防判书召
因事别陇山,过亭川届石灰寺,盘桓数日,趑趄未决。公书忽至,欣然乃还。
俄闻宠命发(氵开)涯,便欲安闲卧陇西。
黄鹄不思千里举,白云犹恋故山栖。

自亭川回路次望龙门山
南望龙门一豁开,东迁鹤驭再头回。
深知此域因缘重,未许他方道德该。

答曹王妃休休道者书召
山潜洞壑非高尚,自揣襟怀实蔽蒙。
无益虚名相混杂,不教闲坐养盲聋。

答京兆统军夹谷龙虎书召
休休道者方归去,赫赫王侯又到来。
自愧中心无道术,空教外迹播尘埃。

赠云外子孙可道西州行化
历历西州向道多,道人行止足乖讹。
公当策蹇寻山郡,纠察无令外道魔。

寄扶风荣宰
原心自得鱼鳞大,用指何妨马骨高。
居室有诚还可信,下堂无智亦徒劳。

恻隐
狗病无人煎粥汤,驴寒倒地四肢僵。
为人不解修阴德,转壳何由免祸殃?

下手迟
日月匆匆顶上飞,光阴匆匆眼前移。
回头返顾即成老,下手速修犹太迟。

聪明
修行大抵要聪明,只恐聪明向外呈。
外假内真两相克,一边败后一边成。

弃本逐末
一念无生即自由,千灾散尽复何忧?
不堪下劣众生性,日夜奔驰向外求。

进呈世宗皇帝
九重天子人间贵,十极仙灵象外尊。
试问一方终日守,何如万里即时奔?

答宁海书召
雪满群山路不通,天教车马不西东。
可怜宁海官民意,目断西山一望空。

闻诏起玉阳公戏作
三竿红日自由睡,万顷白云相对闲。
只恐虚名动华阙,有妨高枕卧青山。

春晚登眺
残花冉冉飞红雨,落日依依散白毫。
遥望西山官堠子,倚天孤耸一拳高。

春寒
海上春风日日颠,山头春色几时妍。
清明过了朱明近,未有红芳到眼前。

阳九百六
劫运天灾不可当,高真上圣救无方。
直须受尽丰年孽,再得升平入道场。

公山

余乡公山之阳,故作是诗
公山隐隐插苍穹,松影森森锁碧空。
顶戴松花吃松子,松溪和月饮松风。

松风习习透松烟,习习松烟散九天。
天外轻盈笼万象,交光日月共回旋。

千寻瀑布清明秀,一派岚光气势雄。
时被祥风吹作雨,潇潇溟漠洒虚空。

青城华岳与天台,怎比吾山至大哉?
一簇峰峦千万仞,威仪真不让蓬莱!

公山高隐白云宫,宫压公山第一峰。
峰上白云飞不断,悠悠来去惹青松。

参差山色有无中,半入幽溟半入空。
依约天涯寻不见,飘飘常被白云笼。

公山自古白云多,结盖层层入大罗。
出没群仙常不见,云中唯听洞仙歌。

仙歌缥缈入公山,渐入公山太一坛。
坛上诸仙安药鼎,时时烧出大还丹。

撞开天汉拂星辰,独坐蟾宫抱日轮。
夜牧灵龟朝引鹤,饥餐松实冷披云。

山头点起一轮灯,天下妖魔尽不生。
唯有堂堂圆觉士,松间独弄宝珠行。
十一公山春
闲遣青龙耨月华,同驱白虎种黄芽。
黄芽欲发雷霆震,迸出青龙白虎牙。
十二公山夏
阳光泼泼火云凝,海底蛟龙即上升。
遍撮山头三伏暑,却教化作一团冰。
十三公山秋
云兴霞烁映天衢,松密山高压地图。
绝顶峥嵘人不到,昭昭独放月轮孤。
十四公山冬
彤云漠漠雪霏霏,凛冽寒风刮地威。
吹起山中无限景,瑶花琼萼满天飞。

牢山吟
东莱即墨之牢山,三围大海,背负平川,巨石巍峨,群峰峭拔,真洞天福地,一方之胜境也。然僻于海曲,举世鲜闻,其名亦不佳。予自昌阳醮罢,抵于王城永真观,南望烟霭之间,隐隐而见。道众相邀,迁延数日而方届。遂闲吟二十首,易为鳌山,因清畅道风云。

卓荦鳌山出海隅,霏微灵秀满天衢。
群峰削蜡几千仞,乱石穿空一万株。

道祖二宫南镇海(谓上清宫、太清宫也),王明三崮北当途(谓太平兴国观道南也)。
是知物外仙游境,不向人间作画图。

初观山色有无时,十日迁延尚未之。
咫尺洞天行不到,空余吟咏满囊诗。

浮烟积翠绕山城,叠嶂层峦簇画屏。
造物建标东枕海,云舒霞卷日冥冥。

三围大海一平田,下镇金鳌上接天。
日夜潮头风辊雪,彩霞深处有飞仙。

佳山福地隐仙灵,万壑千岩锁洞庭。
造化不教当大路,为嫌人世苦膻腥。

牢山本即是鳌山,大海中心不可攀。
上帝欲令修道果,故移仙迹近人间。

重岗复岭势崔嵬,照眼云山翠作堆。
路转山腰三百曲,行人一步一徘徊。

松岩郁崛瑞烟轻,洞府深沉气象清。
怪石乱峰谁变化?亘初开辟自天成。

因持翰墨写形容,陟彼高岗二十重。
南出巨平千万叠,一层崖上一层峰。
十一
四更山吐月犹斜,直上东峰看晓霞。
日色丽天明照海,金光射目眼生花。
十二
天柱巍峨独建标,上穿云雾入青霄。
不知日月星辰谢,但觉阴阳气候调。
十三
洞有佳名号白龙,不知何代隐仙踪。
至今万古人更变,犹自嵌岩对老松。
十四
洞有仙名唤老君,神清气爽独超群。
凭高俯视临沧海,守静安闲对白云。
十五
华盖真人上碧霄,道山从此郁清标。
至今绝壁幽岩下,尚有群仙听海潮。
十六
修真野客非才子,行到鳌山亦有诗。
只欲洞天观海日,不劳云雨待青词。
十七
白发苍颜未了仙,游山玩水且留连。
不嫌天上多官府,只恐人间有俗缘。
十八
修真却似上山劳,脚脚难移步步高。若不志心生退怠,直趋天上摘蟠桃。
十九
鳌山三面海浮空,日出扶桑照海红。浩渺碧波千万里,尽成金色满山东。
二十
山川皆属道生涯,万象森罗共一家。不是圣贤潜制御,乾坤那得久光华?
二十一
可叹巍巍造化功,山河大地立虚空。八荒四海知多少,尽在含元一气中。

再题牢山
大安己巳胶西醮罢,道众相邀再游鳌山,复留题二十首。
上清宫

醮罢归来访道山,山深地僻海湾环。
棹船却向波涛看,化出蓬莱杳霭间。

群峰峭拔下临渊,绝顶孤高上倚天。沧海古今吞日月,碧山朝夕起云烟。

青山本是道人家,况此仙山近海涯。海阔山高无浊秽,云深地僻转清嘉。

怪石嵌空自化成,千奇万状不能名。断崖绝壁无人到,日夜时闻仙乐声。

晓日朦胧渐起云,山色惨澹不全真。直须更上山头看,似驾天风出世尘。

巨石森森岭上排,巅峰岌岌到无阶。三秋水冻层冰结,九夏云寒叠嶂霾。

海上观山势转雄,清高突兀倚虚空。朝昏磊落生云气,变化皆由造物功。

陕右名山华岳稀,江南尤物九华奇。鳌山下枕东洋海,秀出山东尽不知。

重重叠叠互相遮,簇簇攒攒竞斗嘉。眼界清凉心地爽,神山自古好生涯。

五岳曾经四岳游,群山未必可相俦。只因海角天涯背,不得高名贯九州。

太清宫

烟岚初别上清宫,晓色依稀路径通。才到下方人未食,坐观山海一濛鸿。

云烟惨澹雨霏微,石洞留人不放归。应是洞天相顾念,一生嗟我到来稀。

云海茫茫不见涯,潮头只见浪翻花。高峰万叠连云秀,一簇围屏是道家。

松风涧水两清幽,尽日清音夜未休。野鹤时来应不倦,闲人欲去更相留。

溪深石大更松多,郁郁苍苍道气和。不是历年樵采众,浮云蔽日满岩阿。

贯世高名共切云,游山上士独离群。仙卿贵重三茅客,仕族尊荣万石君。

西山仰视刺天高,山上仙家种碧桃。桃熟几番人换世,洞中秦女体生毛。

清歌窈袅步虚齐,月下高吟凤舞低。谈笑不干浮世事,相将直过九天西。

烟霞紫翠白云高,洞府群仙醉碧桃。鼓透碧岩雷震骇,满山禽兽尽呼号。

道力神功不可言,生成万化独超然。大山海岳知轻重?没底空浮万万年!

中秋诗
八月十日自昌乐县还潍州城北玉清观作

西县东来至玉清,金风一扫暮天晴。开怀便赏中秋月,只恐临时晦不明。

万木西风遍九州,严光一夜向西流。出尘爽气清人骨,是处歌欢不解留。

初离海峤有余清,万国欢心贺太平。但愿宝光无晦朔,不教天质有亏盈。

浑金璞玉上天衢,抱雪凝霜耀太虚。四海百川无不鉴,群生万象悉安居。

一片清光万里开,无分茅屋与楼台。家家尽得闲吟赏,更有清风助快哉。

有客徘徊望太虚,开尊专欲赏蟾蜍。蟾光不解留人意,澹澹青霄只自如。

金波昼夜不曾闲,淡荡清辉出海山。素魄高升游物外,恩光下照满人间。

碧汉峥嵘自有期,天光照耀本无私。却忧下土昏魔重,不见金轮出现时。

团团皓月挂空虚,百炼青铜鉴不如。一切水中皆影现,群魔摘胆尽消除。

桂影朦胧下照人,纵横万古不知因。何当跨鹤云霄上,俯视青天白玉轮。
十一
云去云来不暂停,朝昏恍惚变阴晴。今宵幸对婵娟质,剩作新诗畅道情。
十二
年年此际杀生多,造业弥天不奈何。幸谢吾皇严禁切,都教性命得安和。
十三
圣主登基万物安,仁风灭杀自朝端。邦君士庶皆修德,好放蟾光与众看。
十四
静夜迢迢起黑云,众生无分乐天真。空中自是云遮眼,天外何曾月避人?
十五
百岁光阴瞬息间,中秋几度得闲颜?不如炼性如秋月,晃朗身心自在闲。

磻溪集卷三
青天歌
青天莫起浮云障,云起青天遮万象。万象森罗镇百邪,光明不显邪魔王。我初开廓天地清,万户千门歌太平。有时一片黑云起,九窍百骸俱不宁。是以长教慧风烈,三界十方飘荡彻。云散虚空体自真,自然现出家家月。月下方堪把笛吹,一声响亮镇华夷。惊起东方玉童子,倒骑白鹿如星驰。逡巡别转一般乐,也非笙兮也非角。三尺云璈十二徽,历劫年中混元斫。玉韵琅琅绝郑音,轻清遍贯达人心。我从一得鬼神辅,入地上天超古今。纵横自在无拘束,心不贪荣身不辱。闲唱壶中白雪歌,静调世外阳春曲。吾家此曲皆自然,管无孔兮琴无弦。得来惊觉浮生梦,昼夜清音满洞天。

先天吟
空山静夜微云作,淡月疏星寒气错。忽见长庚耀太虚,回观北斗潜寥廓。乾坤舒惨即时改,宇宙纷纶何所托?必有机关默动摇,凭虚反覆相酬酢。大哉无极玄元道,何者不蒙灵应药?点化三光转碧空,滋荣万物开花萼。腾今跨古未尝坏,历险冲艰殊不弱。混元一气首兴变,无上至尊唯独恶。踏碎虚空出杳冥,擘开混沌生挥霍。阴阳升降作门户,日月纵横为锁钥。暑往寒来昼夜分,时通运塞兴衰各。既而上立乾坤钮,复乃下鸣师范铎。建德随方料物宜,因时设教从人乐。三皇五帝皆宗祖,六道四生咸唯诺。至圣文才尚发蒙,犹龙道德何其博!

度世吟
山深路僻行人少,尽日幽岩听啼鸟。无客相陪皓月中,有时独立青云表。云表孤吟百邪远,天涯一览群山小。调高风急韵悠扬,清绝步虚神缥缈。忆昔重阳泛天角,清吟欲序乾坤朴。钓拔扶风人不知,测量大海余先觉。入神妙致应难辨,出俗玄谈非所学。返观今日道峥嵘,始得他年功卓荦。首及东牟演仁孝,未能化俗开笼罩。五会轩轩立五名(宁海金莲、登州玉华、莱州平等、文登七宝、福山三光),三州兖兖崇三教。出神入梦人惊骇,掷盖投冠予计较。师居东海乃犹龙,马入西秦还变豹(丹阳弘道隆于陕右也。大定己丑夏四月,余与丹阳等数人,从重阳师,自文登如宁海。时迈龙泉,日气稍炽。师令余等前,己执伞在后,距半里许。余忽回顾,见伞腾空而起,余急返走问之,云:“抟持扶摇而上,不知其然而然。”初伞起东北,望之冉冉,坠于沙间,指其方而觅之,了无所也。时余法眷阳子王公,隐于东海隅之查山。山到文登一百一十里,文登到伞起处又七十里。伞起乃辰时,及晡,堕阳公庵前。柄内“阳子”道号,往赐之焉。伞字篇韵本无,乃师之所撰。伞自后查山下,翟公家藏之,本宁海范明叔家借用者,范后知,往取之而弗肯。予投冠者初,师之登城北观海,头上竹皮冠忽堕水漂去,已而复还。“”音竹)。

逍遥吟
十洲三岛兮,臣海之中。琼楼绛阙兮,参差半空。松阴密锁兮,无畏日,纨扇不摇兮,有清风。流金热,佩玉真仙未尝说。水晶宫殿开,宝座星辰列。碧虚悬象绕楼台,清净化身非骨血。本来身,自通神,谈笑忽惊天上人。

自在吟
瑶台阆苑兮,碧汉之中。祥云瑞炁兮,盈盈满空。群仙出没兮洒清雨,万化开坼兮动香风。炎蒸热,那里人家不曾说?烟收洞府开,门倚星河列。九天时复会嘉宾,万里不须乘汗血。物外身,自清神,谁羡登记楼摇扇人?

望海吟
余观天下形势壮观,自潼关以东、淮水以北,无出登州。因作《望海吟》,用纪其实。
蓬莱僻东隅,壮观天下绝。地邻仙圣域,山枕鱼龙穴。凭高望羲和,目极犹未彻。苍苍天水回,泛泛云霞泄。长风起波涛,万里卷霜雪。凭凌登岛屿,(氵晃)(氵莽)失丘垤。有时灵气和,变化非常别。森罗无限景,欲辨难措舌。大哉百谷王,沉沉洞清彻。随时潮有信,历代早无竭。人间顷亩池,是处广开列。比之鲸波大,状若蛙井劣。望洋不见端,弥天自严洁。众流莫浑浊,万古超生灭。

仙游吟
阆苑红尘外,瑶台碧汉间。洞中仙不老,云外客长闲。赤凤吟舟穴,红厖吠药栏。青衣传诏下,白鹤送书还。宴赴琼林会,诗裁羽客班。浩歌金母殿,长啸玉龟山。果结三千岁,楼高十二环。穆王何日到,方朔几时攀。姑射肌犹洁,双成貌更殷。飞琼投月窟,弄玉(身单)华环。命驾游三岛,抟风过百蛮。周旋窥海岳,奋掷上天关。荡荡空无极,滔滔兴未阑。恢然超法界,不复恋人寰。

赞道
前贤后圣无差别,异派同源化执迷。太一混元开户牖,玄真直指上天梯。

去惑
他人之言不可听,自己之心但可正。若凭他口是非言,坏却自身功德性。

示众戒色
劳生有万种,最大无过色。不唯丧命根,复乃销阴德。还能戒此一,酷胜其他百。慕道修仙人,从来是标格。

步虚词

旷荡修真教,飘飘出世门。先师开户牖,归马动乾坤。陋室回仙观,高名轧帝阍。云朋霞友会,朝礼太虚尊。

宝炷成云篆,华灯簇夜光。星河初焕烂,钟磬乍悠扬。醮主承嘉会,虔心祷上苍。诸仙来顾眄,接引下虚皇。

世宗挽词
臣处机以大定戊申春二月,自终南召赴阙下,蒙赐以巾冠衫系,待诏于天长观。越十有一日,旨令处机作高功法师,主万春节醮事。夏四月朔,徙居城北官庵。越二日己巳,奉圣旨塑纯阳、重阳、丹阳三师像于官庵,彩绘供具,靡不精备。后五月十八日,召见于长松岛。秋七月十日,再召见,剖析天人之理,颇惬宸衷,薄暮言归。翌日,迨中使赐桃一盘。处机不食茶果十有余年,过荷圣恩,即啗一枚。中秋,以他事得旨,许放还山,仍赐钱十万。表而辞之。逮己酉岁春,途经陕州,遽承哀诏。时也,风尘(氵共页)洞,天气苍黄,士庶官僚尽皆素服,处机虽道修方外,身处世间,重念皇恩,宁不有感?谨缀挽词一首,用表诚恳云。
哀诏从天降,悲风到陕来。
黄河卷霜雪,白日翳尘埃。
自念长松晚,天恩再诏回。
金盘赐桃食,厚德实伤哀!

速修
一日一日复一日,短景浑如电光疾。天长地久磨古今,春去秋来变时律。大梦沉沉无昼夜,浮生兖兖差劳逸。人情不断犹著空,我志虽高尚忧失。壳昧游魂如陷井,心怀嗜欲同怜蜜。蜜甜有味何日忘,井黑无明几时出。出拔须凭高尚行,修治不假虚(忄尧)术。但能物我却亲疏,自然神鬼难凶吉。吾身道性未开眼,土塌紫扉且容膝。和光同尘随是非,化声相待无相诘。

觅衲衣
时八月间,令人持诗于县中,觅破布衲衣西虢也。
白露将残寒露洁,山家冷淡观游绝。
树头黄叶坠千林,身上麻袍联百结。
旧布重烦七里市,衲衣复待三冬雪。
城中豪富各仁慈,庶在磻溪长守拙。

陇山松
我居西山时六年,山西上有松孤然。
朝云霏微接关塞,暮雨淅沥交洞天。
天生此境为吾伴,隔涧相陪远相看。
郁郁苍苍气色佳,萧萧瑟瑟风声贯。
连枝合抱垂重阴,受命已经千载深。
如何今岁上春月,平地忽遭樵斧侵?
斧声丁丁响溪谷,松烟惨惨愁山麓。
也知天意我将归,故遣灵岩尔先覆(有夏禹庙甚灵)。
景亡人散复何陈?空山黯淡悲游人。
白鹤高飞失行止,苍龙偃卧无精神。
亦知物象终难固,凡百有形皆有数。
高歌物外归去来,大隐廛中益开悟。

赠潍阳唐括姑
乃故丞相之女弟也。予时在陇山,京兆统军夹谷公,专人书召,姑寻至。
东莱之姑性玄远,蕴德含章自超拔。
未能捞漉今古原,西出长安载脂牵。
殷勤邀吾于陇山,余时杖策徐东还。
还到长安旧游处,故人不死多苍颜。
回头为报姑明取,百岁光阴一寒暑。
速抛家业违物情,早作闲人伴仙侣。
壶中自游日月长,身外不复衰残殃。
跨古腾今别无事,只由大德心开张。

因旱作
玄元大道统阴阳,造化乾坤万物昌。
高下如能各处分,始终即得免罹殃。
今之曷故多灾障?盖为人心胡纵放。
美食鲜衣器用华,狂明怪侣邪淫王。
阴阳交错古来传,恩害相生本自然。
迤逦不能廉度日,因循直致旱经年。
青霄碧落常无雨,紫陌红尘唯播土。
铄石流金万物焦,镕肠裂背群生苦。
有时率众取湫科,脔肉妆盘自噎饥。
侮慢加之伤物命,喧呼何足动神祗?
哀哉俗态荒声色,个个倾危身反侧。
安得人心似我心?免遭痛切临头厄。

赠华州沙涧寨刘校尉
刘公满室皆行善,供养闲人心不倦。巧行谩天我不为,至心奉道人皆羡。殷勤种德养灵芽,阖郡生民有几家。伫看异日功夫到,共蹑祥云阿母家。

悯物
比岁大饥疫相仍之故也。

天苍苍兮临下土,胡为不救万灵苦?万灵日夜相凌迟,饮气吞声死无语。仰天大叫天不应,一物细琐徒劳形。安得大千复混沌,免教造物生精灵!

呜呼天地广开辟,化出众生千百亿。暴恶相侵不暂停,循环受苦知何极?皇天后土皆有神,见死不救知何因?下土悲心却无福,徒劳日夜含酸辛。

六月庚午喜雨
我闻东山雨,千载无西行。胡为阅今夏,屡及滂沱泓?昨日午时后,一洗芽甲生。今日申时前,再倾车轴烹。千山日惨惨,四野雷轰轰。平地涌三尺,大河侵五更。蛟龙出池沼,旱魃填沟坑。云汉复何有?天衢从此亨。

题刘节使所藏显宗御画庄子
显宗好道富年壮,手笔南华古形状。南华去世千载余,状貌风格知何如?只是今人重古道,仿佛气象加襟裾。至人胸中本无待,万窍吹嘘任天籁。杨韩嵇阮心不同,到了各归于大块。

冬日郊外闲步
草木既凋残,冰霜何凛冽?长空鸟飞尽,大海鱼游绝。商旅不行舟,昆虫皆闭穴。谁能丰足外,解把孤贫设。

秋风海上
蓬莱有客无家乡,身拟学仙游大方。大方洪水浸天阔,东极万里青茫茫。晓来雨过西风急,策杖凭高看呼吸。鸿雁连天剥枣晴,鱼龙戏水操舟入。千尺丝轮直下垂,碧波深处钓鲸鲵。纷纷鱼鳖不肯食,楫楫波澜空自迷。挂席未能超彼岸,乘槎再欲浮天汉。天汉高高万象明,白云谁是长生伴?

登州修真观建黄箓醮
浑沦至道急如箭,反覆阴阳自交战。太极茫茫造化开,平空落落神奇见。群生万象参差出,六合八纮妆点遍。跨古腾今逐日新,流形返朴随时变。有情无情不可穷,大智小智交相攻。不有圣贤开教化,那知动植本虚空?千经万论垂方便,宝笈琅函兴众善。自昔根源发杳冥,迄今道德犹光显。迩来天下教门兴,达士随方化有情。我亦周流三十载,还乡复到海边城。城南磊落修真观,气势清高接河汉。俯视沧茫渤澥深,仰观卓荦星辰焕。城中信士往来多,物外交朋意气和。承安四年冬十月,大兴黄箓演金科。赤书玉字先天有,白简真符破邪久。三级瑶坛映宝光,九卮神灯摛星斗。巉岩破钱酆都山,列峙升仙不可攀。四夜严陈香火供,九朝时听步虚环。千门万户生欢悦,六街三市齐铺设。金花银烛相辉映,表里光明自通彻。忽闻空外显嘉祥,萧索轮囷有异常。玉帝传宣行大赦,仙童骑鹤下南昌。幽魂滞魄皆超度,白叟黄童尽钦慕。天涯好事未尝闻,压尽山东河北路。

潍州城北千户新观
清闲不在苦幽栖,心上无尘到处宜。北海葱葱郡城角,地多花木景多奇。昔年车马空撩乱,今日翻为玉清观。观中游戏是何人?天下往来都散汉。池塘寂寂锁烟霞,大宝莲开十丈花。借问经营谁施主,袭封千户太均家。

题莱州招远县云屯山观
云屯山上云冥冥,天风荡摇飞雨零。神奇幻怪不可测,千变万化无常形。云收雨霁杳无迹,但见群山罗翠屏。山高谷深复何有?白石磊磊松烟青。春游浩荡满山谷,直上似欲趣天庭。心虚目极淡天阔,俯视漠漠环沧溟。昔居庵地走三郡,今为洞天朝万灵。虚空旧基作新观,万世不朽传佳铭。

警世
粉黛与珍玩,繁华虚热乱。欲知万事空,须作百年观。

登记胶水北山
凭高望南海,极目天苍苍。天际白云起,凌空飞杳茫。

雪霁
澄澄东海月,皓皓西山雪。残夜忽严凝,清光何皎洁!

示众
性逐无边念,轮回几万遭。五行随变化,四大不坚牢。暂假因缘活,空贪岁月劳。
不知身是患,徒竞物为高。在事虽能干,于身大没操。六尘飞冉冉,三界走嗷嗷。
眩惑疲双眼,贪求逼二毛。刳心无胆气,恋色有脂膏。白首浑如雪,苍颜不似桃。
未能从教化,尚自骋凶豪。劲捷穿云鹘,颠狂挂壁猱。有时生狡滑,无事起波涛。
罪孽如山积,精神似海淘。无由伴松柏,直待掩蓬蒿。

海上述怀
海上风清冷,天根水杳茫。冰山虽断绝,暑气自销亡。雅志横高节,虚心适大方。
披云游汗漫,鼓棹泛沧浪。独立明千古,周行视八荒。天星非有落,地脉杳无疆。
幻化沤千点,浮生梦一场。精神随手变,花木暂时芳。百岁光阴短,三山道路长。
求仙悲汉武,失道叹秦皇。采药童应老,乘槎客未详。空余三岛迹,时复显嘉祥(大竹山、小竹小山、车牛岛,为之三岛。嘉祥,即海市也)。

秋日艾山
秋风荡山岳,晓日驱云烟。嫩菊黄铺地,明霞翠扫天。登临思海峤,游戏挹山泉。
巨石危犹壮,寒松老更坚。岩花香馥馥,涧草绿绵绵。遁迹潜行道,虚心不坐禅。
观空虽自在,遇景且留连。放笔红尘外,驰名紫府边。犹惭金母诀,敢道玉皇宣。
住世过三乐,安时迈七贤。韬光终返朴,应物且随缘。蝶梦惊千古,神游待百年。
人人还得遇,口口自相传。

武官梨花
白帝离金阙,苍龙下玉京。地神开要妙,天质赋清英。色贯银蟾媚,香浮宝殿清。
参差千万树,皎洁二三更。艳杏无光彩,妖桃陪下情。梅花先自匿,柳絮敢相轻。
最好和风暖,尤佳丽日晴。游人期放旷,羽客贺升平。未许尘埃染,常资雨露荣。
郭西传旧迹,山北耀新声。烂熳莺穿喜,扶疏鹊踏惊。琳宫当户牖,芝室近檐楹。
绰约姑山秀,依稀华岳精。会看年谷熟,普济法桥成。

登道士谷山
淡荡春风暖,暄和晓日迟。寒裳登诘屈,绝顶玩幽奇。北海洪涛阔,南山大泽危。东风青鸟下,西岭白云垂。眼界空濛极,烟光缥缈随。精神何洒落,道德自扶持。仿佛丹霄外,参差碧汉涯。那烦采芝术,直赴上仙期。

磻溪集卷之四
博州战姑庭楸诗
聊城之南,邹氏之室,有战姑者,本蓬莱人。生含巧思,以彩缕纫结鸟兽鱼虫花草之类,随物变态,不待规模,而应之于手。其精理过于生者远甚。自中年后守寡,信道甚笃,建庵设食,以待四方烟霞之侣,且有日矣。无何,佻薄者构成谤(读+言)之私,用浼松筠之操。姑知不易明辨,即会其戚属,指庭下枯楸而祝之曰:“今仙圣在上,妾身若无毫发过,愿树复荣,苟或不然,是妾自负矣,吾誓不与若等共天日!”祝后岁几半,杳无朕兆。里人笑而嘲之曰:“医树若生,不特尔之贞,而我亦富且贵矣!”姑闻之春梦然。彼楸树者,以大定庚子岁始植,既植即死,风摧雨剥,殆几五稔,形质朽残,固无生理。越明年建巳之夏,即姑始祷之月也。忽尔灵芽笋发于枯树之下,状如朱草,日引修条茂叶,蔽于阶砌。予初在陕右,屡闻是说,然未详所见。逮明昌辛亥,途经此州,闻闾里赞道。及寓宿于姑之家庭,而后悉其事为不诬。自树之复荣,于今六载矣。高可倍寻,枝干扶疏,异于凡木。其旁枝四出,偃蹇遒劲,森然有拔俗凌云之气象。长春先生曰:“至诚感物,明德动天,战姑之谓乎?孰谓道之云远?人病不诚其德耳。”因得四十字,用纪不神之应。时某年月日。
外口生非谤,虚心祷证明。
长楸根已烂,朽卉笋重荣。
孟氏悲黄竹,田真叹紫荆。
昔年闻孝义,今日表忠贞。

答虢县猛安镇国
酷爱无人境,高飞出鸟笼。
吟诗闲度日,观化静临风。
杖策南山北,酣歌西坂东。
红尘多少事,不到白云中。

答虢县李四秀才
严冬极潇洒,短晷急周旋。
独立红尘外,孤吟碧嶂前。
侧身窥洞口,明目注山巅。
遥望青峰雪,皑皑白映天。

访终南怀道村宁之道留宿竹园
怀道访之道,摅情远世情。
安居神自爽,欲睡梦还惊。
仙院风光雅,琼林月色清。
儒生真得趣,奚恋紫抱荣。

赞长生先生
法眷我昏耳,仙俦谁福乎?
东莱高士杰,西洛大名殊。
后获宗乘教(公最后出家),先开道德模。
深知童子力,乃感圣贤扶。

赞玉阳先生
故国真仙子,东方大达人。
清高何异俗,爽迈不同尘。
表里天俱赐,行藏世绝伦。
时时期祸福,征验默通神。

寄题目磻溪太公庙
一景通高下,三峰镇古今。
路穿云洞滑,祠隐钓溪深。
出窦飞泉迸,参天古柏阴。
快哉清绝地,堪畅野人心。

春日登览
时出碧云堂,回旋望八荒。
云收千里净,风散百花香。
欲海愁思远,春山兴味长。
(木耆)筇登眺罢,深入醉中乡。

初雪
昨夜雨成雪,今朝地变银。
窗明不是晓,野蝉即非尘。
出海金波淡,弥天玉树新。
乍观清入眼,堪动作诗人。

秋雨
信宿天飞雨,清秋地涌波。
沉阴韬日月,(氵孛)(氵鹬—鸟)涨江河。
紫塞归鸿恨,青山隐士歌。
不防居石室,高枕咏烟萝。

出都
乍出皇都外,高吟野兴驰。
开笼鹦鹉俊,展翼凤凰奇。
白马翩翩骤,青山隐隐移。
长安一片锦,指日到无疑。

登记易州西山
褰裳步不毛,绝顶望秋毫。
深谷杳冥峻,乱山重叠高。
森森骨髓战,(目完)(目完)目睛劳。
自笑无心客,何如挂壁猱。

题艾山
一朵黑云寒,亭亭杳霭间。
天垂沧海阔,地镇白云闲。
五岳名虽隐,三神道可攀。
时观触石化,甘露沃尘寰。

望昆嵛
旧隐昆仑地,东南一望嘉。
玉峰排海岳,云锦散天花。
气郁钟三秀,神清迈九华。
时当春雪霁,盈眼白朱砂。

登蓬莱阁
一上蓬莱阁,虚心瞪目遥。
云移山自长,水到海还消。
俯视蛟龙窟,旁观鸟鹊桥。
何忧远轻举?咫尺近丹霄。

望海
海色吞天色,风声杂水声。
云翻鱼鳖骇,雷动鬼神惊。
射激千岩险,汪洋万里平。
时无钓鳌手,掷(牛害)引长鲸。

山堂雨霁
晓日三竿丽,千山一望平。
高吟神愈畅,远眺目增明。
雨后檐前润,风来座上清。
心非同道者,不使过门行。

夜深对月

耿耿中宵月,无人独自行。
下连沧海白,高满太虚清。
奋迹离三岛,游空照万城。
城中多少客,睡重不能惊。

耿耿中宵月,无人独自明。
天边维斗暗,地上百邪惊。
野鹤依稀辨,群龙夭矫鸣。
寻常三五夜,未有一般清。

初冬括马值雨
十月滂沱雨,三更汹涌声。
浮云连海峤,激水灌山城。
野暗风波急,泥深道咯倾。
行人兼走马,一夜到天明。

初雪
行看十月尽,偶见六花飞。
散漫回风急,缤纷入夜微。
山川淡屏帐,星斗失珠玑。
晓色冲天净,银霞烂目辉。

游春
一夜春风暖,三竿晓日华。
有山皆著锦,无地不开花。
金谷人多感,桃源路易差。
回头皆是梦,说与道人家。

春夜雨

山光犹冷淡,景色未铺陈。
细雨遍沾物,轻风不著人。
融和三月暖,次第百花新。
静夜轩中卧,闲吟海上春。

春色来何晚,清明不见花。开轩观翠竹,拨土认黄芽。夜雨微微作,光风渐渐嘉。参差三月尽,桃李满天涯。

云峰
九夏时炎赫,千山气郁蒸。
翔空初漠漠,变态复层层。
岌(山下业)真堪画,孤高不可升。
何当仙去也,跨鹤上凭凌。

筏木得风
修殿乏材,令工师筏木海北,至滨阻风,殆十余日。秋八月有九日,方西南风,筏木乘之,始达胶东。
日落金风顺,潮平筏木开。
云帆争岸急,晓日映天来。
海北中多难,胶东幸少灾。
不忧成大厦,已见得良材。

自述
白发年来长,红颜日渐凋。
未能明道术,欲去问松乔。
罔象如何觅?还丹著甚烧?
钦依三洞诀,得使万缘消。

蓝田
万壑舒纹锦,千峰列画屏。
雨余蓝水白,云断玉山青。

复归陇山

鹤性还山好,云峰当夏奇。
避风权过海,得雨不留池。

独坐长松下,孤吟乱石边。
夜骑朱顶鹤,时访白云仙。

悯物

皇天生万类,万类属皇天。
何事纵陵虐,不教生命全?

阴阳成造化,生灭递浮沉。
最苦有情物,难当无善心。

秋夜

露气含秋爽,天光照夜明。
陇头残月暗,溪上晓风清。

玉露夜漫漫,银河秋耿耿。
风含水谷清,月耀天衢冷。

清晓

银河初变色,星斗欲翻空。
残月半轮白,晓霞千丈红。

舞鹤夜初晓,游仙梦始惊。
月衔山转大,风度水偏清。

清兴

三冬游海上,六出满天涯。
为访神仙窟,经过道士家。

酒倾金露滑,茶点玉芝香。
神爽得三昧,清和消百殃。

造物

造物通神化,流形满大千。
群迷长受苦,万圣不能悛。

太混一时剖,空花千古繁。
神奇亿万变,道德杳冥存。

万花随时出,三光合度明。
九霄宫运转,八极自生成。

示众

色身元有限,情欲浩无涯。痴似蜂贪蜜,狂如蝶恋花。

六根谁是主?贪欲自招殃。一念色心动,百骸秋气伤。

外物于身患,狂心不自监。病深方省欲,祸极始知贪。

最爱三田宝,难禁五欲情。后生须自重,元气莫相轻。

四大本无托,百年还有期。众人皆不悟,三教莫能规。

失道本无命,得时元有期。有无皆自定,贪爱复何为?

红颜若春树,白发似秋霜。俯仰一时过,驱驰三界忙。

繁华媚春雨,衰草淡秋烟。日月暗相逼,古今经几迁?

罗绮千箱满,金珠万斛盈。只知他物好,不觉自心萦。

厦屋千间峻,泪田万亩平。自心非实相,他物是虚名。
十一
世事无穷变,闷愁不测来。志心行言之,门户少凶灾。
十二
祸福相生灭,荣枯递献酬。不穷天外乐,那免世间忧?
十三
精神多削弱,机巧益巉岩。未及开笼鸟,还同作茧蚕。
十四
遇战皆奔北,逢迷孰指南?身心多自役,道德有谁参?
十五
物里光阴促,人间兴废多。觉来浑似梦,贪得又如何?
十六
彼此众生性,朝昏杂念魔。静观无以救,长叹复如何?
十七
假饶身富贵,不及性圆通。道德希夷妙,春秋杀伐空。
十八
大梦何时觉?浮生旷劫迷。乾坤无昼夜,日月走东西。
十九
妙理无由得,狂心不奈何。念随空变化,精自欲消磨。
二十
爱欲时光短,前程地狱深。莫教空度日,切要紧降心。
二十一
宽容无怨害,柔弱胜刚强。满口齿先落,终身舌未伤。
二十二
江海无拘容,乾坤自在人。子陵犹傲帝,王霸不称臣。
二十三
石髓能延寿,丹砂解驻颜。葛洪游大海,王烈遇深山。
二十四
触情常决烈,非道莫参差。忍辱调猿马,安闲度岁时。
二十五
真阳加满腹,遐寿可齐天。世事皆虚耗,心神莫倒颠。
二十六
像教终难入,名言不可求。心中无杂念,境上得闲游。
二十七
浮华皆是梦,外物岂能坚?若不通三一,如何出大千?
二十八
可畏风前烛,堪嗟 水上沤。百年如反掌,千古暂回头。
二十九
众生多患难,大道苦希微。不有神仙福,难明造化机。
三十
众生皆为口,终日苦劳心。目眩空花乱,身随万物淫。
三十一
众生心不尽,大道理难明。若要开天眼,须当灭世情。

三十二
日月交加迫,朝昏返复催。光阴留不住,生死突将来。

三十三
自然生有漏,谁解入无余。不见眼前欲,方知心上虚。

三十四
有情知道远,无事觉心宽。造化开天窟,精神奈岁寒。

三十五
茫茫三蜀阔,混混百邪深。万古常存道,群生不了心。

三十六
五福唯高寿,三灵独配人。优游闲卒岁,放浪不拘尘。

三十七
圣贤非道远,功德在人修。不向此心觅,更于何处求?

修道

眼耳离声色,身心却有无。自然通造化,何必论精粗?

炼气清心士,干云拔俗标。心如山不动,气似海常潮。

万缘如嚼蜡,三毒似销冰。既出阴阳壳,那论大小乘?

五眼元同体,三身共一枝。寸心无我后,圆觉照空时。

自生还自灭,无浅亦无深。不悟身非我,难明物是心。

踏碎虚空界,崩开造化权。浮云收静境,慧日照禅天。

一言何所在?万事不相干。造化开天窟,精神耐岁寒。

眼根虽有用,心地了然休。且向一生梦,聊随万化游。

身犹方丈窄,心若太虚宽。四海千山隔,三灵一体观。

寂灭无心地,光明耀太虚。琉璃含宝月,网络贯天珠。
十一
登真无浊气,迈俗有清标。急急离长夜,冥冥上太霄。
十二
玉鼎丹砂沸,金壶碧酒香。鬼神心莫测,天地寿难量。
十三
梦断华胥国,神游紫府天。兴邀三岛客,闲访十洲仙。
十四
道因无事得,法为有心生。若解除三毒,应当出五行。
十五
道自无为显,心因有法生。混元含万象,太一起虚名。
十六
有动缘无动,无为即有为。三光不照处,万象显明时。
十七
本自无心得,何劳用意思?五行不到处,万化总归时。
十八
月上中天皎,风来半夜清。洞天人不到,闲客自相迎。
十九
药圃芝田净,金坛玉宇新。壶中天不夜,物外景长春。
二十
十洞高真列,三天上圣居。白云能送客,青鸟解传书。

灵源大道歌

Standard

原文

我為诸君说端的。命蒂从来在真息。照体长生空不空。灵鑑涵天容万物。
太极布妙人得一,得一善持谨勿失。宫室虚閒神自居,灵府煎熬枯血液。
一悲一喜一思虑,一纵一劳形蠹弊,朝伤暮损迷不知。丧乱精神无所据。
细细消磨渐渐衰,耗竭元气神乃去。只道行禪坐亦禪,圣可如斯凡不然。
萌芽脆嫩须含蓄,根识昏迷易变迁。磋跎不解去荆棘,未闻美稼出荒田,
九年功满火候足,应物无心神化速。无心心即是真心。动静两忘為离欲。
神是性兮气是命,神不外驰气自定。本来两物更谁亲,失却将何為本柄。
混合為一復忘一,可与元化同出没。透金贯石不為难,坐脱立亡犹倏忽。
此道易知不易行,行忘所行道乃毕。莫将闭息為真务,数息按图俱未是。
比来放下外尘劳,内有縈心两何异。但看婴儿处胎时,岂解有心潜算计。
专气致柔神久留,往来真息自悠悠。绵绵迤邐归元命,不汲灵泉常自流。
三万六千為大功,阴阳节候在其中。蒸融关脉变筋骨,处处光明无不通。
三彭走出阴尸宅,万国来朝赤帝宫。借问真人何处来,从前元只在灵台。
昔年云雾深遮蔽,今日相逢道眼开。此非一朝与一夕,是我本真不是术。
岁寒坚确知金石,战退阴魔加慧力。皆由虚淡復精专。便是华胥情静国。
初将何事立根基,到无為处无不為。念中境象须除拔,梦裡精神牢执持。
不动不静為大要,不方不圆為至道。元和内炼即成真,呼吸外求终未了。
元气不住神不安,蠹木无根枝叶乾。休论涕唾与精血,达本穷源总一般。
此物何曾有定位,随时变化因心意。在体感热即為汗,在眼感悲即為泪。
在肾感念即為精,在鼻感风即為涕。纵横流转润一身,到头不出於神水。
神水难言识者稀,资生一切由真气。但知恬淡无思虑,斋戒寧心节言语。
一味醍醐甘露浆,飢渴消除见真素。他时功满自逍遥,初日炼烹实勤苦。
勤苦之中又不勤,閒閒只要养元神。奈何心使閒不得,到此纵擒全在人。
我昔苦中苦更苦,木食草衣孤又静。心知大道不能行,名跡与身為大病。
比如閒处用功夫,争似泰然坐大定。形神虽曰两难全,了命未能先了性。
不去奔名与逐利,绝了人情总无事。决烈在人何住滞,在我更教谁制御。
掀天声价又如何,倚马文章非足贵。荣华衣食总无心,积玉堆金復何济。
工巧文章与词赋,多能碍却修行路,恰如薄雾与轻烟,閒傍落花随柳絮。
縹渺幽閒天地间,到了不能成雨露。名与身分竟孰亲,半生岁月大因循。
比来修炼赖神气,神气不安空苦辛。可怜一个好基址,金殿玉堂无主人。
劝得主人长久住,置在虚閒无用处。无中妙有执持难,解养婴儿须藉母。
缄藏俊辩黜聪明,收卷精神作愚鲁。坚心一志任前程,大道於人终不负。

Continue reading

Node.js 4.0 中的 ES 6 特性介绍

Standard

原文:http://www.cli-nerd.com/2015/09/09/7-reasons-to-upgrade-to-node-v4-now.html作者: Damien Klinnert
译文:LCTT  https://linux.cn/article-6212-1.html译者: wxy

Node.js 4.0.0 已经发布了。这是和 io.js 合并之后的首个稳定版本,它带来了一系列的新特性,支持 ES 6的大部分特性。已经有很多 ES 6 的特性介绍了,这里我们介绍一下该怎么使用它们。

1. 模板字符串

如果你要在 JavaScript 中创建多行字符串,你可能会使用如下的语法:

  1. var message = [
  2. 'The quick brown fox',
  3. 'jumps over',
  4. 'the lazy dog'
  5. ].join('\n');

对于少量字符串这还算合适,但是如果比较多就会显得混乱。不过,有个聪明的开发者提出了一个叫 multiline 的技巧:

  1. var multiline = require('multiline');
  2. var message = multiline(function () {/*
  3. The quick brown fox
  4. jumps over
  5. the lazy dog
  6. */});

幸运的是,ES 6 为我们带来了模板字符串:

  1. var message = `
  2. The quick brown fox
  3. jumps over
  4. the lazy dog
  5. `;

此外,它还给我们带来了字符串内插:

  1. var name = 'Schroedinger';
  2. // 不要这样做 ...
  3. var message = 'Hello ' + name + ', how is your cat?';
  4. var message = ['Hello ', name, ', how is your cat?'].join('');
  5. var message = require('util').format('Hello %s, how is your cat?', name);
  6. // 应该这样做 ...
  7. var message = `Hello ${name}, how is your cat?`;

在 MDN 上查看模板字符串的细节.

2. 类

在 ES5 中定义类看起来有点奇怪,也比较麻烦:

  1. var Pet = function (name) {
  2. this._name = name;
  3. };
  4. Pet.prototype.sayHello = function () {
  5. console.log('*scratch*');
  6. };
  7. Object.defineProperty(Pet.prototype, 'name', {
  8. get: function () {
  9. return this._name;
  10. }
  11. });
  12. var Cat = function (name) {
  13. Pet.call(this, name);
  14. };
  15. require('util').inherits(Cat, Pet);
  16. Cat.prototype.sayHello = function () {
  17. Pet.prototype.sayHello.call(this);
  18. console.log('miaaaauw');
  19. };

幸运的是,在 Node.js 中可以使用新的 ES6 格式:

  1. class Pet {
  2. constructor(name) {
  3. this._name = name;
  4. }
  5. sayHello() {
  6. console.log('*scratch*');
  7. }
  8. get name() {
  9. return this._name;
  10. }
  11. }
  12. class Cat extends Pet {
  13. constructor(name) {
  14. super(name);
  15. }
  16. sayHello() {
  17. super.sayHello();
  18. console.log('miaaaauw');
  19. }
  20. }

有 extends 关键字、构造子、调用超类及属性,是不是很棒?还不止这些,看看 MDN 上的更详细的介绍。

3. 箭头函数

在函数里面对 this 的动态绑定总是会导致一些混乱,人们一般是这样用的:

  1. Cat.prototype.notifyListeners = function () {
  2. var self = this;
  3. this._listeners.forEach(function (listener) {
  4. self.notifyListener(listener);
  5. });
  6. };
  1. Cat.prototype.notifyListeners = function () {
  2. this._listeners.forEach(function (listener) {
  3. this.notifyListener(listener);
  4. }.bind(this));
  5. };

现在你可以使用胖箭头函数了:

  1. Cat.prototype.notifyListeners = function () {
  2. this._listeners.forEach((listener) => {
  3. this.notifyListener(listener);
  4. });
  5. };

了解箭头函数的更多细节。.

4. 对象字面量

使用对象字面量,你现在有了很漂亮的快捷方式:

  1. var age = 10, name = 'Petsy', size = 32;
  2. // 不要这样做 ...
  3. var cat = {
  4. age: age,
  5. name: name,
  6. size: size
  7. };
  8. // ... 而是这样做 ...
  9. var cat = {
  10. age,
  11. name,
  12. size
  13. };

此外,你现在可以很容易地 给你的对象字面量添加函数

5. Promise

不用再依赖像 bluebird 或 Q这样的第三方库了,你现在可以使用 原生的 promise. 它们公开了如下 API:

  1. var p1 = new Promise(function (resolve, reject) {});
  2. var p2 = Promise.resolve(20);
  3. var p3 = Promise.reject(new Error());
  4. var p4 = Promise.all(p1, p2);
  5. var p5 = Promise.race(p1, p2);
  6. // 显然
  7. p1.then(() => {}).catch(() => {});

6. 字符串方法

我们也有了一系列新的字符串功能:

  1. // 在几种情况下可以替代 `indexOf()`
  2. name.startsWith('a')
  3. name.endsWith('c');
  4. name.includes('b');
  5. // 重复字符串三次
  6. name.repeat(3);

去告诉那些使用 Ruby 的家伙吧!字符串现在也 对 unicode 支持更好了

7. let 和 const

猜猜下列函数调用的返回值:

  1. var x = 20;
  2. (function () {
  3. if (x === 20) {
  4. var x = 30;
  5. }
  6. return x;
  7. }()); // -> undefined

是的, undefined。使用 let 替代 var ,你会得到预期的行为:

  1. let x = 20;
  2. (function () {
  3. if (x === 20) {
  4. let x = 30;
  5. }
  6. return x;
  7. }()); // -> 20

原因是什么呢? var 是函数作用域,而 let 是块级作用域(如大部分人所预期的)。因此,可以说 let 是一个新var。 你可以在 MDN 上了解更多细节

此外,Node.js 也支持 const 关键字了,它可以防止你为同一个引用赋予不同的值:

  1. var MY_CONST = 42; // no, no
  2. const MY_CONST = 42; // yes, yes
  3. MY_CONST = 10 // 使用了 const ,这就不行了

结语

Node.js 4.0.0 带来了更多的 ES6 特性,我希望这七个例子可以吸引你升级到最新版本。

还有更多的语言特性呢(例如,maps/sets, 符号和生成器,这里只提到了一点)。你可以看看 Node.js 4.0.0 的 ES6 概览。 赶快升级吧!

TCP/IP协议栈及OSI参考模型详解

Standard

原文:http://wangdy.blog.51cto.com/3845563/1588379

OSI参考模型

OSI RM:开放系统互连参考模型(open systeminterconnection reference model)

OSI参考模型具有以下优点:

    • 简化了相关的网络操作;
    • 提供设备间的兼容性和标准接口;
    • 促进标准化工作;
    • 结构上可以分隔;
    • 易于实现和维护。

 

20世纪60年代以来,计算机网络得到了飞速增长。各大厂商为了在数据通信网络领域占据主导地    位,纷纷推出了各自的网络架构体系和标准,如IBM公司的SNA,Novell IPX/SPX协议,Apple公司的AppleTalk协议,DEC公司的DECnet,以及广泛流行的TCP/IP协议。同时,各大厂商针对自己的协议生产出了不同的硬件和软件。各个厂商的共同努力促进了网络技术的快速发展和网络设备种类的迅速增长。但由于多种协议的并存,也使网络变得越来越复杂;而且,厂商之间的网络设备大部分不能兼容,很难进行通信。

为了解决网络之间的兼容性问题,帮助各个厂商生产出可兼容的网络设备,国际标准化组织ISO于1984年提出了OSI RM(OpenSystem Interconnection Reference Model,开放系统互连参考模型)。OSI 参考模型很快成为计算机网络通信的基础模型。在设计OSI 参考模型时,遵循了以下原则:各个层之间有清晰的边界,实现特定的功能;层次的划分有利于国际标准协议的制定;层的数目应该足够多,以避免各个层功能重复。

 

OSI分层

 

wKioL1SIBIaiOFczAADimSwcq6s561.jpg

通常OSI参考模型第一层到第三层称为底层(lower layer),又叫介质层(media layer),底层负责数据在网络中的传送,网络互连设备往往位于下三层,以硬件和软件的方式来实现。OSI参考模型的第五层到第七层称为高层(upper layer),又叫住几层(host layer),高层用于保障数据的正确传输,以软件方式来实现。

 

OSI七层功能:

wKiom1SIA_nwv_AgAAHIC52DZA4848.jpg

 

  • TCP/IP协议栈

wKioL1SIBJKy7q8oAAEMHfbl-0E582.jpg

由于OSI模型和协议比较复杂,所以并没有得到广泛的应用。

而TCP/IP(transfer control protocol/internet protocol,传输控制协议/网际协议)模型因其开放性和易用性在实践中得到了广泛的应用,TCP/IP协议栈也成为互联网的主流协议。

wKiom1SIBAHw1MybAAE_fDStMQg817.jpg

TCP/IP模型各个层次分别对应于不同的协议。TCP/IP协议栈是数据通信协议的集合 ,包含许多协议。其协议栈名字来源于其中最主要的两个协议TCP(传输控制协议)和IP(网际协议)。TCP/IP协议栈负责确保网络设备之间能够通信。它是一组规则,规定了信息如何在网络中传输。

 

TCP/IP模型的层间通信与数据封装

 

wKiom1SIBN_iV-a8AAHEz78AQQE658.jpg

TCP/IP每一层都让数据得以通过网络进行传输,这些层之间使用PDU(协议数据单元)彼此交换信息,确保网络设备之间能够通信。

wKioL1SIBXngTSn2AAFtzBd_5_4918.jpg

A.    传输层数据中加入TCP报头后得到PDU被称为segment(数据段)

B.    数据段被传递给网络层,网络层添加IP报头得到的PDU被称为packet(数据包)

C.    数据包被传递到数据链路层,封装数据链路层报头得到的PDU被称为frame(数据帧)

D.    帧被转换为比特,通过网络介质传输。

这种协议栈向下传递数据,并添加报头和报尾的过程称为封装,数据被封装并通过网络传输后,接收设备将删除添加的信息,并根据报头中的信息决定如何将数据沿协议栈上传给合适的应用程序,这个过程称为解封装。不同设备的对等层之间依靠封装和解封装来实现相互间的通信。

 

 

物理层

物理层功能:

  • 规定介质类型、接口类型、信令类型;
  • 规范在终端系统之间激活、维护和关闭物理链路的电气、机械、流程和功能等方面的要求;
  • 规范电平、数据速率、最大传输距离和物理接头等特征。

wKiom1SIBOXxKFUYAACaTcRu0rw177.jpg

物理层标准规定了物理介质和用于将设备与物理介质相连的接头。

如上图,局域网常用的物理层标准有IEEE指定的以太网标准802.3、令牌总线标准802.4、令牌环网标准802.5以及美国国家标准组织ANSI的X3T9.5委员会制订的光缆标准FDDI(fiber distributed data interface,光纤分布式数据接口)等。广域网常用的物理层标准有电子工业协会和电信工业协会EIA/TIA制定的公共物理层接口标准EIA/TIA-232(即RS-232)、国际电信联盟ITU制定的串行线路接口标准V.24和V.35、以及有关各种数字接口的物理和电气特性的标准G.703等。

物理层介质和物理层设备:

  物理层介质:

    • 同轴电缆(coaxical cable)
    • 双绞线(twisted pair)
    • 光纤(fiber)
    • 无线电波(wireless raido)

 

同轴电缆:

wKiom1SIBdmQ2tgzAADxPQFWWRg801.jpg

同轴电缆是一种早期使用的传输介质,同轴电缆的标准分为两种,10BASE2和10BASE5.这两种标准都支持10Mbps的传输速率,最长传输距离分别为185米和500米。10BASE5和10BASE2的同轴电缆使用

的同轴电缆的直径分别为9.5mm和5mm,所以前者又称为粗缆,后者又称为细缆。一般情况下,10BASE2同轴电缆使用BNC接头,10BASE5同轴电缆使用N型接头。目前,10Mbps的传输速率早已不能满足目前企业网络需求,因此同轴电缆在目前企业网络中很少应用。

 

双绞线

wKiom1SIBOqRwiqQAAD9zkp39Q0530.jpg

双绞线采用了一对互相绝缘的金属导线互相绞合的方式来抵御一部分外界电磁波干扰。把两根绝缘的铜导线按一定密度互相绞在一起,可以降低信号干扰的程度,每一根导线在传输中辐射的电波会被另一根线上发出的电波抵消,“双绞线”的名字也是由此而来的。

 

与同轴电缆相比双绞线(twistedpair)具有更低的制造和部署成本,因此在企业网络中被广泛应用。双绞线可分为屏蔽双绞线(shieldedtwisted pair,STP)和非屏蔽双绞线(unshieldedtwisted pair,UTP)。屏蔽双绞线在双绞线与外层绝缘封套之间有一个金属屏蔽层,可以屏蔽电磁干扰。

 

双绞线有很多种类型,不同类型的 双绞线所支持的传输速率一般也不相同。例如,3类双绞线支持10Mbps传输速率;5类双绞线支持100Mbps传输速率,满足快速以太网标准;超5类双绞线及更高级别的双绞线支持千兆以太网传输。

 

双绞线线序:

568A线序:

1-绿白,2-绿,3-橙白,4-蓝,5-蓝白,6-橙,7-棕白,8-棕

568B线序:

1-橙白,2-橙,3-绿白,4-蓝,5-蓝白,6绿,7-棕白,8-棕

 

根据网线两端连接网络设备的不同,网线又分为直通线(平行线)和交叉线两种。

直通线(平行线)就是按照前面介绍的568A标准或568B标准制作(即双绞线两端的线序一样,568A的线序不常用,现主流用的都是568B的线序)

交叉线的一端保持原来的线序,另一端把1和3对调,2和5对调。

 

直通线和交叉线的应用:

1.    同种类型设备之间使用交叉线连接,不同类型设备之间使用直通线连接;

2.    路由器和PC属于DTE(DataTerminal Equipment,数据终端设备)类型设备,交换机和HUB数据DCE(Data Circuit-terminatingEquipment,数据通信设备)类型设备。

 

光纤

 

wKioL1SIBtTQDsL7AAHLv3k9JBw286.jpg

双绞线和同轴电缆传输数据时使用的是电信号,而光纤传输数据时使用的是光信号。光纤支持的传输速率包括10Mbps,100Mbps,1Gbps,10Gbps,甚至更高。根据光纤传输光信号模式的不同,光纤又可分为单模光纤和多模光纤。单模光纤只能传输一种模式的光,不存在模间色散,因此适用于长距离高速传输。多模光纤允许不同模式的光在一根光纤上传输,由于模间色散较大而导致信号脉冲展宽严重,因此多模光纤主要用于局域网中的短距离传输。光纤连接器种类喝多,常用的连接器包括ST,FC,SC,LC连接器。

 

串口电缆

wKioL1SIBtuh_7oPAAE_HOI2lt4917.jpg

网络通信中常常会用到各种各样的串口电缆。常用的串口电缆标准为RS-232,同时也是推荐的标准。但是RS-232的传输速率有限,传输距离仅为6米。其他的串口电缆标准可以支持更长的传输距离,例如RS-422和RS-485的传输距离可达1200米。RS-422和RS-485串口电缆通常使用V.35接头,这种接头在上世纪80年代已经淘汰,但是现在仍在帧中继、ATM等传统网络上使用。V.24是RS-232标准的欧洲版。RS-232本身没有定义接头标准,常用的接头类型为DB-9和DB-25。现在,RS-232已逐渐被FireWire、USB等新标准取代,新产品和新设备已普遍使用USB标准。

 

冲突域

wKiom1SIBkjjixwzAACvWv9IRbc487.jpg

如图是一个10BASE5以太网,每个主机都是用同一根同轴电缆来与其它主机进行通信,因此,这里的同轴电缆又被称为共享介质,相应的网络被称为共享介质网络,或简称为共享式网络。共享式网络中,不同的主机同时发送数据时,就会产生信号冲突的问题,解决这一问题的方法一般是采用载波侦听多路访问/冲突检测技术(carrier sense multiple access/collisiondetection)。

CSMA/CD的基本工作过程如下:

1.    终端不停地检测共享线路的状态。如果线路空闲,则可以发送数据;如果线路不空闲,则等待一段时间后继续检测(延时时间由退避算法决定)。

2.    如果有另一个设备同时发送数据,两个设备发送的数据会产生冲突。

3.    终端设备检测到冲突之后,马上停止发送自己的数据,并发送特殊阻塞信息,以强化冲突信号,使线路上其他站点能够尽早检测到冲突。

4.    终端设备检测到冲突后,等待一段时间之后再进行数据发送(延时时间由退避算法决定)。

CSMA/CD的工作原理可简单总结为:先听后发,边发边听,冲突停发,随机延迟后重发。

 

物理层设备:中继器和集线器

 

数据链路层

数据链路层又分为MAC子层和LLC子层

wKioL1SIBuDToShPAACwexBlz_8850.jpg

MACSub-layer:media access controlsub-layer介质访问控制子层

MAC子层负责指定数据如何通过物理线路进行传输,并向下与物理层通信,它定义了物理编址、网络拓扑、线路规范、错误通知、按序传递和流量控制等功能。

LLCSub-layer:logic link control sub-layer逻辑链路控制子层

LLC子层负责识别协议类型并对数据进行封装以便通过网络进行传输。LLC子层主要执行数据链路层的大部分功能和网络层的部分功能。如帧的收发功能,在发送时,帧由发送的数据加上地址和CRC校验等构成,接收时将帧拆开,执行地址识别、CRC校验,并具有帧顺序控制、差错控制、流量控制等功能。此外,它还执行数据报、虚电路、多路复用等部分网络层的功能。

 

数据链路层协议

wKiom1SIBk7Cs5SUAAFC3wxBffU801.jpg

数据链路层协议规定了数据链路层帧的封装方式。

局域网常用的数据链路层协议有IEEE802.2 LLC标准。

广域网常用的数据链路层协议有:

HDLC(high-level data link control,高级数据链路控制)

              PPP(point-to-point protocol,点到点协议)

              FR(frame relay,帧中继)

 

数据链路层-以太网地址(MAC地址)

wKiom1SIBlGzRYY_AADHj1rzMTc659.jpg

网络设备的MAC地址是全球唯一的。MAC地址由48个二进制位组成,通常我们用十六进制数字来表示。其中前6位十六进制数字由IEEE统一分配给设备制造商,后6位十六进制数字由厂商自行分配。

 

网络层

功能:在不同的网络之间转发数据包

    • 提供逻辑地址,如果数据跨网络传递,则需要使用逻辑地址来寻址。
    • 路由:将数据报文从一个网络转发到另一个网络。

设备:路由器、三层交换机

 

网络层协议

wKioL1SIBu2A4HS5AAFf0Wv8N9I094.jpg

常用网络层协议有:

IP(Internet Protocol):IP为网络层最主要的协议,其功能即为网络层的主要功能,一是提供逻辑编址,二是提供路由功能,三是报文的封装和解封装。ICMP、ARP、RARP协议辅助IP工作。

  ICMP(Internet Control Message Protocol)是一个管理协议并为IP提供信息服务,ICMP消息承载在IP报文中。

ARP(Address Resolution Protocol)实现IP地址到硬件地址的动态映射,即根据已知的IP地址获得相应的硬件地址。

RARP(Reverse Address Resolution Protocol)实现硬件地址到IP地址的动态映射,即根据已知的硬件地址获得相应的IP地址。

 

网络层地址:网络地址在网络层唯一标识一台网络设备。

网络地址包含两部分:网络ID+主机ID(下节主要内容)

 

传输层

主要功能:

    • 分段上层数据;
    • 建立端到端连接;
    • 将数据从一端主机传送到另一端主机;
    • 保证数据按序、可靠、正确传输。

传输层协议:

wKiom1SIBljRr48mAAFPpXRKpXU847.jpg

传输层协议主要包含传输控制协议TCP(transfer control protocol)和用户数据报文协议UDP(user datagram protocol)

 

wKiom1SIBzHSMZ78AAF3CFFhIxI894.jpg

TCP提供面向连接的、可靠的字节流服务。面向连接意味着使用TCP协议作为传输层协议的两个应用之间在相互交换数据之前必须建立一个TCP连接。TCP通过确认、校验、重组等机制为上层应用提供可靠的传输服务。但是TCP连接的建立以及确认、校验等机制都需要耗费大量的工作并且会带来大量的开销。

UDP提供简单的、面向数据报的服务。UDP不保证可靠性,即不保证报文能够到达目的地。UDP适用于更关注传输效率的应用,如SNMP、Radius等,SNMP监控网络并断续发送告警等消息,如果每次发送少量信息都需要建立TCP连接,无疑会降低传输效率,所以诸如SNMP、Radius等更注重传输效率的应用程序都会选择UDP作为传输层协议。另外,UDP还适用于本身具备可靠性机制的应用层协议。

 

应用层功能

    • 为用户提供接口、处理特定的应用;
    • 数据加密、解密、压缩、解压缩;
    • 定义数据表示的标准。

应用层协议

wKiom1SIBziAnfTLAAIEZXvr3G4915.jpg

应用层有许多协议,以下协议可以帮助您使用和管理 TCP/IP 网络:

FTP(File TransferProtocol) 文件传输协议。用于传输独立的文件,通常用于交互式用户会话。

HTTP(HypertextTransfer Protocol)超文本传输协议。 用于传输那些构成万维网上的页面的文件。

TELNET :远程终端访问。用于传送具有TELNET控制信息的数据。它提供了与终端设备或终端进程交互的标准方法,支持终端到终端的连接及进程到进程分布式计算的通信。

SMTP(Simple MessageTransfer Protocol)简单邮件传输协议 和

POP3(Post OfficeProtocol)邮局协议用于发送和接收邮件。

DNS(Domain NameServer)是一个域名服务的协议,提供域名到IP地址的转换,允许对域名资源进行分散管理。

TFTP(Trivial FileTransfer Protocol)简单文件传输协议。设计用于一般目的的、高吞吐量的文件传输。

RIP(RoutingInformation Protocol)路由器用来在 IP 网络上交换路由信息的协议。

SNMP(Simple NetworkManagement Protocol)用于收集网络管理信息,并在网络管理控制台和网络设备(例如路由器、网桥和服务器)之间交换网络管理信息。

Radius(RemoteAuthentication Dial In User Service)拨号接入远端认证协议完成接入用户的认证、授权、计费功能的协议。

 

  • TCP/IP协议栈的封装过程

wKioL1SIB9bQaJBVAAGxIUxvNyc832.jpg

以传输层采用TCP或者UPD、网络层采用IP、链路层采用Ethernet为例,可以看到TCP/IP中报文的封装过程如上图所示。用户数据经过应用层协议封装后传递给传输层,传输层封装TCP头部,交给网络层,网络层封装IP头部后,再交给数据链路层,数据链路层封装Ethernet帧头和帧尾,交给物理层,物理层以比特流的形式将数据发送到物理线路上。

 

TCP Segment

wKiom1SIB0CA7CtDAADq-b6k7KM867.jpg

TCP协议概述:

TCP为应用程序提供一种面向连接的、可靠的服务。

TCP的可靠性:

    • 面向连接的传输
    • 最大报文段长度
    • 传输确认机制
    • 首部和数据的检验和
    • 流量控制

TCP首部格式

wKiom1SIB0LBnFOsAAEujCB4yys663.jpg

TCP使用IP作为网络层协议,TCP数据段被封装在一个IP数据包内。TCP数据段由TCP Head(头部)和TCP Data(数据)组成。

TCP最多有60个字节的首部,如果没有任选字段,正常的长度是20字节。TCP Head如上图标识的一些字段组成,这里列出几个常用的字段。

16位源端口号:TCP会为源应用程序分配一个源端口号。

16位目的端口号:目的应用程序的端口号。每个TCP段都包含源和目的端的端口号,用于寻找发端和收端应用进程。这两个值加上IP首部中的源端IP地址和目的端IP地址可以唯一确定一个TCP连接。

32位序列号:用于标识从TCP发端向TCP收端发送的数据字节流。

32位确认序列号:确认序列号包含发送确认的一端所期望收到的下一个序号。确认序列号为上次成功收到的数据序列号加1。

4位首部长度:表示首部占32bit字的数目。因为TCP首部的最大长度为60字节。

16位窗口大小:表示接收端期望接收的字节,由于该字段为16位,因而窗口大小最大值为65535字节。

 16位检验和:检验和覆盖了整个TCP报文段,包括TCP首部和TCP数据。该值由发端计算和存储并由接收端进行验证。

 

TCP的三次握手(建立连接)和四次挥手(断开连接)

 

TCP连接的建立是一个三次握手的过程。如图所示:

wKioL1SIB9rCarKmAAC_CU7_mao308.jpg

1、请求端(通常也称为客户端)发送一个SYN段表示客户期望连接服务器端口,初始序列号为a。

2、服务器发回序列号为b的SYN段作为响应。同时设置确认序号为客户端的序列号加1(a+1)作为对客户端的SYN报文的确认。

3、客户端设置序列号为服务器端的序列号加1(b+1)作为对服务器端SYN报文段的确认。

这三个报文段完成TCP连接的建立。

 

TCP连接的建立是一个三次握手的过程,而TCP连接的终止则要经过四次握手。

如图所示:

wKiom1SIB0aiDqNnAADKHCMfIgI643.jpg

1、请求端(通常也称为客户端)想终止连接则发送一个FIN段,序列号设置为a。

2、服务器回应一个确认序号为客户端的序列号加1(a+1)的ACK确认段,作为对客户端的FIN报文的确认。

3、服务器端向客户端发送一个FIN终止段(设置序列号为b,确认号为a+1)。

4、客户端返回一个确认报文(设置序列号为b+1)作为响应。

以上四次交互完成双方向的连接的关闭。

 

TCP滑动窗口机制:

    wKioL1SIB-byaWruAAImM3ycikA350.jpg

TCP滑动窗口技术通过动态改变窗口大小来调节两台主机间的数据传输。每个TCP/IP主机支持全双工数据传输,因此TCP有两个滑动窗口:一个用于接收数据,另一个用于发送数据。TCP使用肯定确认技术,其确认号指的是下一个所期待的字节。

如图中所示以数据单方向发送为例,介绍滑动窗口如何实现流量

控制。服务器端向客户端发送4个大小为1024字节的数据段,其中发送端的窗口大小为4096,客户端到以ACK4097响应,窗口大小调整为2048,表明客户端(即接收端)缓冲区只能处理2048个字节的数据段。于是发送端改变其发送速率。发送接收端能够接收的数据段大小2048的数据段。

 

 

UDP协议概述

  • UDP为应用程序提供面向无连接的服务。传输数据之前源端和目的端不需要建立连接。
  • 不需要维持连接状态,收发状态等,因此服务器可同时向多个客户端传输相同的消息。
  • UDP适用于对传输效率要求高的运用。

UDP首部格式

 

wKiom1SIB8TRO_zhAADNA8HrkkQ733.jpg

UDP和TCP一样都使用IP作为网络层协议,TCP数据报被封装在一个IP数据包内。由于UDP不象TCP一样提供可靠的传输,因此UDP的报文格式相对而言较简单。

整个UDP首部有如下标识:

16位源端口号:为源端应用程序分配的一个源端口号。

16位目的端口号:目的应用程序的端口号

16位UDP长度:是指UDP首部和UDP数据的字节长度。该字段的最小值为8。

16位UDP检验和:该字段提供与TCP检验和同样的功能,只不过在UDP协议中该字段是可选的。

 

TCP VS UDP

wKioL1SICFyyZNXSAAFY4J3hgbU169.jpg

IP packet

wKiom1SIB8ugRyWwAAGRNKHx1IE758.jpg

网络层收到传输层的TCP数据段后会再加上网络层IP头部信息。普通的IP头部固定长度为20个字节(不包含IP选项字段)。

IP报文头主要由以下字段组成:报文长度是指头部占32比特字的个数,包括任何选项。由于它是一个4比特字段,24=16,除掉全0项共有15个有效值比特字段,其中最大值也为15,表示头部占15个32比特。因此32*15/8=60字节,头部最长为60字节。

版本号(Version)字段标明了IP协议的版本号,目前的协议版本号为4。下一代IP协议的版本号为6。

8比特的服务类型(TOS,Type of Service)字段包括一个3比特的优先权字段(COS,Class of Service),4比特TOS字段和1比特未用位。4比特TOS分别代表最小时延、最大吞吐量、最高可靠性和最小费用。

总长度(Total length)是整个IP数据报长度,包括数据部分。由于该字段长16比特,所以IP数据报最长可达65535字节。尽管可以传送一个长达65535字节的IP数据报,但是大多数的链路层都会对它进行分片。而且,主机也要求不能接收超过576字节的数据报。UDP限制用户数据报长度为512字节,小于576字节。而事实上现在大多数的实现(特别是那些支持网络文件系统NFS的实现)允许超过8192字节的IP数据报。

标识符(Identification)字段唯一地标识主机发送的每一份数据包。通常每发送一份报文它的值就会加1。

生存时间(TTL,Time to Live)字段设置了数据包可以经过的路由器数目。一旦经过一个路由器,TTL值就会减1,当该字段值为0时,数据包将被丢弃。

协议字段确定在数据包内传送的上层协议,和端口号类似,IP协议用协议号区分上层协议。TCP协议的协议号为6,UDP协议的协议号为17。

报头校验和(Head checksum)字段计算IP头部的校验和,检查报文头部的完整性。

源IP地址和目的IP地址字段标识数据包的源端设备和目的端设备IP地址信息。

Ethernet frame

wKiom1SIB9CgS-M7AAEfkSYePsA236.jpg

以太网头部由三个字段组成:

DMAC:表示目的终端MAC地址。

SMAC:表示源端MAC地址。

LENGTH/TYPE字段:根据值的不同有不同的含义:

当LENGHT/TYPE > 1500时,代表该数据帧的类型(比如

上层协议类型)常见的协议类型有:

0X0800 IP数据包

0X0806 ARP请求/应答报文

0X8035 RARP请求/应答报文。

当LENGTH/TYPE < 1500时,代表该数据帧的长度。

 

案例分析

wKiom1SIFQ-AU8LgAABPLDaZkWk637.jpg

如上图所示,通过例举出的TELNET协议的抓包实例,进一步加深对报文封装的理解。

wKioL1SIFaeiK8bgAAKorRwk0sc836.jpg

上图为AR1使用TELNET协议远程登录AR2进行的TCP三次握手过程。

wKioL1SIFajAi0-nAAHJcfjBW4s739.jpg

上图为数据链路层封装。如图可知使用的是Ethernet II格式封装。

DMAC为:00e0:fc3b:6792

SMAC为:00e0:fc80:64f3

type:字段为0x0800表明数据字段封装是IP报文。

wKiom1SIFRTiFYjwAALqjueaz2o705.jpg

上图为网络层报文封装。一个网络层IP包是由IP头部和IP数据组成。

上图表明是一个IPv4的报文

报文头为20字节

协议字段为0x06,表明数据封装的是一个TCP报文。

数据的源IP地址为12.12.12.1,目的IP地址为12.12.12.2

wKioL1SIFazyFJs8AAJF_RjjIv8392.jpg

上图为传输层数据封装。如图所示的传输层使用的是TCP协议

源端口号为随机端口号49895,目的端口号为公认TELNET协议端口号23


附:

常用默认端口号 网络层—数据包的包格式里面有个很重要的字段叫做协议号。比如在传输层如果是TCP连接那么在网络层IP包里面的协议号就将会有个值是6如果是UDP的话那个值就是17—传输层。

传输层—通过接口关联(端口的字段叫做端口)—应用层。

用netstat –an 可以查看本机开放的端口号。

代理服务器常用以下端口:

HTTP协议代理服务器常用端口号80/8080/3128/8081/9080

SOCKS代理协议服务器常用端口号1080

FTP文件传输协议代理服务器常用端口号21

Telnet远程登录协议代理服务器常用端口23

HTTP服务器默认的端口号为80/tcp木马Executor开放此端口

HTTPSsecurely transferring web pages服务器默认的端口号为443/tcp 443/udp

Telnet不安全的文本传送默认端口号为23/tcp木马Tiny Telnet Server所开放的端口

FTP默认的端口号为21/tcp木马Doly Trojan、Fore、InvisibleFTP、WebEx、WinCrash和Blade Runner所开放的端口

TFTPTrivial File Transfer Protocol 默认的端口号为69/udp

SSH安全登录、SCP文件传输、端口重定向默认的端口号为22/tcp

SMTP Simple Mail Transfer Protocol (E-mail)默认的端口号为25/tcp木马Antigen、EmailPassword Sender、Haebu Coceda、ShtrilitzStealth、WinPC、WinSpy都开放这个端口

POP3 Post Office Protocol (E-mail) 默认的端口号为110/tcp

WebLogic默认的端口号为7001

Webshpere应用程序默认的端口号为9080

webshpere管理工具默认的端口号为9090

JBOSS默认的端口号为8080

TOMCAT默认的端口号为8080

WIN2003远程登陆默认的端口号为3389

Symantec AV/Filter for MSE ,默认端口号为8081 Oracle 数据库默认的端口号为1521

ORACLE EMCTL默认的端口号为1158

Oracle XDB XML 数据库默认的端口号为8080

Oracle XDB FTP服务默认的端口号为2100

MS SQL*SERVER数据库server默认的端口号为1433/tcp 1433/udp

MS SQL*SERVER数据库monitor默认的端口号为1434/tcp 1434/udp

QQ默认的端口号为1080/u

Web网页性能管理详解

Standard

原文:http://www.ruanyifeng.com/blog/2015/09/web-page-performance-in-depth.html

你遇到过性能很差的网页吗?

这种网页响应非常缓慢,占用大量的 CPU 和内存,浏览起来常常有卡顿,页面的动画效果也不流畅。

你会有什么反应?我猜想,大多数用户会关闭这个页面,改为访问其他网站。作为一个开发者,肯定不愿意看到这种情况,怎样才能提高性能呢?

本文将详细介绍性能问题的出现原因,以及解决方法。

一、网页生成的过程

要理解网页性能为什么不好,就要了解网页是怎么生成的。

网页的生成过程,大致可以分成五步。

  • HTML 代码转化成 DOM
  • CSS 代码转化成 CSSOM(CSS Object Model)
  • 结合 DOM 和 CSSOM,生成一棵渲染树(包含每个节点的视觉信息)
  • 生成布局(layout),即将所有渲染树的所有节点进行平面合成
  • 将布局绘制(paint)在屏幕上

这五步里面,第一步到第三步都非常快,耗时的是第四步和第五步。

“生成布局”(flow)和”绘制”(paint)这两步,合称为”渲染”(render)。

二、重排和重绘

网页生成的时候,至少会渲染一次。用户访问的过程中,还会不断重新渲染。

以下三种情况,会导致网页重新渲染。

  • 修改 DOM
  • 修改样式表
  • 用户事件(比如鼠标悬停、页面滚动、输入框键入文字、改变窗口大小等等)

重新渲染,就需要重新生成布局和重新绘制。前者叫做”重排”(reflow),后者叫做”重绘”(repaint)。

需要注意的是,”重绘”不一定需要”重排”,比如改变某个网页元素的颜色,就只会触发”重绘”,不会触发”重排”,因为布局没有改变。但是,”重排”必然导致”重绘”,比如改变一个网页元素的位置,就会同时触发”重排”和”重绘”,因为布局改变了。

三、对于性能的影响

重排和重绘会不断触发,这是不可避免的。但是,它们非常耗费资源,是导致网页性能低下的根本原因。

提高网页性能,就是要降低”重排”和”重绘”的频率和成本,尽量少触发重新渲染。

前面提到,DOM 变动和样式变动,都会触发重新渲染。但是,浏览器已经很智能了,会尽量把所有的变动集中在一起,排成一个队列,然后一次性执行,尽量避免多次重新渲染。

div.style.color = 'blue';
div.style.marginTop = '30px';

上面代码中,div 元素有两个样式变动,但是浏览器只会触发一次重排和重绘。

如果写得不好,就会触发两次重排和重绘。

div.style.color = 'blue';
var margin = parseInt (div.style.marginTop);
div.style.marginTop = (margin + 10) + 'px';

上面代码对 div 元素设置背景色以后,第二行要求浏览器给出该元素的位置,所以浏览器不得不立即重排。

一般来说,样式的写操作之后,如果有下面这些属性的读操作,都会引发浏览器立即重新渲染。

  • offsetTop/offsetLeft/offsetWidth/offsetHeight
  • scrollTop/scrollLeft/scrollWidth/scrollHeight
  • clientTop/clientLeft/clientWidth/clientHeight
  • getComputedStyle ()

所以,从性能角度考虑,尽量不要把读操作和写操作,放在一个语句里面。

// bad
div.style.left = div.offsetLeft + 10 + "px";
div.style.top = div.offsetTop + 10 + "px";

// good
var left = div.offsetLeft;
var top  = div.offsetTop;
div.style.left = left + 10 + "px";
div.style.top = top + 10 + "px";

一般的规则是:

  1. 样式表越简单,重排和重绘就越快。
  2. 重排和重绘的 DOM 元素层级越高,成本就越高。
  3. table 元素的重排和重绘成本,要高于 div 元素

四、提高性能的九个技巧

有一些技巧,可以降低浏览器重新渲染的频率和成本。

第一条是上一节说到的,DOM 的多个读操作(或多个写操作),应该放在一起。不要两个读操作之间,加入一个写操作。

第二条,如果某个样式是通过重排得到的,那么最好缓存结果。避免下一次用到的时候,浏览器又要重排。

第三条,不要一条条地改变样式,而要通过改变 class,或者 csstext 属性,一次性地改变样式。

// bad
var left = 10;
var top = 10;
el.style.left = left + "px";
el.style.top  = top  + "px";

// good 
el.className += " theclassname";

// good
el.style.cssText += "; left: " + left + "px; top: " + top + "px;";

第四条,尽量使用离线 DOM,而不是真实的网面 DOM,来改变元素样式。比如,操作 Document Fragment 对象,完成后再把这个对象加入 DOM。再比如,使用 cloneNode () 方法,在克隆的节点上进行操作,然后再用克隆的节点替换原始节点。

第五条,先将元素设为 display: none (需要 1 次重排和重绘),然后对这个节点进行 100 次操作,最后再恢复显示(需要 1 次重排和重绘)。这样一来,你就用两次重新渲染,取代了可能高达 100 次的重新渲染。

第六条,position 属性为 absolute 或 fixed 的元素,重排的开销会比较小,因为不用考虑它对其他元素的影响。

第七条,只在必要的时候,才将元素的 display 属性为可见,因为不可见的元素不影响重排和重绘。另外,visibility : hidden 的元素只对重排有影响,不影响重绘。

第八条,使用虚拟 DOM 的脚本库,比如 React 等。

第九条,使用 window.requestAnimationFrame ()、window.requestIdleCallback () 这两个方法调节重新渲染(详见后文)。

五、刷新率

很多时候,密集的重新渲染是无法避免的,比如 scroll 事件的回调函数和网页动画。

网页动画的每一帧(frame)都是一次重新渲染。每秒低于 24 帧的动画,人眼就能感受到停顿。一般的网页动画,需要达到每秒 30 帧到 60 帧的频率,才能比较流畅。如果能达到每秒 70 帧甚至 80 帧,就会极其流畅。

大多数显示器的刷新频率是 60Hz,为了与系统一致,以及节省电力,浏览器会自动按照这个频率,刷新动画(如果可以做到的话)。

所以,如果网页动画能够做到每秒 60 帧,就会跟显示器同步刷新,达到最佳的视觉效果。这意味着,一秒之内进行 60 次重新渲染,每次重新渲染的时间不能超过 16.66 毫秒。

一秒之间能够完成多少次重新渲染,这个指标就被称为”刷新率”,英文为 FPS(frame per second)。60 次重新渲染,就是 60FPS。

六、开发者工具的 Timeline 面板

Chrome 浏览器开发者工具的 Timeline 面板,是查看”刷新率”的最佳工具。这一节介绍如何使用这个工具。

首先,按下 F12 打开”开发者工具”,切换到 Timeline 面板。

左上角有一个灰色的圆点,这是录制按钮,按下它会变成红色。然后,在网页上进行一些操作,再按一次按钮完成录制。

Timeline 面板提供两种查看方式:横条的是”事件模式”(Event Mode),显示重新渲染的各种事件所耗费的时间;竖条的是”帧模式”(Frame Mode),显示每一帧的时间耗费在哪里。

先看”事件模式”,你可以从中判断,性能问题发生在哪个环节,是 JavaScript 的执行,还是渲染?

不同的颜色表示不同的事件。

  • 蓝色:网络通信和 HTML 解析
  • 黄色:JavaScript 执行
  • 紫色:样式计算和布局,即重排
  • 绿色:重绘

哪种色块比较多,就说明性能耗费在那里。色块越长,问题越大。

帧模式(Frames mode)用来查看单个帧的耗时情况。每帧的色柱高度越低越好,表示耗时少。

你可以看到,帧模式有两条水平的参考线。

下面的一条是 60FPS,低于这条线,可以达到每秒 60 帧;上面的一条是 30FPS,低于这条线,可以达到每秒 30 次渲染。如果色柱都超过 30FPS,这个网页就有性能问题了。

此外,还可以查看某个区间的耗时情况。

或者点击每一帧,查看该帧的时间构成。

七、window.requestAnimationFrame ()

有一些 JavaScript 方法可以调节重新渲染,大幅提高网页性能。

其中最重要的,就是 window.requestAnimationFrame () 方法。它可以将某些代码放到下一次重新渲染时执行。

function doubleHeight (element) {
  var currentHeight = element.clientHeight;
  element.style.height = (currentHeight * 2) + 'px';
}
elements.forEach (doubleHeight);

上面的代码使用循环操作,将每个元素的高度都增加一倍。可是,每次循环都是,读操作后面跟着一个写操作。这会在短时间内触发大量的重新渲染,显然对于网页性能很不利。

我们可以使用window.requestAnimationFrame (),让读操作和写操作分离,把所有的写操作放到下一次重新渲染。

function doubleHeight (element) {
  var currentHeight = element.clientHeight;
  window.requestAnimationFrame (function () {
    element.style.height = (currentHeight * 2) + 'px';
  });
}
elements.forEach (doubleHeight);

页面滚动事件(scroll)的监听函数,就很适合用 window.requestAnimationFrame () ,推迟到下一次重新渲染。

$(window) .on ('scroll', function() {
   window.requestAnimationFrame (scrollHandler);
});

当然,最适用的场合还是网页动画。下面是一个旋转动画的例子,元素每一帧旋转 1 度。

var rAF = window.requestAnimationFrame;

var degrees = 0;
function update () {
  div.style.transform = "rotate (" + degrees + "deg)";
  console.log ('updated to degrees ' + degrees);
  degrees = degrees + 1;
  rAF (update);
}
rAF (update);

八、window.requestIdleCallback ()

还有一个函数 window.requestIdleCallback (),也可以用来调节重新渲染。

它指定只有当一帧的末尾有空闲时间,才会执行回调函数。

requestIdleCallback (fn);

上面代码中,只有当前帧的运行时间小于 16.66ms 时,函数 fn 才会执行。否则,就推迟到下一帧,如果下一帧也没有空闲时间,就推迟到下下一帧,以此类推。

它还可以接受第二个参数,表示指定的毫秒数。如果在指定的这段时间之内,每一帧都没有空闲时间,那么函数 fn 将会强制执行。

requestIdleCallback (fn, 5000);

上面的代码表示,函数 fn 最迟会在 5000 毫秒之后执行。

函数 fn 可以接受一个 deadline 对象作为参数。

requestIdleCallback (function someHeavyComputation (deadline) {
  while(deadline.timeRemaining () > 0) {
    doWorkIfNeeded ();
  }

  if(thereIsMoreWorkToDo) {
    requestIdleCallback (someHeavyComputation);
  }
});

上面代码中,回调函数 someHeavyComputation 的参数是一个 deadline 对象。

deadline 对象有一个方法和一个属性:timeRemaining () 和 didTimeout。

(1)timeRemaining () 方法

timeRemaining () 方法返回当前帧还剩余的毫秒。这个方法只能读,不能写,而且会动态更新。因此可以不断检查这个属性,如果还有剩余时间的话,就不断执行某些任务。一旦这个属性等于0,就把任务分配到下一轮requestIdleCallback

前面的示例代码之中,只要当前帧还有空闲时间,就不断调用 doWorkIfNeeded 方法。一旦没有空闲时间,但是任务还没有全执行,就分配到下一轮requestIdleCallback

(2)didTimeout 属性

deadline 对象的 didTimeout 属性会返回一个布尔值,表示指定的时间是否过期。这意味着,如果回调函数由于指定时间过期而触发,那么你会得到两个结果。

  • timeRemaining 方法返回0
  • didTimeout 属性等于 true

因此,如果回调函数执行了,无非是两种原因:当前帧有空闲时间,或者指定时间到了。

function myNonEssentialWork (deadline) {
  while ((deadline.timeRemaining () > 0 || deadline.didTimeout) && tasks.length > 0)
    doWorkIfNeeded ();

  if (tasks.length > 0)
    requestIdleCallback (myNonEssentialWork);
}

requestIdleCallback (myNonEssentialWork, 5000);

上面代码确保了,doWorkIfNeeded 函数一定会在将来某个比较空闲的时间(或者在指定时间过期后)得到反复执行。

requestIdleCallback 是一个很新的函数,刚刚引入标准,目前只有 Chrome 支持。

九、参考链接

使用脚本便捷地在 Ubuntu 中安装最新 Linux 内核

Standard

原文:http://ubuntuhandbook.org/index.php/2015/08/install-latest-kernel-script/作者: Ji m
译文:LCTT  https://linux.cn/article-6219-1.html译者: mr-ping

--------

想要安装最新的Linux内核吗?一个简单的脚本就可以在Ubuntu系统中方便的完成这项工作。

Michael Murphy 写了一个脚本用来将最新的候选版、标准版、或者低延时版的内核安装到 Ubuntu 系统中。这个脚本会在询问一些问题后从 Ubuntu 内核主线页面 下载安装最新的 Linux 内核包。

通过脚本来安装、升级Linux内核:

1、 点击这个 github 页面 右上角的 “Download Zip” 来下载该脚本(注:此脚本在墙外,我已经搬运回来了,请参见下面。)。

2、鼠标右键单击用户下载目录下的 Zip 文件,选择 “在此展开” 将其解压。

3、右键点击解压后的文件夹,选择 “在终端中打开” 到此文件夹下。

此时将会打开一个终端,并且自动导航到目标文件夹下。如果你找不到 “在终端中打开” 选项的话,在 Ubuntu 软件中心搜索安装 nautilus-open-terminal ,然后重新登录系统即可(也可以再终端中运行 nautilus -q 来取代重新登录系统的操作)。

备注:此脚本如下,你可以将它保存为一个可执行的 shell 脚本:

  1. #!/bin/bash
  2. cd /tmp
  3. if ! which lynx > /dev/null; then sudo apt-get install lynx -y; fi
  4. if [ "$(getconf LONG_BIT)" == "64" ]; then arch=amd64; else arch=i386; fi
  5. function download() {
  6. wget $(lynx -dump -listonly -dont-wrap-pre $kernelURL | grep "$1" | grep "$2" | grep "$arch" | cut -d ' ' -f 4)
  7. }
  8. # Kernel URL
  9. read -p "Do you want the latest RC?" rc
  10. case "$rc" in
  11. y* | Y*) kernelURL=$(lynx -dump -nonumbers http://kernel.ubuntu.com/~kernel-ppa/mainline/ | tail -1) ;;
  12. n* | N*) kernelURL=$(lynx -dump -nonumbers http://kernel.ubuntu.com/~kernel-ppa/mainline/ | grep -v rc | tail -1) ;;
  13. *) exit ;;
  14. esac
  15. read -p "Do you want the lowlatency kernel?" lowlatency
  16. case "$lowlatency" in
  17. y* | Y*) lowlatency=1 ;;
  18. n* | n*) lowlatency=0 ;;
  19. *) exit ;;
  20. esac
  21. # Download Kernel
  22. if [ "$lowlatency" == "0" ]; then
  23. echo "Downloading the latest generic kernel."
  24. download generic header
  25. download generic image
  26. elif [ "$lowlatency" == "1" ]; then
  27. echo "Downloading the latest lowlatency kernel."
  28. download lowlatency header
  29. download lowlatency image
  30. fi
  31. # Shared Kernel Header
  32. wget $(lynx -dump -listonly -dont-wrap-pre $kernelURL | grep all | cut -d ' ' -f 4)
  33. # Install Kernel
  34. echo "Installing Linux Kernel"
  35. sudo dpkg -i linux*.deb
  36. echo "Done. You may now reboot."

4. 当进入终端后,运行以下命令来赋予脚本执行本次操作的权限。

  1. chmod +x *

最后,每当你想要安装或升级 Ubuntu 的 linux 内核时都可以运行此脚本。

  1. ./*

这里之所以使用 * 替代脚本名称是因为文件夹中只有它一个文件。

如果脚本运行成功,重启电脑即可。

恢复并且卸载新版内核

如果因为某些原因要恢复并且移除新版内核的话,请重启电脑,在 Grub 启动器的 高级选项 菜单下选择旧版内核来启动系统。

当系统启动后,参照下边章节继续执行。

如何移除旧的(或新的)内核:

  1. 从 Ubuntu 软件中心安装 Synaptic Package Manager。
  2. 打开 Synaptic Package Manager 然后如下操作:
  • 点击 Reload 按钮,让想要被删除的新内核显示出来.
  • 在左侧面板中选择 Status -> Installed ,让查找列表更清晰一些。
  • 在 Quick filter 输入框中输入 linux-image- 用于查询。
  • 选择一个内核镜像 “linux-image-x.xx.xx-generic” 然后将其标记为removal(或者Complete Removal)
  • 最后,应用变更

重复以上操作直到移除所有你不需要的内核。注意,不要随意移除此刻正在运行的内核,你可以通过 uname -r 命令来查看运行的内核。

对于 Ubuntu 服务器来说,你可以一步步运行下面的命令:

  1. uname -r
  2. dpkg -l | grep linux-image-
  3. sudo apt-get autoremove KERNEL_IMAGE_NAME


via: http://ubuntuhandbook.org/index.php/2015/08/install-latest-kernel-script/

11 Python Libraries You Might Not Know

Standard
原文:http://blog.yhathq.com/posts/11-python-libraries-you-might-not-know.html

There are tons of Python packages out there. So many that no one man or woman could possibly catch them all. PyPialone has over 47,000 packages listed!

Recently, with so many data scientists making the switch to Python, I couldn’t help but think that while they’re getting some of the great benefits of pandasscikit-learn, and numpy, they’re missing out on some older yet equally helpful Python libraries.

In this post, I’m going to highlight some lesser-known libraries. Even you experienced Pythonistas should take a look, there might be one or two in there you’ve never seen!

1) delorean

Delorean is a really cool date/time library. Apart from having a sweet name, it’s one of the more natural feeling date/time munging libraries I’ve used in Python. It’s sort of like moment in javascript, except I laugh every time I import it. The docs are also good and in addition to being technically helpful, they also make countless Back to the Futurereferences.

from delorean import Delorean
EST = "US/Eastern"
d = Delorean(timezone=EST)

2) prettytable

There’s a chance you haven’t heard of prettytable because it’s listed on GoogleCode, which is basically the coding equivalent of Siberia.

Despite being exiled to a cold, snowy and desolate place, prettytable is great for constructing output that looks good in the terminal or in the browser. So if you’re working on a new plug-in for the IPython Notebook, check out prettytable for your HTML __repr__.

from prettytable import PrettyTable
table = PrettyTable(["animal", "ferocity"])
table.add_row(["wolverine", 100])
table.add_row(["grizzly", 87])
table.add_row(["Rabbit of Caerbannog", 110])
table.add_row(["cat", -1])
table.add_row(["platypus", 23])
table.add_row(["dolphin", 63])
table.add_row(["albatross", 44])
table.sort_key("ferocity")
table.reversesort = True
+----------------------+----------+
|        animal        | ferocity |
+----------------------+----------+
| Rabbit of Caerbannog |   110    |
|      wolverine       |   100    |
|       grizzly        |    87    |
|       dolphin        |    63    |
|      albatross       |    44    |
|       platypus       |    23    |
|         cat          |    -1    |
+----------------------+----------+

3) snowballstemmer

Ok so the first time I installed snowballstemmer, it was because I thought the name was cool. But it’s actually a pretty slick little library. snowballstemmer will stem words in 15 different languages and also comes with a porter stemmer to boot.

from snowballstemmer import EnglishStemmer, SpanishStemmer
EnglishStemmer().stemWord("Gregory")
# Gregori
SpanishStemmer().stemWord("amarillo")
# amarill

4) wget

Remember every time you wrote that web crawler for some specific purpose? Turns out somebody built it…and it’s called wget. Recursively download a website? Grab every image from a page? Sidestep cookie traces? Done, done, and done.

Movie Mark Zuckerberg even says it himself

First up is Kirkland, they keep everything open and allow indexes on their apache configuration, so a little wget magic is enough to download the entire Kirkland facebook. Kid stuff!

The Python version comes with just about every feature you could ask for and is easy to use.

import wget
wget.download("http://www.cnn.com/")
# 100% [............................................................................] 280385 / 280385

Note that another option for linux and osx users would be to use do: from sh import wget. However the Python wget module does have a better argument handline.

5) PyMC

I’m not sure how PyMC gets left out of the mix so often. scikit-learn seems to be everyone’s darling (as it should, it’s fantastic), but in my opinion, not enough love is given to PyMC.

from pymc.examples import disaster_model
from pymc import MCMC
M = MCMC(disaster_model)
M.sample(iter=10000, burn=1000, thin=10)
[-----------------100%-----------------] 10000 of 10000 complete in 1.4 sec

If you don’t already know it, PyMC is a library for doing Bayesian analysis. It’s featured heavily in Cam Davidson-Pilon’s Bayesian Methods for Hackers and has made cameos on a lot of popular data science/python blogs, but has never received the cult following akin to scikit-learn.

6) sh

I can’t risk you leaving this page and not knowing about shsh lets you import shell commands into Python as functions. It’s super useful for doing things that are easy in bash but you can’t remember how to do in Python (i.e. recursively searching for files).

from sh import find
find("/tmp")
/tmp/foo
/tmp/foo/file1.json
/tmp/foo/file2.json
/tmp/foo/file3.json
/tmp/foo/bar/file3.json

7) fuzzywuzzy

Ranking in the top 10 of simplest libraries I’ve ever used (if you have 2-3 minutes, you can read through the source), fuzzywuzzy is a fuzzy string matching library built by the fine people at SeatGeek.

fuzzywuzzy implements things like string comparison ratios, token ratios, and plenty of other matching metrics. It’s great for creating feature vectors or matching up records in different databases.

from fuzzywuzzy import fuzz
fuzz.ratio("Hit me with your best shot", "Hit me with your pet shark")
# 85

8) progressbar

You know those scripts you have where you do a print "still going..." in that giant mess of a for loop you call your __main__? Yeah well instead of doing that, why don’t you step up your game and start using progressbar?

progressbar does pretty much exactly what you think it does…makes progress bars. And while this isn’t exactly a data science specific activity, it does put a nice touch on those extra long running scripts.

Alas, as another GoogleCode outcast, it’s not getting much love (the docs have 2 spaces for indents…2!!!). Do what’s right and give it a good ole pip install.

from progressbar import ProgressBar
import time
pbar = ProgressBar(maxval=10)
for i in range(1, 11):
    pbar.update(i)
    time.sleep(1)
pbar.finish()
# 60% |########################################################                                      |

9) colorama

So while you’re making your logs have nice progress bars, why not also make them colorful! It can actually be helpful for reminding yourself when things are going horribly wrong.

colorama is super easy to use. Just pop it into your scripts and add any text you want to print to a color:

10) uuid

I’m of the mind that there are really only a few tools one needs in programming: hashing, key/value stores, and universally unique ids. uuid is the built in Python UUID library. It implements versions 1, 3, 4, and 5 of the UUID standards and is really handy for doing things like…err…ensuring uniqueness.

That might sound silly, but how many times have you had records for a marketing campaign, or an e-mail drop and you want to make sure everyone gets their own promo code or id number?

And if you’re worried about running out of ids, then fear not! The number of UUIDs you can generate is comparable to the number of atoms in the universe.

import uuid
print uuid.uuid4()
# e7bafa3d-274e-4b0a-b9cc-d898957b4b61

Well if you were a uuid you probably would be.

11) bashplotlib

Shameless self-promotion here, bashplotlib is one of my creations. It lets you plot histograms and scatterplots using stdin. So while you might not find it replacing ggplot or matplotlib as your everyday plotting library, the novelty value is quite high. At the very least, use it as a way to spruce up your logs a bit.

$ pip install bashplotlib
$ scatter --file data/texas.txt --pch x

在SQL Server中使用存储过程发送电​​子邮件

Standard

 

简介

这是一个很有意思的讨论话题。现在我们习惯把邮件集成到每一个应用程序中。我们使用SMTP设置在.NET的Web.Config中整合电子邮件,使用Send方法来发送邮件。最近,我遇到了一个有趣的挑战,即如何从SQL Server发送电子邮件。假设我们不得不跟踪成功的有计划的SQL查询执行。我们不能为了检查它是否成功而每次去修改table。如果我们能得到某种形式的通知,来帮助我们知道执行的状态,那就好了。是的,利用预定义的几个存储过程从SQL Server发送邮件,这是可能的。

一起来学学吧。

开始

我们的目的是使用预定义的存储过程来发送邮件。首先,我们需要建立一个账户——这是服务器发送邮件所需的认证信息。一般邮件是通过SMTP(Simple Mail Transfer Protocol)发送的。这些设置将取决于服务器应用程序的需求。请记住配置必须是有效的。

创建一个数据库帐号:

EXEC msdb.dbo.sysmail_add_account_sp
    @account_name = 'SendEmailSqlDemoAccount'
  , @description = 'Sending SMTP mails to users'
  , @email_address = 'suraj.0241@gmail.com'
  , @display_name = 'Suraj Sahoo'
  , @replyto_address = 'suraj.0241@gmail.com'
  , @mailserver_name = 'smtp.gmail.com'
  , @port = 587
  , @username = 'XXXXXX'
  , @password = 'XXXXXX'
Go

请使用正确的认证信息和服务器设置,以便成功地发送邮件,否则邮件就会发送失败,被阻塞在发送队列中。

下一步是创建将用于设置数据库邮件的profile(配置文件)。请看下面:

EXEC msdb.dbo.sysmail_add_profile_sp
    @profile_name = 'SendEmailSqlDemoProfile'
  , @description = 'Mail Profile description'
Go

Profile用于设置邮件配置和邮件发送。

下一步骤是将帐户映射到profile。这是让profile知道,它需要用哪个帐户的认证信息来确保发送成功。

-- 添加帐户到配置文件
EXEC msdb.dbo.sysmail_add_profileaccount_sp
    @profile_name = 'SendEmailSqlDemo'
  , @account_name = 'SendEmailSql'
  , @sequence_number = 1
GO

这样,我们就能成功发送电子邮件了。邮件发送查找片段如下所示:

EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'SendEmailSqlDemo2'
  , @recipients = 'suraj.0241@gmail.com'
  , @subject = 'Automated Test Results (Successful)'
  , @body = 'The stored procedure finished successfully.'
  , @importance ='HIGH' 
GO

有时候使用存储过程,并不能得到执行。因此,可以尝试catch块,以及Begin和End处理在一些存储过程中是强制性的。

举个例子,假设我们有一个使用存储过程的SELECT INSERT查询,那么会发生的事情是,我们需要从4个table中选择并插入,这4个table即Users | UserLogin | UserEmployment | Departments

对于每一个新屏幕的创建,我们要操纵和选择用户,根据外键,再次插入到具有不同外键的相同table中,代表特定的屏幕。查询如下:

BEGIN TRY
  BEGIN TRAN
 INSERT INTO
   dbo.[User]
 SELECT
    us.UserName,
	us.UserAddress,
	us.UserPhone,
    @fkScreenID
 FROM
   dbo.[User] as us
 WHERE
   UserID= @userID
 COMMIT TRAN
    END TRY
   BEGIN CATCH
  ROLLBACK TRAN
  END
  END CATCH  //其他table的代码与此类似。添加Try Catch到整个SP执行块(Executing Block)会更好

这里的事件要是失败的话,会转移到Catch块,在Catch块中我们可以让电子邮件一直发送程序以获取相关成功或失败的通知和原因,以及告知哪里失败。这对开发人员非常有帮助。

故障排除邮件

还有一些存储过程能让我们知道邮件是成功的,失败的还是尚在排队中。这真是一个超棒的功能。

要检查邮件是否已经成功发送和发布,我们可以运行以下查询:

select * from msdb.dbo.sysmail_sentitems

它返回的一些列

Email1

在第二个图片中你可以看到,sent_status属性为sent,这表明邮件已成功发送。

为检查可能无法发送的未发送邮件,我们运行以下查询:

select * from msdb.dbo.sysmail_unsentitems

为检查甚至不能重新从队列中发送的失败邮件,我们运行下面的查询: –

select * from msdb.dbo.sysmail_faileditems

有关故障及原因的详细信息,故障查找查询将如下所示:

SELECT items.subject,
    items.last_mod_date
    ,l.description FROM msdb.dbo.sysmail_faileditems as items
INNER JOIN msdb.dbo.sysmail_event_log AS l
    ON items.mailitem_id = l.mailitem_id
GO

结果类似于:

Email3

上面的错误描述为“No Such Host”错误。该错误通常发生在有一些SMTP服务器连接设置错了的时候。我们需要靠自己排除故障——重新检查设置认证信息,然后再试试。如果依然不能工作,那么就需要检查DNS服务器设置,再次重试配置。

结论

这一次我们讨论了如何使用存储过程从我们自己的SQL发送邮件的过程,并证明是可行的。故障排除错误和设置也都很简单。

异常和错误是开发中不可避免的一部分,但处理这些问题却是开发人员的使命挑战。

译文链接:http://www.codeceo.com/article/sql-server-send-mail.html
英文原文:Sending Email Using Stored Procedures in Sql Server
翻译作者:码农网 – 小峰