diff --git a/.codeclimate.yml b/.codeclimate.yml
new file mode 100644
index 0000000..1894ae1
--- /dev/null
+++ b/.codeclimate.yml
@@ -0,0 +1,14 @@
+---
+engines:
+ fixme:
+ enabled: true
+ markdownlint:
+ enabled: true
+ checks:
+ MD034:
+ enabled: true
+ MD013:
+ enabled: false
+ratings:
+ paths: []
+exclude_paths: []
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 2038447..729f8b6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,9 @@
+*.swp
+.settings/
+*.project
+
+# jekyll related files
_site
.sass-cache
.jekyll-metadata
-Gemfile.lock
\ No newline at end of file
+Gemfile.lock
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..295430c
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,9 @@
+{
+ "files.exclude": {
+ "**/.classpath": true,
+ "**/.project": true,
+ "**/.settings": true,
+ "**/.factorypath": true
+ },
+ "sarif-viewer.connectToGithubCodeScanning": "off"
+}
\ No newline at end of file
diff --git a/AboutJekyll.md b/AboutJekyll.md
new file mode 100644
index 0000000..c58cc88
--- /dev/null
+++ b/AboutJekyll.md
@@ -0,0 +1,27 @@
+# Minimal Mistakes remote theme starter
+
+Click [**Use this template**](https://github.com/mmistakes/mm-github-pages-starter/generate) button above for the quickest method of getting started with the [Minimal Mistakes Jekyll theme](https://github.com/mmistakes/minimal-mistakes).
+
+Contains basic configuration to get you a site with:
+
+- Sample posts.
+- Sample top navigation.
+- Sample author sidebar with social links.
+- Sample footer links.
+- Paginated home page.
+- Archive pages for posts grouped by year, category, and tag.
+- Sample about page.
+- Sample 404 page.
+- Site wide search.
+
+Replace sample content with your own and [configure as necessary](https://mmistakes.github.io/minimal-mistakes/docs/configuration/).
+
+---
+
+## Troubleshooting
+
+If you have a question about using Jekyll, start a discussion on the [Jekyll Forum](https://talk.jekyllrb.com/) or [StackOverflow](https://stackoverflow.com/questions/tagged/jekyll). Other resources:
+
+- [Ruby 101](https://jekyllrb.com/docs/ruby-101/)
+- [Setting up a Jekyll site with GitHub Pages](https://jekyllrb.com/docs/github-pages/)
+- [Configuring GitHub Metadata](https://github.com/jekyll/github-metadata/blob/master/docs/configuration.md#configuration) to work properly when developing locally and avoid `No GitHub API authentication could be found. Some fields may be missing or have incorrect data.` warnings.
diff --git a/README.md b/README.md
index c58cc88..cfe936b 100644
--- a/README.md
+++ b/README.md
@@ -1,27 +1,18 @@
-# Minimal Mistakes remote theme starter
+# cnblogs
-Click [**Use this template**](https://github.com/mmistakes/mm-github-pages-starter/generate) button above for the quickest method of getting started with the [Minimal Mistakes Jekyll theme](https://github.com/mmistakes/minimal-mistakes).
+[](https://github.com/sindresorhus/awesome)
+[](https://github.com/jiangxincode/cnblogs)
+[](http://mit-license.org/)
-Contains basic configuration to get you a site with:
+一些我在平时工作和学习中积累的编程相关的资源。每个程序员都有自己的学习之路,过程中会学习各种各样的网上知识,学习完最好记录下来,每隔一段时间看一看,会有不一样的收获。
-- Sample posts.
-- Sample top navigation.
-- Sample author sidebar with social links.
-- Sample footer links.
-- Paginated home page.
-- Archive pages for posts grouped by year, category, and tag.
-- Sample about page.
-- Sample 404 page.
-- Site wide search.
+博客地址:
-Replace sample content with your own and [configure as necessary](https://mmistakes.github.io/minimal-mistakes/docs/configuration/).
+* [原有"学习之路系列博客"](https://jiangxincode.github.io/cnblogs/categories/#the-way-of-learning)
+* [Github](https://jiangxincode.github.io/cnblogs/)
+* [博客园](https://www.cnblogs.com/jiangxinnju)
----
+如果大家有兴趣可以一起增加,修改。
-## Troubleshooting
-
-If you have a question about using Jekyll, start a discussion on the [Jekyll Forum](https://talk.jekyllrb.com/) or [StackOverflow](https://stackoverflow.com/questions/tagged/jekyll). Other resources:
-
-- [Ruby 101](https://jekyllrb.com/docs/ruby-101/)
-- [Setting up a Jekyll site with GitHub Pages](https://jekyllrb.com/docs/github-pages/)
-- [Configuring GitHub Metadata](https://github.com/jekyll/github-metadata/blob/master/docs/configuration.md#configuration) to work properly when developing locally and avoid `No GitHub API authentication could be found. Some fields may be missing or have incorrect data.` warnings.
+* [文章源码目录](https://github.com/jiangxincode/cnblogs/tree/master/_posts)
+* [文章依赖图床](https://github.com/jiangxincode/PicGo)
diff --git a/_config.yml b/_config.yml
index 3b0edc2..2812dfb 100644
--- a/_config.yml
+++ b/_config.yml
@@ -20,8 +20,11 @@ description: >- # this means to ignore newlines until "baseurl:"
line in _config.yml. It will appear in your document head meta (for
Google search results) and in your feed.xml site description.
twitter_username: username
+baseurl: "/cnblogs"
+url: "https://jiangxincode.github.io"
github_username: jiangxincode
-minimal_mistakes_skin: default
+#minimal_mistakes_skin: default
+minimal_mistakes_skin: sunrise
search: true
comments:
diff --git "a/_drafts/202301072210Doze\346\250\241\345\274\217\346\272\220\347\240\201\350\247\243\346\236\220.md" "b/_drafts/202301072210Doze\346\250\241\345\274\217\346\272\220\347\240\201\350\247\243\346\236\220.md"
deleted file mode 100644
index 9ca9459..0000000
--- "a/_drafts/202301072210Doze\346\250\241\345\274\217\346\272\220\347\240\201\350\247\243\346\236\220.md"
+++ /dev/null
@@ -1,11 +0,0 @@
-## 同步发布平台
-
-* 博客园:
-* CSDN:
-* 掘金:
-* 知乎:
-
-**未经允许,谢绝转载**
-
-请先阅读谷歌官网对Doze的基础性介绍: 。本文代码分析基于Android R版本。
-
diff --git "a/_drafts/Android/202301072210Doze\346\250\241\345\274\217\346\272\220\347\240\201\350\247\243\346\236\220.md" "b/_drafts/Android/202301072210Doze\346\250\241\345\274\217\346\272\220\347\240\201\350\247\243\346\236\220.md"
new file mode 100644
index 0000000..ab6f925
--- /dev/null
+++ "b/_drafts/Android/202301072210Doze\346\250\241\345\274\217\346\272\220\347\240\201\350\247\243\346\236\220.md"
@@ -0,0 +1,3 @@
+
+请先阅读谷歌官网对Doze的基础性介绍: 。本文代码分析基于Android R版本。
+
diff --git "a/_drafts/202301081324Android\346\272\220\347\240\201\350\247\243\350\257\273-\350\247\246\346\221\270\344\275\215\347\275\256\346\230\276\347\244\272.md" "b/_drafts/Android/202301081324Android\346\272\220\347\240\201\350\247\243\350\257\273-\350\247\246\346\221\270\344\275\215\347\275\256\346\230\276\347\244\272.md"
similarity index 100%
rename from "_drafts/202301081324Android\346\272\220\347\240\201\350\247\243\350\257\273-\350\247\246\346\221\270\344\275\215\347\275\256\346\230\276\347\244\272.md"
rename to "_drafts/Android/202301081324Android\346\272\220\347\240\201\350\247\243\350\257\273-\350\247\246\346\221\270\344\275\215\347\275\256\346\230\276\347\244\272.md"
diff --git "a/_drafts/Android/2025-05-25-AOSP\345\274\200\345\217\221\350\247\204\350\214\203.md" "b/_drafts/Android/2025-05-25-AOSP\345\274\200\345\217\221\350\247\204\350\214\203.md"
new file mode 100644
index 0000000..c77a09d
--- /dev/null
+++ "b/_drafts/Android/2025-05-25-AOSP\345\274\200\345\217\221\350\247\204\350\214\203.md"
@@ -0,0 +1,18 @@
+---
+title: "AOSP开发规范"
+categories:
+ - Android
+tags:
+ - AOSP
+ - 开发规范
+ - Android
+toc: true
+---
+
+* 在AOSP原生代码函数中增加侵入式修改,需要使用begin/end函数对其进行包裹,避免影响到原生代码的可读性和可维护性。
+* AOSP中尽量仅包含插装代码,避免包含业务逻辑代码。业务逻辑代码应该解耦到特定目录。
+* 禁止在AOSP原生AIDL中添加新的接口。
+* 新增加接口,注意是否需要进行权限控制。
+* 内部接口增加@hide注解,避免被外部反射调用。
+* 新增内容使用特性开关进行隔离。
+* 核心代码修改需要在特定评审会评审通过后才能进行代码提交。
diff --git "a/_drafts/Android OTA\345\215\207\347\272\247.md" "b/_drafts/Android/Android OTA\345\215\207\347\272\247.md"
similarity index 100%
rename from "_drafts/Android OTA\345\215\207\347\272\247.md"
rename to "_drafts/Android/Android OTA\345\215\207\347\272\247.md"
diff --git "a/_drafts/Android Studio\345\270\270\347\224\250\346\217\222\344\273\266\346\261\207\346\200\273.md" "b/_drafts/Android/Android Studio\345\270\270\347\224\250\346\217\222\344\273\266\346\261\207\346\200\273.md"
similarity index 100%
rename from "_drafts/Android Studio\345\270\270\347\224\250\346\217\222\344\273\266\346\261\207\346\200\273.md"
rename to "_drafts/Android/Android Studio\345\270\270\347\224\250\346\217\222\344\273\266\346\261\207\346\200\273.md"
diff --git "a/_drafts/Android Studio\347\233\270\345\205\263\347\233\256\345\275\225\350\247\243\346\236\220.md" "b/_drafts/Android/Android Studio\347\233\270\345\205\263\347\233\256\345\275\225\350\247\243\346\236\220.md"
similarity index 100%
rename from "_drafts/Android Studio\347\233\270\345\205\263\347\233\256\345\275\225\350\247\243\346\236\220.md"
rename to "_drafts/Android/Android Studio\347\233\270\345\205\263\347\233\256\345\275\225\350\247\243\346\236\220.md"
diff --git "a/_drafts/Android Studio\347\247\273\345\212\250\351\274\240\346\240\207\346\230\276\347\244\272\346\202\254\346\265\256\346\217\220\347\244\272\347\232\204\350\256\276\347\275\256\346\226\271\346\263\225.md" "b/_drafts/Android/Android Studio\347\247\273\345\212\250\351\274\240\346\240\207\346\230\276\347\244\272\346\202\254\346\265\256\346\217\220\347\244\272\347\232\204\350\256\276\347\275\256\346\226\271\346\263\225.md"
similarity index 83%
rename from "_drafts/Android Studio\347\247\273\345\212\250\351\274\240\346\240\207\346\230\276\347\244\272\346\202\254\346\265\256\346\217\220\347\244\272\347\232\204\350\256\276\347\275\256\346\226\271\346\263\225.md"
rename to "_drafts/Android/Android Studio\347\247\273\345\212\250\351\274\240\346\240\207\346\230\276\347\244\272\346\202\254\346\265\256\346\217\220\347\244\272\347\232\204\350\256\276\347\275\256\346\226\271\346\263\225.md"
index fd343f8..337d823 100644
--- "a/_drafts/Android Studio\347\247\273\345\212\250\351\274\240\346\240\207\346\230\276\347\244\272\346\202\254\346\265\256\346\217\220\347\244\272\347\232\204\350\256\276\347\275\256\346\226\271\346\263\225.md"
+++ "b/_drafts/Android/Android Studio\347\247\273\345\212\250\351\274\240\346\240\207\346\230\276\347\244\272\346\202\254\346\265\256\346\217\220\347\244\272\347\232\204\350\256\276\347\275\256\346\226\271\346\263\225.md"
@@ -1,8 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
以Windows 10 + Android Studio 3.0.1为例
diff --git "a/_drafts/Android\345\271\263\345\217\260OpenGL ES_Assimp_OpenCV_GLM\351\233\206\346\210\220\350\257\264\346\230\216.md" "b/_drafts/Android/Android\345\271\263\345\217\260OpenGL ES_Assimp_OpenCV_GLM\351\233\206\346\210\220\350\257\264\346\230\216.md"
similarity index 100%
rename from "_drafts/Android\345\271\263\345\217\260OpenGL ES_Assimp_OpenCV_GLM\351\233\206\346\210\220\350\257\264\346\230\216.md"
rename to "_drafts/Android/Android\345\271\263\345\217\260OpenGL ES_Assimp_OpenCV_GLM\351\233\206\346\210\220\350\257\264\346\230\216.md"
diff --git "a/_drafts/Android\347\234\237\346\234\272\345\256\211\350\243\205sqlite3\347\232\204\346\226\271\346\263\225.md" "b/_drafts/Android/Android\347\234\237\346\234\272\345\256\211\350\243\205sqlite3\347\232\204\346\226\271\346\263\225.md"
similarity index 89%
rename from "_drafts/Android\347\234\237\346\234\272\345\256\211\350\243\205sqlite3\347\232\204\346\226\271\346\263\225.md"
rename to "_drafts/Android/Android\347\234\237\346\234\272\345\256\211\350\243\205sqlite3\347\232\204\346\226\271\346\263\225.md"
index 482227c..1a0516f 100644
--- "a/_drafts/Android\347\234\237\346\234\272\345\256\211\350\243\205sqlite3\347\232\204\346\226\271\346\263\225.md"
+++ "b/_drafts/Android/Android\347\234\237\346\234\272\345\256\211\350\243\205sqlite3\347\232\204\346\226\271\346\263\225.md"
@@ -1,8 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
Android版本: 4.4.2
diff --git "a/_drafts/\350\247\243\345\206\263adb push\346\227\266\345\207\272\347\216\260\347\232\204"Read-only file system"\351\227\256\351\242\230.md" "b/_drafts/Android/\350\247\243\345\206\263adb push\346\227\266\345\207\272\347\216\260\347\232\204"Read-only file system"\351\227\256\351\242\230.md"
similarity index 86%
rename from "_drafts/\350\247\243\345\206\263adb push\346\227\266\345\207\272\347\216\260\347\232\204"Read-only file system"\351\227\256\351\242\230.md"
rename to "_drafts/Android/\350\247\243\345\206\263adb push\346\227\266\345\207\272\347\216\260\347\232\204"Read-only file system"\351\227\256\351\242\230.md"
index 45e194e..b80fc5d 100644
--- "a/_drafts/\350\247\243\345\206\263adb push\346\227\266\345\207\272\347\216\260\347\232\204"Read-only file system"\351\227\256\351\242\230.md"
+++ "b/_drafts/Android/\350\247\243\345\206\263adb push\346\227\266\345\207\272\347\216\260\347\232\204"Read-only file system"\351\227\256\351\242\230.md"
@@ -1,9 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
-
出现`Read-only file system`问题,不是因为文件或者文件夹的权限不对,而是要push的目录对应的分区是以只读方式挂载的,网上给出的解决办法是重新以读写方式挂载对应分区,以`/system`分区为例,使用命令:`mount -o remount rw /system`,当然如果你想重新挂载系统分区需要有root权限。
diff --git "a/_drafts/ApkToolBoxGUI 0.0.8\345\217\221\345\270\203\344\272\206\357\274\201\357\274\201.md" "b/_drafts/ApkToolBoxGUI 0.0.8\345\217\221\345\270\203\344\272\206\357\274\201\357\274\201.md"
deleted file mode 100644
index b27ae8b..0000000
--- "a/_drafts/ApkToolBoxGUI 0.0.8\345\217\221\345\270\203\344\272\206\357\274\201\357\274\201.md"
+++ /dev/null
@@ -1,149 +0,0 @@
-GitHub:
-Gitee:
-
-APKToolBoxGUI是一个程序员常用的小工具合集,有个比较友好的交互界面。主要包含编码转换,时间戳转换,颜色拾取器,颜色转换,重复文件查找,批量文件重命名,文件摘要检查等。另外还有些专门为Android开发定制的小工具,比如带界面的Monkey,国际化语言批量处理等。
-
-## Why you should try
-
-* Open source forever
-* More powerful features
-* Easier to use
-* Update more frequently
-
-## Features
-
-### File
-
-#### Convert between different character encodings
-
-* 支持`UTF-8`,`GB2312`,`GBK`,`Big5`等上百种编码格式间的互相转换
-* 支持多文件夹、多文件批量转换
-* 支持源文件编码自动识别,自动识别采用多引擎方案,识别率高
-
-类似工具:
-
-* 元宝文件编码转换器:
-* UltraCodingSwitch:
-
-
-
-#### Convert between different OS types
-
-
-
-#### Convert between Simplified Chinese and Traditional Chinese
-
-
-
-#### Check files digest
-
-
-
-#### Find duplicated files(Not Finished)
-
-
-
-
-类似工具:
-
-RenameIt:
-
-### Convert
-
-#### Convert between timestamp and formatted time
-
-
-
-#### Convert between color formats
-
-Convert between common color formats: `RGB`/`HEX`/`CMYK`/`HSB`(`HSV`)
-
-
-
-类似工具:
-
-*
-*
-*
-*
-
-#### Color picker
-
-A useful little color picker that grabs the pixel under your mouse and transforms it into a number of different color formats. You can use the built-in magnifier to zoom in on your screen, click on a color value to copy it directly to the clipboard.
-
-类似工具:
-
-* ColorPix:
-
-
-
-#### Convert between different base
-
-
-
-#### Convert between Chinese character and Unicode character
-
-### Reverse
-
-Using third-party tools to decompile package like jar, aar, war, apk, dex and so on.
-
-类似工具:
-
-* I18NTools:
-* TextTools:
-* ApkToolBox(C#):
-* ApkToolBox(PowerShell):
-* APKDB(安卓逆向助手):
-* APKIDE(改之理):
-* ApkToolkit:
-* Android Killer:
-
-| Name | Version | Website | License
-| ------ | ------ | ------ | ------ |
-| Apktool | v2.5.0 | | Apache 2.0 |
-| GD-GUI | 1.6.6 | | GNU GPL v3 |
-| JADX-GUI | v1.2.0 | | Apache 2.0 |
-| ApkSigner | 1.3 | | Apache 2.0 |
-| AXMLPrinter3 | 0.0.1-SNAPSHOT | | Apache 2.0 |
-
-### SnapShot
-
-### Dumpsys
-
-* adb shell dumpsys alarm
-
-### Test
-
-### I18N
-
-#### Copy Items
-
-Copy some `` in strings.xml in the `value[.*]` directory of the [A directory] to the strings.xml in the `value[.*]` directory of the [B directory]. It is mainly used to merge translations into several code branches.
-
-#### Replace Items
-
-Replace some `` in strings.xml in the `value[.*]` directory of the [A directory] to the strings.xml in the `value[.*]` directory of the [B directory]. It is mainly used to merge translations into several code branches.
-
-#### Delete Items
-
-Delete some `` in strings.xml in the `value[.*]` directory of the [A directory]
-
-#### Find the longest
-
-Find the longest translation of a ``. Primarily for finding cuts or line breaks.
-
-## License
-
-* Apache License V2.0
-
-## Contributing
-
-Any contributing is welcomed.
-
-1. Fork repository
-2. Make changes
-3. Ensure tests pass (or hopefully adding tests!)
-4. Submit pull request/issue
-
-* build binary: mvn clean package
-* build project documentation: mvn clean package site
\ No newline at end of file
diff --git "a/_drafts/C_C++\345\244\247\346\225\260\345\272\223\347\256\200\344\273\213.md" "b/_drafts/C_C++\345\244\247\346\225\260\345\272\223\347\256\200\344\273\213.md"
deleted file mode 100644
index d6d453d..0000000
--- "a/_drafts/C_C++\345\244\247\346\225\260\345\272\223\347\256\200\344\273\213.md"
+++ /dev/null
@@ -1,31 +0,0 @@
-在网络安全技术领域中各种加密解密算法的软件实现上始终有一个共同的问题就是如何在普通的PC机上实现大数的运算。我们日常生活中所应用的PC机内部字长多是32位或64位,但是在各种加密解密的算法中为了达到一定的安全强度,都是要求在128位、512位或者是1024位这样的字长下进行加减乘除模逆等各种数学运算,我们称为大数运算。在这样的前提下,如何在PC机上快速高效的实现大数运算就很自然的成为了在PC机上实现加密解密算法最为基础和重要的问题。像Python、Lisp等语言都内建了大数计算机制,但是像C/C++语言既没有内建大数运算机制也没有对应的标准库实现。
-
-为了解决C/C++大数运算的问题,许多优秀的大数运算库随之出现。下面对几种优秀的大数库进行简单的介绍:
-
-GMP:GMP大数库是GNU项目的一部分,诞生于1991年。作为一个任意精度的大整数运算库,它包括了任意精度的整数、浮点数的各种基本运算操作。它是一个C语言的库,但是官方提供了C++的包装类,主要的应用方向是密码学、网络安全、代数系统、计算科学等。GMP库的运行速度非常快,它的官方网站上称自己为地球上最快的大数库,但是GMP库所提供的只是数学运算功能,并没有密码学相关的高级功能。(注:GMP安装如果出现了问题,可能是安装包所在目录太深了,试着换个目录重新安装下)
-
-Miracl:Miracl库是Shamus Software Ltd开发的一个大数库,它的使用许可针对教育科学研究或者非商业目的的应用是免费的。它是一个C语言的库,同时提供了几个较为简单的c++包装类。在功能上它不但提供了高精度的大整数和分数的各种数学运算操作而且提供了很多密码学算法中的功能模块,如SHA、AES、DSA等中的一些底层操作。最为特别的是它还提供了很多椭圆曲线密码体制中的底层功能模块。由于Miracl库的内部实现采用了很多的汇编代码,故运行速度也非常快。
-
-Crypto++:Crypto++库是一个开源项目。由于它是一个纯C++实现的库,所以应用非常的方便,库的结构清晰,文档也很健全。Crypto++库提供了很多密码学算法的实现。
-
-OpenSSL:OpenSSL是一个开放源代码的实现了SSL及相关加密技术的软件包,由加拿大的Eric Yang等发起编写的。它可以实现消息摘要、文件的加密和解密、数字证书、数字签名和随机数字等。它的主要用途并不是大数库,而是SSL协议的实现和应用,但是其中也有一些关于大整数的功能,此外它也是基于C语言。
-
-下面是一些常用的大数运算库的地址(有些虽然不是专门的大数运算库,但是带有相关的库)
-
-Crypto++:
-
-MIRACL:
-
-GNU MP:
-
-Piologie:
-
-cryptlib:
-
-RSAEuro:
-
-OpenSSL:
-
-RSARef:
-
-GInt:(Delphi)
\ No newline at end of file
diff --git "a/_drafts/ACM\347\253\236\350\265\233\344\271\213\350\276\223\345\205\245\350\276\223\345\207\272\357\274\210\344\273\245C\344\270\216C++\344\270\272\344\276\213\357\274\211.md" "b/_drafts/C_Cpp/ACM\347\253\236\350\265\233\344\271\213\350\276\223\345\205\245\350\276\223\345\207\272\357\274\210\344\273\245C\344\270\216C++\344\270\272\344\276\213\357\274\211.md"
similarity index 100%
rename from "_drafts/ACM\347\253\236\350\265\233\344\271\213\350\276\223\345\205\245\350\276\223\345\207\272\357\274\210\344\273\245C\344\270\216C++\344\270\272\344\276\213\357\274\211.md"
rename to "_drafts/C_Cpp/ACM\347\253\236\350\265\233\344\271\213\350\276\223\345\205\245\350\276\223\345\207\272\357\274\210\344\273\245C\344\270\216C++\344\270\272\344\276\213\357\274\211.md"
diff --git "a/_drafts/C++\344\273\216\351\224\256\347\233\230\350\276\223\345\205\245\346\226\207\344\273\266\347\273\223\346\235\237\347\254\246.md" "b/_drafts/C_Cpp/C++\344\273\216\351\224\256\347\233\230\350\276\223\345\205\245\346\226\207\344\273\266\347\273\223\346\235\237\347\254\246.md"
similarity index 100%
rename from "_drafts/C++\344\273\216\351\224\256\347\233\230\350\276\223\345\205\245\346\226\207\344\273\266\347\273\223\346\235\237\347\254\246.md"
rename to "_drafts/C_Cpp/C++\344\273\216\351\224\256\347\233\230\350\276\223\345\205\245\346\226\207\344\273\266\347\273\223\346\235\237\347\254\246.md"
diff --git "a/_drafts/C++\347\274\226\350\257\221\351\224\231\350\257\257cannot have cv-qualifier.md" "b/_drafts/C_Cpp/C++\347\274\226\350\257\221\351\224\231\350\257\257cannot have cv-qualifier.md"
similarity index 100%
rename from "_drafts/C++\347\274\226\350\257\221\351\224\231\350\257\257cannot have cv-qualifier.md"
rename to "_drafts/C_Cpp/C++\347\274\226\350\257\221\351\224\231\350\257\257cannot have cv-qualifier.md"
diff --git "a/_drafts/C++\350\257\255\350\250\200\344\270\255cin cin.getline cin.get getline gets getchar \347\232\204\347\224\250\346\263\225\345\256\236\344\276\213.md" "b/_drafts/C_Cpp/C++\350\257\255\350\250\200\344\270\255cin cin.getline cin.get getline gets getchar \347\232\204\347\224\250\346\263\225\345\256\236\344\276\213.md"
similarity index 100%
rename from "_drafts/C++\350\257\255\350\250\200\344\270\255cin cin.getline cin.get getline gets getchar \347\232\204\347\224\250\346\263\225\345\256\236\344\276\213.md"
rename to "_drafts/C_Cpp/C++\350\257\255\350\250\200\344\270\255cin cin.getline cin.get getline gets getchar \347\232\204\347\224\250\346\263\225\345\256\236\344\276\213.md"
diff --git "a/_drafts/C_C++\344\270\255\347\232\204abort\343\200\201atexit\343\200\201exit\345\222\214_Exit.md" "b/_drafts/C_Cpp/C_C++\344\270\255\347\232\204abort\343\200\201atexit\343\200\201exit\345\222\214_Exit.md"
similarity index 100%
rename from "_drafts/C_C++\344\270\255\347\232\204abort\343\200\201atexit\343\200\201exit\345\222\214_Exit.md"
rename to "_drafts/C_Cpp/C_C++\344\270\255\347\232\204abort\343\200\201atexit\343\200\201exit\345\222\214_Exit.md"
diff --git "a/_drafts/Code Blocks+gtest\347\216\257\345\242\203\351\205\215\347\275\256.md" "b/_drafts/C_Cpp/Code Blocks+gtest\347\216\257\345\242\203\351\205\215\347\275\256.md"
similarity index 100%
rename from "_drafts/Code Blocks+gtest\347\216\257\345\242\203\351\205\215\347\275\256.md"
rename to "_drafts/C_Cpp/Code Blocks+gtest\347\216\257\345\242\203\351\205\215\347\275\256.md"
diff --git "a/_drafts/C\350\257\255\350\250\200\344\270\255\351\232\217\346\234\272\346\225\260\347\233\270\345\205\263\351\227\256\351\242\230.md" "b/_drafts/C_Cpp/C\350\257\255\350\250\200\344\270\255\351\232\217\346\234\272\346\225\260\347\233\270\345\205\263\351\227\256\351\242\230.md"
similarity index 100%
rename from "_drafts/C\350\257\255\350\250\200\344\270\255\351\232\217\346\234\272\346\225\260\347\233\270\345\205\263\351\227\256\351\242\230.md"
rename to "_drafts/C_Cpp/C\350\257\255\350\250\200\344\270\255\351\232\217\346\234\272\346\225\260\347\233\270\345\205\263\351\227\256\351\242\230.md"
diff --git "a/_drafts/const \344\270\215\345\206\215\350\277\267\350\214\253.md" "b/_drafts/C_Cpp/const \344\270\215\345\206\215\350\277\267\350\214\253.md"
similarity index 100%
rename from "_drafts/const \344\270\215\345\206\215\350\277\267\350\214\253.md"
rename to "_drafts/C_Cpp/const \344\270\215\345\206\215\350\277\267\350\214\253.md"
diff --git "a/_drafts/\345\261\217\345\271\225\350\276\223\345\207\272VS\346\226\207\344\273\266\350\276\223\345\207\272.md" "b/_drafts/C_Cpp/\345\261\217\345\271\225\350\276\223\345\207\272VS\346\226\207\344\273\266\350\276\223\345\207\272.md"
similarity index 100%
rename from "_drafts/\345\261\217\345\271\225\350\276\223\345\207\272VS\346\226\207\344\273\266\350\276\223\345\207\272.md"
rename to "_drafts/C_Cpp/\345\261\217\345\271\225\350\276\223\345\207\272VS\346\226\207\344\273\266\350\276\223\345\207\272.md"
diff --git "a/_drafts/\347\224\261\345\207\275\346\225\260clock\346\203\263\345\210\260\347\232\204.md" "b/_drafts/C_Cpp/\347\224\261\345\207\275\346\225\260clock\346\203\263\345\210\260\347\232\204.md"
similarity index 100%
rename from "_drafts/\347\224\261\345\207\275\346\225\260clock\346\203\263\345\210\260\347\232\204.md"
rename to "_drafts/C_Cpp/\347\224\261\345\207\275\346\225\260clock\346\203\263\345\210\260\347\232\204.md"
diff --git "a/_drafts/\347\274\226\347\250\213\350\216\267\345\276\227CPU\347\232\204\344\270\273\351\242\221.md" "b/_drafts/C_Cpp/\347\274\226\347\250\213\350\216\267\345\276\227CPU\347\232\204\344\270\273\351\242\221.md"
similarity index 100%
rename from "_drafts/\347\274\226\347\250\213\350\216\267\345\276\227CPU\347\232\204\344\270\273\351\242\221.md"
rename to "_drafts/C_Cpp/\347\274\226\347\250\213\350\216\267\345\276\227CPU\347\232\204\344\270\273\351\242\221.md"
diff --git "a/_drafts/(\350\275\254)SQLServer\345\256\236\344\276\213\350\256\262\350\247\243.md" "b/_drafts/Database/(\350\275\254)SQLServer\345\256\236\344\276\213\350\256\262\350\247\243.md"
similarity index 100%
rename from "_drafts/(\350\275\254)SQLServer\345\256\236\344\276\213\350\256\262\350\247\243.md"
rename to "_drafts/Database/(\350\275\254)SQLServer\345\256\236\344\276\213\350\256\262\350\247\243.md"
diff --git "a/_drafts/DB2\345\270\270\347\224\250\350\257\255\345\217\245.md" "b/_drafts/Database/DB2\345\270\270\347\224\250\350\257\255\345\217\245.md"
similarity index 90%
rename from "_drafts/DB2\345\270\270\347\224\250\350\257\255\345\217\245.md"
rename to "_drafts/Database/DB2\345\270\270\347\224\250\350\257\255\345\217\245.md"
index 3af4c9e..9831c0f 100644
--- "a/_drafts/DB2\345\270\270\347\224\250\350\257\255\345\217\245.md"
+++ "b/_drafts/Database/DB2\345\270\270\347\224\250\350\257\255\345\217\245.md"
@@ -1,9 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
-
```sql
CREATE TABLE STAFF_BAK LIKE STAFF;
diff --git "a/_drafts/MYSQL\345\270\270\350\247\201\351\224\231\350\257\257\345\217\212\345\205\266\350\247\243\345\206\263\346\226\271\345\274\217.md" "b/_drafts/Database/MYSQL\345\270\270\350\247\201\351\224\231\350\257\257\345\217\212\345\205\266\350\247\243\345\206\263\346\226\271\345\274\217.md"
similarity index 93%
rename from "_drafts/MYSQL\345\270\270\350\247\201\351\224\231\350\257\257\345\217\212\345\205\266\350\247\243\345\206\263\346\226\271\345\274\217.md"
rename to "_drafts/Database/MYSQL\345\270\270\350\247\201\351\224\231\350\257\257\345\217\212\345\205\266\350\247\243\345\206\263\346\226\271\345\274\217.md"
index d09a4da..89cd1ad 100644
--- "a/_drafts/MYSQL\345\270\270\350\247\201\351\224\231\350\257\257\345\217\212\345\205\266\350\247\243\345\206\263\346\226\271\345\274\217.md"
+++ "b/_drafts/Database/MYSQL\345\270\270\350\247\201\351\224\231\350\257\257\345\217\212\345\205\266\350\247\243\345\206\263\346\226\271\345\274\217.md"
@@ -1,8 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
# ERROR 1130: Host 10.0.0.1 is not allowed to connect to this MySQL server
diff --git "a/_drafts/MySQL\351\273\230\350\256\244\346\225\260\346\215\256\345\272\223.md" "b/_drafts/Database/MySQL\351\273\230\350\256\244\346\225\260\346\215\256\345\272\223.md"
similarity index 88%
rename from "_drafts/MySQL\351\273\230\350\256\244\346\225\260\346\215\256\345\272\223.md"
rename to "_drafts/Database/MySQL\351\273\230\350\256\244\346\225\260\346\215\256\345\272\223.md"
index 2afbf1c..6eff9dd 100644
--- "a/_drafts/MySQL\351\273\230\350\256\244\346\225\260\346\215\256\345\272\223.md"
+++ "b/_drafts/Database/MySQL\351\273\230\350\256\244\346\225\260\346\215\256\345\272\223.md"
@@ -1,8 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
INFORMATION_SCHEMA:提供了访问数据库元数据的方式。
元数据是关于数据的数据,如数据库名、表名、列的数据类型或访问权限等。有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。你可以讲INFORMATION_SCHEMA看成一个信息数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息。在INFORMATION_SCHEMA中,有数个只读表。它们实际上是视图,而不是基本表,因此你将无法看到与之相关的任何文件。每位MySQL用户均有权访问这些表,但仅限于表中的特定行,在这类行中含有用户具有恰当访问权限的对象。
diff --git "a/_drafts/Oracle\344\270\255session\345\222\214processes\347\232\204\350\256\276\347\275\256.md" "b/_drafts/Database/Oracle\344\270\255session\345\222\214processes\347\232\204\350\256\276\347\275\256.md"
similarity index 88%
rename from "_drafts/Oracle\344\270\255session\345\222\214processes\347\232\204\350\256\276\347\275\256.md"
rename to "_drafts/Database/Oracle\344\270\255session\345\222\214processes\347\232\204\350\256\276\347\275\256.md"
index 4466f7d..3eb9fe0 100644
--- "a/_drafts/Oracle\344\270\255session\345\222\214processes\347\232\204\350\256\276\347\275\256.md"
+++ "b/_drafts/Database/Oracle\344\270\255session\345\222\214processes\347\232\204\350\256\276\347\275\256.md"
@@ -1,9 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
-
* PROCESSES: http://docs.oracle.com/cd/B28359_01/server.111/b28320/initparams188.htm#sthref560
* SESSIONS: http://docs.oracle.com/cd/B28359_01/server.111/b28320/initparams220.htm#sthref647
diff --git "a/_drafts/Oracle\345\257\274\345\205\245\345\257\274\345\207\272\345\270\270\347\224\250\345\221\275\344\273\244.md" "b/_drafts/Database/Oracle\345\257\274\345\205\245\345\257\274\345\207\272\345\270\270\347\224\250\345\221\275\344\273\244.md"
similarity index 100%
rename from "_drafts/Oracle\345\257\274\345\205\245\345\257\274\345\207\272\345\270\270\347\224\250\345\221\275\344\273\244.md"
rename to "_drafts/Database/Oracle\345\257\274\345\205\245\345\257\274\345\207\272\345\270\270\347\224\250\345\221\275\344\273\244.md"
diff --git "a/_drafts/Oracle\347\263\273\347\273\237\350\241\250\346\225\264\347\220\206+\345\270\270\347\224\250SQL\350\257\255\345\217\245\346\224\266\351\233\206.md" "b/_drafts/Database/Oracle\347\263\273\347\273\237\350\241\250\346\225\264\347\220\206+\345\270\270\347\224\250SQL\350\257\255\345\217\245\346\224\266\351\233\206.md"
similarity index 98%
rename from "_drafts/Oracle\347\263\273\347\273\237\350\241\250\346\225\264\347\220\206+\345\270\270\347\224\250SQL\350\257\255\345\217\245\346\224\266\351\233\206.md"
rename to "_drafts/Database/Oracle\347\263\273\347\273\237\350\241\250\346\225\264\347\220\206+\345\270\270\347\224\250SQL\350\257\255\345\217\245\346\224\266\351\233\206.md"
index a93fd57..8e39d61 100644
--- "a/_drafts/Oracle\347\263\273\347\273\237\350\241\250\346\225\264\347\220\206+\345\270\270\347\224\250SQL\350\257\255\345\217\245\346\224\266\351\233\206.md"
+++ "b/_drafts/Database/Oracle\347\263\273\347\273\237\350\241\250\346\225\264\347\220\206+\345\270\270\347\224\250SQL\350\257\255\345\217\245\346\224\266\351\233\206.md"
@@ -1,8 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
```
-- DBA/ALL/USER/V_$/GV_$/SESSION/INDEX开头的绝大部分都是视图
diff --git "a/_drafts/SQL Server\345\270\270\347\224\250\350\257\255\345\217\245.md" "b/_drafts/Database/SQL Server\345\270\270\347\224\250\350\257\255\345\217\245.md"
similarity index 96%
rename from "_drafts/SQL Server\345\270\270\347\224\250\350\257\255\345\217\245.md"
rename to "_drafts/Database/SQL Server\345\270\270\347\224\250\350\257\255\345\217\245.md"
index b86d5ee..cefed39 100644
--- "a/_drafts/SQL Server\345\270\270\347\224\250\350\257\255\345\217\245.md"
+++ "b/_drafts/Database/SQL Server\345\270\270\347\224\250\350\257\255\345\217\245.md"
@@ -1,8 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
```SQL
-- 身份证验证(SQLServer)
diff --git "a/_drafts/oracle\350\241\250\347\251\272\351\227\264\344\270\215\350\266\263\347\233\270\345\205\263\351\227\256\351\242\230\350\247\243\345\206\263\345\212\236\346\263\225.md" "b/_drafts/Database/oracle\350\241\250\347\251\272\351\227\264\344\270\215\350\266\263\347\233\270\345\205\263\351\227\256\351\242\230\350\247\243\345\206\263\345\212\236\346\263\225.md"
similarity index 96%
rename from "_drafts/oracle\350\241\250\347\251\272\351\227\264\344\270\215\350\266\263\347\233\270\345\205\263\351\227\256\351\242\230\350\247\243\345\206\263\345\212\236\346\263\225.md"
rename to "_drafts/Database/oracle\350\241\250\347\251\272\351\227\264\344\270\215\350\266\263\347\233\270\345\205\263\351\227\256\351\242\230\350\247\243\345\206\263\345\212\236\346\263\225.md"
index 0a4e354..7a23ccf 100644
--- "a/_drafts/oracle\350\241\250\347\251\272\351\227\264\344\270\215\350\266\263\347\233\270\345\205\263\351\227\256\351\242\230\350\247\243\345\206\263\345\212\236\346\263\225.md"
+++ "b/_drafts/Database/oracle\350\241\250\347\251\272\351\227\264\344\270\215\350\266\263\347\233\270\345\205\263\351\227\256\351\242\230\350\247\243\345\206\263\345\212\236\346\263\225.md"
@@ -1,8 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
## oracle 临时表空间和数据表空间
diff --git "a/_drafts/oracle\350\241\250\347\251\272\351\227\264\350\241\250\345\210\206\345\214\272\350\257\246\350\247\243\345\217\212oracle\350\241\250\345\210\206\345\214\272\346\237\245\350\257\242\344\275\277\347\224\250\346\226\271\346\263\225(\350\275\254+\346\225\264\347\220\206).md" "b/_drafts/Database/oracle\350\241\250\347\251\272\351\227\264\350\241\250\345\210\206\345\214\272\350\257\246\350\247\243\345\217\212oracle\350\241\250\345\210\206\345\214\272\346\237\245\350\257\242\344\275\277\347\224\250\346\226\271\346\263\225(\350\275\254+\346\225\264\347\220\206).md"
similarity index 98%
rename from "_drafts/oracle\350\241\250\347\251\272\351\227\264\350\241\250\345\210\206\345\214\272\350\257\246\350\247\243\345\217\212oracle\350\241\250\345\210\206\345\214\272\346\237\245\350\257\242\344\275\277\347\224\250\346\226\271\346\263\225(\350\275\254+\346\225\264\347\220\206).md"
rename to "_drafts/Database/oracle\350\241\250\347\251\272\351\227\264\350\241\250\345\210\206\345\214\272\350\257\246\350\247\243\345\217\212oracle\350\241\250\345\210\206\345\214\272\346\237\245\350\257\242\344\275\277\347\224\250\346\226\271\346\263\225(\350\275\254+\346\225\264\347\220\206).md"
index 95166de..f763da8 100644
--- "a/_drafts/oracle\350\241\250\347\251\272\351\227\264\350\241\250\345\210\206\345\214\272\350\257\246\350\247\243\345\217\212oracle\350\241\250\345\210\206\345\214\272\346\237\245\350\257\242\344\275\277\347\224\250\346\226\271\346\263\225(\350\275\254+\346\225\264\347\220\206).md"
+++ "b/_drafts/Database/oracle\350\241\250\347\251\272\351\227\264\350\241\250\345\210\206\345\214\272\350\257\246\350\247\243\345\217\212oracle\350\241\250\345\210\206\345\214\272\346\237\245\350\257\242\344\275\277\347\224\250\346\226\271\346\263\225(\350\275\254+\346\225\264\347\220\206).md"
@@ -1,10 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
-
-
此文从以下几个方面来整理关于分区表的概念及操作:
diff --git "a/_drafts/\345\246\202\344\275\225\345\273\272\347\253\213DB2\345\210\206\345\214\272\346\225\260\346\215\256\345\272\223\357\274\237\357\274\210\350\275\254\357\274\211.md" "b/_drafts/Database/\345\246\202\344\275\225\345\273\272\347\253\213DB2\345\210\206\345\214\272\346\225\260\346\215\256\345\272\223\357\274\237\357\274\210\350\275\254\357\274\211.md"
similarity index 98%
rename from "_drafts/\345\246\202\344\275\225\345\273\272\347\253\213DB2\345\210\206\345\214\272\346\225\260\346\215\256\345\272\223\357\274\237\357\274\210\350\275\254\357\274\211.md"
rename to "_drafts/Database/\345\246\202\344\275\225\345\273\272\347\253\213DB2\345\210\206\345\214\272\346\225\260\346\215\256\345\272\223\357\274\237\357\274\210\350\275\254\357\274\211.md"
index eeb7626..f60e55d 100644
--- "a/_drafts/\345\246\202\344\275\225\345\273\272\347\253\213DB2\345\210\206\345\214\272\346\225\260\346\215\256\345\272\223\357\274\237\357\274\210\350\275\254\357\274\211.md"
+++ "b/_drafts/Database/\345\246\202\344\275\225\345\273\272\347\253\213DB2\345\210\206\345\214\272\346\225\260\346\215\256\345\272\223\357\274\237\357\274\210\350\275\254\357\274\211.md"
@@ -1,8 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
原作:陈敏 2008-05-21
diff --git "a/_drafts/\345\277\230\350\256\260oracle\347\232\204sys\347\224\250\346\210\267\345\257\206\347\240\201\346\200\216\344\271\210\344\277\256\346\224\271\344\273\245\345\217\212Oracle 11g \351\273\230\350\256\244\347\224\250\346\210\267\345\220\215\345\222\214\345\257\206\347\240\201.md" "b/_drafts/Database/\345\277\230\350\256\260oracle\347\232\204sys\347\224\250\346\210\267\345\257\206\347\240\201\346\200\216\344\271\210\344\277\256\346\224\271\344\273\245\345\217\212Oracle 11g \351\273\230\350\256\244\347\224\250\346\210\267\345\220\215\345\222\214\345\257\206\347\240\201.md"
similarity index 92%
rename from "_drafts/\345\277\230\350\256\260oracle\347\232\204sys\347\224\250\346\210\267\345\257\206\347\240\201\346\200\216\344\271\210\344\277\256\346\224\271\344\273\245\345\217\212Oracle 11g \351\273\230\350\256\244\347\224\250\346\210\267\345\220\215\345\222\214\345\257\206\347\240\201.md"
rename to "_drafts/Database/\345\277\230\350\256\260oracle\347\232\204sys\347\224\250\346\210\267\345\257\206\347\240\201\346\200\216\344\271\210\344\277\256\346\224\271\344\273\245\345\217\212Oracle 11g \351\273\230\350\256\244\347\224\250\346\210\267\345\220\215\345\222\214\345\257\206\347\240\201.md"
index 1b15f81..ad7db48 100644
--- "a/_drafts/\345\277\230\350\256\260oracle\347\232\204sys\347\224\250\346\210\267\345\257\206\347\240\201\346\200\216\344\271\210\344\277\256\346\224\271\344\273\245\345\217\212Oracle 11g \351\273\230\350\256\244\347\224\250\346\210\267\345\220\215\345\222\214\345\257\206\347\240\201.md"
+++ "b/_drafts/Database/\345\277\230\350\256\260oracle\347\232\204sys\347\224\250\346\210\267\345\257\206\347\240\201\346\200\216\344\271\210\344\277\256\346\224\271\344\273\245\345\217\212Oracle 11g \351\273\230\350\256\244\347\224\250\346\210\267\345\220\215\345\222\214\345\257\206\347\240\201.md"
@@ -1,10 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
-
-
## 忘记除SYS、SYSTEM用户之外的用户的登录密码
diff --git "a/_drafts/\346\225\260\346\215\256\345\272\223\347\233\270\345\205\263\346\200\273\347\273\223.md" "b/_drafts/Database/\346\225\260\346\215\256\345\272\223\347\233\270\345\205\263\346\200\273\347\273\223.md"
similarity index 94%
rename from "_drafts/\346\225\260\346\215\256\345\272\223\347\233\270\345\205\263\346\200\273\347\273\223.md"
rename to "_drafts/Database/\346\225\260\346\215\256\345\272\223\347\233\270\345\205\263\346\200\273\347\273\223.md"
index 59f3c37..04e0b98 100644
--- "a/_drafts/\346\225\260\346\215\256\345\272\223\347\233\270\345\205\263\346\200\273\347\273\223.md"
+++ "b/_drafts/Database/\346\225\260\346\215\256\345\272\223\347\233\270\345\205\263\346\200\273\347\273\223.md"
@@ -1,8 +1,3 @@
-欢迎关注我的社交账号:
-
-博客园地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
# 通用:
diff --git "a/_drafts/202110171056\345\246\202\344\275\225\345\260\206cpdetector\345\217\221\345\270\203Maven\344\276\235\350\265\226\345\210\260\344\270\255\345\244\256\344\273\223\345\272\223.md" "b/_drafts/Java/202110171056\345\246\202\344\275\225\345\260\206cpdetector\345\217\221\345\270\203Maven\344\276\235\350\265\226\345\210\260\344\270\255\345\244\256\344\273\223\345\272\223.md"
similarity index 100%
rename from "_drafts/202110171056\345\246\202\344\275\225\345\260\206cpdetector\345\217\221\345\270\203Maven\344\276\235\350\265\226\345\210\260\344\270\255\345\244\256\344\273\223\345\272\223.md"
rename to "_drafts/Java/202110171056\345\246\202\344\275\225\345\260\206cpdetector\345\217\221\345\270\203Maven\344\276\235\350\265\226\345\210\260\344\270\255\345\244\256\344\273\223\345\272\223.md"
diff --git "a/_drafts/202209041204\347\203\255\345\210\207\346\215\242Log4j\347\272\247\345\210\253\351\205\215\347\275\256.md" "b/_drafts/Java/202209041204\347\203\255\345\210\207\346\215\242Log4j\347\272\247\345\210\253\351\205\215\347\275\256.md"
similarity index 100%
rename from "_drafts/202209041204\347\203\255\345\210\207\346\215\242Log4j\347\272\247\345\210\253\351\205\215\347\275\256.md"
rename to "_drafts/Java/202209041204\347\203\255\345\210\207\346\215\242Log4j\347\272\247\345\210\253\351\205\215\347\275\256.md"
diff --git "a/_drafts/202301072303Java Swing TreeTable\346\240\267\344\276\213\346\214\207\345\257\274.md" "b/_drafts/Java/202301072303Java Swing TreeTable\346\240\267\344\276\213\346\214\207\345\257\274.md"
similarity index 100%
rename from "_drafts/202301072303Java Swing TreeTable\346\240\267\344\276\213\346\214\207\345\257\274.md"
rename to "_drafts/Java/202301072303Java Swing TreeTable\346\240\267\344\276\213\346\214\207\345\257\274.md"
diff --git "a/_drafts/20\345\210\206\351\222\237\347\220\206\346\270\205Maven\346\236\204\345\273\272\344\270\255\347\232\204\346\265\213\350\257\225\347\233\270\345\205\263\345\267\245\345\205\267\347\232\204\345\205\263\347\263\273.md" "b/_drafts/Java/20\345\210\206\351\222\237\347\220\206\346\270\205Maven\346\236\204\345\273\272\344\270\255\347\232\204\346\265\213\350\257\225\347\233\270\345\205\263\345\267\245\345\205\267\347\232\204\345\205\263\347\263\273.md"
similarity index 100%
rename from "_drafts/20\345\210\206\351\222\237\347\220\206\346\270\205Maven\346\236\204\345\273\272\344\270\255\347\232\204\346\265\213\350\257\225\347\233\270\345\205\263\345\267\245\345\205\267\347\232\204\345\205\263\347\263\273.md"
rename to "_drafts/Java/20\345\210\206\351\222\237\347\220\206\346\270\205Maven\346\236\204\345\273\272\344\270\255\347\232\204\346\265\213\350\257\225\347\233\270\345\205\263\345\267\245\345\205\267\347\232\204\345\205\263\347\263\273.md"
diff --git "a/_drafts/Calendar\347\261\273\344\270\255add_set_roll\346\226\271\346\263\225\347\232\204\345\214\272\345\210\253.md" "b/_drafts/Java/Calendar\347\261\273\344\270\255add_set_roll\346\226\271\346\263\225\347\232\204\345\214\272\345\210\253.md"
similarity index 95%
rename from "_drafts/Calendar\347\261\273\344\270\255add_set_roll\346\226\271\346\263\225\347\232\204\345\214\272\345\210\253.md"
rename to "_drafts/Java/Calendar\347\261\273\344\270\255add_set_roll\346\226\271\346\263\225\347\232\204\345\214\272\345\210\253.md"
index 93789bb..79cfa55 100644
--- "a/_drafts/Calendar\347\261\273\344\270\255add_set_roll\346\226\271\346\263\225\347\232\204\345\214\272\345\210\253.md"
+++ "b/_drafts/Java/Calendar\347\261\273\344\270\255add_set_roll\346\226\271\346\263\225\347\232\204\345\214\272\345\210\253.md"
@@ -1,9 +1,3 @@
-欢迎和大家交流技术相关问题:
-
-* 邮箱: jiangxinnju@163.com
-* 博客园地址: http://www.cnblogs.com/jiangxinnju
-* GitHub地址: https://github.com/jiangxincode
-* 知乎地址: https://www.zhihu.com/people/jiangxinnju
Calendar类中有三个方法更改日期的某个字段:set()、add() 和 roll()。
diff --git "a/_drafts/Eclipse+Spark\346\220\255\345\273\272\346\272\220\347\240\201\345\210\206\346\236\220\347\216\257\345\242\203\351\227\256\351\242\230\345\210\206\346\236\220.md" "b/_drafts/Java/Eclipse+Spark\346\220\255\345\273\272\346\272\220\347\240\201\345\210\206\346\236\220\347\216\257\345\242\203\351\227\256\351\242\230\345\210\206\346\236\220.md"
similarity index 86%
rename from "_drafts/Eclipse+Spark\346\220\255\345\273\272\346\272\220\347\240\201\345\210\206\346\236\220\347\216\257\345\242\203\351\227\256\351\242\230\345\210\206\346\236\220.md"
rename to "_drafts/Java/Eclipse+Spark\346\220\255\345\273\272\346\272\220\347\240\201\345\210\206\346\236\220\347\216\257\345\242\203\351\227\256\351\242\230\345\210\206\346\236\220.md"
index 551689e..9fa6e1f 100644
--- "a/_drafts/Eclipse+Spark\346\220\255\345\273\272\346\272\220\347\240\201\345\210\206\346\236\220\347\216\257\345\242\203\351\227\256\351\242\230\345\210\206\346\236\220.md"
+++ "b/_drafts/Java/Eclipse+Spark\346\220\255\345\273\272\346\272\220\347\240\201\345\210\206\346\236\220\347\216\257\345\242\203\351\227\256\351\242\230\345\210\206\346\236\220.md"
@@ -1,9 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
-
# Scala IDE complains about ‘... is cross-compiled with an incompatible version of Scala ...’
diff --git "a/_drafts/Eclipse\344\270\255Ant\347\232\204\351\205\215\347\275\256\344\270\216\346\265\213\350\257\225 \350\275\254.md" "b/_drafts/Java/Eclipse\344\270\255Ant\347\232\204\351\205\215\347\275\256\344\270\216\346\265\213\350\257\225 \350\275\254.md"
similarity index 96%
rename from "_drafts/Eclipse\344\270\255Ant\347\232\204\351\205\215\347\275\256\344\270\216\346\265\213\350\257\225 \350\275\254.md"
rename to "_drafts/Java/Eclipse\344\270\255Ant\347\232\204\351\205\215\347\275\256\344\270\216\346\265\213\350\257\225 \350\275\254.md"
index 6fa5a53..1306fc1 100644
--- "a/_drafts/Eclipse\344\270\255Ant\347\232\204\351\205\215\347\275\256\344\270\216\346\265\213\350\257\225 \350\275\254.md"
+++ "b/_drafts/Java/Eclipse\344\270\255Ant\347\232\204\351\205\215\347\275\256\344\270\216\346\265\213\350\257\225 \350\275\254.md"
@@ -1,9 +1,3 @@
-欢迎关注我的社交账号:
-
-博客园地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
-
Ant是Java平台下非常棒的批处理命令执行程序,能非常方便地自动完成编译,测试,打包,部署等等一系列任务,大大提高开发效率。如果你现在还没有开始使用Ant,那就要赶快开始学习使用,使自己的开发水平上一个新台阶。Eclipse中已经集成了Ant,我们可以直接在Eclipse中运行Ant。以前面建立的Hello工程为例,创建以下目录结构:
diff --git "a/_drafts/Eclipse\345\205\250\351\235\242\346\217\220\351\200\237\345\260\217\346\212\200\345\267\247.md" "b/_drafts/Java/Eclipse\345\205\250\351\235\242\346\217\220\351\200\237\345\260\217\346\212\200\345\267\247.md"
similarity index 97%
rename from "_drafts/Eclipse\345\205\250\351\235\242\346\217\220\351\200\237\345\260\217\346\212\200\345\267\247.md"
rename to "_drafts/Java/Eclipse\345\205\250\351\235\242\346\217\220\351\200\237\345\260\217\346\212\200\345\267\247.md"
index a11f620..d0efb2d 100644
--- "a/_drafts/Eclipse\345\205\250\351\235\242\346\217\220\351\200\237\345\260\217\346\212\200\345\267\247.md"
+++ "b/_drafts/Java/Eclipse\345\205\250\351\235\242\346\217\220\351\200\237\345\260\217\346\212\200\345\267\247.md"
@@ -1,12 +1,5 @@
转自:http://rongmayisheng.com/post/eclipse%E5%85%A8%E9%9D%A2%E6%8F%90%E9%80%9F
-欢迎关注我的社交账号:
-
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
-
-
你是否经常在等待eclipse的一些操作完成?
如果你看到这里,说明答案是yes。如果你苦于eclipse中响应很慢的功能,并且想给eclipse提速让开发更舒服些,就请看看下面的内容。
diff --git "a/_drafts/Eclipse\347\233\270\345\205\263\351\227\256\351\242\230.md" "b/_drafts/Java/Eclipse\347\233\270\345\205\263\351\227\256\351\242\230.md"
similarity index 99%
rename from "_drafts/Eclipse\347\233\270\345\205\263\351\227\256\351\242\230.md"
rename to "_drafts/Java/Eclipse\347\233\270\345\205\263\351\227\256\351\242\230.md"
index 8a55e32..61eb505 100644
--- "a/_drafts/Eclipse\347\233\270\345\205\263\351\227\256\351\242\230.md"
+++ "b/_drafts/Java/Eclipse\347\233\270\345\205\263\351\227\256\351\242\230.md"
@@ -1,7 +1,3 @@
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
-
## MANIFEST.MF文件
diff --git "a/_drafts/Eclipse\350\277\234\347\250\213\350\260\203\350\257\225\345\207\272\347\216\260\342\200\234JDWP Transport dt_socket failed to initialize\342\200\235\347\232\204\350\247\243\345\206\263\346\226\271\346\241\210.md" "b/_drafts/Java/Eclipse\350\277\234\347\250\213\350\260\203\350\257\225\345\207\272\347\216\260\342\200\234JDWP Transport dt_socket failed to initialize\342\200\235\347\232\204\350\247\243\345\206\263\346\226\271\346\241\210.md"
similarity index 90%
rename from "_drafts/Eclipse\350\277\234\347\250\213\350\260\203\350\257\225\345\207\272\347\216\260\342\200\234JDWP Transport dt_socket failed to initialize\342\200\235\347\232\204\350\247\243\345\206\263\346\226\271\346\241\210.md"
rename to "_drafts/Java/Eclipse\350\277\234\347\250\213\350\260\203\350\257\225\345\207\272\347\216\260\342\200\234JDWP Transport dt_socket failed to initialize\342\200\235\347\232\204\350\247\243\345\206\263\346\226\271\346\241\210.md"
index c74e66b..1817f73 100644
--- "a/_drafts/Eclipse\350\277\234\347\250\213\350\260\203\350\257\225\345\207\272\347\216\260\342\200\234JDWP Transport dt_socket failed to initialize\342\200\235\347\232\204\350\247\243\345\206\263\346\226\271\346\241\210.md"
+++ "b/_drafts/Java/Eclipse\350\277\234\347\250\213\350\260\203\350\257\225\345\207\272\347\216\260\342\200\234JDWP Transport dt_socket failed to initialize\342\200\235\347\232\204\350\247\243\345\206\263\346\226\271\346\241\210.md"
@@ -1,8 +1,3 @@
-欢迎关注我的社交账号:
-
-博客园地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
工作中经常需要使用Eclipse远程连接Tomcat,调试Web应用程序,关于如何进行远程调试,本文不再赘述,可以参考下面的文章:
diff --git "a/_drafts/FindBugs\350\257\246\350\247\243.md" "b/_drafts/Java/FindBugs\350\257\246\350\247\243.md"
similarity index 93%
rename from "_drafts/FindBugs\350\257\246\350\247\243.md"
rename to "_drafts/Java/FindBugs\350\257\246\350\247\243.md"
index 44ea32f..a365c2f 100644
--- "a/_drafts/FindBugs\350\257\246\350\247\243.md"
+++ "b/_drafts/Java/FindBugs\350\257\246\350\247\243.md"
@@ -1,9 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
-
## Find bugs误报告警的消除方法
diff --git "a/_drafts/HBase\344\273\213\347\273\215.md" "b/_drafts/Java/HBase\344\273\213\347\273\215.md"
similarity index 98%
rename from "_drafts/HBase\344\273\213\347\273\215.md"
rename to "_drafts/Java/HBase\344\273\213\347\273\215.md"
index fb16916..40e9600 100644
--- "a/_drafts/HBase\344\273\213\347\273\215.md"
+++ "b/_drafts/Java/HBase\344\273\213\347\273\215.md"
@@ -1,10 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
-
-
转自:http://jiajun.iteye.com/blog/899632
diff --git "a/_drafts/Hibernate\344\270\216autoCommit.md" "b/_drafts/Java/Hibernate\344\270\216autoCommit.md"
similarity index 100%
rename from "_drafts/Hibernate\344\270\216autoCommit.md"
rename to "_drafts/Java/Hibernate\344\270\216autoCommit.md"
diff --git "a/_drafts/Java/JNI\344\275\277\347\224\250\346\226\271\346\263\225.md" "b/_drafts/Java/JNI\344\275\277\347\224\250\346\226\271\346\263\225.md"
new file mode 100644
index 0000000..0810570
--- /dev/null
+++ "b/_drafts/Java/JNI\344\275\277\347\224\250\346\226\271\346\263\225.md"
@@ -0,0 +1,128 @@
+# JNI使用方法
+
+Java通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在Windows平台下是dll文件形式,在UNIX机器上是so文件形式)。通过调用本地的库文件的内部方法,使Java可以实现和本地机器的紧密联系,调用系统级的各接口方法。
+
+使用的简单流程:
+
+## Java中所需要做的工作
+
+1、在Java程序中,首先需要在类中声明所调用的库名称,如
+
+```java
+static {
+ System.loadLibrary(“testdll”);
+}
+```
+
+这里库的扩展名可以不用写出来,究竟是DLL还是SO,由系统自己判断。
+
+2、还需要对将要调用的方法做本地声明,关键字为native。且只需要声明,而不需要具体实现
+
+```java
+public native static void set(int i);
+public native static int get();
+```
+
+得到的Java程序如下:TestJNI.java
+
+```java
+public class TestJNI {
+ static {
+ System.loadLibrary("testdll");
+ }
+ public native static int get();
+ public native static void set(int i);
+ public static void main(String[] args) {
+ testdll test = new testdll();
+ test.set(10);
+ System.out.println(test.get());
+ }
+}
+```
+
+3、使用`javac TestJNI.java`编译它,得到`TestJNI.class`,再用`javah TestJNI`,则会在当前目录下生成`TestJNI.h`文件。
+
+注意:用`javah`命令生成相应h头文件的时候有可能会出现无法找到相应class文件的错误,建议使用如下格式在控制台生成.h头文件: `javah -classpath . testdll`
+
+## C/C++中所需要做的工作
+
+1、打开VC++,新建工程->win32 DLL,在向导中选择空工程。然后编写testdll.cpp文件
+
+```cpp
+#include
+#include "TestJNI.h"
+
+int i = 0;
+
+JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv *, jclass)
+{
+ return i;
+}
+JNIEXPORT void JNICALL Java_testdll_set (JNIEnv *, jclass, jint j)
+{
+ i = j;
+}
+int WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
+{
+ return TRUE;
+}
+```
+
+说明:
+
+* 必须有DllMain函数,并且DllMain必须返回TRUE,否则系统将终止程序并弹出一个“启动程序时出错”对话框,其他两个为Java中调用的两个函数的实现,解释见最后的补充
+* 把Java编译生成的TestJNI.h加入到C/C++的工程中,否则上面代码的include "TestJNI.h"无法引用到
+
+2、编译上面的testdll.cpp文件,可以生成testdll.dll文件,但是这过程通常会出现:在TestJNI.h中找不到jni.h
+
+解决方法:把Javajdk中的下面这些.h文件复制一份到Microsoft Visual Studio的安装目录下的\VC\include文件夹下,例如笔者的是`D:\Program Files\Microsoft Visual Studio 10.0\VC\include`
+
+* \jdk\include\jni.h
+* \jdk\include\win32\jawt_md.h
+* \jdk\include\win32\jni_md.h
+
+## 结合起来
+
+1、生成的DLL文件的名称要跟Java代码中需要调用的testdll一样,如果不同可以修改文件名,这里是testdll.dll
+
+2、然后把该dll文件拷贝到TestJNI.class文件的目录下。
+
+3、使用java testdll 运行它,就可以观察到结果
+
+说明:如果运行java testdll 出现错误:“ 找不到或无法加载主类”,可能是环境变量的classpath键值的分号;掉了,一般掉了这个就会出现这种问题
+
+## 最后对TestJNI.h的内容理解补充
+
+```cpp
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include
+/* Header for class TestJNI*/
+#ifndef _Included_TestJNI
+#define _Included_TestJNI
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+* Class: TestJNI
+* Method: get
+* Signature: ()I
+*/
+JNIEXPORT jint JNICALL Java_TestJNI_get (JNIEnv *, jclass);
+/*
+* Class: TestJNI
+* Method: set
+* Signature: (I)V
+*/
+JNIEXPORT void JNICALL Java_TestJNI_set (JNIEnv *, jclass, jint);
+#ifdef __cplusplus
+}
+#endif
+#endif
+```
+
+在具体实现的时候,我们只关心两个函数原型
+
+* `JNIEXPORT jint JNICALL Java_TestJNI_get (JNIEnv *, jclass);`
+* `JNIEXPORT void JNICALL Java_TestJNI_set (JNIEnv *, jclass, jint);`
+
+这里JNIEXPORT和JNICALL都是JNI的关键字,表示此函数是要被JNI调用的。而jint是以JNI为中介使JAVA的int类型与本地的int沟通的一种类型,我们可以视而不见,就当做int使用。函数的名称是JAVA_再加上java程序的package路径再加函数名组成的。参数中,我们也只需要关心在JAVA程序中存在的参数,至于JNIEnv*和jclass我们一般没有必要去碰它。
diff --git "a/_drafts/JUnit org.junit.runner.Request.classWithoutSuiteMethod\350\247\243\345\206\263\346\226\271\346\263\225.md" "b/_drafts/Java/JUnit org.junit.runner.Request.classWithoutSuiteMethod\350\247\243\345\206\263\346\226\271\346\263\225.md"
similarity index 82%
rename from "_drafts/JUnit org.junit.runner.Request.classWithoutSuiteMethod\350\247\243\345\206\263\346\226\271\346\263\225.md"
rename to "_drafts/Java/JUnit org.junit.runner.Request.classWithoutSuiteMethod\350\247\243\345\206\263\346\226\271\346\263\225.md"
index 132b6f0..d32f600 100644
--- "a/_drafts/JUnit org.junit.runner.Request.classWithoutSuiteMethod\350\247\243\345\206\263\346\226\271\346\263\225.md"
+++ "b/_drafts/Java/JUnit org.junit.runner.Request.classWithoutSuiteMethod\350\247\243\345\206\263\346\226\271\346\263\225.md"
@@ -1,9 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
-
```java
java.lang.NoSuchMethodError: org.junit.runner.Request.classWithoutSuiteMethod(Ljava/lang/Class;)Lorg/junit/runner/Request;
diff --git "a/_drafts/JVM\350\260\203\344\274\230\346\200\273\347\273\223\357\274\210\350\275\254\357\274\211.md" "b/_drafts/Java/JVM\350\260\203\344\274\230\346\200\273\347\273\223\357\274\210\350\275\254\357\274\211.md"
similarity index 100%
rename from "_drafts/JVM\350\260\203\344\274\230\346\200\273\347\273\223\357\274\210\350\275\254\357\274\211.md"
rename to "_drafts/Java/JVM\350\260\203\344\274\230\346\200\273\347\273\223\357\274\210\350\275\254\357\274\211.md"
diff --git "a/_drafts/Java\346\235\202\351\241\271.md" "b/_drafts/Java/Java\346\235\202\351\241\271.md"
similarity index 99%
rename from "_drafts/Java\346\235\202\351\241\271.md"
rename to "_drafts/Java/Java\346\235\202\351\241\271.md"
index 0bad7d1..b0a7486 100644
--- "a/_drafts/Java\346\235\202\351\241\271.md"
+++ "b/_drafts/Java/Java\346\235\202\351\241\271.md"
@@ -1,10 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
-
-
# JDK
diff --git "a/_drafts/Java\350\277\234\347\250\213\350\260\203\350\257\225\344\273\243\347\240\201\344\270\215\344\270\200\350\207\264\351\227\256\351\242\230\346\261\207\346\200\273.md" "b/_drafts/Java/Java\350\277\234\347\250\213\350\260\203\350\257\225\344\273\243\347\240\201\344\270\215\344\270\200\350\207\264\351\227\256\351\242\230\346\261\207\346\200\273.md"
similarity index 78%
rename from "_drafts/Java\350\277\234\347\250\213\350\260\203\350\257\225\344\273\243\347\240\201\344\270\215\344\270\200\350\207\264\351\227\256\351\242\230\346\261\207\346\200\273.md"
rename to "_drafts/Java/Java\350\277\234\347\250\213\350\260\203\350\257\225\344\273\243\347\240\201\344\270\215\344\270\200\350\207\264\351\227\256\351\242\230\346\261\207\346\200\273.md"
index 0068b75..5c93951 100644
--- "a/_drafts/Java\350\277\234\347\250\213\350\260\203\350\257\225\344\273\243\347\240\201\344\270\215\344\270\200\350\207\264\351\227\256\351\242\230\346\261\207\346\200\273.md"
+++ "b/_drafts/Java/Java\350\277\234\347\250\213\350\260\203\350\257\225\344\273\243\347\240\201\344\270\215\344\270\200\350\207\264\351\227\256\351\242\230\346\261\207\346\200\273.md"
@@ -1,8 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
Java(Eclipse IDE)远程调试Tomcat容器中的代码,经常出现两端代码不一致的情况,下面针对之前出现过的问题进行汇总,作为以后快速排查的依据。
diff --git a/_drafts/Peer Code Reviews Made Easy with Eclipse Plug-In.md b/_drafts/Java/Peer Code Reviews Made Easy with Eclipse Plug-In.md
similarity index 99%
rename from _drafts/Peer Code Reviews Made Easy with Eclipse Plug-In.md
rename to _drafts/Java/Peer Code Reviews Made Easy with Eclipse Plug-In.md
index 7cfdf14..b6e25e4 100644
--- a/_drafts/Peer Code Reviews Made Easy with Eclipse Plug-In.md
+++ b/_drafts/Java/Peer Code Reviews Made Easy with Eclipse Plug-In.md
@@ -1,9 +1,3 @@
-欢迎关注我的社交账号:
-
-博客园地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
-
* Origin Article: Peer Code Reviews Made Easy with Eclipse Plug-In
* Origin Author: John Ferguson Smart
diff --git "a/_drafts/ServletInputStream\347\232\204\351\207\215\345\244\215\350\257\273\345\217\226\357\274\210\345\244\232\346\254\241\350\257\273\345\217\226\357\274\211\357\274\210\350\275\254\357\274\211.md" "b/_drafts/Java/ServletInputStream\347\232\204\351\207\215\345\244\215\350\257\273\345\217\226\357\274\210\345\244\232\346\254\241\350\257\273\345\217\226\357\274\211\357\274\210\350\275\254\357\274\211.md"
similarity index 89%
rename from "_drafts/ServletInputStream\347\232\204\351\207\215\345\244\215\350\257\273\345\217\226\357\274\210\345\244\232\346\254\241\350\257\273\345\217\226\357\274\211\357\274\210\350\275\254\357\274\211.md"
rename to "_drafts/Java/ServletInputStream\347\232\204\351\207\215\345\244\215\350\257\273\345\217\226\357\274\210\345\244\232\346\254\241\350\257\273\345\217\226\357\274\211\357\274\210\350\275\254\357\274\211.md"
index 7ee2018..17d62a5 100644
--- "a/_drafts/ServletInputStream\347\232\204\351\207\215\345\244\215\350\257\273\345\217\226\357\274\210\345\244\232\346\254\241\350\257\273\345\217\226\357\274\211\357\274\210\350\275\254\357\274\211.md"
+++ "b/_drafts/Java/ServletInputStream\347\232\204\351\207\215\345\244\215\350\257\273\345\217\226\357\274\210\345\244\232\346\254\241\350\257\273\345\217\226\357\274\211\357\274\210\350\275\254\357\274\211.md"
@@ -1,8 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
在使用Servlet进行Web开发的时候,有时候为了增加必要的业务处理而又不想修改现有的程序,往往采用Filter。这样在各个Filter中可能都要读取ServletInputStream流的内容,而ServletInputStream却只能读一次,这时候必须备份HttpServleRequest。
diff --git "a/_drafts/Spring\346\241\206\346\236\266\347\232\204\345\217\215\345\272\217\345\210\227\345\214\226\350\277\234\347\250\213\344\273\243\347\240\201\346\211\247\350\241\214\346\274\217\346\264\236\345\210\206\346\236\220\357\274\210\350\275\254\357\274\211.md" "b/_drafts/Java/Spring\346\241\206\346\236\266\347\232\204\345\217\215\345\272\217\345\210\227\345\214\226\350\277\234\347\250\213\344\273\243\347\240\201\346\211\247\350\241\214\346\274\217\346\264\236\345\210\206\346\236\220\357\274\210\350\275\254\357\274\211.md"
similarity index 95%
rename from "_drafts/Spring\346\241\206\346\236\266\347\232\204\345\217\215\345\272\217\345\210\227\345\214\226\350\277\234\347\250\213\344\273\243\347\240\201\346\211\247\350\241\214\346\274\217\346\264\236\345\210\206\346\236\220\357\274\210\350\275\254\357\274\211.md"
rename to "_drafts/Java/Spring\346\241\206\346\236\266\347\232\204\345\217\215\345\272\217\345\210\227\345\214\226\350\277\234\347\250\213\344\273\243\347\240\201\346\211\247\350\241\214\346\274\217\346\264\236\345\210\206\346\236\220\357\274\210\350\275\254\357\274\211.md"
index 73b746b..22d7c8f 100644
--- "a/_drafts/Spring\346\241\206\346\236\266\347\232\204\345\217\215\345\272\217\345\210\227\345\214\226\350\277\234\347\250\213\344\273\243\347\240\201\346\211\247\350\241\214\346\274\217\346\264\236\345\210\206\346\236\220\357\274\210\350\275\254\357\274\211.md"
+++ "b/_drafts/Java/Spring\346\241\206\346\236\266\347\232\204\345\217\215\345\272\217\345\210\227\345\214\226\350\277\234\347\250\213\344\273\243\347\240\201\346\211\247\350\241\214\346\274\217\346\264\236\345\210\206\346\236\220\357\274\210\350\275\254\357\274\211.md"
@@ -1,9 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
-
## 漏洞介绍
国外的研究人员zero thoughts发现了一个Spring框架的反序列化远程代码执行漏洞。
diff --git "a/_drafts/[Maven][l10n-maven-plugin]\345\221\212\350\255\246[WARNING] No dictionary file under folder.md" "b/_drafts/Java/[Maven][l10n-maven-plugin]\345\221\212\350\255\246[WARNING] No dictionary file under folder.md"
similarity index 100%
rename from "_drafts/[Maven][l10n-maven-plugin]\345\221\212\350\255\246[WARNING] No dictionary file under folder.md"
rename to "_drafts/Java/[Maven][l10n-maven-plugin]\345\221\212\350\255\246[WARNING] No dictionary file under folder.md"
diff --git "a/_drafts/[Maven][maven-shade-plugin]\345\221\212\350\255\246[WARNING] maven-shade-plugin has detected that some class files are present in two or more JARs.md" "b/_drafts/Java/[Maven][maven-shade-plugin]\345\221\212\350\255\246[WARNING] maven-shade-plugin has detected that some class files are present in two or more JARs.md"
similarity index 100%
rename from "_drafts/[Maven][maven-shade-plugin]\345\221\212\350\255\246[WARNING] maven-shade-plugin has detected that some class files are present in two or more JARs.md"
rename to "_drafts/Java/[Maven][maven-shade-plugin]\345\221\212\350\255\246[WARNING] maven-shade-plugin has detected that some class files are present in two or more JARs.md"
diff --git "a/_drafts/[Maven][maven-site-plugin]\345\221\212\350\255\246[WARNING] No project URL defined - decoration links will not be relativized.md" "b/_drafts/Java/[Maven][maven-site-plugin]\345\221\212\350\255\246[WARNING] No project URL defined - decoration links will not be relativized.md"
similarity index 100%
rename from "_drafts/[Maven][maven-site-plugin]\345\221\212\350\255\246[WARNING] No project URL defined - decoration links will not be relativized.md"
rename to "_drafts/Java/[Maven][maven-site-plugin]\345\221\212\350\255\246[WARNING] No project URL defined - decoration links will not be relativized.md"
diff --git "a/_drafts/[Maven][taglist-maven-plugin]\345\221\212\350\255\246[WARNING] Using legacy tag format.md" "b/_drafts/Java/[Maven][taglist-maven-plugin]\345\221\212\350\255\246[WARNING] Using legacy tag format.md"
similarity index 100%
rename from "_drafts/[Maven][taglist-maven-plugin]\345\221\212\350\255\246[WARNING] Using legacy tag format.md"
rename to "_drafts/Java/[Maven][taglist-maven-plugin]\345\221\212\350\255\246[WARNING] Using legacy tag format.md"
diff --git "a/_drafts/[Maven]\345\221\212\350\255\246[WARNING] Unable to create Maven project from repository..md" "b/_drafts/Java/[Maven]\345\221\212\350\255\246[WARNING] Unable to create Maven project from repository..md"
similarity index 100%
rename from "_drafts/[Maven]\345\221\212\350\255\246[WARNING] Unable to create Maven project from repository..md"
rename to "_drafts/Java/[Maven]\345\221\212\350\255\246[WARNING] Unable to create Maven project from repository..md"
diff --git a/_drafts/[System.currentTimeMillis]_[Calendar.getInstance().getTimeInMillis()]_[new Date().getTime()].md b/_drafts/Java/[System.currentTimeMillis]_[Calendar.getInstance().getTimeInMillis()]_[new Date().getTime()].md
similarity index 100%
rename from _drafts/[System.currentTimeMillis]_[Calendar.getInstance().getTimeInMillis()]_[new Date().getTime()].md
rename to _drafts/Java/[System.currentTimeMillis]_[Calendar.getInstance().getTimeInMillis()]_[new Date().getTime()].md
diff --git "a/_drafts/eclipse\346\217\222\344\273\266\345\234\250\347\272\277\345\217\221\345\270\203\345\217\221\345\270\203\345\222\214\347\211\210\346\234\254\346\233\264\346\226\260(web site) \350\275\254.md" "b/_drafts/Java/eclipse\346\217\222\344\273\266\345\234\250\347\272\277\345\217\221\345\270\203\345\217\221\345\270\203\345\222\214\347\211\210\346\234\254\346\233\264\346\226\260(web site) \350\275\254.md"
similarity index 95%
rename from "_drafts/eclipse\346\217\222\344\273\266\345\234\250\347\272\277\345\217\221\345\270\203\345\217\221\345\270\203\345\222\214\347\211\210\346\234\254\346\233\264\346\226\260(web site) \350\275\254.md"
rename to "_drafts/Java/eclipse\346\217\222\344\273\266\345\234\250\347\272\277\345\217\221\345\270\203\345\217\221\345\270\203\345\222\214\347\211\210\346\234\254\346\233\264\346\226\260(web site) \350\275\254.md"
index 6a7b214..b1a185e 100644
--- "a/_drafts/eclipse\346\217\222\344\273\266\345\234\250\347\272\277\345\217\221\345\270\203\345\217\221\345\270\203\345\222\214\347\211\210\346\234\254\346\233\264\346\226\260(web site) \350\275\254.md"
+++ "b/_drafts/Java/eclipse\346\217\222\344\273\266\345\234\250\347\272\277\345\217\221\345\270\203\345\217\221\345\270\203\345\222\214\347\211\210\346\234\254\346\233\264\346\226\260(web site) \350\275\254.md"
@@ -1,8 +1,3 @@
-欢迎关注我的社交账号:
-
-博客园地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
eclipse插件在线发布发布和版本更新(web site)
diff --git "a/_drafts/javadoc\347\233\270\345\205\263\351\227\256\351\242\230.md" "b/_drafts/Java/javadoc\347\233\270\345\205\263\351\227\256\351\242\230.md"
similarity index 100%
rename from "_drafts/javadoc\347\233\270\345\205\263\351\227\256\351\242\230.md"
rename to "_drafts/Java/javadoc\347\233\270\345\205\263\351\227\256\351\242\230.md"
diff --git "a/_drafts/org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter\344\270\216org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.md" "b/_drafts/Java/org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter\344\270\216org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.md"
similarity index 92%
rename from "_drafts/org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter\344\270\216org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.md"
rename to "_drafts/Java/org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter\344\270\216org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.md"
index 1544447..fe963c5 100644
--- "a/_drafts/org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter\344\270\216org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.md"
+++ "b/_drafts/Java/org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter\344\270\216org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.md"
@@ -1,8 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
使用Eclipse启动Maven+Struts项目报错,报错日志如下:
diff --git "a/_drafts/package-info.java\346\226\207\344\273\266\350\257\246\350\247\243.md" "b/_drafts/Java/package-info.java\346\226\207\344\273\266\350\257\246\350\247\243.md"
similarity index 91%
rename from "_drafts/package-info.java\346\226\207\344\273\266\350\257\246\350\247\243.md"
rename to "_drafts/Java/package-info.java\346\226\207\344\273\266\350\257\246\350\247\243.md"
index 4e111c3..4af7d54 100644
--- "a/_drafts/package-info.java\346\226\207\344\273\266\350\257\246\350\247\243.md"
+++ "b/_drafts/Java/package-info.java\346\226\207\344\273\266\350\257\246\350\247\243.md"
@@ -1,8 +1,3 @@
-欢迎关注我的社交账号:
-
-博客园地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
# pacakge-info.java介绍
diff --git "a/_drafts/\344\270\200\344\270\252\346\257\224\350\276\203\345\205\250\351\235\242\347\232\204java\351\232\217\346\234\272\346\225\260\346\215\256\347\224\237\346\210\220\345\267\245\345\205\267\345\214\205.md" "b/_drafts/Java/\344\270\200\344\270\252\346\257\224\350\276\203\345\205\250\351\235\242\347\232\204java\351\232\217\346\234\272\346\225\260\346\215\256\347\224\237\346\210\220\345\267\245\345\205\267\345\214\205.md"
similarity index 100%
rename from "_drafts/\344\270\200\344\270\252\346\257\224\350\276\203\345\205\250\351\235\242\347\232\204java\351\232\217\346\234\272\346\225\260\346\215\256\347\224\237\346\210\220\345\267\245\345\205\267\345\214\205.md"
rename to "_drafts/Java/\344\270\200\344\270\252\346\257\224\350\276\203\345\205\250\351\235\242\347\232\204java\351\232\217\346\234\272\346\225\260\346\215\256\347\224\237\346\210\220\345\267\245\345\205\267\345\214\205.md"
diff --git "a/_drafts/\344\275\277\347\224\250CXF+Spring\345\217\221\345\270\203WebService\357\274\214\345\220\257\345\212\250\346\212\245\351\224\231.md" "b/_drafts/Java/\344\275\277\347\224\250CXF+Spring\345\217\221\345\270\203WebService\357\274\214\345\220\257\345\212\250\346\212\245\351\224\231.md"
similarity index 100%
rename from "_drafts/\344\275\277\347\224\250CXF+Spring\345\217\221\345\270\203WebService\357\274\214\345\220\257\345\212\250\346\212\245\351\224\231.md"
rename to "_drafts/Java/\344\275\277\347\224\250CXF+Spring\345\217\221\345\270\203WebService\357\274\214\345\220\257\345\212\250\346\212\245\351\224\231.md"
diff --git "a/_drafts/\345\210\251\347\224\250Spring\344\270\255\345\220\214\345\220\215Bean\347\233\270\344\272\222\350\246\206\347\233\226\347\232\204\347\211\271\346\200\247\357\274\214\345\256\232\345\210\266\345\271\263\345\217\260\347\232\204\347\261\273\345\206\205\345\256\271\343\200\202.md" "b/_drafts/Java/\345\210\251\347\224\250Spring\344\270\255\345\220\214\345\220\215Bean\347\233\270\344\272\222\350\246\206\347\233\226\347\232\204\347\211\271\346\200\247\357\274\214\345\256\232\345\210\266\345\271\263\345\217\260\347\232\204\347\261\273\345\206\205\345\256\271\343\200\202.md"
similarity index 91%
rename from "_drafts/\345\210\251\347\224\250Spring\344\270\255\345\220\214\345\220\215Bean\347\233\270\344\272\222\350\246\206\347\233\226\347\232\204\347\211\271\346\200\247\357\274\214\345\256\232\345\210\266\345\271\263\345\217\260\347\232\204\347\261\273\345\206\205\345\256\271\343\200\202.md"
rename to "_drafts/Java/\345\210\251\347\224\250Spring\344\270\255\345\220\214\345\220\215Bean\347\233\270\344\272\222\350\246\206\347\233\226\347\232\204\347\211\271\346\200\247\357\274\214\345\256\232\345\210\266\345\271\263\345\217\260\347\232\204\347\261\273\345\206\205\345\256\271\343\200\202.md"
index 8a43db9..ce95dcc 100644
--- "a/_drafts/\345\210\251\347\224\250Spring\344\270\255\345\220\214\345\220\215Bean\347\233\270\344\272\222\350\246\206\347\233\226\347\232\204\347\211\271\346\200\247\357\274\214\345\256\232\345\210\266\345\271\263\345\217\260\347\232\204\347\261\273\345\206\205\345\256\271\343\200\202.md"
+++ "b/_drafts/Java/\345\210\251\347\224\250Spring\344\270\255\345\220\214\345\220\215Bean\347\233\270\344\272\222\350\246\206\347\233\226\347\232\204\347\211\271\346\200\247\357\274\214\345\256\232\345\210\266\345\271\263\345\217\260\347\232\204\347\261\273\345\206\205\345\256\271\343\200\202.md"
@@ -1,8 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
今天处理了一个问题,J2EE项目依赖了底层平台的功能,平台JAR包中配置了一个Bean,对应的实现类也在该平台JAR包中,由于Bean的配置不是懒加载的,所以在Tomcat容器启动时就会调用该Bean对应实现类中的init方法,但是该方法会对我们的业务产生副作用。现在想屏蔽这种副作用,我们肯定不能要求底层平台去修改代码,去除该Bean。所以考虑采取hack的方法解决。
diff --git "a/_drafts/\345\211\224\351\231\244eclipse\347\232\204configuration\347\233\256\345\275\225[\350\275\254].md" "b/_drafts/Java/\345\211\224\351\231\244eclipse\347\232\204configuration\347\233\256\345\275\225[\350\275\254].md"
similarity index 91%
rename from "_drafts/\345\211\224\351\231\244eclipse\347\232\204configuration\347\233\256\345\275\225[\350\275\254].md"
rename to "_drafts/Java/\345\211\224\351\231\244eclipse\347\232\204configuration\347\233\256\345\275\225[\350\275\254].md"
index 4a3757a..794cfe6 100644
--- "a/_drafts/\345\211\224\351\231\244eclipse\347\232\204configuration\347\233\256\345\275\225[\350\275\254].md"
+++ "b/_drafts/Java/\345\211\224\351\231\244eclipse\347\232\204configuration\347\233\256\345\275\225[\350\275\254].md"
@@ -1,9 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
-
eclipse 3.4以前的版本,如果出现什么问题了,一般都会选择删除eclipse安装目录下configuration目录下除了config.ini之外的所有文件,同时在删除eclipse工作空间中的.metadata目录,这样就删除掉了eclipse的所有的配置信息,重新得到了一个类似全新安装的eclipse了,通常这种方法能够解决很多eclipse中遇到的错误。
但是,eclipse 3.4 情况就不一样了,一个全新的eclipse/configuration目录下不再是只有一个config.ini文件,另外多了三个目录:
diff --git "a/_drafts/\345\246\202\344\275\225\345\234\250\345\244\247\351\207\217jar\345\214\205\344\270\255\346\220\234\347\264\242\347\211\271\345\256\232\345\255\227\347\254\246.md" "b/_drafts/Java/\345\246\202\344\275\225\345\234\250\345\244\247\351\207\217jar\345\214\205\344\270\255\346\220\234\347\264\242\347\211\271\345\256\232\345\255\227\347\254\246.md"
similarity index 89%
rename from "_drafts/\345\246\202\344\275\225\345\234\250\345\244\247\351\207\217jar\345\214\205\344\270\255\346\220\234\347\264\242\347\211\271\345\256\232\345\255\227\347\254\246.md"
rename to "_drafts/Java/\345\246\202\344\275\225\345\234\250\345\244\247\351\207\217jar\345\214\205\344\270\255\346\220\234\347\264\242\347\211\271\345\256\232\345\255\227\347\254\246.md"
index d6d9278..d0326b4 100644
--- "a/_drafts/\345\246\202\344\275\225\345\234\250\345\244\247\351\207\217jar\345\214\205\344\270\255\346\220\234\347\264\242\347\211\271\345\256\232\345\255\227\347\254\246.md"
+++ "b/_drafts/Java/\345\246\202\344\275\225\345\234\250\345\244\247\351\207\217jar\345\214\205\344\270\255\346\220\234\347\264\242\347\211\271\345\256\232\345\255\227\347\254\246.md"
@@ -1,9 +1,3 @@
-欢迎关注我的社交账号:
-
-博客园地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
-邮箱: jiangxinnju@163.com
工作中定位某些问题时需要在jar包中搜索某些特定的字符。如果jar包数量比较少可以直接使用JD-GUI等反编译软件导出源码,但是如果jar包数目庞大,这种方式工作量就太大了。
diff --git "a/_drafts/\345\246\202\344\275\225\347\274\226\345\206\231\350\267\250\345\271\263\345\217\260\347\232\204Java\344\273\243\347\240\201.md" "b/_drafts/Java/\345\246\202\344\275\225\347\274\226\345\206\231\350\267\250\345\271\263\345\217\260\347\232\204Java\344\273\243\347\240\201.md"
similarity index 95%
rename from "_drafts/\345\246\202\344\275\225\347\274\226\345\206\231\350\267\250\345\271\263\345\217\260\347\232\204Java\344\273\243\347\240\201.md"
rename to "_drafts/Java/\345\246\202\344\275\225\347\274\226\345\206\231\350\267\250\345\271\263\345\217\260\347\232\204Java\344\273\243\347\240\201.md"
index db4880b..f4d278e 100644
--- "a/_drafts/\345\246\202\344\275\225\347\274\226\345\206\231\350\267\250\345\271\263\345\217\260\347\232\204Java\344\273\243\347\240\201.md"
+++ "b/_drafts/Java/\345\246\202\344\275\225\347\274\226\345\206\231\350\267\250\345\271\263\345\217\260\347\232\204Java\344\273\243\347\240\201.md"
@@ -1,9 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
-
使用Java语言编写应用程序最大的优点在于“一次编译,处处运行”,然而这并不是说所有的Java程序都具有跨平台的特性,事实上,相当一部分的Java程序是不能在别的操作系统上正确运行的,那么如何才能编写一个真正的跨平台的Java程序呢?
下面是在编写跨平台的Java程序是需要注意的一些事情:
diff --git "a/_drafts/\345\246\202\344\275\225\347\274\226\350\257\221Apache Hadoop2.2.0\346\272\220\344\273\243\347\240\201.md" "b/_drafts/Java/\345\246\202\344\275\225\347\274\226\350\257\221Apache Hadoop2.2.0\346\272\220\344\273\243\347\240\201.md"
similarity index 98%
rename from "_drafts/\345\246\202\344\275\225\347\274\226\350\257\221Apache Hadoop2.2.0\346\272\220\344\273\243\347\240\201.md"
rename to "_drafts/Java/\345\246\202\344\275\225\347\274\226\350\257\221Apache Hadoop2.2.0\346\272\220\344\273\243\347\240\201.md"
index 134a409..506f740 100644
--- "a/_drafts/\345\246\202\344\275\225\347\274\226\350\257\221Apache Hadoop2.2.0\346\272\220\344\273\243\347\240\201.md"
+++ "b/_drafts/Java/\345\246\202\344\275\225\347\274\226\350\257\221Apache Hadoop2.2.0\346\272\220\344\273\243\347\240\201.md"
@@ -1,11 +1,5 @@
转自(原文图片已丢失,本文修复图片,重新排版,并更正部分原文错误):http://www.superwu.cn/2013/12/26/913
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
-
Hadoop2的学习资料很少,只有官网的少数文档。如果想更深入的研究hadoop2,除了仅看官网的文档外,还要学习如何看源码,通过不断的调试跟踪源码,学习hadoop的运行机制。
# 1.安装CentOS
diff --git "a/_drafts/\351\200\232\350\277\207\350\256\276\347\275\256JDK\350\247\243\345\206\263\345\255\230\345\234\250\345\244\232\344\270\252Gradle\345\220\216\345\217\260\350\277\233\347\250\213\347\232\204\351\227\256\351\242\230.md" "b/_drafts/Java/\351\200\232\350\277\207\350\256\276\347\275\256JDK\350\247\243\345\206\263\345\255\230\345\234\250\345\244\232\344\270\252Gradle\345\220\216\345\217\260\350\277\233\347\250\213\347\232\204\351\227\256\351\242\230.md"
similarity index 100%
rename from "_drafts/\351\200\232\350\277\207\350\256\276\347\275\256JDK\350\247\243\345\206\263\345\255\230\345\234\250\345\244\232\344\270\252Gradle\345\220\216\345\217\260\350\277\233\347\250\213\347\232\204\351\227\256\351\242\230.md"
rename to "_drafts/Java/\351\200\232\350\277\207\350\256\276\347\275\256JDK\350\247\243\345\206\263\345\255\230\345\234\250\345\244\232\344\270\252Gradle\345\220\216\345\217\260\350\277\233\347\250\213\347\232\204\351\227\256\351\242\230.md"
diff --git "a/_drafts/202317061029VSCode\350\260\203\350\257\225\350\277\234\347\250\213Linux\346\234\272\345\231\250\344\270\212\347\232\204C\344\273\243\347\240\201.md" "b/_drafts/Linux/202317061029VSCode\350\260\203\350\257\225\350\277\234\347\250\213Linux\346\234\272\345\231\250\344\270\212\347\232\204C\344\273\243\347\240\201.md"
similarity index 100%
rename from "_drafts/202317061029VSCode\350\260\203\350\257\225\350\277\234\347\250\213Linux\346\234\272\345\231\250\344\270\212\347\232\204C\344\273\243\347\240\201.md"
rename to "_drafts/Linux/202317061029VSCode\350\260\203\350\257\225\350\277\234\347\250\213Linux\346\234\272\345\231\250\344\270\212\347\232\204C\344\273\243\347\240\201.md"
diff --git "a/_drafts/202401011357Ubuntu\346\211\251\345\256\271swap\346\226\207\344\273\266.md" "b/_drafts/Linux/202401011357Ubuntu\346\211\251\345\256\271swap\346\226\207\344\273\266.md"
similarity index 100%
rename from "_drafts/202401011357Ubuntu\346\211\251\345\256\271swap\346\226\207\344\273\266.md"
rename to "_drafts/Linux/202401011357Ubuntu\346\211\251\345\256\271swap\346\226\207\344\273\266.md"
diff --git "a/_drafts/Linux\344\270\213\345\256\211\350\243\205\346\234\200\346\226\260\347\232\204Eclipse.md" "b/_drafts/Linux/Linux\344\270\213\345\256\211\350\243\205\346\234\200\346\226\260\347\232\204Eclipse.md"
similarity index 86%
rename from "_drafts/Linux\344\270\213\345\256\211\350\243\205\346\234\200\346\226\260\347\232\204Eclipse.md"
rename to "_drafts/Linux/Linux\344\270\213\345\256\211\350\243\205\346\234\200\346\226\260\347\232\204Eclipse.md"
index 9319914..7a913d6 100644
--- "a/_drafts/Linux\344\270\213\345\256\211\350\243\205\346\234\200\346\226\260\347\232\204Eclipse.md"
+++ "b/_drafts/Linux/Linux\344\270\213\345\256\211\350\243\205\346\234\200\346\226\260\347\232\204Eclipse.md"
@@ -1,9 +1,3 @@
-欢迎关注我的社交账号:
-
-博客园地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
-
测试环境:
diff --git "a/_drafts/Linux\345\216\213\347\274\251\344\270\216\350\247\243\345\216\213\345\270\270\347\224\250\345\221\275\344\273\244.md" "b/_drafts/Linux/Linux\345\216\213\347\274\251\344\270\216\350\247\243\345\216\213\345\270\270\347\224\250\345\221\275\344\273\244.md"
similarity index 92%
rename from "_drafts/Linux\345\216\213\347\274\251\344\270\216\350\247\243\345\216\213\345\270\270\347\224\250\345\221\275\344\273\244.md"
rename to "_drafts/Linux/Linux\345\216\213\347\274\251\344\270\216\350\247\243\345\216\213\345\270\270\347\224\250\345\221\275\344\273\244.md"
index 11ecdcf..df339e6 100644
--- "a/_drafts/Linux\345\216\213\347\274\251\344\270\216\350\247\243\345\216\213\345\270\270\347\224\250\345\221\275\344\273\244.md"
+++ "b/_drafts/Linux/Linux\345\216\213\347\274\251\344\270\216\350\247\243\345\216\213\345\270\270\347\224\250\345\221\275\344\273\244.md"
@@ -1,8 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
```shell
diff --git "a/_drafts/Linux\345\277\253\346\215\267\351\224\256.md" "b/_drafts/Linux/Linux\345\277\253\346\215\267\351\224\256.md"
similarity index 89%
rename from "_drafts/Linux\345\277\253\346\215\267\351\224\256.md"
rename to "_drafts/Linux/Linux\345\277\253\346\215\267\351\224\256.md"
index 8d5a312..042bf68 100644
--- "a/_drafts/Linux\345\277\253\346\215\267\351\224\256.md"
+++ "b/_drafts/Linux/Linux\345\277\253\346\215\267\351\224\256.md"
@@ -1,8 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
## Shell 快捷键
diff --git "a/_drafts/Linux\347\216\257\345\242\203\344\270\213JDK_Eclipse\344\270\200\351\224\256\345\256\211\350\243\205\350\204\232\346\234\254.md" "b/_drafts/Linux/Linux\347\216\257\345\242\203\344\270\213JDK_Eclipse\344\270\200\351\224\256\345\256\211\350\243\205\350\204\232\346\234\254.md"
similarity index 100%
rename from "_drafts/Linux\347\216\257\345\242\203\344\270\213JDK_Eclipse\344\270\200\351\224\256\345\256\211\350\243\205\350\204\232\346\234\254.md"
rename to "_drafts/Linux/Linux\347\216\257\345\242\203\344\270\213JDK_Eclipse\344\270\200\351\224\256\345\256\211\350\243\205\350\204\232\346\234\254.md"
diff --git "a/_drafts/Unix_Linux\346\223\215\344\275\234\347\263\273\347\273\237\344\270\255\345\246\202\344\275\225\345\234\250sqlplus_rman\344\270\255\344\275\277\347\224\250\346\226\271\345\220\221\351\224\256.md" "b/_drafts/Linux/Unix_Linux\346\223\215\344\275\234\347\263\273\347\273\237\344\270\255\345\246\202\344\275\225\345\234\250sqlplus_rman\344\270\255\344\275\277\347\224\250\346\226\271\345\220\221\351\224\256.md"
similarity index 100%
rename from "_drafts/Unix_Linux\346\223\215\344\275\234\347\263\273\347\273\237\344\270\255\345\246\202\344\275\225\345\234\250sqlplus_rman\344\270\255\344\275\277\347\224\250\346\226\271\345\220\221\351\224\256.md"
rename to "_drafts/Linux/Unix_Linux\346\223\215\344\275\234\347\263\273\347\273\237\344\270\255\345\246\202\344\275\225\345\234\250sqlplus_rman\344\270\255\344\275\277\347\224\250\346\226\271\345\220\221\351\224\256.md"
diff --git "a/_drafts/linux\344\270\255\346\227\240 conio.h\347\232\204\350\247\243\345\206\263\345\212\236\346\263\225.md" "b/_drafts/Linux/linux\344\270\255\346\227\240 conio.h\347\232\204\350\247\243\345\206\263\345\212\236\346\263\225.md"
similarity index 100%
rename from "_drafts/linux\344\270\255\346\227\240 conio.h\347\232\204\350\247\243\345\206\263\345\212\236\346\263\225.md"
rename to "_drafts/Linux/linux\344\270\255\346\227\240 conio.h\347\232\204\350\247\243\345\206\263\345\212\236\346\263\225.md"
diff --git "a/_drafts/ssh\347\233\270\345\205\263\345\216\237\347\220\206\345\255\246\344\271\240\344\270\216\345\270\270\350\247\201\351\224\231\350\257\257\346\200\273\347\273\223.md" "b/_drafts/Linux/ssh\347\233\270\345\205\263\345\216\237\347\220\206\345\255\246\344\271\240\344\270\216\345\270\270\350\247\201\351\224\231\350\257\257\346\200\273\347\273\223.md"
similarity index 87%
rename from "_drafts/ssh\347\233\270\345\205\263\345\216\237\347\220\206\345\255\246\344\271\240\344\270\216\345\270\270\350\247\201\351\224\231\350\257\257\346\200\273\347\273\223.md"
rename to "_drafts/Linux/ssh\347\233\270\345\205\263\345\216\237\347\220\206\345\255\246\344\271\240\344\270\216\345\270\270\350\247\201\351\224\231\350\257\257\346\200\273\347\273\223.md"
index 9e59308..c3e36ec 100644
--- "a/_drafts/ssh\347\233\270\345\205\263\345\216\237\347\220\206\345\255\246\344\271\240\344\270\216\345\270\270\350\247\201\351\224\231\350\257\257\346\200\273\347\273\223.md"
+++ "b/_drafts/Linux/ssh\347\233\270\345\205\263\345\216\237\347\220\206\345\255\246\344\271\240\344\270\216\345\270\270\350\247\201\351\224\231\350\257\257\346\200\273\347\273\223.md"
@@ -1,9 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
-
## SSH基本原理与运用
diff --git "a/_drafts/\351\270\237\345\223\245\347\232\204linux\347\247\201\346\210\277\350\217\234\345\213\230\350\257\257\350\241\250.md" "b/_drafts/Linux/\351\270\237\345\223\245\347\232\204linux\347\247\201\346\210\277\350\217\234\345\213\230\350\257\257\350\241\250.md"
similarity index 97%
rename from "_drafts/\351\270\237\345\223\245\347\232\204linux\347\247\201\346\210\277\350\217\234\345\213\230\350\257\257\350\241\250.md"
rename to "_drafts/Linux/\351\270\237\345\223\245\347\232\204linux\347\247\201\346\210\277\350\217\234\345\213\230\350\257\257\350\241\250.md"
index ccadf08..e9fe2b1 100644
--- "a/_drafts/\351\270\237\345\223\245\347\232\204linux\347\247\201\346\210\277\350\217\234\345\213\230\350\257\257\350\241\250.md"
+++ "b/_drafts/Linux/\351\270\237\345\223\245\347\232\204linux\347\247\201\346\210\277\350\217\234\345\213\230\350\257\257\350\241\250.md"
@@ -1,7 +1,3 @@
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
-
鸟哥的Linux私房菜基础学习篇(第三版)简体中文勘误表(人民邮电出版社)
简体中文版书籍资料:
diff --git "a/_drafts/2014-11-04-EXE \346\226\207\344\273\266\350\275\254\346\215\242\346\210\220\345\256\211\350\243\205\347\250\213\345\272\217\346\225\231\347\250\213.md" "b/_drafts/Others/2014-11-04-EXE \346\226\207\344\273\266\350\275\254\346\215\242\346\210\220\345\256\211\350\243\205\347\250\213\345\272\217\346\225\231\347\250\213.md"
similarity index 100%
rename from "_drafts/2014-11-04-EXE \346\226\207\344\273\266\350\275\254\346\215\242\346\210\220\345\256\211\350\243\205\347\250\213\345\272\217\346\225\231\347\250\213.md"
rename to "_drafts/Others/2014-11-04-EXE \346\226\207\344\273\266\350\275\254\346\215\242\346\210\220\345\256\211\350\243\205\347\250\213\345\272\217\346\225\231\347\250\213.md"
diff --git "a/_drafts/Others/2015-10-25-\344\273\243\347\240\201\351\243\216\346\240\274\344\270\216\344\273\243\347\240\201\346\240\274\345\274\217\345\214\226\345\267\245\345\205\267.md" "b/_drafts/Others/2015-10-25-\344\273\243\347\240\201\351\243\216\346\240\274\344\270\216\344\273\243\347\240\201\346\240\274\345\274\217\345\214\226\345\267\245\345\205\267.md"
new file mode 100644
index 0000000..c5d931a
--- /dev/null
+++ "b/_drafts/Others/2015-10-25-\344\273\243\347\240\201\351\243\216\346\240\274\344\270\216\344\273\243\347\240\201\346\240\274\345\274\217\345\214\226\345\267\245\345\205\267.md"
@@ -0,0 +1,99 @@
+# 代码风格与代码格式化工具
+
+* Google Style Guides:
+* Google 开源项目风格指南——中文版(Google Style Guide):
+
+* The tidyverse style guide:
+* Google’s R Style Guide:
+
+## clang-format
+
+clang-format 位于 clang/tools/clang-format,可用于格式化 C/C++/Java/JavaScript/JSON/Objective-C/Protobuf/C# 代码。
+
+* 官网:
+
+## astyle(Artistic Style)
+
+astyle是一个免费、快速且小巧的自动格式化工具,适用于 C、C++、C++/CLI、Objective-C、C# 和 Java 源代码。
+
+* 官网:
+* 文档:
+
+### 基本命令
+
+`astyle --style=ansi main.cs`
+
+### 格式化目录
+
+使用ansi风格格式当前目录下的所有cpp,cs文件,注意在批处理文件时,"%f" 要改为"%%f"
+
+`for /R %f in (*.cpp;*.cs;) do astyle --style=ansi "%f"`
+
+### 加入到VS2008,VS2005
+
+* 工具——>外部工具——>添加
+* 标题:astyle
+* 命令:AStyle.exe (填好astyle.exe的路径)
+* 参数:--style=allman -N $(ItemDir)$(ItemFileName)$(ItemExt)
+* 初始目录:$(TargetDir)
+* 勾上“使用初始目录”
+* 点击确定完成,以后就可以在工具菜单中找到“astyle“这一项了,点击它,就可以对当前文件进行格式化操作。
+
+### 加入到VS6
+
+* Tools——>Customize——>Tools
+* 标题:astyle
+* 命令:AStyle.exe (填好astyle.exe的路径)
+* 参数:--style=ansi -s4 --suffix=.orig $(FileName)$(FileExt)
+* 初始目录:$(FileDir)
+* 勾上“Using Output Window”
+* 点击确定完成。以后就可以在工具菜单中找到“astyle“这一项了,点击它,就可以对当前文件进行格式化操作。
+
+### 加入到UltraEdit和UltraStudio
+
+* 高级-->工具配置——>外部工具——>添加
+* 命令:AStyle.exe -v --style=ansi -s4 --suffix=.orig "%f"(填好astyle.exe的路径)
+* Optiones:选择 Windows program和Save Active File.
+* Output: 选择output to list box,show dos box 和no replace。
+* 点击确定完成。以后就可以在工具菜单中找到“astyle“这一项了,点击它,就可以对当前文件进行格式化操作。
+
+### 加入到Source insight
+
+* Options-->Custom Command-->Add
+* Command:astyle
+* Run "D:\soft\astyle\astyle.exe" --style=ansi -f -p -P -U -v -n -N %f(填好astyle.exe的路径)
+* Output:不选.
+* Control: 选择pause when done和exit to window.
+* source links in output:file, then line
+* -->menu
+* add to work menu.
+* 点击确定完成。以后就可以在Work菜单中找到“astyle“这一项了,点击它,就可以对当前文件进行格式化操作。
+
+另外可以参考:在source insight中集成astyle:
+
+### 控制台目录批处理(astyle.bat)
+
+```Bash
+REM 批量将本目录中的所有C++文件用Astyle进行代码美化操作
+REM 设置Astyle命令位置和参数
+@echo off
+set astyle="astyle.exe"
+REM 循环遍历目录
+for /r . %%a in (*.cpp;*.c) do %astyle% --style=ansi --pad=oper --unpad=paren -s4 -n "%%a"
+for /r . %%a in (*.hpp;*.h) do %astyle% --style=ansi --pad=oper --unpad=paren -s4 -n "%%a"
+REM 删除所有的astyle生成文件
+for /r . %%a in (*.orig) do del "%%a"
+pause
+```
+
+## CoolFormat
+
+CoolFormat源代码格式化是一款C\C++\C#\CSS\HTML\Java\JavaScript\JSON\Objective-C\PHP\SQL\Verilog\XML代码格式化工具。软件可以快速多种风格格式化,并对语言进行着色。界面采用Office 2010风格,并有多种样式可以替换。并且支持代码高亮到网页上显示,方便博客文章之类的撰写阅读。
+
+* 官网:
+
+## Adapter for Eclipse Code Formatter
+
+允许直接从 IntelliJ 使用 Eclipse 的 Java 代码格式化工具。解决了在使用 IDEA 和 Eclipse 的团队环境中维护统一代码风格的问题。
+
+* 官网:
diff --git "a/_drafts/202301072207LaTeX\345\206\205\345\256\271\346\200\273\347\273\223.md" "b/_drafts/Others/202301072207LaTeX\345\206\205\345\256\271\346\200\273\347\273\223.md"
similarity index 100%
rename from "_drafts/202301072207LaTeX\345\206\205\345\256\271\346\200\273\347\273\223.md"
rename to "_drafts/Others/202301072207LaTeX\345\206\205\345\256\271\346\200\273\347\273\223.md"
diff --git "a/_drafts/202302262208StableDiffusionWebui\347\216\257\345\242\203\346\220\255\345\273\272.md" "b/_drafts/Others/202302262208StableDiffusionWebui\347\216\257\345\242\203\346\220\255\345\273\272.md"
similarity index 100%
rename from "_drafts/202302262208StableDiffusionWebui\347\216\257\345\242\203\346\220\255\345\273\272.md"
rename to "_drafts/Others/202302262208StableDiffusionWebui\347\216\257\345\242\203\346\220\255\345\273\272.md"
diff --git a/_drafts/Others/ApkToolBoxGUI Release Notes.md b/_drafts/Others/ApkToolBoxGUI Release Notes.md
new file mode 100644
index 0000000..09acbf6
--- /dev/null
+++ b/_drafts/Others/ApkToolBoxGUI Release Notes.md
@@ -0,0 +1,47 @@
+
+# ApkToolBoxGUI v1.0.4发布了
+
+ApkToolBoxGUI是一个方便程序员使用的工具,具有用户友好的图形界面。它是一个常用工具的集合,包括密码恢复、编码转换、时间戳转换、颜色选择器等,此外还有一些专门用于Android开发的工具(这就是为什么它被命名为ApkToolBoxGUI)。
+
+项目地址:
+
+* GitHub:
+* Gitee:
+
+[](http://www.apache.org/licenses/LICENSE-2.0)
+[](https://github.com/jiangxincode/ApkToolBoxGUI/releases)
+[](https://github.com/jiangxincode/ApkToolBoxGUI/actions/workflows/BuildAndRelease.yml)
+[](https://jiangxincode.github.io/ApkToolBoxGUI/project-reports.html)
+[](https://app.codacy.com/gh/jiangxincode/ApkToolBoxGUI/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
+[](https://github.com/jiangxincode/ApkToolBoxGUI/security/code-scanning)
+[](https://sonarcloud.io/dashboard?id=jiangxincode_ApkToolBoxGUI)
+[](https://www.codefactor.io/repository/github/jiangxincode/apktoolboxgui)
+[](https://codeclimate.com/github/jiangxincode/ApkToolBoxGUI/maintainability)
+[](https://coveralls.io/github/jiangxincode/ApkToolBoxGUI?branch=master)
+[](https://scan.coverity.com/projects/jiangxincode-apktoolboxgui)
+
+## Feature and Usage(功能和使用方式)
+
+[](https://jiangxincode.github.io/ApkToolBoxGUI)
+
+* [Password Recovery(密码恢复)](https://jiangxincode.github.io/ApkToolBoxGUI/features/recovery_file_password.html)
+* [Batch Rename(批量重命名)](https://jiangxincode.github.io/ApkToolBoxGUI/features/batch_rename.html)
+* [Check Summary(文件摘要检查)](https://jiangxincode.github.io/ApkToolBoxGUI/features/check_summary.html)
+* [Color Picker(颜色拾取器)](https://jiangxincode.github.io/ApkToolBoxGUI/features/color_picker.html)
+* [Base Convert(进制转换)](https://jiangxincode.github.io/ApkToolBoxGUI/features/convert_base.html)
+* [OS Pattern Convert(操作系统文件格式转换)](https://jiangxincode.github.io/ApkToolBoxGUI/features/convert_os_pattern.html)
+* [Time Convert(时间格式转换)](https://jiangxincode.github.io/ApkToolBoxGUI/features/convert_time_format.html)
+* [Decode Protobuf(Protobuf解码)](https://jiangxincode.github.io/ApkToolBoxGUI/features/decode_protobuf.html)
+* [Find Duplicate Files(重复文件查找)](https://jiangxincode.github.io/ApkToolBoxGUI/features/find_duplicate_files.html)
+* [Reverse Engineer(逆向工程)](https://jiangxincode.github.io/ApkToolBoxGUI/features/reverse_engineer.html)
+* [Android Develop(Android开发)](https://jiangxincode.github.io/ApkToolBoxGUI/features/android_i18n_operation.html)
+* ...
+
+## Contribute(共同参与)
+
+[](https://jiangxincode.github.io/ApkToolBoxGUI/contribute/how_to_contribute.html)
+
+## Communication Group(交流群)
+
+
\ No newline at end of file
diff --git "a/_drafts/Cache\346\250\241\346\213\237\345\231\250(CacheSim).md" "b/_drafts/Others/Cache\346\250\241\346\213\237\345\231\250(CacheSim).md"
similarity index 100%
rename from "_drafts/Cache\346\250\241\346\213\237\345\231\250(CacheSim).md"
rename to "_drafts/Others/Cache\346\250\241\346\213\237\345\231\250(CacheSim).md"
diff --git "a/_drafts/Input\346\272\220\347\240\201\350\247\243\350\257\273\342\200\224\342\200\224\344\273\216"Show tabs"\345\274\200\345\247\213.md" "b/_drafts/Others/Input\346\272\220\347\240\201\350\247\243\350\257\273\342\200\224\342\200\224\344\273\216"Show tabs"\345\274\200\345\247\213.md"
similarity index 100%
rename from "_drafts/Input\346\272\220\347\240\201\350\247\243\350\257\273\342\200\224\342\200\224\344\273\216"Show tabs"\345\274\200\345\247\213.md"
rename to "_drafts/Others/Input\346\272\220\347\240\201\350\247\243\350\257\273\342\200\224\342\200\224\344\273\216"Show tabs"\345\274\200\345\247\213.md"
diff --git a/_drafts/Lecture Notes_ Macros.md b/_drafts/Others/Lecture Notes_ Macros.md
similarity index 100%
rename from _drafts/Lecture Notes_ Macros.md
rename to _drafts/Others/Lecture Notes_ Macros.md
diff --git "a/_drafts/MIPSsim\344\275\277\347\224\250\350\257\264\346\230\216.md" "b/_drafts/Others/MIPSsim\344\275\277\347\224\250\350\257\264\346\230\216.md"
similarity index 100%
rename from "_drafts/MIPSsim\344\275\277\347\224\250\350\257\264\346\230\216.md"
rename to "_drafts/Others/MIPSsim\344\275\277\347\224\250\350\257\264\346\230\216.md"
diff --git "a/_drafts/OOAD\344\270\216UML\347\254\224\350\256\260.md" "b/_drafts/Others/OOAD\344\270\216UML\347\254\224\350\256\260.md"
similarity index 100%
rename from "_drafts/OOAD\344\270\216UML\347\254\224\350\256\260.md"
rename to "_drafts/Others/OOAD\344\270\216UML\347\254\224\350\256\260.md"
diff --git "a/_drafts/Rdseed\344\270\216SAC\347\232\204\345\256\211\350\243\205.md" "b/_drafts/Others/Rdseed\344\270\216SAC\347\232\204\345\256\211\350\243\205.md"
similarity index 90%
rename from "_drafts/Rdseed\344\270\216SAC\347\232\204\345\256\211\350\243\205.md"
rename to "_drafts/Others/Rdseed\344\270\216SAC\347\232\204\345\256\211\350\243\205.md"
index 45067ee..872df55 100644
--- "a/_drafts/Rdseed\344\270\216SAC\347\232\204\345\256\211\350\243\205.md"
+++ "b/_drafts/Others/Rdseed\344\270\216SAC\347\232\204\345\256\211\350\243\205.md"
@@ -1,8 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
## Rdseed的安装
diff --git "a/_drafts/SVN+Apache\345\237\237\347\224\250\346\210\267\350\256\244\350\257\201\351\205\215\347\275\256\346\226\271\346\263\225_Windows(\350\275\254\357\274\214\351\207\215\346\226\260\346\216\222\347\211\210\357\274\214\351\203\250\345\210\206\345\206\205\345\256\271\346\233\264\346\226\260\344\274\230\345\214\226).md" "b/_drafts/Others/SVN+Apache\345\237\237\347\224\250\346\210\267\350\256\244\350\257\201\351\205\215\347\275\256\346\226\271\346\263\225_Windows(\350\275\254\357\274\214\351\207\215\346\226\260\346\216\222\347\211\210\357\274\214\351\203\250\345\210\206\345\206\205\345\256\271\346\233\264\346\226\260\344\274\230\345\214\226).md"
similarity index 96%
rename from "_drafts/SVN+Apache\345\237\237\347\224\250\346\210\267\350\256\244\350\257\201\351\205\215\347\275\256\346\226\271\346\263\225_Windows(\350\275\254\357\274\214\351\207\215\346\226\260\346\216\222\347\211\210\357\274\214\351\203\250\345\210\206\345\206\205\345\256\271\346\233\264\346\226\260\344\274\230\345\214\226).md"
rename to "_drafts/Others/SVN+Apache\345\237\237\347\224\250\346\210\267\350\256\244\350\257\201\351\205\215\347\275\256\346\226\271\346\263\225_Windows(\350\275\254\357\274\214\351\207\215\346\226\260\346\216\222\347\211\210\357\274\214\351\203\250\345\210\206\345\206\205\345\256\271\346\233\264\346\226\260\344\274\230\345\214\226).md"
index 4d1b2a1..df51a06 100644
--- "a/_drafts/SVN+Apache\345\237\237\347\224\250\346\210\267\350\256\244\350\257\201\351\205\215\347\275\256\346\226\271\346\263\225_Windows(\350\275\254\357\274\214\351\207\215\346\226\260\346\216\222\347\211\210\357\274\214\351\203\250\345\210\206\345\206\205\345\256\271\346\233\264\346\226\260\344\274\230\345\214\226).md"
+++ "b/_drafts/Others/SVN+Apache\345\237\237\347\224\250\346\210\267\350\256\244\350\257\201\351\205\215\347\275\256\346\226\271\346\263\225_Windows(\350\275\254\357\274\214\351\207\215\346\226\260\346\216\222\347\211\210\357\274\214\351\203\250\345\210\206\345\206\205\345\256\271\346\233\264\346\226\260\344\274\230\345\214\226).md"
@@ -1,8 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
# 背景说明
diff --git a/_drafts/Use the SVN command-line tool.md b/_drafts/Others/Use the SVN command-line tool.md
similarity index 100%
rename from _drafts/Use the SVN command-line tool.md
rename to _drafts/Others/Use the SVN command-line tool.md
diff --git "a/_drafts/VIM\345\270\270\350\247\201\347\224\250\346\263\225\346\200\273\347\273\223.md" "b/_drafts/Others/VIM\345\270\270\350\247\201\347\224\250\346\263\225\346\200\273\347\273\223.md"
similarity index 97%
rename from "_drafts/VIM\345\270\270\350\247\201\347\224\250\346\263\225\346\200\273\347\273\223.md"
rename to "_drafts/Others/VIM\345\270\270\350\247\201\347\224\250\346\263\225\346\200\273\347\273\223.md"
index dadba7f..fc33f0b 100644
--- "a/_drafts/VIM\345\270\270\350\247\201\347\224\250\346\263\225\346\200\273\347\273\223.md"
+++ "b/_drafts/Others/VIM\345\270\270\350\247\201\347\224\250\346\263\225\346\200\273\347\273\223.md"
@@ -1,8 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
## vim中光标如何回到上一次位置
diff --git "a/_drafts/VirtualBox\347\233\270\345\205\263\351\227\256\351\242\230\346\200\273\347\273\223.md" "b/_drafts/Others/VirtualBox\347\233\270\345\205\263\351\227\256\351\242\230\346\200\273\347\273\223.md"
similarity index 93%
rename from "_drafts/VirtualBox\347\233\270\345\205\263\351\227\256\351\242\230\346\200\273\347\273\223.md"
rename to "_drafts/Others/VirtualBox\347\233\270\345\205\263\351\227\256\351\242\230\346\200\273\347\273\223.md"
index ec01b2a..3248873 100644
--- "a/_drafts/VirtualBox\347\233\270\345\205\263\351\227\256\351\242\230\346\200\273\347\273\223.md"
+++ "b/_drafts/Others/VirtualBox\347\233\270\345\205\263\351\227\256\351\242\230\346\200\273\347\273\223.md"
@@ -1,10 +1,3 @@
-欢迎关注我的社交账号:
-
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
-
* VirtualBox Images: http://www.osboxes.org/virtualbox-images
* VirtualBoxes – Free VirtualBox® Images: https://virtualboxes.org/images
diff --git "a/_drafts/Windows\345\271\263\345\217\260\344\270\213\345\256\211\350\243\205Eclipse\346\217\222\344\273\266\357\274\214\345\274\200\345\217\221Hadoop\345\272\224\347\224\250.md" "b/_drafts/Others/Windows\345\271\263\345\217\260\344\270\213\345\256\211\350\243\205Eclipse\346\217\222\344\273\266\357\274\214\345\274\200\345\217\221Hadoop\345\272\224\347\224\250.md"
similarity index 98%
rename from "_drafts/Windows\345\271\263\345\217\260\344\270\213\345\256\211\350\243\205Eclipse\346\217\222\344\273\266\357\274\214\345\274\200\345\217\221Hadoop\345\272\224\347\224\250.md"
rename to "_drafts/Others/Windows\345\271\263\345\217\260\344\270\213\345\256\211\350\243\205Eclipse\346\217\222\344\273\266\357\274\214\345\274\200\345\217\221Hadoop\345\272\224\347\224\250.md"
index 895e0d8..e256789 100644
--- "a/_drafts/Windows\345\271\263\345\217\260\344\270\213\345\256\211\350\243\205Eclipse\346\217\222\344\273\266\357\274\214\345\274\200\345\217\221Hadoop\345\272\224\347\224\250.md"
+++ "b/_drafts/Others/Windows\345\271\263\345\217\260\344\270\213\345\256\211\350\243\205Eclipse\346\217\222\344\273\266\357\274\214\345\274\200\345\217\221Hadoop\345\272\224\347\224\250.md"
@@ -1,9 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
-
# 安装插件
diff --git "a/_drafts/Windows\346\227\245\345\277\227\346\237\245\347\234\213\345\267\245\345\205\267\345\220\210\351\233\206.md" "b/_drafts/Others/Windows\346\227\245\345\277\227\346\237\245\347\234\213\345\267\245\345\205\267\345\220\210\351\233\206.md"
similarity index 86%
rename from "_drafts/Windows\346\227\245\345\277\227\346\237\245\347\234\213\345\267\245\345\205\267\345\220\210\351\233\206.md"
rename to "_drafts/Others/Windows\346\227\245\345\277\227\346\237\245\347\234\213\345\267\245\345\205\267\345\220\210\351\233\206.md"
index e776637..431df56 100644
--- "a/_drafts/Windows\346\227\245\345\277\227\346\237\245\347\234\213\345\267\245\345\205\267\345\220\210\351\233\206.md"
+++ "b/_drafts/Others/Windows\346\227\245\345\277\227\346\237\245\347\234\213\345\267\245\345\205\267\345\220\210\351\233\206.md"
@@ -1,10 +1,3 @@
-欢迎关注我的社交账号:
-
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
-
-希望可以和大家多多交流。
平时在Linux下查看日志,使用tail、grep、find等命令还比较方便,后来需要在Windows中处理一些问题,发现缺少类似的功能,比如tailf实时输出,于是在网上收集了一些相关的小工具,希望能够帮助到大家。
diff --git "a/_drafts/XShell\344\275\277\347\224\250\351\227\256\351\242\230\346\261\207\346\200\273.md" "b/_drafts/Others/XShell\344\275\277\347\224\250\351\227\256\351\242\230\346\261\207\346\200\273.md"
similarity index 100%
rename from "_drafts/XShell\344\275\277\347\224\250\351\227\256\351\242\230\346\261\207\346\200\273.md"
rename to "_drafts/Others/XShell\344\275\277\347\224\250\351\227\256\351\242\230\346\261\207\346\200\273.md"
diff --git "a/_drafts/openmpi\345\207\272\347\216\260Segmentation Fault\350\200\214\347\273\210\346\255\242\350\277\220\347\256\227.md" "b/_drafts/Others/openmpi\345\207\272\347\216\260Segmentation Fault\350\200\214\347\273\210\346\255\242\350\277\220\347\256\227.md"
similarity index 70%
rename from "_drafts/openmpi\345\207\272\347\216\260Segmentation Fault\350\200\214\347\273\210\346\255\242\350\277\220\347\256\227.md"
rename to "_drafts/Others/openmpi\345\207\272\347\216\260Segmentation Fault\350\200\214\347\273\210\346\255\242\350\277\220\347\256\227.md"
index 9c74652..07f185a 100644
--- "a/_drafts/openmpi\345\207\272\347\216\260Segmentation Fault\350\200\214\347\273\210\346\255\242\350\277\220\347\256\227.md"
+++ "b/_drafts/Others/openmpi\345\207\272\347\216\260Segmentation Fault\350\200\214\347\273\210\346\255\242\350\277\220\347\256\227.md"
@@ -1,10 +1,3 @@
-欢迎关注我的社交账号:
-
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
-
```
mpirun noticed that process rank 1 with PID 3716 on node localhost.localdomain exited on signal 11 (Segmentation fault).
diff --git "a/_drafts/tcpdump\346\215\225\346\215\211\346\240\267\344\276\213.md" "b/_drafts/Others/tcpdump\346\215\225\346\215\211\346\240\267\344\276\213.md"
similarity index 93%
rename from "_drafts/tcpdump\346\215\225\346\215\211\346\240\267\344\276\213.md"
rename to "_drafts/Others/tcpdump\346\215\225\346\215\211\346\240\267\344\276\213.md"
index 2b24dac..c3e0c17 100644
--- "a/_drafts/tcpdump\346\215\225\346\215\211\346\240\267\344\276\213.md"
+++ "b/_drafts/Others/tcpdump\346\215\225\346\215\211\346\240\267\344\276\213.md"
@@ -1,9 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
-
```shell
diff --git "a/_drafts/\344\270\200\344\270\252\347\224\261\344\272\216\347\275\221\347\273\234\351\227\256\351\242\230\345\257\274\350\207\264\347\232\204\346\234\215\345\212\241\346\227\240\346\263\225\344\275\277\347\224\250\342\200\224\342\200\224\350\260\203\350\257\225\350\277\207\347\250\213\346\200\273\347\273\223.md" "b/_drafts/Others/\344\270\200\344\270\252\347\224\261\344\272\216\347\275\221\347\273\234\351\227\256\351\242\230\345\257\274\350\207\264\347\232\204\346\234\215\345\212\241\346\227\240\346\263\225\344\275\277\347\224\250\342\200\224\342\200\224\350\260\203\350\257\225\350\277\207\347\250\213\346\200\273\347\273\223.md"
similarity index 93%
rename from "_drafts/\344\270\200\344\270\252\347\224\261\344\272\216\347\275\221\347\273\234\351\227\256\351\242\230\345\257\274\350\207\264\347\232\204\346\234\215\345\212\241\346\227\240\346\263\225\344\275\277\347\224\250\342\200\224\342\200\224\350\260\203\350\257\225\350\277\207\347\250\213\346\200\273\347\273\223.md"
rename to "_drafts/Others/\344\270\200\344\270\252\347\224\261\344\272\216\347\275\221\347\273\234\351\227\256\351\242\230\345\257\274\350\207\264\347\232\204\346\234\215\345\212\241\346\227\240\346\263\225\344\275\277\347\224\250\342\200\224\342\200\224\350\260\203\350\257\225\350\277\207\347\250\213\346\200\273\347\273\223.md"
index 5b93218..aea131b 100644
--- "a/_drafts/\344\270\200\344\270\252\347\224\261\344\272\216\347\275\221\347\273\234\351\227\256\351\242\230\345\257\274\350\207\264\347\232\204\346\234\215\345\212\241\346\227\240\346\263\225\344\275\277\347\224\250\342\200\224\342\200\224\350\260\203\350\257\225\350\277\207\347\250\213\346\200\273\347\273\223.md"
+++ "b/_drafts/Others/\344\270\200\344\270\252\347\224\261\344\272\216\347\275\221\347\273\234\351\227\256\351\242\230\345\257\274\350\207\264\347\232\204\346\234\215\345\212\241\346\227\240\346\263\225\344\275\277\347\224\250\342\200\224\342\200\224\350\260\203\350\257\225\350\277\207\347\250\213\346\200\273\347\273\223.md"
@@ -1,9 +1,3 @@
-欢迎和大家交流技术相关问题:
-
-* 邮箱: jiangxinnju@163.com
-* 博客园地址: http://www.cnblogs.com/jiangxinnju
-* GitHub地址: https://github.com/jiangxincode
-* 知乎地址: https://www.zhihu.com/people/jiangxinnju
最近测试经常让我处理一个问题,就是网站服务无法使用,通过Windows跳转机,使用Chrome浏览器访问服务首页,页面什么也没有展示,使用Chrome的F12调试窗口,发现并没有和服务端SLB的任何交互请求。查看后台门户的相关进程,均正常运行。查看后台日志,没有发现明显的错误。访问SLB的页面管理系统,发现所需服务均正常注册。定位无果后所以尝试重启,不定次数重启之后,清除浏览器缓存,继续登录,发现服务又能够正常访问。但是再次重启后,问题复现。
diff --git "a/_drafts/\344\270\200\344\270\252\347\250\213\345\272\217\345\221\230\350\203\275\345\244\237\346\216\247\345\210\266\345\244\232\345\260\221\350\241\214\344\273\243\347\240\201.md" "b/_drafts/Others/\344\270\200\344\270\252\347\250\213\345\272\217\345\221\230\350\203\275\345\244\237\346\216\247\345\210\266\345\244\232\345\260\221\350\241\214\344\273\243\347\240\201.md"
similarity index 100%
rename from "_drafts/\344\270\200\344\270\252\347\250\213\345\272\217\345\221\230\350\203\275\345\244\237\346\216\247\345\210\266\345\244\232\345\260\221\350\241\214\344\273\243\347\240\201.md"
rename to "_drafts/Others/\344\270\200\344\270\252\347\250\213\345\272\217\345\221\230\350\203\275\345\244\237\346\216\247\345\210\266\345\244\232\345\260\221\350\241\214\344\273\243\347\240\201.md"
diff --git "a/_drafts/\344\270\215\345\274\225\345\205\245\346\226\260\347\232\204\346\225\260\347\273\204\357\274\214\345\256\236\347\216\260\346\225\260\347\273\204\345\205\203\347\264\240\344\272\244\346\215\242\344\275\215\347\275\256\345\207\275\346\225\260.md" "b/_drafts/Others/\344\270\215\345\274\225\345\205\245\346\226\260\347\232\204\346\225\260\347\273\204\357\274\214\345\256\236\347\216\260\346\225\260\347\273\204\345\205\203\347\264\240\344\272\244\346\215\242\344\275\215\347\275\256\345\207\275\346\225\260.md"
similarity index 100%
rename from "_drafts/\344\270\215\345\274\225\345\205\245\346\226\260\347\232\204\346\225\260\347\273\204\357\274\214\345\256\236\347\216\260\346\225\260\347\273\204\345\205\203\347\264\240\344\272\244\346\215\242\344\275\215\347\275\256\345\207\275\346\225\260.md"
rename to "_drafts/Others/\344\270\215\345\274\225\345\205\245\346\226\260\347\232\204\346\225\260\347\273\204\357\274\214\345\256\236\347\216\260\346\225\260\347\273\204\345\205\203\347\264\240\344\272\244\346\215\242\344\275\215\347\275\256\345\207\275\346\225\260.md"
diff --git "a/_drafts/\344\270\272\344\273\200\344\271\210\345\244\247\345\244\232\346\225\260\347\274\226\347\250\213\350\257\255\350\250\200\344\270\255\347\232\204\346\225\260\347\273\204\351\203\275\344\273\2160\345\274\200\345\247\213.md" "b/_drafts/Others/\344\270\272\344\273\200\344\271\210\345\244\247\345\244\232\346\225\260\347\274\226\347\250\213\350\257\255\350\250\200\344\270\255\347\232\204\346\225\260\347\273\204\351\203\275\344\273\2160\345\274\200\345\247\213.md"
similarity index 100%
rename from "_drafts/\344\270\272\344\273\200\344\271\210\345\244\247\345\244\232\346\225\260\347\274\226\347\250\213\350\257\255\350\250\200\344\270\255\347\232\204\346\225\260\347\273\204\351\203\275\344\273\2160\345\274\200\345\247\213.md"
rename to "_drafts/Others/\344\270\272\344\273\200\344\271\210\345\244\247\345\244\232\346\225\260\347\274\226\347\250\213\350\257\255\350\250\200\344\270\255\347\232\204\346\225\260\347\273\204\351\203\275\344\273\2160\345\274\200\345\247\213.md"
diff --git "a/_drafts/\344\270\272\344\273\200\344\271\210\346\210\221\344\273\254\346\200\273\346\230\257\345\256\214\344\270\215\346\210\220\347\233\256\346\240\207.md" "b/_drafts/Others/\344\270\272\344\273\200\344\271\210\346\210\221\344\273\254\346\200\273\346\230\257\345\256\214\344\270\215\346\210\220\347\233\256\346\240\207.md"
similarity index 100%
rename from "_drafts/\344\270\272\344\273\200\344\271\210\346\210\221\344\273\254\346\200\273\346\230\257\345\256\214\344\270\215\346\210\220\347\233\256\346\240\207.md"
rename to "_drafts/Others/\344\270\272\344\273\200\344\271\210\346\210\221\344\273\254\346\200\273\346\230\257\345\256\214\344\270\215\346\210\220\347\233\256\346\240\207.md"
diff --git "a/_drafts/\344\275\277\347\224\250OpenSSL\345\256\236\347\216\260X25519\347\247\230\351\222\245\345\215\217\345\225\206\345\212\237\350\203\275.md" "b/_drafts/Others/\344\275\277\347\224\250OpenSSL\345\256\236\347\216\260X25519\347\247\230\351\222\245\345\215\217\345\225\206\345\212\237\350\203\275.md"
similarity index 100%
rename from "_drafts/\344\275\277\347\224\250OpenSSL\345\256\236\347\216\260X25519\347\247\230\351\222\245\345\215\217\345\225\206\345\212\237\350\203\275.md"
rename to "_drafts/Others/\344\275\277\347\224\250OpenSSL\345\256\236\347\216\260X25519\347\247\230\351\222\245\345\215\217\345\225\206\345\212\237\350\203\275.md"
diff --git "a/_drafts/\344\275\277\347\224\250PowerShell\347\256\200\345\214\226\346\210\221\347\232\204\345\267\245\344\275\234.md" "b/_drafts/Others/\344\275\277\347\224\250PowerShell\347\256\200\345\214\226\346\210\221\347\232\204\345\267\245\344\275\234.md"
similarity index 90%
rename from "_drafts/\344\275\277\347\224\250PowerShell\347\256\200\345\214\226\346\210\221\347\232\204\345\267\245\344\275\234.md"
rename to "_drafts/Others/\344\275\277\347\224\250PowerShell\347\256\200\345\214\226\346\210\221\347\232\204\345\267\245\344\275\234.md"
index 403e35a..1480846 100644
--- "a/_drafts/\344\275\277\347\224\250PowerShell\347\256\200\345\214\226\346\210\221\347\232\204\345\267\245\344\275\234.md"
+++ "b/_drafts/Others/\344\275\277\347\224\250PowerShell\347\256\200\345\214\226\346\210\221\347\232\204\345\267\245\344\275\234.md"
@@ -1,8 +1,3 @@
-欢迎关注我的社交账号:
-
-博客园地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
在这几年的编程学习和工作中,我积累的许多轻量级的小工具,比如Everything,BeyondCompare,BatchRename、HperSnap等等,这些软件都是绿色软件,无需安装,即使重装系统也可以很容易的迁移。但是由于工具比较多,不可能在桌面上为这些工具全部设置快捷方式,于是只能使用命令行进行调用。程序员们应该都知道,如果想要在cmd或者powershell中调用这些小工具,就要把这些工具的可执行文件的所在目录添加到系统环境变量Path之中。但是这样手工去添加太麻烦了,因为要添加的目录比较多,而且之后如果还想加入新的工具就必须继续设置环境变量,最重要的一点是每次重装系统还要重新设置一遍。作为一个程序员怎么去做这么笨的事情呢?于是我写了一个powershell配置脚本,让powershell每次启动时都去读该脚本,设置环境变量。
首先介绍一下我的工具集的结构:
diff --git "a/_drafts/\345\205\263\344\272\216\345\274\272\345\210\266\345\274\217\357\274\210\345\221\275\344\273\244\345\274\217\357\274\211\350\257\255\350\250\200\345\222\214\345\243\260\346\230\216\345\274\217\350\257\255\350\250\200\347\232\204\345\214\272\345\210\253.md" "b/_drafts/Others/\345\205\263\344\272\216\345\274\272\345\210\266\345\274\217\357\274\210\345\221\275\344\273\244\345\274\217\357\274\211\350\257\255\350\250\200\345\222\214\345\243\260\346\230\216\345\274\217\350\257\255\350\250\200\347\232\204\345\214\272\345\210\253.md"
similarity index 100%
rename from "_drafts/\345\205\263\344\272\216\345\274\272\345\210\266\345\274\217\357\274\210\345\221\275\344\273\244\345\274\217\357\274\211\350\257\255\350\250\200\345\222\214\345\243\260\346\230\216\345\274\217\350\257\255\350\250\200\347\232\204\345\214\272\345\210\253.md"
rename to "_drafts/Others/\345\205\263\344\272\216\345\274\272\345\210\266\345\274\217\357\274\210\345\221\275\344\273\244\345\274\217\357\274\211\350\257\255\350\250\200\345\222\214\345\243\260\346\230\216\345\274\217\350\257\255\350\250\200\347\232\204\345\214\272\345\210\253.md"
diff --git "a/_drafts/\345\205\263\344\272\216\350\256\260\345\275\225\346\227\245\345\277\227\347\232\204\345\207\240\344\270\252\345\260\217\345\277\203\345\276\227.md" "b/_drafts/Others/\345\205\263\344\272\216\350\256\260\345\275\225\346\227\245\345\277\227\347\232\204\345\207\240\344\270\252\345\260\217\345\277\203\345\276\227.md"
similarity index 82%
rename from "_drafts/\345\205\263\344\272\216\350\256\260\345\275\225\346\227\245\345\277\227\347\232\204\345\207\240\344\270\252\345\260\217\345\277\203\345\276\227.md"
rename to "_drafts/Others/\345\205\263\344\272\216\350\256\260\345\275\225\346\227\245\345\277\227\347\232\204\345\207\240\344\270\252\345\260\217\345\277\203\345\276\227.md"
index 11a9fe5..e13459e 100644
--- "a/_drafts/\345\205\263\344\272\216\350\256\260\345\275\225\346\227\245\345\277\227\347\232\204\345\207\240\344\270\252\345\260\217\345\277\203\345\276\227.md"
+++ "b/_drafts/Others/\345\205\263\344\272\216\350\256\260\345\275\225\346\227\245\345\277\227\347\232\204\345\207\240\344\270\252\345\260\217\345\277\203\345\276\227.md"
@@ -1,8 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
如何记录好日志其实是个很值得探讨的事情,下面两篇文章介绍了一些基本的原则:
diff --git "a/_drafts/\345\210\206\350\257\215\345\267\245\345\205\267\346\257\224\350\276\203\357\274\210\350\275\254\357\274\211.md" "b/_drafts/Others/\345\210\206\350\257\215\345\267\245\345\205\267\346\257\224\350\276\203\357\274\210\350\275\254\357\274\211.md"
similarity index 97%
rename from "_drafts/\345\210\206\350\257\215\345\267\245\345\205\267\346\257\224\350\276\203\357\274\210\350\275\254\357\274\211.md"
rename to "_drafts/Others/\345\210\206\350\257\215\345\267\245\345\205\267\346\257\224\350\276\203\357\274\210\350\275\254\357\274\211.md"
index 01906f9..826d337 100644
--- "a/_drafts/\345\210\206\350\257\215\345\267\245\345\205\267\346\257\224\350\276\203\357\274\210\350\275\254\357\274\211.md"
+++ "b/_drafts/Others/\345\210\206\350\257\215\345\267\245\345\205\267\346\257\224\350\276\203\357\274\210\350\275\254\357\274\211.md"
@@ -1,6 +1,3 @@
-* 博客园地址: http://www.cnblogs.com/jiangxinnju
-* GitHub地址: https://github.com/jiangxincode
-* 知乎地址: https://www.zhihu.com/people/jiangxinnju
# IKAnalyzer
diff --git "a/_drafts/\345\210\244\346\226\255\344\270\200\344\270\252\346\225\260\346\230\257\344\270\215\346\230\2572\347\232\204\345\271\202.md" "b/_drafts/Others/\345\210\244\346\226\255\344\270\200\344\270\252\346\225\260\346\230\257\344\270\215\346\230\2572\347\232\204\345\271\202.md"
similarity index 100%
rename from "_drafts/\345\210\244\346\226\255\344\270\200\344\270\252\346\225\260\346\230\257\344\270\215\346\230\2572\347\232\204\345\271\202.md"
rename to "_drafts/Others/\345\210\244\346\226\255\344\270\200\344\270\252\346\225\260\346\230\257\344\270\215\346\230\2572\347\232\204\345\271\202.md"
diff --git "a/_drafts/\345\210\266\344\275\234Aspose CHM\346\226\207\346\241\243\347\232\204\350\277\207\347\250\213\350\256\260\345\275\225.md" "b/_drafts/Others/\345\210\266\344\275\234Aspose CHM\346\226\207\346\241\243\347\232\204\350\277\207\347\250\213\350\256\260\345\275\225.md"
similarity index 93%
rename from "_drafts/\345\210\266\344\275\234Aspose CHM\346\226\207\346\241\243\347\232\204\350\277\207\347\250\213\350\256\260\345\275\225.md"
rename to "_drafts/Others/\345\210\266\344\275\234Aspose CHM\346\226\207\346\241\243\347\232\204\350\277\207\347\250\213\350\256\260\345\275\225.md"
index 328ebe1..d782c4e 100644
--- "a/_drafts/\345\210\266\344\275\234Aspose CHM\346\226\207\346\241\243\347\232\204\350\277\207\347\250\213\350\256\260\345\275\225.md"
+++ "b/_drafts/Others/\345\210\266\344\275\234Aspose CHM\346\226\207\346\241\243\347\232\204\350\277\207\347\250\213\350\256\260\345\275\225.md"
@@ -1,8 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
最近公司需要使用Aspose组件开发相关内容,但是网上找不到理想的参考文档,官网访问速度也慢的可以。所以打算自己做份CHM文档,做的过程中遇到很多困难,这里记录一下。
第一步是在Aspose官网上把javadoc文档爬取出来,我使用的工具是TeleportPro。爬取的网址是
diff --git "a/_drafts/\345\215\216\344\270\272\351\235\242\350\257\225\351\242\230\342\200\224\342\200\224\344\270\200\351\201\223\345\205\263\344\272\216\346\214\207\351\222\210\346\226\271\351\235\242\347\232\204\347\274\226\347\250\213\351\242\230(C_C++).md" "b/_drafts/Others/\345\215\216\344\270\272\351\235\242\350\257\225\351\242\230\342\200\224\342\200\224\344\270\200\351\201\223\345\205\263\344\272\216\346\214\207\351\222\210\346\226\271\351\235\242\347\232\204\347\274\226\347\250\213\351\242\230(C_C++).md"
similarity index 100%
rename from "_drafts/\345\215\216\344\270\272\351\235\242\350\257\225\351\242\230\342\200\224\342\200\224\344\270\200\351\201\223\345\205\263\344\272\216\346\214\207\351\222\210\346\226\271\351\235\242\347\232\204\347\274\226\347\250\213\351\242\230(C_C++).md"
rename to "_drafts/Others/\345\215\216\344\270\272\351\235\242\350\257\225\351\242\230\342\200\224\342\200\224\344\270\200\351\201\223\345\205\263\344\272\216\346\214\207\351\222\210\346\226\271\351\235\242\347\232\204\347\274\226\347\250\213\351\242\230(C_C++).md"
diff --git "a/_drafts/\345\215\216\344\270\272\351\235\242\350\257\225\351\242\230\342\200\224\342\200\224\345\215\225\345\220\221\351\223\276\350\241\250\345\200\222\350\275\254\357\274\210\344\270\200\346\254\241\351\201\215\345\216\206\357\274\211.md" "b/_drafts/Others/\345\215\216\344\270\272\351\235\242\350\257\225\351\242\230\342\200\224\342\200\224\345\215\225\345\220\221\351\223\276\350\241\250\345\200\222\350\275\254\357\274\210\344\270\200\346\254\241\351\201\215\345\216\206\357\274\211.md"
similarity index 100%
rename from "_drafts/\345\215\216\344\270\272\351\235\242\350\257\225\351\242\230\342\200\224\342\200\224\345\215\225\345\220\221\351\223\276\350\241\250\345\200\222\350\275\254\357\274\210\344\270\200\346\254\241\351\201\215\345\216\206\357\274\211.md"
rename to "_drafts/Others/\345\215\216\344\270\272\351\235\242\350\257\225\351\242\230\342\200\224\342\200\224\345\215\225\345\220\221\351\223\276\350\241\250\345\200\222\350\275\254\357\274\210\344\270\200\346\254\241\351\201\215\345\216\206\357\274\211.md"
diff --git "a/_drafts/\345\215\216\344\270\272\351\235\242\350\257\225\351\242\230\342\200\224\342\200\224\347\272\246\347\221\237\345\244\253\351\227\256\351\242\230\347\232\204C++\347\256\200\345\215\225\345\256\236\347\216\260\357\274\210\345\276\252\347\216\257\351\223\276\350\241\250\357\274\211.md" "b/_drafts/Others/\345\215\216\344\270\272\351\235\242\350\257\225\351\242\230\342\200\224\342\200\224\347\272\246\347\221\237\345\244\253\351\227\256\351\242\230\347\232\204C++\347\256\200\345\215\225\345\256\236\347\216\260\357\274\210\345\276\252\347\216\257\351\223\276\350\241\250\357\274\211.md"
similarity index 100%
rename from "_drafts/\345\215\216\344\270\272\351\235\242\350\257\225\351\242\230\342\200\224\342\200\224\347\272\246\347\221\237\345\244\253\351\227\256\351\242\230\347\232\204C++\347\256\200\345\215\225\345\256\236\347\216\260\357\274\210\345\276\252\347\216\257\351\223\276\350\241\250\357\274\211.md"
rename to "_drafts/Others/\345\215\216\344\270\272\351\235\242\350\257\225\351\242\230\342\200\224\342\200\224\347\272\246\347\221\237\345\244\253\351\227\256\351\242\230\347\232\204C++\347\256\200\345\215\225\345\256\236\347\216\260\357\274\210\345\276\252\347\216\257\351\223\276\350\241\250\357\274\211.md"
diff --git "a/_drafts/\345\234\250 Windows \344\270\212\345\256\211\350\243\205 Hadoop \346\225\231\347\250\213\357\274\210\350\275\254\357\274\211.md" "b/_drafts/Others/\345\234\250 Windows \344\270\212\345\256\211\350\243\205 Hadoop \346\225\231\347\250\213\357\274\210\350\275\254\357\274\211.md"
similarity index 97%
rename from "_drafts/\345\234\250 Windows \344\270\212\345\256\211\350\243\205 Hadoop \346\225\231\347\250\213\357\274\210\350\275\254\357\274\211.md"
rename to "_drafts/Others/\345\234\250 Windows \344\270\212\345\256\211\350\243\205 Hadoop \346\225\231\347\250\213\357\274\210\350\275\254\357\274\211.md"
index ee93430..4fd0587 100644
--- "a/_drafts/\345\234\250 Windows \344\270\212\345\256\211\350\243\205 Hadoop \346\225\231\347\250\213\357\274\210\350\275\254\357\274\211.md"
+++ "b/_drafts/Others/\345\234\250 Windows \344\270\212\345\256\211\350\243\205 Hadoop \346\225\231\347\250\213\357\274\210\350\275\254\357\274\211.md"
@@ -1,10 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
-
-
在 Windows 上安装 Hadoop 教程
diff --git "a/_drafts/\345\234\250\345\267\245\344\275\234\344\270\255\351\201\207\345\210\260\347\232\204\351\227\256\351\242\230.md" "b/_drafts/Others/\345\234\250\345\267\245\344\275\234\344\270\255\351\201\207\345\210\260\347\232\204\351\227\256\351\242\230.md"
similarity index 95%
rename from "_drafts/\345\234\250\345\267\245\344\275\234\344\270\255\351\201\207\345\210\260\347\232\204\351\227\256\351\242\230.md"
rename to "_drafts/Others/\345\234\250\345\267\245\344\275\234\344\270\255\351\201\207\345\210\260\347\232\204\351\227\256\351\242\230.md"
index b945806..babb72e 100644
--- "a/_drafts/\345\234\250\345\267\245\344\275\234\344\270\255\351\201\207\345\210\260\347\232\204\351\227\256\351\242\230.md"
+++ "b/_drafts/Others/\345\234\250\345\267\245\344\275\234\344\270\255\351\201\207\345\210\260\347\232\204\351\227\256\351\242\230.md"
@@ -1,8 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
最近我经常要更改应用中的一些功能,其实要做的事情比较简单,但是也很繁琐,这里记录一下。由于只是实现一些小的功能接口,不会更改网站的显示内容,所以不能或者很难通过网页直接查看,所以我一般是按照下面的步骤进行处理。
diff --git "a/_drafts/\345\237\272\344\272\216\345\257\271\350\261\241\345\222\214\351\235\242\345\220\221\345\257\271\350\261\241\347\232\204\345\214\272\345\210\253.md" "b/_drafts/Others/\345\237\272\344\272\216\345\257\271\350\261\241\345\222\214\351\235\242\345\220\221\345\257\271\350\261\241\347\232\204\345\214\272\345\210\253.md"
similarity index 100%
rename from "_drafts/\345\237\272\344\272\216\345\257\271\350\261\241\345\222\214\351\235\242\345\220\221\345\257\271\350\261\241\347\232\204\345\214\272\345\210\253.md"
rename to "_drafts/Others/\345\237\272\344\272\216\345\257\271\350\261\241\345\222\214\351\235\242\345\220\221\345\257\271\350\261\241\347\232\204\345\214\272\345\210\253.md"
diff --git "a/_drafts/\345\255\227\347\254\246\344\271\261\347\240\201\344\270\200\351\224\205\347\202\226.md" "b/_drafts/Others/\345\255\227\347\254\246\344\271\261\347\240\201\344\270\200\351\224\205\347\202\226.md"
similarity index 100%
rename from "_drafts/\345\255\227\347\254\246\344\271\261\347\240\201\344\270\200\351\224\205\347\202\226.md"
rename to "_drafts/Others/\345\255\227\347\254\246\344\271\261\347\240\201\344\270\200\351\224\205\347\202\226.md"
diff --git "a/_drafts/\345\257\271\350\261\241\346\261\240\343\200\201\347\272\277\347\250\213\346\261\240\343\200\201\346\225\260\346\215\256\345\272\223\350\277\236\346\216\245\346\261\240\343\200\201\345\206\205\345\255\230\346\261\240\345\211\226\346\236\220.md" "b/_drafts/Others/\345\257\271\350\261\241\346\261\240\343\200\201\347\272\277\347\250\213\346\261\240\343\200\201\346\225\260\346\215\256\345\272\223\350\277\236\346\216\245\346\261\240\343\200\201\345\206\205\345\255\230\346\261\240\345\211\226\346\236\220.md"
similarity index 100%
rename from "_drafts/\345\257\271\350\261\241\346\261\240\343\200\201\347\272\277\347\250\213\346\261\240\343\200\201\346\225\260\346\215\256\345\272\223\350\277\236\346\216\245\346\261\240\343\200\201\345\206\205\345\255\230\346\261\240\345\211\226\346\236\220.md"
rename to "_drafts/Others/\345\257\271\350\261\241\346\261\240\343\200\201\347\272\277\347\250\213\346\261\240\343\200\201\346\225\260\346\215\256\345\272\223\350\277\236\346\216\245\346\261\240\343\200\201\345\206\205\345\255\230\346\261\240\345\211\226\346\236\220.md"
diff --git "a/_drafts/Others/\345\267\245\345\205\267\350\275\257\344\273\266\345\244\207\345\277\230.md" "b/_drafts/Others/\345\267\245\345\205\267\350\275\257\344\273\266\345\244\207\345\277\230.md"
new file mode 100644
index 0000000..f9fe56a
--- /dev/null
+++ "b/_drafts/Others/\345\267\245\345\205\267\350\275\257\344\273\266\345\244\207\345\277\230.md"
@@ -0,0 +1,271 @@
+# 工具软件备忘
+
+## Note App
+
+|知识库/笔记应用|仍在维护|本地笔记|云同步|跨平台|双链|Markdown|付费|开源|备注|
+|-|-|-|-|-|-|-|-|-|-|
+|[OneNote](https://www.onenote.com/)|是|支持|支持|除Linux外全平台|不支持|不支持,私有格式|软件收费,服务免费|否||
+|[Notion](https://www.notion.so/)|是|不支持|支持|除Linux外全平台|不支持|不支持,私有格式|高级功能收费|否||
+|[Obsidian](https://obsidian.md/)|是|支持|支持|全平台|支持|使用Markdown存储|高级功能收费|否||
+|[Joplin](https://github.com/laurent22/joplin)|是|支持|支持|全平台|不支持|使用Markdown存储|云端服务需要付费|是||
+|[Logsql](https://github.com/logseq/logseq)|是|支持|支持|全平台|支持|使用Markdown存储|免费|是||
+|[RoamResearch](https://roamresearch.com/)|是|不支持|支持|全平台|支持|支持|收费|否|无免费版本|
+|[RoamEdit](http://www.roamedit.com/)|是|不支持|支持|Android/iOS|支持|付费支持|高级功能收费|否||
+|[语雀](https://www.yuque.com/)|是|支持|支持|除Linux外全平台|不支持|支持|高级功能收费|否||
+|[印象笔记](https://www.yinxiang.com/)|是|支持|免费版有流量限制|除Linux外全平台|不支持|支持|高级功能收费|否||
+|[有道云笔记](https://note.youdao.com/)|是|支持|支持|全平台|不支持|支持|高级功能收费|否|1.有广告|
+|[WizNote](https://www.wiz.cn/zh-cn)|是|支持|支持|全平台|不支持|支持|高级功能收费|否||
+|[wolai](https://www.wolai.com/)|是|不支持|支持|全平台|支持|不支持,私有格式|高级功能收费|否|1.协作功能比较强大|
+|[FlowUs(息流)](https://flowus.cn/)|是|不支持|支持|除Linux外全平台|不支持|支持|高级功能收费|否||
+|[思源笔记](https://b3log.org/siyuan/)|是|支持|收费支持|全平台|支持|支持|云端服务需要付费|是||
+|[AppFlowy](https://github.com/AppFlowy-IO/appflowy)|是|支持|不支持|Windows/Mac/Linux|不支持|不支持|免费|是||
+|[Focalboard](https://github.com/mattermost/focalboard)|是|支持|不支持|Windows/Mac/Linux|不支持|不支持|免费|是||
+|[Notability](https://notability.com/)|是|支持|支持|iOS|不支持|不支持|高级功能收费|否|主攻iPad|
+|[GoodNotes](https://www.goodnotes.com/)|是|支持|支持|iOS/Mac/Windows|不支持|不支持|高级功能收费|否|主攻iPad|
+|[Springpad](http://springpad.com/)|否|||Android||||||
+|[CatchNotes](https://catch.com)|否|||Android||||||
+
+## Mind-Mapping App
+
+|思维导图软件|仍在维护|平台支持|收费情况|备注|
+|---|---|---|---|---|
+|[Xmind](https://xmind.cn/)|是|全平台|Pro版收费| |
+|[MindManager](https://www.mindmanager.com/cn/)|是|Windows/Mac|收费| |
+|[MindMaster](https://www.edrawsoft.cn/mindmaster/)|是|Windows/Mac/Linux|免费导出有水印| |
+|[ProcessOn](https://www.processon.com/)|是|Web|收费| |
+|[Freeplane](https://sourceforge.net/projects/freeplane/)|是|Windows/Mac/Linux|开源免费 |FreeMind的比较活跃分支|
+|[DiagramDesigner](https://github.com/meesoft/DiagramDesigner)|是|Windows|开源免费| |
+|[FreeMind](https://freemind.sourceforge.net/)|否|Windows/Mac/Linux|开源免费| |
+|[freemind-mmx](https://github.com/jiangxin/freemind-mmx)|否|Windows/Mac/Linux|开源免费| |
+|[draw.io](https://www.drawio.com/)|是|Windows/Mac/Linux/Web|开源免费| |
+
+## Office办公软件
+
+* WPS Office:
+* WPS Office For Linux:
+* LibreOffice:
+* 永中Office:
+* Prezi:
+
+## 输入法
+
+* 搜狗输入法:
+* fcitx5:
+* fcitx5-android:
+* ibus:
+* 深蓝词库转换:
+
+## 虚拟机软件
+
+* Hypervisor:
+* VMware Workstation Player:
+* VirtualBox:
+* VMTransferFiles:
+* QEMU:
+* Kernel Virtual Machine:
+
+## PDF
+
+* 福昕PDF阅读器:
+* wondershare(All-in-1 PDF Solution,PDF阅读器,PDF转换到其它文件等):
+* PDF-XChange:
+* ILovePDF:
+* CAJViewer:
+* 超星阅读器:
+* WinDjView:
+
+## 浏览器
+
+* Chrome:
+* Fixefox:
+* TorBrowser:
+
+## 数据恢复工具
+
+* DataNumen文件恢复:
+
+## 图床与图床工具
+
+* PicGo:
+
+## 电脑管理工具
+
+* 微PE工具箱:
+* ~~大白菜(有大量捆绑): ~~
+* balenaEtcher:
+* 图拉丁吧工具箱:
+* AIDA:
+* CPU-Z:
+* AS SSD Benchmark:
+* DiskGenius:
+* SpaceSniffer:
+* UltraISO:
+* DAEMON Tools Lite:
+* Nero Burning ROM:
+* 鲁大师:
+
+## 地质相关软件
+
+* ROCKWORKS(RockWorks是一个综合软件程序,用于为环境、岩土工程、采矿和石油行业创建2D和3D地图、日志和横截面、地质模型、体积报告和一般地质图):
+* GeoCorelDRAW:
+* SAC(Seismic Analysis Code):
+* rdseed:
+* Rdseed与SAC的安装:
+* Visual MINTEQ:
+
+## 代理
+
+* 自2023年11月2日起,中国开发者在GitHub上删除或存档翻墙工具:
+* ~~clash: ~~
+* ~~Clash for Android: ~~
+* ~~Clash for Windows: ~~
+* ~~Clash Verge:~~
+* Shadowsocks:
+* proxy:
+* ProxyTool:
+* v2rayNvpn:
+* ~~Freegate: ~~
+
+## 网络相关
+
+* Connectify Hotspot:
+
+## 密码管理工具
+
+* KeePass:
+* keepass2android:
+* 1password:
+* lastpass:
+* authy:
+* Microsoft Authenticator:
+
+## 压缩/解压缩
+
+* 7-Zip:
+* WinRAR:
+* 快压:
+* 好压:
+* Bitser(exe解压):
+* UniExtract2:
+
+## SSH/FTP
+
+* MobaXterm(自带rsync等工具,且免费):
+* XManager/XShell/XSftp(收费):
+* XShell使用问题汇总:
+* FileZilla:
+* WinSCP:
+* PuTTY:
+* Pietty:
+* SecureCRT(收费):
+* SecureFX(收费):
+* ~~SSH Secure Shell Client(无官网): ~~
+
+## Others
+
+* tesseract:
+* Tesseract User Manual:
+* jTessBoxEditor:
+* Tess4J:
+* VietOCR:
+
+* 按键精灵:
+* sikuli(Deprcated):
+* SikuliX1:
+* SikuliX Docs:
+* AutoHotkey:
+* SciTE4AutoHotkey:
+
+* MotionPro(VPN工具):
+* realvnc(安全远程连接):
+
+* FFmpeg:
+* K-Lite Codec Pack:
+* Shark007 Codecs:
+* KMPlayer:
+* potplayer(新版本不支持swf格式):
+* QQ影音(播放WMV有时没有声音):
+* VLC media player:
+* Avidemux:
+
+* 龙卷风收音机:
+* 腾讯视频:
+* 爱奇艺:
+* 优酷:
+* 央视影音:
+* 暴风影音:
+
+* HyperSnap:
+* Snipaste:
+* PicPick:
+* Camtasia:
+* Snagit:
+* FastStone Capture:
+* OBS Studio:
+* ScreenToGif:
+* screenity(开源免费):
+* Awesome Screenshot(高级功能收费):
+* ClipMate:
+* Sothink SWF Decompiler:
+* Sothink Logo Maker:
+* Wondershare DVD Slideshow Builder Deluxe:
+* Wondershare Flash Gallery Factory Deluxe:
+* Action Script Viewer:
+* Clementine:
+* osdlyrics:
+* Switch Audio File Converter:
+* Digital Voice Player:
+
+* babun:
+* catdoc ported to Windows:
+* install-us:
+
+* 人人钢琴:
+
+* Total Commander:
+* Rapidee:
+* HostsX:
+* WizMouse(WizMouse allows you to scroll the window under the mouse with your mouse wheel even if the that window doesn't have input focus.
+Windows 10 already has this functionality built in so WizMouse is most useful if you're using earlier versions of Windows):
+* ibat:
+* Binary Viewer(Binary Viewer can display file contents in binary, hexadecimal, octal, decimal and text formats):
+* Windows日志查看工具合集:
+* NFOPad(NFOPad is a small, fast and flexible text editor and nfo viewer.):
+
+* 小Q书桌:
+* Wox:
+
+* P2PSearcher:
+* PanDownload:
+* amule:
+* WebSite eXtractor:
+* uTorrent:
+* 迅雷(Thunder):
+* 硕鼠(bigrats):
+
+* Convert Between Programming Languages(The Most Accurate and Reliable Source Code Converters):
+
+* inkscape:
+* OpenShot(Video Editor):
+* Boilsoft Video Splitter:
+* Easy RealMedia Producer & Easy RealMedia Editor:
+* Eagle(设计师图片管理工具):
+* BusinessCards MX(名片制作工具):
+
+* GrampsAIO(族谱绘制):
+* Asymptote(2D & 3D TeX-Aware Vector Graphics Language):
+
+* docx2txt:
+* txt2tags:
+
+* Wireshark:
+* Omnipeek(Network protocol analyzer):
+* httpwatch(HTTP sniffer):
+* Fiddler(Http sniffer):
+* Burp Suite(用于攻击web 应用程序的集成平台):
+* IETester:
+* tcpdump:
+* tcpdump捕捉样例:
+* WinDump:
+
+* 坚果云:
diff --git "a/_drafts/\346\270\205\347\220\206\346\227\240\347\224\250\347\232\204CSS\346\240\267\345\274\217\347\232\204\345\207\240\344\270\252\345\267\245\345\205\267\357\274\210\350\275\254\357\274\211.md" "b/_drafts/Others/\346\270\205\347\220\206\346\227\240\347\224\250\347\232\204CSS\346\240\267\345\274\217\347\232\204\345\207\240\344\270\252\345\267\245\345\205\267\357\274\210\350\275\254\357\274\211.md"
similarity index 91%
rename from "_drafts/\346\270\205\347\220\206\346\227\240\347\224\250\347\232\204CSS\346\240\267\345\274\217\347\232\204\345\207\240\344\270\252\345\267\245\345\205\267\357\274\210\350\275\254\357\274\211.md"
rename to "_drafts/Others/\346\270\205\347\220\206\346\227\240\347\224\250\347\232\204CSS\346\240\267\345\274\217\347\232\204\345\207\240\344\270\252\345\267\245\345\205\267\357\274\210\350\275\254\357\274\211.md"
index 623587a..74124c3 100644
--- "a/_drafts/\346\270\205\347\220\206\346\227\240\347\224\250\347\232\204CSS\346\240\267\345\274\217\347\232\204\345\207\240\344\270\252\345\267\245\345\205\267\357\274\210\350\275\254\357\274\211.md"
+++ "b/_drafts/Others/\346\270\205\347\220\206\346\227\240\347\224\250\347\232\204CSS\346\240\267\345\274\217\347\232\204\345\207\240\344\270\252\345\267\245\345\205\267\357\274\210\350\275\254\357\274\211.md"
@@ -1,8 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
在我们写样式的时候,页面的CSS在经历几个版本的修改之后,可能有些样式已经用不到了,或许将某些样式更名了而原来的忘了删除,总之页面中可能存在着一些无用的样式。这些无用的浪费了一些服务器空间和带宽消耗,也会增大我们的维护成本。那么有没有一些办法来清理那些无用的样式呢?今天就让我们来了解一下几个比较有用的工具。
diff --git "a/_drafts/\350\203\275\350\256\251\347\250\213\345\272\217\345\201\232\347\232\204\344\272\213\346\203\205\345\235\232\345\206\263\344\270\215\347\224\250\344\272\272\346\235\245\345\201\232\342\200\224\342\200\224\346\211\271\351\207\217\344\277\256\345\244\215markdownlint MD034\350\255\246\345\221\212.md" "b/_drafts/Others/\350\203\275\350\256\251\347\250\213\345\272\217\345\201\232\347\232\204\344\272\213\346\203\205\345\235\232\345\206\263\344\270\215\347\224\250\344\272\272\346\235\245\345\201\232\342\200\224\342\200\224\346\211\271\351\207\217\344\277\256\345\244\215markdownlint MD034\350\255\246\345\221\212.md"
similarity index 93%
rename from "_drafts/\350\203\275\350\256\251\347\250\213\345\272\217\345\201\232\347\232\204\344\272\213\346\203\205\345\235\232\345\206\263\344\270\215\347\224\250\344\272\272\346\235\245\345\201\232\342\200\224\342\200\224\346\211\271\351\207\217\344\277\256\345\244\215markdownlint MD034\350\255\246\345\221\212.md"
rename to "_drafts/Others/\350\203\275\350\256\251\347\250\213\345\272\217\345\201\232\347\232\204\344\272\213\346\203\205\345\235\232\345\206\263\344\270\215\347\224\250\344\272\272\346\235\245\345\201\232\342\200\224\342\200\224\346\211\271\351\207\217\344\277\256\345\244\215markdownlint MD034\350\255\246\345\221\212.md"
index c6ec4c6..391dc80 100644
--- "a/_drafts/\350\203\275\350\256\251\347\250\213\345\272\217\345\201\232\347\232\204\344\272\213\346\203\205\345\235\232\345\206\263\344\270\215\347\224\250\344\272\272\346\235\245\345\201\232\342\200\224\342\200\224\346\211\271\351\207\217\344\277\256\345\244\215markdownlint MD034\350\255\246\345\221\212.md"
+++ "b/_drafts/Others/\350\203\275\350\256\251\347\250\213\345\272\217\345\201\232\347\232\204\344\272\213\346\203\205\345\235\232\345\206\263\344\270\215\347\224\250\344\272\272\346\235\245\345\201\232\342\200\224\342\200\224\346\211\271\351\207\217\344\277\256\345\244\215markdownlint MD034\350\255\246\345\221\212.md"
@@ -1,8 +1,3 @@
-欢迎和大家交流技术相关问题:
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
现在各种编程语言都有自己的lint工具来做静态检查,防止一些低级错误并维持统一的风格。Markdown这样的样式标记语言也不例外,现在大家用的比较多的是markdownlint。该项目开源在github:,当前很多实用markdown语言的项目都使用该工具。
diff --git "a/_drafts/\351\253\230\345\217\257\347\224\250\346\200\247\344\270\255\347\232\204\350\204\221\350\243\202\351\227\256\351\242\230(split-brain problem in HA)(\350\275\254).md" "b/_drafts/Others/\351\253\230\345\217\257\347\224\250\346\200\247\344\270\255\347\232\204\350\204\221\350\243\202\351\227\256\351\242\230(split-brain problem in HA)(\350\275\254).md"
similarity index 91%
rename from "_drafts/\351\253\230\345\217\257\347\224\250\346\200\247\344\270\255\347\232\204\350\204\221\350\243\202\351\227\256\351\242\230(split-brain problem in HA)(\350\275\254).md"
rename to "_drafts/Others/\351\253\230\345\217\257\347\224\250\346\200\247\344\270\255\347\232\204\350\204\221\350\243\202\351\227\256\351\242\230(split-brain problem in HA)(\350\275\254).md"
index 0277e2b..0149887 100644
--- "a/_drafts/\351\253\230\345\217\257\347\224\250\346\200\247\344\270\255\347\232\204\350\204\221\350\243\202\351\227\256\351\242\230(split-brain problem in HA)(\350\275\254).md"
+++ "b/_drafts/Others/\351\253\230\345\217\257\347\224\250\346\200\247\344\270\255\347\232\204\350\204\221\350\243\202\351\227\256\351\242\230(split-brain problem in HA)(\350\275\254).md"
@@ -1,10 +1,3 @@
-欢迎关注我的社交账号:
-
-邮箱: jiangxinnju@163.com
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
-
运行于备用主机上的Heartbeat可以通过以太网连接检测主服务器的运行状态,一旦其无法检测到主服务器的“心跳”则自动接管主服务器的资源。通常情况下,主、备服务器间的心跳连接是一个独立的物理连接,这个连接可以是串行线缆、一个由“交叉线”实现的以太网连接。Heartbeat甚至可同时通过多个物理连接检测主服务器的工作状态,而其只要能通过其中一个连接收到主服务器处于活动状态的信息,就会认为主服务器处于正常状态。从实践经验的角度来说,建议为Heartbeat配置多条独立的物理连接,以避免Heartbeat通信线路本身存在单点故障。
diff --git "a/_drafts/Python\347\254\254\344\270\211\346\226\271\345\270\270\347\224\250\345\267\245\345\205\267\343\200\201\345\272\223\343\200\201\346\241\206\346\236\266\347\255\211.md" "b/_drafts/Python\347\254\254\344\270\211\346\226\271\345\270\270\347\224\250\345\267\245\345\205\267\343\200\201\345\272\223\343\200\201\346\241\206\346\236\266\347\255\211.md"
deleted file mode 100644
index 13779fb..0000000
--- "a/_drafts/Python\347\254\254\344\270\211\346\226\271\345\270\270\347\224\250\345\267\245\345\205\267\343\200\201\345\272\223\343\200\201\346\241\206\346\236\266\347\255\211.md"
+++ /dev/null
@@ -1,204 +0,0 @@
- Python ImagingLibrary(PIL):它提供强大的图形处理的能力,并提供广泛的图形文件格式支持,该库能进行图形格式的转换、打印和显示。还能进行一些图形效果的处理,如图形的放大、缩小和旋转等。是用户进行图象处理的强有力工具。
-http://www.pythonware.com/products/pil/
-
-matplotlib:一个Python的2D绘图库。
-
-http://matplotlib.org/
-
-Pmw(Pythonmegawidgets):它是超级GUI组件集————一个利用Tkinter模块构建的高级GUI组件,每个Pmw都合并了一个或多个Tkinter组件,以实现更有用和更复杂的功能。
-
-http://sourceforge.net/projects/pmw/
-
-PyXML(Python/XML):用Python解析和处理XML文档的工具包,包中的4DOM是完全相容于W3C DOM规范的。它包含以下内容:xmlproc:一个符合规范的XML解析器;Expat: 一个快速的,非验证的XML解析器。遗憾的是该包已经停止更新。其他和他同级别的还有 PyHtml PySGML
-
-http://sourceforge.net/projects/pyxml/
-
-PyGame:用于多媒体开发和游戏软件开发的模块。
-
-http://www.pygame.org/news.html
-
-PyOpenGL:模块封装了“OpenGL应用程序编程接口”,通过该模块python程序员可在程序中集成2D和3D的图形。
-
-http://sourceforge.net/projects/pyopengl/
-
-NumPy、NumArray和SAGE:NumArray是Python的一个扩展库,主要用于处理任意维数的固定类型数组,简单说就是一个矩阵库。它的低层代码使用C来编写,所以速度的优势很明显。NumPy是Numarray的后继者,用来代替NumArray(目前NumArray已经不再更新)。SAGE是基于NumPy和其他几个工具所整合成的数学软件包,目标是取代Magma, Maple, Mathematica和Matlab 这类工具。
-
-http://www.numpy.org/
-
-http://www.sagemath.org/
-
-SciPy(pronounced “Sigh Pie”) is a Python-based ecosystem of open-source software formathematics, science, and engineering.
-
-http://www.scipy.org/
-
-MySQLdb:用于连接MySQL数据库。还有用于zope的ZMySQLDA模块,通过它就可在zope中连接mysql数据库。
-
-http://sourceforge.net/projects/mysql-python/
-
-PyGTK:用于GUI程序开发的GTK+库。GTK就是用来实现GIMP和Gnome的那个库。有了它,你完全可以自信的尝试自己制造Photoshop
-
-http://www.pygtk.org/
-
-PyQt:用于Qt开发库。QT就是实现了KDE环境的那个库,由一系列的模块组成,有qt,qtcanvas, qtgl, qtnetwork, qtsql, qttable, qtui and qtxml,包含有300个类和超过5750个的函数和方法。PyQt还支持一个叫qtext的模块,它包含一个QScintilla库。该库是 Scintillar编辑器类的Qt接口。
-
-http://www.riverbankcomputing.co.uk/news
-
-PyMedia:用于多媒体操作的python模块。它提供了丰富而简单的接口用于多媒体处理(wav,mp3, ogg, avi, divx, dvd, cdda etc)。可在Windows和Linux平台下使用。
-
-http://pymedia.org/
-
-PyPy和Psyco:Psyco是一个代码加速度器,可使代码的执行速度提高到与编译语言一样的水平。目前Psyco已经不再更新,PyPy是Psyco的升级替代品。
-
-http://pypy.org/
-
-http://sourceforge.jp/projects/sfnet_psyco/
-
-Python-ldap:提供一组面向对象的API,可方便地在python中访问ldap目录服务,它基于OpenLDAP2.x。
-
-http://www.python-ldap.org/
-
-xmpppy:Jabber服务器采用开发的XMPP协议,Google Talk也是采用XMPP协议的IM系统。在中有一个xmpppy模块支持该协议。也就是说,我们可以通过该模块与Jabber服务器通信,是不是很Cool。
-
-http://sourceforge.net/projects/xmpppy/
-
- 下面这些就不详细介绍,只列出名字和功能
-
-adodb:ADO数据库连接组件,主要用于PHP也可用于Python
-
-http://sourceforge.net/projects/adodb/
-
-wxPython :GUI编程框架,熟悉MFC的人会非常喜欢,简直是同一架构(对于初学者或者对设计要求不高的用户来说,使用 Boa Constructor可以方便迅速的进行wxPython的开发)
-
-http://www.wxpython.org/
-
-py2exe:用来生成windows可执行文件
-
-http://www.py2exe.org/
-
-twisted:巨无霸的网络编程框架
-
-https://twistedmatrix.com/trac/
-
-Kodos:正则表达式调试工具
-
-http://sourceforge.net/projects/kodos/
-
-Mechanize:爬虫连接网站常用
-
-https://pypi.python.org/pypi/mechanize/
-
-winpdb:自己的程序或者用别的库不太明白的时候就靠它了
-
-http://winpdb.org/
-
-Pyro:实现与JAVA RMI类似的技术
-
-http://python-pyro-3-7.updatestar.com/
-
-pylint:培养良好的编码习惯
-
-http://www.pylint.org/
-
-django:一个WEB framework
-
-https://www.djangoproject.com/
-
-docutils:用来写文档的
-
-https://pypi.python.org/pypi/docutils/
-
-Pylons:又一个web framework
-
-http://www.pylonsproject.org/
-
-pythonwin: Windows扩展
-
-http://sourceforge.net/projects/pywin32/
-
-reportlab:Python操作PDF的Libary。
-
-http://www.reportlab.com/
-
-cherrypy:一个WEB framework
-
-http://www.cherrypy.org/
-
-pandas:pandas is an open source, BSD-licensed library providinghigh-performance, easy-to-use data structures and data analysis tools for thePython programming language.
-
-http://pandas.pydata.org/
-
-bsddb3 ————BerkeleyDB的连接组件
-
-https://pypi.python.org/pypi/bsddb3/
-
-chardet ———— 编码检测
-
-https://pypi.python.org/pypi/chardet/
-
-scons ———— 项目构建工具,写好了模板用起来还是很方便的
-
-http://www.scons.org
-
-pycurl ———— URL处理工具
-
-https://pypi.python.org/pypi/pycurl
-
-pydot ———— 画图的,graphiz,可以很方便画流程图
-
-https://code.google.com/p/pydot/
-
-feedparser ————rss解析
-
-http://feedparser.luaforge.net/
-
-astropy/PyRAF/astroplotlib:天文相关的一些工具:
-
-http://www.astropy.org/
-
-http://www.stsci.edu/institute/software_hardware/pyraf/
-
-http://astroplotlib.stsci.edu/
-
-scapy ———— 网络包构建分析框架,可编程的wireshark,有兴趣的google “Silver Needle in the Skype”
-
-http://www.secdev.org/projects/scapy/
-
-Cheetah ———— 构建和扩充任何种类的基于文本的内容
-
-http://www.cheetahtemplate.org/
-
-
-
- sendpkt ———— 一个开发包
-
- pyevent ———— 事件支持
-
- pypcap ———— 抓包的
-
- python-dnet ———— 控制网络安全的其他设备
-
- simplejson ———— JSON的支持
-
- sqlalchemy ———— SQL数据库连接池
-
- SQLObject ———— 数据库连接池
-
- ctypes ———— 用来调用动态链接库
-
- Cx-oracle ———— 连接oracle的工具
-
- DBUtils ———— 数据库连接池
-
- DPKT ———— raw-scoket网络编程
-
- dpkt ———— 数据包的解包和组包
-
- pefile ———— windows pe文件解析器
-
- PLY———— 基于LEX、YACC的语言工具
-
- Corepy———— 使用开发编写x86汇编程序
-
- LightCloud———— 实现的分布式的键-值数据库
-
- Parallel Python(PP)———— 轻松开发SMP、集群并行计算的库
\ No newline at end of file
diff --git "a/_drafts/astyle \344\275\277\347\224\250\350\257\264\346\230\216.md" "b/_drafts/astyle \344\275\277\347\224\250\350\257\264\346\230\216.md"
deleted file mode 100644
index 382138e..0000000
--- "a/_drafts/astyle \344\275\277\347\224\250\350\257\264\346\230\216.md"
+++ /dev/null
@@ -1,88 +0,0 @@
-欢迎关注我的社交账号:
-
-
-博客园地址: http://www.cnblogs.com/jiangxinnju
-GitHub地址: https://github.com/jiangxincode
-知乎地址: https://www.zhihu.com/people/jiangxinnju
-
-
-astyle是一款代码格式化工具,它的下载地址是:
-http://sourceforge.net/projects/astyle
-
-项目地址:
-http://astyle.sourceforge.net/
-
-文档说明:
-http://astyle.sourceforge.net/astyle.html
-
-## 基本命令
-
-`astyle --style=ansi main.cs`
-
-## 格式化目录
-
-使用ansi风格格式当前目录下的所有cpp,cs文件,注意在批处理文件时,"%f" 要改为"%%f"
-
-`for /R %f in (*.cpp;*.cs;) do astyle --style=ansi "%f"`
-
-## 参数说明:
-
-http://astyle.sourceforge.net/astyle.html
-
-
-## 加入到VS2008,VS2005
-
-+ 工具——>外部工具——>添加
-+ 标题:astyle
-+ 命令:AStyle.exe (填好astyle.exe的路径)
-+ 参数:--style=allman -N $(ItemDir)$(ItemFileName)$(ItemExt)
-+ 初始目录:$(TargetDir)
-+ 勾上“使用初始目录”
-+ 点击确定完成,以后就可以在工具菜单中找到“astyle“这一项了,点击它,就可以对当前文件进行格式化操作。
-
-## 加入到VS6
-
-+ Tools——>Customize——>Tools
-+ 标题:astyle
-+ 命令:AStyle.exe (填好astyle.exe的路径)
-+ 参数:--style=ansi -s4 --suffix=.orig $(FileName)$(FileExt)
-+ 初始目录:$(FileDir)
-+ 勾上“Using Output Window”
-+ 点击确定完成。以后就可以在工具菜单中找到“astyle“这一项了,点击它,就可以对当前文件进行格式化操作。
-
-## 加入到Ultraedit和UltraStudio
-
-+ 高级-->工具配置——>外部工具——>添加
-+ 命令:AStyle.exe -v --style=ansi -s4 --suffix=.orig "%f"(填好astyle.exe的路径)
-+ Optiones:选择 Windows program和Save Active File.
-+ Output: 选择output to list box,show dos box 和no replace。
-+ 点击确定完成。以后就可以在工具菜单中找到“astyle“这一项了,点击它,就可以对当前文件进行格式化操作。
-
-## 加入到Source insight
-
-+ Options-->Custom Command-->Add
-+ Command:astyle
-+ Run "D:\soft\astyle\astyle.exe" --style=ansi -f -p -P -U -v -n -N %f(填好astyle.exe的路径)
-+ Output:不选.
-+ Control: 选择pause when done和exit to window.
-+ source links in output:file, then line
-+ -->menu
-+ add to work menu.
-+ 点击确定完成。以后就可以在Work菜单中找到“astyle“这一项了,点击它,就可以对当前文件进行格式化操作。
-
-另外可以参考:在source insight中集成astyle:
-
-## 控制台目录批处理(astyle.bat)
-
-```Bash
-REM 批量将本目录中的所有C++文件用Astyle进行代码美化操作
-REM 设置Astyle命令位置和参数
-@echo off
-set astyle="astyle.exe"
-REM 循环遍历目录
-for /r . %%a in (*.cpp;*.c) do %astyle% --style=ansi --pad=oper --unpad=paren -s4 -n "%%a"
-for /r . %%a in (*.hpp;*.h) do %astyle% --style=ansi --pad=oper --unpad=paren -s4 -n "%%a"
-REM 删除所有的astyle生成文件
-for /r . %%a in (*.orig) do del "%%a"
-pause
-```
\ No newline at end of file
diff --git a/_pages/about.md b/_pages/about.md
index 9ba0655..47325d0 100644
--- a/_pages/about.md
+++ b/_pages/about.md
@@ -3,6 +3,15 @@ permalink: /about/
title: "About"
---
-Tempor velit sint sunt ipsum tempor enim ad qui ullamco. Est dolore anim ad velit duis dolore minim sunt aliquip amet commodo labore. Ut eu pariatur aute ea aute excepteur laborum. Esse ea esse excepteur minim mollit qui cillum excepteur ex dolore magna. Labore deserunt fugiat incididunt incididunt sint ea. Consequat dolore aute laboris quis proident quis non et est consectetur ex eiusmod sit culpa.
+一些我在平时工作和学习中积累的编程相关的资源。每个程序员都有自己的学习之路,过程中会学习各种各样的网上知识,学习完最好记录下来,每隔一段时间看一看,会有不一样的收获。
-Cupidatat ea do et in excepteur in. Ad nostrud ut est esse eu duis ea sunt eiusmod. Aliquip tempor veniam sint elit fugiat. Velit incididunt laboris amet incididunt labore dolore irure velit excepteur commodo deserunt laborum. Consectetur eu fugiat veniam veniam Lorem labore magna eiusmod. Ea occaecat reprehenderit pariatur consectetur minim labore ut aliquip.
\ No newline at end of file
+博客地址:
+
+* [原有"学习之路系列博客"](https://jiangxincode.github.io/cnblogs/categories/#the-way-of-learning)
+* [Github](https://jiangxincode.github.io/cnblogs/)
+* [博客园](https://www.cnblogs.com/jiangxinnju)
+
+如果大家有兴趣可以一起增加,修改。
+
+* [文章源码目录](https://github.com/jiangxincode/cnblogs/tree/master/_posts)
+* [文章依赖图床](https://github.com/jiangxincode/PicGo)
diff --git a/_posts/2021-01-13-Repo-In-Action.md b/_posts/android/2021-01-13-Repo-In-Action.md
similarity index 99%
rename from _posts/2021-01-13-Repo-In-Action.md
rename to _posts/android/2021-01-13-Repo-In-Action.md
index 498da54..db3a89d 100644
--- a/_posts/2021-01-13-Repo-In-Action.md
+++ b/_posts/android/2021-01-13-Repo-In-Action.md
@@ -1,7 +1,7 @@
---
title: "Repo实践指南"
categories:
- - Blog
+ - android
tags:
- Android
- Repo
diff --git a/_posts/2021-02-14-Android-Build-System.md b/_posts/android/2021-02-14-Android-Build-System.md
similarity index 99%
rename from _posts/2021-02-14-Android-Build-System.md
rename to _posts/android/2021-02-14-Android-Build-System.md
index aff4c36..85810f2 100644
--- a/_posts/2021-02-14-Android-Build-System.md
+++ b/_posts/android/2021-02-14-Android-Build-System.md
@@ -1,7 +1,7 @@
---
title: "Android构建系统"
categories:
- - Blog
+ - android
tags:
- Android
- AOSP
diff --git a/_posts/2021-02-21-Import-AOSP-To-AS.md b/_posts/android/2021-02-21-Import-AOSP-To-AS.md
similarity index 99%
rename from _posts/2021-02-21-Import-AOSP-To-AS.md
rename to _posts/android/2021-02-21-Import-AOSP-To-AS.md
index ec58353..354e3c5 100644
--- a/_posts/2021-02-21-Import-AOSP-To-AS.md
+++ b/_posts/android/2021-02-21-Import-AOSP-To-AS.md
@@ -1,7 +1,7 @@
---
title: "将AOSP源码导入到Android Studio进行查看"
categories:
- - Blog
+ - android
tags:
- Android
- Android Studio
diff --git "a/_posts/android/2025-01-05-\346\212\225\345\261\217\347\237\245\350\257\206\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/android/2025-01-05-\346\212\225\345\261\217\347\237\245\350\257\206\345\255\246\344\271\240\344\271\213\350\267\257.md"
new file mode 100644
index 0000000..98b5724
--- /dev/null
+++ "b/_posts/android/2025-01-05-\346\212\225\345\261\217\347\237\245\350\257\206\345\255\246\344\271\240\344\271\213\350\267\257.md"
@@ -0,0 +1,50 @@
+---
+title: "投屏知识学习之路"
+categories:
+ - the-way-of-learning
+tags:
+ - 学习之路
+ - 投屏
+toc: true
+---
+
+本篇文章汇总了投屏知识学习的相关资源,包括投屏的基本概念、投屏协议、投屏应用等内容,适合投屏开发者参考。
+
+## 投屏模式
+
+首先了解投屏的模式。
+
+### 推送模式
+
+主要用于投屏视频和音乐,投屏之后手机可以关闭或聊微信,电视不会停止播放。玩手机看电视两不误。最常见是视频软件里的tv按钮。
+
+投屏推送的原理:原理就是,让手机与电视连接同一个wifi后,通过投屏协议传输数据。(就好像蓝牙一样的一个专门通道)。点击投屏按钮,手机就开始搜索wifi内有没有投屏广播服务。
+
+手机搜索到电视之后,手机会发送一个视频地址给电视,电视收到地址后,开始播放。投屏后,手机可以控制电视的进度,暂停,下一集,音量之类的指令。
+
+### 镜像模式
+
+就是投屏手机屏幕或者投屏电脑屏幕;就是同屏显示。主要用于投屏手机PPT、手机桌面、吃鸡王者荣耀等手游;投屏淘宝、微信、抖音等暂时投屏功能的APP。苹果手机的屏幕镜像,安卓手机的多屏互动,都属于镜像模式。
+
+原理:一样依靠局域网wifi通道,手机搜索到电视之后,开始镜像后,手机会不断截屏就是录屏。手机一边录屏,一般发送给电视。速度超快每秒60帧以上,电视收到之后再展现出来,就成了同屏功能了。
+
+### 拓展模式
+
+拓展模式是指将电脑屏幕投射到电视上,同时电脑屏幕也可以显示。这种模式一般用于工作场景,比如在电视上展示PPT,而在电脑上操作PPT。
+
+## 投屏协议/应用对比
+
+|投屏协议/应用|源平台|目标平台|无线/有线|推送/镜像|厂商|备注|
+|-|-|-|-|-|-|-|
+|[Miracast](https://www.wi-fi.org/discover-wi-fi/miracast)|支持协议的源设备|支持协议的显示设备|无线/有线|推送/镜像|Wi-Fi联盟|NA|
+|[AirPlay](https://www.apple.com/airplay/)|iOS/iPadOS/Mac|AirPlay‑enabled smart TV|无线/有线|推送/镜像|Apple|NA|
+|[DLNA](https://www.dlna.org/)|支持协议的源设备|支持协议的显示设备|无线/有线|推送|由索尼、英特尔、微软等企业共同发起|大部分视频软件投屏使用该协议|
+|[Cast+](https://developer.huawei.com/consumer/cn/codelab/CastPlusKit)|华为/荣耀手机|Android大屏设备|无线/有线|镜像|华为|NA|
+|[Chromecast](https://support.google.com/chromecast)|Android/iOS设备|插入Chromecast的显示设备|无线/有线|镜像|谷歌|NA|
+|[WiDi](https://www.intel.cn/content/www/cn/zh/support/articles/000014926/emerging-technologies.html)|Windows设备|支持协议的显示设备|无线/有线|镜像/拓展|Intel|[已停止支持](https://www.intel.cn/content/www/cn/zh/support/articles/000021693/emerging-technologies.html)|
+|[Windows手机连接](https://support.microsoft.com/zh-cn/topic/%E6%89%8B%E6%9C%BA%E8%BF%9E%E6%8E%A5%E8%A6%81%E6%B1%82%E5%92%8C%E8%AE%BE%E7%BD%AE-cd2a1ee7-75a7-66a6-9d4e-bf22e735f9e3)|Android/iOS|Windows|无线|推送|微软|NA|
+|[scrcpy](https://github.com/Genymobile/scrcpy)|Android|Windows|有线+无线|镜像|开源|NA|
+|[AnLink](https://anl.ink/)|Android|Linux/Windows/macOS|有线+无线|镜像|AnLink|NA|
+|[Vysor](https://www.vysor.io/#)|Android/iOS|Linux/Windows/macOS|有线+无线|镜像|vysor|NA|
+
+## 其它链接
diff --git a/_posts/linux/2019-04-22-Linux-Memory-Analysis.md b/_posts/linux/2019-04-22-Linux-Memory-Analysis.md
new file mode 100644
index 0000000..f1cbcd2
--- /dev/null
+++ b/_posts/linux/2019-04-22-Linux-Memory-Analysis.md
@@ -0,0 +1,61 @@
+---
+title: "Linux内存工具解析之RSS/VSS/USS/PSS区别于联系"
+categories:
+ - linux
+tags:
+ - Linux Memory Analysis
+---
+
+对于Linux系统程序开发人员,经常需要和进程所使用的内存情况打交道,比如,分析程序的内存泄漏问题。这时候我们可能使用ps、top、procrank、dumpsys(后两个命令为Android系统)来跟踪、调试进程内存的使用情况。上述几个工具进程涉及到的几个比较的重要的概念:VSS、RSS、PSS、USS,对于这几个概念,大家总是存在一种似曾相识,却又不甚了解的感觉,这对于真正的把握进程内存使用情况是十分有害的。所以,本文旨在彻底分析这个四个概念,弄清各个量之间的联系和区别,提供有助于解释各种工具的内存报告的信息,以便确定Linux进程和系统的实际内存使用量,为以后分析内存问题提供坚实的理论基础。
+
+## 基本概念
+
+* VSS:Virtual Set Size 虚拟耗用的内存(包含与其他进程共享占用的虚拟内存)
+* RSS:Resident Set Size 实际使用的物理内存(包含与其他进程共享占用的内存)
+* PSS:Proportional Set Size 实际使用的物理内存(按比例包含与其他进程共享占用的内存)
+* USS:Unique Set Size 进程独自占用的物理内存(不包含与其他进程共享占用的内存)
+
+对于单个进程,一般来说内存占用大小排序如下:`VSS >= RSS >= PSS >= USS`
+
+## 概念解析
+
+Android有一个名为`procrank`(`/system/xbin/procrank`)的工具,它列出了Linux进程的内存使用量,并按使用量的高低排序。每个进程报告的内存使用情况分为VSS、RSS、PSS和USS。
+
+为了简单起见,在这个描述中,内存将用页面而不是字节来表示。像我们这样的Linux系统在最低级别上以4096字节的页面管理内存。
+
+下面分别具体解释一下各个概念的含义:
+
+* VSS(ps工具中表示为VSZ)表示进程总的可访问地址空间。这个大小还包括可能不驻留在RAM中的内存,比如使用malloc分配内存后,尚未写入数据的内存。VSS对于确定进程的实际内存使用量几乎没有什么用处。
+* RSS表示一个进程在RAM中实际拥有的总内存。RSS可能具有误导性,因为它包括了该进程与其他进程共享的实际物理内存使用量,例如,对于共享库,其往往只加载到内存中一次,而不管有多少进程使用它。RSS不能准确地表示单个进程的内存使用情况。
+* PSS与RSS不同之处是,对于进程间共享的内存,其按比例报告其所使用的共享物理内存大小。比如有n进程同时在使用一个共享库,那对于单个进程其占用的该共享库的内存为1/n。如果三个进程都使用一个有30页的共享库,那么这个库将只向每个进程报告的PSS贡献10页。PSS是一个非常有用的数字,因为当系统中所有进程的PSS加在一起时,就可以很好地表示系统中总的内存使用量。当一个进程被终止时,贡献给它的PSS的共享库将按比例分配给仍然使用该库的其他进程的PSS总数。这样,PSS可能有点误导人,因为当进程被终止时,PSS不能准确地表示返回到整个系统的内存。
+* USS表示进程占用的总的物理内存大小,也就是说这部分内存是该进程完全独占的。 USS是一个非常有用的数字,因为它表示运行特定进程的实际增量成本。当进程被终止时,USS是实际返回给系统的总内存。当最初怀疑某个进程存在内存泄漏时,USS是最好的监视数字。
+
+对于使用Python的系统,还有一个很好的工具叫做`ledsmem`,它可以报告内存统计信息,包括所有这些类别。
+
+NOTE:这里有几个问题需要注意:
+
+* 两个进程共享的部分,远远不是只有共享库,比如我们在Linux里面开2个bash进程,那么这2个bash,实际是共享1个代码段;其他的mmap()的时候shared的映射当然也是两个进程共享的内存。
+* 共享库里面的内存,也不是都共享,只是代码段等不会做CoW(写时拷贝)的内存才会跨进程共享。
+* USS去掉的是所有跨进程共享的内存,不是只去掉了共享库。
+
+## 实例解析
+
+下面通过一个实例,具体解析各个量之间的关系。假设Linux下有两个bash进程、一个cat进程,进程ID分别为1044、1045、1054,下面通过公式分别计算VSS、RSS、PSS、USS:
+
+
+
+* VSS = 1 + 2 + 3
+* RSS = 4 + 5 + 6
+* PSS = 4/3 + 5/2 + 6
+* USS = 6
+
+上图中的4这片内存,是libc的代码段在内存驻留的部分,被3个进程共享;5这段内存,是bash的代码段,被2个进程(1044和1045)指向。在计算PSS的时候,这些都需要被比例化。
+
+## 监测工具
+
+对于Linux系统,一般都会提供ps、top两个命令,Android系统还会提供procrank、dumpsys这两个命令。对于ps、top其只能查到VSS、RSS这两个值;procrank、dumpsys可以提供PSS、USS信息,dumpsys meminfo 可以查出native和dalvik分别占用多少内存。另外,dumpsys可以查询到很多有用的系统信息,比如meminfo、cpuinfo、activity、window、wifi、account等信息。
+
+## 参考信息
+
+* 性能优化工具(十)- Android内存分析命令:
+* 内存耗用:VSS/RSS/PSS/USS:
\ No newline at end of file
diff --git a/_posts/2020-11-21-Package-Manager-In-Ubuntu.md b/_posts/linux/2020-11-21-Package-Manager-In-Ubuntu.md
similarity index 99%
rename from _posts/2020-11-21-Package-Manager-In-Ubuntu.md
rename to _posts/linux/2020-11-21-Package-Manager-In-Ubuntu.md
index d00d1d1..b849532 100644
--- a/_posts/2020-11-21-Package-Manager-In-Ubuntu.md
+++ b/_posts/linux/2020-11-21-Package-Manager-In-Ubuntu.md
@@ -1,7 +1,7 @@
---
title: "彻底搞懂Ubuntu系统上的包管理"
categories:
- - Blog
+ - linux
tags:
- Linux
- Ubuntu
diff --git a/_posts/2024-01-01-Grep-Sed-Awk-Example.md b/_posts/linux/2024-01-01-Grep-Sed-Awk-Example.md
similarity index 99%
rename from _posts/2024-01-01-Grep-Sed-Awk-Example.md
rename to _posts/linux/2024-01-01-Grep-Sed-Awk-Example.md
index fec456d..fb6b55c 100644
--- a/_posts/2024-01-01-Grep-Sed-Awk-Example.md
+++ b/_posts/linux/2024-01-01-Grep-Sed-Awk-Example.md
@@ -1,7 +1,7 @@
---
title: "一个例子掌握grep, sed, awk"
categories:
- - Blog
+ - linux
tags:
- Linux
- Grep
diff --git a/_posts/2012-01-19-how-to-learn-r-by-reading-books.md b/_posts/others/2012-01-19-how-to-learn-r-by-reading-books.md
similarity index 99%
rename from _posts/2012-01-19-how-to-learn-r-by-reading-books.md
rename to _posts/others/2012-01-19-how-to-learn-r-by-reading-books.md
index 6833395..eaca957 100644
--- a/_posts/2012-01-19-how-to-learn-r-by-reading-books.md
+++ b/_posts/others/2012-01-19-how-to-learn-r-by-reading-books.md
@@ -1,7 +1,7 @@
---
title: "R语言书籍的学习路线图"
categories:
- - Blog
+ - others
tags:
- R
- 书籍
diff --git a/_posts/2016-08-23-j-lo-performance-analysissy-tools.md b/_posts/others/2016-08-23-j-lo-performance-analysissy-tools.md
similarity index 99%
rename from _posts/2016-08-23-j-lo-performance-analysissy-tools.md
rename to _posts/others/2016-08-23-j-lo-performance-analysissy-tools.md
index 8587d16..f5c53f9 100644
--- a/_posts/2016-08-23-j-lo-performance-analysissy-tools.md
+++ b/_posts/others/2016-08-23-j-lo-performance-analysissy-tools.md
@@ -1,7 +1,7 @@
---
title: "Java 性能分析工具,第 1 部分:操作系统工具"
categories:
- - Blog
+ - others
tags:
- Java
- 性能分析工具
diff --git a/_posts/2016-08-23-j-lo-performance-analysissy-tools2.md b/_posts/others/2016-08-23-j-lo-performance-analysissy-tools2.md
similarity index 99%
rename from _posts/2016-08-23-j-lo-performance-analysissy-tools2.md
rename to _posts/others/2016-08-23-j-lo-performance-analysissy-tools2.md
index 634b8aa..c261fe2 100644
--- a/_posts/2016-08-23-j-lo-performance-analysissy-tools2.md
+++ b/_posts/others/2016-08-23-j-lo-performance-analysissy-tools2.md
@@ -1,7 +1,7 @@
---
title: "Java 性能分析工具,第 2 部分:Java 内置监控工具"
categories:
- - Blog
+ - others
tags:
- Java
- 性能分析工具
diff --git a/_posts/2016-08-23-j-lo-performance-analysissy-tools3.md b/_posts/others/2016-08-23-j-lo-performance-analysissy-tools3.md
similarity index 99%
rename from _posts/2016-08-23-j-lo-performance-analysissy-tools3.md
rename to _posts/others/2016-08-23-j-lo-performance-analysissy-tools3.md
index d6e06e8..9afd0e2 100644
--- a/_posts/2016-08-23-j-lo-performance-analysissy-tools3.md
+++ b/_posts/others/2016-08-23-j-lo-performance-analysissy-tools3.md
@@ -1,7 +1,7 @@
---
title: "Java 性能分析工具,第 3 部分:Java Mission Control"
categories:
- - Blog
+ - others
tags:
- Android
- Gradle
diff --git a/_posts/2018-01-07-Gradle-GradleWrappe-AndroidPluginForGradle.md b/_posts/others/2018-01-07-Gradle-GradleWrappe-AndroidPluginForGradle.md
similarity index 99%
rename from _posts/2018-01-07-Gradle-GradleWrappe-AndroidPluginForGradle.md
rename to _posts/others/2018-01-07-Gradle-GradleWrappe-AndroidPluginForGradle.md
index 997c084..b241db6 100644
--- a/_posts/2018-01-07-Gradle-GradleWrappe-AndroidPluginForGradle.md
+++ b/_posts/others/2018-01-07-Gradle-GradleWrappe-AndroidPluginForGradle.md
@@ -1,7 +1,7 @@
---
title: "彻底搞懂Gradle_Gradle Wrapper与Android Plugin for Gradle的区别和联系"
categories:
- - Blog
+ - others
tags:
- Android
- Gradle
diff --git a/_posts/2018-03-11-Groovy-Compiler-Analysis-01.md b/_posts/others/2018-03-11-Groovy-Compiler-Analysis-01.md
similarity index 99%
rename from _posts/2018-03-11-Groovy-Compiler-Analysis-01.md
rename to _posts/others/2018-03-11-Groovy-Compiler-Analysis-01.md
index 4843ff8..c78ab00 100644
--- a/_posts/2018-03-11-Groovy-Compiler-Analysis-01.md
+++ b/_posts/others/2018-03-11-Groovy-Compiler-Analysis-01.md
@@ -1,7 +1,7 @@
---
title: "Groovy实现原理分析——准备工作"
categories:
- - Blog
+ - others
tags:
- Groovy
- 源码分析
diff --git a/_posts/2018-03-11-Groovy-Compiler-Analysis-02.md b/_posts/others/2018-03-11-Groovy-Compiler-Analysis-02.md
similarity index 99%
rename from _posts/2018-03-11-Groovy-Compiler-Analysis-02.md
rename to _posts/others/2018-03-11-Groovy-Compiler-Analysis-02.md
index 69dc346..14a46d1 100644
--- a/_posts/2018-03-11-Groovy-Compiler-Analysis-02.md
+++ b/_posts/others/2018-03-11-Groovy-Compiler-Analysis-02.md
@@ -1,7 +1,7 @@
---
title: "Groovy实现原理分析——词法分析、语法分析、生成JVM字节码综述"
categories:
- - Blog
+ - others
tags:
- Groovy
- 源码分析
diff --git a/_posts/2018-11-04-Publish-to-Maven-Center.md b/_posts/others/2018-11-04-Publish-to-Maven-Center.md
similarity index 99%
rename from _posts/2018-11-04-Publish-to-Maven-Center.md
rename to _posts/others/2018-11-04-Publish-to-Maven-Center.md
index 4e4dbe3..10902eb 100644
--- a/_posts/2018-11-04-Publish-to-Maven-Center.md
+++ b/_posts/others/2018-11-04-Publish-to-Maven-Center.md
@@ -1,7 +1,7 @@
---
title: "如何发布Maven依赖到中央仓库"
categories:
- - Blog
+ - others
tags:
- Java
- Maven
diff --git a/_posts/2018-11-23-Java-Code-Check.md b/_posts/others/2018-11-23-Java-Code-Check.md
similarity index 99%
rename from _posts/2018-11-23-Java-Code-Check.md
rename to _posts/others/2018-11-23-Java-Code-Check.md
index 09b35ec..3be7427 100644
--- a/_posts/2018-11-23-Java-Code-Check.md
+++ b/_posts/others/2018-11-23-Java-Code-Check.md
@@ -1,7 +1,7 @@
---
title: "Java代码质量度量工具大阅兵"
categories:
- - Blog
+ - others
tags:
- Java
- Code Check
diff --git a/_posts/2020-02-10-Cpp-Code-Check.md b/_posts/others/2020-02-10-Cpp-Code-Check.md
similarity index 99%
rename from _posts/2020-02-10-Cpp-Code-Check.md
rename to _posts/others/2020-02-10-Cpp-Code-Check.md
index 4440ad1..31ee9fb 100644
--- a/_posts/2020-02-10-Cpp-Code-Check.md
+++ b/_posts/others/2020-02-10-Cpp-Code-Check.md
@@ -1,7 +1,7 @@
---
title: "Cpp代码质量度量工具大阅兵"
categories:
- - Blog
+ - others
tags:
- Cpp
- Code Check
diff --git "a/_drafts/202301072208PDF\345\270\270\350\247\201\351\227\256\351\242\230\346\200\273\347\273\223.md" "b/_posts/others/2023-01-07-PDF\345\270\270\350\247\201\351\227\256\351\242\230\350\247\243\345\206\263\346\226\271\346\241\210\346\261\207\346\200\273.md"
similarity index 78%
rename from "_drafts/202301072208PDF\345\270\270\350\247\201\351\227\256\351\242\230\346\200\273\347\273\223.md"
rename to "_posts/others/2023-01-07-PDF\345\270\270\350\247\201\351\227\256\351\242\230\350\247\243\345\206\263\346\226\271\346\241\210\346\261\207\346\200\273.md"
index c80f23f..6845c1d 100644
--- "a/_drafts/202301072208PDF\345\270\270\350\247\201\351\227\256\351\242\230\346\200\273\347\273\223.md"
+++ "b/_posts/others/2023-01-07-PDF\345\270\270\350\247\201\351\227\256\351\242\230\350\247\243\345\206\263\346\226\271\346\241\210\346\261\207\346\200\273.md"
@@ -1,18 +1,30 @@
-# PDF常见问题解决方案汇总
+---
+title: "PDF常见问题解决方案汇总"
+categories:
+ - others
+tags:
+ - PDF
+ - Adobe Acrobat
+toc: true
+---
-## Adobe Acrobat修改PDF文档,保存的时候报错“读取本文档时出现问题(135)”
+本文针对PDF文件的常见问题及其解决方案进行汇总,主要是Adobe Acrobat的使用问题。
+
+## Adobe Acrobat
+
+### Adobe Acrobat修改PDF文档,保存的时候报错“读取本文档时出现问题(135)”
* 导出图片,然后再合并成PDF了。这种方法是可行的,但是缺点是书签就都没了,文字也因为变成图片格式而无法复制为文本了。
* 直接导出PDF,但是试验了一下,此方法不可行。说缺少文件:`The file "PreflightLib.dll" is missing or corrupt`
* 另存为其他——优化的PDF——标准设置,对新的文档进行之前的修改即可。
* 先随便找一个PDF文件(1.PDF)(可以先用一张图片转换成PDF,或者Word直接打印为PDF)。然后把需要保存的PDF文件和那个1.pdf一起选中,右键“在Acrobat中合并支持的文件...”。 然后保存为组合1.pdf。这个组合1已经能编辑自如了。把刚才的1.PDF的多余页面删除即可。此方法的优点是:保留了书签,而且保留了文本形式PDF上的文本的可复制性。
-## Adobe Acrobat修改PDF文档,保存的时候报错:“读取本文档时出现问题(110)”
+### Adobe Acrobat修改PDF文档,保存的时候报错:“读取本文档时出现问题(110)”
1. 另存为其他——优化的PDF——标准设置,对新的文档进行之前的修改即可。
2. 下载PDF-Viewer,然后用这个软件把问题文件打开,再把问题文件另存为自己随便取个名字的pdf文件。保存好后用之前的文件阅读器打开看看,基本上问题就解决了。最后记得把转存好的文件名字改回需要的名字。把原来的问题文件删除就OK了。
-## 用Adobe Acrobat去除PDF文件的数字签名
+### 用Adobe Acrobat去除PDF文件的数字签名
今天遇到一个PDF,不但加了口令,还用了数字签名。口令很多工具都能对付,但是目前还真没什么工具能去除数字签名。我先把口令去了,现在可以复制内容,可以打印。但是由于数字签名还在,仍然无法进行修改、注释等操作。我尝试把这份文档再打印成PDF,这下数字签名倒是没有了,可原文件的书签也没了。又在网上看到有人说用“提取页面”也可以达到同样效果,但是也无法连书签一起提取。最后在网上找到一个解决方案:
@@ -20,7 +32,7 @@
2. 使用“文档->插入页面”,把有数字签名的文档插入到那一页后面。
3. 使用“文档->删除页面”,删除第一页,然后保存文档。
-## 用Adobe Acrobat批量删除PDF文件中各类水印、背景、文本等
+### 用Adobe Acrobat批量删除PDF文件中各类水印、背景、文本等
下载的 PDF 文件经常被加入许多广告性质的水印等,影响阅读。其删除办法如下:
@@ -40,11 +52,11 @@
注:标记密文前,最好设置密文属性为无填充、100%透明:`工具`-`保护`-`密文属性`
-## 用Adobe Acrobat解决pdf页面大小不一致问题
+### 用Adobe Acrobat解决pdf页面大小不一致问题
`视图`-`工具`-`印刷制作`-`设置页面框`。在弹出的“设置页面框”视图里设置`固定大小:页面大小A4`(注:此处请按需设置)、`页面范围:所有页面`。然后点击“确定”。
-## 使用Adobe Acrobat将PDF所有书签批量修改为“适合宽度”显示
+### 使用Adobe Acrobat将PDF所有书签批量修改为“适合宽度”显示
注意:本文所述方法不能自动创建书签,仅仅是修改点击书签后的显示模式。
@@ -53,6 +65,15 @@
3. 按组合键Shift+/折叠所有书签。注意:组合键中的‘/’必须是数字小键盘上的除号,这意味着:如果您使用的笔记本没有数字小键盘,您需要外接一个带数字小键盘的完整键盘。
4. 最后保存PDF文件的修改即可。
+### Adobe Acrobat防盗版弹框
+
+`Adobe Acrobat Pro`打开PDF后,过一会就会弹出盗版保护窗口,提示:`This unlicensed Adobe app has been disabled`。解决方式如下:
+
+* `C:\Program Files\Adobe\Acrobat DC\Acrobat\AcroCEF\AcroCEF.exe`改名为`AcroCEF.exe.bak`
+* `C:\Program Files\Adobe\Acrobat DC\Acrobat\acrocef_1\AcroCEF.exe`改名为`AcroCEF.exe.bak`
+
+然后重新打开`Adobe Acrobat Pro`,就不会弹出盗版保护窗口了。
+
## 其它问题
* PDF to Word Converter:
diff --git a/_posts/2024-04-13-Password-Recovery-Tools-Analysis.md b/_posts/others/2024-04-13-Password-Recovery-Tools-Analysis.md
similarity index 99%
rename from _posts/2024-04-13-Password-Recovery-Tools-Analysis.md
rename to _posts/others/2024-04-13-Password-Recovery-Tools-Analysis.md
index 7dd1d4c..cc352d0 100644
--- a/_posts/2024-04-13-Password-Recovery-Tools-Analysis.md
+++ b/_posts/others/2024-04-13-Password-Recovery-Tools-Analysis.md
@@ -1,7 +1,7 @@
---
title: "密码恢复工具分析"
categories:
- - Blog
+ - others
tags:
- Password Recovery
---
diff --git a/_posts/others/2024-06-22-Aloys-Build-Manual.md b/_posts/others/2024-06-22-Aloys-Build-Manual.md
new file mode 100644
index 0000000..f90747d
--- /dev/null
+++ b/_posts/others/2024-06-22-Aloys-Build-Manual.md
@@ -0,0 +1,4389 @@
+---
+title: "Aloys的环境搭建手册"
+categories:
+ - others
+tags:
+ - 环境搭建
+toc: true
+---
+
+Windows信息:
+
+
+
+将要配置的集群信息:
+利用Virtualbox,安装三台Ubuntu 16.04.1版本的虚拟机,其中一台担任DataNode、SecondaryNameNode、ResourceManager的角色,另外两台担任DataNode、NodeManager的角色。具体组网如下:
+
+主机名|IP|掩码|网关|DNS服务器|角色
+---|---|---|---|---|---
+DESKTOP-LSB0HI4|192.168.1.100|255.255.255.0|192.168.1.1|114.114.114.114|主机
+Ubuntu-01|192.168.1.160|255.255.255.0|192.168.1.1|114.114.114.114|DataNode/SecondaryNameNode/ResourceManager/master/worker/zookeeper/HMaster/hive/pig
+Ubuntu-02|192.168.1.170|255.255.255.0|192.168.1.1|114.114.114.114|DataNode/NodeManager/worker/zookeeper/HRegion
+Ubuntu-03|192.168.1.180|255.255.255.0|192.168.1.1|114.114.114.114|DataNode/NodeManager/ worker/zookeeper/HRegion
+
+## 安装VirtualBox
+
+首先需要在主机中安装虚拟机VirtualBox,此次我安装的版本为VirtualBox-5.1.14-112924-Win。
+
+下载地址:
+
+单机VirtualBox-5.1.14-112924-Win.exe,按照所给的说明进行安装:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## 安装Linux(Ubuntu)
+
+安装Virtualbox之后,需要在其中安装Linux服务器。我使用的Linux发行版本为:ubuntu-16.04.1-desktop-amd64。
+
+下载地址:
+
+
+
+
+
+此处需要为虚拟机分配内存大小,建议内存充足的朋友多分配一些。此处我分配了512MB内存,但是之后又修改为1024MB。
+
+
+
+
+
+
+此处需要分配虚拟机的硬盘容量,请硬盘容量充足的朋友多分配一些。另外虚拟硬盘最好存储在SSD这样的高速存取设备上,提升虚拟机相应速度。
+
+
+
+
+将共享剪贴板和拖放功能均选为双向:
+
+
+
+此处将虚拟机内存修改为1024MB。
+
+
+
+点击右侧的关盘图标,选择我们之前下载的ubuntu-16.04.1-desktop-amd64.iso
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## 复制虚拟机
+
+安装Ubuntu-16.04.1-01之后,复制该虚拟机,创建Ubuntu-16.04.1-02、Ubuntu-16.04.1-03
+
+
+
+
+
+
+
+复制之后效果如下图:
+
+
+
+## 配置各个虚拟机
+
+```shell
+hadoop@Ubuntu-01:~$ sudo apt-get install lrzsz
+hadoop@Ubuntu-01:~$ sudo apt-get install vim
+```
+
+### 配置网络
+
+将服务器的IP分配方式改为固定IP,点击系统设置-网络-选项-IPv4设置。按照下图进行设置。注意不要忘了DNS服务器的配置,否则会导致虚拟机无法上外网。
+
+配置完网络之后,尝试主机和虚拟机互相ping,如果均能ping同则说明网络配置正常。否则需要检查防火墙等配置。此次安装过程中,主机可以ping通虚拟机,但是虚拟机无法ping通主机。关闭Windows机器防火墙后,问题解决。
+
+
+
+
+### 安装openssh-server
+
+为了之后方便主机与虚拟机之间,以及各个虚拟机之间方便通讯,需要在虚拟机中安装openssh-server。(Ubuntu默认已经安装SSH Client)
+
+```shell
+sudo apt-get install openssh-server
+```
+
+安装之后就可以在Windows主机上利用XShell登陆各个虚拟机。
+
+
+
+
+### 开启root用户
+
+在之后的某些操作中(比如文件传输)经常需要root用户,但是Ubuntu默认是不开启root用户的,使用下面的命令进行开启:
+sudo passwd root
+
+### 修改主机名
+
+复制的虚拟机的主机名均为Ubuntu-01,但为了以后集群中能够容易分辨各台服务器,需要给每台机器取个不同的名字。机器名由 /etc/hostname文件决定。
+sudo vim /etc/hostname
+
+在三台虚拟机上,分别配置为:
+Ubuntu-01
+Ubuntu-02
+Ubuntu-03
+重启三台虚拟机(sudo reboot),重新利用XShell进行登录,效果如下:
+
+
+
+
+
+
+
+
+### 修改hosts
+
+为了让主机与各个虚拟机以及各个虚拟机之间通讯更加方便,需要配置主机和三台虚拟机的hosts文件:
+
+Windows主机(C:\windows\system32\drivers\etc)
+
+
+
+Ubuntu-01(/etc/hosts)
+
+
+
+Ubuntu-02(/etc/hosts)
+
+
+
+Ubuntu-03(/etc/hosts)
+
+
+
+
+
+修改之前效果:
+
+
+
+修改之后效果:
+
+
+### 创建hadoop用户组和用户
+
+
+
+
+
+另外还需要给hadoop用户添加权限,打开/etc/sudoers文件,在root ALL=(ALL:ALL) ALL下添加hadoop ALL=(ALL:ALL) ALL,
+
+
+创建hadoop用户之后,su到hadoop用户,进行后续操作。本文之后的所有操作,如无特殊说明均是指在hadoop用户下。
+
+### 配置ssh免登陆
+
+为了完成分布式计算系统,需要三台机器相互之间可以无密码访问(或者是master可以无密码访问2个slave)。
+在个人目录/home/hadoop下新建.ssh文件夹,在.ssh中执行
+`ssh-keygen -t rsa`
+系统会问你一些配置,由于是初次实验,不需要这些内容,点回车继续下去即可。完成后会在.ssh/下生成id_rsa和id_rsa.pub两个文件,三台机器做同样处理。
+
+
+
+接下来把它们的密钥相互交换,这样做的目的是把Ubuntu-01的密钥交给Ubuntu-02和Ubuntu-03,对Ubuntu-02和Ubuntu-03做同样处理,完成后每一个机器的/.ssh/中应该有3个密钥,一个是自己的,另两个是别人的。
+
+
+
+
+
+
+
+
+把自己的密钥连同别人的两个密钥加到授权密钥中
+
+
+
+
+
+
+
+
+
+接下来检验相互之间是否可以通过ssh实现无密码访问
+
+
+访问成功会显示欢迎信息,初次访问需要yes,之后就可以不直接访问了。
+
+### 安装JDK
+
+首先利用java -version命令,检查系统中有没有openjdk,如果有的话利用下面的命令删除:
+
+`sudo apt-get purge openjdk*`
+
+在此次安装的权限系统中没有发现openjdk。
+
+
+
+此次安装的jdk版本为jdk-8u121-linux-x64。
+下载地址为:
+
+```shell
+hadoop@Ubuntu-01:~$ cd /usr/local
+hadoop@Ubuntu-01:/usr/local$ sudo mkdir java
+hadoop@Ubuntu-01:/usr/local$ sudo chown hadoop:hadoop java/
+```
+
+上传jdk-8u121-linux-x64.tar.gz到java目录
+
+```shell
+hadoop@Ubuntu-01:/usr/local$ cd java/
+hadoop@Ubuntu-01:/usr/local/java$ tar -zxvf jdk-8u121-linux-x64.tar.gz
+```
+
+
+
+```shell
+sudo vim /etc/profile
+```
+
+在文件末尾添加如下内容:
+
+```shell
+export JAVA_HOME=/usr/local/java/jdk1.8.0_121
+export CLASSPATH=.:$JAVA_HOME/lib:$CLASSPATH
+export PATH=$JAVA_HOME/bin:$PATH
+```
+
+然后检查是否安装成功:
+
+
+## 安装Hadoop
+
+```shell
+cd /usr/local
+hadoop@Ubuntu-01:/usr/local$ sudo mkdir hadoop
+hadoop@Ubuntu-01:/usr/local$ sudo chown hadoop:hadoop hadoop/
+
+hadoop@Ubuntu-01:/usr/local$ cd hadoop/
+hadoop@Ubuntu-01:/usr/local/hadoop$ tar -xzvf hadoop-2.7.3.tar.gz
+hadoop@Ubuntu-01:/usr/local/hadoop$ rm hadoop-2.7.3.tar.gz
+
+hadoop@Ubuntu-01:/usr/local/hadoop$ sudo vim /etc/profile
+
+export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.3
+export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
+
+hadoop@Ubuntu-01:/usr/local/hadoop$ source /etc/profile
+```
+
+### 修改Hadoop配置文件
+
+Hadoop配置文件均在/usr/local/hadoop/hadoop-2.7.3/etc/hadoop 下
+
+#### hadoop-env.sh
+
+
+虽然已经在/etc/profile中设置了JAVA_HOME环境变量,但是此处仍然要进行配置。
+
+#### yarn-env.sh
+
+
+由于已经设置了JAVA_HOME环境变量,此处可以不设置
+
+#### slaves
+
+
+#### core-site.xml
+
+```xml
+
+
+ fs.defaultFS
+ hdfs://Ubuntu-01:9000
+
+
+ io.file.buffer.size
+ 131072
+
+
+ hadoop.tmp.dir
+ file:/usr/local/hadoop/hadoop-2.7.3/tmp
+ Abasefor other temporary directories.
+
+
+ hadoop.proxyuser.spark.hosts
+ *
+
+
+ hadoop.proxyuser.spark.groups
+ *
+
+
+```
+
+#### hdfs-site.xml
+
+```xml
+
+
+
+ dfs.namenode.secondary.http-address
+ Ubuntu-01:9001
+
+
+
+ dfs.namenode.name.dir
+ file:/usr/local/hadoop/hadoop-2.7.3/name
+
+
+
+ dfs.datanode.data.dir
+ file:/usr/local/hadoop/hadoop-2.7.3/tmp
+
+
+
+ dfs.replication
+ 2
+
+
+
+ dfs.webhdfs.enabled
+ true
+
+
+
+```
+
+#### mapred-site.xml
+
+```xml
+
+
+ mapreduce.framework.name
+ yarn
+
+
+ mapreduce.jobhistory.address
+ Ubuntu-01:10020
+
+
+ mapreduce.jobhistory.webapp.address
+ Ubuntu-01:19888
+
+
+
+
+```
+
+#### yarn-site.xml
+
+```xml
+
+ yarn.nodemanager.aux-services
+ mapreduce_shuffle
+
+
+ yarn.nodemanager.aux-services.mapreduce.shuffle.class
+ org.apache.hadoop.mapred.ShuffleHandler
+
+
+ yarn.resourcemanager.address
+ Ubuntu-01:8032
+
+
+ yarn.resourcemanager.scheduler.address
+ Ubuntu-01:8030
+
+
+ yarn.resourcemanager.resource-tracker.address
+ Ubuntu-01:8035
+
+
+ yarn.resourcemanager.admin.address
+ Ubuntu-01:8033
+
+
+ yarn.resourcemanager.webapp.address
+ Ubuntu-01:8088
+
+
+ yarn.resourcemanager.hostname
+ 192.168.0.160
+
+
+
+```
+
+#### 将配置好的hadoop文件copy到另一台slave机器上
+
+```shell
+hadoop@Ubuntu-01:/usr/local/hadoop$ scp -r hadoop-2.7.3/ hadoop@Ubuntu-02:/usr/local/hadoop/
+hadoop@Ubuntu-01:/usr/local/hadoop$ scp -r hadoop-2.7.3/ hadoop@Ubuntu-03:/usr/local/hadoop/
+```
+
+
+### 验证
+
+#### 格式化namenode
+
+```shell
+hadoop@Ubuntu-01:/usr/local/hadoop/hadoop-2.7.3/etc/hadoop$ hdfs namenode -format
+17/02/12 14:00:27 INFO namenode.NameNode: STARTUP_MSG:
+/************************************************************
+STARTUP_MSG: Starting NameNode
+STARTUP_MSG: host = Ubuntu-01/127.0.1.1
+STARTUP_MSG: args = [-format]
+STARTUP_MSG: version = 2.7.3
+STARTUP_MSG: classpath = /usr/local/hadoop/hadoop-2.7.3/etc/hadoop:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jettison-1.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/gson-2.2.4.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/commons-digester-1.8.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/commons-configuration-1.6.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jets3t-0.9.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/servlet-api-2.5.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/httpclient-4.2.5.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/hamcrest-core-1.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jaxb-api-2.2.2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jersey-core-1.9.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/activation-1.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/apacheds-kerberos-codec-2.0.0-M15.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/commons-httpclient-3.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jetty-6.1.26.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/java-xmlbuilder-0.4.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/hadoop-auth-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/commons-logging-1.1.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/commons-codec-1.4.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jersey-server-1.9.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jackson-core-asl-1.9.13.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/api-asn1-api-1.0.0-M20.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/curator-recipes-2.7.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jsch-0.1.42.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jackson-mapper-asl-1.9.13.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/api-util-1.0.0-M20.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/apacheds-i18n-2.0.0-M15.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/mockito-all-1.8.5.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/log4j-1.2.17.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/slf4j-api-1.7.10.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jaxb-impl-2.2.3-1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/netty-3.6.2.Final.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/commons-collections-3.2.2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/stax-api-1.0-2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jsr305-3.0.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/httpcore-4.2.5.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/commons-math3-3.1.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jackson-xc-1.9.13.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/htrace-core-3.1.0-incubating.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/commons-io-2.4.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/commons-net-3.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/snappy-java-1.0.4.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/curator-framework-2.7.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/commons-lang-2.6.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/junit-4.11.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/xz-1.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/guava-11.0.2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/commons-beanutils-1.7.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/asm-3.2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/avro-1.7.4.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jersey-json-1.9.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jetty-util-6.1.26.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/zookeeper-3.4.6.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/xmlenc-0.52.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/commons-beanutils-core-1.8.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/commons-compress-1.4.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jackson-jaxrs-1.9.13.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/paranamer-2.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/commons-cli-1.2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/protobuf-java-2.5.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/jsp-api-2.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/curator-client-2.7.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/hadoop-annotations-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/hadoop-common-2.7.3-tests.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/hadoop-nfs-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/hadoop-common-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/xml-apis-1.3.04.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/servlet-api-2.5.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/jersey-core-1.9.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/jetty-6.1.26.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/commons-logging-1.1.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/commons-codec-1.4.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/jersey-server-1.9.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/jackson-core-asl-1.9.13.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/netty-all-4.0.23.Final.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/jackson-mapper-asl-1.9.13.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/log4j-1.2.17.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/netty-3.6.2.Final.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/jsr305-3.0.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/htrace-core-3.1.0-incubating.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/commons-io-2.4.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/commons-lang-2.6.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/xercesImpl-2.9.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/guava-11.0.2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/asm-3.2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/commons-daemon-1.0.13.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/jetty-util-6.1.26.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/xmlenc-0.52.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/leveldbjni-all-1.8.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/commons-cli-1.2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/lib/protobuf-java-2.5.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/hadoop-hdfs-nfs-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/hadoop-hdfs-2.7.3-tests.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/hdfs/hadoop-hdfs-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/jettison-1.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/servlet-api-2.5.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/guice-3.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/aopalliance-1.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/jaxb-api-2.2.2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/guice-servlet-3.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/jersey-core-1.9.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/activation-1.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/jetty-6.1.26.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/commons-logging-1.1.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/commons-codec-1.4.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/jersey-server-1.9.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/jackson-core-asl-1.9.13.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/jackson-mapper-asl-1.9.13.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/log4j-1.2.17.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/jaxb-impl-2.2.3-1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/netty-3.6.2.Final.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/commons-collections-3.2.2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/stax-api-1.0-2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/jsr305-3.0.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/jackson-xc-1.9.13.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/commons-io-2.4.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/commons-lang-2.6.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/jersey-guice-1.9.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/xz-1.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/guava-11.0.2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/asm-3.2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/jersey-json-1.9.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/jetty-util-6.1.26.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/zookeeper-3.4.6.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/jersey-client-1.9.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/commons-compress-1.4.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/jackson-jaxrs-1.9.13.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/leveldbjni-all-1.8.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/zookeeper-3.4.6-tests.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/commons-cli-1.2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/protobuf-java-2.5.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/javax.inject-1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/hadoop-yarn-registry-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/hadoop-yarn-server-sharedcachemanager-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/hadoop-yarn-server-resourcemanager-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/hadoop-yarn-server-web-proxy-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/hadoop-yarn-client-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/hadoop-yarn-server-nodemanager-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/hadoop-yarn-api-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/hadoop-yarn-server-tests-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/hadoop-yarn-common-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/hadoop-yarn-applications-distributedshell-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/hadoop-yarn-server-common-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/hadoop-yarn-server-applicationhistoryservice-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/hadoop-yarn-applications-unmanaged-am-launcher-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/hamcrest-core-1.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/guice-3.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/aopalliance-1.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/guice-servlet-3.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/jersey-core-1.9.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/jersey-server-1.9.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/jackson-core-asl-1.9.13.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/jackson-mapper-asl-1.9.13.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/log4j-1.2.17.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/netty-3.6.2.Final.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/commons-io-2.4.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/snappy-java-1.0.4.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/junit-4.11.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/jersey-guice-1.9.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/xz-1.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/asm-3.2.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/avro-1.7.4.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/commons-compress-1.4.1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/paranamer-2.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/leveldbjni-all-1.8.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/protobuf-java-2.5.0.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/javax.inject-1.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/lib/hadoop-annotations-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-client-app-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-client-hs-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-client-hs-plugins-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-client-common-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-client-shuffle-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.3-tests.jar:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar:/usr/local/hadoop/hadoop-2.7.3/contrib/capacity-scheduler/*.jar
+STARTUP_MSG: build = https://git-wip-us.apache.org/repos/asf/hadoop.git -r baa91f7c6bc9cb92be5982de4719c1c8af91ccff; compiled by 'root' on 2016-08-18T01:41Z
+STARTUP_MSG: java = 1.8.0_121
+************************************************************/
+17/02/12 14:00:27 INFO namenode.NameNode: registered UNIX signal handlers for [TERM, HUP, INT]
+17/02/12 14:00:27 INFO namenode.NameNode: createNameNode [-format]
+Formatting using clusterid: CID-7e34c743-19b0-4ebb-b922-37e8657a8090
+17/02/12 14:00:27 INFO namenode.FSNamesystem: No KeyProvider found.
+17/02/12 14:00:27 INFO namenode.FSNamesystem: fsLock is fair:true
+17/02/12 14:00:27 INFO blockmanagement.DatanodeManager: dfs.block.invalidate.limit=1000
+17/02/12 14:00:27 INFO blockmanagement.DatanodeManager: dfs.namenode.datanode.registration.ip-hostname-check=true
+17/02/12 14:00:27 INFO blockmanagement.BlockManager: dfs.namenode.startup.delay.block.deletion.sec is set to 000:00:00:00.000
+17/02/12 14:00:27 INFO blockmanagement.BlockManager: The block deletion will start around 2017 二月 12 14:00:27
+17/02/12 14:00:27 INFO util.GSet: Computing capacity for map BlocksMap
+17/02/12 14:00:27 INFO util.GSet: VM type = 64-bit
+17/02/12 14:00:28 INFO util.GSet: 2.0% max memory 966.7 MB = 19.3 MB
+17/02/12 14:00:28 INFO util.GSet: capacity = 2^21 = 2097152 entries
+17/02/12 14:00:28 INFO blockmanagement.BlockManager: dfs.block.access.token.enable=false
+17/02/12 14:00:28 INFO blockmanagement.BlockManager: defaultReplication = 3
+17/02/12 14:00:28 INFO blockmanagement.BlockManager: maxReplication = 512
+17/02/12 14:00:28 INFO blockmanagement.BlockManager: minReplication = 1
+17/02/12 14:00:28 INFO blockmanagement.BlockManager: maxReplicationStreams = 2
+17/02/12 14:00:28 INFO blockmanagement.BlockManager: replicationRecheckInterval = 3000
+17/02/12 14:00:28 INFO blockmanagement.BlockManager: encryptDataTransfer = false
+17/02/12 14:00:28 INFO blockmanagement.BlockManager: maxNumBlocksToLog = 1000
+17/02/12 14:00:28 INFO namenode.FSNamesystem: fsOwner = hadoop (auth:SIMPLE)
+17/02/12 14:00:28 INFO namenode.FSNamesystem: supergroup = supergroup
+17/02/12 14:00:28 INFO namenode.FSNamesystem: isPermissionEnabled = true
+17/02/12 14:00:28 INFO namenode.FSNamesystem: HA Enabled: false
+17/02/12 14:00:28 INFO namenode.FSNamesystem: Append Enabled: true
+17/02/12 14:00:28 INFO util.GSet: Computing capacity for map INodeMap
+17/02/12 14:00:28 INFO util.GSet: VM type = 64-bit
+17/02/12 14:00:28 INFO util.GSet: 1.0% max memory 966.7 MB = 9.7 MB
+17/02/12 14:00:28 INFO util.GSet: capacity = 2^20 = 1048576 entries
+17/02/12 14:00:28 INFO namenode.FSDirectory: ACLs enabled? false
+17/02/12 14:00:28 INFO namenode.FSDirectory: XAttrs enabled? true
+17/02/12 14:00:28 INFO namenode.FSDirectory: Maximum size of an xattr: 16384
+17/02/12 14:00:28 INFO namenode.NameNode: Caching file names occuring more than 10 times
+17/02/12 14:00:28 INFO util.GSet: Computing capacity for map cachedBlocks
+17/02/12 14:00:28 INFO util.GSet: VM type = 64-bit
+17/02/12 14:00:28 INFO util.GSet: 0.25% max memory 966.7 MB = 2.4 MB
+17/02/12 14:00:28 INFO util.GSet: capacity = 2^18 = 262144 entries
+17/02/12 14:00:28 INFO namenode.FSNamesystem: dfs.namenode.safemode.threshold-pct = 0.9990000128746033
+17/02/12 14:00:28 INFO namenode.FSNamesystem: dfs.namenode.safemode.min.datanodes = 0
+17/02/12 14:00:28 INFO namenode.FSNamesystem: dfs.namenode.safemode.extension = 30000
+17/02/12 14:00:28 INFO metrics.TopMetrics: NNTop conf: dfs.namenode.top.window.num.buckets = 10
+17/02/12 14:00:28 INFO metrics.TopMetrics: NNTop conf: dfs.namenode.top.num.users = 10
+17/02/12 14:00:28 INFO metrics.TopMetrics: NNTop conf: dfs.namenode.top.windows.minutes = 1,5,25
+17/02/12 14:00:28 INFO namenode.FSNamesystem: Retry cache on namenode is enabled
+17/02/12 14:00:28 INFO namenode.FSNamesystem: Retry cache will use 0.03 of total heap and retry cache entry expiry time is 600000 millis
+17/02/12 14:00:28 INFO util.GSet: Computing capacity for map NameNodeRetryCache
+17/02/12 14:00:28 INFO util.GSet: VM type = 64-bit
+17/02/12 14:00:28 INFO util.GSet: 0.029999999329447746% max memory 966.7 MB = 297.0 KB
+17/02/12 14:00:28 INFO util.GSet: capacity = 2^15 = 32768 entries
+Re-format filesystem in Storage Directory /usr/local/hadoop/hadoop-2.7.3/name ? (Y or N) Y
+17/02/12 14:00:33 INFO namenode.FSImage: Allocated new BlockPoolId: BP-1871053033-127.0.1.1-1486879233735
+17/02/12 14:00:33 INFO common.Storage: Storage directory /usr/local/hadoop/hadoop-2.7.3/name has been successfully formatted.
+17/02/12 14:00:33 INFO namenode.FSImageFormatProtobuf: Saving image file /usr/local/hadoop/hadoop-2.7.3/name/current/fsimage.ckpt_0000000000000000000 using no compression
+17/02/12 14:00:33 INFO namenode.FSImageFormatProtobuf: Image file /usr/local/hadoop/hadoop-2.7.3/name/current/fsimage.ckpt_0000000000000000000 of size 353 bytes saved in 0 seconds.
+17/02/12 14:00:33 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
+17/02/12 14:00:33 INFO util.ExitUtil: Exiting with status 0
+17/02/12 14:00:33 INFO namenode.NameNode: SHUTDOWN_MSG:
+/************************************************************
+SHUTDOWN_MSG: Shutting down NameNode at Ubuntu-01/127.0.1.1
+************************************************************/
+```
+
+
+#### 启动hdfs
+
+```shell
+hadoop@Ubuntu-01:/usr/local/hadoop/hadoop-2.7.3/etc/hadoop$ start-dfs.sh
+Starting namenodes on [Ubuntu-01]
+Ubuntu-01: starting namenode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-namenode-Ubuntu-01.out
+Ubuntu-03: starting datanode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-datanode-Ubuntu-03.out
+Ubuntu-02: starting datanode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-datanode-Ubuntu-02.out
+Starting secondary namenodes [Ubuntu-01]
+Ubuntu-01: starting secondarynamenode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-secondarynamenode-Ubuntu-01.out
+hadoop@Ubuntu-01:/usr/local/hadoop/hadoop-2.7.3/etc/hadoop$ jps
+9466 Jps
+9147 NameNode
+9357 SecondaryNameNode
+```
+
+#### 停止hdfs
+
+```shell
+hadoop@Ubuntu-01:/usr/local/hadoop/hadoop-2.7.3/etc/hadoop$ stop-dfs.sh
+Stopping namenodes on [Ubuntu-01]
+Ubuntu-01: stopping namenode
+Ubuntu-02: stopping datanode
+Ubuntu-03: stopping datanode
+Stopping secondary namenodes [Ubuntu-01]
+Ubuntu-01: stopping secondarynamenode
+hadoop@Ubuntu-01:/usr/local/hadoop/hadoop-2.7.3/etc/hadoop$ jps
+9814 Jps
+```
+
+#### 启动yarn
+
+```shell
+hadoop@Ubuntu-01:~$ start-yarn.sh
+starting yarn daemons
+starting resourcemanager, logging to /usr/local/hadoop/hadoop-2.7.3/logs/yarn-hadoop-resourcemanager-Ubuntu-01.out
+Ubuntu-02: starting nodemanager, logging to /usr/local/hadoop/hadoop-2.7.3/logs/yarn-hadoop-nodemanager-Ubuntu-02.out
+Ubuntu-03: starting nodemanager, logging to /usr/local/hadoop/hadoop-2.7.3/logs/yarn-hadoop-nodemanager-Ubuntu-03.out
+hadoop@Ubuntu-01:~$ jps
+6252 ResourceManager
+6509 Jps
+```
+
+#### 停止yarn
+
+```shell
+hadoop@Ubuntu-01:~$ stop-yarn.sh
+stopping yarn daemons
+stopping resourcemanager
+Ubuntu-03: stopping nodemanager
+Ubuntu-02: stopping nodemanager
+Ubuntu-03: nodemanager did not stop gracefully after 5 seconds: killing with kill -9
+Ubuntu-02: nodemanager did not stop gracefully after 5 seconds: killing with kill -9
+no proxyserver to stop
+```
+
+#### 查看集群状态
+
+```shell
+hadoop@Ubuntu-01:/usr/local/hadoop/hadoop-2.7.3/etc/hadoop$ hdfs dfsadmin -report
+report: Call From Ubuntu-01/127.0.1.1 to Ubuntu-01:9000 failed on connection exception: java.net.ConnectException: 拒绝连接; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
+hadoop@Ubuntu-01:/usr/local/hadoop/hadoop-2.7.3/etc/hadoop$ start-dfs.sh
+Starting namenodes on [Ubuntu-01]
+Ubuntu-01: starting namenode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-namenode-Ubuntu-01.out
+Ubuntu-03: starting datanode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-datanode-Ubuntu-03.out
+Ubuntu-02: starting datanode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-datanode-Ubuntu-02.out
+Starting secondary namenodes [Ubuntu-01]
+Ubuntu-01: starting secondarynamenode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-secondarynamenode-Ubuntu-01.out
+hadoop@Ubuntu-01:~$ hdfs dfsadmin -report
+Configured Capacity: 82167201792 (76.52 GB)
+Present Capacity: 67444781056 (62.81 GB)
+DFS Remaining: 67444297728 (62.81 GB)
+DFS Used: 483328 (472 KB)
+DFS Used%: 0.00%
+Under replicated blocks: 0
+Blocks with corrupt replicas: 0
+Missing blocks: 0
+Missing blocks (with replication factor 1): 0
+
+-------------------------------------------------
+Live datanodes (2):
+
+Name: 192.168.1.180:50010 (Ubuntu-03)
+Hostname: Ubuntu-03
+Decommission Status : Normal
+Configured Capacity: 41083600896 (38.26 GB)
+DFS Used: 241664 (236 KB)
+Non DFS Used: 7351656448 (6.85 GB)
+DFS Remaining: 33731702784 (31.42 GB)
+DFS Used%: 0.00%
+DFS Remaining%: 82.11%
+Configured Cache Capacity: 0 (0 B)
+Cache Used: 0 (0 B)
+Cache Remaining: 0 (0 B)
+Cache Used%: 100.00%
+Cache Remaining%: 0.00%
+Xceivers: 1
+Last contact: Sun Feb 12 23:18:24 CST 2017
+
+
+Name: 192.168.1.170:50010 (Ubuntu-02)
+Hostname: Ubuntu-02
+Decommission Status : Normal
+Configured Capacity: 41083600896 (38.26 GB)
+DFS Used: 241664 (236 KB)
+Non DFS Used: 7370764288 (6.86 GB)
+DFS Remaining: 33712594944 (31.40 GB)
+DFS Used%: 0.00%
+DFS Remaining%: 82.06%
+Configured Cache Capacity: 0 (0 B)
+Cache Used: 0 (0 B)
+Cache Remaining: 0 (0 B)
+Cache Used%: 100.00%
+Cache Remaining%: 0.00%
+Xceivers: 1
+Last contact: Sun Feb 12 23:18:24 CST 2017
+```
+
+#### 查看HDFS前台
+
+http://192.168.1.160:50070/
+
+
+#### 查看RM
+
+http://192.168.1.160:8088/
+
+
+
+
+#### 查看Jobhistory
+
+```shell
+hadoop@Ubuntu-01:~$ mr-jobhistory-daemon.sh start historyserver
+starting historyserver, logging to /usr/local/hadoop/hadoop-2.7.3/logs/mapred-hadoop-historyserver-Ubuntu-01.out
+hadoop@Ubuntu-01:~$ mr-jobhistory-daemon.sh stop historyserver
+stopping historyserver
+```
+
+http://192.168.1.160:19888/jobhistory
+
+
+
+#### 运行wordcount程序
+
+创建 input目录
+
+```shell
+hadoop@Ubuntu-01:~$ mkdir input
+```
+
+在input创建f1、f2并写内容
+
+```shell
+hadoop@Ubuntu-01:~$ cat input/f1
+Hello world bye jj
+hadoop@Ubuntu-01:~$ cat input/f2
+Hello Hadoop bye Hadoop
+```
+
+在hdfs创建/tmp/input目录
+
+```shell
+hadoop@Ubuntu-01:~$ hadoop fs -mkdir /tmp
+hadoop@Ubuntu-01:~$ hadoop fs -mkdir /tmp/input
+```
+
+将f1、f2文件copy到hdfs /tmp/input目录
+
+```shell
+hadoop@Ubuntu-01:~$ hadoop fs -put input/ /tmp
+```
+
+执行wordcount程序
+
+```shell
+hadoop@Ubuntu-01:~$ hadoop jar /usr/local/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /tmp/input /output
+17/02/12 21:47:48 INFO client.RMProxy: Connecting to ResourceManager at Ubuntu-01/192.168.1.160:8032
+17/02/12 21:47:49 INFO input.FileInputFormat: Total input paths to process : 2
+17/02/12 21:47:49 INFO mapreduce.JobSubmitter: number of splits:2
+17/02/12 21:47:50 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1486907123913_0001
+17/02/12 21:47:50 INFO impl.YarnClientImpl: Submitted application application_1486907123913_0001
+17/02/12 21:47:50 INFO mapreduce.Job: The url to track the job: http://Ubuntu-01:8088/proxy/application_1486907123913_0001/
+17/02/12 21:47:50 INFO mapreduce.Job: Running job: job_1486907123913_0001
+17/02/12 21:48:02 INFO mapreduce.Job: Job job_1486907123913_0001 running in uber mode : false
+17/02/12 21:48:02 INFO mapreduce.Job: map 0% reduce 0%
+17/02/12 21:48:12 INFO mapreduce.Job: map 100% reduce 0%
+17/02/12 21:48:20 INFO mapreduce.Job: map 100% reduce 100%
+17/02/12 21:48:21 INFO mapreduce.Job: Job job_1486907123913_0001 completed successfully
+17/02/12 21:48:21 INFO mapreduce.Job: Counters: 49
+ File System Counters
+ FILE: Number of bytes read=84
+ FILE: Number of bytes written=357236
+ FILE: Number of read operations=0
+ FILE: Number of large read operations=0
+ FILE: Number of write operations=0
+ HDFS: Number of bytes read=243
+ HDFS: Number of bytes written=36
+ HDFS: Number of read operations=9
+ HDFS: Number of large read operations=0
+ HDFS: Number of write operations=2
+ Job Counters
+ Launched map tasks=2
+ Launched reduce tasks=1
+ Data-local map tasks=2
+ Total time spent by all maps in occupied slots (ms)=16865
+ Total time spent by all reduces in occupied slots (ms)=4585
+ Total time spent by all map tasks (ms)=16865
+ Total time spent by all reduce tasks (ms)=4585
+ Total vcore-milliseconds taken by all map tasks=16865
+ Total vcore-milliseconds taken by all reduce tasks=4585
+ Total megabyte-milliseconds taken by all map tasks=17269760
+ Total megabyte-milliseconds taken by all reduce tasks=4695040
+ Map-Reduce Framework
+ Map input records=2
+ Map output records=8
+ Map output bytes=75
+ Map output materialized bytes=90
+ Input split bytes=198
+ Combine input records=8
+ Combine output records=7
+ Reduce input groups=5
+ Reduce shuffle bytes=90
+ Reduce input records=7
+ Reduce output records=5
+ Spilled Records=14
+ Shuffled Maps =2
+ Failed Shuffles=0
+ Merged Map outputs=2
+ GC time elapsed (ms)=426
+ CPU time spent (ms)=1580
+ Physical memory (bytes) snapshot=508022784
+ Virtual memory (bytes) snapshot=5689307136
+ Total committed heap usage (bytes)=263376896
+ Shuffle Errors
+ BAD_ID=0
+ CONNECTION=0
+ IO_ERROR=0
+ WRONG_LENGTH=0
+ WRONG_MAP=0
+ WRONG_REDUCE=0
+ File Input Format Counters
+ Bytes Read=45
+ File Output Format Counters
+ Bytes Written=36
+```
+
+查看执行结果
+
+```shell
+hadoop@Ubuntu-01:~$ hadoop fs -cat /output/part-r-00000
+Hadoop 2
+Hello 2
+bye 2
+jj 1
+world 1
+```
+
+## 安装Scala
+
+scala-2.11.8.tgz
+http://www.scala-lang.org/download/
+
+```shell
+hadoop@Ubuntu-01:~$ cd /usr/local
+hadoop@Ubuntu-01:/usr/local$ sudo mkdir scala
+hadoop@Ubuntu-01:/usr/local$ sudo chown hadoop:hadoop scala
+hadoop@Ubuntu-01:/usr/local$ cd scala/
+hadoop@Ubuntu-01:/usr/local/scala$ tar -zxvf scala-2.11.8.tgz
+
+
+hadoop@Ubuntu-01:/usr/local/scala$ sudo vim /etc/profile
+```
+
+末尾加入:
+
+```shell
+export SCALA_HOME=/usr/local/scala/scala-2.11.8
+export PATH=$PATH:$SCALA_HOME/bin
+```
+
+```shell
+hadoop@Ubuntu-01:/usr/local/scala$ source /etc/profile
+```
+
+
+另外两台机器进行类似操作安装scala
+
+## 安装Spark
+
+http://spark.apache.org/
+
+spark-2.1.0-bin-hadoop2.7.tgz
+
+```shell
+hadoop@Ubuntu-01:~$ cd /usr/local
+hadoop@Ubuntu-01:/usr/local$ sudo mkdir spark
+hadoop@Ubuntu-01:/usr/local$ sudo chown hadoop:hadoop spark
+hadoop@Ubuntu-01:/usr/local$ cd spark/
+hadoop@Ubuntu-01:/usr/local/spark$ tar -zxvf spark-2.1.0-bin-hadoop2.7.tgz
+
+hadoop@Ubuntu-01:/usr/local/spark$ sudo vim /etc/profile
+```
+
+```shell
+export SPARK_HOME=/usr/local/spark/spark-2.1.0-bin-hadoop2.7
+export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
+```
+
+```shell
+hadoop@Ubuntu-01:/usr/local/spark$ source /etc/profile
+```
+
+另外两台进行类似操作
+
+### 配置
+
+```shell
+cd /usr/local/spark/conf
+mv spark-env.sh.template spark-env.sh
+vim spark-env.sh
+```
+
+```shell
+HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
+SPARK_MASTER_HOST=192.168.1.160
+SPARK_MASTER_WEBUI_PORT=28686
+SPARK_LOCAL_DIRS=/usr/local/spark/spark-2.1.0-bin-hadoop2.7/tmp/local
+SPARK_WORKER_DIR=/usr/local/spark/spark-2.1.0-bin-hadoop2.7/tmp/worker
+SPARK_DRIVER_MEMORY=4G
+SPARK_WORKER_CORES=16
+SPARK_WORKER_MEMORY=64g
+SPARK_LOG_DIR=/usr/local/spark/spark-2.1.0-bin-hadoop2.7/tmp/logs
+# 下面的配置主要用于jobhistory,非必须
+SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://Ubuntu-01:9000/spark/log"
+```
+
+```shell
+mv spark-defaults.conf.template spark-defaults.conf
+vim spark-defaults.conf
+```
+
+```shell
+#下面的配置主要用于jobhistory,非必须
+
+spark.eventLog.enabled true
+spark.eventLog.dir hdfs://Ubuntu-01:9000/spark/log
+spark.eventLog.compress true
+```
+
+
+复制spark目录
+
+```shell
+hadoop@Ubuntu-01:/usr/local/spark$ scp -r spark-2.1.0-bin-hadoop2.7/ hadoop@Ubuntu-02:/usr/local/spark
+hadoop@Ubuntu-01:/usr/local/spark$ scp -r spark-2.1.0-bin-hadoop2.7/ hadoop@Ubuntu-03:/usr/local/spark
+```
+
+
+### 验证
+
+```shell
+hadoop@Ubuntu-01:~$ start-dfs.sh
+Starting namenodes on [Ubuntu-01]
+Ubuntu-01: starting namenode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-namenode-Ubuntu-01.out
+Ubuntu-02: starting datanode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-datanode-Ubuntu-02.out
+Ubuntu-03: starting datanode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-datanode-Ubuntu-03.out
+Starting secondary namenodes [Ubuntu-01]
+Ubuntu-01: starting secondarynamenode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-secondarynamenode-Ubuntu-01.out
+hadoop@Ubuntu-01:~$ jps
+5057 SecondaryNameNode
+4846 NameNode
+5166 Jps
+hadoop@Ubuntu-01:~$ start-yarn.sh
+starting yarn daemons
+starting resourcemanager, logging to /usr/local/hadoop/hadoop-2.7.3/logs/yarn-hadoop-resourcemanager-Ubuntu-01.out
+Ubuntu-02: starting nodemanager, logging to /usr/local/hadoop/hadoop-2.7.3/logs/yarn-hadoop-nodemanager-Ubuntu-02.out
+Ubuntu-03: starting nodemanager, logging to /usr/local/hadoop/hadoop-2.7.3/logs/yarn-hadoop-nodemanager-Ubuntu-03.out
+hadoop@Ubuntu-01:~$ jps
+5568 Jps
+5057 SecondaryNameNode
+5223 ResourceManager
+4846 NameNode
+hadoop@Ubuntu-01:~$ start-master.sh
+starting org.apache.spark.deploy.master.Master, logging to /usr/local/spark/spark-2.1.0-bin-hadoop2.7/tmp/logs/spark-hadoop-org.apache.spark.deploy.master.Master-1-Ubuntu-01.out
+hadoop@Ubuntu-01:~$ jps
+5649 Jps
+5057 SecondaryNameNode
+5223 ResourceManager
+5597 Master
+4846 NameNode
+hadoop@Ubuntu-01:~$ start-slave.sh 192.168.1.160:7077
+starting org.apache.spark.deploy.worker.Worker, logging to /usr/local/spark/spark-2.1.0-bin-hadoop2.7/tmp/logs/spark-hadoop-org.apache.spark.deploy.worker.Worker-1-Ubuntu-01.out
+hadoop@Ubuntu-01:~$ jps
+5057 SecondaryNameNode
+5223 ResourceManager
+5672 Worker
+5720 Jps
+5597 Master
+4846 NameNode
+
+hadoop@Ubuntu-01:~$ start-history-server.sh
+starting org.apache.spark.deploy.history.HistoryServer, logging to /usr/local/spark/spark-2.1.0-bin-hadoop2.7/tmp/logs/spark-hadoop-org.apache.spark.deploy.history.HistoryServer-1-Ubuntu-01.out
+
+hadoop@Ubuntu-01:~$ run-example org.apache.spark.examples.SparkPi 2>%1 | grep "Pi is roughly"
+Pi is roughly 3.140195700978505
+hadoop@Ubuntu-01:~$ spark-submit $SPARK_HOME/examples/src/main/python/pi.py 2>%1 | grep "Pi is roughly"
+Pi is roughly 3.146920
+
+
+hadoop@Ubuntu-01:~$ spark-shell
+Setting default log level to "WARN".
+To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
+17/02/15 22:30:19 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
+17/02/15 22:30:29 WARN metastore.ObjectStore: Version information not found in metastore. hive.metastore.schema.verification is not enabled so recording the schema version 1.2.0
+17/02/15 22:30:29 WARN metastore.ObjectStore: Failed to get database default, returning NoSuchObjectException
+17/02/15 22:30:32 WARN metastore.ObjectStore: Failed to get database global_temp, returning NoSuchObjectException
+Spark context Web UI available at http://192.168.1.160:4040
+Spark context available as 'sc' (master = local[*], app id = local-1487169020439).
+Spark session available as 'spark'.
+Welcome to
+ ____ __
+ / __/__ ___ _____/ /__
+ _\ \/ _ \/ _ `/ __/ '_/
+ /___/ .__/\_,_/_/ /_/\_\ version 2.1.0
+ /_/
+
+Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_121)
+Type in expressions to have them evaluated.
+Type :help for more information.
+
+scala> val textFile =sc.textFile("file:///usr/local/spark/spark-2.1.0-bin-hadoop2.7/README.md");
+textFile: org.apache.spark.rdd.RDD[String] = file:///usr/local/spark/spark-2.1.0-bin-hadoop2.7/README.md MapPartitionsRDD[1] at textFile at :24
+
+scala> textFile.count();
+res8: Long = 104
+
+scala> textFile.first();
+res9: String = # Apache Spark
+
+scala> val linesWithSpark = textFile.filter(line=> line.contains("Spark"));
+linesWithSpark: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[2] at filter at :26
+
+scala> linesWithSpark.count();
+res10: Long = 20
+
+scala> textFile.filter(line =>line.contains("Spark")).count();
+res11: Long = 20
+
+scala>
+```
+
+#### 前台界面
+
+SPARK_MASTER_WEBUI: http://192.168.1.160:28686/
+
+
+SPARK_HISTORY:http://192.168.1.160:18080/
+
+
+
+### 关闭顺序
+
+```shell
+hadoop@Ubuntu-01:~$ stop-history-server.sh
+stopping org.apache.spark.deploy.history.HistoryServer
+hadoop@Ubuntu-01:~$ stop-slaves.sh
+Ubuntu-02: stopping org.apache.spark.deploy.worker.Worker
+Ubuntu-03: stopping org.apache.spark.deploy.worker.Worker
+Ubuntu-01: stopping org.apache.spark.deploy.worker.Worker
+hadoop@Ubuntu-01:~$ stop-master.sh
+stopping org.apache.spark.deploy.master.Master
+hadoop@Ubuntu-01:~$ stop-yarn.sh
+stopping yarn daemons
+stopping resourcemanager
+Ubuntu-03: stopping nodemanager
+Ubuntu-02: stopping nodemanager
+no proxyserver to stop
+hadoop@Ubuntu-01:~$ stop-dfs.sh
+Stopping namenodes on [Ubuntu-01]
+Ubuntu-01: stopping namenode
+Ubuntu-02: stopping datanode
+Ubuntu-03: stopping datanode
+Stopping secondary namenodes [Ubuntu-01]
+Ubuntu-01: stopping secondarynamenode
+```
+
+### Scala-IDE搭建Spark源码分析环境
+
+下载、解压Scala-IDE,下载地址为:
+http://scala-ide.org/index.html
+scala-SDK-4.5.0-vfinal-2.11-win32.win32.x86_64.zip
+
+下载、安装SBT,下载地址为:
+http://www.scala-sbt.org/
+sbt-0.13.13.1.msi
+
+在github上下载最新的Spark源码:
+
+```shell
+PS D:\temp\Scala> git clone https://github.com/apache/spark.git
+
+PS D:\temp\Scala> cd .\spark\
+```
+
+输入sbt命令,首次会下载很多东西,速度比较慢,某些在墙外,所以需要提前搭建VPN。如果出错可以多执行几遍
+
+```shell
+PS D:\temp\Scala\spark> sbt
+ ignoring option MaxPermSize=256m; support was removed in 8.0
+[info] Loading project definition from D:\temp\Scala\spark\project
+[info] Resolving key references (18753 settings) ...
+[info] Set current project to spark-parent (in build file:/D:/temp/Scala/spark/)
+```
+
+在sbt提示符下输入eclipse,首次会下载很多东西,速度比较慢。如果出错多执行几遍。
+
+```shell
+> eclipse
+[info] About to create Eclipse project files for your project(s).
+[info] Resolving jline#jline;2.12.1 ...
+[info] Successfully created Eclipse project files for project(s):
+[info] spark-sql
+[info] spark-sql-kafka-0-10
+[info] spark-streaming-kafka-0-8-assembly
+[info] spark-examples
+[info] spark-streaming
+[info] spark-mllib
+[info] spark-catalyst
+[info] spark-streaming-kafka-0-10-assembly
+[info] spark-graphx
+[info] spark-streaming-flume-sink
+[info] spark-tags
+[info] spark-assembly
+[info] spark-mllib-local
+[info] spark-tools
+[info] spark-repl
+[info] spark-streaming-flume-assembly
+[info] spark-streaming-kafka-0-8
+[info] old-deps
+[info] spark-network-common
+[info] spark-hive
+[info] spark-streaming-flume
+[info] spark-sketch
+[info] spark-network-shuffle
+[info] spark-core
+[info] spark-unsafe
+[info] spark-streaming-kafka-0-10
+[info] spark-launcher
+> exit
+```
+
+在Scala-IDE导入spark项目:
+
+
+
+## 安装Zookeeper
+
+https://zookeeper.apache.org/
+
+zookeeper-3.4.9.tar.gz
+
+```shell
+hadoop@Ubuntu-01:~$ cd /usr/local
+hadoop@Ubuntu-01:/usr/local$ sudo mkdir zookeeper
+hadoop@Ubuntu-01:/usr/local$ sudo chown hadoop:hadoop zookeeper/
+hadoop@Ubuntu-01:/usr/local$ cd zookeeper/
+hadoop@Ubuntu-01:/usr/local/zookeeper$ tar -zxvf zookeeper-3.4.9.tar.gz
+
+hadoop@Ubuntu-01:/usr/local/zookeeper$ sudo vim /etc/profile
+
+export ZOOKEEPER_HOME=/usr/local/zookeeper/zookeeper-3.4.9
+export PATH=$PATH:$ZOOKEEPER_HOME/bin
+
+hadoop@Ubuntu-01:/usr/local/zookeeper$ source /etc/profile
+
+hadoop@Ubuntu-01:/usr/local/zookeeper/ $ cd zookeeper-3.4.9/conf
+hadoop@Ubuntu-01:/usr/local/zookeeper/zookeeper-3.4.9/conf$ cp zoo_sample.cfg zoo.cfg
+hadoop@Ubuntu-01:/usr/local/zookeeper/zookeeper-3.4.9/conf$ vim zoo.cfg
+```
+
+将dataDir改为dataDir=/usr/local/zookeeper/zookeeper-3.4.9/data(该目录需要新建),在文件末位添加所有的主机,注意server后面的数字需要与myid文件中的数字保持一致。
+
+
+
+```shell
+hadoop@Ubuntu-01:/usr/local/zookeeper/zookeeper-3.4.9$ mkdir data
+hadoop@Ubuntu-01:/usr/local/zookeeper/zookeeper-3.4.9$ cd data/
+hadoop@Ubuntu-01:/usr/local/zookeeper/zookeeper-3.4.9/data$ vim myid
+```
+
+myid中写入1
+
+对Ubuntu-02与Ubuntu-03机器进行类似操作,在各主机myid文件中写入各自的编号。
+
+```shell
+hadoop@Ubuntu-01:/usr/local/zookeeper$ scp -r zookeeper-3.4.9/ hadoop@Ubuntu-02:/usr/local/zookeeper/
+hadoop@Ubuntu-01:/usr/local/zookeeper$ scp -r zookeeper-3.4.9/ hadoop@Ubuntu-03:/usr/local/zookeeper/
+```
+
+### 验证
+在每台zookeeper机器上执行:
+
+```shell
+hadoop@Ubuntu-01:~$ zkServer.sh start
+ZooKeeper JMX enabled by default
+Using config: /usr/local/zookeeper/zookeeper-3.4.9/bin/../conf/zoo.cfg
+Starting zookeeper ... STARTED
+
+hadoop@Ubuntu-02:~$ zkServer.sh start
+ZooKeeper JMX enabled by default
+Using config: /usr/local/zookeeper/zookeeper-3.4.9/bin/../conf/zoo.cfg
+Starting zookeeper ... STARTED
+
+hadoop@Ubuntu-03:~$ zkServer.sh start
+ZooKeeper JMX enabled by default
+Using config: /usr/local/zookeeper/zookeeper-3.4.9/bin/../conf/zoo.cfg
+Starting zookeeper ... STARTED
+
+hadoop@Ubuntu-01:~$ zkServer.sh status
+ZooKeeper JMX enabled by default
+Using config: /usr/local/zookeeper/zookeeper-3.4.9/bin/../conf/zoo.cfg
+Mode: follower
+
+hadoop@Ubuntu-02:~$ zkServer.sh status
+ZooKeeper JMX enabled by default
+Using config: /usr/local/zookeeper/zookeeper-3.4.9/bin/../conf/zoo.cfg
+Mode: leader
+
+hadoop@Ubuntu-03:~$ zkServer.sh status
+ZooKeeper JMX enabled by default
+Using config: /usr/local/zookeeper/zookeeper-3.4.9/bin/../conf/zoo.cfg
+Mode: follower
+
+
+hadoop@Ubuntu-01:~$ zkCli.sh -server Ubuntu-01:2181
+Connecting to Ubuntu-01:2181
+2017-02-18 22:32:23,226 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.9-1757313, built on 08/23/2016 06:50 GMT
+2017-02-18 22:32:23,231 [myid:] - INFO [main:Environment@100] - Client environment:host.name=Ubuntu-01
+2017-02-18 22:32:23,231 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_121
+2017-02-18 22:32:23,233 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation
+2017-02-18 22:32:23,233 [myid:] - INFO [main:Environment@100] - Client environment:java.home=/usr/local/java/jdk1.8.0_121/jre
+2017-02-18 22:32:23,233 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=/usr/local/zookeeper/zookeeper-3.4.9/bin/../build/classes:/usr/local/zookeeper/zookeeper-3.4.9/bin/../build/lib/*.jar:/usr/local/zookeeper/zookeeper-3.4.9/bin/../lib/slf4j-log4j12-1.6.1.jar:/usr/local/zookeeper/zookeeper-3.4.9/bin/../lib/slf4j-api-1.6.1.jar:/usr/local/zookeeper/zookeeper-3.4.9/bin/../lib/netty-3.10.5.Final.jar:/usr/local/zookeeper/zookeeper-3.4.9/bin/../lib/log4j-1.2.16.jar:/usr/local/zookeeper/zookeeper-3.4.9/bin/../lib/jline-0.9.94.jar:/usr/local/zookeeper/zookeeper-3.4.9/bin/../zookeeper-3.4.9.jar:/usr/local/zookeeper/zookeeper-3.4.9/bin/../src/java/lib/*.jar:/usr/local/zookeeper/zookeeper-3.4.9/bin/../conf:.:/usr/local/java/jdk1.8.0_121/lib:.:/usr/local/java/jdk1.8.0_121/lib:.:/usr/local/java/jdk1.8.0_121/lib:
+2017-02-18 22:32:23,234 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
+2017-02-18 22:32:23,234 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
+2017-02-18 22:32:23,234 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=
+2017-02-18 22:32:23,235 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Linux
+2017-02-18 22:32:23,235 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64
+2017-02-18 22:32:23,235 [myid:] - INFO [main:Environment@100] - Client environment:os.version=4.4.0-62-generic
+2017-02-18 22:32:23,235 [myid:] - INFO [main:Environment@100] - Client environment:user.name=hadoop
+2017-02-18 22:32:23,236 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/home/hadoop
+2017-02-18 22:32:23,236 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/home/hadoop
+2017-02-18 22:32:23,237 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=Ubuntu-01:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@531d72ca
+Welcome to ZooKeeper!
+2017-02-18 22:32:23,268 [myid:] - INFO [main-SendThread(Ubuntu-01:2181):ClientCnxn$SendThread@1032] - Opening socket connection to server Ubuntu-01/192.168.1.160:2181. Will not attempt to authenticate using SASL (unknown error)
+JLine support is enabled
+2017-02-18 22:32:23,398 [myid:] - INFO [main-SendThread(Ubuntu-01:2181):ClientCnxn$SendThread@876] - Socket connection established to Ubuntu-01/192.168.1.160:2181, initiating session
+2017-02-18 22:32:23,429 [myid:] - INFO [main-SendThread(Ubuntu-01:2181):ClientCnxn$SendThread@1299] - Session establishment complete on server Ubuntu-01/192.168.1.160:2181, sessionid = 0x15a51a0e47d0000, negotiated timeout = 30000
+
+WATCHER::
+
+WatchedEvent state:SyncConnected type:None path:null
+[zk: Ubuntu-01:2181(CONNECTED) 0] quit
+Quitting...
+2017-02-18 22:32:34,993 [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@519] - EventThread shut down for session: 0x15a51a0e47d0000
+2017-02-18 22:32:34,994 [myid:] - INFO [main:ZooKeeper@684] - Session: 0x15a51a0e47d0000 closed
+
+
+hadoop@Ubuntu-01:~$ echo ruok| nc Ubuntu-01 2181
+imokhadoop@Ubuntu-01:~$
+```
+
+## 安装HBase
+下载地址:http://hbase.apache.org/
+安装版本:hbase-1.2.4-bin.tar.gz
+
+```shell
+hadoop@Ubuntu-01:~$ cd /usr/local
+hadoop@Ubuntu-01:/usr/local$ sudo mkdir hbase
+hadoop@Ubuntu-01:/usr/local$ sudo chown hadoop:hadoop hbase/
+hadoop@Ubuntu-01:/usr/local$ cd hbase/
+hadoop@Ubuntu-01:/usr/local/hbase$ tar -zxvf hbase-1.2.4-bin.tar.gz
+hadoop@Ubuntu-01:/usr/local/spark$ sudo vim /etc/profile
+
+export HBASE_HOME=/usr/local/hbase/hbase-1.2.4
+export PATH=$PATH:$HBASE_HOME/bin
+export HBASE_CLASSPATH=$HBASE_HOME/lib
+
+hadoop@Ubuntu-01:/usr/local/spark$ source /etc/profile
+hadoop@Ubuntu-01:/usr/local/hbase$ cd hbase-1.2.4/conf
+hadoop@Ubuntu-01:/usr/local/hbase/hbase-1.2.4/conf$ vim hbase-env.sh
+```
+
+取消JAVA_HOME和HBASE_MANAGES_ZK项的注释,并设置正确值。
+
+```shell
+export JAVA_HOME=/usr/local/java/jdk1.8.0_121
+export HBASE_MANAGES_ZK=false
+```
+
+```shell
+hadoop@Ubuntu-01:/usr/local/hbase/hbase-1.2.4/conf$ vim hbase-site.xml
+```
+
+```xml
+
+
+ hbase.rootdir
+ hdfs://Ubuntu-01:9000/hbase
+
+
+ hbase.cluster.distributed
+ true
+
+
+ hbase.zookeeper.quorum
+ Ubuntu-01,Ubuntu-02,Ubuntu-03
+
+
+```
+
+复制到另外两个节点
+
+```shell
+hadoop@Ubuntu-01:/usr/local/hbase$ scp -r hbase-1.2.4 hadoop@Ubuntu-02:/usr/local/hbase/
+hadoop@Ubuntu-01:/usr/local/hbase$ scp -r hbase-1.2.4 hadoop@Ubuntu-03:/usr/local/hbase/
+```
+### 验证
+
+#### 启动
+除了zkServer.sh start要在所有节点执行外,其余启动命令只需要在主节点执行
+
+```shell
+hadoop@Ubuntu-01:~$ start-dfs.sh
+Starting namenodes on [Ubuntu-01]
+Ubuntu-01: starting namenode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-namenode-Ubuntu-01.out
+Ubuntu-02: starting datanode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-datanode-Ubuntu-02.out
+Ubuntu-03: starting datanode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-datanode-Ubuntu-03.out
+Starting secondary namenodes [Ubuntu-01]
+Ubuntu-01: starting secondarynamenode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-secondarynamenode-Ubuntu-01.out
+hadoop@Ubuntu-01:~$ jps
+10835 Jps
+10518 NameNode
+4299 SecondaryNameNode
+hadoop@Ubuntu-01:~$ zkServer.sh start
+ZooKeeper JMX enabled by default
+Using config: /usr/local/zookeeper/zookeeper-3.4.9/bin/../conf/zoo.cfg
+Starting zookeeper ... STARTED
+hadoop@Ubuntu-01:~$ jps
+10518 NameNode
+10854 QuorumPeerMain
+4299 SecondaryNameNode
+10879 Jps
+hadoop@Ubuntu-01:~$ start-hbase.sh
+starting master, logging to /usr/local/hbase/hbase-1.2.4/logs/hbase-hadoop-master-Ubuntu-01.out
+Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
+Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
+hadoop@Ubuntu-01:~$ jps
+10518 NameNode
+10854 QuorumPeerMain
+11015 HMaster
+11191 Jps
+4299 SecondaryNameNode
+hadoop@Ubuntu-01:~$ hbase shell
+SLF4J: Class path contains multiple SLF4J bindings.
+SLF4J: Found binding in [jar:file:/usr/local/hbase/hbase-1.2.4/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
+SLF4J: Found binding in [jar:file:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
+SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
+SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
+HBase Shell; enter 'help' for list of supported commands.
+Type "exit" to leave the HBase Shell
+Version 1.2.4, r67592f3d062743907f8c5ae00dbbe1ae4f69e5af, Tue Oct 25 18:10:20 CDT 2016
+
+hbase(main):001:0>
+```
+
+#### 查看hbase管理界面
+http://ubuntu-01:16010/
+
+
+
+
+
+
+
+#### 关闭
+除了zkServer.sh stop要在所有节点执行外,其余关闭命令只需要在主节点执行
+
+```shell
+hadoop@Ubuntu-01:~$ jps
+11297 Jps
+10518 NameNode
+10854 QuorumPeerMain
+11015 HMaster
+4299 SecondaryNameNode
+hadoop@Ubuntu-01:~$ stop-hbase.sh
+stopping hbase................
+hadoop@Ubuntu-01:~$ jps
+10518 NameNode
+10854 QuorumPeerMain
+4299 SecondaryNameNode
+11516 Jps
+hadoop@Ubuntu-01:~$ zkServer.sh stop
+ZooKeeper JMX enabled by default
+Using config: /usr/local/zookeeper/zookeeper-3.4.9/bin/../conf/zoo.cfg
+Stopping zookeeper ... STOPPED
+hadoop@Ubuntu-01:~$ jps
+11537 Jps
+10518 NameNode
+4299 SecondaryNameNode
+hadoop@Ubuntu-01:~$ stop-dfs.sh
+Stopping namenodes on [Ubuntu-01]
+Ubuntu-01: stopping namenode
+Ubuntu-02: stopping datanode
+Ubuntu-03: stopping datanode
+Stopping secondary namenodes [Ubuntu-01]
+hadoop@Ubuntu-01:~$ jps
+11880 Jps
+```
+
+## 安装Hive
+http://hive.apache.org/
+
+apache-hive-2.1.1-bin.tar.gz
+
+
+```shell
+hadoop@Ubuntu-01:~$ cd /usr/local
+hadoop@Ubuntu-01:/usr/local$ sudo mkdir hive
+hadoop@Ubuntu-01:/usr/local$ sudo chown hadoop:hadoop hive/
+hadoop@Ubuntu-01:/usr/local$ cd hive/
+hadoop@Ubuntu-01:/usr/local/hive$ tar -zxvf apache-hive-2.1.1-bin.tar.gz
+
+
+hadoop@Ubuntu-01:/usr/local/hive$ sudo vim /etc/profile
+
+
+
+export HIVE_HOME=/usr/local/hive/apache-hive-2.1.1-bin
+export PATH=$PATH:$HIVE_HOME/bin
+
+hadoop@Ubuntu-01:/usr/local/hive$ source /etc/profile
+
+
+hadoop@Ubuntu-01:/usr/local/hive$ cd apache-hive-2.1.1-bin/conf/
+hadoop@Ubuntu-01:/usr/local/hive/apache-hive-2.1.1-bin/conf$ cp hive-default.xml.template hive-site.xml
+hadoop@Ubuntu-01:/usr/local/hive/apache-hive-2.1.1-bin/conf$ vim hive-site.xml
+```
+
+```xml
+
+
+ javax.jdo.option.ConnectionURL
+ jdbc:mysql://192.168.1.100:3306/hive?createDatabaseIfNotExist=true
+
+
+ javax.jdo.option.ConnectionDriverName
+ com.mysql.jdbc.Driver
+
+
+ javax.jdo.option.ConnectionUserName
+ hive
+ username to use against metastore database
+
+
+ javax.jdo.option.ConnectionPassword
+ hive
+
+
+ hive.hwi.listen.port
+ 9999
+ This is the port the Hive Web Interface will listen on
+
+
+ datanucleus.autoCreateSchema
+ false
+
+
+ datanucleus.fixedDatastore
+ true
+
+
+ hive.metastore.local
+ true
+ controls whether to connect to remove metastore server or open a new metastore server in Hive Client JVM
+
+
+ hive.metastore.schema.verification
+ false
+
+ Enforce metastore schema version consistency.
+ True: Verify that version information stored in metastore matches with one from Hive jars. Also disable automatic
+ schema migration attempt. Users are required to manully migrate schema after Hive upgrade which ensures
+ proper metastore schema migration. (Default)
+ False: Warn if the version information stored in metastore doesn't match with one from in Hive jars.
+
+
+
+```
+
+下载mysql连接java的驱动 并拷入hive home的lib下(mysql-connector-java-5.1.38.jar)
+
+```shell
+hadoop@Ubuntu-01:~$ schematool -initSchema -dbType mysql
+SLF4J: Class path contains multiple SLF4J bindings.
+SLF4J: Found binding in [jar:file:/usr/local/hive/apache-hive-2.1.1-bin/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
+SLF4J: Found binding in [jar:file:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
+SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
+SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
+Metastore connection URL: jdbc:mysql://192.168.1.100:3306/hive?createDatabaseIfNotExist=true
+Metastore Connection Driver : com.mysql.jdbc.Driver
+Metastore connection User: hive
+Starting metastore schema initialization to 2.1.0
+Initialization script hive-schema-2.1.0.mysql.sql
+Initialization script completed
+schemaTool completed
+hadoop@Ubuntu-01:~$ start-dfs.sh
+Starting namenodes on [Ubuntu-01]
+Ubuntu-01: starting namenode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-namenode-Ubuntu-01.out
+Ubuntu-02: starting datanode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-datanode-Ubuntu-02.out
+Ubuntu-03: starting datanode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-datanode-Ubuntu-03.out
+Starting secondary namenodes [Ubuntu-01]
+Ubuntu-01: starting secondarynamenode, logging to /usr/local/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-secondarynamenode-Ubuntu-01.out
+hadoop@Ubuntu-01:~$ hive
+SLF4J: Class path contains multiple SLF4J bindings.
+SLF4J: Found binding in [jar:file:/usr/local/hive/apache-hive-2.1.1-bin/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
+SLF4J: Found binding in [jar:file:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
+SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
+SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
+
+Logging initialized using configuration in jar:file:/usr/local/hive/apache-hive-2.1.1-bin/lib/hive-common-2.1.1.jar!/hive-log4j2.properties Async: true
+Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
+hive>
+```
+
+```sql
+create database hive;
+-- 创建hive用户,并授权
+grant all on hive.* to hive@'%' identified by 'hive';
+flush privileges;
+```
+
+
+## 安装PIG
+http://pig.apache.org/
+pig-0.16.0.tar.gz
+
+```shell
+hadoop@Ubuntu-01:~$ cd /usr/local
+hadoop@Ubuntu-01:/usr/local$ sudo mkdir pig
+hadoop@Ubuntu-01:/usr/local$ sudo chown hadoop:hadoop pig/
+hadoop@Ubuntu-01:/usr/local$ cd pig/
+hadoop@Ubuntu-01:/usr/local/pig$ tar -zxvf pig-0.16.0.tar.gz
+
+hadoop@Ubuntu-01:/usr/local/pig$ sudo vim /etc/profile
+
+export PIG_HOME=/usr/local/pig/pig-0.16.0
+export PATH=$PATH:$PIG_HOME/bin
+export PIG_CLASSPATH=$HADDOP_HOME/conf
+
+
+hadoop@Ubuntu-01:/usr/local/pig$ source /etc/profile
+```
+
+### 测试
+
+```shell
+hadoop@Ubuntu-01:~$ pig -x local
+SLF4J: Class path contains multiple SLF4J bindings.
+SLF4J: Found binding in [jar:file:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
+SLF4J: Found binding in [jar:file:/usr/local/hbase/hbase-1.2.4/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
+SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
+SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
+17/02/24 22:26:57 INFO pig.ExecTypeProvider: Trying ExecType : LOCAL
+17/02/24 22:26:57 INFO pig.ExecTypeProvider: Picked LOCAL as the ExecType
+2017-02-24 22:26:57,715 [main] INFO org.apache.pig.Main - Apache Pig version 0.16.0 (r1746530) compiled Jun 01 2016, 23:10:49
+2017-02-24 22:26:57,715 [main] INFO org.apache.pig.Main - Logging error messages to: /home/hadoop/pig_1487946417711.log
+2017-02-24 22:26:57,754 [main] INFO org.apache.pig.impl.util.Utils - Default bootup file /home/hadoop/.pigbootup not found
+2017-02-24 22:26:58,045 [main] INFO org.apache.hadoop.conf.Configuration.deprecation - mapred.job.tracker is deprecated. Instead, use mapreduce.jobtracker.address
+2017-02-24 22:26:58,046 [main] INFO org.apache.hadoop.conf.Configuration.deprecation - fs.default.name is deprecated. Instead, use fs.defaultFS
+2017-02-24 22:26:58,048 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: file:///
+2017-02-24 22:26:58,344 [main] INFO org.apache.hadoop.conf.Configuration.deprecation - io.bytes.per.checksum is deprecated. Instead, use dfs.bytes-per-checksum
+2017-02-24 22:26:58,374 [main] INFO org.apache.pig.PigServer - Pig Script ID for the session: PIG-default-7efc5f81-68bd-4e67-aa0d-30882be88c11
+2017-02-24 22:26:58,375 [main] WARN org.apache.pig.PigServer - ATS is disabled since yarn.timeline-service.enabled set to false
+grunt> quit
+2017-02-24 22:30:50,757 [main] INFO org.apache.pig.Main - Pig script completed in 3 minutes, 53 seconds and 947 milliseconds (233947 ms)
+hadoop@Ubuntu-01:~$ pig
+17/02/24 22:32:52 INFO pig.ExecTypeProvider: Trying ExecType : LOCAL
+17/02/24 22:32:52 INFO pig.ExecTypeProvider: Trying ExecType : MAPREDUCE
+17/02/24 22:32:52 INFO pig.ExecTypeProvider: Picked MAPREDUCE as the ExecType
+2017-02-24 22:32:52,844 [main] INFO org.apache.pig.Main - Apache Pig version 0.16.0 (r1746530) compiled Jun 01 2016, 23:10:49
+2017-02-24 22:32:52,845 [main] INFO org.apache.pig.Main - Logging error messages to: /home/hadoop/pig_1487946772836.log
+2017-02-24 22:32:52,890 [main] INFO org.apache.pig.impl.util.Utils - Default bootup file /home/hadoop/.pigbootup not found
+SLF4J: Class path contains multiple SLF4J bindings.
+SLF4J: Found binding in [jar:file:/usr/local/hadoop/hadoop-2.7.3/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
+SLF4J: Found binding in [jar:file:/usr/local/hbase/hbase-1.2.4/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
+SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
+SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
+2017-02-24 22:32:53,865 [main] INFO org.apache.hadoop.conf.Configuration.deprecation - mapred.job.tracker is deprecated. Instead, use mapreduce.jobtracker.address
+2017-02-24 22:32:53,866 [main] INFO org.apache.hadoop.conf.Configuration.deprecation - fs.default.name is deprecated. Instead, use fs.defaultFS
+2017-02-24 22:32:53,866 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: hdfs://Ubuntu-01:9000
+2017-02-24 22:32:54,752 [main] INFO org.apache.pig.PigServer - Pig Script ID for the session: PIG-default-aeeb7102-d88a-4154-9876-d76ff0da3a8c
+2017-02-24 22:32:54,752 [main] WARN org.apache.pig.PigServer - ATS is disabled since yarn.timeline-service.enabled set to false
+grunt> ls /
+hdfs://Ubuntu-01:9000/hbase
+hdfs://Ubuntu-01:9000/output
+hdfs://Ubuntu-01:9000/tmp
+```
+
+## 安装Mahout
+
+http://mahout.apache.org/
+apache-mahout-distribution-0.12.2.tar.gz
+
+```shell
+hadoop@Ubuntu-01:~$ cd /usr/local
+hadoop@Ubuntu-01:/usr/local$ sudo mkdir mahout
+hadoop@Ubuntu-01:/usr/local$ sudo chown hadoop:hadoop mahout/
+hadoop@Ubuntu-01:/usr/local$ cd mahout/
+hadoop@Ubuntu-01:/usr/local/mahout$ tar -zxvf apache-mahout-distribution-0.12.2.tar.gz
+
+
+hadoop@Ubuntu-01:/usr/local/mahout$ sudo vim /etc/profile
+
+export MAHOUT_HOME=/usr/local/mahout/apache-mahout-distribution-0.12.2
+export PATH=$PATH:$MAHOUT_HOME/bin
+
+hadoop@Ubuntu-01:/usr/local/mahout$ source /etc/profile
+
+hadoop@Ubuntu-01:~$ cd
+hadoop@Ubuntu-01:~$ start-dfs.sh
+hadoop@Ubuntu-01:~$ start-yarn.sh
+hadoop@Ubuntu-01:~$ mahout –help
+Running on hadoop, using /usr/local/hadoop/hadoop-2.7.3/bin/hadoop and HADOOP_CONF_DIR=
+MAHOUT-JOB: /usr/local/mahout/apache-mahout-distribution-0.12.2/mahout-examples-0.12.2-job.jar
+Unknown program '--help' chosen.
+Valid program names are:
+ arff.vector: : Generate Vectors from an ARFF file or directory
+ baumwelch: : Baum-Welch algorithm for unsupervised HMM training
+ canopy: : Canopy clustering
+ cat: : Print a file or resource as the logistic regression models would see it
+ cleansvd: : Cleanup and verification of SVD output
+ clusterdump: : Dump cluster output to text
+ clusterpp: : Groups Clustering Output In Clusters
+ cmdump: : Dump confusion matrix in HTML or text formats
+ cvb: : LDA via Collapsed Variation Bayes (0th deriv. approx)
+ cvb0_local: : LDA via Collapsed Variation Bayes, in memory locally.
+ describe: : Describe the fields and target variable in a data set
+ evaluateFactorization: : compute RMSE and MAE of a rating matrix factorization against probes
+ fkmeans: : Fuzzy K-means clustering
+ hmmpredict: : Generate random sequence of observations by given HMM
+ itemsimilarity: : Compute the item-item-similarities for item-based collaborative filtering
+ kmeans: : K-means clustering
+ lucene.vector: : Generate Vectors from a Lucene index
+ matrixdump: : Dump matrix in CSV format
+ matrixmult: : Take the product of two matrices
+ parallelALS: : ALS-WR factorization of a rating matrix
+ qualcluster: : Runs clustering experiments and summarizes results in a CSV
+ recommendfactorized: : Compute recommendations using the factorization of a rating matrix
+ recommenditembased: : Compute recommendations using item-based collaborative filtering
+ regexconverter: : Convert text files on a per line basis based on regular expressions
+ resplit: : Splits a set of SequenceFiles into a number of equal splits
+ rowid: : Map SequenceFile to {SequenceFile, SequenceFile}
+ rowsimilarity: : Compute the pairwise similarities of the rows of a matrix
+ runAdaptiveLogistic: : Score new production data using a probably trained and validated AdaptivelogisticRegression model
+ runlogistic: : Run a logistic regression model against CSV data
+ seq2encoded: : Encoded Sparse Vector generation from Text sequence files
+ seq2sparse: : Sparse Vector generation from Text sequence files
+ seqdirectory: : Generate sequence files (of Text) from a directory
+ seqdumper: : Generic Sequence File dumper
+ seqmailarchives: : Creates SequenceFile from a directory containing gzipped mail archives
+ seqwiki: : Wikipedia xml dump to sequence file
+ spectralkmeans: : Spectral k-means clustering
+ split: : Split Input data into test and train sets
+ splitDataset: : split a rating dataset into training and probe parts
+ ssvd: : Stochastic SVD
+ streamingkmeans: : Streaming k-means clustering
+ svd: : Lanczos Singular Value Decomposition
+ testnb: : Test the Vector-based Bayes classifier
+ trainAdaptiveLogistic: : Train an AdaptivelogisticRegression model
+ trainlogistic: : Train a logistic regression using stochastic gradient descent
+ trainnb: : Train the Vector-based Bayes classifier
+ transpose: : Take the transpose of a matrix
+ validateAdaptiveLogistic: : Validate an AdaptivelogisticRegression model against hold-out data set
+ vecdist: : Compute the distances between a set of Vectors (or Cluster or Canopy, they must fit in memory) and a list of Vectors
+ vectordump: : Dump vectors from a sequence file to text
+ viterbi: : Viterbi decoding of hidden states from given output states sequence
+hadoop@Ubuntu-01:~$ hadoop fs -mkdir /user
+hadoop@Ubuntu-01:~$ hadoop fs -mkdir /user/Hadoop
+hadoop@Ubuntu-01:~$ hadoop fs -mkdir /user/hadoop/testdata
+hadoop@Ubuntu-01:~$ hadoop fs -put big-data-demo/synthetic_control.data.txt /user/hadoop/testdata
+hadoop@Ubuntu-01:~$ hadoop jar /usr/local/mahout/apache-mahout-distribution-0.12.2/mahout-examples-0.12.2-job.jar org.apache.mahout.clustering.syntheticcontrol.kmeans.Job
+hadoop@Ubuntu-01:~$ hadoop fs -ls -R output
+-rw-r--r-- 2 hadoop supergroup 194 2017-03-01 22:21 output/_policy
+drwxr-xr-x - hadoop supergroup 0 2017-03-01 22:21 output/clusteredPoints
+-rw-r--r-- 2 hadoop supergroup 0 2017-03-01 22:21 output/clusteredPoints/_SUCCESS
+-rw-r--r-- 2 hadoop supergroup 363282 2017-03-01 22:21 output/clusteredPoints/part-m-00000
+drwxr-xr-x - hadoop supergroup 0 2017-03-01 22:16 output/clusters-0
+-rw-r--r-- 2 hadoop supergroup 194 2017-03-01 22:16 output/clusters-0/_policy
+-rw-r--r-- 2 hadoop supergroup 1891 2017-03-01 22:16 output/clusters-0/part-00000
+-rw-r--r-- 2 hadoop supergroup 1891 2017-03-01 22:16 output/clusters-0/part-00001
+-rw-r--r-- 2 hadoop supergroup 1891 2017-03-01 22:16 output/clusters-0/part-00002
+-rw-r--r-- 2 hadoop supergroup 1891 2017-03-01 22:16 output/clusters-0/part-00003
+-rw-r--r-- 2 hadoop supergroup 1891 2017-03-01 22:16 output/clusters-0/part-00004
+-rw-r--r-- 2 hadoop supergroup 1891 2017-03-01 22:16 output/clusters-0/part-00005
+drwxr-xr-x - hadoop supergroup 0 2017-03-01 22:16 output/clusters-1
+-rw-r--r-- 2 hadoop supergroup 0 2017-03-01 22:16 output/clusters-1/_SUCCESS
+-rw-r--r-- 2 hadoop supergroup 194 2017-03-01 22:16 output/clusters-1/_policy
+-rw-r--r-- 2 hadoop supergroup 7581 2017-03-01 22:16 output/clusters-1/part-r-00000
+drwxr-xr-x - hadoop supergroup 0 2017-03-01 22:21 output/clusters-10-final
+-rw-r--r-- 2 hadoop supergroup 0 2017-03-01 22:21 output/clusters-10-final/_SUCCESS
+-rw-r--r-- 2 hadoop supergroup 194 2017-03-01 22:21 output/clusters-10-final/_policy
+-rw-r--r-- 2 hadoop supergroup 7581 2017-03-01 22:21 output/clusters-10-final/part-r-00000
+drwxr-xr-x - hadoop supergroup 0 2017-03-01 22:17 output/clusters-2
+-rw-r--r-- 2 hadoop supergroup 0 2017-03-01 22:17 output/clusters-2/_SUCCESS
+-rw-r--r-- 2 hadoop supergroup 194 2017-03-01 22:17 output/clusters-2/_policy
+-rw-r--r-- 2 hadoop supergroup 7581 2017-03-01 22:17 output/clusters-2/part-r-00000
+drwxr-xr-x - hadoop supergroup 0 2017-03-01 22:17 output/clusters-3
+-rw-r--r-- 2 hadoop supergroup 0 2017-03-01 22:17 output/clusters-3/_SUCCESS
+-rw-r--r-- 2 hadoop supergroup 194 2017-03-01 22:17 output/clusters-3/_policy
+-rw-r--r-- 2 hadoop supergroup 7581 2017-03-01 22:17 output/clusters-3/part-r-00000
+drwxr-xr-x - hadoop supergroup 0 2017-03-01 22:18 output/clusters-4
+-rw-r--r-- 2 hadoop supergroup 0 2017-03-01 22:18 output/clusters-4/_SUCCESS
+-rw-r--r-- 2 hadoop supergroup 194 2017-03-01 22:18 output/clusters-4/_policy
+-rw-r--r-- 2 hadoop supergroup 7581 2017-03-01 22:18 output/clusters-4/part-r-00000
+drwxr-xr-x - hadoop supergroup 0 2017-03-01 22:18 output/clusters-5
+-rw-r--r-- 2 hadoop supergroup 0 2017-03-01 22:18 output/clusters-5/_SUCCESS
+-rw-r--r-- 2 hadoop supergroup 194 2017-03-01 22:18 output/clusters-5/_policy
+-rw-r--r-- 2 hadoop supergroup 7581 2017-03-01 22:18 output/clusters-5/part-r-00000
+drwxr-xr-x - hadoop supergroup 0 2017-03-01 22:19 output/clusters-6
+-rw-r--r-- 2 hadoop supergroup 0 2017-03-01 22:19 output/clusters-6/_SUCCESS
+-rw-r--r-- 2 hadoop supergroup 194 2017-03-01 22:19 output/clusters-6/_policy
+-rw-r--r-- 2 hadoop supergroup 7581 2017-03-01 22:19 output/clusters-6/part-r-00000
+drwxr-xr-x - hadoop supergroup 0 2017-03-01 22:19 output/clusters-7
+-rw-r--r-- 2 hadoop supergroup 0 2017-03-01 22:19 output/clusters-7/_SUCCESS
+-rw-r--r-- 2 hadoop supergroup 194 2017-03-01 22:19 output/clusters-7/_policy
+-rw-r--r-- 2 hadoop supergroup 7581 2017-03-01 22:19 output/clusters-7/part-r-00000
+drwxr-xr-x - hadoop supergroup 0 2017-03-01 22:20 output/clusters-8
+-rw-r--r-- 2 hadoop supergroup 0 2017-03-01 22:20 output/clusters-8/_SUCCESS
+-rw-r--r-- 2 hadoop supergroup 194 2017-03-01 22:20 output/clusters-8/_policy
+-rw-r--r-- 2 hadoop supergroup 7581 2017-03-01 22:20 output/clusters-8/part-r-00000
+drwxr-xr-x - hadoop supergroup 0 2017-03-01 22:20 output/clusters-9
+-rw-r--r-- 2 hadoop supergroup 0 2017-03-01 22:20 output/clusters-9/_SUCCESS
+-rw-r--r-- 2 hadoop supergroup 194 2017-03-01 22:20 output/clusters-9/_policy
+-rw-r--r-- 2 hadoop supergroup 7581 2017-03-01 22:20 output/clusters-9/part-r-00000
+drwxr-xr-x - hadoop supergroup 0 2017-03-01 22:16 output/data
+-rw-r--r-- 2 hadoop supergroup 0 2017-03-01 22:16 output/data/_SUCCESS
+-rw-r--r-- 2 hadoop supergroup 335470 2017-03-01 22:16 output/data/part-m-00000
+drwxr-xr-x - hadoop supergroup 0 2017-03-01 22:16 output/random-seeds
+-rw-r--r-- 2 hadoop supergroup 7723 2017-03-01 22:16 output/random-seeds/part-randomSeed
+```
+
+## 使用Ambari安装Hadoop集群
+
+ubuntu-16.04.1-04 ubuntu-16.04.1-05 ubuntu-16.04.1-06三台虚拟机已经拆除,如果需要再次尝试Ambari需要重新创建虚拟机。
+
+### 基础环境搭建
+配置主机名,安装JDK,配置SSH互登陆等参考前文所述方法,配置SSH互登陆过程中要使用root用户,在配置过程中,如果scp命令不允许使用root用户远程访问,参考下面的方法解决:
+
+```shell
+root@Ubuntu-04:~# vi /etc/ssh/sshd_config
+
+# Authentication:
+LoginGraceTime 120
+PermitRootLogin yes
+#PermitRootLogin prohibit-password
+StrictModes yes
+```
+
+重启 ssh 服务
+
+```shell
+root@Ubuntu-04:~# service ssh restart
+```
+
+另外由于Ambari最新版本的安装需要Maven,所以在某个节点上使用下面方式安装Maven:
+
+```shell
+root@Ubuntu-04:~# mkdir /usr/local/maven
+root@Ubuntu-04:~# cd /usr/local/maven/
+root@Ubuntu-04:/usr/local/maven# ls
+apache-maven-3.5.0-bin.tar.gz
+root@Ubuntu-04:/usr/local/maven# tar -zxvf apache-maven-3.5.0-bin.tar.gz
+
+
+root@Ubuntu-04:/usr/local/maven# sudo vim /etc/profile
+
+export M2_HOME=/usr/local/maven/apache-maven-3.5.0
+export PATH=$PATH:$M2_HOME/bin
+
+
+root@Ubuntu-04:/usr/local/maven# source /etc/profile
+```
+
+### 安装Ambari
+主要参考官方文档:https://cwiki.apache.org/confluence/display/AMBARI/Installation+Guide+for+Ambari+2.5.1
+
+在其中一个节点(安装maven的节点)下载ambari的源码包,并打包成deb包,拷贝到所有其它节点进行安装。
+
+```shell
+root@Ubuntu-04:~# mkdir /usr/local/ambary
+root@Ubuntu-04:~# cd /usr/local/ambari/
+root@Ubuntu-04:/usr/local/ambari# wget http://www.apache.org/dist/ambari/ambari-2.5.1/apache-ambari-2.5.1-src.tar.gz
+root@Ubuntu-04:/usr/local/ambari# tar xfvz apache-ambari-2.5.1-src.tar.gz
+root@Ubuntu-04:/usr/local/ambari# cd apache-ambari-2.5.1-src
+root@Ubuntu-04:/usr/local/ambari/apache-ambari-2.5.1-src# mvn versions:set -DnewVersion=2.5.1.0.0
+root@Ubuntu-04:/usr/local/ambari/apache-ambari-2.5.1-src# pushd ambari-metrics
+/usr/local/ambari/apache-ambari-2.5.1-src/ambari-metrics /usr/local/ambari/apache-ambari-2.5.1-src
+root@Ubuntu-04:/usr/local/ambari/apache-ambari-2.5.1-src/ambari-metrics# mvn versions:set -DnewVersion=2.5.1.0.0
+root@Ubuntu-04:/usr/local/ambari/apache-ambari-2.5.1-src/ambari-metrics# popd
+/usr/local/ambari/apache-ambari-2.5.1-src
+root@Ubuntu-04:/usr/local/ambari/apache-ambari-2.5.1-src# mvn -B clean install package jdeb:jdeb -DnewVersion=2.5.1.0.0 -DskipTests -Dpython.ver="python >= 2.6"
+# 如果遇到某些包因为墙的原因无法下载,则直接在网上下载对应的包放到日志指定的目录。
+# 如果报错:ENOGIT git is not installed or not in the PATH,则安装git:apt-get install git。
+# 如果遇到类似于下面的错误,则在对应项目的pom.xml中增加
+```
+
+```xml
+
+ org.vafer
+ jdeb
+ 1.0.1
+
+
+
+ stub-execution
+ none
+
+ jdeb
+
+
+
+
+ true
+ false
+ false
+ ${project.basedir}/../src/main/package/deb/control
+
+ \
+```
+
+```log
+[ERROR] Failed to execute goal org.vafer:jdeb:1.0.1:jdeb (default-cli) on project ambari-logsearch: Failed to create debian package /home/kylin/apache-ambari-2.4.2-src/ambari-logsearch/target/ambari-logsearch_2.4.2.0.0_all.deb: “/home/kylin/apache-ambari-2.4.2-src/ambari-logsearch/src/main/package/deb/control” is not a valid ‘control’ directory) -> [Help 1]
+
+# 如果遇到类似下面的错误,将对应项目的pom.xml中的storm版本改为1.1.0
+
+
+ 1.1.0
+
+# 如果遇到如下报错,执行sudo apt-get install python-dev
+
+ [exec] creating build/temp.linux-x86_64-2.7/psutil
+ [exec] x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -I/usr/include/python2.7 -c psutil/_psutil_linux.c -o build/temp.linux-x86_64-2.7/psutil/_psutil_linux.o
+ [exec] psutil/_psutil_linux.c:12:20: fatal error: Python.h: 没有那个文件或目录
+ [exec] compilation terminated.
+ [exec] error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
+
+# 如果报如下错误,参考https://cwiki.apache.org//confluence/display/MAVEN/OutOfMemoryError
+
+[ERROR] Java heap space -> [Help 1]
+[ERROR]
+[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
+[ERROR] Re-run Maven using the -X switch to enable full debug logging.
+[ERROR]
+[ERROR] For more information about the errors and possible solutions, please read the following articles:
+[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/OutOfMemoryError
+```
+
+## 大数据平台-kerberos安装部署文档
+
+### 环境准备
+
+#### 操作系统
+本次安装部署要求在操作系统为CentOS release 6.5 (Final)的版本下进行部署,所以在安装部署kerberos之前请先确保操作系统为以上版本,并且集群中各机器已做时钟同步。
+本次安装部署以csdm-hadoop-04作为主kdc服务器,以csdm-hadoop-05作为从kdc服务器,以csdm-hadoop-03作为客户端。一般不建议在服务器上再安装其他应用程序,比如hadoop。但为了节省资源本次安装在这三台机器均已安装hadoop相关软件。
+#### 创建操作用户
+创建操作系统hdfs、yarn、mapred用户,并使其归属于hadoop用户组:
+adduser hdfs -g Hadoop
+adduser yarn -g Hadoop
+adduser mapred -g Hadoop
+#### 配置hosts文件
+为各台机器修改/etc/hosts文件,将真实ip与主机名对应配置,服务端与客户端均需配置,形如:(不能存在127.0.0.1的配置,否则hadoop进行kerberos验证时将会出错)
+
+
+#### 关闭防火墙
+执行以下命令关闭防火墙:
+service iptables stop
+出现以下界面表示关闭成功
+
+
+#### 注册服务与端口的对应
+在/etc/service文件最后增加以下信息,以便后续使用:
+ krb5_prop 754/tcp # Kerberos slave propagation
+
+### 安装配置Kerberos
+#### 安装rpm包
+ 以root用户登录并创建目录存放安装包:
+mkdir /var/kerberos
+ 上传安装包文件到创建的目录,包括krb5-libs-1.10.3-10.el6_4.6.x86_64.rpm、krb5-server-1.10.3-10.el6_4.6.x86_64.rpm(客户端可不安装)、krb5-workstation-1.10.3-10.el6_4.6.x86_64.rpm
+ 执行安装命令:
+rpm -ivh krb5-libs-1.10.3-10.el6_4.6.x86_64.rpm
+rpm -ivh krb5-server-1.10.3-10.el6_4.6.x86_64.rpm【客户端可不安装】
+rpm -ivh krb5-workstation-1.10.3-10.el6_4.6.x86_64.rpm
+ 查看上述包是否已安装成功:
+rpm –qa krb5*
+ 若出现以下情况则代表安装成功。
+
+
+#### 配置主KDC服务器
+##### 设置全局环境变量
+需要以root身份登录系统在/etc/profile末尾增加配置文件的全局环境变量:
+export KRB5_CONFIG=/etc/krb5.conf
+export KRB5_KDC_PROFILE=/var/kerberos/krb5kdc/kdc.conf
+
+保存后并 执行source /etc/profile 使之生效。
+
+##### 配置krb5.conf
+执行vi编辑/etc/krb5.conf,内容如下:
+
+[libdefaults]
+ default_realm = ERICSSON.COM
+ dns_lookup_realm = false
+ dns_lookup_kdc = false
+ ticket_lifetime = 24h
+ renew_lifetime = 7d
+ forwardable = true
+
+[realms]
+ ERICSSON.COM = {
+ kdc = csdm-hadoop-04
+kdc = csdm-hadoop-05
+ admin_server =csdm-hadoop-04
+ }
+
+[domain_realm]
+ .ericsson.com = ERICSSON.COM
+ ericsson.com = ERICSSON.COM
+
+
+##### 配置kdc.conf
+执行vi编辑/var/kerberos/krb5kdc/kdc.conf,内容如下:
+ [kdcdefaults]
+Kdc_ports=750,88
+
+[realms]
+ ERICSSON.COM ={
+ kadmind_port = 749
+ max_life=10h 0m 0s
+ max_renewable_life=7d 0h 0m 0s
+ database_name= /var/kerberos/krb5kdc/principal
+ admin_keytab=/var/kerberos /krb5kdc/kadm5.keytab
+ acl_file=/var/kerberos /krb5kdc/kadm5.acl
+ key_stash_file=/var/kerberos /krb5kdc/.k5.ERICSSON.COM
+ }
+[logging]
+ default = FILE:/var/log/krb5libs.log
+ kdc = FILE:/var/log/krb5kdc.log
+ admin_server = FILE:/var/log/kadmind.log
+
+集群机器如果开启selinux,请在机器上执行restorecon -R -v /etc/krb5.conf
+##### 生成数据库
+在主KDC服务器上执行以下命令创建数据库,在执行的过程中会提示输入密码和确认密码,两次输入相同的密码即可:
+kdb5_util create -r ericsson.com –s
+
+等待片刻后在提示输入密码界面输入密码后会出现以下界面:
+
+
+##### 创建管理用户
+运行管理入口命令:
+kadmin.local
+在提示符下执行以下命令
+addprinc kadmin/admin@ERICSSON.COM
+addprinc kadmin/changepw@ERICSSON.COM
+会提示输入密码,输入两次一样的密码后会提示成功创建。
+
+
+将主体添加至密钥文件中
+ ktadd -k /var/kerberos/krb5kdc/kadm5.keytab kadmin/admin
+ktadd -k /var/kerberos/krb5kdc/kadm5.keytab kadmin/changepw
+
+##### 启动krb5kdc 和kadmind服务
+执行以下命令启动krb5kdc和kadmind服务:
+krb5kdc start
+kadmind
+出现以下界面表示启动成功
+
+
+#### 配置从KDC服务器
+##### 为从kdc服务器创建创建授权票证
+每一个kdc服务器都需要一个host票证,用于在迁移数据库数据市在各kdc服务器之间进行交互验证。注意,创建host票据需要在主kdc服务器上执行而不是在从kdc服务器。在csdm-hadoop-04上执行以下命令创建票证:
+
+kadmin
+addprinc –randkey host/csdm-hadoop-04@ERICSSON.COM
+addprinc –randkey host/csdm-hadoop-05@ERICSSON.COM
+ktadd host/csdm-hadoop-05@ERICSSON.COM
+
+##### 设置从kdc服务器的配置文件
+将主kdc服务器中的配置文件(kdc.conf、 krb5.conf、 .k5.ERICSSON.COM、 kadm5.acl)复制到从kdc服务器上相应的目录中;在从kdc服务器的/var/Kerberos/krb5kdc的目录下创建kpropd.acl文件并增加以下信息:
+
+host/csdm-hadoop-04@ERICSSON.COM
+host/csdm-hadoop-05@ERICSSON.COM
+
+#### 复制数据库数据到KDC从服务器
+ 在主服务器上创建数据库的dump文件
+kdb5_util dump /var/kerberos/krb5kdc/slave_datatrans
+ 在从服务器上执行数据迁移
+kprop -f /var/Kerberos/krb5kdc/slave_datatrans csdm-hadoop-05
+
+定时将主KDC服务器上的数据库数据,更新到从KDC服务器上
+由于KDC不提供数据库数据的同步服务功能,因此需要使用脚本或者手工将主KDC服务器上的数据同步到从KDC服务器上,可以参考以下脚本,并配置到定时器中
+#!/bin/sh
+ kdclist = "kerberos2.example.com kerberos3.example.com"
+ kdb5_util dump /var/kerberos/krb5kdc/slave_datatrans
+ for kdc in $kdclist do
+ kprop -f /var/kerberos/krb5kdc/slave_datatrans $kdc
+
+#### 启动从服务器的krb5kdc程序
+在从服务器上启动命令执行启动:
+ krb5kdc
+#### 配置自启动
+在/etc/inittab中增加以下信息可使进程随系统自启动:
+/etc/init.d/krb5kdc start
+Kadmind
+
+#### 客户端配置
+下面以csdm-hadoop-03这台机器作为客户端说明相关配置
+1、在csdm-hadoop-03上安装客户端软件
+rpm -ivh krb5-libs-1.10.3-10.el6_4.6.x86_64.rpm
+rpm -ivh krb5-workstation-1.10.3-10.el6_4.6.x86_64.rpm
+2、在主KDC服务器csdm-hadoop-04上,把/etc/krb5.conf复制到csdm-hadoop-03本地对应目录
+3、在客户端csdm-hadoop-03上启动命令执行启动:
+ krb5kdc
+此时即可在客户端csdm-hadoop-03上连接KDC服务器
+
+4、生成可访问csdm-hadoop-03机器应用程序的验证
+在主KDC服务器csdm-hadoop-04,生成csdm-hadoop-03的principals和keytab,
+为客户端csdm-hadoop-03添加principals(可以为host或者所要进行验证的机器用户)
+addprinc –randkey host/csdm-hadoop-03@ERICSSON.COM
+ 为客户端csdm-hadoop-03生成keytab
+Ktadd –k /var/kerberos/krb5kdc/keytab/host.keytab host/csdm-hadoop-03@ERICSSON.COM
+把csdm-hadoop-04上生成的keytab复制到csdm-hadoop-03机器上
+
+
+### 测试服务器
+#### 服务器端测试客户端连接
+ 运行kinit admin/admin,显示提示输入密码则代表配置成功:
+
+#### 远程客户机连接测试
+ 在客户机运行kinit admin/admin 连接服务端,显示提示输入密码则代表配置成功:
+
+
+### Hadoop集成kerberos配置
+#### 4.1 kerberos配置
+Hadoop官方网站建议的操作系统用户及权限如下,下面我们按照这三个用户的权限进行配置,要求使用下面三种用户分别具有各自启动相应进程的权限。
+User:Group Daemons
+hdfs:hadoop NameNode, Secondary NameNode, JournalNode, DataNode
+yarn:hadoop ResourceManager, NodeManager
+mapred:hadoop MapReduce,JobHistory Server
+
+##### 4.1.1 为所有机器的用户生成principal
+从主KDC服务器csdm-hadoop-04上,把/etc/krb5.conf复制到csdm-hadoop-03本地对应目录,
+在主KDC服务器上为hadoop集群中每台机器的用户创建principal,下面以csdm-hadoop-03这台机器为例,运行管理入口命令:
+kadmin.local
+在提示符下执行以下命令:
+addprinc -randkey hdfs/csdm-hadoop-03@ERICSSON.COM
+addprinc -randkey host/csdm-hadoop-03@ERICSSON.COM
+
+addprinc -randkey yarn/csdm-hadoop-03@ERICSSON.COM
+addprinc -randkey host/csdm-hadoop-03@ERICSSON.COM
+
+addprinc -randkey mapred/csdm-hadoop-03@ERICSSON.COM
+addprinc -randkey host/csdm-hadoop-03@ERICSSON.COM
+
+注:
+ 集群中的每台机器所用到的用户都需执行上面的命令生成principal
+ 每个用户必须执行addprinc -randkey host/XX@XX的命令,这个命令生成的是基于 Kerberos 的应用程序(例如 klist 和 kprop)和服务(例如 ftp 和 telnet)使用的主体。此主体称为 host 主体或服务主体。
+
+##### 4.1.2 生成keytab文件
+完成5.1.1后在主KDC服务器上为所有principal生成keytab文件,运行管理入口命令:
+kadmin.local
+在提示符下执行以下命令:
+xst -norandkey -k /var/kerberos/krb5kdc/keytab/hdfs.keytab
+hdfs/csdm-hadoop-03@ERICSSON.COM host/csdm-hadoop-03@ERICSSON.COM
+xst -norandkey -k /var/kerberos/krb5kdc/keytab/mapred.keytab
+mapred/csdm-hadoop-03@ ERICSSON.COM host/csdm-hadoop-03@ERICSSON.COM
+xst -norandkey -k /var/kerberos/krb5kdc/keytab/yarn.keytab
+yarn/csdm-hadoop-03@ERICSSON.COM host/csdm-hadoop-03@ERICSSON.COM
+
+生成授权文件后,使用以下命令检查生成的keytab是否可用:
+kinit -k -t
+/var/kerberos/krb5kdc/keytab/hdfs.keytab hdfs/csdm-hadoop-03@ERICSSON.COM
+kinit -k -t
+/var/kerberos/krb5kdc/keytab/mapred.keytab mapred/csdm-hadoop-03@ERICSSON.COM
+kinit -k -t
+/var/kerberos/krb5kdc/keytab/yarn.keytab yarn/csdm-hadoop-03@ERICSSON.COM
+
+检查没问题后,把生成的keytab文件分发到整个集群中的所有机器。
+
+#### 修改HADOOP配置文件
+##### 4.2.1 Jsvc安装配置
+Datanode的安全机制需要以root用户身份用jsvc来启动,因此首先需要检查是否安装是jsvc如果没有,按以下步骤进行安装:
+1、 下载commons-daemon-1.0.15-src.tar.gz 包并上传至自定义的目录(本操作目录为/home/hadoop)
+2、 解压缩后
+以root用户登录进入目录/home/Hadoop 执行:
+tar –xvf commons-daemon-1.0.15-bin.tar.gz
+解压完成后进入
+/home/Hadoop /commons-daemon-1.0.15-src/src/native/unix
+执行命令:configure
+执行命令:make
+编译完成后,会在/home/hadoop/commons-daemon-1.0.15-src/src/native/unix目录下生成jsvc可执行文件,如下图
+
+
+
+在该目录下执行file jsvc如果出现下图所示,则jsvc安装成功
+
+
+ 这里,我们把该执行文件复制到$HADOOP_HOME/bin以便后续的配置
+执行命令:cp /home/hadoop/commons-daemon-1.0.15-src/src/native/unix/jsvc
+/home/hadoop/hadoop/bin
+
+
+##### 4.2.2 hadoop-env.sh配置
+找到以下两项配置,并修改
+export HADOOP_SECURE_DN_USER=hdfs(配置为要执行datanode的用户,这里为hdfs)
+export JSVC_HOME=/home/hadoop/hadoop/bin(配置为jsvc所在的目录)
+##### 4.2.3 core-site.xml
+在集群中所有节点的core-site.xml文件中添加下面的配置
+
+```xml
+
+
+ hadoop.security.authorization
+ true
+
+
+ hadoop.security.authentication
+ kerberos
+
+
+ hadoop.rpc.protection
+ authentication
+
+
+ hadoop.security.auth_to_local
+ DEFAULT
+
+```
+
+##### 4.2.4 hdfs-site.xml
+在集群中所有节点的hdfs-site.xml文件中添加下面的配置,下面配置以节点csdm-hadoop-04为例:
+
+
+ dfs.block.access.token.enable
+ true
+
+
+
+ dfs.encrypt.data.transfer
+ true
+
+
+ dfs.https.address
+ csdm-hadoop-04:50470
+
+
+ dfs.https.port
+ 50470
+
+
+ dfs.namenode.keytab.file
+ /var/kerberos/krb5kdc/keytab/hdfs.keytab
+
+
+
+ dfs.namenode.kerberos.principal
+ hdfs/_HOST@ERICSSON.COM
+
+
+ dfs.namenode.kerberos.https.principal
+ host/_HOST@ERICSSON.COM
+
+
+
+
+ dfs.secondary.https.address
+ csdm-hadoop-04:50495
+
+
+ dfs.secondary.https.port
+ 50495
+
+
+ dfs.secondary.namenode.keytab.file
+ /var/kerberos/krb5kdc/keytab/hdfs.keytab
+
+
+ dfs.secondary.namenode.kerberos.principal
+ hdfs/_HOST@ERICSSON.COM
+
+
+ dfs.secondary.namenode.kerberos.https.principal
+ host/_HOST@ERICSSON.COM
+
+
+
+
+ dfs.datanode.data.dir.perm
+ 700
+
+
+ dfs.datanode.address
+ 0.0.0.0:1004
+
+
+ dfs.datanode.http.address
+ 0.0.0.0:1006
+
+
+ dfs.datanode.keytab.file
+ /var/kerberos/krb5kdc/keytab/hdfs.keytab
+
+
+ dfs.datanode.kerberos.principal
+ hdfs/_HOST@ERICSSON.COM
+
+
+ dfs.datanode.kerberos.https.principal
+ host/_HOST@ERICSSON.COM
+
+
+
+
+ dfs.web.authentication.kerberos.principal
+ hdfs/_HOST@ERICSSON.COM
+
+
+ dfs.web.authentication.kerberos.keytab
+ /var/kerberos/krb5kdc/keytab/hdfs.keytab
+
+ The Kerberos keytab file with the credentials for the
+ HTTP Kerberos principal used by Hadoop-Auth in the HTTP endpoint.
+
+
+
+配置中有几点要注意的
+ . dfs.datanode.address表示data transceiver RPC server所绑定的hostname或IP地址,如果开启security,端口号必须小于1024(privileged port),否则的话启动datanode时候会报“Cannot start secure cluster without privileged resources”错误
+ . principal中的instance部分可以使用'_HOST'标记,系统会自动替换它为全称域名
+ . 如果开启了security, hadoop会对hdfs block data做permission check,方式用户的代码不是调用hdfs api而是直接本地读block data,这样就绕过了kerberos和文件权限验证,管理员可以通过设置dfs.datanode.data.dir.perm来修改datanode文件权限,这里我们设置为700
+
+
+配置完成后,修改hdfs.keytab所有者为hdfs
+chown -R hdfs:hadoop /var/kerberos/krb5kdc/keytab/hdfs.keytab
+chmod 700 /var/kerberos/krb5kdc/keytab/hdfs.keytab
+
+同时保证以下表格中各个目录的对于hdfs用户的权限
+
+Filesystem Path User:Group Permissions
+local dfs.namenode.name.dir hdfs:hadoop drwx------
+local dfs.datanode.data.dir hdfs:hadoop drwx------
+local $HADOOP_LOG_DIR hdfs:hadoop drwxrwxr-x
+Hdfs / hdfs:hadoop drwxr-xr-x
+Hdfs /tmp hdfs:hadoop drwxrwxrwxt
+Hdfs /user hdfs:hadoop drwxr-xr-x
+
+###### 1、测试namenode进程启动是否正常
+切换到hdfs用户,首先执行klist命令,查看当前是否获取了ticket,经测试,如果已经获取了ticket那么启动namenode进程的时候会报以下错误
+
+使用kdestroy销毁获取的ticket
+
+
+切换到hdfs用户,启动namenode进程(已经执行过HDFS格式化的操作)
+执行命令:hadoop namenode
+
+如果配置正常,应该会看到以下的日志信息输出
+
+
+验证namenode是否启动正常
+ 可打开网页
+http://XX:50070/dfshealth.html#tab-overview验证
+ hadoop fs -ls /
+注:如果在你的凭据缓存中没有有效的kerberos ticket,执行hadoop fs –ls /将会失败。
+可以使用klist来查看是否有有有效的ticket。
+
+如果为空,使用kinit来获取ticket.命令如下
+kinit -k -t /var/kerberos/krb5kdc/keytab/hdfs.keytab hdfs/csdm-hadoop-03@ERICSSON.COM
+
+###### 2、测试datanode启动是否正常
+切换到root用户,
+执行命令:hadoop-daemon.sh start datanode
+
+如果启动正常,能在日志文件看到以下日志内容
+
+在日志目录,启动datanode进程会有以下几个日志文件,其中jsvc.err记录了jsvc的错误信息
+
+
+启动datanode进程,只能使用root用户,如果使用其他用户启动,只会报以下错误
+
+##### 4.2.5 mapred-site.xml
+在mapred-site.xml中添加
+
+
+ mapreduce.jobtracker.kerberos.principal
+ mapred/_HOST@ERICSSON.COM
+
+
+ mapreduce.jobtracker.kerberos.https.principal
+ host/_HOST@ERICSSON.COM
+
+
+ mapreduce.jobtracker.keytab.file
+ /var/kerberos/krb5kdc/keytab/mapred.keytab
+
+
+
+
+ mapreduce.tasktracker.kerberos.principal
+ mapred/_HOST@ERICSSON.COM
+
+
+ mapreduce.tasktracker.kerberos.https.principal
+ host/_HOST@ERICSSON.COM
+
+
+ mapreduce.tasktracker.keytab.file
+ /var/kerberos/krb5kdc/keytab/mapred.keytab
+
+
+
+
+
+
+ 10020
+
+
+
+ mapreduce.jobhistory.keytab
+ /var/kerberos/krb5kdc/keytab/mapred.keytab
+
+
+ mapreduce.jobhistory.principal
+ mapred/_HOST@ERICSSON.COM
+
+
+将mapred.keytab文件赋权给mapred用户 ,执行以下命令:
+chown -R mapred:hadoop /var/kerberos/krb5kdc/keytab/mapred.keytab
+chmod 700 /var/kerberos/krb5kdc/keytab/mapred.keytab
+确保以下表格中各个路径的执行权限
+Filesystem Path User:Group Permissions
+hdfs mapreduce.jobhistory.intermediate-done-dir mapred:hadoop drwxrwxrwxt
+hdfs mapreduce.jobhistory.done-dir mapred:hadoop drwxr-x---
+
+测试historyserver 进程
+执行命令:mr-jobhistory-daemon.sh start historyserver
+配置正常,则会看到以下日志内容
+
+
+##### 4.2.6 yarn-site.xml
+在yarn-site.xml追加以下内容:
+
+
+ yarn.resourcemanager.keytab
+ /var/kerberos/krb5kdc/keytab/yarn.keytab
+
+
+ yarn.resourcemanager.principal
+ yarn/_HOST@ERICSSON.COM
+
+
+
+ yarn.nodemanager.keytab
+ /var/kerberos/krb5kdc/keytab/yarn.keytab
+
+
+ yarn.nodemanager.principal
+ yarn/_HOST@ERICSSON.COM
+
+
+ yarn.nodemanager.container-executor.class
+ org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor
+
+
+ yarn.nodemanager.linux-container-executor.group
+ hadoop
+
+
+
+ yarn.nodemanager.linux-container-executor.path
+ /home/hadoop/hadoop/bin/container-executor
+
+
+
+YARN提供了两种Container启动实现,DefaultContainerExecutor以及LinuxContainerExecutor,在上面的yarn-site.xml里配置了yarn.nodemanager.container-executor.class的启动方式为LinuxContainerExecutor,那么就需要编译安装LinuxContainerExecutor,按如下操作执行:在hadoop的home目录(这里是/home/Hadoop/hadoop)的 /etc/hadoop/目录下创建 container-executor.cfg 文件,内容如下:
+
+
+
+ 设置该文件权限:
+$ chown root:hadoop container-executor.cfg
+$ chmod 400 container-executor.cfg
+
+注意:
+• container-executor.cfg 文件读写权限需设置为 400,所有者为 root:hadoop。
+并且该文件所在的父目录所有者必须为root用户,并对该文件所在的各个父目录赋以下权限,例如:chmod 750 /home/hadoop/
+• yarn.nodemanager.linux-container-executor.group 要同时配置在 yarn-site.xml 和 container-executor.cfg,且其值需要为运行 NodeManager 的用户所在的组,这里为 hadoop。
+• banned.users 不能为空,默认值为 hfds,yarn,mapred,bin
+• min.user.id 默认值为 1000,在centos系统中,需要设置为小于500的值
+• 确保 yarn.nodemanager.local-dirs 和 yarn.nodemanager.log-dirs 对应的目录权限为 755 。
+设置 $HADOOP_HOME/bin/container-executor 读写权限为 6050 如下:
+$ chown root:hadoop $HADOOP_HOME/bin/container-executor
+$ chmod 6050 $HADOOP_HOME/bin/container-executor
+
+
+测试是否配置正确:
+$ /home/hadoop/hadoop/bin/container-executor –checksetup
+出现以下信息,则表示配置正确,如果出错,请检查各个目录的权限及container-executor.cfg文件是否配置正确
+
+
+修改yarn.keytab权限
+chown -R yarn:hadoop /var/kerberos/krb5kdc/keytab/ yarn.keytab
+chmod 700 /var/kerberos/krb5kdc/keytab/yarn.keytab
+
+确保以下表格各目录的权限
+Filesystem Path User:Group Permissions
+hdfs yarn.nodemanager.remote-app-log-dir yarn:hadoop drwxrwxrwxt
+local $YARN_LOG_DIR yarn:hadoop drwxrwxr-x
+local yarn.nodemanager.local-dirs yarn:hadoop drwxr-xr-x
+local yarn.nodemanager.log-dirs yarn:hadoop drwxr-xr-x
+local container-executor root:hadoop --Sr-s---
+local conf/container-executor.cfg root:hadoop r--------
+
+
+ 测试 nodemanager 进程
+执行命令:yarn nodemanager
+
+如果配置正常,会输出以下日志
+
+
+
+ 测试resourcemanager进程
+执行命令:yarn resourcemanager
+
+如果配置正常,会输出以下日志
+
+
+### 说明
+注:本部署文档部署环境默认机器未配置DNS,如果配置有DNS的机器上创建实体则格式为:用户名/hostname.DNS@领域名。例如:hdfs/csdm-hadoop-04.ericsson.com@ERICSSON.COM
+
+
+
+火狐配置使用SPNNEGO
+1、 在地址栏输入about:config打开配置界面
+2、 network.negotiate-auth.delegation-uris
+network.negotiate-auth.trusted-uris
+找到以上两个选项,把你要访问的页面地址加进去
+
+LINUX下配置
+1、 在/etc/hosts下加入要访问的地址对应关系(包括客户端和服务器)
+2、 在KDC服务器上生成浏览器所在客户端的principal:格式如下:HTTP/hd2@ERICSSON.COM,并把该principal生成到keytab中,在KEYTAB中应该可以看到如下的信息
+
+
+## Ubuntu 16.04安装DB2 Express C v11.1
+
+```shell
+jiangxin@db01:~$ su – root #切换到root用户
+密码:
+root@db01:~# uname -a #查看内核和操作系统信息
+Linux db01 4.4.0-66-generic #87-Ubuntu SMP Fri Mar 3 15:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
+root@db01:~# head -n 1 /etc/issue #查看Linux发行版信息
+Ubuntu 16.04.1 LTS \n \l
+root@db01:~# cd /usr/local
+root@db01:/usr/local# ls
+bin db2 etc games include java lib man sbin scala share src
+root@db01:/usr/local# mkdir db2
+root@db01:/usr/local# cd db2/
+#上传安装包
+root@db01:/usr/local/db2# ll
+总用量 675924
+drwxrwxrwx 2 root root 4096 3月 17 22:08 ./
+drwxr-xr-x 20 root root 4096 3月 17 22:07 ../
+-rw-rw-r-- 1 root root 692132552 3月 17 22:08 v11.1_linuxx64_expc.tar.gz
+root@db01:/usr/local/db2# tar -zxvf v11.1_linuxx64_expc.tar.gz
+root@db01:/usr/local/db2# cd expc/
+root@db01:/usr/local/db2/expc# ls
+db2 db2ckupgrade db2_deinstall db2_install db2ls db2prereqcheck db2setup
+root@db01:/usr/local/db2/expc# ./db2prereqcheck #检查是否满足安装条件
+
+==========================================================================
+
+正在检查操作系统 "Linux" V"11.1.1.1" 的 DB2 安装的先决条件。
+
+正在验证 "Linux 分发 " ...
+要求的最低 "UBUNTU" 版本:"14.04"
+实际版本:"16.04"
+达到要求。
+
+正在验证 "内核级别 " ...
+要求的最低操作系统内核级别:"2.6.16"。
+实际操作系统内核级别:"4.4.0"。
+达到要求。
+
+正在验证 "C++ 库版本 " ...
+要求的最低 C++ 库版本:"libstdc++.so.6"
+标准 C++ 库位于以下目录中:"/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21"。
+实际 C++ 库:"CXXABI_1.3.1"
+达到要求。
+
+
+正在验证 ""libstdc++.so.6" 的 32 位版本 " ...
+在以下目录中找到了 64 位 "/usr/lib/x86_64-linux-gnu/libstdc++.so.6":"/usr/lib/x86_64-linux-gnu"。
+在以下目录中找到了 32 位 "/usr/lib32/libstdc++.so.6":"/usr/lib32"。
+达到要求。
+
+正在验证 "libaio.so 版本 " ...
+DBT3553I db2prereqcheck 实用程序已成功装入 libaio.so.1 文件。
+达到要求。
+
+正在验证 "Unable to find the string resource 30186" ...
+Unable to find the string resource 33610
+达到要求。
+
+正在验证 "/lib/i386-linux-gnu/libpam.so*" ...
+达到要求。
+DBT3533I db2prereqcheck 实用程序已确认所有安装先决条件均已满足。
+#限于篇幅,此处省略部分内容
+
+DBT3533I db2prereqcheck 实用程序已确认所有安装先决条件均已满足。
+DBT3555E db2prereqcheck 实用程序已确定,以下版本不支持当前平台:"9.8.0.4"。
+DBT3555E db2prereqcheck 实用程序已确定,以下版本不支持当前平台:"9.8.0.3"。
+DBT3555E db2prereqcheck 实用程序已确定,以下版本不支持当前平台:"9.8.0.2"。
+
+#如果之前的检查中存在某些不满足项,可以通过下面的命令安装对应库文件
+root@db01:/usr/local/db2/expc# apt-get install lib32stdc++6
+root@db01:/usr/local/db2/expc# apt-get install libaio1
+root@db01:/usr/local/db2/expc# apt-get install libpam0g:i386
+
+root@db01:/usr/local/db2/expc# ./db2_install #开始正式安装
+阅读 CD 上 db2/license 目录中的许可协议文件。
+
+***********************************************************
+要接受这些条款,请输入 "yes"。否则,输入 "no" 以取消安装过程。[yes/no]
+yes
+
+
+产品的缺省安装目录 - /opt/ibm/db2/V11.1
+
+***********************************************************
+是否安装至缺省目录 (/opt/ibm/db2/V11.1)?[yes/no]
+yes
+正在初始化 DB2 安装。
+
+ 要执行的任务总数为:36
+要执行的所有任务的总估计时间为:1591 秒
+
+任务 #1 启动
+描述:正在检查许可协议的接受情况
+估计时间 1 秒
+任务 #1 结束
+
+任务 #2 启动
+描述:具备 root 用户特权的情况下进行安装时的基本客户机支持
+估计时间 3 秒
+任务 #2 结束
+
+任务 #3 启动
+描述:产品消息 - 英语
+估计时间 14 秒
+任务 #3 结束
+
+任务 #4 启动
+描述:基本客户机支持
+估计时间 352 秒
+任务 #4 结束
+
+任务 #5 启动
+描述:Java 运行时支持
+估计时间 188 秒
+任务 #5 结束
+
+任务 #6 启动
+描述:Java 帮助 (HTML) - 英语
+估计时间 7 秒
+任务 #6 结束
+
+任务 #7 启动
+描述:具备 root 用户特权的情况下进行安装时的基本服务器支持
+估计时间 8 秒
+任务 #7 结束
+
+任务 #8 启动
+描述:全局安全工具箱
+估计时间 64 秒
+任务 #8 结束
+
+任务 #9 启动
+描述:Java 支持
+估计时间 13 秒
+任务 #9 结束
+
+任务 #10 启动
+描述:SQL 过程
+估计时间 3 秒
+任务 #10 结束
+
+任务 #11 启动
+描述:ICU 实用程序
+估计时间 34 秒
+任务 #11 结束
+
+任务 #12 启动
+描述:Java 公共文件
+估计时间 18 秒
+任务 #12 结束
+
+任务 #13 启动
+描述:基本服务器支持
+估计时间 577 秒
+任务 #13 结束
+
+任务 #14 启动
+描述:DB2 数据源支持
+估计时间 6 秒
+任务 #14 结束
+
+任务 #15 启动
+描述:Spatial Extender 服务器支持
+估计时间 18 秒
+任务 #15 结束
+
+任务 #16 启动
+描述:DB2 LDAP 支持
+估计时间 4 秒
+任务 #16 结束
+
+任务 #17 启动
+描述:“DB2 实例安装”向导
+估计时间 25 秒
+任务 #17 结束
+
+任务 #18 启动
+描述:集成动漫复制支持
+估计时间 3 秒
+任务 #18 结束
+
+任务 #19 启动
+描述:Spatial Extender 客户机
+估计时间 3 秒
+任务 #19 结束
+
+任务 #20 启动
+描述:通信支持 - TCP/IP
+估计时间 3 秒
+任务 #20 结束
+
+任务 #21 启动
+描述:基本应用程序开发工具
+估计时间 35 秒
+任务 #21 结束
+
+任务 #22 启动
+描述:DB2 更新服务
+估计时间 4 秒
+任务 #22 结束
+
+任务 #23 启动
+描述:EnterpriseDB 代码
+估计时间 4 秒
+任务 #23 结束
+
+任务 #24 启动
+描述:样本数据库源
+估计时间 4 秒
+任务 #24 结束
+
+任务 #25 启动
+描述:DB2 Text Search
+估计时间 123 秒
+任务 #25 结束
+
+任务 #26 启动
+描述:命令行处理器加强版
+估计时间 6 秒
+任务 #26 结束
+
+任务 #27 启动
+描述:第一步
+估计时间 3 秒
+任务 #27 结束
+
+任务 #28 启动
+描述:DB2 Express-C 的产品特征符
+估计时间 3 秒
+任务 #28 结束
+
+任务 #29 启动
+描述:正在设置 DB2 库路径
+估计时间 180 秒
+任务 #29 结束
+
+任务 #30 启动
+描述:正在执行控制任务
+估计时间 20 秒
+任务 #30 结束
+
+任务 #31 启动
+描述:正在更新全局注册表
+估计时间 20 秒
+任务 #31 结束
+
+任务 #32 启动
+描述:正在启动 DB2 故障监视器
+估计时间 10 秒
+任务 #32 结束
+
+任务 #33 启动
+描述:正在更新 db2ls 和 db2greg 链接
+估计时间 1 秒
+任务 #33 结束
+
+任务 #34 启动
+描述:正在注册 DB2 许可证
+估计时间 5 秒
+任务 #34 结束
+
+任务 #35 启动
+描述:正在设置缺省全局概要文件注册表变量
+估计时间 1 秒
+任务 #35 结束
+
+任务 #36 启动
+描述:正在初始化实例列表
+估计时间 5 秒
+任务 #36 结束
+
+任务 #37 启动
+描述:正在注册 DB2 更新服务
+估计时间 30 秒
+任务 #37 结束
+
+任务 #38 启动
+描述:正在更新全局概要文件注册表
+估计时间 3 秒
+任务 #38 结束
+
+已成功完成执行。
+
+有关更多信息,请参阅 "/tmp/db2_install.log.5804" 上的 DB2
+安装日志。
+
+#创建实例前先创建对应的用户和组
+root@db01:/usr/local/db2/expc# groupadd -g 2000 db2iadm1
+root@db01:/usr/local/db2/expc# groupadd -g 2001 db2fadm1
+root@db01:/usr/local/db2/expc# useradd -m -g db2iadm1 -d /home/db2inst1 db2inst1
+root@db01:/usr/local/db2/expc# useradd -m -g db2fadm1 -d /home/db2fenc1 db2fenc1
+root@db01:/usr/local/db2/expc# passwd db2inst1
+输入新的 UNIX 密码:
+重新输入新的 UNIX 密码:
+passwd:已成功更新密码
+root@db01:/usr/local/db2/expc# passwd db2fenc1
+输入新的 UNIX 密码:
+重新输入新的 UNIX 密码:
+passwd:已成功更新密码
+
+#安装License
+root@db01:/usr/local/db2/expc# cd /opt/ibm/db2/V11.1/adm/
+root@db01:/opt/ibm/db2/V11.1/adm# chmod -R 775 *
+root@db01:/opt/ibm/db2/V11.1/adm# ./db2licm -a /usr/local/db2/expc/db2/license/db2expc_uw.lic
+
+LIC1402I License added successfully.
+
+
+LIC1426I This product is now licensed for use as outlined in your License Agreement. USE OF THE PRODUCT CONSTITUTES ACCEPTANCE OF THE TERMS OF THE IBM LICENSE AGREEMENT, LOCATED IN THE FOLLOWING DIRECTORY: "/opt/ibm/db2/V11.1/license/zh_CN.utf8"
+
+# 创建实例
+root@db01:/opt/ibm/db2/V11.1/adm# cd /opt/ibm/db2/V11.1/instance/
+root@db01:/opt/ibm/db2/V11.1/instance# chmod -R 775 *
+root@db01:/opt/ibm/db2/V11.1/instance# ./db2icrt -p 50000 -u db2fenc1 db2inst1
+DBI1446I The db2icrt command is running.
+
+
+DB2 installation is being initialized.
+
+ Total number of tasks to be performed: 4
+Total estimated time for all tasks to be performed: 309 second(s)
+
+Task #1 start
+Description: Setting default global profile registry variables
+Estimated time 1 second(s)
+Task #1 end
+
+Task #2 start
+Description: Initializing instance list
+Estimated time 5 second(s)
+Task #2 end
+
+Task #3 start
+Description: Configuring DB2 instances
+Estimated time 300 second(s)
+Task #3 end
+
+Task #4 start
+Description: Updating global profile registry
+Estimated time 3 second(s)
+Task #4 end
+
+The execution completed successfully.
+
+For more information see the DB2 installation log at "/tmp/db2icrt.log.28370".
+DBI1070I Program db2icrt completed successfully.
+
+
+#创建样本数据库
+root@db01:/opt/ibm/db2/V11.1/instance#
+db2inst1@db01:~$ db2sampl
+
+ Starting the DB2 instance...
+ Creating database "SAMPLE"...
+ Connecting to database "SAMPLE"...
+ Creating tables and data in schema "DB2INST1"...
+ Creating tables with XML columns and XML data in schema "DB2INST1"...
+ Stopping the DB2 instance...
+
+ 'db2sampl' processing complete.
+
+
+db2inst1@db01:~$ db2start
+SQL1063N DB2START processing was successful.
+db2inst1@db01:~$ db2 connect to sample
+
+ Database Connection Information
+
+ Database server = DB2/LINUXX8664 11.1.1.1
+ SQL authorization ID = DB2INST1
+ Local database alias = SAMPLE
+
+db2inst1@db01:~$ db2 "select * from staff"
+
+ID NAME DEPT JOB YEARS SALARY COMM
+------ --------- ------ ----- ------ --------- ---------
+ 10 Sanders 20 Mgr 7 98357.50 -
+ 20 Pernal 20 Sales 8 78171.25 612.45
+ 30 Marenghi 38 Mgr 5 77506.75 -
+ 40 O'Brien 38 Sales 6 78006.00 846.55
+ 50 Hanes 15 Mgr 10 80659.80 -
+ 60 Quigley 38 Sales - 66808.30 650.25
+ 70 Rothman 15 Sales 7 76502.83 1152.00
+ 80 James 20 Clerk - 43504.60 128.20
+ 90 Koonitz 42 Sales 6 38001.75 1386.70
+ 100 Plotz 42 Mgr 7 78352.80 -
+ 110 Ngan 15 Clerk 5 42508.20 206.60
+ 120 Naughton 38 Clerk - 42954.75 180.00
+ 130 Yamaguchi 42 Clerk 6 40505.90 75.60
+ 140 Fraye 51 Mgr 6 91150.00 -
+ 150 Williams 51 Sales 6 79456.50 637.65
+ 160 Molinare 10 Mgr 7 82959.20 -
+ 170 Kermisch 15 Clerk 4 42258.50 110.10
+ 180 Abrahams 38 Clerk 3 37009.75 236.50
+ 190 Sneider 20 Clerk 8 34252.75 126.50
+ 200 Scoutten 42 Clerk - 41508.60 84.20
+ 210 Lu 10 Mgr 10 90010.00 -
+ 220 Smith 51 Sales 7 87654.50 992.80
+ 230 Lundquist 51 Clerk 3 83369.80 189.65
+ 240 Daniels 10 Mgr 5 79260.25 -
+ 250 Wheeler 51 Clerk 6 74460.00 513.30
+ 260 Jones 10 Mgr 12 81234.00 -
+ 270 Lea 66 Mgr 9 88555.50 -
+ 280 Wilson 66 Sales 9 78674.50 811.50
+ 290 Quill 84 Mgr 10 89818.00 -
+ 300 Davis 84 Sales 5 65454.50 806.10
+ 310 Graham 66 Sales 13 71000.00 200.30
+ 320 Gonzales 66 Sales 4 76858.20 844.00
+ 330 Burke 66 Clerk 1 49988.00 55.50
+ 340 Edwards 84 Sales 7 67844.00 1285.00
+ 350 Gafney 84 Clerk 5 43030.50 188.00
+
+ 35 record(s) selected.
+
+#安装DAS。为了远程客户端能够用控制中心来控制数据库服务器,需要在数据库服务器上安装DAS,当然如果只是远程连接而不是远程管理,可以不用装
+db2inst1@db01:~$ exit
+注销
+root@db01:/opt/ibm/db2/V11.1/instance# groupadd -g 2002 db2asgrp
+root@db01:/opt/ibm/db2/V11.1/instance# useradd -m -g db2asgrp -d /home/db2as db2as
+root@db01:/opt/ibm/db2/V11.1/instance# passwd db2as
+输入新的 UNIX 密码:
+重新输入新的 UNIX 密码:
+passwd:已成功更新密码
+
+root@db01:/opt/ibm/db2/V11.1/instance# ./dascrt -u db2as
+DBI1070I Program dascrt completed successfully.
+
+root@db01:/opt/ibm/db2/V11.1/instance# su - db2as
+db2as@db01:~$ db2admin start
+SQL4409W The DB2 Administration Server is already active.
+#确认db2inst1实例的服务名
+db2as@db01:~$ su - db2inst1
+密码:
+db2inst1@db01:~$ db2 get dbm cfg|grep SVCENAME
+ TCP/IP Service name (SVCENAME) = 50000
+ SSL service name (SSL_SVCENAME) =
+#如果SVCENAME显示为空,则执行下面的语句更新
+db2inst1@db01:~$ db2 update dbm cfg using SVCENAME 50000
+DB20000I The UPDATE DATABASE MANAGER CONFIGURATION command completed
+successfully.
+#看一下License的情况,svcename在客户端连接时需要用到
+db2inst1@db01:~$ db2licm -l
+Product name: "DB2 Express-C"
+License type: "Unwarranted"
+Expiry date: "Permanent"
+Product identifier: "db2expc"
+Version information: "11.1"
+Max number of CPUs: "2"
+Max amount of memory (GB): "16"
+Enforcement policy: "Soft Stop"
+```
+
+## Ubunut安装/卸载Mysql(apg-get方式)
+
+### 安装
+
+```shell
+jiangxin@db01:~$ uname -a #查看内核和操作系统信息
+Linux db01 4.4.0-66-generic #87-Ubuntu SMP Fri Mar 3 15:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
+jiangxin@db01:~$ head -n 1 /etc/issue #查看Linux发行版信息
+Ubuntu 16.04.1 LTS \n \l
+jiangxin@db01:~$ sudo netstat -tap | grep mysql #查看是否系统中已经安装mysql
+jiangxin@db01:~$ sudo apt-get install mysql-server mysql-client libmysqlclient-dev
+```
+
+安装过程中会要求输入mysql的root账号密码,如下所示:
+
+
+
+
+
+```shell
+jiangxin@db01:~$ mysql -u root -p
+Enter password:
+Welcome to the MySQL monitor. Commands end with ; or \g.
+Your MySQL connection id is 6
+Server version: 5.7.17-0ubuntu0.16.04.1 (Ubuntu)
+
+Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
+
+Oracle is a registered trademark of Oracle Corporation and/or its
+affiliates. Other names may be trademarks of their respective
+owners.
+
+Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
+
+mysql> show databases;
++--------------------+
+| Database |
++--------------------+
+| information_schema |
+| mysql |
+| performance_schema |
+| sys |
++--------------------+
+4 rows in set (0.00 sec)
+```
+
+MySQL安装后的目录结构如下(此结构只针对于使用apt-get install 在线安装情况):
+
+* 数据库存放目录: /var/lib/mysql/
+* 相关配置文件存放目录: /usr/share/mysql
+* 相关命令存放目录: /usr/bin(mysqladmin mysqldump等命令)
+* 启动脚步存放目录: /etc/rc.d/init.d/
+
+### 卸载
+
+```shell
+jiangxin@db01:~$ ps aux | grep mysql
+mysql 1942 3.5 14.8 1115880 150404 ? Ssl 10:45 0:00 /usr/sbin/mysqld
+jiangxin 1980 0.0 0.0 15984 948 pts/0 S+ 10:45 0:00 grep --color=auto mysql
+jiangxin@db01:~$ mysqladmin -u root -p shutdown
+Enter password:
+jiangxin@db01:~$ ps aux | grep mysql
+jiangxin 1984 0.0 0.0 15984 964 pts/0 S+ 10:46 0:00 grep --color=auto mysql
+jiangxin@db01:~$ sudo apt-get autoremove --purge mysql-*
+...
+jiangxin@db01:~$ dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P
+...
+jiangxin@db01:~$ su – root
+root@db01:~# rm -rf /var/lib/mysql
+root@db01:~# rm -rf /etc/mysql
+```
+
+### MySQL简单管理
+
+```shell
+#启动MySQL服务
+sudo service mysql start
+#停止MySQL服务
+sudo service mysql stop
+#修改 MySQL 的管理员密码
+sudo mysqladmin -u root password newpassword
+
+#正常情况下,mysql占用的3306端口只是在IP 127.0.0.1上监听,拒绝了其他IP的访问。取消本地监听限制需要修改 mysqld.cnf 文件
+
+sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
+# 找到此内容并且注释
+bind-address = 127.0.0.1
+```
+
+## Ubuntu安装MySQL(安装包方式)
+
+```shell
+root@ubuntu:~# mkdir /usr/local/mysql
+root@ubuntu:~# cd /usr/local/mysql/
+root@ubuntu:/usr/local/mysql# groupadd mysql
+root@ubuntu:/usr/local/mysql# useradd -r -g mysql -s /bin/false mysql
+root@ubuntu:/usr/local/mysql# tar zxvf mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz
+root@ubuntu:/usr/local/mysql# cd mysql-5.7.19-linux-glibc2.12-x86_64/
+root@ubuntu:/usr/local/mysql/mysql-5.7.19-linux-glibc2.12-x86_64# mkdir mysql-files
+root@ubuntu:/usr/local/mysql/mysql-5.7.19-linux-glibc2.12-x86_64# chmod 750 mysql-files
+root@ubuntu:/usr/local/mysql/mysql-5.7.19-linux-glibc2.12-x86_64# chown -R mysql .
+root@ubuntu:/usr/local/mysql/mysql-5.7.19-linux-glibc2.12-x86_64# chgrp -R mysql .
+# 安装过程中会生成一个随机密码,需要记录下来
+root@ubuntu:/usr/local/mysql/mysql-5.7.19-linux-glibc2.12-x86_64# bin/mysqld --initialize --user=mysql
+root@ubuntu:/usr/local/mysql/mysql-5.7.19-linux-glibc2.12-x86_64# bin/mysql_ssl_rsa_setup
+
+# 添加环境变量
+root@ubuntu:/usr/local/mysql/mysql-5.7.19-linux-glibc2.12-x86_64# sudo vim /etc/profile
+
+export MYSQL_HOME=/usr/local/mysql/mysql-5.7.19-linux-glibc2.12-x86_64
+export PATH=$PATH:$MYSQL_HOME/bin
+
+root@ubuntu:/usr/local/mysql/mysql-5.7.19-linux-glibc2.12-x86_64# source /etc/profile
+
+root@ubuntu:/usr/local/mysql/mysql-5.7.19-linux-glibc2.12-x86_64# cd
+root@ubuntu:~# mysqld_safe --user=mysql &
+[1] 1931893
+root@ubuntu:~# Logging to '/usr/local/mysql/data/ubuntu.err'.
+2023-05-19T15:00:22.730000Z mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data
+
+root@ubuntu:~# mysql -u root -p
+Enter password:
+Welcome to the MySQL monitor. Commands end with ; or \g.
+Your MySQL connection id is 3
+Server version: 5.7.19
+
+Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
+
+Oracle is a registered trademark of Oracle Corporation and/or its
+affiliates. Other names may be trademarks of their respective
+owners.
+
+Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
+
+mysql> exit
+Bye
+root@ubuntu:~# mysqladmin -uroot -p'/2jW>kFeerno' password test
+mysqladmin: [Warning] Using a password on the command line interface can be insecure.
+Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
+root@ubuntu:~# mysql -u root -p
+Enter password:
+Welcome to the MySQL monitor. Commands end with ; or \g.
+Your MySQL connection id is 5
+Server version: 5.7.19 MySQL Community Server (GPL)
+
+Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
+
+Oracle is a registered trademark of Oracle Corporation and/or its
+affiliates. Other names may be trademarks of their respective
+owners.
+
+Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
+
+mysql> select `user`, `host` from mysql.user;
++---------------+-----------+
+| user | host |
++---------------+-----------+
+| mysql.session | localhost |
+| mysql.sys | localhost |
+| root | localhost |
++---------------+-----------+
+3 rows in set (0.00 sec)
+
+mysql> update mysql.user set host = '%' where user = 'root';
+Query OK, 1 row affected (0.00 sec)
+Rows matched: 1 Changed: 1 Warnings: 0
+
+mysql> flush privileges;
+Query OK, 0 rows affected (0.00 sec)
+
+mysql> exit
+Bye
+```
+
+## Windows 10安装MySQL5.5 安装
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Ubuntu 16.04安装SQLLite3
+
+```shell
+jiangxin@db01:~$ sudo apt-get install sqlite3
+jiangxin@db01:~$ sqlite3 test.db
+SQLite version 3.11.0 2016-02-15 17:29:24
+Enter ".help" for usage hints.
+sqlite> create table mytable(id integer primary key, value text);
+sqlite> insert into mytable(id, value) values(1, 'Micheal');
+sqlite> select * from mytable;
+1|Micheal
+sqlite> .help
+.backup ?DB? FILE Backup DB (default "main") to FILE
+.bail on|off Stop after hitting an error. Default OFF
+.binary on|off Turn binary output on or off. Default OFF
+.changes on|off Show number of rows changed by SQL
+.clone NEWDB Clone data into NEWDB from the existing database
+.databases List names and files of attached databases
+.dbinfo ?DB? Show status information about the database
+.dump ?TABLE? ... Dump the database in an SQL text format
+ If TABLE specified, only dump tables matching
+ LIKE pattern TABLE.
+.echo on|off Turn command echo on or off
+.eqp on|off Enable or disable automatic EXPLAIN QUERY PLAN
+.exit Exit this program
+.explain ?on|off|auto? Turn EXPLAIN output mode on or off or to automatic
+.fullschema Show schema and the content of sqlite_stat tables
+.headers on|off Turn display of headers on or off
+.help Show this message
+.import FILE TABLE Import data from FILE into TABLE
+.indexes ?TABLE? Show names of all indexes
+ If TABLE specified, only show indexes for tables
+ matching LIKE pattern TABLE.
+.limit ?LIMIT? ?VAL? Display or change the value of an SQLITE_LIMIT
+.load FILE ?ENTRY? Load an extension library
+.log FILE|off Turn logging on or off. FILE can be stderr/stdout
+.mode MODE ?TABLE? Set output mode where MODE is one of:
+ ascii Columns/rows delimited by 0x1F and 0x1E
+ csv Comma-separated values
+ column Left-aligned columns. (See .width)
+ html HTML code
+ insert SQL insert statements for TABLE
+ line One value per line
+ list Values delimited by .separator strings
+ tabs Tab-separated values
+ tcl TCL list elements
+.nullvalue STRING Use STRING in place of NULL values
+.once FILENAME Output for the next SQL command only to FILENAME
+.open ?FILENAME? Close existing database and reopen FILENAME
+.output ?FILENAME? Send output to FILENAME or stdout
+.print STRING... Print literal STRING
+.prompt MAIN CONTINUE Replace the standard prompts
+.quit Exit this program
+.read FILENAME Execute SQL in FILENAME
+.restore ?DB? FILE Restore content of DB (default "main") from FILE
+.save FILE Write in-memory database into FILE
+.scanstats on|off Turn sqlite3_stmt_scanstatus() metrics on or off
+.schema ?TABLE? Show the CREATE statements
+ If TABLE specified, only show tables matching
+ LIKE pattern TABLE.
+.separator COL ?ROW? Change the column separator and optionally the row
+ separator for both the output mode and .import
+.shell CMD ARGS... Run CMD ARGS... in a system shell
+.show Show the current values for various settings
+.stats on|off Turn stats on or off
+.system CMD ARGS... Run CMD ARGS... in a system shell
+.tables ?TABLE? List names of tables
+ If TABLE specified, only list tables matching
+ LIKE pattern TABLE.
+.timeout MS Try opening locked tables for MS milliseconds
+.timer on|off Turn SQL timer on or off
+.trace FILE|off Output each SQL statement as it is run
+.vfsinfo ?AUX? Information about the top-level VFS
+.vfslist List all available VFSes
+.vfsname ?AUX? Print the name of the VFS stack
+.width NUM1 NUM2 ... Set column widths for "column" mode
+ Negative values right-justify
+sqlite> .quit
+jiangxin@db01:~$\
+```
+
+由于Sqlite本身不支持远程访问,如果需要在Windows上连接远程Linux上的Sqlite,需要在Linux上共享文件给Windows。
+共享方式见:
+Ubuntu创建共享文件夹并支持Windows访问:http://jingyan.baidu.com/article/2fb0ba40a8283500f2ec5f35.html
+
+
+在Windows上打开资源浏览器,在输入框输入\\192.168.1.150
+然后输入用户名、密码即可
+
+
+
+
+
+
+将之前创建的test.db移到share/sqlite目录:
+
+jiangxin@db01:~$ mv test.db share/sqlite/
+
+在Windows上用dbeaver连接Linux上的远程数据库
+
+
+
+## 安装TeraData(SUSE LINUX Enterprise Server 11)
+
+### 下载、安装VMware-workstation:
+VMware-workstation-full-12.5.5-5234757.exe
+
+### 下载、安装TDExpress
+TDExpress14.10.03_Sles11_40GB.7z
+http://downloads.teradata.com/download/database/teradata-express-for-vmware-player
+
+安装可以参考:
+http://downloads.teradata.com/database/articles/teradata-express-14-0-for-vmware-user-guide
+
+### 网络设置
+
+编辑-虚拟网络编辑器
+
+
+
+SUSE静态配置IP成功上网: http://blog.csdn.net/seulww/article/details/17136555
+按照上面链接设置之后,发现虚拟机无法ping通网关,经查询是DNS配置没有生效。按照下述步骤处理:
+
+修改ip地址(建议通过GUI配置)
+即时生效: ifconfig eth0 192.168.1.155 netmask 255.255.255.0
+启动生效:修改/etc/sysconfig/network/ifcfg-eth0
+修改default gateway(建议通过GUI配置)
+即时生效:route add default gw 192.168.1.1
+启动生效:修改/etc/sysconfig/network/ifcfg-eth0
+修改dns(不知为何通过GUI配置没有生效)
+修改/etc/resolv.conf
+修改后可即时生效,启动同样有效(一下为修改的内容)
+
+search localdomain
+nameserver 114.114.114.114
+nameserver 8.8.8.8
+
+修改host name(建议通过GUI配置)
+即时生效:hostname TDExpress
+启动生效:修改/etc/HOSTNAME
+
+### 启动报错解决
+启动之后可以查看/var/log/boot.msg获取此次开机的报错日志。
+
+问题1:
+Error:cannot mount filesystem:Protocol error
+Mounting HGFS shares: FAILED
+
+解决:
+
+在VM->Setting中的Option页面,设置Shared Folders,使之enable 就可以了,这个功能能把host上的目录mount到Guest上的/mnt/hgfs目录,实现共享访问。
+
+问题2:
+
+ ipmi start
+Starting ipmi drivers: failed
+ 'ipmi start' exits with status 1
+
+解决:
+不影响功能,暂未解决。
+
+### 使用DBeaver进行连接
+
+
+
+
+
+## 安装Oracle
+Database Application Development Hands On Labs: http://www.oracle.com/technetwork/database/enterprise-edition/databaseappdev-vm-161299.html
+
+### 配置网络
+[root@vbgeneric ~]# ifconfig
+
+enp0s3: flags=4163 mtu 1500
+ inet 192.168.1.105 netmask 255.255.255.0 broadcast 192.168.1.255
+ ether 08:00:27:0c:40:7f txqueuelen 1000 (Ethernet)
+ RX packets 2677 bytes 2476158 (2.3 MiB)
+ RX errors 0 dropped 0 overruns 0 frame 0
+ TX packets 2645 bytes 323609 (316.0 KiB)
+ TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
+
+lo: flags=73 mtu 65536
+ inet 127.0.0.1 netmask 255.0.0.0
+ loop txqueuelen 0 (Local Loopback)
+ RX packets 473 bytes 111334 (108.7 KiB)
+ RX errors 0 dropped 0 overruns 0 frame 0
+ TX packets 473 bytes 111334 (108.7 KiB)
+ TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
+
+virbr0: flags=4099 mtu 1500
+ inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
+ ether 52:54:00:fc:2d:7f txqueuelen 0 (Ethernet)
+ RX packets 0 bytes 0 (0.0 B)
+ RX errors 0 dropped 0 overruns 0 frame 0
+ TX packets 0 bytes 0 (0.0 B)
+ TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
+
+[root@vbgeneric ~]# hostname
+vbgeneric
+
+
+[root@vbgeneric ~]# vim /etc/sysconfig/network-scripts/ifcfg-enp0s3
+
+TYPE="Ethernet"
+BOOTPROTO="static"
+NAME="enp0s3"
+UUID="05c05f77-20d5-4842-808d-366b3dc466d4"
+DEVICE="enp0s3"
+ONBOOT="yes"
+IPADDR=192.168.1.145
+NETMASK=255.255.255.0
+
+[root@vbgeneric ~]# vim /etc/sysconfig/network
+
+NETWORKING=yes
+HOSTNAME=vbgeneric.localdomain
+GATEWAY=192.168.1.1
+
+[root@vbgeneric ~]# vim /etc/resolv.conf
+
+nameserver 114.114.114.114
+nameserver 8.8.8.8
+
+
+[root@vbgeneric ~]# service network restart
+Restarting network (via systemctl): [ OK ]
+
+### 账号信息
+root/oracle
+
+
+
+[root@vbgeneric ~]# cat /etc/oracle-release
+Oracle Linux Server release 7.3
+[root@vbgeneric ~]# su - oracle
+Last login: Sat Sep 2 08:30:31 EDT 2017 on pts/1
+[oracle@vbgeneric ~]$ sqlplus / as sysdba
+
+SQL*Plus: Release 12.2.0.1.0 Production on Sat Sep 2 08:39:20 2017
+
+Copyright (c) 1982, 2016, Oracle. All rights reserved.
+
+ERROR:
+ORA-01017: invalid username/password; logon denied
+
+
+Enter user-name: sys as sysdba
+Enter password:
+
+Connected to:
+Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
+
+SQL>
+
+## Windows 10 安装 Oracle Database 11.2g
+win64_11gR2_database_1of2.zip、win64_11gR2_database_2of2.zip两个解压到同一个目录
+
+
+
+
+
+
+
+
+Oracle基目录:$ORACLE_BASE
+软件位置:$ORACLE_HOME
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Windows 10 安装 Oracle12c
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## 如何利用Oracle VM Templates 在几分钟内部署Oracle Real Application Clusters (RAC)
+
+### 阅读前准备
+阅读本教程前首先需要访问如下地址:
+http://www.oracle.com/technetwork/server-storage/vm/downloads/hol-oraclevm-2368799.html
+
+
+下载红框标识的ovmm10471.oow.local.ova和ovs10471.oow.local.ova文件,并仔细阅读绿框标识的教程(OOW2015_HOL10471_RAC_20151116,以下简称OOW2015_HOL10471_RAC),本文是针对该教程的补充说明。
+
+另外阅读OOW2015_HOL10471_RAC和本文需要对Oracle VM VirtualBox和Oracle VM有基本的了解,可以访问如下地址:
+Oracle VM VirtualBox:
+http://www.oracle.com/technetwork/server-storage/virtualbox/overview/index.html
+Oracle VM:
+http://www.oracle.com/technetwork/server-storage/vm/overview/index.html
+
+### 1 INTRODUCTION
+#### 1.1 LAB OBJECTIVE
+#### 1.2 PREPARATION (HAS BEEN DONE BEFORE THE LAB)
+要想满足和OOW2015_HOL10471_RAC中所述的前提条件,只需要在满足硬件要求的笔记本或者台式机(内存16G以上,CPU 4核以上)中下载安装VirtualBox,进行VirtualBox网络配置,导入之前下载的虚拟机即可。VirtualBox下载地址为:
+http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html
+下载符合宿主机操作系统的VirtualBox并按照提示进行安装。
+安装后需要进行基础网络设置,之所以需要基础网络配置是因为如果想在宿主机中访问Oracle VM Manager虚拟机、Oracle VM Server虚拟机以及Oracle VM Server中Oracle RAC虚拟机,需要让宿主机和虚拟机处于一个网段之中,在OOW2015_HOL10471_RAC的1.3章节中可以知道虚拟机的网段是192.168.56.X,所以需要在Virtualbox中添加一个IP地址为192.168.56.1的网卡。添加网卡的步骤如下:
+
+
+
+
+
+
+
+
+
+设置之后在【控制面板\网络和 Internet\网络连接】中可以看到配置的网卡
+
+
+在cmd或者powershell中执行ipconfig命令,可以发现多了一块网卡:
+
+
+
+
+增加网卡之后需要导入Oracle VM Manager+Oracle VM Server模板。首先导入Oracle VM Manager
+
+
+
+
+然后导入Oracle VM Server
+
+
+
+启动虚拟机,如果出现类似于下面的提示:
+
+
+则重新进行网络设置:
+
+
+禁用掉OVS的USB控制器
+
+
+
+
+启动虚拟机,直到看到如下界面:
+
+
+
+
+此时在宿主机中ping两台虚拟机的IP地址,应该都是可以ping通的。
+
+
+
+#### 1.3 GLOBAL PICTURE
+### 2 DETAILED INSTRUCTIONS
+#### 2.1 START BOTH SERVERS (VIRTUAL BOX VMS)
+#### 2.2 CONNECT TO THE ORACLE VM MANAGER CONSOLE
+如果使用最新的Firefox版本(本文写作时的最新版本是Firefox 56),访问https://192.168.56.30:7002/ovm/console时会提示“建立安全连接失败”:
+
+
+
+
+此时可以使用老版本的Firefox进行访问,47.0版本的Firefox安装包可以从百度网盘进行下载:http://pan.baidu.com/s/1dEBT5df
+
+
+
+安装之后首先设置禁止检查更新,防止后台再次更新升级到最新版本。
+
+
+
+继续访问https://192.168.56.30:7002/ovm/console
+出现如下图提示时单击“添加例外”
+
+
+
+点击“确认安全例外”
+
+
+
+
+此时可以看到VM Manager的登陆界面。
+
+#### 2.3 CREATE A STORAGE REPOSITORY
+#### 2.4 CLONE 3 VMS FROM DB/RAC ORACLE VM TEMPLATE
+#### 2.5 CREATING SHARED DISK FOR ASM CONFIGURATION
+在使用ssh连接Oracle VM Manager时如果使用的是Xshell的话,不支持OOW2015_HOL10471_RAC中所提到的ssh命令:
+ssh admin@192.168.56.30 -p 10000
+需要在图形配置页中进行配置,如下:
+
+
+### 3 START INSTALLATION USING DEPLOYCLUSTER
+#### 3.1 CREATE A NETCONFIG.INI FILE FOR DEPLOYMENT
+#### 3.2 RUNNING DEPLOYCLUSTER.PY
+在执行deploycluster.py命令时如果出现下图错误说明之前分配给三个虚拟机的资源过少:
+
+
+
+
+此时在浏览器中修改对应的内存值即可:
+
+
+安装成功的标志是buildcluster.log中出现如下内容:
+
+
+
+
+
+
+### 如何关闭、启动系统
+OOW2015_HOL10471_RAC中未提及如何关系和启动系统,这里做简要说明。
+关闭系统时首先通过浏览器关闭三台VM:
+
+
+待节点状态都是Stopped之后关闭Virtualbox 虚拟机
+
+
+
+启动系统时反过来,先运行Virtualbox虚拟机:
+
+
+
+看到如下画面代表Oracle VM Server启动成功:
+
+
+看到如下画面代表Oracle VM Manager启动成功:
+
+
+然后使用Firefox浏览器打开OVMM控制台:
+
+
+
+待所有节点的状态都为Running时,用SSH登陆到racnode0.1节点,执行crsstat -t。当出现如下结果时说明RAC已经启动成功。
+
+
+
+### 常用Oracle RAC相关的命令
+
+```shell
+[oracle@racnode01h ~]$ crsctl check css
+CRS-4529: Cluster Synchronization Services is online
+[oracle@racnode01h ~]$ ps -ef|grep cssd
+root 1548 1 0 16:48 ? 00:00:17 /u01/app/12.1.0/grid/bin/cssdmonitor
+root 1565 1 0 16:48 ? 00:00:16 /u01/app/12.1.0/grid/bin/cssdagent
+oracle 1576 1 1 16:48 ? 00:01:02 /u01/app/12.1.0/grid/bin/ocssd.bin
+oracle 4905 2855 0 18:04 pts/0 00:00:00 grep cssd
+[oracle@racnode01h ~]$ crsctl check has
+CRS-4638: Oracle High Availability Services is online
+[oracle@racnode01h ~]$ ps -ef|grep ohasd.bin
+root 1195 1 1 16:47 ? 00:01:06 /u01/app/12.1.0/grid/bin/ohasd.bin reboot
+oracle 4932 2855 0 18:05 pts/0 00:00:00 grep ohasd.bin
+[oracle@racnode01h ~]$ crs_stat -t
+Name Type Target State Host
+------------------------------------------------------------
+ora....SM.lsnr ora....er.type ONLINE ONLINE racnode01h
+ora.DATA.dg ora....up.type ONLINE ONLINE racnode01h
+ora....ER.lsnr ora....er.type ONLINE ONLINE racnode01h
+ora....AF.lsnr ora....er.type OFFLINE OFFLINE
+ora....N1.lsnr ora....er.type ONLINE ONLINE racnode01h
+ora.asm ora.asm.type ONLINE ONLINE racnode01h
+ora.cvu ora.cvu.type OFFLINE OFFLINE
+ora.gns ora.gns.type ONLINE ONLINE racnode01h
+ora.gns.vip ora....ip.type ONLINE ONLINE racnode01h
+ora....network ora....rk.type ONLINE ONLINE racnode01h
+ora.oc4j ora.oc4j.type OFFLINE OFFLINE
+ora.ons ora.ons.type ONLINE ONLINE racnode01h
+ora.oow.db ora....se.type ONLINE ONLINE racnode01h
+ora....1H.lsnr application ONLINE ONLINE racnode01h
+ora....01h.ons application ONLINE ONLINE racnode01h
+ora....01h.vip ora....t1.type ONLINE ONLINE racnode01h
+ora....2H.lsnr application ONLINE ONLINE racnode02h
+ora....02h.ons application ONLINE ONLINE racnode02h
+ora....02h.vip ora....t1.type ONLINE ONLINE racnode02h
+ora.scan1.vip ora....ip.type ONLINE ONLINE racnode01h
+[oracle@racnode01h ~]$ crsctl status resource -t
+--------------------------------------------------------------------------------
+Name Target State Server State details
+--------------------------------------------------------------------------------
+Local Resources
+--------------------------------------------------------------------------------
+ora.ASMNET1LSNR_ASM.lsnr
+ ONLINE ONLINE racnode01h STABLE
+ ONLINE ONLINE racnode02h STABLE
+ora.DATA.dg
+ ONLINE ONLINE racnode01h STABLE
+ ONLINE ONLINE racnode02h STABLE
+ora.LISTENER.lsnr
+ ONLINE ONLINE racnode01h STABLE
+ ONLINE ONLINE racnode02h STABLE
+ora.LISTENER_LEAF.lsnr
+ OFFLINE OFFLINE racnode03h STABLE
+ora.net1.network
+ ONLINE ONLINE racnode01h STABLE
+ ONLINE ONLINE racnode02h STABLE
+ora.ons
+ ONLINE ONLINE racnode01h STABLE
+ ONLINE ONLINE racnode02h STABLE
+--------------------------------------------------------------------------------
+Cluster Resources
+--------------------------------------------------------------------------------
+ora.LISTENER_SCAN1.lsnr
+ 1 ONLINE ONLINE racnode01h STABLE
+ora.asm
+ 1 ONLINE ONLINE racnode01h Started,STABLE
+ 2 ONLINE ONLINE racnode02h Started,STABLE
+ 3 OFFLINE OFFLINE STABLE
+ora.cvu
+ 1 OFFLINE OFFLINE STABLE
+ora.gns
+ 1 ONLINE ONLINE racnode01h STABLE
+ora.gns.vip
+ 1 ONLINE ONLINE racnode01h STABLE
+ora.oc4j
+ 1 OFFLINE OFFLINE STABLE
+ora.oow.db
+ 1 ONLINE ONLINE racnode01h Open,STABLE
+ 2 ONLINE ONLINE racnode02h Open,STABLE
+ora.racnode01h.vip
+ 1 ONLINE ONLINE racnode01h STABLE
+ora.racnode02h.vip
+ 1 ONLINE ONLINE racnode02h STABLE
+ora.scan1.vip
+ 1 ONLINE ONLINE racnode01h STABLE
+--------------------------------------------------------------------------------
+[oracle@racnode01h ~]$ sqlplus / as sysdba
+
+SQL*Plus: Release 12.1.0.2.0 Production on Fri Nov 10 18:14:09 2017
+
+Copyright (c) 1982, 2014, Oracle. All rights reserved.
+
+
+Connected to:
+Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
+With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
+Advanced Analytics and Real Application Testing options
+
+SQL> set linesize 200;
+SQL> select * from gv$instance;
+
+ INST_ID INSTANCE_NUMBER INSTANCE_NAME HOST_NAME VERSION STARTUP_T STATUS PAR THREAD# ARCHIVE LOG_SWITCH_WAIT LOGINS
+---------- --------------- ---------------- ---------------------------------------------------------------- ----------------- --------- ------------ --- ---------- ------- --------------- ----------
+SHU DATABASE_STATUS INSTANCE_ROLE ACTIVE_ST BLO CON_ID INSTANCE_MO EDITION FAMILY
+--- ----------------- ------------------ --------- --- ---------- ----------- ------- --------------------------------------------------------------------------------
+ 1 1 OOW1 racnode01h 12.1.0.2.0 10-NOV-17 OPEN YES 1 STOPPED ALLOWED
+NO ACTIVE PRIMARY_INSTANCE NORMAL NO 0 REGULAR EE
+
+ 2 2 OOW2 racnode02h 12.1.0.2.0 10-NOV-17 OPEN YES 2 STOPPED ALLOWED
+NO ACTIVE PRIMARY_INSTANCE NORMAL NO 0 REGULAR EE
+
+
+SQL>
+```
+
+## 安装PLSQL Developer 11.0.6
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## 安装Prometheus
+下载地址:
+https://prometheus.io/download/
+
+jiangxin@tomcat:~$ sudo mkdir /usr/local/prometheus
+jiangxin@tomcat:~$ sudo chown -R jiangxin:jiangxin /usr/local/prometheus
+jiangxin@tomcat:~$ cd /usr/local/prometheus/
+jiangxin@tomcat:/usr/local/prometheus$ ls
+prometheus-1.7.1.linux-amd64.tar.gz
+jiangxin@tomcat:/usr/local/prometheus$ tar -zxvf prometheus-1.7.1.linux-amd64.tar.gz
+jiangxin@tomcat:/usr/local/prometheus$ cd prometheus-1.7.1.linux-amd64/
+
+jiangxin@tomcat:/usr/local/prometheus/prometheus-1.7.1.linux-amd64$ sudo vim /etc/profile
+
+export PROMETHEUS_HOME=/usr/local/prometheus/prometheus-1.7.1.linux-amd64
+export PATH=$PATH:$PROMETHEUS_HOME
+
+jiangxin@tomcat:/usr/local/prometheus/prometheus-1.7.1.linux-amd64$ source /etc/profile
+jiangxin@tomcat:/usr/local/prometheus/prometheus-1.7.1.linux-amd64$ cd
+### 启动
+jiangxin@tomcat:~$ prometheus -config.file=${PROMETHEUS_HOME}/prometheus.yml
+INFO[0000] Starting prometheus (version=1.7.1, branch=master, revision=3afb3fffa3a29c3de865e1172fb740442e9d0133) source="main.go:88"
+INFO[0000] Build context (go=go1.8.3, user=root@0aa1b7fc430d, date=20170612-11:44:05) source="main.go:89"
+INFO[0000] Host details (Linux 4.4.0-78-generic #99-Ubuntu SMP Thu Apr 27 15:29:09 UTC 2017 x86_64 tomcat (none)) source="main.go:90"
+INFO[0000] Loading configuration file /usr/local/prometheus/prometheus-1.7.1.linux-amd64/prometheus.yml source="main.go:252"
+INFO[0000] Loading series map and head chunks... source="storage.go:428"
+INFO[0000] 0 series loaded. source="storage.go:439"
+INFO[0000] Starting target manager... source="targetmanager.go:63"
+INFO[0000] Listening on :9090 source="web.go:259"
+
+
+
+
+### 查看界面
+http://192.168.1.130:9090/metrics
+
+
+
+
+
+http://192.168.1.130:9090/graph
+
+
+
+## 安装配置CAS
+
+### 基础环境安装
+
+搭建CAS单点登录系统,首先需要基础环境的部署。主要包括Windows/Linux/Java/Maven/GIT/Tomcat等,基础环境的部署不是本文的描写重点,本文仅做简要说明,如有疑问可以邮件咨询。
+
+### Windows
+
+Windows 10,安装有JDK/GIT/Maven等工具,主要功能是下载CAS服务端和客户端源码,并进行编译打包,上传到Linux服务器上进行部署。同时利用Chrome浏览器对安装之后的环境进行检验。
+
+### Linux
+
+Ubuntu 16.04.1 LTS,安装有JDK、Tomcat等工具,主要作为CAS Server和Web Server的宿主环境。
+
+### JDK
+
+Linux服务器端安装JDK主要是作为Tomcat的运行时环境,并提供keytool等工具进行HTTPS配置;Windows客户端安装JDK主要是作为Maven的运行时环境。
+
+jiangxin@tomcat:~$ java -version
+java version "1.8.0_121"
+Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
+Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
+
+PS C:\Users\jiang> java -version
+java version "1.8.0_102"
+Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
+Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
+
+
+### GIT
+安装在Windows机器,主要用于下载并及时更新CAS Server和Client源码。
+PS C:\Users\jiang> git --version
+git version 2.8.3.windows.1
+
+### Maven
+
+安装在Windows机器,主要作用是编译打包。
+PS C:\Users\jiang> mvn -v
+Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
+Maven home: C:\apache-maven-3.3.9
+Java version: 1.8.0_102, vendor: Oracle Corporation
+Java home: C:\Java\jdk1.8.0_102\jre
+Default locale: zh_CN, platform encoding: GBK
+OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos"
+
+### Tomcat
+
+安装在Linux,安装包为:
+apache-tomcat-8.5.14.tar.gz
+为了更好的模拟单点登录,需要安装三个Tomcat实例,其中一个作为CAS Server,另外两个作为CAS Client。具体分配
+
+安装过程为:
+jiangxin@tomcat:/usr/local$ sudo mkdir tomcat
+jiangxin@tomcat:/usr/local$ sudo chown -R jiangxin:jiangxin tomcat/
+jiangxin@tomcat:/usr/local$ cd tomcat/
+jiangxin@tomcat:/usr/local/tomcat$ ls
+jiangxin@tomcat:/usr/local/tomcat$ tar -zxvf apache-tomcat-8.5.14.tar.gz
+jiangxin@tomcat:/usr/local/tomcat$ cd
+
+jiangxin@tomcat:~$ sudo vim /etc/profile
+
+export CATALINA_BASE=/usr/local/tomcat/apache-tomcat-8.5.14
+export CATALINA_HOME=/usr/local/tomcat/apache-tomcat-8.5.14
+export PATH=$PATH:$CATALINA_HOME/lib:$CATALINA_HOME/bin
+
+jiangxin@tomcat:~$ source /etc/profile
+
+jiangxin@tomcat:~$ startup.sh ; tailf $CATALINA_HOME/logs/catalina.out
+Using CATALINA_BASE: /usr/local/tomcat/apache-tomcat-8.5.14
+Using CATALINA_HOME: /usr/local/tomcat/apache-tomcat-8.5.14
+Using CATALINA_TMPDIR: /usr/local/tomcat/apache-tomcat-8.5.14/temp
+Using JRE_HOME: /usr/local/java/jdk1.8.0_121
+#限于篇幅,此处有省略
+05-May-2017 20:27:53.487 信息 [main] org.apache.catalina.startup.Catalina.start Server startup in 1633 ms
+
+
+在浏览器中访问下面地址,查看能否正常访问:
+
+http://192.168.1.130:8080/
+
+
+
+
+jiangxin@tomcat:~$ shutdown.sh
+Using CATALINA_BASE: /usr/local/tomcat/apache-tomcat-8.5.14
+Using CATALINA_HOME: /usr/local/tomcat/apache-tomcat-8.5.14
+Using CATALINA_TMPDIR: /usr/local/tomcat/apache-tomcat-8.5.14/temp
+Using JRE_HOME: /usr/local/java/jdk1.8.0_121
+Using CLASSPATH: /usr/local/tomcat/apache-tomcat-8.5.14/bin/bootstrap.jar:/usr/local/tomcat/apache-tomcat-8.5.14/bin/tomcat-juli.jar
+
+### 安装CAS服务端
+
+在较新的CAS版本中不在提供CAS服务端和客户端的安装包,都是依靠下载源码,重新打包。如果对本文的安装内容有疑问可以参考CAS的官网:
+
+https://apereo.github.io/cas/5.0.x/installation/Maven-Overlay-Installation.html
+https://github.com/apereo/cas-overlay-template
+
+正常情况下应该在服务器上进行maven编译,这样才能保证编译的JDK版本和运行时的版本一致,但是此处为了方便,直接在Windows编译。
+
+PS C:\Users\jiang> cd D:\temp\Java\
+PS D:\temp\Java> git clone https://github.com/apereo/cas-overlay-template.git
+Cloning into 'cas-overlay-template'...
+remote: Counting objects: 566, done.
+remote: Compressing objects: 100% (12/12), done.
+remote: Total 566 (delta 4), reused 0 (delta 0), pack-reused 550 eceiving objects: 96% (544/566), 116.00 KiB | 79.00 KiB/
+Receiving objects: 100% (566/566), 188.70 KiB | 79.00 KiB/s, done.
+Resolving deltas: 100% (275/275), done.
+Checking connectivity... done.
+PS D:\temp\Java> cd .\cas-overlay-template\
+PS D:\temp\Java\cas-overlay-template> .\build.cmd package
+[INFO] Scanning for projects...
+[INFO]
+[INFO] Using the MultiThreadedBuilder implementation with a thread count of 5
+[INFO]
+[INFO] ------------------------------------------------------------------------
+[INFO] Building cas-overlay 1.0
+由于篇幅原因,此处有省略
+[INFO] Packaging webapp
+[INFO] Assembling webapp [cas-overlay] in [D:\temp\Java\cas-overlay-template\target\cas]
+[info] Copying manifest...
+[INFO] Processing war project
+[INFO] Processing overlay [ id org.apereo.cas:cas-server-webapp]
+[INFO] Webapp assembled in [2685 msecs]
+[INFO] Building war: D:\temp\Java\cas-overlay-template\target\cas.war
+[INFO] ------------------------------------------------------------------------
+[INFO] BUILD SUCCESS
+[INFO] ------------------------------------------------------------------------
+[INFO] Total time: 06:34 min (Wall Clock)
+[INFO] Finished at: 2017-05-05T20:06:02+08:00
+[INFO] Final Memory: 13M/200M
+[INFO] ------------------------------------------------------------------------
+
+
+把cas-overlay-template\target\cas.war上传到/usr/local/tomcat/apache-tomcat-8.5.14/webapps
+
+重新启动tomcat
+
+05-May-2017 20:39:10.561 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log Server version: Apache Tomcat/8.5.14
+由于篇幅原因,此处有省略
+05-May-2017 20:39:11.026 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive /usr/local/tomcat/apache-tomcat-8.5.14/webapps/cas.war
+05-May-2017 20:39:20.915 信息 [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
+
+
+ __ ____ _ ____ __
+ / / / ___| / \ / ___| \ \
+| | | | / _ \ \___ \ | |
+| | | |___ / ___ \ ___) | | |
+| | \____|/_/ \_\|____/ | |
+ \_\ /_/
+
+CAS Version: 5.0.5
+Apache Tomcat Version: Apache Tomcat/8.5.14
+Build Date/Time: 2017-04-21T03:24:20Z
+System Temp Directory: /usr/local/tomcat/apache-tomcat-8.5.14/temp
+Java Home: /usr/local/java/jdk1.8.0_121/jre
+Java Vendor: Oracle Corporation
+Java Version: 1.8.0_121
+JCE Installed: no
+OS Architecture: amd64
+OS Name: Linux
+OS Version: 4.4.0-72-generic
+
+
+2017-05-05 20:39:29,134 INFO [org.apereo.cas.web.CasWebApplicationServletInitializer] -
+
+在浏览器中范围如下地址,查看能否访问:
+http://192.168.1.130:8080/cas/login
+
+
+
+
+使用casuser/Mellon进行登录(application.properties中配置用户名和密码),查看是否登录成功。
+
+
+
+### 配置数字证书
+
+CAS要求CAS Server和CAS Client以及客户端浏览器端全部使用https访问,所以需要配置证书。
+
+正常情况下,数字证书的生成,分发,使用是在多台机器上,以本文搭建的SSO系统为例,在A机器(CA)上生成证书,然后将证书(包括私钥和公钥)分发到B机器(SSO Server),B机器根据该证书导出公钥分发给C机器(SSO Client),此时B和C即可正常建立连接。同时当D机器(客户端浏览器)与A机器交互时即可在A机器上下载公钥,进行连接。
+但为了方便测试,本文中A、B、C机器为一台。
+
+下边的命令,会创建一条证书记录并写入cacerts。证书记录信息包含该条证书的私钥,公钥和对应的数字证书的信息。
+
+```shell
+jiangxin@tomcat:~$ keytool -genkey -alias castest -keyalg RSA -keystore /usr/local/java/jdk1.8.0_121/jre/lib/security/cacerts
+输入密钥库口令: # 按照JDK后,默认的密钥库密码为changeit
+您的名字与姓氏是什么? # 名字与姓氏为CAS跳转域名
+ [Unknown]: cas.sso.com
+您的组织单位名称是什么?
+ [Unknown]: castest
+您的组织名称是什么?
+ [Unknown]: castest
+您所在的城市或区域名称是什么?
+ [Unknown]: nanjing
+您所在的省/市/自治区名称是什么?
+ [Unknown]: jiangsu
+该单位的双字母国家/地区代码是什么?
+ [Unknown]: cn
+CN=cas.sso.com, OU=castest, O=castest, L=nanjing, ST=jiangsu, C=cn是否正确?
+ [否]: y
+
+输入 的密钥口令
+ (如果和密钥库口令相同, 按回车):
+```
+
+可使用如下命令查看证书信息:
+jiangxin@tomcat:~$ keytool -list -keystore "$JAVA_HOME/jre/lib/security/cacerts" -alias castest
+输入密钥库口令:
+castest, 2017-5-7, PrivateKeyEntry,
+证书指纹 (SHA1): 9A:9A:DF:AB:18:B7:D9:81:8D:24:BA:E3:73:99:67:CE:58:B0:3A:CD
+
+如果要更新证书,可以先删除原证书,再导入新证书:
+jiangxin@tomcat:~$ keytool -delete -alias castest -keystore /usr/local/java/jdk1.8.0_121/jre/lib/security/cacerts
+
+接下来修改server.xml文件
+jiangxin@tomcat:~$ cp /usr/local/tomcat/apache-tomcat-8.5.14/conf/server.xml /usr/local/tomcat/apache-tomcat-8.5.14/conf/server.xml.bak
+jiangxin@tomcat:~$ vim /usr/local/tomcat/apache-tomcat-8.5.14/conf/server.xml
+
+```xml
+
+
+```
+
+重启tomcat,访问下面地址,查看是否能够正常访问:
+https://192.168.1.130:8443/cas
+
+
+
+
+
+
+
+
+
+
+
+由于本文所部署的环境是CAS Server和CAS Client在一台服务器上,所以不需要单独将公钥导出到CAS Client上,但是如果需要,可以参考下面的导入导出过程。
+
+导出数字证书,数字证书包含三部分信息:证书元数据信息,序列号,过期时间等、所有者信息,姓名、地区等、所有者公钥;相比于在keystore中的信息,没有所有者的密钥,所有者的密钥只有所有者自己知道,而此处的数字证书是要分发到公网上的。
+
+jiangxin@tomcat:~$ keytool -export -file ssokey/castest.crt -alias castest -keystore ssokey/castest
+输入密钥库口令:
+存储在文件 中的证书
+
+
+jiangxin@tomcat:~$ keytool -import -keystore "$JAVA_HOME/jre/lib/security/cacerts" -file ssokey/castest.crt -alias castest
+输入密钥库口令:
+keytool 错误: java.io.IOException: Keystore was tampered with, or password was incorrect
+jiangxin@tomcat:~$ keytool -import -keystore "$JAVA_HOME/jre/lib/security/cacerts" -file ssokey/castest.crt -alias castest
+输入密钥库口令:
+所有者: CN=cas.sso.com, OU=castest, O=castest, L=nanjing, ST=jiangsu, C=cn
+发布者: CN=cas.sso.com, OU=castest, O=castest, L=nanjing, ST=jiangsu, C=cn
+序列号: 3cc98964
+有效期开始日期: Sun May 07 09:03:47 CST 2017, 截止日期: Sat Aug 05 09:03:47 CST 2017
+证书指纹:
+ MD5: F4:B8:E4:B1:07:EE:86:45:C7:96:5F:FA:EF:E9:5C:11
+ SHA1: D0:7B:BB:30:0C:D3:8A:49:C9:89:3B:E0:C4:C0:98:30:74:E3:15:98
+ SHA256: 4B:AB:EA:C1:06:3F:0D:3B:A2:C9:3C:F7:45:B6:CF:66:EA:BE:B3:6A:42:61:05:E3:C4:D4:AE:DC:0C:DC:20:31
+ 签名算法名称: SHA256withRSA
+ 版本: 3
+
+扩展:
+
+#1: ObjectId: 2.5.29.14 Criticality=false
+SubjectKeyIdentifier [
+KeyIdentifier [
+0000: D0 C7 06 22 8B 57 71 E4 39 08 E5 05 F9 5B B4 2D ...".Wq.9....[.-
+0010: ED 9F 92 28 ...(
+]
+]
+
+是否信任此证书? [否]: y
+证书已添加到密钥库中
+
+### 安装CAS客户端
+
+建立客户端工程,参考:
+
+https://bitbucket.org/jiangxincode/casclient/
+
+使用maven打包,得到casclient.war,上传到服务器上
+
+### 验证
+
+验证之前先在Windows和Linux机器的hosts文件中加入:
+192.168.1.130 cas.sso.com
+
+
+重新启动Tomcat容器,在浏览器访问如下地址:
+https://cas.sso.com:8443/casclient/index.jsp
+会发现浏览器被重定向到如下地址:
+https://cas.sso.com:8443/cas/login?service=https%3A%2F%2Fcas.sso.com%3A8443%2Fcasclient%2Findex.jsp
+输入casuser/Mellon之后,浏览器会跳转到下面的地址
+https://cas.sso.com:8443/casclient/index.jsp;jsessionid=23551AEBF9B7B61431D0CC942F923771
+
+### 配置日志路径
+
+为了防止在不同地方启动tomcat,导致日志位置不同,不方便查找,修改一下日志路径。
+
+jiangxin@tomcat:/usr/local/tomcat/apache-tomcat-8.5.14/webapps/cas/WEB-INF/classes$ cp log4j2.xml log4j2.xml.bak
+jiangxin@tomcat:/usr/local/tomcat/apache-tomcat-8.5.14/webapps/cas/WEB-INF/classes$ vim log4j2.xml
+
+```xml
+
+
+
+
+ /usr/local/tomcat/apache-tomcat-8.5.14/logs/cas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#限于篇幅,此处有省略
+
+```
+
+### 其它配置
+
+CAS支持的配置很多,此处不一一说明,有需要的可以参考下面的链接:
+
+https://github.com/apereo/cas
+CAS protocol: https://apereo.github.io/cas/5.0.x/protocol/CAS-Protocol.html
+CAS Client集群环境的问题及解决方案: https://yq.aliyun.com/articles/49871
+cas系列文章: http://www.cnblogs.com/vhua/tag/cas/
+cas单点登录配置速成: http://www.blogjava.net/goodlyts/archive/2009/10/20/299091.html
+
+## Windows 10系统下搭建Jenkins环境
+
+主要参考:
+http://www.cnblogs.com/edward2013/p/5269465.html
+但是没有安装ant,而且java、maven、tomcat都是使用的压缩包方式安装。
+
+## Ubuntu 16.04安装docker
+
+主要参考:
+https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository
+
+## Ubuntu 22.04安装Samba
+
+### 下载/安装Samba服务器:
+sudo apt-get install samba samba-common
+
+### 配置Samba服务器
+首先将默认的配置文件进行备份
+sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
+
+sudo vim /etc/samba/smb.conf
+
+[jiangxin]
+path = /home/jiangxin
+available = yes
+browseable = yes
+public = yes
+writable = yes
+valid users = jiangxin
+
+### 设置密码并重启服务器
+
+sudo smbpasswd -a jiangxin //设置访问的密码
+sudo service smbd restart //重启smb服务器
+
+### 访问
+
+在Windows资源管理器导航栏输入`\\ip_adress`,然后输入账号和密码就可以访问了。为了后续方便快速访问Linux侧目录,将远程目录映射为网络驱动器:
+
+
+
+
+
+
+### 其它问题
+
+如果Windows无法访问samba服务器,尝试通过以下方式确认问题所在:
+
+控制面板-系统和安全-Windows Defender 防火墙,关闭防火墙
+
+
+控制面板-程序-启用或关闭Windows功能,勾选SMB 1.0/CIFS文件共享支持
+
+
+Win+R,输入gpedit.msc,计算器配置-管理模板-网络-Lanman工作站,选中"不安全的来宾登陆",在新的对话框中选中"已启用"
+
+
+
+
+## 配置AOSP源码查看环境
+
+### 在Windows上安装Repo,同步AOSP代码【不推荐】
+
+第一个想到的方案是在Windows上配置Repo,然后下载AOSP源码,参考:
+Windows安装repo的真正解决方案:https://ysy950803.blog.csdn.net/article/details/104188793
+但是就像Repo官网(https://gerrit.googlesource.com/git-repo/+/HEAD/docs/windows.md)说的那样:
+Repo is primarily developed on Linux with a lot of users on macOS. Windows is, unfortunately, not a common platform. There is support in repo for Windows, but there might be some rough edges.
+Keep in mind that Windows in general is “best effort” and “community supported”. That means we don't actively test or verify behavior, but rely heavily on users to report problems back to us, and to contribute fixes as needed.
+Windows版的Repo虽然可用,但是可能会出现各种各样的问题,这些问题可能会让我们在解决环境问题上分心过多,所以不推荐这种方式。
+
+### 在Linux上安装Repo,同步AOSP代码【推荐】
+
+根据实际情况有两种工作模式:
+1、 Linux作为AOSP代码的同步、存储、查看、修改、编译环境,大部分工作都是在Linux上完成,Android Studio也是安装在Linux上,这种我觉得是最完美的模式。但是要求Linux的性能足够好。由于我这边没有实际的Linux机器,是在Windows上用虚拟机配置的Linux环境,所以没有采用这种方法。
+2、 Linux作为AOSP代码的同步、存储、编译环境,查看和修改工作在Windows上完成,具体的实现方式有两种:
+a) 用Samba服务器把Linux上的AOSP代码共享到Windows平台,然后在Windows平台上安装IDE环境,直接打开远程AOSP代码目录,查看和修改,这种方式的优点是配置简单,不用代码同步。但是我这边网速一般,而AOSP代码量太大,导致Android Studio经常卡死,所以我也放弃了这种方式。
+b) 将android.iml/android.ipr以及常用的仓(比如frameworks/base frameworks/native等)使用rsync等工具同步到Windows平台,然后在Windows上使用Android Studio导入,进行查看和修改,修改完成后通过Beyondcompare工具将修改的内容同步到Linux平台进行编译等工作。这个各方面折中的方案。后续主要介绍这种工作环境的配置。
+
+#### 安装配置Linux环境
+
+如果已经有Linux机器,本步骤省略。我在家中没有,遂采用在Windows上安装Virtualbox,然后通过Virtualbox安装Linux(Ubuntu)。
+同时按需安装Git/Vim/OpenSSH Server等工具,安装方式不再赘述,网上有很多。
+
+#### 下载AOSP源码
+
+在配置好的Linux环境中下载AOSP源码,Google官方的下载AOSP源码的方式:https://source.android.com/docs/setup/build/downloading。
+但是由于墙的原因,这种方式不容易实现,所以推荐使用清华的镜像,使用指导:https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/。
+Repo的使用方式可以参考:Repo实践指南:https://www.cnblogs.com/jiangxinnju/p/14274982.html
+
+#### 配置Windows上的工具
+1、 安装SSH客户端工具,这里推荐MobaXTerm,因为它不仅免费还自带了rsync命令行工具,可以非常方便从Linux上同步代码到Windows。
+a) mkdir -p /drives/d/Code/sync/aosp/frameworks
+b) rsync -az --progress --delete --exclude=".git" android@192.168.1.125:/home/android/aosp/frameworks/base /drives/d/Code/sync/aosp/frameworks/
+c) rsync -az --progress --delete --exclude=".git" android@192.168.1.125:/home/android/aosp/frameworks/native /drives/d/Code/sync/aosp/frameworks/
+2、 安装BeyondCompare工具,方便对比,将修改的代码同步到Linux环境。
+3、 安装Android Sudio,将AOSP源码导入到Android Studio进行查看:https://www.cnblogs.com/jiangxinnju/p/14426645.html
+4、 安装Source Insight工具,AS查看AOSP的Java代码比较合适,但是C/C++代码不支持跳转,着色也比较差,看这部分代码还是SI比较好用。
+
+## TensorFlow环境搭建
+
+### 预备条件
+ Ubuntu 22.04.2 LTS
+ 配置好固定IP,安装SSH(Server)/Samba等基础网络连接软件
+
+## 腾讯云环境构建
+
+### 开启root用户
+sudo passwd root
+
+### 修改主机名
+sudo vim /etc/hostname
+修改成ubuntu
+sudo reboot
+
+### 防止SSH经常断连
+ubuntu@ubuntu:~$ sudo vim /etc/ssh/sshd_config
+ClientAliveInterval 30
+ClientAliveCountMax 86400
+
+ubuntu@ubuntu:~$ sudo /etc/init.d/ssh restart
+### 安装JDK 8
+ubuntu@ubuntu:/usr/local$ sudo mkdir java
+ubuntu@ubuntu:/usr/local$ sudo chown ubuntu:ubuntu java
+
+上传jdk-8u371-linux-x64.tar.gz到java目录
+
+ubuntu@ubuntu:/usr/local$ cd java/
+ubuntu@ubuntu:/usr/local/java$ tar -zxvf jdk-8u371-linux-x64.tar.gz
+
+ubuntu@ubuntu:/usr/local/java $ cd
+ubuntu@ubuntu:~$ sudo vim /etc/profile
+
+在文件末尾添加如下内容:
+
+export JAVA_HOME=/usr/local/java/jdk1.8.0_371
+export CLASSPATH=.:$JAVA_HOME/lib:$CLASSPATH
+export PATH=$JAVA_HOME/bin:$PATH
+
+ubuntu@ubuntu:~$ source /etc/profile
+ubuntu@ubuntu:~$ java -version
+java version "1.8.0_371"
+Java(TM) SE Runtime Environment (build 1.8.0_371-b11)
+Java HotSpot(TM) 64-Bit Server VM (build 25.371-b11, mixed mode)
+### 安装JDK 17
+ubuntu@ubuntu:/usr/local$ sudo mkdir java
+ubuntu@ubuntu:/usr/local$ sudo chown ubuntu:ubuntu java
+
+上传jdk-8u371-linux-x64.tar.gz到java目录
+
+ubuntu@ubuntu:/usr/local$ cd java/
+ubuntu@ubuntu:/usr/local/java$ tar -zxvf jdk-17_linux-x64_bin.tar.gz
+
+ubuntu@ubuntu:/usr/local/java $ cd
+ubuntu@ubuntu:~$ sudo vim /etc/profile
+
+在文件末尾添加如下内容:
+
+export JAVA_HOME=/usr/local/java/jdk-17.0.7
+export PATH=$JAVA_HOME/bin:$PATH
+
+ubuntu@ubuntu:~$ source /etc/profile
+ubuntu@ubuntu:~$ java -version
+java 17.0.7 2023-04-18 LTS
+Java(TM) SE Runtime Environment (build 17.0.7+8-LTS-224)
+Java HotSpot(TM) 64-Bit Server VM (build 17.0.7+8-LTS-224, mixed mode, sharing)
+
+### 安装Tomcat 8.5
+ubuntu@ubuntu:/usr/local$ sudo mkdir tomcat
+ubuntu@ubuntu:/usr/local$ sudo chown -R jiangxin:jiangxin tomcat
+ubuntu@ubuntu:/usr/local$ cd tomcat/
+ubuntu@ubuntu:/usr/local/tomcat$ tar -zxvf apache-tomcat-8.5.88.tar.gz
+ubuntu@ubuntu:/usr/local/tomcat$ cd
+
+ubuntu@ubuntu:~$ sudo vim /etc/profile
+
+export CATALINA_BASE=/usr/local/tomcat/apache-tomcat-8.5.88
+export CATALINA_HOME=/usr/local/tomcat/apache-tomcat-8.5.88
+export PATH=$PATH:$CATALINA_HOME/lib:$CATALINA_HOME/bin
+
+ubuntu@ubuntu:~$ source /etc/profile
+
+本次会话启动tomcat
+startup.sh ; tail -f $CATALINA_HOME/logs/catalina.out
+
+后台启动tomcat
+nohup startup.sh &
+
+关闭tomcat
+shutdown.sh
+
+端口占用查询
+sudo netstat -tulpn | grep 8080
+
+进程查询
+ps -ef | grep tomcat
+
+在浏览器中访问下面地址,查看能否正常访问:
+
+http://124.222.145.48:8080/
+### 安装Tomcat 9
+ubuntu@ubuntu:/usr/local$ sudo mkdir tomcat
+ubuntu@ubuntu:/usr/local$ sudo chown -R jiangxin:jiangxin tomcat
+ubuntu@ubuntu:/usr/local$ cd tomcat/
+ubuntu@ubuntu:/usr/local/tomcat$ tar -zxvf apache-tomcat-9.0.75.tar.gz
+ubuntu@ubuntu:/usr/local/tomcat$ cd
+
+ubuntu@ubuntu:~$ sudo vim /etc/profile
+
+export CATALINA_BASE=/usr/local/tomcat/apache-tomcat-9.0.75
+export CATALINA_HOME=/usr/local/tomcat/apache-tomcat-9.0.75
+export PATH=$PATH:$CATALINA_HOME/lib:$CATALINA_HOME/bin
+
+ubuntu@ubuntu:~$ source /etc/profile
+
+本次会话启动tomcat
+startup.sh ; tail -f $CATALINA_HOME/logs/catalina.out
+
+后台启动tomcat
+nohup startup.sh &
+
+关闭tomcat
+shutdown.sh
+
+端口占用查询
+sudo netstat -tulpn | grep 8080
+
+进程查询
+ps -ef | grep tomcat
+
+在浏览器中访问下面地址,查看能否正常访问:
+
+http://124.222.145.48:8080/
+### 安装Tomcat 10
+ubuntu@ubuntu:/usr/local$ sudo mkdir tomcat
+ubuntu@ubuntu:/usr/local$ sudo chown -R jiangxin:jiangxin tomcat
+ubuntu@ubuntu:/usr/local$ cd tomcat/
+ubuntu@ubuntu:/usr/local/tomcat$ tar -zxvf apache-tomcat-10.1.9.tar.gz
+ubuntu@ubuntu:/usr/local/tomcat$ cd
+
+ubuntu@ubuntu:~$ sudo vim /etc/profile
+
+export CATALINA_BASE=/usr/local/tomcat/apache-tomcat-10.1.9
+export CATALINA_HOME=/usr/local/tomcat/apache-tomcat-10.1.9
+export PATH=$PATH:$CATALINA_HOME/lib:$CATALINA_HOME/bin
+
+ubuntu@ubuntu:~$ source /etc/profile
+
+本次会话启动tomcat
+startup.sh ; tail -f $CATALINA_HOME/logs/catalina.out
+
+后台启动tomcat
+nohup startup.sh &
+
+关闭tomcat
+shutdown.sh
+
+端口占用查询
+sudo netstat -tulpn | grep 8080
+
+进程查询
+ps -ef | grep tomcat
+
+在浏览器中访问下面地址,查看能否正常访问:
+
+http://124.222.145.48:8080/
+
+### 安装MySQL
+
+参考前文
+
+### 部署项目
+war包放到$CATALINA_HOME/webapps/目录下,然后重启tomcat
+shutdown.sh; startup.sh ; tail -f $CATALINA_HOME/logs/catalina.out
+
+http://124.222.145.48:8080/java-web-test/index.jsp
+
+## MyEclipse 2014安装说明
+
+下载过程就不详述了。
+
+说明一下,可以只安装MyEclipse 2014,而不用提前安装JDK、Eclipse、Tomcat等软件,MyEclipse 2014内嵌了这些东西,网上说的MyEclipse只是Eclipse的插件,所以要安装MyEclipse就要先安装Eclipse,而要安装Eclipse又必须提前安装JDK。这对于旧版本的MyEclipse来说确实是这样,但是对于比较新的几个版本来说,不需要了,MyEclipse包含了开发所需要的大多数工具。
+
+当然,如果你不想使用其自带的JDK或者服务器软件,你可以在安装了其它的JDK版本和服务器软件之后自行设置。(在Window->Preferences中进行配置)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+安装好之后,先不要打开MyEclipse 2014的程序。
+
+
+
+接下来对MyEclipse进行破解,由于破解包是jar包,所以需要JRE,不过一般的机子上都有,可以打开CMD输入java命令测试一下,如果显示以下命令则证明本机已有JRE,无需安装,如果没有下载JRE,进行安装。
+
+
+
+打开破解文件夹,运行`cracker.jar`。在破解界面中,usercode随便输入,然后点击右边的SystemId按钮,将在SystemId中自动生成一串机器码。
+
+
+
+然后选择`Tools->RebuildKey`。
+
+
+
+点击激活按钮。将会看到有日志生成。
+
+
+
+选择`Tools->ReplaceJarFiles`。选择MyEclipse安装目录中的Plugin文件夹。
+
+
+
+操作`Tools->SaveProperities`
+
+
+
+重新打开MyEclipse 2014
+
+
+
+
+
+`MyEclipse->Subscription Informatioon`,显示激活。
+
+
+
diff --git "a/_posts/others/2025-05-21-\346\231\272\350\203\275\351\251\276\351\251\266-\351\232\234\347\242\215\347\211\251\346\216\242\346\265\213.md" "b/_posts/others/2025-05-21-\346\231\272\350\203\275\351\251\276\351\251\266-\351\232\234\347\242\215\347\211\251\346\216\242\346\265\213.md"
new file mode 100644
index 0000000..45ef647
--- /dev/null
+++ "b/_posts/others/2025-05-21-\346\231\272\350\203\275\351\251\276\351\251\266-\351\232\234\347\242\215\347\211\251\346\216\242\346\265\213.md"
@@ -0,0 +1,13 @@
+---
+title: "智能驾驶-障碍物探测"
+categories:
+ - 智能驾驶
+tags:
+ - 障碍物探测
+ - 智能驾驶
+toc: true
+---
+
+本文主要汇总了智能驾驶领域的一些技术和方案。
+
+* 自动驾驶的眼睛:激光、毫米波雷达&摄像头三种技术产品之比较:
diff --git "a/_posts/the-way-of-learning/2015-05-19-Android\345\255\246\344\271\240\344\271\213\350\267\257.md" "b/_posts/the-way-of-learning/2015-05-19-Android\345\255\246\344\271\240\344\271\213\350\267\257.md"
new file mode 100644
index 0000000..8f3d7c6
--- /dev/null
+++ "b/_posts/the-way-of-learning/2015-05-19-Android\345\255\246\344\271\240\344\271\213\350\267\257.md"
@@ -0,0 +1,865 @@
+---
+title: "Andriod学习之路"
+categories:
+ - the-way-of-learning
+tags:
+ - 学习之路
+ - Android
+toc: true
+---
+
+本篇文章汇总了 Android 学习的相关资源,包括开发者文档、系统架构、性能优化、工具使用等内容,适合 Android 开发者参考。
+
+## Android应用开发
+
+站在Android应用开发者的角度,Android官方开发者网站是最权威的学习资料,包含了 Android 的所有 API 文档、开发者指南、设计规范等。
+
+* Android开发者网站:
+* Android开发者网站国内镜像(可以在国内不搭梯子直接访问):
+
+Android开发者网站包含了以下内容:
+
+* Essentials
+ * Platform:
+ * Release:
+ * Technology:
+ * Android Jetpack(AndroidX):
+* Develop
+ * Android Studio:
+ * Core Areas
+ * Data and file storage overview:
+ * Notifications overview:
+ * App Shortcuts:
+ * Support different screen sizes:
+ * NDK:
+ * Android API reference:
+* Google Play
+ * Meet Google Play's target API level requirement:
+* Community
+
+* Control the system UI visibility:
+* Enhance graphics with wide color content:
+
+* uses-sdk:
+* uses-library:
+
+## AOSP定制
+
+站在手机、车机制造商的角度,需要在开源Android项目基础上做定制,AOSP官网是最权威的学习资料,包含了 Android 的所有源代码、系统架构、开发者指南等。
+
+* AOSP项目官网:
+* AOSP项目官网国内镜像(可以在国内不搭梯子直接访问):
+
+* Core Topics
+ * Architecture overview:
+
+### AOSP源码在线查看
+
+* Android Code Search:
+* AOSPXRef:
+* androidxref:
+* Android Cross Reference:
+* Android OS:
+* Git repositories on android:
+
+### AOSP构建
+
+* Feature launch flag:
+* Codenames, Tags, and Build Numbers:
+* 将AOSP源码导入到Android Studio进行查看:
+* Android构建系统:
+* Android soong build系统介绍:
+* Repo实践指南:
+* 编译系统入门篇-Android10.0编译系统(一):
+* bp-编译-注解-二次编译?
+
+* ~~使用 Jack 编译 (AOSP 6.0 - 8.1): ~~
+* ~~Android 新一代编译 toolchain Jack & Jill 简介: ~~
+* ~~Google 又弃坑了,Jack+Jill vs. javac+dx: ~~
+* Android CPU, Compilers, D8 & R8:
+* ProGuard and R8: Comparing Optimizers:
+
+### 系统架构
+
+* Here comes Treble: A modular base for Android:
+* GRF:
+* 系统启动流程(init进程、Zygote进程、SystemServer):
+* android关机流程 安卓关机流程:
+* Android BOOTCLASSPATH详解:
+* Android 虚拟化框架 (AVF) :
+* Trusty TEE:
+* Android OTA升级:
+* Android系统架构-[Android取经之路]:
+* Android Recovery升级原理:
+* [Android 基础] -- Android 属性系统简介:
+
+### AI与MCP
+
+* Android 16 的 Appfunctions API ,应用级 MCP 支持为 AI 场景打通最后一层壁垒:
+
+### 网络
+
+* 原生安卓WiFi信号去叹号去叉教程:
+
+### WMS
+
+* window insets:
+* 支持多窗口模式:
+* 使用画中画 (PIP) 功能添加视频:
+* WMS转屏流程:
+* Android WMS动画系统初探(一):
+* WindowManagerService理解与深入(Android Q):
+* android中Activity中的WindowManager与Window:
+* 浅析onWindowsFocusChanged()方法:
+* Window.setFlags 各种Flag笔记:
+* Activity的创建(从Activity的角度理解IWindowSession):
+* Android多点触控问题解决(windowEnableSplitTouch, splitMotionEvents):
+* “一文读懂”系列:无处不在的WMS:
+
+### DMS
+
+* 【Android】VirtualDisplay创建流程及原理:
+
+### SurfaceFlinger
+
+* 图形架构:
+* Winscope:
+* Hardware acceleration:
+* Android应用程序UI硬件加速渲染技术简要介绍和学习计划:
+* Android 显示系统:SurfaceFlinger详解:
+* 关于 UI 渲染,你需要了解什么?
+* Android P 图形显示系统(一)硬件合成HWC2:
+* Android P 图形显示系统(九) Android图形显示子系统概述:
+* Android图形系统(十一)-Choreographer:
+* Android 显示系统:SurfaceFlinger详解:
+
+### Input相关
+
+* 输入:
+* 图解 Android 事件分发机制:
+* requestDisallowInterceptTouchEvent() 阻止父层的View截获touch事件(事件处理机制):
+* View·InputEvent事件投递源码分析:
+* Android 输入系统【1】通过 IMS 的创建理解 Android 的输入流程:
+* input子系统详解:
+* 图解Android - Android GUI 系统 (5) - Android的Event Input System:
+* Android input专题:
+* Android InputDispatch事件派发->选择目标窗口:
+* 10.12 android输入系统_InputStage理论:
+* Android Input 4:
+* kOS(13):inputflinger—InputReader线程:
+* Android Input (4) -- inputDispatcher到ViewRootImpl:
+* 【Android休眠】之Android对PowerKey事件的处理(2)EventHub:
+* Android_input系统分析EventHub::getevents:
+* Linux/Android——Input系统之InputReader (七):
+* Android触摸事件的传递(四-1)--输入系统-InputReader:
+* Input源码解读——从"Show tabs"开始:
+* Multi-Touch Input Parser:
+* Android Input概念(getevent -ltr):
+
+### 输入法与输入法框架
+
+* Create an input method:
+* InputMethodManager:
+* 处理输入法可见性:
+
+### 手势导航
+
+* Ensure compatibility with gesture navigation:
+
+* Gesture Navigation: going edge-to-edge (I):
+* Gesture Navigation: handling visual overlaps (II):
+* Gesture Navigation: handling gesture conflicts (III):
+* Gesture Navigation: immersive modes (IV):
+
+* 开启全面屏体验 | 手势导航 (一):
+* 处理视觉冲突 | 手势导航 (二):
+* 如何处理手势冲突 | 手势导航连载 (三):
+* 沉浸模式 | 手势导航连载 (四) :
+
+* 深入分析 Android 系统返回手势的实现原理:
+
+* 添加预测性返回动画:
+* Ensure compatibility with gesture navigation:
+* Add support for the predictive back gesture:
+* Android 13 返回导航大变更:返回键彻底废弃 + 可预见型返回手势:
+* Android 14 之返回界面升级:预览目标界面 + 全新返回箭头:
+
+### Accessibility
+
+* Android AccessibilityService机制源码解析:
+* ContentCaptureManager:
+
+### 电源管理
+
+* Android电源键亮灭屏流程:
+* Optimize for Doze and App Standby:
+* App Standby Buckets:
+* Doze模式简介:
+* Android中的Doze模式:
+* Android 8.1 Doze模式分析(一):