自定义梅林固件Dnsmasq

360这个孙子东西,真的太烦了。。

家里的大人又搞不懂,总是莫名其叫的装上这些恶心的软件!

那么就从源头来干掉这烦人的东西吧!!

调整路由器配置

  1. 系统管理 -> 系统设置
  2. 启用 Enable JFFS custom scripts and configs 选项
  3. 启用 启用 SSH 选项
  4. 前往 智能网络卫士 -> DNS Filtering
  5. 禁用 Enable DNS-based Filtering

调整DHCP服务器配置

  1. 内部网络(LAN) -> DHCP 服务器
  2. 设置 DNS Server 1 为你路由器的地址
  3. 如果 Advertise router's IP in addition to user-specified DNS 启用,所有自定义的DNS地址将附加到客户端租用地址时给予的地址列表中。因此,如果你希望能够解析名称而不指定路由器地址作为名称服务器来执行,请关闭此设置。
  4. 关闭 Forward local domain queries to upstream DNS 以防止您的私人DNS解析请求传递到Inertnet。

编辑dnsmasq配置选项

连接到您的路由器

# 为dnsmasq创建配置文件
touch /jffs/configs/dnsmasq.conf.add

# 编辑配置文件
vi /jffs/configs/dnsmasq.conf.add

# 写入如下内容
address=/.360.cn/127.0.0.1

最后一步

# 重启dnsmasq
service restart_dnsmasq

写在最后

梅林WIKI:https://github.com/RMerl/asuswrt-merlin/wiki

find / -name dnsmasq.conf*

Win10 Hyper-V Centos7 网络配置

创建虚拟网络

Hyper-V的网络支持三种不同的模式,这里选用外部模式,这样可以得到一个独立的IP分配。

创建外部虚拟网卡

配置网络

为配置文件增加HWADDR(mac地址),并将ONBOOT设置为yes。

# 查看网卡mac地址
ip link

# 编辑配置
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE="Ethernet"
HWADDR=00:15:5d:c7:96:02
BROWSER_ONLY="no"
BOOTPROTO="dhcp"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="eth0"
UUID="becabf8b-fc8d-40ea-a3b9-0cecfbb4a9b7"
DEVICE="eth0"
ONBOOT="yes"

重启网络服务

systemctl restart network
systemctl status network

yum pip npm

Centos yum 加速

# 备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

# Centos 6
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

# Centos 7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

# 生成缓存
yum makecache

pip加速

  • windows建立 %HOMEPATH%\pip\pip.ini 文件,写入如下内容;
  • Linux 建立 ~/.pip/pip.conf 文件,写入如下内容;
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
trusted-host=mirrors.aliyun.com

[list]
format=columns

pip常用命令

yum -y install python-pip python-wheel
pip list --format=columns

# 升级
pip install -U pip setuptools
# 如果安装的是for all user的话需要使用如下参数升级,否则可能报错
pip install -U pip setuptools --user
# 若升级后pip报错,可以使用如下命令试试
easy_install pip

pip search [module]
pip install [module]

# 创建虚拟环境
python3 -m venv /path/to/new/virtual/environment
python3 -m venv c:\path\to\myenv

npm加速

# 临时使用
npm --registry https://registry.npm.taobao.org install express

# 持久使用
npm config set registry https://registry.npm.taobao.org

# 配置后可通过下面方式来验证是否成功
npm config get registry
# 或
npm info express

WordPress 备份迁移记录

备份

使用之前写的脚本 VPS数据库及文件备份脚本

使用scp将文件拷贝到其他主机(密钥登陆的方式)

chmod 600 id_rsa
scp -i id_rsa -r backup/ root@10.0.0.100:/root/backup

文件恢复

文件恢复就不写了,放回原来的地方就可以了。

数据恢复

# 创建数据库
mysqladmin -uroot -p create DBName

#恢复数据
mysql -uroot -p DBName < DBName.sql

Shell Command

# 连接数据库
mysql -h localhost -uroot -p

# 创建数据库
create database [databasename];

# 更改用户密码(命令行)
mysqladmin -u username -h hostname -p password 'new-password'

# 备份单个库
mysqldump -u username -ppassword --databases databasename > /tmp/databasename.sql

# 备份所有
mysqldump -u root -ppassword --opt >/tmp/alldatabases.sql

# 备份表
mysqldump -c -u username -ppassword databasename tablename > /tmp/databasename.tablename.sql

# 恢复备份数据
mysql -u username -ppassword databasename < /tmp/databasename.sql

