[实践OK]phpstorm配置Monokai-Sublime主题,Phpstorm如何启用水平滚动,按住 SHIFT+鼠标滚动。
Php/Js/Shell/Go jackxiang 2020-1-5 21:50
最开始编辑器是用的sublime的,后来因为phpstome的强大功能换用的phpstome,但带的主题实在看不惯,就有了这片文章。
闲话少说,开始正文。
一、先要下载Monokai-Sublime主题文件,如下网盘链接。
https://pan.baidu.com/s/1jPDYISHdQmwSkdoRmOSbAQ
PhpStorm ,找到 file,setting,Color Scheme(快捷键 Ctrl+Alt+S)
Import Scheme。。。导入:Monokai_Sublime.icls,选:Monokai-Sublime Copy。
MacOS系统上,JetBrains诸如PhpStorm、IntelliJ IDEA、PyCharm等各种IDE在编辑器上默认不显示横向滚动条。当设置的字体比较大,需要向右滑动时很可能因为没有横向滚动条而大为恼火。
解决方法有两个:
滚动条受系统全局设置影响,因此我们可以设置总是显示滚动条。操作方法如下:打开系统设置-》通用,“显示滚动条”选项选“始终”;
滚动鼠标滑轮时按shift,此时是滚动横向滚动条。
注意::IDE中的"wrap on typing"指的是超过多少个字符自动换行,与横向滚动条不冲突。例如设置大号字体,60个字符横向显示不了,故而需要滚动条;但此时一行未超过80(或120)个字符,不会自动换行。
闲话少说,开始正文。
一、先要下载Monokai-Sublime主题文件,如下网盘链接。
https://pan.baidu.com/s/1jPDYISHdQmwSkdoRmOSbAQ
PhpStorm ,找到 file,setting,Color Scheme(快捷键 Ctrl+Alt+S)
Import Scheme。。。导入:Monokai_Sublime.icls,选:Monokai-Sublime Copy。
MacOS系统上,JetBrains诸如PhpStorm、IntelliJ IDEA、PyCharm等各种IDE在编辑器上默认不显示横向滚动条。当设置的字体比较大,需要向右滑动时很可能因为没有横向滚动条而大为恼火。
解决方法有两个:
滚动条受系统全局设置影响,因此我们可以设置总是显示滚动条。操作方法如下:打开系统设置-》通用,“显示滚动条”选项选“始终”;
滚动鼠标滑轮时按shift,此时是滚动横向滚动条。
注意::IDE中的"wrap on typing"指的是超过多少个字符自动换行,与横向滚动条不冲突。例如设置大号字体,60个字符横向显示不了,故而需要滚动条;但此时一行未超过80(或120)个字符,不会自动换行。
[实践OK] 鹅厂后台开发工程师的工作日常,据说这是大鹅厂的系统开发人员常用操作命令,挑选几条学习学习。
Unix/LinuxC技术 jackxiang 2019-12-30 18:58
背景:我一看这文章就知道是架构平台部的兄弟的操作性更大一些,谁投的稿不清楚,但这个操作能感受到浓浓的鹅厂气息,这些年过去了,系统底层依然没有大变化,估计这些操作还能再用上十年,特梳理总结,以便“后来人”,也包括自己备忘。女程序员少,会写VIM、GDB、Linux命令、正则表达式、Makefile的女程序员妹子简直就是至宝啊,尽管ls –lhS ,中间横写得不对,但这不是重点,正是留言的好机会,请年轻程序员男好生把握,哥也年轻过,别后悔莫及,机会就让给你们了,哈哈。
1)磁盘满了查看/一级目录的报警:
du -h --max-depth=1
2)将当前目录下各文件以从大到小的顺序进行展示:
ls -lhS
3)查看日志最近200行:
history | tail -n 200
4)top cpu内存排序:
top 命令的基本视图中,按数字 1 监控每个逻辑 CPU 的使用情况;按 P 实现按 CPU 降序排列,按 M 按内存降序排列。
5)编写的二进制代码推到后台监听端口9999:
nohup xxx 9999
6)查看程序开启的端口:
netstat -anp | grep -w 9999
7)tcpdump抓自己开发的服务器server并调试,学后面的正则匹配:
tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'
8)对日志某些列判断性打印:
awk '-F,' '{if ($666==110) print $999}' xxx.log.20191212
9)动态链接没有加载文件:
lsof xxx.so #进程加载的一个外部 so 动态库对应功能并没有生效
GDB 调试时发现,该 so 并没有导出函数 fffff 。
nm -D xxx.so | grep fffff
10)停掉了测试进程 xxx:
ps aux | grep -w xxx| grep -v grep | awk '{print $2}' | xargs kill -9
11)并没有导出函数 fffff ,证实了该 so 确实没有导出该函数。
nm -D xxx.so | grep fffff
来源自vimer、女程序员说:https://mp.weixin.qq.com/s/WsWFcw-xoRTFOcz1TQqDBw
1)磁盘满了查看/一级目录的报警:
du -h --max-depth=1
2)将当前目录下各文件以从大到小的顺序进行展示:
ls -lhS
3)查看日志最近200行:
history | tail -n 200
4)top cpu内存排序:
top 命令的基本视图中,按数字 1 监控每个逻辑 CPU 的使用情况;按 P 实现按 CPU 降序排列,按 M 按内存降序排列。
5)编写的二进制代码推到后台监听端口9999:
nohup xxx 9999
6)查看程序开启的端口:
netstat -anp | grep -w 9999
7)tcpdump抓自己开发的服务器server并调试,学后面的正则匹配:
tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'
8)对日志某些列判断性打印:
awk '-F,' '{if ($666==110) print $999}' xxx.log.20191212
9)动态链接没有加载文件:
lsof xxx.so #进程加载的一个外部 so 动态库对应功能并没有生效
GDB 调试时发现,该 so 并没有导出函数 fffff 。
nm -D xxx.so | grep fffff
10)停掉了测试进程 xxx:
ps aux | grep -w xxx| grep -v grep | awk '{print $2}' | xargs kill -9
11)并没有导出函数 fffff ,证实了该 so 确实没有导出该函数。
nm -D xxx.so | grep fffff
来源自vimer、女程序员说:https://mp.weixin.qq.com/s/WsWFcw-xoRTFOcz1TQqDBw
yum localinstall influxdb-1.7.9.x86_64.rpm -y
vim /etc/influxdb/influxdb.conf
systemctl start influxdb
netstat -nlpt
ps -ef | grep influxdb
netstat -nlpt
influx -precision rfc3339 # connect to http://localhost:8086: Get http://localhost:8086/ping: dial tcp 127.0.0.1:8086: connect
influx -precision rfc3339
Connected to http://localhost:8086 version 1.7.9
InfluxDB shell version: 1.7.9
显示数据库
show databases
新建数据库
create database jidan
删除数据库
drop database jidan
使用指定数据库
use jidan
2、InfluxDB数据表操作
在InfluxDB当中,并没有表(table)这个概念,取而代之的是MEASUREMENTS,MEASUREMENTS的功能与传统数据库中的表一致,因此我们也可以将MEASUREMENTS称为InfluxDB中的表。
显示所有表
SHOW MEASUREMENTS
新建表
InfluxDB中没有显式的新建表的语句,只能通过insert数据的方式来建立新表。
insert jidanwendu,hostname=jidanindex value=442221834240i
其中 jidanwendu 就是表名,hostname是索引(tag),value=xx是记录值(field),记录值可以有多个,系统自带追加时间戳
> use jidan
Using database jidan
> insert jidanwendu,hostname=jidanindex value=442221834240i
>多个记录值:https://www.cnblogs.com/bonelee/p/6811728.html
> use jidan
Using database jidan
> INSERT jidanwendu,host=serverA,region=us_west value=0.64
或者添加数据时,自己写入时间戳
insert jidanwendu,hostname=jidanindex value=442221834240i 1435362189575692182
删除表
drop measurement jidanwendu
3、数据保存策略(Retention Policies)
influxDB是没有提供直接删除数据记录的方法,但是提供数据保存策略,主要用于指定数据保留时间,超过指定时间,就删除这部分数据。
查看当前数据库Retention Policies
show retention policies on "db_name"
创建新的Retention Policies
create retention policy "rp_name" on "jidan" duration 3w replication 1 default
rp_name:策略名;
db_name:具体的数据库名;
3w:保存3周,3周之前的数据将被删除,influxdb具有各种事件参数,比如:h(小时),d(天),w(星期);
replication 1:副本个数,一般为1就可以了;
default:设置为默认策略
修改Retention Policies
alter retention policy "rp_name" on "jidan" duration 30d default
删除Retention Policies
drop retention policy "rp_name" on "jidan"
> create retention policy "rp_name" on "jidan" duration 3w replication 1 default
> alter retention policy "rp_name" on "jidan" duration 30d default
> drop retention policy "rp_name" on "jidan"
4、连续查询(Continuous Queries)
InfluxDB的连续查询是在数据库中自动定时启动的一组语句,语句中必须包含 SELECT 关键词和 GROUP BY time() 关键词。
InfluxDB会将查询结果放在指定的数据表中。
目的:使用连续查询是最优的降低采样率的方式,连续查询和存储策略搭配使用将会大大降低InfluxDB的系统占用量。而且使用连续查询后,数据会存放到指定的数据表中,这样就为以后统计不同精度的数据提供了方便。
新建连续查询
CREATE CONTINUOUS QUERY <cq_name> ON <database_name>
[RESAMPLE [EVERY <interval>] [FOR <interval>]]
BEGIN SELECT <function>(<stuff>)[,<function>(<stuff>)] INTO <different_measurement>
FROM <current_measurement> [WHERE <stuff>] GROUP BY time(<interval>)[,<stuff>]
END
样例:
CREATE CONTINUOUS QUERY rp_name ON jidan BEGIN SELECT mean(connected_clients), MEDIAN(connected_clients), MAX(connected_clients), MIN(connected_clients) INTO redis_clients_30m FROM redis_clients GROUP BY ip,port,time(30m) END
在jidan库中新建了一个名为 wj_30m 的连续查询,每三十分钟取一个connected_clients字段的平均值、中位值、最大值、最小值 redis_clients_30m 表中。使用的数据保留策略都是 default。
不同database样例:
CREATE CONTINUOUS QUERY rp_name ON jidan BEGIN SELECT mean(connected_clients), MEDIAN(connected_clients), MAX(connected_clients), MIN(connected_clients) INTO jidan_30.autogen.redis_clients_30m FROM jidan.autogen.redis_clients GROUP BY ip,port,time(30m) END
实践:
> CREATE CONTINUOUS QUERY rp_name ON jidan BEGIN SELECT mean(connected_clients), MEDIAN(connected_clients), MAX(connected_clients), MIN(connected_clients) INTO redis_clients_30m FROM redis_clients GROUP BY ip,port,time(30m) END
ERR: retention policy not found: jidan.rp_name #刚删了策略
> create retention policy "rp_name" on "jidan" duration 3w replication 1 default
> CREATE CONTINUOUS QUERY rp_name ON jidan BEGIN SELECT mean(connected_clients), MEDIAN(connected_clients), MAX(connected_clients), MIN(connected_clients) INTO redis_clients_30m FROM redis_clients GROUP BY ip,port,time(30m) END
显示所有已存在的连续查询
SHOW CONTINUOUS QUERIES
删除Continuous Queries
DROP CONTINUOUS QUERY <cq_name> ON <database_name>
将influxdb中的所有的数据库都备份下来,不加任何的参数
influxd backup -portable /tmp/data/total
更多查询条件:https://www.jianshu.com/p/a1344ca86e9b
来自:https://www.cnblogs.com/shhnwangjian/p/6897216.html?utm_source=itdadao&utm_medium=referral
PHP调用查询:https://blog.csdn.net/weixin_41621706/article/details/100630332
vim /etc/influxdb/influxdb.conf
systemctl start influxdb
netstat -nlpt
ps -ef | grep influxdb
netstat -nlpt
influx -precision rfc3339 # connect to http://localhost:8086: Get http://localhost:8086/ping: dial tcp 127.0.0.1:8086: connect
influx -precision rfc3339
Connected to http://localhost:8086 version 1.7.9
InfluxDB shell version: 1.7.9
显示数据库
show databases
新建数据库
create database jidan
删除数据库
drop database jidan
使用指定数据库
use jidan
2、InfluxDB数据表操作
在InfluxDB当中,并没有表(table)这个概念,取而代之的是MEASUREMENTS,MEASUREMENTS的功能与传统数据库中的表一致,因此我们也可以将MEASUREMENTS称为InfluxDB中的表。
显示所有表
SHOW MEASUREMENTS
新建表
InfluxDB中没有显式的新建表的语句,只能通过insert数据的方式来建立新表。
insert jidanwendu,hostname=jidanindex value=442221834240i
其中 jidanwendu 就是表名,hostname是索引(tag),value=xx是记录值(field),记录值可以有多个,系统自带追加时间戳
> use jidan
Using database jidan
> insert jidanwendu,hostname=jidanindex value=442221834240i
>多个记录值:https://www.cnblogs.com/bonelee/p/6811728.html
> use jidan
Using database jidan
> INSERT jidanwendu,host=serverA,region=us_west value=0.64
或者添加数据时,自己写入时间戳
insert jidanwendu,hostname=jidanindex value=442221834240i 1435362189575692182
删除表
drop measurement jidanwendu
3、数据保存策略(Retention Policies)
influxDB是没有提供直接删除数据记录的方法,但是提供数据保存策略,主要用于指定数据保留时间,超过指定时间,就删除这部分数据。
查看当前数据库Retention Policies
show retention policies on "db_name"
创建新的Retention Policies
create retention policy "rp_name" on "jidan" duration 3w replication 1 default
rp_name:策略名;
db_name:具体的数据库名;
3w:保存3周,3周之前的数据将被删除,influxdb具有各种事件参数,比如:h(小时),d(天),w(星期);
replication 1:副本个数,一般为1就可以了;
default:设置为默认策略
修改Retention Policies
alter retention policy "rp_name" on "jidan" duration 30d default
删除Retention Policies
drop retention policy "rp_name" on "jidan"
> create retention policy "rp_name" on "jidan" duration 3w replication 1 default
> alter retention policy "rp_name" on "jidan" duration 30d default
> drop retention policy "rp_name" on "jidan"
4、连续查询(Continuous Queries)
InfluxDB的连续查询是在数据库中自动定时启动的一组语句,语句中必须包含 SELECT 关键词和 GROUP BY time() 关键词。
InfluxDB会将查询结果放在指定的数据表中。
目的:使用连续查询是最优的降低采样率的方式,连续查询和存储策略搭配使用将会大大降低InfluxDB的系统占用量。而且使用连续查询后,数据会存放到指定的数据表中,这样就为以后统计不同精度的数据提供了方便。
新建连续查询
CREATE CONTINUOUS QUERY <cq_name> ON <database_name>
[RESAMPLE [EVERY <interval>] [FOR <interval>]]
BEGIN SELECT <function>(<stuff>)[,<function>(<stuff>)] INTO <different_measurement>
FROM <current_measurement> [WHERE <stuff>] GROUP BY time(<interval>)[,<stuff>]
END
样例:
CREATE CONTINUOUS QUERY rp_name ON jidan BEGIN SELECT mean(connected_clients), MEDIAN(connected_clients), MAX(connected_clients), MIN(connected_clients) INTO redis_clients_30m FROM redis_clients GROUP BY ip,port,time(30m) END
在jidan库中新建了一个名为 wj_30m 的连续查询,每三十分钟取一个connected_clients字段的平均值、中位值、最大值、最小值 redis_clients_30m 表中。使用的数据保留策略都是 default。
不同database样例:
CREATE CONTINUOUS QUERY rp_name ON jidan BEGIN SELECT mean(connected_clients), MEDIAN(connected_clients), MAX(connected_clients), MIN(connected_clients) INTO jidan_30.autogen.redis_clients_30m FROM jidan.autogen.redis_clients GROUP BY ip,port,time(30m) END
实践:
> CREATE CONTINUOUS QUERY rp_name ON jidan BEGIN SELECT mean(connected_clients), MEDIAN(connected_clients), MAX(connected_clients), MIN(connected_clients) INTO redis_clients_30m FROM redis_clients GROUP BY ip,port,time(30m) END
ERR: retention policy not found: jidan.rp_name #刚删了策略
> create retention policy "rp_name" on "jidan" duration 3w replication 1 default
> CREATE CONTINUOUS QUERY rp_name ON jidan BEGIN SELECT mean(connected_clients), MEDIAN(connected_clients), MAX(connected_clients), MIN(connected_clients) INTO redis_clients_30m FROM redis_clients GROUP BY ip,port,time(30m) END
显示所有已存在的连续查询
SHOW CONTINUOUS QUERIES
删除Continuous Queries
DROP CONTINUOUS QUERY <cq_name> ON <database_name>
将influxdb中的所有的数据库都备份下来,不加任何的参数
influxd backup -portable /tmp/data/total
更多查询条件:https://www.jianshu.com/p/a1344ca86e9b
来自:https://www.cnblogs.com/shhnwangjian/p/6897216.html?utm_source=itdadao&utm_medium=referral
PHP调用查询:https://blog.csdn.net/weixin_41621706/article/details/100630332
[实践OK]linux下利用inode(i节点号)删除中文或者其它乱码文件。
Unix/LinuxC技术 jackxiang 2019-12-30 15:27
#ls -i
24229218 go 805308641 -w,
这样删不掉:
#rm -i 805308641
rm: cannot remove ‘805308641’: No such file or directory
这样删才行:
find ./* -inum 805308641 -delete
来自:https://blog.csdn.net/wb736/article/details/79756956
Macbook:
find ./* -inum 1442584 |xargs rm -f #样例,使用find和xargs结合删除ddd文件(无法使用-i参数进行删除确认)
mac本下实践Ok如下:
echo `find ./* -inum 22266353 `
./-p
rm -f `find ./* -inum 22266353 ` #成功删除
find ./* -inum 22266353 -exec rm -i {} \;
rm: ./-p: is a directory
find ./* -inum 13287477 -exec rm -r -i {} \; #成功删除
remove ./~? y
24229218 go 805308641 -w,
这样删不掉:
#rm -i 805308641
rm: cannot remove ‘805308641’: No such file or directory
这样删才行:
find ./* -inum 805308641 -delete
来自:https://blog.csdn.net/wb736/article/details/79756956
Macbook:
find ./* -inum 1442584 |xargs rm -f #样例,使用find和xargs结合删除ddd文件(无法使用-i参数进行删除确认)
mac本下实践Ok如下:
echo `find ./* -inum 22266353 `
./-p
rm -f `find ./* -inum 22266353 ` #成功删除
find ./* -inum 22266353 -exec rm -i {} \;
rm: ./-p: is a directory
find ./* -inum 13287477 -exec rm -r -i {} \; #成功删除
remove ./~? y
[系统缺陷]centos7 关机时出现PolicyKit daemon disconnected from the bus错误
Unix/LinuxC技术 jackxiang 2019-12-26 11:09
现象:init 0 关闭系统 出现错误提示,阿里专有云的运维兄弟反馈说是没有完全关闭:
再登录下:runlevel ,说是操作系统bug。
来自:https://developer.aliyun.com/ask/107789?spm=a2c6h.13159736
再登录下:runlevel ,说是操作系统bug。
来自:https://developer.aliyun.com/ask/107789?spm=a2c6h.13159736
[实践OK]centos7.6安装php7.3.12出现configure: error: Please reinstall the libzip distribution的解决办法。CentOS6安装非官方memcache-4.0.5出现 Autoconf version 2.64 or higher is required。
Php/Js/Shell/Go jackxiang 2019-12-17 10:25
#mv libzip.so.5 /tmp/.
mv: overwrite ‘/tmp/./libzip.so.5’? y
[root@rpmbuild_server_bj_yz_10_10_0_158:/usr/local/libzip/lib]
#ls
libzip libzip.a libzip.la libzip.so libzip.so.5.0.0 pkgconfig
[root@rpmbuild_server_bj_yz_10_10_0_158:/usr/local/libzip/lib]
#ls
libzip libzip.a libzip.la libzip.so libzip.so.5.0.0 pkgconfig
[root@rpmbuild_server_bj_yz_10_10_0_158:/usr/local/libzip/lib]
#ldconfig -v|grep libzip
ldconfig: Can't stat /libx32: No such file or directory
ldconfig: Path `/usr/lib' given more than once
ldconfig: Path `/usr/lib64' given more than once
ldconfig: Can't stat /usr/libx32: No such file or directory
/usr/local/libzip/lib:
libzip.so.5 -> libzip.so.5.0.0 (changed)
=========================================
CentOS 7编译安装PHP 7.4提示 libzip 版本问题:
https://blog.csdn.net/tan88881111/article/details/121599297
报错提示非常明显,配置程序没有找到libzip库,你用yum安装libzip-devel的话,安装的版本是0.10,版本达不到要求。所以,此时我们需要卸载掉yum安装的libzip然后手动安装新版。
/usr/local/libzip/lib:
libzip.so.5 -> libzip.so.5.0.0
[root@rpmbuild_server_bj_yz_10_10_0_158:/tmp/php-7.3.16]
#cd /usr/local/libzip/lib
[root@rpmbuild_server_bj_yz_10_10_0_158:/usr/local/libzip/lib]
#ls
libzip libzip.a libzip.la libzip.so libzip.so.5 libzip.so.5.0.0 pkgconfig
checking libzip... yes
Please reinstall the libzip distribution
checking for libzip... not found
configure: error: Please reinstall the libzip distribution
vim ./configure
追踪$LIBZIP_LIBDIR,发现它是一个lib库:
save_old_LDFLAGS=$LDFLAGS
ac_stuff="
-L$LIBZIP_LIBDIR
"
再向上查找:
再向上找这个LIBZIP_LIBDIR变量的来源:
checking libzip... =================
echo $LIBZIP_LIBDIR
PHP旧版本,我这编译php55/ php56/ php7/ php71/ php72/ 都没有出现这个问题,php73出现了这个问题。
configure: error: Please reinstall the libzip distribution
rpm -ql libzip-devel|grep -v man
/usr/include/zip.h
/usr/include/zipconf-64.h
/usr/include/zipconf.h
/usr/lib64/libzip
/usr/lib64/libzip.so
/usr/lib64/libzip/include
/usr/lib64/libzip/include/zipconf.h
/usr/lib64/pkgconfig/libzip.pc
出现:
configure: error: Please reinstall the libzip distribution
于是:
yum install -y libzip-devel
编译PHP时出现新问题:
checking for libzip... configure: error: system libzip must be upgraded to version >= 0.11
error: Bad exit status from /root/rpmbuild/tmp/rpm-tmp.gsrSs0 (%build)
经过源码安装是最新的版本,解决办法:
再重新编译PHP7.3,后终于成功完成编译。
cat /usr/local/lib/pkgconfig/libzip.pc
find /usr/local/include/ -name "zip.h"
/usr/local/include/zip.h
rpm -qf /usr/local/include/zip.h
file /usr/local/include/zip.h is not owned by any package
rpm -qf /usr/local/include/zipconf.h
file /usr/local/include/zipconf.h is not owned by any package
ldd /usr/local/php/bin/php |grep libzip #php 7.3.12
libzip.so.5 => /usr/local/lib/libzip.so.5 (0x00007f3be1b38000)
旧的php,PHP 7.1.6,无任何返回:ldd /usr/local/php/bin/php |grep libzip
以上实践摘取自 :https://www.php.cn/php-weizijiaocheng-414091.html
https://blog.csdn.net/liuyeluoqing/article/details/81697954
https://blog.qzze.com/820.html
CentOS6.X上rpmbuild -ba memcache-php73-4.0.5.el6.x86_64.spec
出现error: Autoconf version 2.64 or higher is required :
https://blog.51cto.com/11736068/2110670
mv: overwrite ‘/tmp/./libzip.so.5’? y
[root@rpmbuild_server_bj_yz_10_10_0_158:/usr/local/libzip/lib]
#ls
libzip libzip.a libzip.la libzip.so libzip.so.5.0.0 pkgconfig
[root@rpmbuild_server_bj_yz_10_10_0_158:/usr/local/libzip/lib]
#ls
libzip libzip.a libzip.la libzip.so libzip.so.5.0.0 pkgconfig
[root@rpmbuild_server_bj_yz_10_10_0_158:/usr/local/libzip/lib]
#ldconfig -v|grep libzip
ldconfig: Can't stat /libx32: No such file or directory
ldconfig: Path `/usr/lib' given more than once
ldconfig: Path `/usr/lib64' given more than once
ldconfig: Can't stat /usr/libx32: No such file or directory
/usr/local/libzip/lib:
libzip.so.5 -> libzip.so.5.0.0 (changed)
=========================================
CentOS 7编译安装PHP 7.4提示 libzip 版本问题:
https://blog.csdn.net/tan88881111/article/details/121599297
报错提示非常明显,配置程序没有找到libzip库,你用yum安装libzip-devel的话,安装的版本是0.10,版本达不到要求。所以,此时我们需要卸载掉yum安装的libzip然后手动安装新版。
/usr/local/libzip/lib:
libzip.so.5 -> libzip.so.5.0.0
[root@rpmbuild_server_bj_yz_10_10_0_158:/tmp/php-7.3.16]
#cd /usr/local/libzip/lib
[root@rpmbuild_server_bj_yz_10_10_0_158:/usr/local/libzip/lib]
#ls
libzip libzip.a libzip.la libzip.so libzip.so.5 libzip.so.5.0.0 pkgconfig
checking libzip... yes
Please reinstall the libzip distribution
checking for libzip... not found
configure: error: Please reinstall the libzip distribution
vim ./configure
追踪$LIBZIP_LIBDIR,发现它是一个lib库:
save_old_LDFLAGS=$LDFLAGS
ac_stuff="
-L$LIBZIP_LIBDIR
"
再向上查找:
再向上找这个LIBZIP_LIBDIR变量的来源:
checking libzip... =================
echo $LIBZIP_LIBDIR
PHP旧版本,我这编译php55/ php56/ php7/ php71/ php72/ 都没有出现这个问题,php73出现了这个问题。
configure: error: Please reinstall the libzip distribution
rpm -ql libzip-devel|grep -v man
/usr/include/zip.h
/usr/include/zipconf-64.h
/usr/include/zipconf.h
/usr/lib64/libzip
/usr/lib64/libzip.so
/usr/lib64/libzip/include
/usr/lib64/libzip/include/zipconf.h
/usr/lib64/pkgconfig/libzip.pc
出现:
configure: error: Please reinstall the libzip distribution
于是:
yum install -y libzip-devel
编译PHP时出现新问题:
checking for libzip... configure: error: system libzip must be upgraded to version >= 0.11
error: Bad exit status from /root/rpmbuild/tmp/rpm-tmp.gsrSs0 (%build)
经过源码安装是最新的版本,解决办法:
再重新编译PHP7.3,后终于成功完成编译。
cat /usr/local/lib/pkgconfig/libzip.pc
find /usr/local/include/ -name "zip.h"
/usr/local/include/zip.h
rpm -qf /usr/local/include/zip.h
file /usr/local/include/zip.h is not owned by any package
rpm -qf /usr/local/include/zipconf.h
file /usr/local/include/zipconf.h is not owned by any package
ldd /usr/local/php/bin/php |grep libzip #php 7.3.12
libzip.so.5 => /usr/local/lib/libzip.so.5 (0x00007f3be1b38000)
旧的php,PHP 7.1.6,无任何返回:ldd /usr/local/php/bin/php |grep libzip
以上实践摘取自 :https://www.php.cn/php-weizijiaocheng-414091.html
https://blog.csdn.net/liuyeluoqing/article/details/81697954
https://blog.qzze.com/820.html
CentOS6.X上rpmbuild -ba memcache-php73-4.0.5.el6.x86_64.spec
出现error: Autoconf version 2.64 or higher is required :
https://blog.51cto.com/11736068/2110670
yum install xsel
=================================================================================================================================================================================
Package Arch Version Repository Size
=================================================================================================================================================================================
Installing:
xsel x86_64 1.2.0-15.el7 epel 24 k
Transaction Summary
==================================================================================================
Install 1 Package
Total download size: 24 k
Installed size: 39 k
ls ~+/php-7.3.12.tar.gz |xsel
xsel: Can't open display: (null)
: Inappropriate ioctl for device
实践来源:https://blog.csdn.net/qwfys200/article/details/82624336
=================================================================================================================================================================================
Package Arch Version Repository Size
=================================================================================================================================================================================
Installing:
xsel x86_64 1.2.0-15.el7 epel 24 k
Transaction Summary
==================================================================================================
Install 1 Package
Total download size: 24 k
Installed size: 39 k
ls ~+/php-7.3.12.tar.gz |xsel
xsel: Can't open display: (null)
: Inappropriate ioctl for device
实践来源:https://blog.csdn.net/qwfys200/article/details/82624336
背景:做开发时经常会遇到在当前目录打开终端的情况,一直都是先启动终端,然后再切换到当前目录,今天发现了一个新的方法,虽然不是一步到位,但比以前快多了。
打开finder,在屏幕的左上角菜单里:访达、服务、服务偏好设置...、快捷键Tab里:
选择其中的“新建位于文件夹位置的终端窗口”菜单项就会打开终端,打开后终端的当前工作目录就是文件夹的路径。一定要点中文件夹,右击空白地方弹出的右键菜单是不会有“服务”项的。
点击该项还可以为该操作设置快捷键:
点击弹出的服务偏好设置窗口中的“服务”并勾选“新建位于文件夹位置的终端窗口”;点击该项还可以为该操作设置快捷键。
使用:control+option+command+. #打开iterm终端,这个没有go2shell图标那个好用在只能在文件夹上使用,往往我们所谓的开发人员都是在文件夹里面想打开命令行。go2shell新版本使用不了了哟 https://jackxiang.com/post/10365/
来自:https://www.cnblogs.com/xqnq2007/p/7258428.html
打开finder,在屏幕的左上角菜单里:访达、服务、服务偏好设置...、快捷键Tab里:
选择其中的“新建位于文件夹位置的终端窗口”菜单项就会打开终端,打开后终端的当前工作目录就是文件夹的路径。一定要点中文件夹,右击空白地方弹出的右键菜单是不会有“服务”项的。
点击该项还可以为该操作设置快捷键:
点击弹出的服务偏好设置窗口中的“服务”并勾选“新建位于文件夹位置的终端窗口”;点击该项还可以为该操作设置快捷键。
使用:control+option+command+. #打开iterm终端,这个没有go2shell图标那个好用在只能在文件夹上使用,往往我们所谓的开发人员都是在文件夹里面想打开命令行。go2shell新版本使用不了了哟 https://jackxiang.com/post/10365/
来自:https://www.cnblogs.com/xqnq2007/p/7258428.html
解决Tomcat catalina.out 不断成长导致档案过大的问题:https://www.cnblogs.com/zhuawang/p/5053537.html
tomcat修改默认日志catalina.out的路径,来自:https://www.cnblogs.com/galsnag/p/11172002.html
tomcat修改默认日志catalina.out的路径,来自:https://www.cnblogs.com/galsnag/p/11172002.html
cdto版本有关,最新版的cdto如3.1.3得最新的macOS,实践发现3.0版本在mac air本11.7版本上的big sur上能用:
https://github.com/jbtule/cdto/releases
v3.0 (broken)
Only terminal.app version, I don't use the others, feel free to fork.
Notarized, so I think it should work on Catalina. (Tested on mojave)
cdto_3_0.zip:
最新版本的bigsur也能用:
Go2Shell 没有升级,没有办法,就直接找来了一个替代品。cd to, 下载入口如下:https://mac.softpedia.com/get/System-Utilities/cdto.shtml ,安装方法一样,选iterm2那个放到程序目录里,按下command拖动到finder上成后即可使用。
Download: https://us.softpedia-secure-download.com/dl/beb0c85587fe7d89c69546c8234ab4b3/5df849aa/400023757/mac/System-Utilities/cdto_2_6.zip
以上来自:https://juejin.im/post/5cfe82e15188252b1b0366e6
===========废弃=======
用法
安装go2shell后,打开finder的application文件夹,找到go2shell
按住command,用鼠标将go2shell拖到finder的toolbar上(一定要按住command,否则无法拖到上面去的。)
到这里安装设置完成。
如果要修改默认terminal,比如你想要在finder上点击go2shell,打开的是iterm2 而不是默认的terminal。
打开finder , 点击go2shell,设置默认iterm
而Go2Shell默认没有设置界面,需要用命令行打开(隐藏得真深啊!)
在打开的terminal中,输入: open -a Go2Shell —args config
在弹出框中选择 iterm2
吐槽一下:
推荐在App Store下载旧版本,因为官方网站最新版本已经变了,打开Go2Shell变成了设置界面,虽然不用再输入命令打开设置界面了,但是,事实上这变得更加坑了!
因为不能配合Alfred 和 Manico了!!!那还有个软用?
实践结果: 新的Mac版本用旧的go2shell图标上有一个横杠还是不能用,估计苹果自己想做到OS里去吧?譬如,mac 当前位置打开终端 :https://jackxiang.com/post/10367/
链接:https://www.jianshu.com/p/88c6e68645c4
更多:https://www.cnblogs.com/juking/p/7257251.html
下载:https://zipzapmac.com/Go2Shell
https://github.com/jbtule/cdto/releases
v3.0 (broken)
Only terminal.app version, I don't use the others, feel free to fork.
Notarized, so I think it should work on Catalina. (Tested on mojave)
cdto_3_0.zip:
下载文件
最新版本的bigsur也能用:
Go2Shell 没有升级,没有办法,就直接找来了一个替代品。cd to, 下载入口如下:https://mac.softpedia.com/get/System-Utilities/cdto.shtml ,安装方法一样,选iterm2那个放到程序目录里,按下command拖动到finder上成后即可使用。
Download: https://us.softpedia-secure-download.com/dl/beb0c85587fe7d89c69546c8234ab4b3/5df849aa/400023757/mac/System-Utilities/cdto_2_6.zip
以上来自:https://juejin.im/post/5cfe82e15188252b1b0366e6
===========废弃=======
用法
安装go2shell后,打开finder的application文件夹,找到go2shell
按住command,用鼠标将go2shell拖到finder的toolbar上(一定要按住command,否则无法拖到上面去的。)
到这里安装设置完成。
如果要修改默认terminal,比如你想要在finder上点击go2shell,打开的是iterm2 而不是默认的terminal。
打开finder , 点击go2shell,设置默认iterm
而Go2Shell默认没有设置界面,需要用命令行打开(隐藏得真深啊!)
在打开的terminal中,输入: open -a Go2Shell —args config
在弹出框中选择 iterm2
吐槽一下:
推荐在App Store下载旧版本,因为官方网站最新版本已经变了,打开Go2Shell变成了设置界面,虽然不用再输入命令打开设置界面了,但是,事实上这变得更加坑了!
因为不能配合Alfred 和 Manico了!!!那还有个软用?
实践结果: 新的Mac版本用旧的go2shell图标上有一个横杠还是不能用,估计苹果自己想做到OS里去吧?譬如,mac 当前位置打开终端 :https://jackxiang.com/post/10367/
链接:https://www.jianshu.com/p/88c6e68645c4
更多:https://www.cnblogs.com/juking/p/7257251.html
下载:https://zipzapmac.com/Go2Shell
[实践OK]macOS升级到Catalina之后使用SecureCRT报错问题
Unix/LinuxC技术 jackxiang 2019-12-14 21:36
macOS 升级到 Catalina之后,使用SecureCRT报如下错误
The permissions on the "/cores" directory need to be changed to
include write permission for "other".
Please execute (or ask an admin to execute) the following from a
terminal window:
sudo chmod go+w /cores
If you would prefer not to change the permissions on the /cores
folder, you can turn off the Global option "Create core file when
application crashes".
应该是macOS的权限控制严格了,导致CRT没有权限访问/cores文件夹,这里关掉CRT崩溃时创建core转储文件即可(实践发现:这个项是没有 checked的,还是老老实实的执行sudo chmod o+w /cores命令后重启后secureCRT就好了。)
Option --> Global Options 取消 Create core file when application crashes 前面的复选框选择即可
来自:https://blog.90.vc/archives/93.html
The permissions on the "/cores" directory need to be changed to
include write permission for "other".
Please execute (or ask an admin to execute) the following from a
terminal window:
sudo chmod go+w /cores
If you would prefer not to change the permissions on the /cores
folder, you can turn off the Global option "Create core file when
application crashes".
应该是macOS的权限控制严格了,导致CRT没有权限访问/cores文件夹,这里关掉CRT崩溃时创建core转储文件即可(实践发现:这个项是没有 checked的,还是老老实实的执行sudo chmod o+w /cores命令后重启后secureCRT就好了。)
Option --> Global Options 取消 Create core file when application crashes 前面的复选框选择即可
来自:https://blog.90.vc/archives/93.html
背景:chrome和secureCRT 开多个窗口时需要不同程序间的切换,快捷键的问题。
一)Mac同一应用打开两个:
open -n /Applications/SecureCRT.app
二)Mac同一应用打开两个,切换快捷键:
command + ~
不同程序之间的窗口切换快捷键是:command + tab,四个手指向上推动在控制板上,然后就能看到多个应用程序,进行切换。
但是我们经常在同一个程序中打开多个窗口,比如:safari,chrome,finder 等,这时候可以试下 command + ~,该快捷键可以实现同程序不同窗口之间的循环切换
From:https://professor-falken.com/zh/mac/como-abrir-varias-veces-la-misma-aplicacion-en-mac-os-x/
https://blog.csdn.net/JWheat/article/details/79965592
链接:https://www.jianshu.com/p/b2aa15362c4f
三)mac下面打开commands向多个终端发消息的快捷键:
option+command+M :session manage,定位到左侧服务器列表。
option+command+G :向各个终端发送命令(可同时发送)
command+I: 从会话管理里过滤出IP。
command+R: 直接输入IP并连接到对应的IP列表。(如果之前访问过,自动连接,否则得输入用户名密码)
+ -: 打开session manager里的目录,关闭目录。On Mac OS X, you can use "+" to expand all folders and "-" to collapse the selected folder.
一)Mac同一应用打开两个:
open -n /Applications/SecureCRT.app
二)Mac同一应用打开两个,切换快捷键:
command + ~
不同程序之间的窗口切换快捷键是:command + tab,四个手指向上推动在控制板上,然后就能看到多个应用程序,进行切换。
但是我们经常在同一个程序中打开多个窗口,比如:safari,chrome,finder 等,这时候可以试下 command + ~,该快捷键可以实现同程序不同窗口之间的循环切换
From:https://professor-falken.com/zh/mac/como-abrir-varias-veces-la-misma-aplicacion-en-mac-os-x/
https://blog.csdn.net/JWheat/article/details/79965592
链接:https://www.jianshu.com/p/b2aa15362c4f
三)mac下面打开commands向多个终端发消息的快捷键:
option+command+M :session manage,定位到左侧服务器列表。
option+command+G :向各个终端发送命令(可同时发送)
command+I: 从会话管理里过滤出IP。
command+R: 直接输入IP并连接到对应的IP列表。(如果之前访问过,自动连接,否则得输入用户名密码)
+ -: 打开session manager里的目录,关闭目录。On Mac OS X, you can use "+" to expand all folders and "-" to collapse the selected folder.
[实践OK]CentOS下C语言学习之经过函数复制字符串到指针在Clang中的函数失败的原因。
Unix/LinuxC技术 jackxiang 2019-11-29 14:44
想对指针类型里装的地址改动,在函数参数里需要两个**表明它是一个指向指针的指针(也就是传的是指针q的地址) ,ptr_copy(char ** d,char *s){ *d = s;} ,赋值里注意一下是*d =s(*d就是传指针地址的址,不再是值,也就是不会被在函数完成销毁后,外面值不会变,因为传的是指针q的地址。),也就是d里存指针地址*d表示,*d=s,s就是一个地址刚好能赋值。
更多说明帮助理解传参部分:
c语言菜鸟指针传递 问题 void func(char **p) {} int main(void) { char *q=null; func(&q); } p被赋值了神马 为什么俩星号?
p被赋值的是char* p的地址!你把char* 理解为一个变量就好理解了,就好比char a;char是变量类型,a是变量。既然是变量它就有地址,所以p也有地址,char **p,可以看成是 char* (*p)所以char** 被传的值是存放地址的变量的地址!
void func(char **p) {} //函数参数是指向指针的指针
int main(void)
{
char *q=null; //q定义为指针类型
func(&q); //&q,是取q的地址,q是一个指针类型,所以&q就是指针q的地址,即向指针的指针
}
来自:https://zhidao.baidu.com/question/686311732439253092.html
问:运行的以下clang代码,我希望输出ptr3=123与var相同ptr2的结果,但是结果是ptr3=(null)。如何修改我想要的结果代码?
gcc a.c -o a
./a
ptr2=123
ptr3=1PTI
让我们来看看您的“复制”功能:
void ptr_copy(char* d, char* s)
{
d = s;
}
在函数中,变量d是局部变量。一旦函数返回并d超出范围并终止其生命,对它的分配将丢失。
这使您ptr3在main函数中留下未初始化的变量,使用它会导致未定义的行为 -
如果要复制指针,则需要通过将指针传递给指针本身来模拟按引用传递:
void ptr_copy(char** d, char* s)
{
*d = s;
}
并称其为
ptr_copy(&ptr3, ptr)
需要的是一个不同的ptr_copy功能,如下所示:
void ptr_copy(char** dst, char* src) {
(*dst) = src;
}
ptr_copy(&ptr3, ptr);
这个想法是您将内容填充ptr到ptr3存储的位置(因此&ptr3,不是ptr3)。
当您将指针传递给函数时,该指针的值将被传递(即给定指针指向的地址)。因此,d内部ptr_copy的指针不同于(与该指针具有相同的值,但它位于内存的另一部分中)不同的指针。这就是为什么分配,更改地址指向的原因,但是对却没有任何作用。
确实考虑一个功能
void value_copy(int d, int s) {
d = s;
}
int i1 = 3;
int i3 = 2;
value_copy(i3, i1);
您不希望i3在调用后等于3 value_copy(),对吗?
正确调用如下:
#make a.c
cc a.c -o a
#./a
ptr2=123
ptr3=123
来自:https://stackoverflow.com/questions/59084119/copy-string-to-pointer-failed-in-function-in-clang
经GDB调试一下,发现其经过char ** d传参数进入函数后,实现了对传入的指针传址的d进行了修改,返回时也是作了修改,所以能正确指向123,GDB在打印时print ptr就是地址和值,如下:
(gdb) l
8 int main(){
9 char *ptr = "123";
10 char* ptr2;
11 char* ptr3;
12
13 ptr2 = ptr;
14 printf("ptr=%p\n", ptr);
15 printf("ptr2=%p\n", ptr2);
16 ptr_copy(&ptr3, ptr);
17 printf("ptr3=%p\n", ptr3);
(gdb) p ptr
$1 = 0x400670 "123"
(gdb) n
14 printf("ptr=%p\n", ptr);
(gdb) s
ptr=0x400670
15 printf("ptr2=%p\n", ptr2);
(gdb) p ptr
$3 = 0x400670 "123"
(gdb) s
ptr2=0x400670
16 ptr_copy(&ptr3, ptr);
(gdb) s
ptr_copy (d=0x7fffffffe498, s=0x400670 "123") at a.c:5
5 *d = s;
(gdb) p d
$4 = (char **) 0x7fffffffe498
(gdb) s
6 }
(gdb) s
main () at a.c:17
17 printf("ptr3=%p\n", ptr3);
(gdb) p ptr3
$6 = 0x400670 "123"
经过函数的运作,这个ptr,ptr2,ptr3都指向了0x400670,也就是123。
更多说明帮助理解传参部分:
c语言菜鸟指针传递 问题 void func(char **p) {} int main(void) { char *q=null; func(&q); } p被赋值了神马 为什么俩星号?
p被赋值的是char* p的地址!你把char* 理解为一个变量就好理解了,就好比char a;char是变量类型,a是变量。既然是变量它就有地址,所以p也有地址,char **p,可以看成是 char* (*p)所以char** 被传的值是存放地址的变量的地址!
void func(char **p) {} //函数参数是指向指针的指针
int main(void)
{
char *q=null; //q定义为指针类型
func(&q); //&q,是取q的地址,q是一个指针类型,所以&q就是指针q的地址,即向指针的指针
}
来自:https://zhidao.baidu.com/question/686311732439253092.html
问:运行的以下clang代码,我希望输出ptr3=123与var相同ptr2的结果,但是结果是ptr3=(null)。如何修改我想要的结果代码?
gcc a.c -o a
./a
ptr2=123
ptr3=1PTI
让我们来看看您的“复制”功能:
void ptr_copy(char* d, char* s)
{
d = s;
}
在函数中,变量d是局部变量。一旦函数返回并d超出范围并终止其生命,对它的分配将丢失。
这使您ptr3在main函数中留下未初始化的变量,使用它会导致未定义的行为 -
如果要复制指针,则需要通过将指针传递给指针本身来模拟按引用传递:
void ptr_copy(char** d, char* s)
{
*d = s;
}
并称其为
ptr_copy(&ptr3, ptr)
需要的是一个不同的ptr_copy功能,如下所示:
void ptr_copy(char** dst, char* src) {
(*dst) = src;
}
ptr_copy(&ptr3, ptr);
这个想法是您将内容填充ptr到ptr3存储的位置(因此&ptr3,不是ptr3)。
当您将指针传递给函数时,该指针的值将被传递(即给定指针指向的地址)。因此,d内部ptr_copy的指针不同于(与该指针具有相同的值,但它位于内存的另一部分中)不同的指针。这就是为什么分配,更改地址指向的原因,但是对却没有任何作用。
确实考虑一个功能
void value_copy(int d, int s) {
d = s;
}
int i1 = 3;
int i3 = 2;
value_copy(i3, i1);
您不希望i3在调用后等于3 value_copy(),对吗?
正确调用如下:
#make a.c
cc a.c -o a
#./a
ptr2=123
ptr3=123
来自:https://stackoverflow.com/questions/59084119/copy-string-to-pointer-failed-in-function-in-clang
经GDB调试一下,发现其经过char ** d传参数进入函数后,实现了对传入的指针传址的d进行了修改,返回时也是作了修改,所以能正确指向123,GDB在打印时print ptr就是地址和值,如下:
(gdb) l
8 int main(){
9 char *ptr = "123";
10 char* ptr2;
11 char* ptr3;
12
13 ptr2 = ptr;
14 printf("ptr=%p\n", ptr);
15 printf("ptr2=%p\n", ptr2);
16 ptr_copy(&ptr3, ptr);
17 printf("ptr3=%p\n", ptr3);
(gdb) p ptr
$1 = 0x400670 "123"
(gdb) n
14 printf("ptr=%p\n", ptr);
(gdb) s
ptr=0x400670
15 printf("ptr2=%p\n", ptr2);
(gdb) p ptr
$3 = 0x400670 "123"
(gdb) s
ptr2=0x400670
16 ptr_copy(&ptr3, ptr);
(gdb) s
ptr_copy (d=0x7fffffffe498, s=0x400670 "123") at a.c:5
5 *d = s;
(gdb) p d
$4 = (char **) 0x7fffffffe498
(gdb) s
6 }
(gdb) s
main () at a.c:17
17 printf("ptr3=%p\n", ptr3);
(gdb) p ptr3
$6 = 0x400670 "123"
经过函数的运作,这个ptr,ptr2,ptr3都指向了0x400670,也就是123。
[实践OK]Linux centos系统cached过高问题
Unix/LinuxC技术 jackxiang 2019-11-27 17:31
问题,之前以为是redis占用太多内存,后来发现是操作系统有问题:
free -m
total used free shared buffers cached
Mem: 7865 6138 1726 0 326 5110
-/+ buffers/cache: 701 7163
echo 1 > /proc/sys/vm/drop_caches
free -m
total used free shared buffers cached
Mem: 7865 530 7335 0 0 19
===============================================
Linux cached过高问题,手动释放cached
To free pagecache: echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes: echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes: echo 3 > /proc/sys/vm/drop_caches
来自:https://www.cnblogs.com/yanwei-wang/p/8133888.html
free -m
total used free shared buffers cached
Mem: 7865 6138 1726 0 326 5110
-/+ buffers/cache: 701 7163
echo 1 > /proc/sys/vm/drop_caches
free -m
total used free shared buffers cached
Mem: 7865 530 7335 0 0 19
===============================================
Linux cached过高问题,手动释放cached
To free pagecache: echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes: echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes: echo 3 > /proc/sys/vm/drop_caches
来自:https://www.cnblogs.com/yanwei-wang/p/8133888.html
一、Linux下经常会用到ldd查看程序使用了哪些共享链接库,很方便的一个工具,在Mac OS X上没有这个命令,如果想在Mac OS X查看程序使用了哪些链接库可以用otool 来代替。
otool -L `which nginx`
/usr/local/bin/nginx:
/usr/local/opt/pcre2/lib/libpcre2-8.0.dylib (compatibility version 12.0.0, current version 12.0.0)
/usr/local/opt/openssl@1.1/lib/libssl.1.1.dylib (compatibility version 1.1.0, current version 1.1.0)
/usr/local/opt/openssl@1.1/lib/libcrypto.1.1.dylib (compatibility version 1.1.0, current version 1.1.0)
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.11)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1311.100.3)
来自:http://t.zoukankan.com/amoy9812-p-12322060.html
二、Linux中的strace可以查看程序运行时的系统调用,有时对于调试程序很有帮助,Mac OS X中可用dtruss (需要root)替代
sudo dtruss
阅读全文
otool -L `which nginx`
/usr/local/bin/nginx:
/usr/local/opt/pcre2/lib/libpcre2-8.0.dylib (compatibility version 12.0.0, current version 12.0.0)
/usr/local/opt/openssl@1.1/lib/libssl.1.1.dylib (compatibility version 1.1.0, current version 1.1.0)
/usr/local/opt/openssl@1.1/lib/libcrypto.1.1.dylib (compatibility version 1.1.0, current version 1.1.0)
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.11)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1311.100.3)
来自:http://t.zoukankan.com/amoy9812-p-12322060.html
二、Linux中的strace可以查看程序运行时的系统调用,有时对于调试程序很有帮助,Mac OS X中可用dtruss (需要root)替代
sudo dtruss
阅读全文
[实践OK]在Linux系统上关闭rpc.statd服务的方法
Unix/LinuxC技术 jackxiang 2019-11-21 16:34
ss -lnt
LISTEN 0 128 *:57840 *:*
sudo lsof -i tcp:57840
rpc.statd 1453 rpcuser 9u IPv4 13387 0t0 TCP *:57840 (LISTEN)
ps -ef|grep 1453
rpcuser 1453 1 0 2018 ? 00:00:00 rpc.statd
rpm -qf /sbin/rpc.statd
nfs-utils-1.2.3-39.el6.x86_64
ls /etc/init.d/nfs*
/etc/init.d/nfslock status
vi /etc/services
nfs 2049/tcp nfsd shilp # Network File System
nfs 2049/udp nfsd shilp # Network File System
nfs 2049/sctp nfsd shilp # Network File System
找到里面的 nfs ,在前面加 # 注释掉,重启,我直接停掉服务。
/etc/init.d/nfslock stop
Stopping NFS statd: [ OK ]
来自:https://blog.csdn.net/maxuearn/article/details/79879607
LISTEN 0 128 *:57840 *:*
sudo lsof -i tcp:57840
rpc.statd 1453 rpcuser 9u IPv4 13387 0t0 TCP *:57840 (LISTEN)
ps -ef|grep 1453
rpcuser 1453 1 0 2018 ? 00:00:00 rpc.statd
rpm -qf /sbin/rpc.statd
nfs-utils-1.2.3-39.el6.x86_64
ls /etc/init.d/nfs*
/etc/init.d/nfslock status
vi /etc/services
nfs 2049/tcp nfsd shilp # Network File System
nfs 2049/udp nfsd shilp # Network File System
nfs 2049/sctp nfsd shilp # Network File System
找到里面的 nfs ,在前面加 # 注释掉,重启,我直接停掉服务。
/etc/init.d/nfslock stop
Stopping NFS statd: [ OK ]
来自:https://blog.csdn.net/maxuearn/article/details/79879607
[实践OK]swoole进程间通讯之将管道导出为一个SwooleCoroutineSocket对象,通过读写此Socket就可以实现通信。
Swoole专题研究 jackxiang 2019-11-13 16:10
(以下实例用到了assert,请确保php7的zend.assertions=1,或者 php -d "zend.assertions=1" 临时启用进行测试)
cat process.croutine.php
php -d "zend.assertions=1" process.croutine.php
hello proc1
proc1 stop
hello proc2
proc2 stop
来自:https://wiki.swoole.com/wiki/page/1061.html
cat process.croutine.php
php -d "zend.assertions=1" process.croutine.php
hello proc1
proc1 stop
hello proc2
proc2 stop
来自:https://wiki.swoole.com/wiki/page/1061.html