
sed之h;H和:a;N;ba使用精解(对段落进行操作)
Php/Js/Shell/Go jackxiang 2020-9-18 16:03
这是老式编程语bai言里的标签跳转, 相当于C语言du里面的goto语句
可以实现 分支选择zhi, 循环等功能
sed '/^AA/ba;s/$/ NO/;b;:a;s/$/ YES/' 解读如下dao
sed是逐行扫描的
/^AA/ba;s/$/ NO/ 意思是如果当前行句首是AA
则跳转到标签a,执行s/$/ YES/ 即在行末插入YES (这里使用替换s命令实现插入)
否则执行s/$/ NO/, 在行末插入NO
对所有行都执行这种操作, 大功告成
echo 1 2 3 4 5 6 7 8 9 10 | perl -p -e 's#(\d+) #\1\n#g' | sort -n -k 1 | sed -e :a -e '$d;N;2,3ba' -e 'P;D'
3ba表示去掉最后3行,你要保留最新的5个,那就是5ba好了
sed -n '/^Handle/{:a;N;/\n$/!{$!ba};s/.*Range Size: \([^\n]*\).*/\1/p}' file
[解析]
文本就3个段落,2个空行为分割,用sed首先想到肯定是以空行为分割,把一整段文本读取在一起,然后统一进行匹配和替换,特别注意N读取内容匹配空行是 /\n$/ ,而不是一般的 /^$/ ,另一个问题是到了尾行因为没有下面的空行来激活,所以我们要在前面加个尾行的匹配跳转。这样就可以成功替换以Handle开头的段落内容,如果没匹配到也当然不会打印。
sed -n 'H;/^$/!{$!b};x;s/\nHandle.*Range Size: \([^\n]*\).*/\1/p' file
[解析]
因为是以空行为分割,H 追加到 hold space ,后面的替换只对空行或者最后一行才执行,否则都会跳过,也只有符合关键字的才会被替换打印。其他的行则因为 -n 的原因不会被输出。
From:https://blog.csdn.net/woshizhangliang999/article/details/53379158
可以实现 分支选择zhi, 循环等功能
sed '/^AA/ba;s/$/ NO/;b;:a;s/$/ YES/' 解读如下dao
sed是逐行扫描的
/^AA/ba;s/$/ NO/ 意思是如果当前行句首是AA
则跳转到标签a,执行s/$/ YES/ 即在行末插入YES (这里使用替换s命令实现插入)
否则执行s/$/ NO/, 在行末插入NO
对所有行都执行这种操作, 大功告成
echo 1 2 3 4 5 6 7 8 9 10 | perl -p -e 's#(\d+) #\1\n#g' | sort -n -k 1 | sed -e :a -e '$d;N;2,3ba' -e 'P;D'
3ba表示去掉最后3行,你要保留最新的5个,那就是5ba好了
sed -n '/^Handle/{:a;N;/\n$/!{$!ba};s/.*Range Size: \([^\n]*\).*/\1/p}' file
[解析]
文本就3个段落,2个空行为分割,用sed首先想到肯定是以空行为分割,把一整段文本读取在一起,然后统一进行匹配和替换,特别注意N读取内容匹配空行是 /\n$/ ,而不是一般的 /^$/ ,另一个问题是到了尾行因为没有下面的空行来激活,所以我们要在前面加个尾行的匹配跳转。这样就可以成功替换以Handle开头的段落内容,如果没匹配到也当然不会打印。
sed -n 'H;/^$/!{$!b};x;s/\nHandle.*Range Size: \([^\n]*\).*/\1/p' file
[解析]
因为是以空行为分割,H 追加到 hold space ,后面的替换只对空行或者最后一行才执行,否则都会跳过,也只有符合关键字的才会被替换打印。其他的行则因为 -n 的原因不会被输出。
From:https://blog.csdn.net/woshizhangliang999/article/details/53379158
教你用iPhone 通过 USB 让macbook电脑实现上网,这个简单,直接打开热点就行,Win的电脑可以参考:
https://jingyan.baidu.com/article/93f9803f7c2a4ae0e56f557b.html
https://jingyan.baidu.com/article/93f9803f7c2a4ae0e56f557b.html
[实践OK]手把手教你打造高效的 Kubernetes 命令行终端
虚拟云与Docker jackxiang 2020-8-17 17:56
在mac上
$ brew install bash-completion
$ source $(brew --prefix)/etc/bash_completion
$ source <(kubectl completion bash)
来自:https://juejin.im/entry/6844903678898356237
Mac: https://i4t.com/3245.html
断掉电源,摁着平时开机旋转的部分,向右手方向旋转,直到进风滤网旋转到正前方,上下两个滤网,每个两个摁扣,一颗螺丝,拆下!
清洗过滤网;直接用水冲洗或用毛刷刷。
安装滤网及面板,恢复原状。
二)滤网清洗是为了解决酸味,洗后还是没有得到解决,酸味还是有,还一阵一阵的:
我这个自己洗了过滤网还是有酸味,网上有人说:烯酸树脂固话工艺没做好产生酸味??明后天问下客服?找工程师上门??
就是一种化学的酸味:http://feng.ifeng.com/c/7xOtKsMwnoN
清洗过滤网;直接用水冲洗或用毛刷刷。
安装滤网及面板,恢复原状。
二)滤网清洗是为了解决酸味,洗后还是没有得到解决,酸味还是有,还一阵一阵的:
我这个自己洗了过滤网还是有酸味,网上有人说:烯酸树脂固话工艺没做好产生酸味??明后天问下客服?找工程师上门??
就是一种化学的酸味:http://feng.ifeng.com/c/7xOtKsMwnoN
这里的URL是什么? 有两种可能大一点:
浏览器在查询本地缓存,时间长比如本地出了问题比如硬盘什么的
网络问题,抓包吧你还可以试试其它地方查询网页是否有类似问题------------------------------前段时间看到了一个长时间的 stalled 状态, 查了, 发现是 因为 dns 服务器对于该域名查询没有响应, 重试很久才成功. 我估计 stalled 多半是一些网络问题, 比如 dns , 服务器不可达, tcp reset 之类的问题. chrome 的几个阶段, 一些导致连接不上的问题, 可能会被算到 stalled 阶段
作者:深蓝加菲
链接:https://www.zhihu.com/question/37087918/answer/142205707
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
有个兄弟试图写明白,值得看看:https://www.cnblogs.com/jpfss/p/8963766.html
浏览器在查询本地缓存,时间长比如本地出了问题比如硬盘什么的
网络问题,抓包吧你还可以试试其它地方查询网页是否有类似问题------------------------------前段时间看到了一个长时间的 stalled 状态, 查了, 发现是 因为 dns 服务器对于该域名查询没有响应, 重试很久才成功. 我估计 stalled 多半是一些网络问题, 比如 dns , 服务器不可达, tcp reset 之类的问题. chrome 的几个阶段, 一些导致连接不上的问题, 可能会被算到 stalled 阶段
作者:深蓝加菲
链接:https://www.zhihu.com/question/37087918/answer/142205707
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
有个兄弟试图写明白,值得看看:https://www.cnblogs.com/jpfss/p/8963766.html
[实践OK]mac 终端粘贴 URL 反斜杠的问题,Term 2 的自动转义,不喜欢应该可以关掉。
Unix/LinuxC技术 jackxiang 2020-7-13 14:50
最近几天我在 mac 命令终端下粘贴 URL 出现了反斜杠,带&符号的就会在前面出现一个反斜杠
有人遇到么?怎么解决?
那是 oh-my-zsh 的 feature ,不是 bug ,见:
参考: http://stackoverflow.com/questions/25614613/how-to-disable-autocomplete-with-backslak-in-zsh
如果你不想看到这个反斜杠,就在粘贴网址之前打一个引号,单引号就行,粘贴完再打一个:
1)直接粘贴:
~/scdh2020/public master http://partner.xxx.xxxx.com/scdh2020/index.php\?name\=xiangdong
2)先加一个单引号或者双引号直接粘贴,还是会有反斜杠:
"http://partner.xxx.xxxx.com/scdh2020/index.php\?name\=xiangdong
3)自己输入是正常的。但是我想要粘贴也没有反斜杠怎么办?
成功解决办法:
在`~/.zshrc`中加入一句`ISABLE_MAGIC_FUNCTIONS=true`(需要放在 source $ZSH/oh-my-zsh.sh 前面)
vi ~/.zshrc
DISABLE_MAGIC_FUNCTIONS=true
source $ZSH/oh-my-zsh.sh
有人遇到么?怎么解决?
那是 oh-my-zsh 的 feature ,不是 bug ,见:
参考: http://stackoverflow.com/questions/25614613/how-to-disable-autocomplete-with-backslak-in-zsh
如果你不想看到这个反斜杠,就在粘贴网址之前打一个引号,单引号就行,粘贴完再打一个:
1)直接粘贴:
~/scdh2020/public master http://partner.xxx.xxxx.com/scdh2020/index.php\?name\=xiangdong
2)先加一个单引号或者双引号直接粘贴,还是会有反斜杠:
"http://partner.xxx.xxxx.com/scdh2020/index.php\?name\=xiangdong
3)自己输入是正常的。但是我想要粘贴也没有反斜杠怎么办?
成功解决办法:
在`~/.zshrc`中加入一句`ISABLE_MAGIC_FUNCTIONS=true`(需要放在 source $ZSH/oh-my-zsh.sh 前面)
vi ~/.zshrc
DISABLE_MAGIC_FUNCTIONS=true
source $ZSH/oh-my-zsh.sh
[实践OK]secureCRT拖动上传,SFTP拖动上传文件到家目录。
Unix/LinuxC技术 jackxiang 2020-7-1 15:51
secureCRT拖动上传,SFTP拖动上传文件到家目录:
https://blog.csdn.net/kxj19980524/article/details/85246778
https://blog.csdn.net/kxj19980524/article/details/85246778
[实践OK]ps在FreeBSD中截断的列宽,linux ps命令显示完整命令。
Unix/LinuxC技术 jackxiang 2020-6-29 23:23
一)ps在FreeBSD中截断的列宽:
ps aux | grep php
在zsh中,例如,输出
root 50282 0.0 1.4 49512 29584 - Ss 23:03 0:00.05 php-fpm: master process (/usr/local/
您可以看到它在屏幕上运行并在结束时被截止.
在FreeBSD中,如何查看完整输出?
最佳答案 使用-w选项(必要时重复).尝试:
ps auxwww|grep php
root 50282 0.0 1.4 49512 29584 - Ss 23:03 0:00.06 php-fpm: master process (/usr/local/php7/etc/php-fpm.conf) (php-fpm)
有关更多信息,请参见the manual page
二)linux ps命令显示完整命令:
在linux上执行ps命令,输出往往被截断
ps -f -p5457
UID PID PPID C STIME TTY TIME CMD
root 5457 5449 0 4月26 pts/1 00:00:00 Worker***: master process start_file=/data/www/manage.**
可以使用以下形式,显示完整的命令
ps -w -w -f -p5457
UID PID PPID C STIME TTY TIME CMD
root 5457 5449 0 4月26 pts/1 00:00:00 Worker***: master process start_file=/data/www/manage.****.***.cn/********/GatewayWorker/start.php
或者
ps -f -p5457|cat
UID PID PPID C STIME TTY TIME CMD
root 5457 5449 0 4月26 pts/1 00:00:00 Worker***: master process start_file=/data/www/manage.****.***.cn/********/GatewayWorker/start.php
ps aux | grep php
在zsh中,例如,输出
root 50282 0.0 1.4 49512 29584 - Ss 23:03 0:00.05 php-fpm: master process (/usr/local/
您可以看到它在屏幕上运行并在结束时被截止.
在FreeBSD中,如何查看完整输出?
最佳答案 使用-w选项(必要时重复).尝试:
ps auxwww|grep php
root 50282 0.0 1.4 49512 29584 - Ss 23:03 0:00.06 php-fpm: master process (/usr/local/php7/etc/php-fpm.conf) (php-fpm)
有关更多信息,请参见the manual page
二)linux ps命令显示完整命令:
在linux上执行ps命令,输出往往被截断
ps -f -p5457
UID PID PPID C STIME TTY TIME CMD
root 5457 5449 0 4月26 pts/1 00:00:00 Worker***: master process start_file=/data/www/manage.**
可以使用以下形式,显示完整的命令
ps -w -w -f -p5457
UID PID PPID C STIME TTY TIME CMD
root 5457 5449 0 4月26 pts/1 00:00:00 Worker***: master process start_file=/data/www/manage.****.***.cn/********/GatewayWorker/start.php
或者
ps -f -p5457|cat
UID PID PPID C STIME TTY TIME CMD
root 5457 5449 0 4月26 pts/1 00:00:00 Worker***: master process start_file=/data/www/manage.****.***.cn/********/GatewayWorker/start.php
FreeBSD 采用从 LLVM 衍生而来的新社区行为准则
Unix/LinuxC技术 jackxiang 2020-6-11 16:45
FreeBSD 社区宣布接下来项目将采用新的从 LLVM 衍生而来的行为准则(Code of Conduct,CoC)。
此前 2018 年对于 CoC 的调查中,FreeBSD 开发者给出的反馈是:
94% 的开发人员相信项目中尊重沟通很重要;1% 的人不同意
89% 的人认为 FreeBSD 应该欢迎所有背景的人;2% 反对
73% 的人表示行为不好的人应从项目中剔除,不论他们的技术贡献如何;9% 反对
35% 的人不满意 2018 年通过的行为守则,34% 保持中立,30% 表示满意
今年 6 月,通过审查其它开源行为准则,FreeBSD 核心团队进行了新一轮调查,不过将问题限定为:采用 LLVM 衍生的 CoC 还是 Go 衍生的版本,亦或是保持不变。结果是 63% 的人赞成采用 LLVM 衍生的行为准则。
通过前后两次社区开发者的调查,FreeBSD 最终采用了基于 LLVM 的 CoC。该 CoC 要求社区开发者:
友好耐心
热情好客
体贴
相互尊敬
对他人友善,并注意不要乱说话
持不同见解时多换位思考
具体内容可以查看:https://www.freebsd.org/internal/code-of-conduct.html
此前 2018 年对于 CoC 的调查中,FreeBSD 开发者给出的反馈是:
94% 的开发人员相信项目中尊重沟通很重要;1% 的人不同意
89% 的人认为 FreeBSD 应该欢迎所有背景的人;2% 反对
73% 的人表示行为不好的人应从项目中剔除,不论他们的技术贡献如何;9% 反对
35% 的人不满意 2018 年通过的行为守则,34% 保持中立,30% 表示满意
今年 6 月,通过审查其它开源行为准则,FreeBSD 核心团队进行了新一轮调查,不过将问题限定为:采用 LLVM 衍生的 CoC 还是 Go 衍生的版本,亦或是保持不变。结果是 63% 的人赞成采用 LLVM 衍生的行为准则。
通过前后两次社区开发者的调查,FreeBSD 最终采用了基于 LLVM 的 CoC。该 CoC 要求社区开发者:
友好耐心
热情好客
体贴
相互尊敬
对他人友善,并注意不要乱说话
持不同见解时多换位思考
具体内容可以查看:https://www.freebsd.org/internal/code-of-conduct.html
[实践OK]linxu下umask 000 为什么执行下来不是 777而是666呢??
Unix/LinuxC技术 jackxiang 2020-6-8 15:18
root如果没有umask(umask 000)则文件权限为666,目录权限为777,但是默认有的如下:
root的缺省zhiunmask是022,一般用户是002。
所以,root用户umask
0022
一般目录是:755,原因是777-022=755.
文件,默认是644,666-022=644。
=============umask 000 为什么执行下来不是 777而是666呢??==================
umask 000
umask
0000
touch index2.php
touch index3.php
-rw-rw-rw- 1 root root 0 Jun 8 15:08 index2.php
-rw-rw-rw- 1 root root 0 Jun 8 15:08 index3.php
原因:因为这是个普通文件,普通文件是不能在创建时具有执行权限的,所以要去掉x 权限位(7-1),所以权限是6(可读写,7-1-0),0就是umask。
ll -d bdc
drwxrwxrwx 2 root root 4096 Jun 8 15:23 bdc #目录就是777了。
解释:unmask制定bai了新文件创建时的权限,unmask是个8进制的数du字。root的缺省zhiunmask是022,一般用户是002。如dao果用户的umask为000,则创建的文件权限为666,目录权限为777,运行umask命令可以查看用户自己的umask值。
当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认 权限,它与chmod的效果刚好相反,umask设置的是权限"补码",而chmod设置的是文件权限码。一般可在/etc/profile、/etc/bashrc、$ [HOME]/.bash_profile、$[HOME]/.profile或$[HOME]/.bashrc中设置umask值。具体取决于Linux发行版,比如Fedora19下要更改自己的umask值,在$[HOME]/.profile或$[HOME]/.bash_profile下的增加umask的值覆盖不了/etc/profile中的配置值的,必须在$[HOME]/.bashrc下增加umask值才可以永久定义自己的umask值。
root的缺省zhiunmask是022,一般用户是002。
所以,root用户umask
0022
一般目录是:755,原因是777-022=755.
文件,默认是644,666-022=644。
=============umask 000 为什么执行下来不是 777而是666呢??==================
umask 000
umask
0000
touch index2.php
touch index3.php
-rw-rw-rw- 1 root root 0 Jun 8 15:08 index2.php
-rw-rw-rw- 1 root root 0 Jun 8 15:08 index3.php
原因:因为这是个普通文件,普通文件是不能在创建时具有执行权限的,所以要去掉x 权限位(7-1),所以权限是6(可读写,7-1-0),0就是umask。
ll -d bdc
drwxrwxrwx 2 root root 4096 Jun 8 15:23 bdc #目录就是777了。
解释:unmask制定bai了新文件创建时的权限,unmask是个8进制的数du字。root的缺省zhiunmask是022,一般用户是002。如dao果用户的umask为000,则创建的文件权限为666,目录权限为777,运行umask命令可以查看用户自己的umask值。
当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认 权限,它与chmod的效果刚好相反,umask设置的是权限"补码",而chmod设置的是文件权限码。一般可在/etc/profile、/etc/bashrc、$ [HOME]/.bash_profile、$[HOME]/.profile或$[HOME]/.bashrc中设置umask值。具体取决于Linux发行版,比如Fedora19下要更改自己的umask值,在$[HOME]/.profile或$[HOME]/.bash_profile下的增加umask的值覆盖不了/etc/profile中的配置值的,必须在$[HOME]/.bashrc下增加umask值才可以永久定义自己的umask值。
MacOS 下Chrome 搜索被重定向至yahoo,google搜索发现进入 yahoo搜了,插件作怪,解决办法:
https://blog.csdn.net/u013390476/article/details/103231965
https://blog.csdn.net/u013390476/article/details/103231965
[实践OK]如何关闭centos6x/7x中的sunrpc 111端口,linux如何关闭无用端口/Linux禁用111端口。和关闭rpc.statd服务。
Unix/LinuxC技术 jackxiang 2020-6-1 17:34
一)关闭sunrpc 111端口的步骤:
ss -lnt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:111 *:*
lsof -i :111
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root 34u IPv6 27796 0t0 TCP *:sunrpc (LISTEN)
systemd 1 root 35u IPv4 27797 0t0 TCP *:sunrpc (LISTEN)
rpcbind 52067 rpc 4u IPv6 27796 0t0 TCP *:sunrpc (LISTEN)
rpcbind 52067 rpc 5u IPv4 27797 0t0 TCP *:sunrpc (LISTEN)
查看正在监听的111端口,由哪个服务使用
cat /etc/services | grep -w 111
sunrpc 111/tcp portmapper rpcbind # RPC 4.0 portmapper TCP
sunrpc 111/udp portmapper rpcbind # RPC 4.0 portmapper UDP
systemctl list-unit-files --all |grep rpcbind
rpcbind.service indirect
rpcbind.socket disabled
rpcbind.target static
核心语句:
CentOS6.X系统:
chkconfig rpcbind off
service rpcbind stop
核对是否真关了:
systemctl list-unit-files --all |grep rpcbind
111消失了:
ss -lnt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 128 *:10050 *:*
LISTEN 0 128 :::22 :::*
参考自:https://www.qiuvps.com/1595.html
https://my.oschina.net/u/1189928/blog/1824327
三)关闭rpc.statd服务
lsof -i tcp:10588
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpc.statd 1828 rpcuser 9u IPv4 13392 0t0 TCP *:10588 (LISTEN)
which rpc.statd
/sbin/rpc.statd
rpm -qf /sbin/rpc.statd
nfs-utils-1.2.3-39.el6_5.3.x86_64
rpm -ql nfs-utils|grep '/etc/rc.d'
/etc/rc.d/init.d/nfs
/etc/rc.d/init.d/nfslock
/etc/rc.d/init.d/rpcgssd
/etc/rc.d/init.d/rpcidmapd
/etc/rc.d/init.d/rpcsvcgssd
/etc/init.d/nfslock stop
lsof -i tcp:631
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
cupsd 1865 root 6u IPv6 13530 0t0 TCP [::1]:ipp (LISTEN)
cupsd 1865 root 7u IPv4 13531 0t0 TCP xy.xxxx.xx:ipp (LISTEN)
rpm -qf `which cupsd`
cups-1.4.2-78.el6_9.x86_64
netstat -anp|grep 631
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1865/cupsd
tcp 0 0 ::1:631 :::* LISTEN 1865/cupsd
udp 0 0 0.0.0.0:631 0.0.0.0:* 1865/cupsd
1865 1 01:29:04 Mon Jun 1 17:53:58 2020 cupsd -C /etc/cups/cupsd.conf
1890 1 01:29:04 Mon Jun 1 17:53:58 2020 hald
1891 1890 01:29:04 Mon Jun 1 17:53:58 2020 \_ hald-runner
1923 1891 01:29:04 Mon Jun 1 17:53:58 2020 \_ hald-addon-input: Listening on /dev/input/event2 /dev/input/event0
kill -9 1865 # 干死,端口消失。
参考:http://coolnull.com/4038.html
三)特殊端口服务可能是mount 产生的端口:
mount端口是看不到程序的,只显示一个小横杠。
netstat -lntp|grep 54086
tcp 0 0 0.0.0.0:54086 0.0.0.0:* LISTEN -
umount /data/webdata # umount后端口消失
实践来自:https://jackxiang.com/post/10577/
ss -lnt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:111 *:*
lsof -i :111
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root 34u IPv6 27796 0t0 TCP *:sunrpc (LISTEN)
systemd 1 root 35u IPv4 27797 0t0 TCP *:sunrpc (LISTEN)
rpcbind 52067 rpc 4u IPv6 27796 0t0 TCP *:sunrpc (LISTEN)
rpcbind 52067 rpc 5u IPv4 27797 0t0 TCP *:sunrpc (LISTEN)
查看正在监听的111端口,由哪个服务使用
cat /etc/services | grep -w 111
sunrpc 111/tcp portmapper rpcbind # RPC 4.0 portmapper TCP
sunrpc 111/udp portmapper rpcbind # RPC 4.0 portmapper UDP
systemctl list-unit-files --all |grep rpcbind
rpcbind.service indirect
rpcbind.socket disabled
rpcbind.target static
核心语句:
CentOS6.X系统:
chkconfig rpcbind off
service rpcbind stop
核对是否真关了:
systemctl list-unit-files --all |grep rpcbind
111消失了:
ss -lnt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 128 *:10050 *:*
LISTEN 0 128 :::22 :::*
参考自:https://www.qiuvps.com/1595.html
https://my.oschina.net/u/1189928/blog/1824327
三)关闭rpc.statd服务
lsof -i tcp:10588
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpc.statd 1828 rpcuser 9u IPv4 13392 0t0 TCP *:10588 (LISTEN)
which rpc.statd
/sbin/rpc.statd
rpm -qf /sbin/rpc.statd
nfs-utils-1.2.3-39.el6_5.3.x86_64
rpm -ql nfs-utils|grep '/etc/rc.d'
/etc/rc.d/init.d/nfs
/etc/rc.d/init.d/nfslock
/etc/rc.d/init.d/rpcgssd
/etc/rc.d/init.d/rpcidmapd
/etc/rc.d/init.d/rpcsvcgssd
/etc/init.d/nfslock stop
lsof -i tcp:631
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
cupsd 1865 root 6u IPv6 13530 0t0 TCP [::1]:ipp (LISTEN)
cupsd 1865 root 7u IPv4 13531 0t0 TCP xy.xxxx.xx:ipp (LISTEN)
rpm -qf `which cupsd`
cups-1.4.2-78.el6_9.x86_64
netstat -anp|grep 631
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1865/cupsd
tcp 0 0 ::1:631 :::* LISTEN 1865/cupsd
udp 0 0 0.0.0.0:631 0.0.0.0:* 1865/cupsd
1865 1 01:29:04 Mon Jun 1 17:53:58 2020 cupsd -C /etc/cups/cupsd.conf
1890 1 01:29:04 Mon Jun 1 17:53:58 2020 hald
1891 1890 01:29:04 Mon Jun 1 17:53:58 2020 \_ hald-runner
1923 1891 01:29:04 Mon Jun 1 17:53:58 2020 \_ hald-addon-input: Listening on /dev/input/event2 /dev/input/event0
kill -9 1865 # 干死,端口消失。
参考:http://coolnull.com/4038.html
三)特殊端口服务可能是mount 产生的端口:
mount端口是看不到程序的,只显示一个小横杠。
netstat -lntp|grep 54086
tcp 0 0 0.0.0.0:54086 0.0.0.0:* LISTEN -
umount /data/webdata # umount后端口消失
实践来自:https://jackxiang.com/post/10577/
[nio]noblock的IO到底是啥意思?阻塞是啥意思。
Unix/LinuxC技术 jackxiang 2020-5-26 21:16
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
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
[实践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