1、编辑文件
#编辑配置文件 sudo vi /etc/default/grub #查找GFX,并新增下面一行 GRUB_GFXPAYLOAD_LINUX=1024x768
2、重新配置grub
sudo update-grub
3、重启
适用系统:
Ubuntu14
Ubuntu16
Ubuntu18
Learn and share.
1、编辑文件
#编辑配置文件 sudo vi /etc/default/grub #查找GFX,并新增下面一行 GRUB_GFXPAYLOAD_LINUX=1024x768
2、重新配置grub
sudo update-grub
3、重启
适用系统:
Ubuntu14
Ubuntu16
Ubuntu18
首先说明一下,如果要使用Linux Native的话,Hadoop是已经自带了哦
然后,如果要编译的话,建议直接从Hadoop源码按官方的说明进行编译,不要像我这样自己搞。。。
如果你喜欢折腾,请继续看:
1、按源码架构拷贝下面的文件及文件夹
hadoop-2.5.2-src\hadoop-common-project\hadoop-common\src\main\native hadoop-2.5.2-src\hadoop-common-project\hadoop-common\src\CMakeLists.txt hadoop-2.5.2-src\hadoop-common-project\hadoop-common\src\config.h.cmake hadoop-2.5.2-src\hadoop-common-project\hadoop-common\src\JNIFlags.cmake hadoop-2.5.2-src\hadoop-hdfs-project\hadoop-hdfs\src\main\native hadoop-2.5.2-src\hadoop-hdfs-project\hadoop-hdfs\src\CMakeLists.txt(可能需要调整一下依赖文件JNIFlags.cmake的相对路径) hadoop-2.5.2-src\hadoop-hdfs-project\hadoop-hdfs\src\config.h.cmake
2、编译libhadoop
2.1、检查并安装以来关系
#需要gcc、make、jdk,这些一般大家都有了 #需要zlib apt-get install zlib1g-dev #需要cmake apt-get install cmake
2.2、用cmake生成Makefile
cmake ./src/ -DGENERATED_JAVAH=~/Build/hadoop-2.5.2-src/build/hadoop-common-project/hadoop-common/native/javah -DJVM_ARCH_DATA_MODEL=64 -DREQUIRE_BZIP2=false -DREQUIRE_SNAPPY=false
2.3、用javah生成头文件
需要三个jar包,hadoop-common,hadoop-annotations,guava
javah org.apache.hadoop.io.compress.lz4.Lz4Compressor javah org.apache.hadoop.io.compress.lz4.Lz4Decompressor javah org.apache.hadoop.io.compress.zlib.ZlibCompressor javah org.apache.hadoop.io.compress.zlib.ZlibDecompressor javah org.apache.hadoop.io.nativeio.NativeIO javah org.apache.hadoop.io.nativeio.SharedFileDescriptorFactory javah org.apache.hadoop.net.unix.DomainSocket javah org.apache.hadoop.net.unix.DomainSocketWatcher javah org.apache.hadoop.security.JniBasedUnixGroupsMapping javah org.apache.hadoop.security.JniBasedUnixNetgroupsMapping javah org.apache.hadoop.util.NativeCrc32
将生成的文件,拷贝到对应的c文件夹中
2.3、生成
make
3、编译libhdfs
3.1、用cmake生成Makefile
cmake ./src/ -DGENERATED_JAVAH=~/Build/hadoop-2.5.2-src/build/hadoop-common-project/hadoop-common/native/javah -DJVM_ARCH_DATA_MODEL=64 -DREQUIRE_LIBWEBHDFS=false -DREQUIRE_FUSE=false
3.2、生成
make
4、将生成的文件拷贝到HADOOP_HOME/lib/mynative
5、修改/etc/profile,增加下面一行
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/mynative"
6、刷新配置
source /etc/profile
搞定!
一、说明:
1、如果你是MAC,那直接安装Bootcamp就好了,别瞎折腾
2、如果你只想用这个驱动,来这里下载https://forums.macrumors.com/threads/apple-hfs-windows-driver-download.1368010/
3、即使你折腾成功了,也是只读,无法写入
4、Bootcamp的版本是通过下面的条件划分的
A、MAC硬件版本
B、Windows操作系统版本(win7、win8、win10、x86、x64)
C、发布版本
从而,直接查找Bootcamp,本身就成了一件很痛苦的事情
5、Bootcamp的HFS驱动文件的默认安装位置为
C:\Windows\System32\drivers\AppleHFS.sys
C:\Windows\System32\drivers\AppleMNT.sys
而文件系统驱动是与MAC硬件版本无关的,所以我们只需要考虑B、C两个问题就好了
二、然后说HFS驱动提取的方式:
1、按上面所说的,驱动提取只需要考虑Windows操作系统版本和Bootcamp发布版本就可以了,是不需要考虑MAC硬件版本的
2、下载后,解压文件
3、将AppleHFS.sys、AppleMNT.sys拷贝出来
4、备份注册表(这一步一般来说是可以省掉的)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\AppleHFS
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\AppleMNT
一般来说用下面的文件进行安装和卸载就好了:
Add_AppleHFS.reg
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\AppleHFS] "Type"=dword:00000002 "ErrorControl"=dword:00000001 "Start"=dword:00000000 "Group"="File System" [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\AppleMNT] "Group"="System Bus Extender" "Type"=dword:00000001 "ErrorControl"=dword:00000001 "Start"=dword:00000000
Remove_AppleHFS.reg
Windows Registry Editor Version 5.00 [-HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\AppleHFS] [-HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\AppleMNT]
5、这样驱动提取就完成了
三、HFS驱动的安装方式:
1、一定要核对windows版本与驱动提取的版本信息是一致的才可以(win7、win8、win10、x86、x64)
2、将驱动拷贝到指定路径
C:\Windows\System32\drivers\AppleHFS.sys
C:\Windows\System32\drivers\AppleMNT.sys
3、双击Add_AppleHFS.reg
4、重启即可
四、HFS驱动的卸载方式:
1、双击Remove_AppleHFS.reg
2、重启
3、删除驱动文件
C:\Windows\System32\drivers\AppleHFS.sys
C:\Windows\System32\drivers\AppleMNT.sys
五、兼容Win10方式:
1、按上面的方式安装驱动
2、打开磁盘管理器,从磁盘0的第一个卷,一直数到你想挂在的HFS卷,记录卷的序号,比如我有几块硬盘,我想挂载的卷是第10个卷(要注意,没有挂载的卷也是要计算的)
3、修改注册表
#位置 HKEY_LOCAL_MACHINE/system/CurrentControlSet/Control/Session Manager/DOS Devices/ #新建String类型的键值对 #左边的Key就是你想挂在的盘符,比如 #N: #右边的Value就是卷的序号 #\Device\HarddiskVolume序号 #比如你是第10个卷,那就是 #\Device\HarddiskVolume10
4、重启,如果卷号错了,就调整一下再重启
5、只是一个临时方案,不太适合移动设备,有些太麻烦了
一、IPv6顾名思义,其地址长128bit(2的64次方)。
为了便于记忆,通常采用16进制表示,每4个16进制为一段,共8段(8*4*4=128):
XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX
其中,XXXX范围为0000-FFFF
二、IPv6地址表示,主要有下面几种:
1、首选法,即每一位都写全,比如:
0234:0000:0000:0000:1234:0000:0000:2234
0000:0000:0000:0000:0234:0000:0000:2234
但这样不便于书写,于是人们想办法来进行缩写
2、将相连的0000,表示为::,但只允许出现一次,上面的地址可以缩写为
0234::1234:0000:0000:2234
::0234:0000:0000:2234
3、将每一段的前导0去掉,这样上面的地址变为
234::1234:0:0:2234
::234:0:0:2234
这样就便于人们记忆了
4、另外,IPv6可以兼容IPv4:
IPV4兼容的IPV6地址,用于在IPV4网络上建立自动隧道,以传输IPV6数据包:
0000:0000:0000:0000:0000:0000:YYY.YYY.YYY.YYY
其中,YYY范围为000-255
映射IPV4的IPV6地址,仅用于拥有IPV4和IPV6双协议栈节点的本地范围:
0000:0000:0000:0000:0000:FFFF:YYY.YYY.YYY.YYY
其中,YYY范围为000-255
三、IPv6的地址分为单播(Unicast)、多播(Multicast)和任意播(Anycast)。
其中单播分为本地链路,本站点地址,ULA,可聚合全球单播地址,回环。
1、本地链路地址(Link-Local Addresses):同一链路相邻节点之间通讯,不能被路由
地址前10个bit是1111 1110 10,规则为FE80::/64,即FE80::/10+54bit0+EUI-64
FE80:0000:0000:0000:EUI-64
2、本地站点地址(Site-Local Addresses):只能在一个站点内使用,私有地址
地址前10个bit是1111 1110 11,规则为FEC0::/48,即FEC0::/10+38bit0+16bit子网表示+EUI-64
FEC0:XXXX:XXXX:XXXX:EUI-64
3、唯一的本地IPv6单播地址(ULA,Unique Local IPv6 Unicast Address):用于替代Site-Local Addresses
地址规则为FD00::/8,后面跟一个被称为全局ID的40bit随机标识符。
4、可聚合全球单播地址(Aggregatable Global Unicast Addresses):公网地址,全球路由
前三bit为001,第一个地址为:
2000:0000:0000:0000:0000:0000:0000:0000
最后一个地址为:
3FFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
5、回环地址:
0000:0000:0000:0000:0000:0000:0000:0001
0:0:0:0:0:0:0:1
::1
6、未指定地址(Unspecified address)
0000:0000:0000:0000:0000:0000:0000:0000
0:0:0:0:0:0:0:0
::
四、多播地址:一对多
前8个bit为1111 1111,地址规则为FE00::/8
FF01::到FF0F::的多播地址是保留专用地址
FF01::1 节点本地范围所有节点多播地址
FF02::1 链路本地范围所有节点多播地址
FF01::2 节点本地范围所有路由器多播地址
FF02::2 链路本地范围所有路由器多播地址
FF05::2 站点本地范围所有路由器多播地址
五、任意播:任意播是多个设备共享一个地址,应用在一到附近模式(one-to-nearest)
发送方发送一个以任意播为目标地址的包,当路由器接受到这个包以后,就转发给具有这个地址的离它最近的设备。
任意播地址是从单播地址中划分出来的,对于那些没有配备任意播的的地址就是单播地址;但是当一个单播地址分配给不止一个接口的时候,单播地址就成了任意播地址。
所以单播地址与任意播地址的规则是一样的。
六、EUI-64计算方法:
假设电脑的MAC是00:0C:85:AB:50:01;
首先在MAC地址正中间插入FFFE,得到00:0C:85:FF:FE:AB:50:01
然后由左到右第七bit置反,得到02:0C:85:FF:FE:AB:50:01
将其改写为EUI-64规则,得到020C:85FF:FEAB:5001
需要对第七位取反的原因:
在MAC地址中,第7比特为1表示本地管理,为0表示全球管理
在EUI-64格式中,第7位为1表示全球惟一,为0表示本地惟一
七、隧道协议地址转换
6over4地址
[64bit-prefix]:0:0:WWXX:YYZZ,其中的WWXX:YYZZ是w.x.y.z IPv4公共地址的十进制点号表示法,用于一个使用6to4协议的隧道机制的节点。
6to4地址
2002:WWXX:YYZZ:[SLA ID]:[Interface ID],用于表示一个使用6to4协议的隧道机制节点。
MAC笔记本中,用EFI替代了传统的BIOS,其引导方式也由MBR调整为GPT。
但实际上,为了兼容性要求,MAC下的分区有两个分区表,一个是GPT(GUID Partition Table),一个是hybrid MBR(Master Boot Record)。
而hybrid MBR其实是为了兼容只支持MBR的操作系统,在GPT中划分了一块作为MBR用。
MAC OS默认分区方式为GPT,主要也是在读GPT。
Windows只会读MBR。
1、为什么Bootcamp只允许windows用一个盘
MBR只允许四个主分区,而MAC占掉了三个:
1个引导分区
1个MAC分区
1个恢复分区
所以只留给了Windows一个主分区。
为什么MAC的硬盘分区要在MAC OS下进行呢?
MAC下分区的话,MAC OS会同时更新GPT与MBR,这样MAC与Windows读取的分区信息都是对的。
Windows下分区的话,Windows只会改写MBR,这样GPT与MBR的分区信息就不匹配了,MAC与Windows读取的信息就不一样了,是否相互覆盖全凭运气,你懂的。
QString NMyUtils::getExeFullPathWithArgs()
{
QString exePath = QCoreApplication::applicationFilePath().replace("/","\\").replace("Reminder.exe","QTLoader.exe");
QString argPath = "\""+exePath+"\" TrayIcon";
qDebug()<<argPath;
return argPath;
}
bool NMyUtils::isAutoStart()
{
QSettings reg("HKEY_LOCAL_MACHINE\\SOFTWARE\\MICROSOFT\\WINDOWS\\CURRENTVERSION\\RUN", QSettings::NativeFormat);
QString val = reg.value("NReminder").toString();
if(val.length()>0)
{
return true;
}
else
{
return false;
}
}
void NMyUtils::setAutoStart()
{
QSettings reg("HKEY_LOCAL_MACHINE\\SOFTWARE\\MICROSOFT\\WINDOWS\\CURRENTVERSION\\RUN", QSettings::NativeFormat);
reg.setValue("NReminder",NMyUtils::getExeFullPathWithArgs());
}
void NMyUtils::removeAutoStart()
{
QSettings reg("HKEY_LOCAL_MACHINE\\SOFTWARE\\MICROSOFT\\WINDOWS\\CURRENTVERSION\\RUN", QSettings::NativeFormat);
reg.remove("NReminder");
}
开始->运行
dcpromo
Android SDK超级大(我现在有26.5G),而连接Google的速度超级慢,一次下载要好久。
最近准备在MAC进行Android开发,别的都好下载,但Adroid SDK就有些太大了,于是考虑从WIN下直接复制到MAC。
Android SDK主要由下面几部分组成:
/add-ons:GoogleAPI,操作系统无关 /build-tools:构建工具,这个和操作系统相关的,要重新下载 /docs:文档,操作系统无关 /extras:扩展内容,是否需要重新下载与其功能有关 /extras/android:操作系统无关 /extras/google:操作系统无关 /extras/intel:intel的硬件加速驱动,操作系统相关,需重新下载 /platforms:android平台,早期操作系统相关,后期将操作系统相关内容放到了build-tools中,可以全部拷贝过去,系统相关内容会自动重新下载 /platform-tools:管理工具,这个和操作系统相关的,要重新下载 /samples:demo,操作系统无关 /sources:android源码,操作系统无关 /system-images:android系统映像,操作系统无关 /temp:下载缓存,不需要拷贝 /tools:管理工具,这个和操作系统相关的,要重新下载
1、从Oracle下载MAC版本的JDK7
http://www.oracle.com/technetwork/java/javase/downloads/index.html
2、从Google下载MAC版本Android Studio和Android SDK Manager
http://developer.android.com/sdk/index.html
3、安装JDK7、Android Studio、Android SDK Manager,并下载需要版本的Android SDK
4、此时双击Android Studio会报错:
Android Studio was unable to find a valid JVM.
这是因为Android Studio默认使用JDK1.6.*的原因
在Finder中打开Application文件夹,在“Android Studio.app”上右键,显示程序包内容 编辑Content/Info.plist,修改属性JVMOptions->JVMVersion一行,从1.6.*修改为1.7.*
5、此时双击Android Studio会尝试从Google获取最新的Android SDK信息
Fetching Android SDK component information
当然你读不到啦,只好屏蔽初始化方法:
编辑Content/idea.properties/bin/idea.properties文件,添加一行 disable.android.first.run=true
6、现在Android Studio可以启动了,但是不能新建项目
需要告诉Android Studio,Android SDK在哪里:
主界面-》Configure-》Project Defaults-》Project Structure-》Android SDK location 填写Android SDK的绝对路径,保存,然后就能新建应用了
7、那就新建一个简单应用测试一下吧,当然先是虚拟机:
Starting emulator for AVD 'new' emulator: ERROR: x86 emulation currently requires hardware acceleration! Please ensure Intel HAXM is properly installed and usable. CPU acceleration status: HAX kernel module is not installed!
这是因为HAXM模块没有安装,前往Android SDK根目录
安装下面的软件: PATH_TO_SDK/extras/intel/Hardware_Accelerated_Execution_Manager/IntelHAXM_1.1.1_for_10_9_and_above.dmg
8、然后就是在设备上测试,Android SDK找不到我的设备
#添加adb路径
echo "export PATH=${PATH}:/PATH_TO_SDK/android-sdk-macosx/platform-tools/">>~/.bash_profile
#然后刷新一下
source .bash_profile
#添加设备厂商ID(我的是小米),可以在系统报告中看到设备厂商ID信息
echo"0x2717">>~/.android/adb_usb.ini
#杀掉adb服务
adb kill-server
#重启adb服务
adb sever
#PTP模式连上手机,当然要开启手机调试咯,这样就能看到设备了
adb devices
9、连上设备了,运行时报错:
Permission Denial: starting Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.neohope.testapp/.LoginActivity } from null (pid=29619, uid=2000) not exported from uid 10139
这个错误是因为Main Activity没有设置,在Manifest中对应的Activity中增加如下设置即可
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
Wireshark是一个很好用的sniffer工具,插件十分强大。有时,为了判断问题,在日常工作中也会用到一些,现在记录一部分常用的过滤规则:
1、运算符
| lt | < | 小于 |
| le | <= | 小于等于 |
| eq | == | 等于 |
| gt | > | 大于 |
| ge | >= | 大于等于 |
| ne | != | 不等 |
| and | && | 与操作 |
| or | || | 或操作 |
| not | ! | 非操作 |
2、ip、mac和port过滤
#过滤ip地址为192.168.1.102的全部数据包 ip.addr eq 192.168.1.102 #过滤从192.168.1.102发来的数据包 或 发往192.168.1.102的数据包 ip.src eq 192.168.1.102 or ip.dst eq 192.168.1.102 #过滤MAC地址为00:00:00:01:02:03的所有包 eth.add eq 00:00:00:01:02:03 #过滤MAC地址为00:00:00:01:02:03发送的包 或 发往00:00:00:01:02:03的包 eth.src eq 00:00:00:01:02:03 or eth.dst eq 00:00:00:01:02:03 #过滤8080端口全部tcp数据包(接收和发送) tcp.port eq 8080 #过滤8080端口发送的全部tcp数据包 或 发送到8080端口全部tcp数据包 tcp.srcport eq 8080 or tcp.dstport eq 8080 #过滤21端口全部udp数据包(接收和发送) upd.port eq 21 #过滤21端口发送的全部udp数据包 或 发送到21端口全部udp数据包 udp.srcport eq 21 or udp.dstport eq 21 #过滤1024以内端口数据包 tcp.port <= 1024 #去掉tcp数据包 !tcp #或 not tcp
3、包长度过滤
#udp报文长度等于100 udp.length eq 100 #udp数据长度等于92 udp.len eq 92 #经常可以用到eth(farme),ip,arp,tcp,udp等协议的包长度 #注意区分包长度和payload长度
4、HTTP协议
#过滤GET方法的HTTP数据包 http.request.method == "GET" #按URI过滤HTTP数据包 http.request.uri == "/image/logo.gif" #按内容过滤HTTP数据包 http contains "Content-Type: application/dicom"
5、匹配规则
| \d | 0-9的数字 |
| \D | \d的补集 |
| \w | 单词字符,即大小写字母、0-9的数字、下划线 |
| \W | \w的补集 |
| \s | 空白字符,包括换行符\n、回车符\r、制表符\t、垂直制表符\v、换页符\f |
| \S | \s的补集 |
| . | 除换行符\n外的任意字符 |
| .* | 匹配任意文本 |
| […] | 匹配[]内所列出的所有字符 |
| [^…] | 匹配非[]内所列出的字符 |
| ^ | 表示其后的字符必须位于字符串的开始处 |
| $ | 表示其前面的字符必须位于字符串的结束处 |
| \b | 匹配一个单词的边界 |
| \B | 匹配一个非单词的边界 |
| {n} | 匹配前面的字符n次 |
| {n,} | 匹配前面的字符n次或多于n次 |
| {n,m} | 匹配前面的字符n到m次 |
| ? | 匹配前面的字符0或1次 |
| + | 匹配前面的字符1次或多于1次 |
| * | 匹配前面的字符0次或式于0次 |
6、包匹配
#字节匹配,比如匹配payload第一个字节0x14的UDP数据包 udp[8]==14 #范围匹配,经常使用到tcp[offset,n],比如匹配payload的前4个字节0x0004002a udp[8:4]==00:04:00:2a #正则匹配,要用match,比如匹配HTTP1.1协议的数据包 tcp[20:] matches "^GET [ -~]*HTTP/1.1\\x0d\\x0a"
7、示例
#DICOMClient 上抓取 DICOMServer ip.dst eq 服务端ip && tcp.port eq 104 #DICOMServer 上抓取 DICOMClient tcp.port eq 104 #HL7v2Client 上抓取 HL7v2Server ip.dst eq 服务端ip && tcp.port eq 3306 #HL7v2Server上抓取 HL7v2Client tcp.port eq 3306