月份:2018年6月

Yum 实现 PHP 5.4 升级 PHP5.6

很多 CentOS 操作系统 Yum 源的PHP 版本都是5.6以下的,而很多开源的软件又需要5.6或者更高,这个时候为了方便,我们最简单的办法就是通过 Yum 源进行 PHP 的升级。
01、执行下面的命令升级软件仓库

rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

02、执行下面的命令删除 PHP(卸载的时候关注下卸载了哪些包)

yum remove php-common

03、安装 PHP 5.6版本(php56w-devel这个不是必需的)(可以使用yum search php56w查看下缺失了那些依赖包)

yum install -y php56w php56w-opcache php56w-xml php56w-mcrypt php56w-gd php56w-devel php56w-mysql php56w-intl php56w-mbstring php56w-fpm

04、重启httpd

service httpd restart

05、查看最新的版本

php -v

至此,升级完成!
参考链接【kismile


通过 Chroot 限制用户在指定目录

我们将test用户锁定在/data/chroot/test下,test登陆后只能使用ssh、ls等基本命令
一、创建用户
1.创建test用户(不创建其缺省家目录)

useradd -M test
passwd test

2.建立chroot目录中用户主目录

mkdir -p /var/chroot/home/test
chown -R test.test /data/chroot/test
chmod 700 /data/chroot/test

二、搭建基本的chroot环境

mkdir -p /data/chroot
cd /data/chroot/
mkdir -p dev/
cd dev/
mknod -m 666 null c 1 3
mknod -m 666 tty c 5 0
mknod -m 666 zero c 1 5
mknod -m 666 random c 1 8
mknod -m 666 urandom c 1 9

cd /data/chroot/
mkdir -p bin
cp -v /bin/bash bin/
ldd /bin/bash
mkdir -p lib64
cp -v /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} lib64/

#并删除用户自己和root以外的所有帐号。如果没有这两个文件,用登录以后会报“I have no name!”
cd /data/chroot/
mkdir etc
cp -vf /etc/{passwd,group} etc/

#修改/var/chroot及其子目录的属主,并修改权限
chown -R root.root /data/chroot
chmod -R 755 /data/chroot

三、配置ssh

vim /etc/ssh/sshd_config
#在最后添加如下行,否则会报错
Match User test
ChrootDirectory /data/chroot

#重启ssh
service sshd restart

四、拷贝基础命令

ldd /bin/ls | awk '{ print $3 }' | grep "/lib" | sort | uniq
/lib64/libacl.so.1
/lib64/libattr.so.1
/lib64/libcap.so.2
/lib64/libc.so.6
/lib64/libdl.so.2
/lib64/libpthread.so.0
/lib64/librt.so.1
/lib64/libselinux.so.1
ldd /usr/bin/ssh | awk '{ print $3 }' | grep "/lib" | sort | uniq
/lib64/libcom_err.so.2
/lib64/libcrypt.so.1
/lib64/libc.so.6
/lib64/libdl.so.2
/lib64/libfipscheck.so.1
/lib64/libfreebl3.so
/lib64/libgssapi_krb5.so.2
/lib64/libk5crypto.so.3
/lib64/libkeyutils.so.1
/lib64/libkrb5.so.3
/lib64/libkrb5support.so.0
/lib64/libnsl.so.1
/lib64/libnspr4.so
/lib64/libplc4.so
/lib64/libplds4.so
/lib64/libpthread.so.0
/lib64/libresolv.so.2
/lib64/librt.so.1
/lib64/libselinux.so.1
/lib64/libutil.so.1
/lib64/libz.so.1
/usr/lib64/libcrypto.so.10
/usr/lib64/libnss3.so
/usr/lib64/libnssutil3.so
#!/bin/bash
#comment:用于ssh登陆chroot后,给用户添加命令
 # 要允许执行的文件列表
 cmdlist="/bin/bash /bin/ls /bin/cp /bin/mkdir /bin/mv /bin/rm /bin/rmdir /usr/bin/ssh /usr/bin/id"
 # chroot路径
 chroot_path="/var/chroot"
 # 判断依赖的库文件
 lib_1=`ldd $cmdlist | awk '{ print $1 }' | grep "/lib" | sort | uniq`
 lib_2=`ldd $cmdlist | awk '{ print $3 }' | grep "/lib" | sort | uniq`
 # 复制命令文件
 for i in $cmdlist
 do
   if [ ! -d `dirname ${chroot_path}$i` ];then
        mkdir -p `dirname ${chroot_path}$i`
   fi
   cp -a $i ${chroot_path}$i && echo "$i done"
 done
 # 复制依赖的库文件(因为是i386,所以是lib,如果是x86_64,则是lib64,)
 for j in $lib_1
 do
   if [ ! -d `dirname ${chroot_path}$j` ];then
        mkdir -p `dirname ${chroot_path}$j`
   fi
   cp -f $j ${chroot_path}$j && echo "$j done"
 done

 for k in $lib_2
 do
   if [ ! -d `dirname ${chroot_path}$k` ];then
        mkdir -p `dirname ${chroot_path}$k`
   fi
   cp -f $k ${chroot_path}$k && echo "$k done"
 done

