[实践OK]使用OSC52实现iTerm2远程pbcopy。
Php/Js/Shell/Go jackxiang 2020-5-25 10:26
从Macbook通过iTerm2的SSH连接到其它linux实现iTerm2远程pbcopy,前几周我也想过,但是不知怎么实现,
前两天鸟哥在其微信朋友圈里贴了一个PHP版本的实现思路,我这实践了一下,用Go语言实现了使用起来顺手,
于是在想,可能很多人都有这个需求,于是写下我的实现过程,拿走不谢,PHP是最好的语言没有之一,如下:
使用OSC52实现iTerm2远程pbcopy实现模仿Mac的pbcopy的拷贝最基础原理如下:
关于PHP实现的鸟哥版本pbcopy的详细情况见如下链接:
https://mp.weixin.qq.com/s/-aFTI32LWCJG_7aEuCUBgw
现在,开启swoole顾问的GO实现正文:
上面是摘录来自鸟哥的文章,他是用PHP实现了的,但是PHP不是每台机器都有且没有PHP怎么办呢?
于是用Go歪歪斜斜的写了一个,以力求实现功能就算是很OK了,实践发现果然OK的,有鸟哥加持嘛!
pbcopy.go
在MacBook上面编译成Linux上可运行的pbcopy,如不这样会报-bash: ./pbcopy: 无法执行二进制文件错:
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o pbcopy pbcopy.go
从MAC机上编译成功后把上面的二进制GO文件扔到CentOS的服务器上,修改iTerm2连接远程机器设置,
运行,就成功复制到Mac的剪切板上了,注意一定是用iTerm2软件下ssh连接远程服务器,不是在secureCRT:
echo "osc520 codes" | /home/xiangdong/bin/pbcopy
最后,就是把/home/xiangdong/bin/pbcopy 加到那个Linux 的环境PATH变量里了,如下:
chmod +x ~/bin/pbcopy
vim ~/.bashrc #/home/xiangdong/.bashrc 把这个pbcopy路径加到PATH环境变量里面去,下次不用再输入绝对路径了。
export PATH=/home/xiangdong/bin:$PATH
$tree ~+/bin/
/home/xiangdong/bin/
├── kubeladder
└── pbcopy
就可直接运行pbcopy了,不用加点了:
echo "osc520 codes" |pbcopy
最后,
鸟哥微信朋友圈问了一喙,这个能否在secureCRT里也支持一下呢,可不就可以批量部署到控制机上,拷贝操作更完美了。
目前在secreCRT里运行输出如下:
$echo "osc540 codes" |pbcopy
;;b3NjNTQwIGNvZGVz
乔大妈给了一个纯shell的白膘(月票)版本:
cat ~/.bashrc
alias pbcopy2="(printf '\033]1337;CopyToClipboard=\7'; cat -; printf '\033]1337;EndCopy\7')"
echo "osc520 codes" |pbcopy2
osc520 codes
osc52000 codes
前两天鸟哥在其微信朋友圈里贴了一个PHP版本的实现思路,我这实践了一下,用Go语言实现了使用起来顺手,
于是在想,可能很多人都有这个需求,于是写下我的实现过程,拿走不谢,PHP是最好的语言没有之一,如下:
使用OSC52实现iTerm2远程pbcopy实现模仿Mac的pbcopy的拷贝最基础原理如下:
关于PHP实现的鸟哥版本pbcopy的详细情况见如下链接:
https://mp.weixin.qq.com/s/-aFTI32LWCJG_7aEuCUBgw
现在,开启swoole顾问的GO实现正文:
上面是摘录来自鸟哥的文章,他是用PHP实现了的,但是PHP不是每台机器都有且没有PHP怎么办呢?
于是用Go歪歪斜斜的写了一个,以力求实现功能就算是很OK了,实践发现果然OK的,有鸟哥加持嘛!
pbcopy.go
在MacBook上面编译成Linux上可运行的pbcopy,如不这样会报-bash: ./pbcopy: 无法执行二进制文件错:
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o pbcopy pbcopy.go
从MAC机上编译成功后把上面的二进制GO文件扔到CentOS的服务器上,修改iTerm2连接远程机器设置,
运行,就成功复制到Mac的剪切板上了,注意一定是用iTerm2软件下ssh连接远程服务器,不是在secureCRT:
echo "osc520 codes" | /home/xiangdong/bin/pbcopy
最后,就是把/home/xiangdong/bin/pbcopy 加到那个Linux 的环境PATH变量里了,如下:
chmod +x ~/bin/pbcopy
vim ~/.bashrc #/home/xiangdong/.bashrc 把这个pbcopy路径加到PATH环境变量里面去,下次不用再输入绝对路径了。
export PATH=/home/xiangdong/bin:$PATH
$tree ~+/bin/
/home/xiangdong/bin/
├── kubeladder
└── pbcopy
就可直接运行pbcopy了,不用加点了:
echo "osc520 codes" |pbcopy
最后,
鸟哥微信朋友圈问了一喙,这个能否在secureCRT里也支持一下呢,可不就可以批量部署到控制机上,拷贝操作更完美了。
目前在secreCRT里运行输出如下:
$echo "osc540 codes" |pbcopy
;;b3NjNTQwIGNvZGVz
乔大妈给了一个纯shell的白膘(月票)版本:
cat ~/.bashrc
alias pbcopy2="(printf '\033]1337;CopyToClipboard=\7'; cat -; printf '\033]1337;EndCopy\7')"
echo "osc520 codes" |pbcopy2
osc520 codes
osc52000 codes
实际测试结果
创建 10000 个 TCP socket 会使用 31552 KB 内存(通过比较 /proc/meminfo 得出),即每个 TCP socket 占用 3.155 KB,这个数字很接近上面考虑 SLAB overhead 之后的计算结果。
代码:https://github.com/chenshuo/recipes/blob/master/tpc/bin/footprint.cc
小结
中文网络上这种似是而非、以讹传讹的说法很多,常见的还包括“epoll 快是因为用了共享内存来避免拷贝数据”等等,不可轻信。
来自:https://zhuanlan.zhihu.com/p/25241630
创建 10000 个 TCP socket 会使用 31552 KB 内存(通过比较 /proc/meminfo 得出),即每个 TCP socket 占用 3.155 KB,这个数字很接近上面考虑 SLAB overhead 之后的计算结果。
代码:https://github.com/chenshuo/recipes/blob/master/tpc/bin/footprint.cc
小结
中文网络上这种似是而非、以讹传讹的说法很多,常见的还包括“epoll 快是因为用了共享内存来避免拷贝数据”等等,不可轻信。
来自:https://zhuanlan.zhihu.com/p/25241630
[实践OK]Shell 脚本内的文件引用写法及两机房各抽一台机器出来隔15秒左右启动,可用在先后关停启动java进程上,实现对外持续服务。
Php/Js/Shell/Go jackxiang 2020-5-21 10:08
Shell 也可以包含外部脚本, 可以封装一些公共的代码为单独文件,需要用的时候直接引用。
方法有两种, 分别是.和source, 如下:
1)我看在centos6.X里面的/etc/init.d/nginx就是用的点空格引入的。
2)无论是source还是点空格最好是用绝对路径:
放在同一个目录下,所以source ./import.sh 引用看起来没有问题, 但是如果在上一层目录运行脚本时会出错,如下:
$ sh shell_testing/test.sh
shell_testing/test.sh: line 4: ./import.sh: No such file or directory
实践如下,相当于shell去包含./import.sh是从运行目录去包含的,去了上层目录就认为./import.sh是在上一层目录下面,所以得用绝对路径:
所以引用的话最好使用绝对路径, 其实也就是test.sh脚本的绝对路径,因为这两个脚本放在同一个目录下。
import.sh
test.sh
$./test.sh
LiLei
EOF
Your name is LiLei
注意:
1.两个点之间,有空格,千万注意.
2.两个脚本不在同一目录,要用绝对路径
3.为简单起见,通常用第一种方法
摘自链接:https://www.jianshu.com/p/cc4dda1fb77f
在两个机房里这两个VIP下面有很多的服务,如果用ansible一次性给干死了,但是这个java的进程要启动得15秒,也就出现了集体同时在启动中,没有对外服务,怎么办?只有先后启动,这时就有用了,两个机房的一些机器15秒后启动,一些机器立即启动,错开启动的好处是,两个机房能同时对外提供服务:
/data/www/ai.xxx.xxxx.com/server/start.sh
/data/www/ai.xxx.xxxx.com/server/stop.sh
延后启动的shell文件引用:
/data/www/ai.xxx.xxxx.com/bin/delayRestart.sh
直接启动的shell文件无 sleep 15:
还是相对路径问题,得修改这个jar包路径为绝对路径:
/data/www/ai.xxx.xxxx.com/bin/output.log
Error: Unable to access jarfile eladmin-system-3.1.jar
实践成功部署如下:
ansible ai_web -a'ps -eo pid,lstart,etime,cmd | grep eladmin-system|grep -v grep'
10.73.234.136 | CHANGED | rc=0 >>
24238 Thu May 21 14:21:03 2020 02:28 java -jar -Xms1024m -Xmx4096m -XX:MetaspaceSize=1024M -XX:MaxMetaspaceSize=4096m /data/www/ai.xxx.xxxx.com/server/eladmin-system-3.1.jar --spring.profiles.active=prod
10.73.234.137 | CHANGED | rc=0 >>
34282 Thu May 21 14:21:19 2020 02:12 java -jar -Xms1024m -Xmx4096m -XX:MetaspaceSize=1024M -XX:MaxMetaspaceSize=4096m /data/www/ai.xxx.xxxx.com/server/eladmin-system-3.1.jar --spring.profiles.active=prod
10.169.70.72 | CHANGED | rc=0 >>
52665 Thu May 21 14:21:19 2020 02:12 java -jar -Xms1024m -Xmx4096m -XX:MetaspaceSize=1024M -XX:MaxMetaspaceSize=4096m /data/www/ai.xxx.xxxx.com/server/eladmin-system-3.1.jar --spring.profiles.active=prod
10.169.70.71 | CHANGED | rc=0 >>
31033 Thu May 21 14:21:04 2020 02:27 java -jar -Xms1024m -Xmx4096m -XX:MetaspaceSize=1024M -XX:MaxMetaspaceSize=4096m /data/www/ai.xxx.xxxx.com/server/eladmin-system-3.1.jar --spring.profiles.active=prod
方法有两种, 分别是.和source, 如下:
1)我看在centos6.X里面的/etc/init.d/nginx就是用的点空格引入的。
2)无论是source还是点空格最好是用绝对路径:
放在同一个目录下,所以source ./import.sh 引用看起来没有问题, 但是如果在上一层目录运行脚本时会出错,如下:
$ sh shell_testing/test.sh
shell_testing/test.sh: line 4: ./import.sh: No such file or directory
实践如下,相当于shell去包含./import.sh是从运行目录去包含的,去了上层目录就认为./import.sh是在上一层目录下面,所以得用绝对路径:
所以引用的话最好使用绝对路径, 其实也就是test.sh脚本的绝对路径,因为这两个脚本放在同一个目录下。
import.sh
test.sh
$./test.sh
LiLei
EOF
Your name is LiLei
注意:
1.两个点之间,有空格,千万注意.
2.两个脚本不在同一目录,要用绝对路径
3.为简单起见,通常用第一种方法
摘自链接:https://www.jianshu.com/p/cc4dda1fb77f
在两个机房里这两个VIP下面有很多的服务,如果用ansible一次性给干死了,但是这个java的进程要启动得15秒,也就出现了集体同时在启动中,没有对外服务,怎么办?只有先后启动,这时就有用了,两个机房的一些机器15秒后启动,一些机器立即启动,错开启动的好处是,两个机房能同时对外提供服务:
/data/www/ai.xxx.xxxx.com/server/start.sh
/data/www/ai.xxx.xxxx.com/server/stop.sh
延后启动的shell文件引用:
/data/www/ai.xxx.xxxx.com/bin/delayRestart.sh
直接启动的shell文件无 sleep 15:
还是相对路径问题,得修改这个jar包路径为绝对路径:
/data/www/ai.xxx.xxxx.com/bin/output.log
Error: Unable to access jarfile eladmin-system-3.1.jar
实践成功部署如下:
ansible ai_web -a'ps -eo pid,lstart,etime,cmd | grep eladmin-system|grep -v grep'
10.73.234.136 | CHANGED | rc=0 >>
24238 Thu May 21 14:21:03 2020 02:28 java -jar -Xms1024m -Xmx4096m -XX:MetaspaceSize=1024M -XX:MaxMetaspaceSize=4096m /data/www/ai.xxx.xxxx.com/server/eladmin-system-3.1.jar --spring.profiles.active=prod
10.73.234.137 | CHANGED | rc=0 >>
34282 Thu May 21 14:21:19 2020 02:12 java -jar -Xms1024m -Xmx4096m -XX:MetaspaceSize=1024M -XX:MaxMetaspaceSize=4096m /data/www/ai.xxx.xxxx.com/server/eladmin-system-3.1.jar --spring.profiles.active=prod
10.169.70.72 | CHANGED | rc=0 >>
52665 Thu May 21 14:21:19 2020 02:12 java -jar -Xms1024m -Xmx4096m -XX:MetaspaceSize=1024M -XX:MaxMetaspaceSize=4096m /data/www/ai.xxx.xxxx.com/server/eladmin-system-3.1.jar --spring.profiles.active=prod
10.169.70.71 | CHANGED | rc=0 >>
31033 Thu May 21 14:21:04 2020 02:27 java -jar -Xms1024m -Xmx4096m -XX:MetaspaceSize=1024M -XX:MaxMetaspaceSize=4096m /data/www/ai.xxx.xxxx.com/server/eladmin-system-3.1.jar --spring.profiles.active=prod
弹出式窗口和重定向
开启或关闭弹出式窗口
在计算机上打开 Chrome。
在右上角,依次点击“更多”图标 展开 接着点按 设置。
在“隐私设置和安全性”下,点击网站设置。
点击弹出式窗口和重定向。
在顶部,将相应设置设为允许或已阻止。
新版:
chrome://settings/content/popups
旧版:chrome//settings/contentExceptions#popups
在chrome地址栏输入“chrome://settings/contentExceptions#popups”回车。
开启或关闭弹出式窗口
在计算机上打开 Chrome。
在右上角,依次点击“更多”图标 展开 接着点按 设置。
在“隐私设置和安全性”下,点击网站设置。
点击弹出式窗口和重定向。
在顶部,将相应设置设为允许或已阻止。
新版:
chrome://settings/content/popups
旧版:chrome//settings/contentExceptions#popups
在chrome地址栏输入“chrome://settings/contentExceptions#popups”回车。
测试不分语言,大都用Java搞,PHP也有mock如phpunit啥的:
不管是手动发送 HTTP 请求或是使用 Swagger 客户端,相关的测试用例都需要由测试人员来编写。当应用的业务逻辑比较复杂时,测试人员可能需要了解很多的业务知识,才能编写出正确的测试用例。以保险业务为例,一个理赔申请能否被批准,背后有复杂的业务逻辑来确定。这样的测试用例,如果由测试人员来编写,则可能的结果是测试用例所验证的情况,从业务逻辑上来说是错误的,起不到测试的效果。
更好的做法是由业务人员来编写测试用例,这样可以保证应用的实际行为,满足真实业务的期望。但是业务人员并不懂得编写代码。为了解决这个问题, 我们需要让业务人员以他们所能理解的方式来描述对不同行为的期望,这就是行为驱动开发(Behaviour Driven Development,BDD)的思想。
BDD 的出发点是提供了一种自然语言的方式来描述应用的行为,对行为的描述由 3 个部分组成,分别是前置条件、动作和期望结果,也就是 Given-When-Then 结构,该结构表达的是当对象处于某个状态中时,如果执行该对象的某个动作,所应该产生的结果是什么。比如,对于一个数据结构中常用的栈对象来说,在栈为空的前提下,如果执行栈的弹出动作,那么应该抛出异常;在栈不为空的前提下,如果执行栈的弹出动作,那么返回值应该是栈顶的元素。这样的行为描述,可以很容易转换成测试用例,来验证对象的实际行为。
BDD 一般使用自然语言来描述行为,业务人员使用自然语言来描述行为,形成 BDD 文档,这个文档是业务知识的具体化。我们只需要把这个文档转换成可执行的测试用例,就可以验证代码实现是否满足业务的需求。这个转换的过程需要工具的支持,本课时介绍的工具是 Cucumber。
Cucumber 使用名为 Gherkin 的语言来描述行为,Gherkin 语言使用半结构化的形式。下表给出了 Gherkin 语言中的常用结构。
清单表格:
不管是手动发送 HTTP 请求或是使用 Swagger 客户端,相关的测试用例都需要由测试人员来编写。当应用的业务逻辑比较复杂时,测试人员可能需要了解很多的业务知识,才能编写出正确的测试用例。以保险业务为例,一个理赔申请能否被批准,背后有复杂的业务逻辑来确定。这样的测试用例,如果由测试人员来编写,则可能的结果是测试用例所验证的情况,从业务逻辑上来说是错误的,起不到测试的效果。
更好的做法是由业务人员来编写测试用例,这样可以保证应用的实际行为,满足真实业务的期望。但是业务人员并不懂得编写代码。为了解决这个问题, 我们需要让业务人员以他们所能理解的方式来描述对不同行为的期望,这就是行为驱动开发(Behaviour Driven Development,BDD)的思想。
BDD 的出发点是提供了一种自然语言的方式来描述应用的行为,对行为的描述由 3 个部分组成,分别是前置条件、动作和期望结果,也就是 Given-When-Then 结构,该结构表达的是当对象处于某个状态中时,如果执行该对象的某个动作,所应该产生的结果是什么。比如,对于一个数据结构中常用的栈对象来说,在栈为空的前提下,如果执行栈的弹出动作,那么应该抛出异常;在栈不为空的前提下,如果执行栈的弹出动作,那么返回值应该是栈顶的元素。这样的行为描述,可以很容易转换成测试用例,来验证对象的实际行为。
BDD 一般使用自然语言来描述行为,业务人员使用自然语言来描述行为,形成 BDD 文档,这个文档是业务知识的具体化。我们只需要把这个文档转换成可执行的测试用例,就可以验证代码实现是否满足业务的需求。这个转换的过程需要工具的支持,本课时介绍的工具是 Cucumber。
Cucumber 使用名为 Gherkin 的语言来描述行为,Gherkin 语言使用半结构化的形式。下表给出了 Gherkin 语言中的常用结构。
清单表格:
大牛微信群札记,Mark下,应该有点干货,作下简单记录,那么年轻就被封神,
所以,出名还得趁早,可能和国外的计算机文化水平有关,有的娃估计三岁就学计算机,所以,我们还是要学先进啊,搞不定就靠下一代奋起直追吧,以下是顾问觉得有点意义的摘选:
之前rango兄弟做swoole开源项目 7-8年,现在也干不过年轻人了。
据说新一代的程序员,写出来的代码更有艺术气息。
像rango这样的大牛写的代码,都被年轻的开发者鄙视了,被吐槽多了,逐渐不写了。
下面这位是大神,年轻的大神:
php parser(https://github.com/nikic/PHP-Parser)原来就是这个年轻人搞的啊 厉害
这个得编译原理扎实才行,LLVM 作者,PHP7 作者,不像我们将就德国小伙,很严谨的。
现在都用 php -S 了,比 node 、golang 的 httpserver 要更易用。生产环境用 php-fpm + nginx ,现在 PHP7 很稳定。
以前 php 5.3 还有 coredump,php72 之后基本上没遇见。现在年轻人更进一步,全用 docker 了,不是docker替代fpm
docker pull 下载 php nginx fpm 还有一大堆扩展,然后 docker run 直接运行,零配置
像lvs 20年前老古董了,现在都不用这个。有更先进的 slb 软件,时光真TM快,真老了,不服不行,隔几年只扶墙了。
当前,可选的技术 太多了。php 的优势没那么明显,劣势又凸显出来。
Java 里面 spring boot, spring cloud 开发效率大大提升,以前 EJB、XML 那时代,Java 用起来很麻烦。现在又多了 Node.js、Golang 有异步 IO 、协程的特色功能。PHP 没什么亮点,缺点还挺多
有兄弟在富途推swoole:在富途推swoole,各种被老板们挑战,觉得出了问题,大部分人搞不定,所以迟迟推不动。
一阵讨论,还得把这个革新PHP的重任给年轻的大神,充满期待:
虽然能搞个 swoole 的扩展,但是也没有能力去改造 php ,这得依赖 Nikic 这样的计算机大神了。
rango兄弟的视界:
PHP 需要改造 VM 、标准库,第一 必须加入 JIT ,否则偏运算或者逻辑重的服务,性能不行。当然 VM 如果能内置 协程、多线程、异步 IO 会比较好。 第二 标准库太随意了,得好好设计一下,标准库根本没有 namespace ,太乱了。 Java、C++、Go、Node.js 标准库很规范的。PHP 语言不改变,可能逐渐就被时代抛弃了。
去年尝试了基于k8s / istio / grpc来做架构和业务
对比以前写PHP,真的太舒服了
下半年带我们团队转型golang了--2020/3/10 14:06
Go会不会是另一个强有力的挑战者?
golang 现在有点难用,没泛型。等 Golang 2 吧
年轻大神文章,学习下英语之用:https://nikic.github.io/2020/05/10/Make-LLVM-fast-again.html
About Me
Hi! My name is Nikita Popov, but you’ll mostly meet me as nikic on the internet. I’m working as a software developer at JetBrains on the PhpStorm team. Before that, I studied computer science and physics at the Technical University of Berlin. I contribute to the PHP and LLVM projects and maintain a number of open-source PHP libraries.
Feel free to contact me via nikic@php.net. Alternatively you can usually find me in the PHP chatroom on StackOverflow.
Projects
My most popular open-source projects, sorted by stars:
PHP-Parser – A PHP parser written in PHP
FastRoute – Fast request router for PHP
scalar_objects – Extension that adds support for method calls on primitive types in PHP
iter – Iteration primitives using generators
php-ast – Extension exposing PHP 7 abstract syntax tree
PHP-Fuzzer – A fuzzer for PHP libraries
Accepted PHP proposals
PHP 8.0:
自我介绍:https://nikic.github.io/aboutMe.html
所以,出名还得趁早,可能和国外的计算机文化水平有关,有的娃估计三岁就学计算机,所以,我们还是要学先进啊,搞不定就靠下一代奋起直追吧,以下是顾问觉得有点意义的摘选:
之前rango兄弟做swoole开源项目 7-8年,现在也干不过年轻人了。
据说新一代的程序员,写出来的代码更有艺术气息。
像rango这样的大牛写的代码,都被年轻的开发者鄙视了,被吐槽多了,逐渐不写了。
下面这位是大神,年轻的大神:
php parser(https://github.com/nikic/PHP-Parser)原来就是这个年轻人搞的啊 厉害
这个得编译原理扎实才行,LLVM 作者,PHP7 作者,不像我们将就德国小伙,很严谨的。
现在都用 php -S 了,比 node 、golang 的 httpserver 要更易用。生产环境用 php-fpm + nginx ,现在 PHP7 很稳定。
以前 php 5.3 还有 coredump,php72 之后基本上没遇见。现在年轻人更进一步,全用 docker 了,不是docker替代fpm
docker pull 下载 php nginx fpm 还有一大堆扩展,然后 docker run 直接运行,零配置
像lvs 20年前老古董了,现在都不用这个。有更先进的 slb 软件,时光真TM快,真老了,不服不行,隔几年只扶墙了。
当前,可选的技术 太多了。php 的优势没那么明显,劣势又凸显出来。
Java 里面 spring boot, spring cloud 开发效率大大提升,以前 EJB、XML 那时代,Java 用起来很麻烦。现在又多了 Node.js、Golang 有异步 IO 、协程的特色功能。PHP 没什么亮点,缺点还挺多
有兄弟在富途推swoole:在富途推swoole,各种被老板们挑战,觉得出了问题,大部分人搞不定,所以迟迟推不动。
一阵讨论,还得把这个革新PHP的重任给年轻的大神,充满期待:
虽然能搞个 swoole 的扩展,但是也没有能力去改造 php ,这得依赖 Nikic 这样的计算机大神了。
rango兄弟的视界:
PHP 需要改造 VM 、标准库,第一 必须加入 JIT ,否则偏运算或者逻辑重的服务,性能不行。当然 VM 如果能内置 协程、多线程、异步 IO 会比较好。 第二 标准库太随意了,得好好设计一下,标准库根本没有 namespace ,太乱了。 Java、C++、Go、Node.js 标准库很规范的。PHP 语言不改变,可能逐渐就被时代抛弃了。
去年尝试了基于k8s / istio / grpc来做架构和业务
对比以前写PHP,真的太舒服了
下半年带我们团队转型golang了--2020/3/10 14:06
Go会不会是另一个强有力的挑战者?
golang 现在有点难用,没泛型。等 Golang 2 吧
年轻大神文章,学习下英语之用:https://nikic.github.io/2020/05/10/Make-LLVM-fast-again.html
About Me
Hi! My name is Nikita Popov, but you’ll mostly meet me as nikic on the internet. I’m working as a software developer at JetBrains on the PhpStorm team. Before that, I studied computer science and physics at the Technical University of Berlin. I contribute to the PHP and LLVM projects and maintain a number of open-source PHP libraries.
Feel free to contact me via nikic@php.net. Alternatively you can usually find me in the PHP chatroom on StackOverflow.
Projects
My most popular open-source projects, sorted by stars:
PHP-Parser – A PHP parser written in PHP
FastRoute – Fast request router for PHP
scalar_objects – Extension that adds support for method calls on primitive types in PHP
iter – Iteration primitives using generators
php-ast – Extension exposing PHP 7 abstract syntax tree
PHP-Fuzzer – A fuzzer for PHP libraries
Accepted PHP proposals
PHP 8.0:
自我介绍:https://nikic.github.io/aboutMe.html
curl "http://111.206.176.86/style/home.css" -H "Host:ishow.cctv.com" -H "Range:bytes=0-18446744073709551615"
wget "http://ishow.cctv.com/style/home.css" -S --limit-rate=1M --debug --header="Range: bytes=0-18446744073709551615"
未编译调试支持,忽略 --debug。
--2020-05-05 19:32:50-- http://ishow.cctv.com/style/home.css
正在解析主机 ishow.cctv.com (ishow.cctv.com)... 111.206.176.86
正在连接 ishow.cctv.com (ishow.cctv.com)|111.206.176.86|:80... 已连接。
已发出 HTTP 请求,正在等待回应...
HTTP/1.1 200 OK
Date: Tue, 05 May 2020 11:32:50 GMT
Content-Type: text/css
Content-Length: 3500
Connection: keep-alive
Expires: Tue, 05 May 2020 12:32:50 GMT
Server: nginx
Last-Modified: Thu, 23 Apr 2020 04:44:15 GMT
ETag: "5ea11d1f-dac"
Cache-Control: max-age=3600
ip_network: 32.33
Accept-Ranges: bytes
X-Via: 1.1 dwt194:13 (Cdn Cache Server V2.0), 1.1 PS-PEK-01mW4204:7 (Cdn Cache Server V2.0)
X-Ws-Request-Id: 5eb14ee2_t205_53295-12877
长度:3500 (3.4K) [text/css]
正在保存至: “home.css.1”
home.css.1 100%[============================================================================================>] 3.42K --.-KB/s 用时 0s
2020-05-05 19:32:50 (159 MB/s) - 已保存 “home.css.1” [3500/3500])
若IIS服务器返回“Requested Range Not Satisfiable”,则是存在漏洞,否则如果返回”The request has an invalid header name“,则说明漏洞已经修补。
阅读全文
wget "http://ishow.cctv.com/style/home.css" -S --limit-rate=1M --debug --header="Range: bytes=0-18446744073709551615"
未编译调试支持,忽略 --debug。
--2020-05-05 19:32:50-- http://ishow.cctv.com/style/home.css
正在解析主机 ishow.cctv.com (ishow.cctv.com)... 111.206.176.86
正在连接 ishow.cctv.com (ishow.cctv.com)|111.206.176.86|:80... 已连接。
已发出 HTTP 请求,正在等待回应...
HTTP/1.1 200 OK
Date: Tue, 05 May 2020 11:32:50 GMT
Content-Type: text/css
Content-Length: 3500
Connection: keep-alive
Expires: Tue, 05 May 2020 12:32:50 GMT
Server: nginx
Last-Modified: Thu, 23 Apr 2020 04:44:15 GMT
ETag: "5ea11d1f-dac"
Cache-Control: max-age=3600
ip_network: 32.33
Accept-Ranges: bytes
X-Via: 1.1 dwt194:13 (Cdn Cache Server V2.0), 1.1 PS-PEK-01mW4204:7 (Cdn Cache Server V2.0)
X-Ws-Request-Id: 5eb14ee2_t205_53295-12877
长度:3500 (3.4K) [text/css]
正在保存至: “home.css.1”
home.css.1 100%[============================================================================================>] 3.42K --.-KB/s 用时 0s
2020-05-05 19:32:50 (159 MB/s) - 已保存 “home.css.1” [3500/3500])
若IIS服务器返回“Requested Range Not Satisfiable”,则是存在漏洞,否则如果返回”The request has an invalid header name“,则说明漏洞已经修补。
阅读全文
“Wi-Fi”有自分配的 IP 地址“169.254.67.68”,将无法接入互联网。这是为什么?之前还是好的,突然无法上网,怎么办?
一)是不是服务有问题,于是按如下操作,还是不行:
步骤如下: 1、打开【运行】(Win+R组合键),输入services.msc 点击确定打开服务界面。
2、在服务界面中却确保【wired auto config】和【WLan
autoconfig】两个服务正常运行,如果未运行,首先将“启动类型”修改为“自动”,点击【应用】—【启动】—【确定】即可。
3、在开始菜单上单击鼠标右键,在弹出的菜单中点击“网络连接”。
4、将以太网单击右键,选择“禁用”,然后重新启用。
5、在开始菜单上单击鼠标右键,在弹出的菜单中点击“命令提示符(管理员)”。
6、在命令提示符框中输入:netsh winsock reset 按下回车键,会提示:成功地重置 Winsock
目录;(电脑中安装了杀毒软件的可能会弹出组织窗口,我们选择允许操作即可)。
7、重启后一般可以解决问题。
二)自己固定IP地址,发现10.10.0.64没有申请到,得到169.254.244.37(首选):
以太网适配器 Npcap Loopback Adapter:
连接特定的 DNS 后缀 . . . . . . . :
描述. . . . . . . . . . . . . . . : Npcap Loopback Adapter
物理地址. . . . . . . . . . . . . : 02-00-4C-4F-4F-50
DHCP 已启用 . . . . . . . . . . . : 是
自动配置已启用. . . . . . . . . . : 是
自动配置 IPv4 地址 . . . . . . . : 169.254.244.37(首选)
子网掩码 . . . . . . . . . . . . : 255.255.0.0
三)于是查到这个IP有个虚拟机给用了,如下:
[root@10_10_0_64:~]
#ifconfig |grep 08:00:27:86:d1:06
ether 08:00:27:86:d1:06 txqueuelen 1000 (Ethernet)
果然是IP冲突引起的:
出现自动配置IPv4地址169.254.x.x首选地址,IP地址冲突造成
问题症状:由于ip冲突后,IP地址的现实,用命令ipconfig /all 会出现ipv4地址,首选地址,之后计算机出去就会用这个首选地址,造成网络不通。(一般XP会间歇性的提示IP冲突,win7 在开始设置的时候一般也会提示,如果不提示,问题应该是因为IP地址冲突造成这样出现ipv4首选地址)
查看方法:1、运行-〉cmd-〉ipconfig /all
解决方法:如果是重要IP,通过解析地址,找到使用IP的计算机与其更换IP。或者给出问题的计算机更换IP。
最后,直接在路由器里绑定IP到一个较高位的地址,解决了问题。
一)是不是服务有问题,于是按如下操作,还是不行:
步骤如下: 1、打开【运行】(Win+R组合键),输入services.msc 点击确定打开服务界面。
2、在服务界面中却确保【wired auto config】和【WLan
autoconfig】两个服务正常运行,如果未运行,首先将“启动类型”修改为“自动”,点击【应用】—【启动】—【确定】即可。
3、在开始菜单上单击鼠标右键,在弹出的菜单中点击“网络连接”。
4、将以太网单击右键,选择“禁用”,然后重新启用。
5、在开始菜单上单击鼠标右键,在弹出的菜单中点击“命令提示符(管理员)”。
6、在命令提示符框中输入:netsh winsock reset 按下回车键,会提示:成功地重置 Winsock
目录;(电脑中安装了杀毒软件的可能会弹出组织窗口,我们选择允许操作即可)。
7、重启后一般可以解决问题。
二)自己固定IP地址,发现10.10.0.64没有申请到,得到169.254.244.37(首选):
以太网适配器 Npcap Loopback Adapter:
连接特定的 DNS 后缀 . . . . . . . :
描述. . . . . . . . . . . . . . . : Npcap Loopback Adapter
物理地址. . . . . . . . . . . . . : 02-00-4C-4F-4F-50
DHCP 已启用 . . . . . . . . . . . : 是
自动配置已启用. . . . . . . . . . : 是
自动配置 IPv4 地址 . . . . . . . : 169.254.244.37(首选)
子网掩码 . . . . . . . . . . . . : 255.255.0.0
三)于是查到这个IP有个虚拟机给用了,如下:
[root@10_10_0_64:~]
#ifconfig |grep 08:00:27:86:d1:06
ether 08:00:27:86:d1:06 txqueuelen 1000 (Ethernet)
果然是IP冲突引起的:
出现自动配置IPv4地址169.254.x.x首选地址,IP地址冲突造成
问题症状:由于ip冲突后,IP地址的现实,用命令ipconfig /all 会出现ipv4地址,首选地址,之后计算机出去就会用这个首选地址,造成网络不通。(一般XP会间歇性的提示IP冲突,win7 在开始设置的时候一般也会提示,如果不提示,问题应该是因为IP地址冲突造成这样出现ipv4首选地址)
查看方法:1、运行-〉cmd-〉ipconfig /all
解决方法:如果是重要IP,通过解析地址,找到使用IP的计算机与其更换IP。或者给出问题的计算机更换IP。
最后,直接在路由器里绑定IP到一个较高位的地址,解决了问题。
[实践OK]Linux中查看日志文件的正确姿势,求你别tail走天下了!
Unix/LinuxC技术 jackxiang 2020-3-20 10:58
摘录作为一个后端开发工程师,在Linux中查看查看文件内容是基本操作了。尤其是通常要分析日志文件排查问题,那么我们应该如何正确打开日志文件呢?对于笔者这种小菜鸡来说,第一反应就是 cat,tail,vi(或vim)了,是的,我曾经用过好多次vim编辑器来查看日志文件(可耻)。
千万不要使用vi命令来查看大文件内容, 尤其对于那些几十G的大文件。因为vi仅仅是一个编辑器(可以理解为windows中的记事本),使用vi命令后则会把文件所有内容加载到内存中,如果内存不够大的话,则可能会导致服务器瘫痪。
cat test.txt
第1行
第2行
第3行
第4行
第5行
第6行
第7行
第8行
第9行
第10行
不按脚本,直接每一行都有行号:
cat test.txt
第1行
第2行
第3行
第4行
第5行
第6行
第7行
第8行
第9行
第10行
第11行
第12行
第13行
第14行
第15行
第16行
第17行
第18行
第19行
第20行
第21行
less
less命令比more更加有弹性,可以前后翻页,不止可以向上查找,也可以向下查找。
按键/命令
[pagedown] :向下翻页
[pageup] :向上翻页
/字符串:在当前显示的内容(翻页进度位置),向下查找这个字符串关键字
?字符串:向上查找字符串
n :重复前一个查找,与/或?有关, 比如前一个命令是?表示向上查找,此时n会向上查找
N: 反向的重复前一个查找
g :跳转到当前文件数据的第一行
G :跳转到当前文件数据的最后一行
q :退出当前文件的浏览
范例演示
数据截取
head
head命令用来提取文件的前n行,一般配合使用-n选项。当指定的行数为负数-x时,则会打印出除了后面x行的其他所有数据。
范例1:查看前10行数据
head -n 10 test.txt
head -n 10 test.txt
cat test.txt
第1行
第2行
第3行
第4行
第5行
第6行
第7行
第8行
第9行
第10行
范例2(一共10000行,没有空行):head -n -9989 test.txt
tail
从文件尾部截取数据。tail也是工作中最常用的命令,因为可以利用-f选项,一直刷新获取文件尾部最新数据。
选项与参数
-n : 查看后n行数据,注意当n后面值带“+”号表示从第x行开始, 如 tail -n +1000 test.txt
-f : 展示文件后面
范例1:查看尾部5行数据【tail -n 5 test.txt】
范例2:查看文件尾部数据,并实时刷新数据
tail -f test.txt
范例3:查看文件尾部5行数据,并实时刷新数据
tail -n 5 -f test.txt
通用命令
管道:Shell 还有一种功能,就是可以将两个或者多个命令(程序或者进程)连接到一起,把一个命令的输出作为下一个命令的输入,以这种方式连接的两个或者多个命令就形成了管道(pipe),管道命令用"|"来表示。
范例:查看ll命令输出的前10行
ll | head -n 3
ll | head -n 10
grep :命令用于查找文件里符合条件的字符串,这两个命令也是linux中最常用的的,而在查看日志文件也通常会结合这两个命令一起使用。
范例:查看文件文件中那些行包含‘999’
cat -n test.txt | grep '999'
>> : 文件追加重定向命令,可以往文件末尾追加数据,正如上文 echo "第$i行" >> test.txt。
范例:将一个文件的最后10行复制到helloworld.txt中
tail -n 10 >> helloworld.txt
wc:文件字节数,字数,行数查看wc [-clw] [文件...],
-c或--bytes或--chars 只显示Bytes数。
-l或--lines 只显示行数。
-w或--words 只显示字数。
范例:查看文件行数
wc -l
案例实战
案例1:打印日志文件中第11到20行。
思路:首先获取前20行,然后在获取20行的后10行即可,需要使用管道命令。
head -n 20 text.txt | tail -n 10 #head和tail都是-n ,head -n 是头n行,tail -n是从第n+1行到行尾
cat -n test.txt | head -n 20 | tail -n 10(如果需要显示行号)
分解:
head -n 20 text.txt
cat test.txt
第1行
第2行
第3行
第4行
第5行
第6行
第7行
第8行
第9行
第10行
第11行
第12行
第13行
第14行
第15行
第16行
第17行
第18行
第19行
第20行
第二步,将上在输出通过管道从11行到最后:
head -n 20 test.txt |tail -n 10
第11行
第12行
第13行
第14行
第15行
第16行
第17行
第18行
第19行
第20行
来自:https://mp.weixin.qq.com/s/Q-NfY2sr4n2XiJwy8SsXDA
千万不要使用vi命令来查看大文件内容, 尤其对于那些几十G的大文件。因为vi仅仅是一个编辑器(可以理解为windows中的记事本),使用vi命令后则会把文件所有内容加载到内存中,如果内存不够大的话,则可能会导致服务器瘫痪。
cat test.txt
第1行
第2行
第3行
第4行
第5行
第6行
第7行
第8行
第9行
第10行
不按脚本,直接每一行都有行号:
cat test.txt
第1行
第2行
第3行
第4行
第5行
第6行
第7行
第8行
第9行
第10行
第11行
第12行
第13行
第14行
第15行
第16行
第17行
第18行
第19行
第20行
第21行
less
less命令比more更加有弹性,可以前后翻页,不止可以向上查找,也可以向下查找。
按键/命令
[pagedown] :向下翻页
[pageup] :向上翻页
/字符串:在当前显示的内容(翻页进度位置),向下查找这个字符串关键字
?字符串:向上查找字符串
n :重复前一个查找,与/或?有关, 比如前一个命令是?表示向上查找,此时n会向上查找
N: 反向的重复前一个查找
g :跳转到当前文件数据的第一行
G :跳转到当前文件数据的最后一行
q :退出当前文件的浏览
范例演示
数据截取
head
head命令用来提取文件的前n行,一般配合使用-n选项。当指定的行数为负数-x时,则会打印出除了后面x行的其他所有数据。
范例1:查看前10行数据
head -n 10 test.txt
head -n 10 test.txt
cat test.txt
第1行
第2行
第3行
第4行
第5行
第6行
第7行
第8行
第9行
第10行
范例2(一共10000行,没有空行):head -n -9989 test.txt
tail
从文件尾部截取数据。tail也是工作中最常用的命令,因为可以利用-f选项,一直刷新获取文件尾部最新数据。
选项与参数
-n : 查看后n行数据,注意当n后面值带“+”号表示从第x行开始, 如 tail -n +1000 test.txt
-f : 展示文件后面
范例1:查看尾部5行数据【tail -n 5 test.txt】
范例2:查看文件尾部数据,并实时刷新数据
tail -f test.txt
范例3:查看文件尾部5行数据,并实时刷新数据
tail -n 5 -f test.txt
通用命令
管道:Shell 还有一种功能,就是可以将两个或者多个命令(程序或者进程)连接到一起,把一个命令的输出作为下一个命令的输入,以这种方式连接的两个或者多个命令就形成了管道(pipe),管道命令用"|"来表示。
范例:查看ll命令输出的前10行
ll | head -n 3
ll | head -n 10
grep :命令用于查找文件里符合条件的字符串,这两个命令也是linux中最常用的的,而在查看日志文件也通常会结合这两个命令一起使用。
范例:查看文件文件中那些行包含‘999’
cat -n test.txt | grep '999'
>> : 文件追加重定向命令,可以往文件末尾追加数据,正如上文 echo "第$i行" >> test.txt。
范例:将一个文件的最后10行复制到helloworld.txt中
tail -n 10 >> helloworld.txt
wc:文件字节数,字数,行数查看wc [-clw] [文件...],
-c或--bytes或--chars 只显示Bytes数。
-l或--lines 只显示行数。
-w或--words 只显示字数。
范例:查看文件行数
wc -l
案例实战
案例1:打印日志文件中第11到20行。
思路:首先获取前20行,然后在获取20行的后10行即可,需要使用管道命令。
head -n 20 text.txt | tail -n 10 #head和tail都是-n ,head -n 是头n行,tail -n是从第n+1行到行尾
cat -n test.txt | head -n 20 | tail -n 10(如果需要显示行号)
分解:
head -n 20 text.txt
cat test.txt
第1行
第2行
第3行
第4行
第5行
第6行
第7行
第8行
第9行
第10行
第11行
第12行
第13行
第14行
第15行
第16行
第17行
第18行
第19行
第20行
第二步,将上在输出通过管道从11行到最后:
head -n 20 test.txt |tail -n 10
第11行
第12行
第13行
第14行
第15行
第16行
第17行
第18行
第19行
第20行
来自:https://mp.weixin.qq.com/s/Q-NfY2sr4n2XiJwy8SsXDA
[实践OK]Mac 下安装使用tac命令
Unix/LinuxC技术 jackxiang 2020-3-20 10:18
Mac 下安装使用tac命令:
1. 安装coreutils软件包:
brew install coreutils
ln -s /usr/local/bin/gtac /usr/local/bin/tac
2. 在MAC 上使用tail命令代替:
tail -r filename
Error: Cannot install coreutils because conflicting formulae are installed.
md5sha1sum: because both install `md5sum` and `sha1sum` binaries
Please `brew unlink md5sha1sum` before continuing.
来自:https://blog.csdn.net/dongwuming/article/details/50836723?utm_source=blogxgwz6
1. 安装coreutils软件包:
brew install coreutils
ln -s /usr/local/bin/gtac /usr/local/bin/tac
2. 在MAC 上使用tail命令代替:
tail -r filename
Error: Cannot install coreutils because conflicting formulae are installed.
md5sha1sum: because both install `md5sum` and `sha1sum` binaries
Please `brew unlink md5sha1sum` before continuing.
来自:https://blog.csdn.net/dongwuming/article/details/50836723?utm_source=blogxgwz6
一、下面这个优秀的Websocket的工具我放这儿了:
http://wstool.jackxiang.com/
WebSocket 在线调试工具:
http://www.easyswoole.com/wstool.html
这个链接地址歇菜了,顾问微信问了下easyswoole框架作者张一丰也没个回应,
一个不错的调试工具,为方便Websocket调试,顾问给搭建了一个,地址如下:
http://wstool.jackxiang.com/
二、Google的Chrome扩展叫:Ctool 程序开发常用工具。
来自:https://blog.csdn.net/u010844836/article/details/135253498
EOF
http://wstool.jackxiang.com/
WebSocket 在线调试工具:
http://www.easyswoole.com/wstool.html
这个链接地址歇菜了,顾问微信问了下easyswoole框架作者张一丰也没个回应,
一个不错的调试工具,为方便Websocket调试,顾问给搭建了一个,地址如下:
http://wstool.jackxiang.com/
二、Google的Chrome扩展叫:Ctool 程序开发常用工具。
来自:https://blog.csdn.net/u010844836/article/details/135253498
EOF
[实践OK]Linux下tar命令implausibly old time stamp错误的解决方法
Unix/LinuxC技术 jackxiang 2020-3-10 22:06
背景:打包yum的仓库文件到外网机器解压时发现的,这个问题可以忽略,一般来讲,不影响正常使用。
今天头一次见到tar zxf files.tar.gz 会出现包内文件报错, implausibly old time stamp的问题,
由于压缩包是自己打包的, 单独访问的时候文件都是正常的. 后面搜索测试了一下问题解决了. 在此记录一下:. B$ r/ i7 W) z, U9 o k( ^3 n
先把原文件(打包前的文件) 执行一下命令:: B3 A6 k# w* e- {* h
touch *
同步一下文件时间. 再重新打包, 然后再测试解包, ok 问题解决了.7 v0 Y9 p9 Q5 }' l& s5 @2 t6 s
0 ~/ D( S1 z0 T: Z
扩展:
文件时间大于你的系统时间,也就是说文件是早于当前时间创建/修改的,这个问题可以忽略,一般来讲,不影响正常使用。" {# L/ H8 ~1 _" g- B5 i
你也可以在展开文件后,用命令 “touch * ” 同步文件时间。( {+ H5 b V+ d% @5 ?
参考:http://forum.ubuntu.org.cn/viewtopic.php?p=2059005
今天头一次见到tar zxf files.tar.gz 会出现包内文件报错, implausibly old time stamp的问题,
由于压缩包是自己打包的, 单独访问的时候文件都是正常的. 后面搜索测试了一下问题解决了. 在此记录一下:. B$ r/ i7 W) z, U9 o k( ^3 n
先把原文件(打包前的文件) 执行一下命令:: B3 A6 k# w* e- {* h
touch *
同步一下文件时间. 再重新打包, 然后再测试解包, ok 问题解决了.7 v0 Y9 p9 Q5 }' l& s5 @2 t6 s
0 ~/ D( S1 z0 T: Z
扩展:
文件时间大于你的系统时间,也就是说文件是早于当前时间创建/修改的,这个问题可以忽略,一般来讲,不影响正常使用。" {# L/ H8 ~1 _" g- B5 i
你也可以在展开文件后,用命令 “touch * ” 同步文件时间。( {+ H5 b V+ d% @5 ?
参考:http://forum.ubuntu.org.cn/viewtopic.php?p=2059005
[实践OK]pkg install lsof -y无法安装和pkg install -y lsof是有区别的,FreeBSD中安装pkg,pkg_add已经改用pkg了,怎样查询一个文件属于哪个ports包,类似CentOS里面的rpm -qf file反查在哪你上rpm包里面一样的命令是pkg which /usr/local/lib/libicuio.so.58
Unix/LinuxC技术 jackxiang 2020-2-27 00:33
FreeBSD下面检查某程序是不是包的形式安装的命令行:
pkg info -l curl|grep curl.h
/usr/local/include/curl/curl.h
/usr/local/include/curl/header.h
pkg info -l curl|grep so
/usr/local/include/curl/websockets.h
/usr/local/lib/libcurl.so
/usr/local/lib/libcurl.so.4
/usr/local/lib/libcurl.so.4.8.0
pkg info #查看BSD系统中安装了哪些pkg包
pkg info lrzsz-0.12.20_4 #查看具体某个包信息
pkg info -l lrzsz-0.12.20_4 #查看此包有哪些文件
lrzsz-0.12.20_4:
/usr/local/bin/lrb
/usr/local/bin/lrx
/usr/local/bin/lrz
/usr/local/bin/lsb
/usr/local/bin/lsx
/usr/local/bin/lsz
/usr/local/man/man1/lrz.1.gz
/usr/local/man/man1/lsz.1.gz
/usr/local/share/licenses/lrzsz-0.12.20_4/GPLv2
/usr/local/share/licenses/lrzsz-0.12.20_4/LICENSE
/usr/local/share/licenses/lrzsz-0.12.20_4/catalog.mk
/usr/local/share/locale/de/LC_MESSAGES/lrzsz.mo
据下面的这个文件, /usr/local/share/locale/de/LC_MESSAGES/lrzsz.mo ,反查到到来自:rzsz-0.12.20_4,如下:
pkg which /usr/local/share/locale/de/LC_MESSAGES/lrzsz.mo
/usr/local/share/locale/de/LC_MESSAGES/lrzsz.mo was installed by package lrzsz-0.12.20_4
使用 pkg 包管理器来查找包含 libssl.so.9 的软件包:
pkg search libssl.so.9
删掉一些安装的软件包命令,-f强制:
sudo pkg delete -f <package_name>
好了,解决问题开始下:
pkg which /usr/lib/libssl.so.9
/usr/lib/libssl.so.9 was not found in the database
sudo pkg install openssl
sudo ldconfig -m /usr/local/lib
root@freebsd-unmp-10-10-0-237:~ # pkg_add -r wget
pkg_add: Command not found.
root@freebsd-unmp-10-10-0-237:~ # pkg install wget
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from pkg+http://pkg.FreeBSD.org/FreeBSD:13:amd64/quarterly, please wait...
Verifying signature with trusted certificate pkg.freebsd.org.2013102301... done
Installing pkg-1.16.3...
Extracting pkg-1.16.3: 100%
Updating FreeBSD repository catalogue...
Fetching meta.conf: 100% 163 B 0.2kB/s 00:01
Fetching packagesite.txz: 100% 6 MiB 407.3kB/s 00:16
Processing entries: 100%
FreeBSD repository update completed. 30360 packages processed.
All repositories are up to date.
Updating database digests format: 100%
The following 5 package(s) will be affected (of 0 checked):
New packages to be INSTALLED:
gettext-runtime: 0.21
indexinfo: 0.3.1
libidn2: 2.3.0_1
libunistring: 0.9.10_1
wget: 1.21
Number of packages to be installed: 5
The process will require 7 MiB more space.
1 MiB to be downloaded.
Proceed with this action? [y/N]:
摘自:http://www.ittang.com/2008/0309/4832.html
kg install pkg and let it bootstrap / upgrade itself. Then use pkg install foo, etc. pkg_add does not exist anymore, as you've found out.
man pkg
which Query the database for package(s) that installed a specific file.
pkg which /usr/local/lib/libicuio.so.58
/usr/local/lib/libicuio.so.58 was installed by package icu-58.2_2,1
#pkg which /usr/local/bin/openssl
/usr/local/bin/openssl was installed by package openssl-1.0.2l,1
来自:https://www.howtoing.com/pkg-command-examples-to-manage-packages-in-freebsd
附:从Ports存储库本地下载软件包
为了从Ports存储库本地下载软件包,而不在系统上安装软件包,请使用fetch开关运行pkg命令 。
下载的软件包二进制文件是压缩的.txz文件,可以在/ var / cache / pkg / system路径中找到。
# pkg fetch package_name
pkg info -l curl|grep curl.h
/usr/local/include/curl/curl.h
/usr/local/include/curl/header.h
pkg info -l curl|grep so
/usr/local/include/curl/websockets.h
/usr/local/lib/libcurl.so
/usr/local/lib/libcurl.so.4
/usr/local/lib/libcurl.so.4.8.0
pkg info #查看BSD系统中安装了哪些pkg包
pkg info lrzsz-0.12.20_4 #查看具体某个包信息
pkg info -l lrzsz-0.12.20_4 #查看此包有哪些文件
lrzsz-0.12.20_4:
/usr/local/bin/lrb
/usr/local/bin/lrx
/usr/local/bin/lrz
/usr/local/bin/lsb
/usr/local/bin/lsx
/usr/local/bin/lsz
/usr/local/man/man1/lrz.1.gz
/usr/local/man/man1/lsz.1.gz
/usr/local/share/licenses/lrzsz-0.12.20_4/GPLv2
/usr/local/share/licenses/lrzsz-0.12.20_4/LICENSE
/usr/local/share/licenses/lrzsz-0.12.20_4/catalog.mk
/usr/local/share/locale/de/LC_MESSAGES/lrzsz.mo
据下面的这个文件, /usr/local/share/locale/de/LC_MESSAGES/lrzsz.mo ,反查到到来自:rzsz-0.12.20_4,如下:
pkg which /usr/local/share/locale/de/LC_MESSAGES/lrzsz.mo
/usr/local/share/locale/de/LC_MESSAGES/lrzsz.mo was installed by package lrzsz-0.12.20_4
使用 pkg 包管理器来查找包含 libssl.so.9 的软件包:
pkg search libssl.so.9
删掉一些安装的软件包命令,-f强制:
sudo pkg delete -f <package_name>
好了,解决问题开始下:
pkg which /usr/lib/libssl.so.9
/usr/lib/libssl.so.9 was not found in the database
sudo pkg install openssl
sudo ldconfig -m /usr/local/lib
root@freebsd-unmp-10-10-0-237:~ # pkg_add -r wget
pkg_add: Command not found.
root@freebsd-unmp-10-10-0-237:~ # pkg install wget
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from pkg+http://pkg.FreeBSD.org/FreeBSD:13:amd64/quarterly, please wait...
Verifying signature with trusted certificate pkg.freebsd.org.2013102301... done
Installing pkg-1.16.3...
Extracting pkg-1.16.3: 100%
Updating FreeBSD repository catalogue...
Fetching meta.conf: 100% 163 B 0.2kB/s 00:01
Fetching packagesite.txz: 100% 6 MiB 407.3kB/s 00:16
Processing entries: 100%
FreeBSD repository update completed. 30360 packages processed.
All repositories are up to date.
Updating database digests format: 100%
The following 5 package(s) will be affected (of 0 checked):
New packages to be INSTALLED:
gettext-runtime: 0.21
indexinfo: 0.3.1
libidn2: 2.3.0_1
libunistring: 0.9.10_1
wget: 1.21
Number of packages to be installed: 5
The process will require 7 MiB more space.
1 MiB to be downloaded.
Proceed with this action? [y/N]:
摘自:http://www.ittang.com/2008/0309/4832.html
kg install pkg and let it bootstrap / upgrade itself. Then use pkg install foo, etc. pkg_add does not exist anymore, as you've found out.
man pkg
which Query the database for package(s) that installed a specific file.
pkg which /usr/local/lib/libicuio.so.58
/usr/local/lib/libicuio.so.58 was installed by package icu-58.2_2,1
#pkg which /usr/local/bin/openssl
/usr/local/bin/openssl was installed by package openssl-1.0.2l,1
来自:https://www.howtoing.com/pkg-command-examples-to-manage-packages-in-freebsd
附:从Ports存储库本地下载软件包
为了从Ports存储库本地下载软件包,而不在系统上安装软件包,请使用fetch开关运行pkg命令 。
下载的软件包二进制文件是压缩的.txz文件,可以在/ var / cache / pkg / system路径中找到。
# pkg fetch package_name
[实践OK]FreeBSD下类似Linux的ldconfig -P的动态链接库的使用方法。freebsd添加lib搜索路径的方法,FreeBSD修改可执行文件路径和库文件路径。
Unix/LinuxC技术 jackxiang 2020-2-26 21:40
freebsd添加lib搜索路径的方法:
(1) 添加到LD_LIBRARY_PATH,这个多数人都知道了,坏处是传递的时候容易被砍掉,如apache
(2) ld.so.conf,设置了完全没用,不要试这个。。。
(3) ldconfig -m PATH,一次加载一次有效
(4) 修改/usr/local/libdata/ldconfig/,例如mysql,可以建一个文件/usr/local/libdata/ldconfig/mysql
内容是(假设装到了/usr/local/mysql):
/usr/local/mysql/lib/mysql
然后/etc/rc.d/ldconfig restart就行了
FreeBSD修改可执行文件路径和库文件路径
1、库文件路径修改:
FreeBSD和linux不是一样的。
在/etc/下加入ld-elf.so.conf里面写上你的目录,比如/usr/local/samba/lib,没有的话创建一个。
然后
sudo /etc/rc.d/ldconfig restart
or
/etc/rc.d/ldconfig forcerestart
好了,查看库文件路径
# ldconfig -r
# ldconfig -r | less
或者/etc/rc.conf里加ldconfig_path="",这是系统起来的时候再设置的。
2、可执行文件路径修改:
在用户目录下面,比如/root或者/home/ztz0223下面,打开.cshrc文件,修改set path部分:
# $FreeBSD: release/9.1.0/share/skel/dot.cshrc 242850 2012-11-10 06:05:04Z eadler $
#
# .cshrc - csh resource script, read at beginning of execution by each shell
#
# see also csh(1), environ(7).
# more examples available at /usr/share/examples/csh/
#
alias h history 25
alias j jobs -l
alias la ls -aF
alias lf ls -FA
alias ll ls -lAF
# A righteous umask
umask 22
set path =
(/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin $HOME/bin)
修改上面set path比如:
set path =
(/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin
/usr/local/samba/bin $HOME/bin)
来自:https://www.xuebuyuan.com/1082615.html
https://www.cyberciti.biz/faq/freebsd-ldconfig-v-lost-dynamic-linker-configuration/
(1) 添加到LD_LIBRARY_PATH,这个多数人都知道了,坏处是传递的时候容易被砍掉,如apache
(2) ld.so.conf,设置了完全没用,不要试这个。。。
(3) ldconfig -m PATH,一次加载一次有效
(4) 修改/usr/local/libdata/ldconfig/,例如mysql,可以建一个文件/usr/local/libdata/ldconfig/mysql
内容是(假设装到了/usr/local/mysql):
/usr/local/mysql/lib/mysql
然后/etc/rc.d/ldconfig restart就行了
FreeBSD修改可执行文件路径和库文件路径
1、库文件路径修改:
FreeBSD和linux不是一样的。
在/etc/下加入ld-elf.so.conf里面写上你的目录,比如/usr/local/samba/lib,没有的话创建一个。
然后
sudo /etc/rc.d/ldconfig restart
or
/etc/rc.d/ldconfig forcerestart
好了,查看库文件路径
# ldconfig -r
# ldconfig -r | less
或者/etc/rc.conf里加ldconfig_path="",这是系统起来的时候再设置的。
2、可执行文件路径修改:
在用户目录下面,比如/root或者/home/ztz0223下面,打开.cshrc文件,修改set path部分:
# $FreeBSD: release/9.1.0/share/skel/dot.cshrc 242850 2012-11-10 06:05:04Z eadler $
#
# .cshrc - csh resource script, read at beginning of execution by each shell
#
# see also csh(1), environ(7).
# more examples available at /usr/share/examples/csh/
#
alias h history 25
alias j jobs -l
alias la ls -aF
alias lf ls -FA
alias ll ls -lAF
# A righteous umask
umask 22
set path =
(/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin $HOME/bin)
修改上面set path比如:
set path =
(/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin
/usr/local/samba/bin $HOME/bin)
来自:https://www.xuebuyuan.com/1082615.html
https://www.cyberciti.biz/faq/freebsd-ldconfig-v-lost-dynamic-linker-configuration/
[实践OK]Beyond Compare在Mac OS系统下永久试用,比较word用文本比较。
Unix/LinuxC技术 jackxiang 2020-2-26 18:27
Microsoft Word .doc和Adobe .pdf文件的文本内容也可以进行比较但不能编辑。
https://www.bilibili.com/read/mobile?id=14506059
一、原理
Beyond Compare每次启动后会先检查注册信息,试用期到期后就不能继续使用。解决方法是在启动前,先删除注册信息,然后再启动,这样就可以永久免费试用了。
二、下载
首先下载Beyond Compare最新版本,链接如下:https://www.scootersoftware.com/download.php
三、安装
下载完成后,直接安装。
四、创建BCompare文件
1.进入Mac应用程序目录下,找到刚刚安装好的Beyond Compare,路径如下/Applications/Beyond Compare 2.app/Contents/MacOS。
2.修改启动程序文件BCompare为BCompare.real。
3.在当前目录下新建一个文件BCompare,文件内容如下:
/Applications/Beyond Compare 2.app/Contents/MacOS/BCompare
#!/bin/bash
rm "/Users/$(whoami)/Library/Application Support/Beyond Compare/registry.dat"
"`dirname "$0"`"/BCompare.real $@
4.保存BCompare文件。
5.修改文件的权限:
chmod a+x /Applications/Beyond Compare 2.app/Contents/MacOS/BCompare
以上步骤完成后,再次打开Beyond Compare就可以正常使用了,enjoy it。
转自:https://blog.csdn.net/wu__di/article/details/82390196
https://www.bilibili.com/read/mobile?id=14506059
一、原理
Beyond Compare每次启动后会先检查注册信息,试用期到期后就不能继续使用。解决方法是在启动前,先删除注册信息,然后再启动,这样就可以永久免费试用了。
二、下载
首先下载Beyond Compare最新版本,链接如下:https://www.scootersoftware.com/download.php
三、安装
下载完成后,直接安装。
四、创建BCompare文件
1.进入Mac应用程序目录下,找到刚刚安装好的Beyond Compare,路径如下/Applications/Beyond Compare 2.app/Contents/MacOS。
2.修改启动程序文件BCompare为BCompare.real。
3.在当前目录下新建一个文件BCompare,文件内容如下:
/Applications/Beyond Compare 2.app/Contents/MacOS/BCompare
#!/bin/bash
rm "/Users/$(whoami)/Library/Application Support/Beyond Compare/registry.dat"
"`dirname "$0"`"/BCompare.real $@
4.保存BCompare文件。
5.修改文件的权限:
chmod a+x /Applications/Beyond Compare 2.app/Contents/MacOS/BCompare
以上步骤完成后,再次打开Beyond Compare就可以正常使用了,enjoy it。
转自:https://blog.csdn.net/wu__di/article/details/82390196
PHP框架的目的
Php/Js/Shell/Go jackxiang 2020-2-25 17:46
PHP框架的目的: 区割代码 管理逻辑 降低成本 达成共识 片段冶理 防冶腐败 降低耦合 协同开发 默契达成 抵御安全