1.tortoisehg è¦å
å®è£
mercurialå
2.Hotspot调试环境搭建-基于Ubuntu16.04.7-OpenJDK8u-Clion
3.Ubuntu下编译OpenJDK9
4.git是如何感知文件修改的?
5.写Java这么久,JDK源码编译过没?编译JDK源码踩坑纪实
6.常见的Web源码泄漏及其利用
tortoisehg è¦å å®è£ mercurialå
çæ¬æ§å¶ç³»ç»ï¼Version Control System / Revision Control Systemï¼æè å«åæºç æ§å¶ç³»ç»Source Control Systemï¼ä»¥ä¸ç®ç§°VCSï¼ï¼æ¯è½¯ä»¶å¼å人åæ常ç¨çå·¥å ·ä¹ä¸ï¼ç±äºVCSæ¯å¦æ¤å¸¸ç¨ï¼æ以è±ä¸äºæ¶é´å»äºè§£å®æ¯æå¿ è¦çã
åå¸å¼çæ¬æ§å¶ç³»ç»ï¼Distributed Version Control System,DVCSï¼ï¼æ¯ç¸å¯¹äºéä¸å¼çæ¬æ§å¶ç³»ç»ï¼Centralized Version Control Systemï¼CVCSï¼èè¨çï¼æ¯å¦ï¼ä½¿ç¨äººæ°æå¤çSVNãVSSå°±æ¯å ¸åçCVCSãå¦æä½ æ¾ç»ç¨è¿SVNæVSSï¼å°±å¯ä»¥å¾å®¹æç解ä»ä¹å«åâCentralizedâ ãCVCSï¼æ¯æåªæä¸ä»½æ°æ®ä»åºåæ¾å¨ä¸å°æå¡å¨ä¸ï¼ææ客æ·ç«¯é½è¿æ¥å°è¿å°æå¡å¨ä»¥è¯»åæ°æ®ä»åºçå·¥ä½æ¨¡åãèDVCS模ååä¸ç¶ï¼æ¯ä¸å°ç»ç«¯é½æä¸ä»½å®æ´çæ°æ®ä»åºï¼ææç»ç«¯ä¹é´é½æ¯å¹³ççï¼å¹¶ä¸åå¨å¯ä¸çä¸å°âæå¡å¨âãææçç»ç«¯ä¹é´ï¼å¯ä»¥èªç±å°äº¤æ¢æ°æ®ã
DVCSå¯ä»¥å¾å®¹æå°æ¨¡æCVCSçå·¥ä½æ¹å¼ï¼åªè¦æå®ä»»æä¸å°ç»ç«¯ä½ä¸ºæå¡å¨ï¼è§å®ææ人é½å°æ´æ¹æ¨éå°è¿å°æå¡å¨ï¼å¹¶ä¸ææ人ä¹é½ä»è¿å°æå¡å¨è·åæ´æ°å³å¯ãèä¸CVCSç¸æ¯ï¼DVCSåæ以ä¸ä¼ç¹ï¼
a) æ´å å®å ¨ç代ç 管çã
å¨SVNä¸ï¼æ¯æ¬¡æ交é½æå³çæ£å¼ç代ç 被æ´æ¹ï¼å«äººå¯ä»¥ç«å³çå°æ¤æ¬¡æ交ï¼å¹¶ä¸å¯è½ç´æ¥å½±åå°æ£å¨è¿è¡çç³»ç»ï¼å¯è½ä¼æ人ç«å³å°æ¤æ´æ°æ·è´å°æå¡å¨ï¼ï¼è¿å¯¼è´ä¸ç³»åçé®é¢ãé¦å ä¸ä¸ªé®é¢æ¯ï¼æ人å¯è½ä¼æ æä¸æ交é误çãä¸å¯é ç代ç ãå ¶æ¬¡ï¼è¿å¯¼è´ç¨åºåä¸æ¢è½»æç¾å ¥æ´æ¹ï¼å½ç¨åºè¿è¡ä¸é¡¹èæ¶å¾ä¹ ï¼å¤§éä¿®æ¹çå·¥ä½æ¶ï¼ææçä¿®æ¹é½æ¯æ²¡æç»è¿VCSä¿æ¤çï¼è¿æ¯é常å±é©çï¼ä¹ä¸ç¬¦å使ç¨VCSçåè¡·ã
èå¨DVCSä¸åä¸åï¼å 为é¦å æ交å°èªå·±æ¬å°ä»åºä¸ï¼æ以ç¨åºåå¯ä»¥å°½éå°åæ°æ®ä»åºæ交æ´æ¹ï¼èä¸ç¨æ å¿è¿ä¼å½±åå°å ¶ä»äººæç³»ç»ï¼è¿å¯ä»¥å°ç¨åºåå¨å¼åè¿ç¨ä¸æ产ççå个çæ¬ä»£ç å®åå°ä¿æ¤èµ·æ¥ï¼å¨å¨æè¾é¿çå¼åä¸ï¼è¿ä¸ç¹ç¹å°¤å ¶æ¾å¾éè¦ã
è½ç¶å¨SVNä¸æåæ¯åè½å¯ä»¥è¾¾å°ç±»ä¼¼çç®çï¼ä½æ¯åæ¯å并æä½èµ·æ¥è¾ä¸ºç¹çï¼èä¸é常容æåçå²çªï¼ç»æå°±æ¯å¾å¤åºå½ä½¿ç¨åæ¯çåºåå ¶å®å¹¶æ²¡æ使ç¨åæ¯ã
b) æè±ç½ç»çæç¼ï¼éæ¶è¿è¡å®æ´çå·¥ä½ã
å¨SVNä¸ï¼ç±äºä¸å¤®ä»åºåªæä¸ä¸ªï¼æ以任ä½éè¦ä¸ä»åºæ²éçå¨ä½ï¼ä¾å¦æ¥è¯¢åå²çæ¬ï¼æ交æ´æ¹ççï¼å¿ é¡»é¦å èç½ï¼èå¨æäºæ¶åï¼è¿ä¸æç¼å°±æ¾å¾ä¸æ¹ä¾¿ï¼èå¨DVCSä¸ï¼åéæ¶å¯ä»¥ä¸æ°æ®ä»åºè¿è¡æ ç¼çæ²éï¼ç¨åºåå¯ä»¥åå ¶ä¸ä¸åæ交æ°çæ´æ¹ï¼ææ¥è¯¢æ个æ件çåå²çæ¬ï¼é½å¯ä»¥å¨å®å ¨æç½çæ åµä¸è¿è¡ã
c) æ´å æºè½ç代ç å并ã
å½ä¸¤ä¸ªäººå¯¹åä¸ä»½ä»£ç è¿è¡å·¥ä½æ¶ï¼ä¸¤ä¸ªäººçä¿®æ¹å¯è½ä¼äº§çå²çªãç¶èï¼SVNå½æ°çæ´æ¹è¢«æ交æ¶ï¼SVNåªè½æ¥çæç»ççæ¬ï¼è¿å¯¼è´SVN对æäºå·®å¼å¾å¤§çæ件æ æ³èªå¨å并ï¼è人工å并æ¯å¾è´¹æ¶è´¹åçãå¨Mercurialä¸ï¼å½ä¸¤ä¸ªä¸åççæ¬éè¦è¿è¡å并æ¶ï¼DVCSå¯ä»¥ä½¿ç¨è¿ä¸ªæ件ææçä¿®æ¹åå²æ¥ä¸æ¥ä¸æ¥å°è¿åæ´ä¸ªä¿®æ¹çè¿ç¨ï¼è¿æ ·ä¸æ¥ï¼Mercurialçå并è½åå°±è¿è¿å°è¶ è¿äºSVNï¼æ以å¨Mercurialä¸ï¼æå°ä¼åºç°äººå·¥å并çé®é¢ã
d) æ´å¿«çååºé度. ç±äºåç§æ¥å¸¸æä½é½æ¯å¨å¼å人åçæ¬æºè¿è¡ç, æ以ä¸ä»»ä½çCVCSç¸æ¯, DVCSçæä½ååºé度é½å°å¿«å¾å¤å.
å¦å¤ï¼å¯¹äºä¸ªäººé¡¹ç®æ¥è¯´ï¼å°¤å ¶éå使ç¨DVCSï¼å 为DVCS天ç¶å°æ é¿ç®¡çæ¬å°çæ°æ®ä»åºï¼ä¸åCVCSé£æ ·å¿ é¡»æ¶è®¾ä¸ä¸ªæå¡ç«¯ï¼ä¸ä¸ªå®¢æ·ç«¯ã
å æ¤æ»çæ¥è¯´ï¼åå¸å¼ç»æçMercurialå ·æSVNçææä¼ç¹ï¼èåæ¯SVNæ´å åçææã
ç®åçDVCSæ主è¦æMercurialåGit两款软件ï¼å ¶ä¸Gitçåä½è æ¯Linus大ç¥ï¼ç¨Cè¯è¨ç¼åï¼è¿è¡æ§è½ä¼äºMercurialï¼Mercurialæ¯ç¨Pythonåçï¼å¤©ç注å®æ§è½ä¸å¯è½æ¯Gitæ´å¿«ï¼ï¼ä½æ¯Linus以åæåçå¼åå¢é并ä¸æç®å¼åWindowsçæ¬çGitï¼æ以Gitæ¬èº«å¹¶ä¸æ¯æWindowsï¼åæ¥æäºä¸ä¸ªmsysgit项ç®å°Git移æ¤å°äºwindowså¹³å°ï¼å¹¶ä¸æäºå¼åäºä¸ä¸ªTortoiseGit客æ·ç«¯ï¼ä½¿å¾Gitå¨windowsä¸ä¹åå¾å®¹æ使ç¨äºï¼ä½æ¯å¨æ使ç¨çè¿ç¨ä¸ï¼è¿ç»åçå¤æ¬¡ä¸¥éçæ éï¼ææçå ¶å¨windowsä¸è¿ä¸å¤æçï¼å æ¤éç¨ä¸æä½ç³»ç»å ¼å®¹å®ç¾çMercurialã Mercurialè¿ä¸ªåè¯æ¯æ°´é¶çææï¼æ以Mercurialçå½ä»¤åéç¨äºæ°´é¶çåå¦å ç´ ç¬¦å·hgï¼è¿ä¹æ¯ä¸ºä»ä¹å®çå¾å½¢ç»ç«¯å«åTortoiseHgï¼èä¸æ¯TortoiseMercurialä¹ç±»çã
è¿éï¼/read/ï¼æä¸ä»½å®æ´çMercurialææ¡£ï¼è¯¦ç»æè¿°äºMercurialçåç§ç»èï¼ä¸è¿é´äºå ¶æ¯è±æçï¼æç®ååç½åä¸ä¸Mercurialçåºæ¬ç¨æ³ã
é¦å ï¼ä¸è½½å¹¶å®è£ ä¸ä¸ªTortoiseHg with Mercurial(mand hereï¼ è¿ä¼æå¼ä¸ä¸ªcmdå½ä»¤çªï¼è·¯å¾å°±æ¯å½åæ件夹ï¼ç´æ¥è¾å ¥å½ä»¤hg initï¼ å³å¯å®ææ°æ®ä»åºçå建ã
ï¼ä»¥åæä¹ä¸å欢ç¨å½ä»¤ï¼ä½æ¯ä½¿ç¨Mercurial以åï¼æåç°å ¶å®ç¨å½ä»¤å¹¶ä¸éº»ç¦ï¼å¾å¤æ¶åæ¯TortoiseHgæ¥å¾è¿è¦èæä¸äºï¼
image
å建æ°æ®ä»åºä»¥åï¼å次å³å»ï¼ ä¼åç°é¦å å¨ä¸çº§å³é®èåä¸å¢å äºHg Commité项ï¼èå项ä¸ååºç°äºä¸å¤§æå¯ç¨å½ä»¤ãè¿äºææ¶ä¸ç¨å»çå®ã
é便æ°å»ºä¸ä¸ªææ¬æ件ï¼ç¹å»hg commitï¼è¾å ¥ä¸ç¹æ³¨éï¼Mercurial强å¶è¦æ±æ¯æ¬¡commitå¿ é¡»å注éï¼ï¼ç¹å»æ交å³å¯ã
image
注æ左侧çæ件åè¡¨ï¼ å¿ é¡»å æä¸å¾ãå 为æ¯åMercurialæ°å¢æ件ï¼æä»¥å¿ é¡»å æ§è¡addå½ä»¤ï¼ ç¶åæè½commitï¼ä½ç°å¨è¿ä¸ªå¾å½¢çé¢ä¸ï¼å°±æ¯å å¾ä¸å·¦è¾¹ï¼åç¹commitã
å¦æ使ç¨å½ä»¤ï¼ååå«è¾å ¥ï¼
hg add
hg commit âm âsome comment hereâ
第ä¸è¡hg addä¼å°æææ°å¢çæ件æ 记为éè¦Mercurialè¿è¡è¿½è¸ªç®¡çï¼ç¬¬äºå¥åæ¯åæ°æ®ä»åºæ交修æ¹ã
è¿ééè¦æ³¨æçæ¯Updateå½ä»¤ãMercurialçUpdateä¸SVNå¨å®é ææä¸å·®å¼å·¨å¤§ãUpdateæ¯ç¨äºä½¿å·¥ä½ç®å½ä¸æ¬å°æ°æ®ä»åºä¹é´ä¿æä¸è´ãæ以ï¼å¦æä½ æ¯å人项ç®ï¼æ»æ¯å¨å·¥ä½ç®å½æ交修æ¹çè¯ï¼å®ä»¬è¯å®æ¯å®å ¨ä¸è´çï¼Updateå½ä»¤å°æ°¸è¿ä¸å¿ æ§è¡ãï¼è¿å¤§çº¦ä¹æ¯ä¸ºä»ä¹TortoiseHgæUpdateå½ä»¤ä½ä¸ºäºçº§å½ä»¤èä¸åCommité£æ ·æ¯ä¸çº§èåå½ä»¤ï¼ é£ä¹ä»ä¹æ¶åéè¦Updateï¼å çä¸ä¸pushåpullã
åå®æ们åæå建çä»åºä½äºD:\repo1ï¼ ç°å¨æ§è¡å½ä»¤hg clone d:\repo1 d:\repo2ï¼ æè å¨tortoisehgä¸ç¹å»cloneæ§è¡ç¸åºæä½ï¼å¾å½¢çé¢ä¸åä¸ä¸æªå¾ï¼å¾ç®åçæä½ï¼ï¼è¿æ ·å°±å建äºä¸ä¸ªæ°çä»åºrepo2ï¼ å®ä¸repo1æ¯å®å ¨ç¸åçãç°å¨årepo1æ交å¦å¤ä¸äºä¿®æ¹ï¼æ¾èæè§çï¼repo2ä»ç¶åçå¨cloneæ¶çç¶æï¼repo1çææ°ä¿®æ¹repo2并ä¸ç¥éã å¦æç°å¨å¸ærepo2ä¹è½æ´æ°å°repo1çææ°ç¶æï¼ åæ两ç§æä½æ¹å¼ï¼
1. Pushã Push顾åæä¹ï¼æ¯æ¨éçææï¼å°±æ¯ä»repo1ä¸æ¨éæ°æ®å°repo2ï¼ repo2 ä¸éè¦åä»»ä½å¨ä½ãå¨repo1ç®å½ä¸æ§è¡å½ä»¤hg push d:\repo2ã æè ç¹å»tortoisehgçSyncronizeï¼ å¨åæ¥çªå£ä¸ç¹å»pushå½ä»¤ï¼
image
ï¼è¿ç§æä½æå®å¨è§å¾è¿æ¯å½ä»¤æ¹ä¾¿ä¸äºãããï¼
å ¶ä¸ï¼pushå½ä»¤åé¢çè·¯å¾å¹¶ä¸æ¯å¿ é¡»çãæ¯ä¸ªæ°æ®ä»åºå¯ä»¥æä¸ä¸ªé»è®¤çè¿ç¨ä»åºï¼å¦æå¨repo1ä¸è®¾ç½®äºé»è®¤è¿ç¨ä»åºä¸ºrepo2ï¼ ååªéè¦æ§è¡hg push å°±å¯ä»¥äºãå½æ§è¡cloneå½ä»¤æ¶ï¼ä¼èªå¨ææ¥æºä»åºè®¾ä¸ºé»è®¤è¿ç¨ä»åºï¼æ以å¨repo2ä¸å¯ä»¥ç´æ¥æ§è¡hg pushæhg pullï¼ ä¼èªå¨å°repo1ä¸åæ¥æ°æ®ã
å 为repo1并ä¸ç¥érepo2çåå¨ï¼ æ以å¦æéè¦æå¨è®¾ç½®é»è®¤è¿ç¨ä»åºï¼å¦ä¸è¿æ ·æä½ï¼
ç¹å»å³é®â>TortoiseHgâ>Repository settings,
image
ç¹å»Edit file, å¦å¾æ示, ä¿®æ¹default为éè¦æå®çè·¯å¾å³å¯.
ä¿®æ¹å®æ以å,å³å¯ç´æ¥æ§è¡hg push èä¸ç¨åæhg push d:\repo2äº.
2. Pull. Pullæ¯æåçææ, å³è¢«æ´æ°çä»åºä¸»å¨ä»è¿ç¨ä»åºæåæ°æ®. å¨æ¬ä¾ä¸, å°repo2çç®å½ä¸æ§è¡hg pullå³å¯. å 为repo2æ¯ä»repo1 cloneæ¥ç, æ以repo2å·²ç»èªå¨ærepo1设置é»è®¤è¿ç¨ä»åº, ä¸éè¦ååhg pull d:\repo1äº.
æ以,æ 论æ¯ä»repo1端push, è¿æ¯ä»repo2端pull, é½å¯ä»¥è¾¾å°æ´æ°repo2æ°æ®ä»åºçç®ç.
ç¶èéè¦æ³¨æçæ¯, æ 论æ¯pushè¿æ¯pull, é½åªæ´æ°æ°æ®ä»åº, èä¸æ´æ°å·¥ä½ç®å½.
è®°ä½è¿ä¸ç¹é常éè¦, å¦åå¯è½ç»å¸¸ä¼è¿·æ为ä»ä¹ä¸é¢æä¸ç¬¦. pushæpullä¹å, repo2çæ°æ®ä»åºä¸å·¥ä½ç®å½å·²ç»ä¸ç¬¦, è¿æ¶å°±éè¦å¨repo2ç®å½ä¸æ§è¡hg updateå½ä»¤, å³å¯å°å·¥ä½ç®å½æ´æ°å°ä¸æ°æ®ä»åºä¸è´.
å½åSVNé£æ ·ä½¿ç¨è¿ç¨æå¡å¨ä½ä¸ºä¸»æºæ¶, æ¯æ¬¡Pullåå¯ä»¥è¯å®æ¯è¦æ§è¡updateç, è¿æ ·ä¸¤æ¬¡æä½æ¾ç¶å¸¦æ¥ä¸ä¾¿, å¨TortoiseHgä¸, å·²ç»éæäºè¿æ ·çå½ä»¤, é¦å å³é®â>TortoiseHgâ>Syncronize, æå¼åæ¥çªå£,
image
ç¹å»Post Pull, å¨å¼¹åºçå°çªå£ä¸éæ©Update, è¿æ ·æ¯æ¬¡pullä¹åå°±ä¼ç«å³æ§è¡updateäº.
æè å¨é¡¹ç®çæ ¹ç®å½ä¸åä¸ä¸ªæ¹å¤çæ件, å æ¬ä»¥ä¸ä¸¤è¡å³å¯:
hg pull
hg update
以åæ¯æ¬¡éè¦è·åæ´æ°æ¶, åå»ä¸ä¸è¿ä¸ªæ¹å¤çå³å¯, æè§å¾è¿æ¯å½ä»¤æ¹ä¾¿â¦â¦
以ä¸ç®åç½åäºMercurialçåºæ¬ç¨æ³, 对äºæ¥è¯¢åå²ä¿®æ¹çæä½, TortoiseHgçèåå·²ç»é常ç®å, ä¸SVNä¹æ²¡æä»ä¹å·®å«, èªè¡ç¹å»çä¸ä¸å³å¯.
å ³äºå¨ä¸¤å°çµèä¹é´ä¼ éæ°æ®ï¼Mercurialèªå¸¦äºä¸ä¸ªç®åçServeå½ä»¤ï¼ä¾å¦å¨d:\repo1ç®å½ä¸æ§è¡å½ä»¤hg serverï¼ ä¼ç«å³å¯å¨ä¸ä¸ªé»è®¤å¨ç«¯å£çå¬çæå¡è¿ç¨ï¼è¿ä¸ªå½ä»¤ä¼è¿åä¸ä¸ªurlå°åï¼å¦ä¸å°çµèå¯ä»¥ç¨hg clone <url> local-path çå½¢å¼å¤å¶æ¬æºçrepo1ä»åºï¼ä½æ¯è¿ä¸ªserveå½ä»¤æ¾ç¶åªæ¯ä¸ä¸ªé常ç®åç临æ¶éå¾ï¼å¦æè¦é ç½®ä¸å°ä½ä¸ºæå¡å¨çä¸å¤®ä»åºï¼å½ç¶å°±ä¸è½ä» ä» ä½¿ç¨serveå½ä»¤äºï¼èæ¯åºè¯¥ä½¿ç¨IISæå ¶å®web serverï¼ä¸ä¸ç¯å°±ä»ç»å¦ä½å¨IISä¸æ¶è®¾ä¸ä¸ªMercurialçWeb Server,请åé åå¸å¼çæ¬æ§å¶ç³»ç»Mercurial
Hotspot调试环境搭建-基于Ubuntu..7-OpenJDK8u-Clion
搭建基于Ubuntu ..7与OpenJDK 8u的Hotspot调试环境,涉及以下步骤:
首先,安装版本管理工具Mercurial,其功能类似Git,用于管理OpenJDK版本。微信夺宝源码分享使用命令进行安装,遇到问题时尝试重启系统解决问题。
其次,设置代理以加速下载国外仓库,如hg.openjdk.java.net。在用户家目录下创建.hgrc文件,配置代理信息。如果没有代理,可考虑从其他GitHub源下载代码,但同样会面临速度问题。
接着,下载代码。下载地址提供的是一个壳工程,包含get_source.sh脚本。执行该脚本下载完整代码。
下载时需注意,get_source.sh脚本仅适用于带有版本信息的仓库,使用其他方式下载的猛虎出笼公式源码源码文件不能执行。确保下载完整。
预装依赖,安装GCC及编译所需依赖包。
安装BOOT JDK,可通过华为JDK官网镜像下载,使用绿色解压方式。
编译配置完成后,进行编译。使用bear命令行工具,生成compile_commands.json文件,此文件可用于导入Clion进行调试,无需生成CMakeList.txt文件。至此,环境搭建完成。
搭建Hotspot调试环境,遵循上述步骤,确保所有操作正确无误,即可成功搭建基于Ubuntu ..7与OpenJDK 8u的调试环境。
Ubuntu下编译OpenJDK9
为了在Ubuntu下编译OpenJDK9,首先安装VMware Workstation Pro和Ubuntu ..2 LTS,确保系统干净无其他应用。
接着,通过Mercurial(hg)获取OpenJDK9的java潜艇游戏源码源代码,安装并下载hg,然后访问OpenJDK官网获取源代码的下载地址。按照指导,使用hg下载源代码,注意要执行get_source.sh脚本。
在下载过程中可能会遇到问题,如“exited abnormally”或“stream ended unexpectedly”,此时可重新执行下载脚本。完成下载后,会生成约1GB的文件,包含大量.hg文件夹。
阅读OpenJDK官网提供的JDK 9 Build README,以了解编译步骤。在配置阶段,应避免使用系统自带的OpenJDK8作为Boot JDK,推荐手动下载安装Oracle的Java 8版本以确保稳定性。
访问Oracle官网下载Java 8,解压后将其放置在指定目录。配置编译环境时,可能会遇到缺少X库的问题,通过执行特定脚本解决。在多次尝试和调整后,完成配置。mts.exe源码
使用make images命令开始编译过程,整个编译耗时约8分钟。编译完成后,生成的build文件夹包含了所需JDK文件。将整个jdk文件夹复制到指定目录,并进行简单测试以验证编译成功。
对于Mac和Windows用户,OpenJDK9的编译流程类似,只需根据各自操作系统的特定需求进行调整。
git是如何感知文件修改的?
Git通过递归扫描仓库里所有文件的最后修改时间来感知文件是否修改。在执行commit操作时,Git会计算文件的SHA-1值以判断文件是否被改动。理论上,如果篡改被改动文件的最后修改时间至改动前,则Git可能无法察觉文件内容的更改。然而,这种操作的验证需要具体实验来确认。
Meta(Facebook的母公司)使用修改过的Mercurial作为源代码管理系统,其原理与Git相似。由于使用单一代码库,repo内的文件数量可能达到百万甚至千万级别。为此,Meta发明了Watchman,织梦拍卖源码一个后台进程,通过inotify监控文件系统改动,并向Mercurial报告文件状态变化。Watchman在首次启动时需要扫描整个repo以建立初始状态。
随着repo体积增大,Watchman的性能逐渐受限。为解决这一问题,Meta后来开发了EdenFS,一个虚拟文件系统,用于按需加载repo中的文件。这样,用户无需将数十个G的repo一次性克隆到本地磁盘,同时监控文件改动的功能直接集成于文件系统中。对于较小的repo,这种解决方案的优势不明显。
写Java这么久,JDK源码编译过没?编译JDK源码踩坑纪实
在Java开发中,我们通常使用JDK环境来运行和编写Java代码。然而,你是否曾经好奇过,你天天使用的JDK源码究竟是如何由源码编译而来的呢?
带着这个疑问,本文将带你一起探索如何手动编译一个JDK,从环境准备到编译过程,再到验证成果。过程中会遇到各种问题与解决之道,让你在实践中学习,提升编程技能。
在编译过程中,环境的配置和工具的选择至关重要。首先,需要有一个与目标JDK版本相匹配的bootstrap JDK(boot JDK),以确保编译工作的顺利进行。接着,需要一个Unix环境,无论是Linux、macOS还是通过Cygwin、MinGW/MSYS等工具模拟的Windows环境。
编译所需的工具链包括C++/C编译器、Mercurial版本控制工具等,用于管理源码。在编译前,还需要进行自动配置,确保所有依赖环境正确安装并兼容。
下载JDK源码有两种方式:使用Mercurial工具或直接下载打包好的源码包。下载完成后,进入源码根目录进行配置和编译。编译过程可能需要一点时间,但通过验证编译结果,如输出提示,你将成功完成编译。
编译完成后,JDK源码将会生成一系列产物,包括Java可执行程序、成品JDK套装等。验证成果时,可以通过运行编译出的Java程序来确认一切正常。接下来,将自己编译的JDK应用到实际项目中。
在关联JDK源码并修改时,可能会遇到注释问题,如行尾注释、多行注释等。通过自行编译JDK,这些问题可以得到解决。同时,解决中文注释编译报错的问题,需要调整源码中字符编码设置。
通过实践,你不仅能够深入了解JDK的编译过程,还能够解决实际开发中遇到的种种问题。最后,分享资源与持续更新的学习材料,鼓励大家在编程的道路上不断进步。
常见的Web源码泄漏及其利用
Web源码泄漏漏洞及利用方法
Git源码泄露是由于在执行git init初始化目录时,会在当前目录下自动创建一个.git目录,用于记录代码变更等信息。若未将.git目录删除即发布到服务器,攻击者可通过此目录恢复源代码。修复建议:删除.git目录或修改中间件配置以隐藏.git隐藏文件夹。
SVN源码泄露源于其使用过程中自动生成的.svn隐藏文件夹,包含重要源代码信息。若网站管理员直接复制代码文件夹至WEB服务器,暴露.svn隐藏文件夹,攻击者可利用.svn/entries文件获取服务器源码。修复方法:删除web目录中的所有.svn隐藏文件夹,严格使用SVN导出功能,避免直接复制代码。
Mercurial(hg)源码泄露通过生成的.hg文件暴露,漏洞利用工具为dvcs-ripper。运行示例需具体说明。
CVS泄露主要针对CVS/Root和CVS/Entries目录,直接暴露泄露信息。修复工具为dvcs-ripper,运行示例同样需具体说明。
Bazaar/bzr泄露为版本控制工具泄露问题,因其不常见但多平台支持,同样存在通过特定目录暴露源码的风险。具体修复方法与运行示例需进一步说明。
网站备份压缩文件泄露是管理员将备份文件直接存放于Web目录,攻击者通过猜测文件路径下载,导致源代码泄露。常见备份文件后缀需具体列出,利用工具御剑用于这类漏洞的利用。
WEB-INF/web.xml泄露暴露了Java WEB应用的安全目录,若直接访问其中文件需通过web.xml文件映射。WEB-INF目录主要包括文件或目录,通过web.xml文件推断类文件路径,最后直接访问类文件,通过反编译得到网站源码。
.DS_Store文件泄露源于Mac系统中Finder保存文件展示数据的文件,每个文件夹下对应一个。若上传部署到服务器,可能造成文件目录结构泄漏,特别是备份文件、源代码文件的泄露。利用工具为github.com/lijiejie/ds_...
SWP文件泄露为编辑文件时产生的临时文件,是隐藏文件,若程序意外退出则保留。直接访问并下载.swp文件,删除末尾的.swp后,可获得源码文件。
GitHub源码泄露通过关键词搜索功能,容易找到目标站点的敏感信息,甚至下载网站源码。此类泄露源自代码托管平台,需注意个人代码管理安全。
总结,Web源码泄漏涉及多个环节,从代码版本控制到备份存储,再到代码托管平台,每个环节都可能成为攻击点。修复策略包括删除隐藏文件、严格使用版本控制功能、加强代码备份安全措施以及提高代码托管平台安全意识。