到此完成配置,可以锁定用户目录,在测试中如果遇到【 Write failed: Broken pipe 】等问题,多看日志【 /var/log/secure 】

参考连接:【yanggd1987的专栏科技小咖


Linux 免密登陆

01、在本机命令行终端输入ssh-keygen -t rsa -b 4096 -C 'test'
02、系统提示Enter file in which to save the key,此处回车即可,如果之前创建过,此时会提示是否覆盖,请根据实际情况选择
03、系统提示Enter passphrase,此处提示输入密码,可以不输入
04、重复输密码
05、进入.ssh 目录,可以看到如下文件
authorized_keys:存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥
id_rsa : 生成的私钥文件
id_rsa.pub : 生成的公钥文件
know_hosts : 已知的主机公钥清单
06、将.pub 文件内容复制到希望免密登陆的服务器相应用户的.ssh 目录下
07、此时完成免密登陆配置

PS:有的时候,配置好了 SSH 时还是会提示权限禁止,此时请在免密登陆服务器检查如下内容
1) .ssh目录的权限必须是700
2) .ssh/authorized_keys文件权限必须是600


小程序 滑动方式(横向、竖向)实例代码

竖向滑动:

<scroll-view scroll-y="true" style="height: 200rpx;">
<view style="background: red; width: 200px; height: 100px; display: inline-block" ></view>
<view style="background: green; width: 200px; height: 100px; display: inline-block"></view>
<view style="background: blue; width: 200px; height: 100px; display: inline-block"></view>
<view style="background: yellow; width: 200px; height: 100px; display: inline-block"></view>
</scroll-view>

水平滚动:

<scroll-view scroll-x="true" style=" white-space: nowrap; display: flex" >
<view style="background: red; width: 200px; height: 100px; display: inline-block" ></view>
<view style="background: green; width: 200px; height: 100px; display: inline-block"></view>
<view style="background: blue; width: 200px; height: 100px; display: inline-block"></view>
<view style="background: yellow; width: 200px; height: 100px; display: inline-block"></view>
</scroll-view>

参考链接【脚本之家


小程序 view 左右滑动,切换 page

微信小程序开发中很多用户操作都会借鉴原生APP,众所周知原生APP中滑动切换页面,对于用户体验很好,那么使用微信小程序能不能实现呢?答案是肯定的。
首先来说说实现思路:利用touchstart、touchend事件获取用户手指滑动距离,同时监听滑动所需时间,当所需时间在一定范围内,且滑动距离够长,则算为一次成功的滑动,接下来就执行页面跳转方法。
直接上代码:

<!--index.wxml-->
<view class="class_first" bindtouchstart="touchStart" bindtouchend="touchEnd">
  滑动切换页面
</view>
//index.js
var time = 0;
var touchDot = 0;//触摸时的原点
var interval = "";
var flag_hd = true;

Page({
  onLoad: function () {
    var that = this
  },
  onShow: function(){
    flag_hd = true;    //重新进入页面之后,可以再次执行滑动切换页面代码
    clearInterval(interval); // 清除setInterval
    time = 0;
  },
  // 触摸开始事件
  touchStart: function (e) {
    touchDot = e.touches[0].pageX; // 获取触摸时的原点
    // 使用js计时器记录时间    
    interval = setInterval(function () {
      time++;
    }, 100);
  },
  // 触摸结束事件
  touchEnd: function (e) {
    var touchMove = e.changedTouches[0].pageX;
    // 向左滑动   
    if (touchMove - touchDot <= -40 && time < 10 && flag_hd == true) {
      flag_hd = false;
      //执行切换页面的方法
      console.log("向右滑动");
      wx.navigateTo({
        url: '../right/right'
      })
    }
    // 向右滑动   
    if (touchMove - touchDot >= 40 && time < 10 && flag_hd == true) {
      flag_hd = false;
      //执行切换页面的方法
      console.log("向左滑动");
      wx.navigateTo({
        url: '../left/left'
      })
    }
    clearInterval(interval); // 清除setInterval
    time = 0;
  }
})

