man 2 socket    #非阻塞的真实含义是没有连接时accept返回-1(Java里返回Null,C语言返回-1),没有数据时read返回0.
       SOCK_NONBLOCK   Set the O_NONBLOCK file status flag on the new open file description.  Using this
                       flag saves extra calls to fcntl(2) to achieve the same result.   #fcntl设置也成。

java里设置:ss.configureBlocking(false);  #重点 OS NOBLOCK。
C里:
    int listenfd = socket(AF_INET, SOCK_STREAM, 0);
    fcntl(listenfd, F_SETFL, O_NONBLOCK); // 设置非阻塞方式


        for(i=0; i<wait_fds; ++i ) // for循环中以进程处理epoll事件,更稳定。
        {
            if( events[i].data.fd == listenfd ){
                connfd = accept( listenfd, (struct sockaddr *)&clientaddr, &clilen );
                printf("accept return listenfd=%d\n",connfd);
                if( connfd < 0 ){
                    perror("connfd < 0");
                    exit(1);
                }

                // 设置非阻塞
                if (fcntl( connfd, F_SETFL, fcntl( connfd, F_GETFD, 0)|O_NONBLOCK) == -1){                
                    continue;
                }

accept、read、write: -1 不会阻塞。默认recv(5...阻塞。NIO在Java里指:
1)Java New:文件和楼socket都封装成新的东西,可以select统一侦听状态。
2)Unix NOBLOCKING。  

BLOCKING的缺点弊端:每客户端、每线程【阻塞】。

man 2 accept    #此调用在发生错误时返回-1.若成功则返回一个非负整数标识这个 连接套接字.  NOBLOCKING -1
man 2 read      #生错误时返回-1,并置 errno 为相应值.在这种情况下无法得知文件偏移位置是否有变化.在读取了一定量的数据后被信号所中断,并返回 -1(且 errno 被设置为EINTR),或者返回已读取的数据量.



1万个连接 1个人发来数据:

accept返回都是-1,来了数据读了一部分后,你又回去处理连接了,数据读不全。于是出现粘包。

但是你在一个循环里,全量遍历O(n)系统调用。

man 2 select:
多少条路、有多少个读的、多少个写的。

select(3,5)   # 3有没有连接,5有没有连接。

selec(t3,5,6,7,8,9,10,11)   O(1)只需要调一次即可。

accept (3) = 6
recv(5)   O(m)            #多路复用只能给你返回状态,程序需要自己调用R/W你的IO  ,只要自己去读去取就叫同步模型。Netty里全是同步IO模型:无论是在当前线程还是其它线程NIO BIO New IO(指文件、socket一块给弄成一个NewIO),N:还有一个是Noblocking,也就是没来连接时返回-1,读取不到socket数据时返回立即0。
                                 #异步:有阻塞么?没有阻塞的。 调用内核的一个方法(callback)(内核帮你把数据读写)

点击在新窗口中浏览此图片


man 2 epoll_create:
man 2 epoll_ctl

点击在新窗口中浏览此图片

点击在新窗口中浏览此图片



strace -ff -o out ./nginx

从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
实际测试结果

创建 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
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  
弹出式窗口和重定向

开启或关闭弹出式窗口
在计算机上打开 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 语言中的常用结构。
清单表格:
点击在新窗口中浏览此图片
大牛微信群札记,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
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“,则说明漏洞已经修补。

阅读全文
官网:https://www.kancloud.cn/willseecloud/ansible/1458190


有group 写成一行YAML对方括号报错,如下:



写成多行也就Ok了,如下:


asp bc_web.yml -C -D
“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到一个较高位的地址,解决了问题。


摘录作为一个后端开发工程师,在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
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
WebSocket 在线调试工具:
http://www.easyswoole.com/wstool.html

这个链接地址歇菜了,顾问微信问了下easyswoole框架作者张一丰也没个回应,
一个不错的调试工具,为方便Websocket调试,顾问给搭建了一个,地址如下:
http://wstool.jackxiang.com/







EOF
背景:打包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
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
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/
分页: 2/336 第一页 上页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 下页 最后页 [ 显示模式: 摘要 | 列表 ]