Mysql Command

-- 显示库
show databases;

-- 切换库
use [db name];

-- 显示表
show tables;

-- 显示表结构
describe [table name];
show columns from [table name];

-- 删除表
drop table [table name];

-- 显示表数据
SELECT * FROM [table name];

-- 创建一个新用户
use mysql;
INSERT INTO user (Host,User,Password) VALUES('%','username',PASSWORD('password'));
flush privileges;

-- 更改用户密码
SET PASSWORD FOR 'user'@'hostname' = PASSWORD('passwordhere');
flush privileges;

wordpress 发布更新文章实时提交到百度站长平台

现在这样的插件不少,但是都大同小异,你抄袭我,我再抄袭他!

所以就打算自己来整一下!代码基于wordpress自带的WP_Http,实现了新发布文章和更新文章的功能,同时使用wordpress内置的消息提示!

复制如下代码,替换成自己的token。

token可以在这里找到:https://ziyuan.baidu.com/linksubmit/index

function post_handle( $url, $types ){
	$WEB_TOKEN = 'token'; //这里请换成你的网站的百度主动推送的token值
	$WEB_DOMAIN = get_option('home');
	$api = 'http://data.zz.baidu.com/urls?site='.$WEB_DOMAIN.'&token='.$WEB_TOKEN;

	if ($types == 'update') {
		$api = 'http://data.zz.baidu.com/update?site='.$WEB_DOMAIN.'&token='.$WEB_TOKEN;
	}

	$request = new WP_Http;
	$result = $request->request( $api , array( 'method' => 'POST', 'body' => $url , 'headers' => 'Content-Type: text/plain') );
	$result = json_decode($result['body'] , true);
	if (array_key_exists('success' , $result )) {
		set_transient('has_post_submitBaidu' , 'yes' );
	}elseif ($types == 'update' && array_key_exists('success' , $result )) {
		set_transient('has_post_updateBaidu' , 'yes' );
	}
}

// submit to Baidu
if(!function_exists('Baidu_Submit')){
	add_action('publish_post', 'Baidu_Submit', 0);
	function Baidu_Submit($post_ID) {
		$url = get_permalink($post_ID);
		post_handle( $url, 'submit');
	}
}

// update to Baidu
if (!function_exists('Baidu_Update')) {
	add_action('post_updated', 'Baidu_Update',0);
	function Baidu_Update($post_ID)	{
		$url = get_permalink($post_ID);
		post_handle( $url, 'update');
	}
}

// 显示提交到百度的消息
add_action('admin_notices', 'submit_admin_notice');
function submit_admin_notice(){
	$class = 'notice notice-success is-dismissible';
	$newmessage = __('成功提交到百度站长平台.');
	$updatemessage = __('成功更新到百度站长平台.');

	if ( get_transient( 'has_post_submitBaidu' ) == 'yes' ) {
		printf('<div class="%1$s"><p>%2$s</p></div>', esc_attr( $class ), esc_html( $newmessage ));
		delete_transient( 'has_post_submitBaidu' );
	}elseif (get_transient( 'has_post_updateBaidu' ) == 'yes') {
		printf('<div class="%1$s"><p>%2$s</p></div>', esc_attr( $class ), esc_html( $updatemessage ));
		delete_transient( 'has_post_updateBaidu' );
	}
}

WordPress 打造自己的代码高亮

代码高亮对于程序员写博客来说,还是非常有必要的,毕竟你写个文章贴个代码看起来乱七八糟,也不好看!

博客写了好多年了,贴的代码也不少,之前一直使用的插件,总感觉有点过重了,为了一个代码高亮引入了太多JS、CSS。

所以就打算自己打造一个,这个是基于 highlight.js 来打造的!其中使用了一个滚动条的美化JS jquery.mCustomScrollbar.min.js

引入需要文件

将文件引入主题的 functions.php

// functions.php
function register_scripts() {
	wp_register_script('highlight', get_template_directory_uri(). '/extend/highlight.min.js', array('jquery'), '9.12.0', true);
	wp_register_script('mousewheel', get_template_directory_uri(). '/extend/jquery.mousewheel.min.js', array('jquery'), '3.1.13', true);
	wp_register_script('mCustomScrollbar', get_template_directory_uri(). '/extend/jquery.mCustomScrollbar.min.js', array('jquery','mousewheel'), '3.1.5', true);
	wp_register_script('extend', get_template_directory_uri(). '/extend/custom.js', array('jquery','highlight'), '1.0', true);
}
add_action('init','register_scripts');

