MS17-010 for 已停止支持系统的补丁

更新MS17-010补丁可以避免受勒索病毒的感染,以下是微软破例为已停止支持的系统提供的补丁:

http://www.catalog.update.microsoft.com/Search.aspx?q=kb4012598

有关Windows 10累积补丁获取,请访问:

https://support.microsoft.com/en-us/help/4043454

Win10 14393.321 更新失败删了分区表

今天更新14393.321失败了,在撤销更改后重启,结果系统进不去了,发现连分区表都删了。由于是SSD,不存在磁盘损坏一说,网上流传一种说法,Win10安装会删Linux分区,不过我的情况更狠,所有的分区都被删除。

磁盘分区如下,为mbr格式分区:
1. Linux boot 分区,含Grub
2. Ntfs, Win 10 单一分区,含Win 10启动加载程序
3. Ntfs, 数据分区
4. 扩展分区
4.1. Linux 根分区
4.2. Linux Swap

用GParted刻录成的U盘启动后,查看磁盘情况,发现除了/dev/sda,并无下挂分区,说明分区表已被破坏。

由于之前在linux 根分区备份了mbr,所以当务之急是要找回mbr备份,用另一U盘刻录WinPE启动后,用R-Studio扫描全盘后恢复出该文件。还原后分区找回, /dev/sdaX也回来了,但系统依旧不能启动,估计是连各个分区上的Boot loader程序都被删了,用Gparted U盘启动后,挂载Linux根分区,文件都在,执行分区下的usr/sbin/grub-install,发现执行不了,估计是内核版本不匹配,只好重新再刻录一个Debian 8.6的LiveCD到U盘,这样内核版本和发行版就与硬盘上的一致了。

接下来要做的是把Grub重新安装到硬盘上,先把硬盘挂载到liveCD系统里,挂在后的结构如下

Live CD文件系统 /
    \- mnt/linux  挂载硬盘 Linux根分区
        \- boot 挂载硬盘boot分区

接下来用apt安装grub2,然后执行命令

grub-install --root-directory=/mnt/linux /dev/sda

grub会自动安装boot loader 1阶段到/mnt/linux/boot/grub/stage1,重启电脑后终于恢复。折腾了3小时……


后续跟踪:由于该电脑先安装Windows,再安装Linux,导致MBR活动分区被标记到Linux Boot分区,在把活动分区重新指向Windows分区后,问题可以得到解决。

批处理路径扩展

%~dp0 “d”为Drive的缩写,即为驱动器,磁盘、“p”为Path缩写,即为路径、目录

cd是转到这个目录,不过我觉得cd /d %~dp0还好些

选项语法:

~0 -删除任何引号("),扩充%0
%~f0 -将%0扩充到一个完全合格的路径名(“f”是file,即文件)
%~d0 -仅将%0扩充到一个驱动器号
%~p0 -仅将%0扩充到一个路径
%~n0 -仅将%0扩充到一个文件名(“n”是name文件名)
%~x0 -仅将%0扩充到一个文件扩展名
%~s0 -扩充的路径只含有短名(“s”为Short,短的)
%~a0 -将%0扩充到文件的文件属性(“a”为attribute,即属性)
%~t0 -将%0扩充到文件的日期/时间(“t”time)
%~z0 -将%0扩充到文件的大小(Size大小)
%~$PATH:0 -查找列在路径环境变量的目录,并将%0扩充

到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此组合键会扩充到空字符串

可以组合修饰符来得到多重结果:

%~dp0 -仅将%0扩充到一个驱动器号和路径
%~nx0 -仅将%0扩充到一个文件名和扩展名
%~fs0 -仅将%0扩充到一个带有短名的完整路径名
%~dp$PATH:0 -查找列在路径环境变量的目录,并将%I扩充

到找到的第一个驱动器号和路径。

%~ftza0 -将%0扩充到类似输出线路的DIR
%0为当前批处理文件

如果0换成1为第一个文件,2为第2个


%0代指批处理文件自身
%~d0是指批处理所在的盘符
%~dp0是盘符加路径
cd %~dp0就是进入批处理所在目录

内容来源:
http://tomhibolu.iteye.com/blog/1215863

CentOS 7 32bit 下载

没错,虽然RHEL7只有64位,但CentOS 7还编译了一份32位的版本,但不在通常的镜像站,只能从官方的altarch目录下载:

http://mirror.centos.org/altarch/7/isos/i386/

JavaScript获取函数参数列表

参考了网上别人写的代码,大致是这样的:

function getArgNames(fn) {
    if (typeof(fn)==='function') {
        return fn.toString().match(/function\s*\w+\(\s*([^)]*)\)/)[1].replace(/\/\*.*?\*\/|\/\/[^\r\n]*(?:[\r\n]+|$)|\s+$/g,'').split(/\s*,\s*/);
    }
}

主要思路是调用Function.prototype.toString()获取函数的定义字符串,然后提取其中的参数列表,去除其中的注释和多余的空白,最后将他们按逗号分隔到数组里。