如下所示,文件hello.txt中有5行数据,要将这5行数据在一行中显示出来,并用空格分隔。
jie$ cat hello.txt
1
2
3
4
5
从下方法均可实现:
方法1.
$ echo `cat hello.txt`
1 2 3 4 5
cat hello.txt | xargs
1 2 3 4 5
$a=$(cat hello.txt)
cat "$a"
1
2
3
4
5
原文:https://blog.csdn.net/guoyajie1990/article/details/73692526
jie$ cat hello.txt
1
2
3
4
5
从下方法均可实现:
方法1.
$ echo `cat hello.txt`
1 2 3 4 5
cat hello.txt | xargs
1 2 3 4 5
$a=$(cat hello.txt)
cat "$a"
1
2
3
4
5
原文:https://blog.csdn.net/guoyajie1990/article/details/73692526
[实践OK]AWK增加列分割符号,增加一列相同的值。
Unix/LinuxC技术 jackxiang 2019-4-17 16:36
一)AWK增加列分割符号:
| awk -v 'OFS=:' '{print $1,$1,$1}'
二)增加一列相同的值,如何用awk在每行最后添加字段:
awk '{print $0, 新字段}' 文件名
https://zhidao.baidu.com/question/2121603287620619987.html
| awk -v 'OFS=:' '{print $1,$1,$1}'
二)增加一列相同的值,如何用awk在每行最后添加字段:
awk '{print $0, 新字段}' 文件名
https://zhidao.baidu.com/question/2121603287620619987.html
ip_local_port_range: prefer different parity for start/end values.
Unix/LinuxC技术 jackxiang 2019-4-9 23:01
Linux increase ip_local_port_range TCP port range using sysctl.conf
Finally, edit /etc/sysctl.conf file, to make changes to /proc filesystem permanently i.e. append the following line to your /etc/sysctl.conf file:
# increase system IP port limits
net.ipv4.ip_local_port_range = 1024 65535
来自:https://www.cyberciti.biz/tips/linux-increase-outgoing-network-sockets-range.html
Finally, edit /etc/sysctl.conf file, to make changes to /proc filesystem permanently i.e. append the following line to your /etc/sysctl.conf file:
# increase system IP port limits
net.ipv4.ip_local_port_range = 1024 65535
来自:https://www.cyberciti.biz/tips/linux-increase-outgoing-network-sockets-range.html
[实践OK]linux下修改fstab的只读问题,linux下修改fstab后出现只读问题。
Unix/LinuxC技术 jackxiang 2019-4-9 22:12
今天自己已开始做在虚拟机上做实验,增加了一个磁盘sdb1,而且也增加了自动挂载的功能/etc/fstab里增加了记录。后来自己把这个磁盘给删除了,再次重新启动服务器的时候,系统启动不了了。
系统提示:
按提示 输入 root的密码,进入以Repair filesystem 为提示符的界面。
vi /etc/fstab后 提示,只读,也就是没权限修改。
解决方案如下:
于是输入 mount -o remount,rw /
逗号前面无空格(切记),而且一定要有/这个
表示重新挂载为读写模式。
这个时候再 vi /etc/fstab 发现已经可以修改了,修改完毕,重启,正常。
---------------------
原文:https://blog.csdn.net/waterxcfg304/article/details/49766467
系统提示:
按提示 输入 root的密码,进入以Repair filesystem 为提示符的界面。
vi /etc/fstab后 提示,只读,也就是没权限修改。
解决方案如下:
于是输入 mount -o remount,rw /
逗号前面无空格(切记),而且一定要有/这个
表示重新挂载为读写模式。
这个时候再 vi /etc/fstab 发现已经可以修改了,修改完毕,重启,正常。
---------------------
原文:https://blog.csdn.net/waterxcfg304/article/details/49766467
[转]【swoole4.0】一次qps提升之旅(一)
Swoole专题研究 jackxiang 2019-4-9 10:21
背景:PHP在跨版本升级时一些扩展没跟上,跨的步子不是小而是不够大,跟不上的问题只好swoole来帮其迈步大一些,但是毕竟相关配套还是没有来得及跟上,有观望的,有踟蹰不前的,有换Go的,总之,这个过程是艰难,王导的这篇文章就是一个对swoole的性能再次作优化的一个不错的分享,君子身非异也,善假于物也,说白了就是工具配套很重要的,希望周边的扩展能跟上,特转之。
源起
最近基于swoole的一个mvc开发框架做了一个项目,完成之后对其中一个接口例行做了一次压测,本机上得到qps是3600,由于接口功能比较简单,所以又花了点时间用beego和spring boot实现了相同的功能,也压测了一下,最终对比如下:
swoole: 3600qps
beego: 2200 qps
spring: 600qps
(ps: 无意比较优劣,应该是用beego和spring boot的姿势不对)
swoole的结果符合预期,后来经过一翻折腾(加了一些逻辑,完善了一些底层框架代码),再一压这个接口,qps下降到了2300
真是一顿操作猛如虎,性能下降35%啊
优化
做为一个有追求的phper,这是不能忍的,必需找到原因并解决之,但光喊口号是不行的,必需有方法,一般我们会通过几种方式分析:
日志法:通过各种日志,查看耗时,找出相应的问题,但这种方法有几个缺点:
粒度太粗,不好控制
侵入性太强,需要人工打点
性能指标不够,只能分析出大致的耗时,但不能分区i/o, cpu时间乖
xdebug:是我认为目前最牛逼的性能分析工具,可以无侵入式的详细的记录完整的调用链,唯一的遗憾是与swoole不兼容
xhprof: facebook出口的一款性能分析工具,简单易用,问题是:后期不维护了,对现在的php版本以及swoole支持度都不好
第三方的apm工具: 不可控,也不如前面2位,对swoole支持也不好
除了打日志,好像在swoole下陷入的僵局了,一翻寻觅,发现了一个网站:https://tideways.com/,维护并持续更新xhprof,使之能支持php7,又一翻折腾,发现也支持在swoole下跑
安装 tideways_xhprof
github: https://github.com/shenzhe/php-xhprof-extension
clone代码到本地
执行:
phpize
./configure
make
make install
标准的安装过程,产生tideways_xhprof.so,加入到php.ini中
判断有没有安装成功:
php -m |grep xhprof
输出
tideways_xhprof, 表示安装成功
使用 tideways_xhprof
也比较简单
在onRequest回调最开始一行输入:
tideways_xhprof_enable(TIDEWAYS_XHPROF_FLAGS_MEMORY
| TIDEWAYS_XHPROF_FLAGS_CPU);
表示开启分析,
中间执行你的业务逻辑
在最后一行输入
file_put_contents(
'/tmp/xhprof/' . uniqid() . '.msg-api.xhprof',
serialize(tideways_xhprof_disable())
);
把分析的结果存入到文件中,以待分析
其中:
'/tmp/xhprof/' . uniqid() . '.msg-api.xhprof'
是最终分析文件的地址,可自行修改
然后执行你的接口,最后会在 /tmp/xhprof 文件夹下看到如下的文件:
这些文件记录的就是这个接口整体的分析数据
找出最新的文件,用vim打开一看:
肉眼肯定是没法看,这就需要借助可视化的工具了:
可视化 tideways_xhprof
由于输出的文件格式和之前的xhprof完全一样,所以我这边直接借助了原本xhprof提供的工具
github:https://github.com/phacility/xhprof
最终上面的分析文件可视化后如下:
https://mmbiz.qpic.cn/mmbiz_png/LHDiahSVnXhs4fa6cxh7fpapG6H17PNhg6IlUhPtFdfd2Owb70WRtt31Ecg4gRTJODxXgt4xjeSRtOqerNcVvoA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1
下一篇,将详细介绍如何安装xhprof可视化工具,以及我们要看什么指标,怎么通过这些指标来指导来做优化,并最终提升的程序的性能
查看原文,可获取我修改版的tideways_xhprof,增加了两个方法,以支持RINIT和RSHUTDOWN中做的一些事情:
tideways_xhprof_swoole_init();
tideways_xhprof_swoole_end();
这样可以更好的支持swoole, readme里有介绍使用方法
原文:https://mp.weixin.qq.com/s/uekLWuXz5i2OBDsnYhwShw
源起
最近基于swoole的一个mvc开发框架做了一个项目,完成之后对其中一个接口例行做了一次压测,本机上得到qps是3600,由于接口功能比较简单,所以又花了点时间用beego和spring boot实现了相同的功能,也压测了一下,最终对比如下:
swoole: 3600qps
beego: 2200 qps
spring: 600qps
(ps: 无意比较优劣,应该是用beego和spring boot的姿势不对)
swoole的结果符合预期,后来经过一翻折腾(加了一些逻辑,完善了一些底层框架代码),再一压这个接口,qps下降到了2300
真是一顿操作猛如虎,性能下降35%啊
优化
做为一个有追求的phper,这是不能忍的,必需找到原因并解决之,但光喊口号是不行的,必需有方法,一般我们会通过几种方式分析:
日志法:通过各种日志,查看耗时,找出相应的问题,但这种方法有几个缺点:
粒度太粗,不好控制
侵入性太强,需要人工打点
性能指标不够,只能分析出大致的耗时,但不能分区i/o, cpu时间乖
xdebug:是我认为目前最牛逼的性能分析工具,可以无侵入式的详细的记录完整的调用链,唯一的遗憾是与swoole不兼容
xhprof: facebook出口的一款性能分析工具,简单易用,问题是:后期不维护了,对现在的php版本以及swoole支持度都不好
第三方的apm工具: 不可控,也不如前面2位,对swoole支持也不好
除了打日志,好像在swoole下陷入的僵局了,一翻寻觅,发现了一个网站:https://tideways.com/,维护并持续更新xhprof,使之能支持php7,又一翻折腾,发现也支持在swoole下跑
安装 tideways_xhprof
github: https://github.com/shenzhe/php-xhprof-extension
clone代码到本地
执行:
phpize
./configure
make
make install
标准的安装过程,产生tideways_xhprof.so,加入到php.ini中
判断有没有安装成功:
php -m |grep xhprof
输出
tideways_xhprof, 表示安装成功
使用 tideways_xhprof
也比较简单
在onRequest回调最开始一行输入:
tideways_xhprof_enable(TIDEWAYS_XHPROF_FLAGS_MEMORY
| TIDEWAYS_XHPROF_FLAGS_CPU);
表示开启分析,
中间执行你的业务逻辑
在最后一行输入
file_put_contents(
'/tmp/xhprof/' . uniqid() . '.msg-api.xhprof',
serialize(tideways_xhprof_disable())
);
把分析的结果存入到文件中,以待分析
其中:
'/tmp/xhprof/' . uniqid() . '.msg-api.xhprof'
是最终分析文件的地址,可自行修改
然后执行你的接口,最后会在 /tmp/xhprof 文件夹下看到如下的文件:
这些文件记录的就是这个接口整体的分析数据
找出最新的文件,用vim打开一看:
肉眼肯定是没法看,这就需要借助可视化的工具了:
可视化 tideways_xhprof
由于输出的文件格式和之前的xhprof完全一样,所以我这边直接借助了原本xhprof提供的工具
github:https://github.com/phacility/xhprof
最终上面的分析文件可视化后如下:
https://mmbiz.qpic.cn/mmbiz_png/LHDiahSVnXhs4fa6cxh7fpapG6H17PNhg6IlUhPtFdfd2Owb70WRtt31Ecg4gRTJODxXgt4xjeSRtOqerNcVvoA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1
下一篇,将详细介绍如何安装xhprof可视化工具,以及我们要看什么指标,怎么通过这些指标来指导来做优化,并最终提升的程序的性能
查看原文,可获取我修改版的tideways_xhprof,增加了两个方法,以支持RINIT和RSHUTDOWN中做的一些事情:
tideways_xhprof_swoole_init();
tideways_xhprof_swoole_end();
这样可以更好的支持swoole, readme里有介绍使用方法
原文:https://mp.weixin.qq.com/s/uekLWuXz5i2OBDsnYhwShw
[实践OK]PHP Curl Problem with the SSL CA cert (path? access rights?) 解决PHP Problem with the SSL CA cert (path? access rights?)
Php/Js/Shell/Go jackxiang 2019-4-8 17:43
背景:前些天安全说是OpenSSL在CentOS6.X里面有漏洞,于是乎,就更新了OpenSSL,没有想到会在PHP-FPM里调用譬如 七牛的SSL出现问题PHP Problem with the SSL CA cert (path? access rights?),说白了就是得重启一下php-fpm一下,其它的也还好,如果是Nginx出现这样的问题,处理办法一样。
关于这方面的知识有:
1)厉害了,一篇漫画终于让我看懂了HTTPS协议的学习笔记。图解ssl 图文https。: https://jackxiang.com/post/10110/
2)rpm -q --changelog openssl | grep CVE-2014-0160
- fix CVE-2014-0160 - information disclosure in TLS heartbeat extension 参考:
https://jackxiang.com/post/9882/
以下摘录自网络:
开发遇到问题,直接使用系统的curl命令正常,使用php的curl模块报错
错误:PHP Problem with the SSL CA cert (path? access rights?)
解决方法:
1.安装
yum reinstall openssl ca-certificates -y
2.重启php
来自:https://cloud.tencent.com/developer/article/1097683
===========================根本原因是没有没有重新启动PHP-FPM========================
问题背景:
早上起床收到短信提醒,WEB服务器集群发现漏洞,于是更新服务, 其中一条是: yum update openssl
问题现象:
1. 命令行直接使用系统的curl命令一切正常
2. LAMP环境中调用curl则报错: Curl Problem with the SSL CA cert (path? access rights?)
问题原因:
更新openssl后, 证书也跟着更新了, 但是apache容器【旧进程】无法正确读取到新的证书以及权限
解决方案:
1. yum reinstall openssl ca-certificates -y && service httpd restart
From:http://www.blogdaren.com/post-2357.html
关于这方面的知识有:
1)厉害了,一篇漫画终于让我看懂了HTTPS协议的学习笔记。图解ssl 图文https。: https://jackxiang.com/post/10110/
2)rpm -q --changelog openssl | grep CVE-2014-0160
- fix CVE-2014-0160 - information disclosure in TLS heartbeat extension 参考:
https://jackxiang.com/post/9882/
以下摘录自网络:
开发遇到问题,直接使用系统的curl命令正常,使用php的curl模块报错
错误:PHP Problem with the SSL CA cert (path? access rights?)
解决方法:
1.安装
yum reinstall openssl ca-certificates -y
2.重启php
来自:https://cloud.tencent.com/developer/article/1097683
===========================根本原因是没有没有重新启动PHP-FPM========================
问题背景:
早上起床收到短信提醒,WEB服务器集群发现漏洞,于是更新服务, 其中一条是: yum update openssl
问题现象:
1. 命令行直接使用系统的curl命令一切正常
2. LAMP环境中调用curl则报错: Curl Problem with the SSL CA cert (path? access rights?)
问题原因:
更新openssl后, 证书也跟着更新了, 但是apache容器【旧进程】无法正确读取到新的证书以及权限
解决方案:
1. yum reinstall openssl ca-certificates -y && service httpd restart
From:http://www.blogdaren.com/post-2357.html
[实践Ok]Linux内建命令和外部命令的判断以及帮助命令——pwd,以及这俩的性能对比。
Unix/LinuxC技术 jackxiang 2019-4-4 17:24
help [-s] [pattern]
显示关于内建命令的有用的信息。如果指定了 pattern (模式), help 给出关于所有匹配 pattern 的命令的详细帮助;否则所有内建命令的帮助和 shell
控制结构将被打印出来。 选项 -s 限制信息显示为简短的用法概要。 返回 0,除非没有匹配 pattern 的命令。
在shell中,通过awk,sed,expr 等都可以实现,字符串上述操作。下面我们进行性能比较。
[chengmo@localhost ~]$ test='c:/windows/boot.ini'
[chengmo@localhost ~]$ time for i in $(seq 10000);do a=${#test};done;
real 0m0.173s
user 0m0.139s
sys 0m0.004s
[chengmo@localhost ~]$ time for i in $(seq 10000);do a=$(expr length $test);done;
real 0m9.734s
user 0m1.628s
速度相差上百倍,调用外部命令处理,与内置操作符性能相差非常大。在shell编程中,尽量用内置操作符或者函数完成。使用awk,sed类似会出现这样结果。
time for i in $(seq 10000);do a=${#test};done;
real 0m0.751s
user 0m0.747s
sys 0m0.004s
time for i in $(seq 10000);do a=$(expr length $test);done;
real 0m13.291s
user 0m4.898s
sys 0m9.004s
$type echo
echo is a shell builtin
$type expr
expr is /usr/bin/expr
来自:http://www.cnblogs.com/chengmo/archive/2010/10/02/1841355.html
显示关于内建命令的有用的信息。如果指定了 pattern (模式), help 给出关于所有匹配 pattern 的命令的详细帮助;否则所有内建命令的帮助和 shell
控制结构将被打印出来。 选项 -s 限制信息显示为简短的用法概要。 返回 0,除非没有匹配 pattern 的命令。
在shell中,通过awk,sed,expr 等都可以实现,字符串上述操作。下面我们进行性能比较。
[chengmo@localhost ~]$ test='c:/windows/boot.ini'
[chengmo@localhost ~]$ time for i in $(seq 10000);do a=${#test};done;
real 0m0.173s
user 0m0.139s
sys 0m0.004s
[chengmo@localhost ~]$ time for i in $(seq 10000);do a=$(expr length $test);done;
real 0m9.734s
user 0m1.628s
速度相差上百倍,调用外部命令处理,与内置操作符性能相差非常大。在shell编程中,尽量用内置操作符或者函数完成。使用awk,sed类似会出现这样结果。
time for i in $(seq 10000);do a=${#test};done;
real 0m0.751s
user 0m0.747s
sys 0m0.004s
time for i in $(seq 10000);do a=$(expr length $test);done;
real 0m13.291s
user 0m4.898s
sys 0m9.004s
$type echo
echo is a shell builtin
$type expr
expr is /usr/bin/expr
来自:http://www.cnblogs.com/chengmo/archive/2010/10/02/1841355.html
[实践学习]Linux Shell 中各种括号的作用()、(())、[]、[[]]、{}
Unix/LinuxC技术 jackxiang 2019-4-4 15:37
#echo {{6379..6387},6389,6399}
6379 6380 6381 6382 6383 6384 6385 6386 6387 6389 6399
#for i in {{6379..6387},6389,6399}; do echo $i;
> done
6379
6380
6381
6382
6383
6384
6385
6386
6387
6389
6399
echo $(cd "$(dirname /tmp/error.txt)";pwd)
/tmp
array=(a b c d)
echo $array
a b c d
echo ${#array[@]}
4
a=5
((a++))
echo $a
6
b=3
((a=$a+$b))
echo $a #6+3=9
$for((i=0;i<5;i++))
> do
> echo $i;
> done
0
1
2
3
4
$echo $(seq -w 001 2 10)
001 003 005 007 009
换行:
echo "$(seq -w 001 2 10)"
001
003
005
007
009
$echo -e -n "$(seq -w 001 2 10)"
001
003
005
007
009
${var:num1:num2},num1是位置,num2是长度。表示从$var字符串的第$num1个位置开始提取长度为$num2的子串。不能为负数。
echo ${tag:2:2}
a5
tag=baa506fbd77d78ad3cfb912a50a4eac99c0d19c1
tag=${tag:0:8}
echo $tag
baa506fb
取字符串长度:
echo ${#tag}
8
# ls {ex1,ex2}.sh
ex1.sh ex2.sh
# ls {ex{1..3},ex4}.sh #{1...100} 中间仨个点 # echo {{1..3},9,20}
ex1.sh ex2.sh ex3.sh ex4.sh
# ls {ex[1-3],ex4}.sh #注意:是逗号
ex1.sh ex2.sh ex3.sh ex4.sh
echo $0
-bash
echo <FILE> $0=FILE
(1)${a} 变量a的值, 在不引起歧义的情况下可以省略大括号。
(2)$(cmd) 命令替换,和`cmd`效果相同,结果为shell命令cmd的输,过某些Shell版本不支持$()形式的命令替换, 如tcsh。
(3)$((expression)) 和`exprexpression`效果相同, 计算数学表达式exp的数值, 其中exp只要符合C语言的运算规则即可, 甚至三目运算符和逻辑表达式都可以计算。
阅读全文
6379 6380 6381 6382 6383 6384 6385 6386 6387 6389 6399
#for i in {{6379..6387},6389,6399}; do echo $i;
> done
6379
6380
6381
6382
6383
6384
6385
6386
6387
6389
6399
echo $(cd "$(dirname /tmp/error.txt)";pwd)
/tmp
array=(a b c d)
echo $array
a b c d
echo ${#array[@]}
4
a=5
((a++))
echo $a
6
b=3
((a=$a+$b))
echo $a #6+3=9
$for((i=0;i<5;i++))
> do
> echo $i;
> done
0
1
2
3
4
$echo $(seq -w 001 2 10)
001 003 005 007 009
换行:
echo "$(seq -w 001 2 10)"
001
003
005
007
009
$echo -e -n "$(seq -w 001 2 10)"
001
003
005
007
009
${var:num1:num2},num1是位置,num2是长度。表示从$var字符串的第$num1个位置开始提取长度为$num2的子串。不能为负数。
echo ${tag:2:2}
a5
tag=baa506fbd77d78ad3cfb912a50a4eac99c0d19c1
tag=${tag:0:8}
echo $tag
baa506fb
取字符串长度:
echo ${#tag}
8
# ls {ex1,ex2}.sh
ex1.sh ex2.sh
# ls {ex{1..3},ex4}.sh #{1...100} 中间仨个点 # echo {{1..3},9,20}
ex1.sh ex2.sh ex3.sh ex4.sh
# ls {ex[1-3],ex4}.sh #注意:是逗号
ex1.sh ex2.sh ex3.sh ex4.sh
echo $0
-bash
echo <FILE> $0=FILE
(1)${a} 变量a的值, 在不引起歧义的情况下可以省略大括号。
(2)$(cmd) 命令替换,和`cmd`效果相同,结果为shell命令cmd的输,过某些Shell版本不支持$()形式的命令替换, 如tcsh。
(3)$((expression)) 和`exprexpression`效果相同, 计算数学表达式exp的数值, 其中exp只要符合C语言的运算规则即可, 甚至三目运算符和逻辑表达式都可以计算。
阅读全文
[实践OK]Mac gitk安装与优化
Unix/LinuxC技术 jackxiang 2019-4-1 16:12
gitk --all
--all
Show all branches.
gitk --max-count=100 --all -- Makefile #查看Makefile 100条内容
Show at most 100 changes made to the file Makefile. Instead of only looking for changes in the current branch look in all branches.
实践:gitk --max-count=100 --all -- dns\ 运维手册.md
实践:
gitk --since="2 weeks ago" -- dns\ 运维手册.md #显示dns\ 运维手册.md两周内的改动
gitk v2.6.12.. include/scsi drivers/scsi #显示在自从版本v2.6.12后这两个子目录的改动
Show the changes since version v2.6.12 that changed any file in the include/scsi or drivers/scsi subdirectories
实践:
gitk 3667109.. . #查看版本号3667109当前目录的改动
来自:https://git-scm.com/docs/gitk/1.6.1
一、mac系统安装gitk
gitk是git的一个bin工具,如果git不包含gitk只能说明当前使用的git版本过老。
因此我们只需要安装最新的git就可以了。安装git方法如下:
首先安装brew,方便安装git
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
然后更新软件源并安装git
brew update
brew install git
查看git版本
git --version # 我安装之后git version 2.18.0
安装完成后执行type命令检查git路径
type -a git
如果结果路径包含/usr/local/bin/git则安装成功,此时只需在项目目录下输入gitk命令就可以启动gitk了。
但是默认情况下gitk显示很模糊,网上查了之后发现是由于mac自带的Wish软件版本很老,没有对retina屏幕做适配导致的,因此需要做优化。
二、系统优化,开启Wish高分辨率适配
git在Mac下其实早就适配了高分辨率了,其patch链接如下:
https://gist.githubusercontent.com/cynthia/5f2355a87c2f15d96dbe/raw/6727e73a007b0efabf55dd065e588467ffccc016/wish_app_info_plist.patch
开启高分辨率适配步骤如下:
1、重启系统,在黑屏界面的时候按住command + r直至出现进度条,进入系统recovery模式
2、在recovery模式中选择简体中文进入桌面,在最顶层的工具栏中找到“实用工具” -> “终端”,启动命令行终端
3、执行以下命令关闭系统保护,详细了解OS X的rootless
csrutil disable
4、重启正常进入系统,修改系统配置文件(如果没有上面的csrutil disable,是无法修改/System目录内的任何内容的)
sudo vim /System/Library/Frameworks/Tk.framework/Versions/Current/Resources/Wish.app/Contents/Info.plist
这个/System/Library/Frameworks/Tk.framework/Versions/Current/Resources/Wish.app/Contents/Info.plist在recovery模式下是找不到的
然后在这个文件内容中增加以下两行配置:
<key>NSHighResolutionCapable</key>
<true/>
增加位置如下图
然后更新Wish.app配置
sudo touch /System/Library/Frameworks/Tk.framework/Versions/Current/Resources/Wish.app
5、再次重启,黑屏时按下command+r直到出现进度条,重新进入recovery模式
6、进入recovery模式桌面后,执行“实用工具”->“终端”启动命令行终端
7、执行命令开启系统文件保护
csrutil enable
8、重启系统,正常进入系统,gitk就OK了。
来自:https://www.cnblogs.com/snowater/p/9286122.html
--all
Show all branches.
gitk --max-count=100 --all -- Makefile #查看Makefile 100条内容
Show at most 100 changes made to the file Makefile. Instead of only looking for changes in the current branch look in all branches.
实践:gitk --max-count=100 --all -- dns\ 运维手册.md
实践:
gitk --since="2 weeks ago" -- dns\ 运维手册.md #显示dns\ 运维手册.md两周内的改动
gitk v2.6.12.. include/scsi drivers/scsi #显示在自从版本v2.6.12后这两个子目录的改动
Show the changes since version v2.6.12 that changed any file in the include/scsi or drivers/scsi subdirectories
实践:
gitk 3667109.. . #查看版本号3667109当前目录的改动
来自:https://git-scm.com/docs/gitk/1.6.1
一、mac系统安装gitk
gitk是git的一个bin工具,如果git不包含gitk只能说明当前使用的git版本过老。
因此我们只需要安装最新的git就可以了。安装git方法如下:
首先安装brew,方便安装git
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
然后更新软件源并安装git
brew update
brew install git
查看git版本
git --version # 我安装之后git version 2.18.0
安装完成后执行type命令检查git路径
type -a git
如果结果路径包含/usr/local/bin/git则安装成功,此时只需在项目目录下输入gitk命令就可以启动gitk了。
但是默认情况下gitk显示很模糊,网上查了之后发现是由于mac自带的Wish软件版本很老,没有对retina屏幕做适配导致的,因此需要做优化。
二、系统优化,开启Wish高分辨率适配
git在Mac下其实早就适配了高分辨率了,其patch链接如下:
https://gist.githubusercontent.com/cynthia/5f2355a87c2f15d96dbe/raw/6727e73a007b0efabf55dd065e588467ffccc016/wish_app_info_plist.patch
开启高分辨率适配步骤如下:
1、重启系统,在黑屏界面的时候按住command + r直至出现进度条,进入系统recovery模式
2、在recovery模式中选择简体中文进入桌面,在最顶层的工具栏中找到“实用工具” -> “终端”,启动命令行终端
3、执行以下命令关闭系统保护,详细了解OS X的rootless
csrutil disable
4、重启正常进入系统,修改系统配置文件(如果没有上面的csrutil disable,是无法修改/System目录内的任何内容的)
sudo vim /System/Library/Frameworks/Tk.framework/Versions/Current/Resources/Wish.app/Contents/Info.plist
这个/System/Library/Frameworks/Tk.framework/Versions/Current/Resources/Wish.app/Contents/Info.plist在recovery模式下是找不到的
然后在这个文件内容中增加以下两行配置:
<key>NSHighResolutionCapable</key>
<true/>
增加位置如下图
然后更新Wish.app配置
sudo touch /System/Library/Frameworks/Tk.framework/Versions/Current/Resources/Wish.app
5、再次重启,黑屏时按下command+r直到出现进度条,重新进入recovery模式
6、进入recovery模式桌面后,执行“实用工具”->“终端”启动命令行终端
7、执行命令开启系统文件保护
csrutil enable
8、重启系统,正常进入系统,gitk就OK了。
来自:https://www.cnblogs.com/snowater/p/9286122.html
[可以改改]教教大家修改alt+c,alt+v快捷键
Unix/LinuxC技术 jackxiang 2019-4-1 09:53
一直使用alt+c,alt+v来复制粘贴,挺不方便的,就试了试修改快捷键,果然可以。下来分享给大家,很简单,会的同学就飘过吧~~,有其他方法的顺便也回复下吧
第一步,系统偏好设置,选择键盘
第一步
第二步,选择》添加应用程序快捷键
第三步,点击小加号
第二步,第三步
第四步,在菜单标题里输入快捷键名称
第五步,在键盘快捷键里,直接按“CTRL+C”。
同理,可以将复制,粘贴,剪切,全选都添加进去(不过撤销貌似不行,知道的回复下吧:)
第四步,第五步
第六步,enjoy
结论:
其实可以用修饰键来搞定
不过我现在都习惯了。
来自:http://bbs.pcbeta.com/viewthread-1040611-1-1.html
第一步,系统偏好设置,选择键盘
第一步
第二步,选择》添加应用程序快捷键
第三步,点击小加号
第二步,第三步
第四步,在菜单标题里输入快捷键名称
第五步,在键盘快捷键里,直接按“CTRL+C”。
同理,可以将复制,粘贴,剪切,全选都添加进去(不过撤销貌似不行,知道的回复下吧:)
第四步,第五步
第六步,enjoy
结论:
其实可以用修饰键来搞定
不过我现在都习惯了。
来自:http://bbs.pcbeta.com/viewthread-1040611-1-1.html
SwooleOne框架混合协议研究。
Swoole专题研究 jackxiang 2019-3-30 15:30
这个one能实现那个硬件tcp和手机的websocket的混合通讯嘛,说白了就是那个手机关灯,手机上websocket发给硬件,硬件收到指令后完成一个关灯动作后再返回,告诉用户已经关灯的例子。
可以
混合协议通讯
手册:
https://github.com/lizhichao/one-demo/blob/master/README.md#%E5%90%84%E7%A7%8D%E6%B7%B7%E5%90%88%E5%8D%8F%E8%AE%AE%E4%B9%8B%E9%97%B4%E7%9B%B8%E4%BA%92%E9%80%9A%E8%AE%AF%E5%88%97%E5%AD%90
代码:
https://github.com/lizhichao/one-demo/tree/master/App/Test/MixPro
混合协议配置文件:
https://github.com/lizhichao/one-demo/blob/master/App/Config/test_all.php
$this->global_data->bindId($request->fd, $name); #这个bindld是在哪儿?
https://github.com/lizhichao/one-demo/blob/master/App/GlobalData/Data.php
可以
混合协议通讯
手册:
https://github.com/lizhichao/one-demo/blob/master/README.md#%E5%90%84%E7%A7%8D%E6%B7%B7%E5%90%88%E5%8D%8F%E8%AE%AE%E4%B9%8B%E9%97%B4%E7%9B%B8%E4%BA%92%E9%80%9A%E8%AE%AF%E5%88%97%E5%AD%90
代码:
https://github.com/lizhichao/one-demo/tree/master/App/Test/MixPro
混合协议配置文件:
https://github.com/lizhichao/one-demo/blob/master/App/Config/test_all.php
$this->global_data->bindId($request->fd, $name); #这个bindld是在哪儿?
https://github.com/lizhichao/one-demo/blob/master/App/GlobalData/Data.php
[有空实践]tideways+xhgui搭建php 7的性能测试环境
Php/Js/Shell/Go jackxiang 2019-3-25 13:57
xhprof不维护了,用的是另一个,格式和xhprof一样,还兼容swoole 协程。
---------------------------------------------------------------阅读全文
---------------------------------------------------------------阅读全文
ipv6导致域名解析慢!关闭ipv6
Unix/LinuxC技术 jackxiang 2019-3-13 14:04
centos下判断是否开启ipv6及关闭ipv6的方式
已有 392 次阅读 2012-01-31 17:14 标签: ipv6
linux默认是开启ipv6的,但是很多网络服务还不支持ipv6,开启了ipv6反而会影响服务器的网络性能。可以考虑关闭ipv6功能
在Linux下首先确认IPv6是否已经被启用,可以从三个方面确定。
1.使用ifconfig查看自己的IP地址是否含有IPv6地址。
eth0 Link encap:Ethernet HWaddr 00:0A:E4:FE:6F:E1
inet addr:172.28.245.104 Bcast:172.28.245.127 Mask:255.255.255.128
inet6 addr: fe80::20a:e4ff:fefe:6fe1/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:96998 errors:0 dropped:0 overruns:0 frame:0
TX packets:69963 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:113588678 (108.3 MiB) TX bytes:8894978 (8.4 MiB)
Interrupt:20
2.查看服务监听的IP中是否有IPv6格式的地址。(netstat -tuln)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:8000 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
udp 0 0 172.28.245.104:61440 0.0.0.0:*
udp 0 0 0.0.0.0:32823 0.0.0.0:*
udp 0 0 0.0.0.0:32824 0.0.0.0:*
udp 0 0 0.0.0.0:68 0.0.0.0:*
3.使用lsmod|grep ipv6查看ipv6的模块是否被加载。
ipv6 245989 12
关闭IPV6的方式:
当确定IPv6已经开启后就可以按照下面的方法将其关闭
1.使用vi编辑器,打开/etc/modprobe.conf
2.在文档中加入如下的两条:
alias net-pf-10 off
alias ipv6 off
保存退出,并且重新启动系统。
重启之后可以使用上面的三种方法去验证IPv6支持是否已经被关闭。
IPv6是默认支持的,所以当你要重新开起IPv6支持时,将/etc/modprobe.conf中的两条指令注释掉就可以了。
======================================================================
http://www.111cn.net/sys/CentOS/50864.htm
http://www.linuxso.com/linuxrumen/17201.html
http://blog.csdn.net/suplxj/article/details/7773423
方法一:
CentOS 6 默认安装后,IPv6是自动开启的,但是现在IPv6还没有普及基本用不到这个功能,建议关闭IPv6模块。下面介绍一下关闭方法。
说明:蓝色=命令名称
浅绿=命令参数
浅蓝=选项
紫色=目录
系统环境:CentOS 6.2 i686
1、查看系统是否开启ipv6
a)通过网卡属性查看
命令:ifconfig
注释:有 “inet6 addr:。。。。。。。“ 的表示开启了ipv6功能
b)通过内核模块加载信息查看
命令:lsmod | grep ipv6
2、ipv6关闭方法
在/etc/modprobe.d/dist.conf结尾添加
alias net-pf-10 off
alias ipv6 off
可用vi等编辑器,也可以通过命令:
cat <<EOF>>/etc/modprobe.d/dist.conf
alias net-pf-10 off
alias ipv6 off
EOF
写改完毕重启电脑。
来自:http://www.cnblogs.com/taosim/articles/3152516.html
已有 392 次阅读 2012-01-31 17:14 标签: ipv6
linux默认是开启ipv6的,但是很多网络服务还不支持ipv6,开启了ipv6反而会影响服务器的网络性能。可以考虑关闭ipv6功能
在Linux下首先确认IPv6是否已经被启用,可以从三个方面确定。
1.使用ifconfig查看自己的IP地址是否含有IPv6地址。
eth0 Link encap:Ethernet HWaddr 00:0A:E4:FE:6F:E1
inet addr:172.28.245.104 Bcast:172.28.245.127 Mask:255.255.255.128
inet6 addr: fe80::20a:e4ff:fefe:6fe1/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:96998 errors:0 dropped:0 overruns:0 frame:0
TX packets:69963 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:113588678 (108.3 MiB) TX bytes:8894978 (8.4 MiB)
Interrupt:20
2.查看服务监听的IP中是否有IPv6格式的地址。(netstat -tuln)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:8000 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
udp 0 0 172.28.245.104:61440 0.0.0.0:*
udp 0 0 0.0.0.0:32823 0.0.0.0:*
udp 0 0 0.0.0.0:32824 0.0.0.0:*
udp 0 0 0.0.0.0:68 0.0.0.0:*
3.使用lsmod|grep ipv6查看ipv6的模块是否被加载。
ipv6 245989 12
关闭IPV6的方式:
当确定IPv6已经开启后就可以按照下面的方法将其关闭
1.使用vi编辑器,打开/etc/modprobe.conf
2.在文档中加入如下的两条:
alias net-pf-10 off
alias ipv6 off
保存退出,并且重新启动系统。
重启之后可以使用上面的三种方法去验证IPv6支持是否已经被关闭。
IPv6是默认支持的,所以当你要重新开起IPv6支持时,将/etc/modprobe.conf中的两条指令注释掉就可以了。
======================================================================
http://www.111cn.net/sys/CentOS/50864.htm
http://www.linuxso.com/linuxrumen/17201.html
http://blog.csdn.net/suplxj/article/details/7773423
方法一:
CentOS 6 默认安装后,IPv6是自动开启的,但是现在IPv6还没有普及基本用不到这个功能,建议关闭IPv6模块。下面介绍一下关闭方法。
说明:蓝色=命令名称
浅绿=命令参数
浅蓝=选项
紫色=目录
系统环境:CentOS 6.2 i686
1、查看系统是否开启ipv6
a)通过网卡属性查看
命令:ifconfig
注释:有 “inet6 addr:。。。。。。。“ 的表示开启了ipv6功能
b)通过内核模块加载信息查看
命令:lsmod | grep ipv6
2、ipv6关闭方法
在/etc/modprobe.d/dist.conf结尾添加
alias net-pf-10 off
alias ipv6 off
可用vi等编辑器,也可以通过命令:
cat <<EOF>>/etc/modprobe.d/dist.conf
alias net-pf-10 off
alias ipv6 off
EOF
写改完毕重启电脑。
来自:http://www.cnblogs.com/taosim/articles/3152516.html
[实践OK]Js一次正则匹配出多个IP到数组之Javascript/js从左侧的textarea里获取多行内容并提取出多个IP行放在右则textarea。
Php/Js/Shell/Go jackxiang 2019-3-6 12:01
Jquery: <script src="./scripts/jquery-1.4.2.js"></script>
Html textarea:
javasciprt,先批量替换掉下划线为点号,再正则匹配出所有包含IP行里的IP,如下:
输入素材:
elk_logstash_bj_yz_10_73_211_106
elk_logstash_bj_yz_10_73_211_118
elk_logstash_bj_yz_10_73_211_119
输出素材:
10.73.211.106
10.73.211.118
10.73.211.119
Jquery写法,加上IP去重:
Html触发部分:
<a href="javascript:void(0);" id=analysisIps name=analysisIps>[提取Ip地址]</a>
Html textarea:
javasciprt,先批量替换掉下划线为点号,再正则匹配出所有包含IP行里的IP,如下:
输入素材:
elk_logstash_bj_yz_10_73_211_106
elk_logstash_bj_yz_10_73_211_118
elk_logstash_bj_yz_10_73_211_119
输出素材:
10.73.211.106
10.73.211.118
10.73.211.119
Jquery写法,加上IP去重:
Html触发部分:
<a href="javascript:void(0);" id=analysisIps name=analysisIps>[提取Ip地址]</a>
[实践OK]mac下安装redis 和 redis可视化工具rdm并且连接redis
Unix/LinuxC技术 jackxiang 2019-2-28 17:57
jackXiang@jackXsMacBook-Pro ~/ops master ● brew cask install rdm
Updating Homebrew...
Error: Cask 'rdm' is unavailable: No Cask with this name exists. Did you mean one of these?
avibrazil-rdm keyboard-maestro safeincloud-password-manager wordmark
avibrazil-rdm keyboard-maestro safeincloud-password-manager wordmark
keeper-password-manager orelord-mongodb watchguard-mobile-vpn-with-ssl
keeper-password-manager orelord-mongodb watchguard-mobile-vpn-with-ssl
可以在这里下载dmg:
链接:https://pan.baidu.com/s/1IPAgiaEByU0zA8fIov930w 密码:4pwi
安装之后的节目,输入连接名,地址,以及端口号就行了,点击下面的test connection测试连接
来自:https://blog.csdn.net/qq_41140741/article/details/86593955
Updating Homebrew...
Error: Cask 'rdm' is unavailable: No Cask with this name exists. Did you mean one of these?
avibrazil-rdm keyboard-maestro safeincloud-password-manager wordmark
avibrazil-rdm keyboard-maestro safeincloud-password-manager wordmark
keeper-password-manager orelord-mongodb watchguard-mobile-vpn-with-ssl
keeper-password-manager orelord-mongodb watchguard-mobile-vpn-with-ssl
可以在这里下载dmg:
链接:https://pan.baidu.com/s/1IPAgiaEByU0zA8fIov930w 密码:4pwi
安装之后的节目,输入连接名,地址,以及端口号就行了,点击下面的test connection测试连接
来自:https://blog.csdn.net/qq_41140741/article/details/86593955
[实践OK]static和extern理解
Unix/LinuxC技术 jackxiang 2019-2-28 10:05
[实践OK]Mac OS X mkdir: mkdir -p /home/xiangdong 出现mkdir: /home/xiangdong: Operation not supported
Unix/LinuxC技术 jackxiang 2019-2-24 11:55
现象:bogon:tmp root# mkdir -p /home/xiangdong
mkdir: /home/xiangdong: Operation not supported
目的:fFileZilla SFTP同步Linux上的家目录到Mac上。
解决办法:
sudo vim /etc/auto_master
/home auto_home -nobrowse,hidefromfinder #加上#号
bogon:tmp root# sudo automount
bogon:tmp root# mkdir -p /home/xiangdong #重启automount后就能成功创建。
Hmmm, trying to create a directory under '/home' on a Mac?
Well, Apple doesn't want you to (with good reason, automounter owns this dir, which makes it easier to do NFS mounts and such) so you shouldn't muck with it but if you really just 'have to do it', here is how you can.
Basically: Edit /etc/auto_master and remove or comment out the line that starts with "/home".
example:
sudo vim /etc/auto_master
before:
# Automounter master map
+auto_master # Use directory service
/net -hosts -nobrowse,hidefromfinder,nosuid
/home auto_home -nobrowse,hidefromfinder
/Network/Servers -fstab
/- -static
after:
# Automounter master map
+auto_master # Use directory service
/net -hosts -nobrowse,hidefromfinder,nosuid
#/home auto_home -nobrowse,hidefromfinder
/Network/Servers -fstab
/- -static
to have the change take effect without a reboot:
sudo automount
mkdir /home/test
ls -l /home/
total 0
drwxr-xr-x 3 root admin 102 Aug 10 11:33 test
NOTE: I wouldn't do anything 'important' with this directory as it's easy to forget you altered this and an upgrade will plow over this directory, removing all data. (this dir is also not included in any Time Machine backups.
来自:https://blog.csdn.net/lychao89/article/details/53667068
mkdir: /home/xiangdong: Operation not supported
目的:fFileZilla SFTP同步Linux上的家目录到Mac上。
解决办法:
sudo vim /etc/auto_master
/home auto_home -nobrowse,hidefromfinder #加上#号
bogon:tmp root# sudo automount
bogon:tmp root# mkdir -p /home/xiangdong #重启automount后就能成功创建。
Hmmm, trying to create a directory under '/home' on a Mac?
Well, Apple doesn't want you to (with good reason, automounter owns this dir, which makes it easier to do NFS mounts and such) so you shouldn't muck with it but if you really just 'have to do it', here is how you can.
Basically: Edit /etc/auto_master and remove or comment out the line that starts with "/home".
example:
sudo vim /etc/auto_master
before:
# Automounter master map
+auto_master # Use directory service
/net -hosts -nobrowse,hidefromfinder,nosuid
/home auto_home -nobrowse,hidefromfinder
/Network/Servers -fstab
/- -static
after:
# Automounter master map
+auto_master # Use directory service
/net -hosts -nobrowse,hidefromfinder,nosuid
#/home auto_home -nobrowse,hidefromfinder
/Network/Servers -fstab
/- -static
to have the change take effect without a reboot:
sudo automount
mkdir /home/test
ls -l /home/
total 0
drwxr-xr-x 3 root admin 102 Aug 10 11:33 test
NOTE: I wouldn't do anything 'important' with this directory as it's easy to forget you altered this and an upgrade will plow over this directory, removing all data. (this dir is also not included in any Time Machine backups.
来自:https://blog.csdn.net/lychao89/article/details/53667068