PS:本人觉得这个控制的还不是很舒服,有待精进。
参考链接【句_号的博客


国家二字代码

Countries and Regions 国家或地区 国际域名缩写 电话代码 时差
Angola 安哥拉 AO 244 -7
Afghanistan 阿富汗 AF 93 0
Albania 阿尔巴尼亚 AL 355 -7
Algeria 阿尔及利亚 DZ 213 -8
Andorra 安道尔共和国 AD 376 -8
Anguilla 安圭拉岛 AI 1264 -12
Antigua and
Barbuda
安提瓜和巴布达 AG 1268 -12
Argentina 阿根廷 AR 54 -11
Armenia 亚美尼亚 AM 374 -6
Ascension 阿森松   247 -8
Australia 澳大利亚 AU 61 +2
Austria 奥地利 AT 43 -7
Azerbaijan 阿塞拜疆 AZ 994 -5
Bahamas 巴哈马 BS 1242 -13
Bahrain 巴林 BH 973 -5
Bangladesh 孟加拉国 BD 880 -2
Barbados 巴巴多斯 BB 1246 -12
Belarus 白俄罗斯 BY 375 -6
Belgium 比利时 BE 32 -7
Belize 伯利兹 BZ 501 -14
Benin 贝宁 BJ 229 -7
Bermuda Is. 百慕大群岛 BM 1441 -12
Bolivia 玻利维亚 BO 591 -12
Botswana 博茨瓦纳 BW 267 -6
Brazil 巴西 BR 55 -11
Brunei 文莱 BN 673 0
Bulgaria 保加利亚 BG 359 -6
Burkina-faso 布基纳法索 BF 226 -8
Burma 缅甸 MM 95 -1.3
Burundi 布隆迪 BI 257 -6
Cameroon 喀麦隆 CM 237 -7
Canada 加拿大 CA 1 -13
Cayman Is. 开曼群岛   1345 -13
Central African Republic 中非共和国 CF 236 -7
Chad 乍得 TD 235 -7
Chile 智利 CL 56 -13
China 中国 CN 86 0
Colombia 哥伦比亚 CO 57 0
Congo 刚果 CG 242 -7
Cook Is. 库克群岛 CK 682 -18.3
Costa Rica 哥斯达黎加 CR 506 -14
Cuba 古巴 CU 53 -13
Cyprus 塞浦路斯 CY 357 -6
Czech Republic 捷克 CZ 420 -7
Denmark 丹麦 DK 45 -7
Djibouti 吉布提 DJ 253 -5
Dominica Rep. 多米尼加共和国 DO 1890 -13
Ecuador 厄瓜多尔 EC 593 -13
Egypt 埃及 EG 20 -6
EI Salvador 萨尔瓦多 SV 503 -14
Estonia 爱沙尼亚 EE 372 -5
Ethiopia 埃塞俄比亚 ET 251 -5
Fiji 斐济 FJ 679 +4
Finland 芬兰 FI 358 -6
France 法国 FR 33 -8
French Guiana 法属圭亚那 GF 594 -12
Gabon 加蓬 GA 241 -7
Gambia 冈比亚 GM 220 -8
Georgia 格鲁吉亚 GE 995 0
Germany 德国 DE 49 -7
Ghana 加纳 GH 233 -8
Gibraltar 直布罗陀 GI 350 -8
Greece 希腊 GR 30 -6
Grenada 格林纳达 GD 1809 -14
Guam 关岛 GU 1671 +2
Guatemala 危地马拉 GT 502 -14
Guinea 几内亚 GN 224 -8
Guyana 圭亚那 GY 592 -11
Haiti 海地 HT 509 -13
Honduras 洪都拉斯 HN 504 -14
Hongkong 香港 HK 852 0
Hungary 匈牙利 HU 36 -7
Iceland 冰岛 IS 354 -9
India 印度 IN 91 -2.3
Indonesia 印度尼西亚 ID 62 -0.3
Iran 伊朗 IR 98 -4.3
Iraq 伊拉克 IQ 964 -5
Ireland 爱尔兰 IE 353 -4.3
Israel 以色列 IL 972 -6
Italy 意大利 IT 39 -7
Ivory Coast 科特迪瓦   225 -6
Jamaica 牙买加 JM 1876 -12
Japan 日本 JP 81 +1
Jordan 约旦 JO 962 -6
Kampuchea (Cambodia ) 柬埔寨 KH 855 -1
Kazakstan 哈萨克斯坦 KZ 327 -5
Kenya 肯尼亚 KE 254 -5
Korea 韩国 KR 82 +1
Kuwait 科威特 KW 965 -5
Kyrgyzstan 吉尔吉斯坦 KG 331 -5
Laos 老挝 LA 856 -1
Latvia 拉脱维亚 LV 371 -5
Lebanon 黎巴嫩 LB 961 -6
Lesotho 莱索托 LS 266 -6
Liberia 利比里亚 LR 231 -8
Libya 利比亚 LY 218 -6
Liechtenstein 列支敦士登 LI 423 -7
Lithuania 立陶宛 LT 370 -5
Luxembourg 卢森堡 LU 352 -7
Macao 澳门 MO 853 0
Madagascar 马达加斯加 MG 261 -5
Malawi 马拉维 MW 265 -6
Malaysia 马来西亚 MY 60 -0.5
Maldives 马尔代夫 MV 960 -7
Mali 马里 ML 223 -8
Malta 马耳他 MT 356 -7
Mariana Is 马里亚那群岛   1670 +1
Martinique 马提尼克   596 -12
Mauritius 毛里求斯 MU 230 -4
Mexico 墨西哥 MX 52 -15
Moldova, Republic of 摩尔多瓦 MD 373 -5
Monaco 摩纳哥 MC 377 -7
Mongolia 蒙古 MN 976 0
Montserrat Is 蒙特塞拉特岛 MS 1664 -12
Morocco 摩洛哥 MA 212 -6
Mozambique 莫桑比克 MZ 258 -6
Namibia 纳米比亚 NA 264 -7
Nauru 瑙鲁 NR 674 +4
Nepal 尼泊尔 NP 977 -2.3
Netheriands
Antilles
荷属安的列斯   599 -12
Netherlands 荷兰 NL 31 -7
New Zealand 新西兰 NZ 64 +4
Nicaragua 尼加拉瓜 NI 505 -14
Niger 尼日尔 NE 227 -8
Nigeria 尼日利亚 NG 234 -7
North Korea 朝鲜 KP 850 +1
Norway 挪威 NO 47 -7
Oman 阿曼 OM 968 -4
Pakistan 巴基斯坦 PK 92 -2.3
Panama 巴拿马 PA 507 -13
Papua New
Cuinea
巴布亚新几内亚 PG 675 +2
Paraguay 巴拉圭 PY 595 -12
Peru 秘鲁 PE 51 -13
Philippines 菲律宾 PH 63 0
Poland 波兰 PL 48 -7
French
Polynesia
法属玻利尼西亚 PF 689 +3
Portugal 葡萄牙 PT 351 -8
Puerto Rico 波多黎各 PR 1787 -12
Qatar 卡塔尔 QA 974 -5
Reunion 留尼旺   262 -4
Romania 罗马尼亚 RO 40 -6
Russia 俄罗斯 RU 7 -5
Saint Lueia 圣卢西亚 LC 1758 -12
Saint Vincent 圣文森特岛 VC 1784 -12
Samoa Eastern 东萨摩亚(美)   684 -19
Samoa Western 西萨摩亚   685 -19
San Marino 圣马力诺 SM 378 -7
Sao Tome and
Principe
圣多美和普林西比 ST 239 -8
Saudi Arabia 沙特阿拉伯 SA 966 -5
Senegal 塞内加尔 SN 221 -8
Seychelles 塞舌尔 SC 248 -4
Sierra Leone 塞拉利昂 SL 232 -8
Singapore 新加坡 SG 65 +0.3
Slovakia 斯洛伐克 SK 421 -7
Slovenia 斯洛文尼亚 SI 386 -7
Solomon
Is
所罗门群岛 SB 677 +3
Somali 索马里 SO 252 -5
South Africa 南非 ZA 27 -6
Spain 西班牙 ES 34 -8
Sri Lanka 斯里兰卡 LK 94 0
St.Lucia 圣卢西亚 LC 1758 -12
St.Vincent 圣文森特 VC 1784 -12
Sudan 苏丹 SD 249 -6
Suriname 苏里南 SR 597 -11.3
Swaziland 斯威士兰 SZ 268 -6
Sweden 瑞典 SE 46 -7
Switzerland 瑞士 CH 41 -7
Syria 叙利亚 SY 963 -6
Taiwan 台湾省 TW 886 0
Tajikstan 塔吉克斯坦 TJ 992 -5
Tanzania 坦桑尼亚 TZ 255 -5
Thailand 泰国 TH 66 -1
Togo 多哥 TG 228 -8
Tonga 汤加 TO 676 +4
Trinidad and
Tobago
特立尼达和多巴哥 TT 1809 -12
Tunisia 突尼斯 TN 216 -7
Turkey 土耳其 TR 90 -6
Turkmenistan 土库曼斯坦 TM 993 -5
Uganda 乌干达 UG 256 -5
Ukraine 乌克兰 UA 380 -5
United Arab
Emirates
阿拉伯联合酋长国 AE 971 -4
United
Kiongdom
英国 GB 44 -8
United States of
America
美国 US 1 -13
Uruguay 乌拉圭 UY 598 -10.3
Uzbekistan 乌兹别克斯坦 UZ 233 -5
Venezuela 委内瑞拉 VE 58 -12.3
Vietnam 越南 VN 84 -1
Yemen 也门 YE 967 -5
Yugoslavia 南斯拉夫 YU 381 -7
Zimbabwe 津巴布韦 ZW 263 -6
Zaire 扎伊尔 ZR 243 -7
Zambia 赞比亚 ZM 260 -6