function register_styles() {
	wp_register_style('highlight', get_template_directory_uri(). '/extend/highlight.css', null, '9.12.0', 'all');
	wp_register_style('mCustomScrollbar', get_template_directory_uri(). '/extend/jquery.mCustomScrollbar.min.css', null, '3.1.5', 'all');
	wp_register_style('extend', get_template_directory_uri(). '/extend/custom.css', null, '1.0', 'all');
}
add_action('init',register_styles);

function load_scripts() {
	wp_enqueue_script('highlight');
	wp_enqueue_script('mousewheel');
	wp_enqueue_script('mCustomScrollbar');
	wp_enqueue_script('extend');
}
add_action( 'the_post', 'load_scripts');

function load_styles() {
	wp_enqueue_style('highlight');
	wp_enqueue_style('extend');
	wp_enqueue_style('mCustomScrollbar');
}
add_action( 'the_post', 'load_styles' );

注册按钮

// functions.php
add_action('admin_head', 'highlight_code_plugin');
function highlight_code_plugin() {

	global $typenow;

	// 判断用户是否有编辑文章和页面的权限
	if ( ! current_user_can('edit_posts') && ! current_user_can('edit_pages') ) {
		return;
	}

	if (! in_array($typenow, array('post','page'))) {
		return;
	}

	//判断用户是否使用可视化编辑器     
	if ( get_user_option('rich_editing') == 'true' ) {
		add_filter( 'mce_external_plugins', 'add_plugin' );
		add_filter( 'mce_buttons', 'register_button' );
	}
}

// 注册按钮
function register_button($buttons) {
	array_push($buttons, 'highlight_code');
	return $buttons;
}

// 注册TinyMCE按钮插件
function add_plugin($plugin_array) {
	$plugin_array['highlight_code'] = get_template_directory_uri() . '/extend/mce_code_plugin.js';
	return $plugin_array;
}

添加tinyMCE编辑按钮功能

// mce_code_plugin.js
(function($) {
	tinymce.PluginManager.add('highlight_code', function(editor, url) {
		editor.addButton('highlight_code', {
			// text: 'Code',
			// icon: false,
			title: 'Highlight Code',
			icon: 'wp_code',
			onclick: function() {
				// Examlpes: https://www.tinymce.com/docs/api/tinymce/tinymce.windowmanager/
				editor.windowManager.open({
					width: 780,
					height: 650,
					title: 'Insert Code',
					body: [{
						type: 'listbox',
						name: 'code_type',
						label: 'Code Type',
						'values': [{
							text: 'Java',
							value: 'java'
						}, {
							text: 'Python',
							value: 'python'
						}, {
							text: 'Bash',
							value: 'bash'
						}, {
							text: 'Shell',
							value: 'shell'
						}, {
							text: 'Php',
							value: 'php'
						}, {
							text: 'Sql',
							value: 'sql'
						}, {
							text: 'JavaScript',
							value: 'javascript'
						}, {
							text: 'Json',
							value: 'json'
						}, {
							text: 'Xml',
							value: 'xml'
						}, {
							text: 'Css',
							value: 'css'
						}, {
							text: 'Diff',
							value: 'diff'
						}]
					}, {
						type: 'textbox',
						name: 'body',
						multiline: true,
						minWidth: 650,
						minHeight: 580
						// label: 'Body'
					}],
					onsubmit: function(e) {
						// Insert content when the window form is submitted
						// Examlpes:
						// tinyMCE.editors[0].insertContent('asdasd')

						// https://www.tinymce.com/docs/api/tinymce.html/tinymce.html.entities/#encoderaw
						// tinymce.html.Entities.encodeRaw(e.data.body) 格式化html标签
						editor.insertContent('<pre class="' + e.data.code_type + '"><code>' + tinymce.html.Entities.encodeRaw(e.data.body) + '</code></pre>');
					}
				});
			}
		});

		return {
			getMetadata: function() {
				return {
					title: "Highlight Code plugin",
					url: "https://jalena.bcsytv.com"
				};
			}
		};

	})
})(jQuery);

添加hljs初始化

// custom.js
jQuery(document).ready(function($) {

	$('pre code').each(function(i, block) {
		hljs.highlightBlock(block);
	});

	$(".hljs").mCustomScrollbar({
		theme: "light-thin",
		axis: "x",
		autoHideScrollbar: true,
		mouseWheel: {
			axis: "y",
			enable: false
		}
	});
});

到此就完成了。附上一个图片最终的样子吧!