OSX 安装APP Store 以外应用

MAC OSX(10.12.6)以后版本的【安全性与隐私】中 APP Store 【任何来源】突然不见了。
如果有些应用不能安装,提示【移动到废纸篓】,可以打开终端输入:

sudo spctl --master-disable

按提示输入用户密码后回车。
这时再去看这个选项就出现并选择了。
PS:我试验了下,在终端输入

sudo spctl --master-enable

还可以隐去它


mysql中utf8和utf8mb4的区别

一、简介
MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。
二、内容描述
既然utf8应付日常使用完全没有问题,那为什么还要使用utf8mb4呢? 低版本的MySQL支持的utf8编码,最大字符长度为 3 字节,如果遇到 4 字节的字符就会出现错误了。三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xFFFF,也就是 Unicode 中的基本多文平面(BMP)。也就是说,任何不在基本多文平面的 Unicode字符,都无法使用MySQL原有的 utf8 字符集存储。这些不在BMP中的字符包括哪些呢?最常见的就是Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),和一些不常用的汉字,以及任何新增的 Unicode 字符等等。
三、问题根源
理论上将, UTF-8 格式使用一至六个字节,最大能编码 31 位字符。最新的 UTF-8 规范只使用一到四个字节,最大能编码21位,正好能够表示所有的 17个 Unicode 平面。关于UTF编码,请阅读《常见编码总结》一文。
而utf8 则是 Mysql 早期版本中支持的一种字符集,只支持最长三个字节的 UTF-8字符,也就是 Unicode 中的基本多文本平面。这可能是因为在MySQL发布初期,基本多文种平面之外的字符确实很少用到。而在MySQL5.5.3版本后,要在 Mysql 中保存 4 字节长度的 UTF-8 字符,就可以使用 utf8mb4 字符集了。例如可以用utf8mb4字符编码直接存储emoj表情,而不是存表情的替换字符。

文章加工自【OurMySQL小谢的小站


Git避免每次push都需要输入passphrase for key

在 OSX 中,可以以使用 ssh-add -K ~/.ssh/id_rsa 实现

参考 github 的帮助

Adding your SSH key to the ssh-agent
Before adding a new SSH key to the ssh-agent to manage your keys, you should have checked for existing SSH keys and generated a new SSH key.When adding your SSH key to the agent, use the default macOS ssh-add command, and not an application installed by homebrew, or some other external source.
1.Start the ssh-agent in the background.
2.If you’re using macOS Sierra 10.12.2 or later, you will need to modify your ~/.ssh/config file to automatically load keys into the ssh-agent and store passphrases in your keychain.
3.Add your SSH private key to the ssh-agent and store your passphrase in the keychain. If you created your key with a different name, or if you are adding an existing key that has a different name, replace id_rsa in the command with the name of your private key file.
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_rsa

Note: The -K option is Apple’s standard version of ssh-add, which stores the passphrase in your keychain for you when you add an ssh key to the ssh-agent.
If you don’t have Apple’s standard version installed, you may receive an error. For more information on resolving this error, see “Error: ssh-add: illegal option — K.”
4.Add the SSH key to your GitHub account.


git 的 pull 和 fetch

使用git 直接提交的话 直接 push
在 git 中,想获取最新版本有两种方式 pull 、 fetch
查看帮助
git pull 从远程拉取最新版本到本地 自动合并 merge
git fetch 从远程获取最新版本到本地 不会自动合并 merge
从实现原理来看使用 git fetch 会更安全 因为在merge之前可以了解到更新情况,然后再决定是否合并