[实践OK]阿里云授时服务器之公共NTP服务器
Unix/LinuxC技术 jackxiang 2018-7-30 13:28
来自:https://eallion.com/aliyun-ntp
公共NTP服务器
Unix类系统:time1-7.aliyun.com 8台:
我也不知道是怎么想的,
随手就去搜索了“阿里云 NTP”,
结果还真有!
ntp1.aliyun.com
ntp2.aliyun.com
ntp3.aliyun.com
ntp4.aliyun.com
ntp5.aliyun.com
ntp6.aliyun.com
ntp7.aliyun.com
Windows: time.pool.aliyun.com
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>/dev/null
#/usr/sbin/ntpdate ntp1.aliyun.com
30 Jul 13:27:42 ntpdate[32557]: step time server 120.25.115.20 offset 486.889850 sec
#sed -n 's#ntp.ksyun.cn#ntp1.aliyun.com#p' /var/spool/cron/root
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>/dev/null
正式替换:
sed -i 's#ntp.ksyun.cn#ntp1.aliyun.com#' /var/spool/cron/root
成功替换:
cat /var/spool/cron/root
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>/dev/null
Ansbile批量替换:
ansible applet -a"sed -i 's#ntp.ksyun.cn#ntp1.aliyun.com#' /var/spool/cron/root"
公共NTP服务器
Unix类系统:time1-7.aliyun.com 8台:
我也不知道是怎么想的,
随手就去搜索了“阿里云 NTP”,
结果还真有!
ntp1.aliyun.com
ntp2.aliyun.com
ntp3.aliyun.com
ntp4.aliyun.com
ntp5.aliyun.com
ntp6.aliyun.com
ntp7.aliyun.com
Windows: time.pool.aliyun.com
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>/dev/null
#/usr/sbin/ntpdate ntp1.aliyun.com
30 Jul 13:27:42 ntpdate[32557]: step time server 120.25.115.20 offset 486.889850 sec
#sed -n 's#ntp.ksyun.cn#ntp1.aliyun.com#p' /var/spool/cron/root
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>/dev/null
正式替换:
sed -i 's#ntp.ksyun.cn#ntp1.aliyun.com#' /var/spool/cron/root
成功替换:
cat /var/spool/cron/root
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>/dev/null
Ansbile批量替换:
ansible applet -a"sed -i 's#ntp.ksyun.cn#ntp1.aliyun.com#' /var/spool/cron/root"
[实践Ok]#deprecation_warnings = True允许在ansible-playbook输出结果中禁用“不建议使用”警告
Unix/LinuxC技术 jackxiang 2018-7-26 11:40
ansible applet -m ping
[DEPRECATION WARNING]: DEFAULT_SUDO_EXE option, In favor of Ansible Become, which is a generic framework. See become_exe. ,
use become instead. This feature will be removed in version 2.8. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
[DEPRECATION WARNING]: DEFAULT_MODULE_LANG option, Modules are coded to set their own locale if needed for screenscraping .
This feature will be removed in version 2.9. Deprecation warnings can be disabled by setting deprecation_warnings=False in
ansible.cfg.
#deprecation_warnings = True 允许在ansible-playbook输出结果中禁用“不建议使用”警告
vi /etc/ansible/ansible.cfg
解决办法:
#deprecation_warnings = True
deprecation_warnings = false
[DEPRECATION WARNING]: DEFAULT_SUDO_EXE option, In favor of Ansible Become, which is a generic framework. See become_exe. ,
use become instead. This feature will be removed in version 2.8. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
[DEPRECATION WARNING]: DEFAULT_MODULE_LANG option, Modules are coded to set their own locale if needed for screenscraping .
This feature will be removed in version 2.9. Deprecation warnings can be disabled by setting deprecation_warnings=False in
ansible.cfg.
#deprecation_warnings = True 允许在ansible-playbook输出结果中禁用“不建议使用”警告
vi /etc/ansible/ansible.cfg
解决办法:
#deprecation_warnings = True
deprecation_warnings = false
[实践OK]如何调试Systemctl查看开机启动列表systemctl list-unit-files | grep enable,以memcached为例。查看开机启动:ls /etc/systemd/system/multi-user.target.wants/
Unix/LinuxC技术 jackxiang 2018-7-21 14:31
CentOS7.X下如何查看并将一个应用设置为开机启动?systemctl start slapd 只是启动,并不是开机启动。
背景:有时候我们使用systemctl命令,如简单点的systemctl start memcached来讲,出现错时,会有一些提示,但是提示的内容是变量,其并没有将参数给编译后的值放入,于是出现如下所示,但是要失败了怎么排查这些参数呢?此文就讲这个问题,如果不是为了linux开机启动提速而并行启动外,这个systemctl其本质是想接管很多东西,但也带来了很多麻烦,难怪linus对此有一定的意见,系统要保持简单,好用。像开机慢可以少开机或不关机嘛,学学人家苹果升级在半夜,你慢就慢,谁管你,从策略上就规避了,把技术搞复杂还是简单是一门哲学,而创始人的价值就在于坚守设计艺术,而不光是技术。
● memcached.service - Memcached
Loaded: loaded (/usr/lib/systemd/system/memcached.service; enabled; vendor preset: disabled)
Active: inactive (dead) since Fri 2018-07-20 18:48:50 CST; 19h ago
Process: 15266 ExecStart=/usr/local/memcached/bin/memcached -u $USER -p $PORT -m $CACHESIZE -c $MAXCONN $OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 15266 (code=exited, status=0/SUCCESS)
失败:
systemctl start memcached
Job for memcached.service failed because the control process exited with error code. See "systemctl status memcached.service" and "journalctl -xe" for details.
/etc/sysconfig/memcached
systemctl daemon-reload
systemctl start memcached
systemctl status memcached.service
Active: failed (Result: exit-code) since Sat 2018-07-21 14:35:22 CST; 5s ago
Process: 11417 ExecStart=/usr/local/memcached/bin/memcached -u $USER -p $PORT -m $CACHESIZE -c $MAXCONN $OPTIONS (code=exited, status=71)
Process: 11399 ExecStartPre=/bin/bash -l -c echo "/usr/local/memcached/bin/memcached" -u $USER -p $PORT -m $CACHESIZE -c $MAXCONN $OPTIONS > /tmp/systemctl.debug (code=exited, status=0/SUCCESS)
Main PID: 11417 (code=exited, status=71)
如果有错,需要挑食的参数查看 /tmp/systemctl.debug:
cat /tmp/systemctl.debug
/usr/local/memcached/bin/memcached -u root -p 11211 -m 64 -c 1024 -vv >> /data/logs/memcached/11211/memcached.log 2>&1
背景:有时候我们使用systemctl命令,如简单点的systemctl start memcached来讲,出现错时,会有一些提示,但是提示的内容是变量,其并没有将参数给编译后的值放入,于是出现如下所示,但是要失败了怎么排查这些参数呢?此文就讲这个问题,如果不是为了linux开机启动提速而并行启动外,这个systemctl其本质是想接管很多东西,但也带来了很多麻烦,难怪linus对此有一定的意见,系统要保持简单,好用。像开机慢可以少开机或不关机嘛,学学人家苹果升级在半夜,你慢就慢,谁管你,从策略上就规避了,把技术搞复杂还是简单是一门哲学,而创始人的价值就在于坚守设计艺术,而不光是技术。
● memcached.service - Memcached
Loaded: loaded (/usr/lib/systemd/system/memcached.service; enabled; vendor preset: disabled)
Active: inactive (dead) since Fri 2018-07-20 18:48:50 CST; 19h ago
Process: 15266 ExecStart=/usr/local/memcached/bin/memcached -u $USER -p $PORT -m $CACHESIZE -c $MAXCONN $OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 15266 (code=exited, status=0/SUCCESS)
失败:
systemctl start memcached
Job for memcached.service failed because the control process exited with error code. See "systemctl status memcached.service" and "journalctl -xe" for details.
/etc/sysconfig/memcached
systemctl daemon-reload
systemctl start memcached
systemctl status memcached.service
Active: failed (Result: exit-code) since Sat 2018-07-21 14:35:22 CST; 5s ago
Process: 11417 ExecStart=/usr/local/memcached/bin/memcached -u $USER -p $PORT -m $CACHESIZE -c $MAXCONN $OPTIONS (code=exited, status=71)
Process: 11399 ExecStartPre=/bin/bash -l -c echo "/usr/local/memcached/bin/memcached" -u $USER -p $PORT -m $CACHESIZE -c $MAXCONN $OPTIONS > /tmp/systemctl.debug (code=exited, status=0/SUCCESS)
Main PID: 11417 (code=exited, status=71)
如果有错,需要挑食的参数查看 /tmp/systemctl.debug:
cat /tmp/systemctl.debug
/usr/local/memcached/bin/memcached -u root -p 11211 -m 64 -c 1024 -vv >> /data/logs/memcached/11211/memcached.log 2>&1
常常在发邮件时用到上下移动行调整服务器的IP简单排序:
Sublime:
Ctrl + Shift + Enter 可以在当前行上面添加一行。
Ctrl + Shift + 上箭头 ,作用:将当前行上移一行。
Ctrl + Shift + 下箭头 ,作用:将当前行下移一行。
Editplus:
Alt + Shift + 上箭头 ,作用:将当前行上移一行。
Alt + Shift + 下箭头 ,作用:将当前行下移一行。
visual studio code:
Alt+ ↑ / ↓ 作用:向上/向下移动当前行
Shift+Alt + ↓ / ↑ 作用:向上/向下复制当前行
Ctrl+Shift+K 作用:删除当前行
Ctrl+Enter 作用:在当前行以下插入
Ctrl+Shift+Enter 作用:在当前行以上插入
Sublime:
Ctrl + Shift + Enter 可以在当前行上面添加一行。
Ctrl + Shift + 上箭头 ,作用:将当前行上移一行。
Ctrl + Shift + 下箭头 ,作用:将当前行下移一行。
Editplus:
Alt + Shift + 上箭头 ,作用:将当前行上移一行。
Alt + Shift + 下箭头 ,作用:将当前行下移一行。
visual studio code:
Alt+ ↑ / ↓ 作用:向上/向下移动当前行
Shift+Alt + ↓ / ↑ 作用:向上/向下复制当前行
Ctrl+Shift+K 作用:删除当前行
Ctrl+Enter 作用:在当前行以下插入
Ctrl+Shift+Enter 作用:在当前行以上插入
[实践OK]PHP-FPM子进程数量应该如何设置?php-fpm.conf 配置说明。
Php/Js/Shell/Go jackxiang 2018-7-16 21:41
对于Docker又反转为静态方式进程数了,如下:
pm = dynamic 如何控制子进程,选项有static和dynamic
pm.max_children:静态方式下开启的php-fpm进程数量
自己实践如下:
/usr/local/php/sbin/php-fpm --daemonize --fpm-config /usr/local/php/etc/php-fpm.conf --pid /usr/local/php/var/run/php-fpm.pid
#docker 无service/systemctl,为2时两个进程,为1时一个进程,如下:
root 35308 1 0 16:12 ? 00:00:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
www 35309 35308 0 16:12 ? 00:00:00 php-fpm: pool www
www 35310 35308 0 16:12 ? 00:00:00 php-fpm: pool www
pkill -9 php 可杀死,然后可修改pm.max_children = 1 ==》pm.max_children = 2,也就是上面的2个进程 。
来自:http://www.cnblogs.com/ahaii/p/5776809.html
背影:对于低配置机器,建议写死PHP-FPM进程数得了,而对于高配置机器,则如果写在动态的,因为根据流量进行fork了PHP-FPM进程运动量很大,应该是在高配置身体健康的时候去做,等你是一个低配置的机器,你再去做增加进程去做时就死了。
一)PHP-FPM子进程数量应该如何设置?
二)php-fpm.conf 配置说明:
php-fpm中pm.start_servers 多大合适?
{(cpu空闲时等待连接的php的最小子进程数) + (cpu空闲时等待连接的php的最大子进程数 - cpu空闲时等待连接的php的最小子进程数)/ 2};
用配置表示就是:min_spare_servers + (max_spare_servers - min_spare_servers) / 2;一般而言,设置成10-20之间的数据足够满足需求了。
英文表示@/usr/local/php/etc/php-fpm.conf:
; The number of child processes created on startup.
; Note: Used only when pm is set to 'dynamic'
; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
1)XIYOU-API线上24G(24576M),24CPU生产机器配置:
2)目前RPMBUILD打包写死:
/home/test/rpmbuild/SOURCES/php-fpm.conf
/home/test/rpmbuild/SOURCES/www.conf
3)通过grep从/usr/local/php/etc/php-fpm.conf里陪陪出对应项的值:
附,php-fpm.conf 配置说明:
来自:https://blog.csdn.net/u013372487/article/details/80168979
HP-FPM子进程数量应该如何设置?摘录自:https://blog.csdn.net/jt521xlg/article/details/50992631 ,最前面参考计算最小PHP进程来源:
首先,我们关注下 PHP-FPM 的运行方式:
static :表示在 `php-fpm` 运行时直接 `fork` 出 `pm.max_chindren` 个子进程,
dynamic:表示,运行时 `fork` 出 `start_servers` 个进程,随着负载的情况,动态的调整,最多不超过 `max_children` 个进程。
一般推荐用 static。
优点是不用动态的判断负载情况,提升性能;
缺点是多占用些系统内存资源。
PHP-FPM 子进程数量,是不是越多越好?
当然不是,pm.max_chindren,进程多了,增加进程管理的开销以及上下文切换的开销。
更核心的是,能并发执行的 php-fpm 进程不会超过 cpu 个数。
如何设置,取决于你的代码
如果代码是 CPU 计算密集型的,pm.max_chindren 不能超过 CPU 的内核数。
如果不是,那么将 pm.max_chindren 的值大于 CPU 的内核数,是非常明智的。
国外技术大拿给出这么个公式:
在 N + 20% 和 M / m 之间。
N 是 CPU 内核数量。
M 是 PHP 能利用的内存数量。
m 是每个 PHP 进程平均使用的内存数量。
适用于 dynamic 方式。
static方式:M / (m * 1.2)
当然,还有一种保险的方式,来配置 max_children。适用于 static 方式。
先把 max_childnren 设置成一个比较大的值。
稳定运行一段时间后,观察 php-fpm 的 status 里的 max active processes 是多少
然后把 max_children 配置比它大一些就可以了。
pm.max_requests:指的是每个子进程在处理了多少个请求数量之后就重启。
这个参数,理论上可以随便设置,但是为了预防内存泄漏的风险,还是设置一个合理的数比较好
来自:https://blog.csdn.net/jt521xlg/article/details/50992631
pm = dynamic 如何控制子进程,选项有static和dynamic
pm.max_children:静态方式下开启的php-fpm进程数量
自己实践如下:
/usr/local/php/sbin/php-fpm --daemonize --fpm-config /usr/local/php/etc/php-fpm.conf --pid /usr/local/php/var/run/php-fpm.pid
#docker 无service/systemctl,为2时两个进程,为1时一个进程,如下:
root 35308 1 0 16:12 ? 00:00:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
www 35309 35308 0 16:12 ? 00:00:00 php-fpm: pool www
www 35310 35308 0 16:12 ? 00:00:00 php-fpm: pool www
pkill -9 php 可杀死,然后可修改pm.max_children = 1 ==》pm.max_children = 2,也就是上面的2个进程 。
来自:http://www.cnblogs.com/ahaii/p/5776809.html
背影:对于低配置机器,建议写死PHP-FPM进程数得了,而对于高配置机器,则如果写在动态的,因为根据流量进行fork了PHP-FPM进程运动量很大,应该是在高配置身体健康的时候去做,等你是一个低配置的机器,你再去做增加进程去做时就死了。
一)PHP-FPM子进程数量应该如何设置?
二)php-fpm.conf 配置说明:
php-fpm中pm.start_servers 多大合适?
{(cpu空闲时等待连接的php的最小子进程数) + (cpu空闲时等待连接的php的最大子进程数 - cpu空闲时等待连接的php的最小子进程数)/ 2};
用配置表示就是:min_spare_servers + (max_spare_servers - min_spare_servers) / 2;一般而言,设置成10-20之间的数据足够满足需求了。
英文表示@/usr/local/php/etc/php-fpm.conf:
; The number of child processes created on startup.
; Note: Used only when pm is set to 'dynamic'
; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
1)XIYOU-API线上24G(24576M),24CPU生产机器配置:
2)目前RPMBUILD打包写死:
/home/test/rpmbuild/SOURCES/php-fpm.conf
/home/test/rpmbuild/SOURCES/www.conf
3)通过grep从/usr/local/php/etc/php-fpm.conf里陪陪出对应项的值:
附,php-fpm.conf 配置说明:
来自:https://blog.csdn.net/u013372487/article/details/80168979
HP-FPM子进程数量应该如何设置?摘录自:https://blog.csdn.net/jt521xlg/article/details/50992631 ,最前面参考计算最小PHP进程来源:
首先,我们关注下 PHP-FPM 的运行方式:
static :表示在 `php-fpm` 运行时直接 `fork` 出 `pm.max_chindren` 个子进程,
dynamic:表示,运行时 `fork` 出 `start_servers` 个进程,随着负载的情况,动态的调整,最多不超过 `max_children` 个进程。
一般推荐用 static。
优点是不用动态的判断负载情况,提升性能;
缺点是多占用些系统内存资源。
PHP-FPM 子进程数量,是不是越多越好?
当然不是,pm.max_chindren,进程多了,增加进程管理的开销以及上下文切换的开销。
更核心的是,能并发执行的 php-fpm 进程不会超过 cpu 个数。
如何设置,取决于你的代码
如果代码是 CPU 计算密集型的,pm.max_chindren 不能超过 CPU 的内核数。
如果不是,那么将 pm.max_chindren 的值大于 CPU 的内核数,是非常明智的。
国外技术大拿给出这么个公式:
在 N + 20% 和 M / m 之间。
N 是 CPU 内核数量。
M 是 PHP 能利用的内存数量。
m 是每个 PHP 进程平均使用的内存数量。
适用于 dynamic 方式。
static方式:M / (m * 1.2)
当然,还有一种保险的方式,来配置 max_children。适用于 static 方式。
先把 max_childnren 设置成一个比较大的值。
稳定运行一段时间后,观察 php-fpm 的 status 里的 max active processes 是多少
然后把 max_children 配置比它大一些就可以了。
pm.max_requests:指的是每个子进程在处理了多少个请求数量之后就重启。
这个参数,理论上可以随便设置,但是为了预防内存泄漏的风险,还是设置一个合理的数比较好
来自:https://blog.csdn.net/jt521xlg/article/details/50992631
[实践OK]Linux下的netstat查看所有端口/TCP/UDP端口常用参数总结。
Unix/LinuxC技术 jackxiang 2018-7-15 09:28
netstat -lntp #常用命令参数及解释如下:主要是看IP和TCP,以及程序的PID。
-l, --listening display listening server sockets
-n, --numeric don't resolve names
-t, tcp
-p, --program
Show the PID and name of the program to which each socket belongs.
一)netstat常用查看端口参数之查看所有tcp/udp端口:
netstat -atlunp|grep 80
二)netstat常用查看端口参数之单独查看tcp/udp端口命令:
netstat -uln
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 0.0.0.0:111 0.0.0.0:*
udp 0 0 0.0.0.0:808 0.0.0.0:*
udp 0 0 127.0.0.1:837 0.0.0.0:*
udp 0 0 0.0.0.0:17617 0.0.0.0:*
udp 0 0 0.0.0.0:2392 0.0.0.0:*
假如没有n,直接用netstat -tl,显示的是一些端口的程序名,如下:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:5646 *:* LISTEN
tcp 0 0 *:sunrpc *:* LISTEN
tcp 0 0 *:7824 *:* LISTEN
tcp 0 0 *:webcache *:* LISTEN
tcp 0 0 *:ssh *:* LISTEN
tcp 0 0 *:5881 *:* LISTEN
三)netstat常用查看端口参数之单独查看tcp端口命令:
netstat -tln
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:34945 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:32740 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:15770 0.0.0.0:* LISTEN
四)netstat本身也是通过读取系统中的/proc/net/tcp(6)文件来实现对当前网络状态的监控输出的
netstat本身也是通过读取系统中的/proc/net/tcp(6)文件来实现对当前网络状态的监控输出的。我们只要依样画葫芦对此文件进行 解析(主要是合并ipv4和ipv6的内容,然后从16进制转换成字符串形式的ip,端口),然后再比对一下,只要发现此socket的远程ip和端口和 php中的$_SERVER['REMOTE_ADDR'],$_SERVER['REMOTE_PORT']相匹配即可。具体实现如下:
摘录:http://www.4shell.org/archives/2064.html
参考:http://www.80sec.com/security-issue-on-linux-fd-inheritance.html
-l, --listening display listening server sockets
-n, --numeric don't resolve names
-t, tcp
-p, --program
Show the PID and name of the program to which each socket belongs.
一)netstat常用查看端口参数之查看所有tcp/udp端口:
netstat -atlunp|grep 80
二)netstat常用查看端口参数之单独查看tcp/udp端口命令:
netstat -uln
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 0.0.0.0:111 0.0.0.0:*
udp 0 0 0.0.0.0:808 0.0.0.0:*
udp 0 0 127.0.0.1:837 0.0.0.0:*
udp 0 0 0.0.0.0:17617 0.0.0.0:*
udp 0 0 0.0.0.0:2392 0.0.0.0:*
假如没有n,直接用netstat -tl,显示的是一些端口的程序名,如下:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:5646 *:* LISTEN
tcp 0 0 *:sunrpc *:* LISTEN
tcp 0 0 *:7824 *:* LISTEN
tcp 0 0 *:webcache *:* LISTEN
tcp 0 0 *:ssh *:* LISTEN
tcp 0 0 *:5881 *:* LISTEN
三)netstat常用查看端口参数之单独查看tcp端口命令:
netstat -tln
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:34945 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:32740 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:15770 0.0.0.0:* LISTEN
四)netstat本身也是通过读取系统中的/proc/net/tcp(6)文件来实现对当前网络状态的监控输出的
netstat本身也是通过读取系统中的/proc/net/tcp(6)文件来实现对当前网络状态的监控输出的。我们只要依样画葫芦对此文件进行 解析(主要是合并ipv4和ipv6的内容,然后从16进制转换成字符串形式的ip,端口),然后再比对一下,只要发现此socket的远程ip和端口和 php中的$_SERVER['REMOTE_ADDR'],$_SERVER['REMOTE_PORT']相匹配即可。具体实现如下:
摘录:http://www.4shell.org/archives/2064.html
参考:http://www.80sec.com/security-issue-on-linux-fd-inheritance.html
SecureCrt 设置在同一窗口下打开会话
Unix/LinuxC技术 jackxiang 2018-7-7 15:54
SecureCrt某个设置不合朕的心意,在打开一个新的连接时不是在同一个窗口下,它又新开了一个工作窗口,像下面这样,操作起来让人很不爽:
一个SSH打一一个SecureCRT,
解决方案:点击 File -> Connect In Tab/Tile 连接新的会话
来自:https://blog.csdn.net/u012135425/article/details/79487575
一个SSH打一一个SecureCRT,
解决方案:点击 File -> Connect In Tab/Tile 连接新的会话
来自:https://blog.csdn.net/u012135425/article/details/79487575
open /Users/jackXiang/Library/"Application Support"/VanDyke/SecureCRT/
UI界面解压Zip文件,直接在/Users/jackXiang/Downloads找到对应的解压文件点录,使用Ctrl+C后到上面目录再到 /Users/jackXiang/Library/"Application Support"/VanDyke/SecureCRT/点录的UI界面里后使用Ctrl+V,即可。
出错的原因应该是中文问题,来自:https://bbs.feng.com/read-htm-tid-6939481.html
UI界面解压Zip文件,直接在/Users/jackXiang/Downloads找到对应的解压文件点录,使用Ctrl+C后到上面目录再到 /Users/jackXiang/Library/"Application Support"/VanDyke/SecureCRT/点录的UI界面里后使用Ctrl+V,即可。
出错的原因应该是中文问题,来自:https://bbs.feng.com/read-htm-tid-6939481.html
越来越多的使用Macbook 或者 Macbook Pro,很多人反映使用一段时间之后苹果的Retina屏会出现雪花或者闪动的现象。经过龙朔的调研,我们发现绝大部分屏幕闪动不是硬件导致的,只要按照以下步骤操作,90%以上的屏闪会马上解决。
分析下原因,绝大部分屏闪会发生在通过笔记本电脑外接其他显示器之后发生,还有一部分是在陌生WIFI使用之后。外接显示器之后由于刷新率的不同导致Macbook默认显示设置变化是屏闪的主因。因此大家只要遵循以下步骤就可以解决困扰大家的问题。
第一步重置系统管理控制器(SMC)
1.将 Mac 关机。
2.将 MagSafe 或 USB-C 电源适配器连接到电源和 Mac。
3.在内建键盘上,按下键盘左侧的 Shift-Control-Option 键,然后同时按下电源按钮。
4.松开所有按键,然后再次按下电源按钮以开启 Mac。
第二步、重置非易失的随机访问存储器(NVRAM)
1.关闭 Mac。
2.在键盘上找到以下按键:Command (⌘)、Option、P 和 R。
3.打开 Mac。
4.听到启动声后立即按住 Command-Option-P-R 键。
5.按住这些按键直到电脑重新启动,然后您会再次听到启动声。
(如果使用 MacBook Pro 2016,您将不会听到启动声,请按住这些按键至少 20 秒钟,确保 Mac 正确完成该过程。)
6.松开这些按键。
第三步:关闭系统偏好设置->显示器->自动调节亮度(关闭)。
第四步:针对16款带有touch bar 的Macbook Pro闪屏的解决方法。
点击“系统偏好设置”,打开“安全与隐私”,关闭“FileVault”,然后重新开机。
分析下原因,绝大部分屏闪会发生在通过笔记本电脑外接其他显示器之后发生,还有一部分是在陌生WIFI使用之后。外接显示器之后由于刷新率的不同导致Macbook默认显示设置变化是屏闪的主因。因此大家只要遵循以下步骤就可以解决困扰大家的问题。
第一步重置系统管理控制器(SMC)
1.将 Mac 关机。
2.将 MagSafe 或 USB-C 电源适配器连接到电源和 Mac。
3.在内建键盘上,按下键盘左侧的 Shift-Control-Option 键,然后同时按下电源按钮。
4.松开所有按键,然后再次按下电源按钮以开启 Mac。
第二步、重置非易失的随机访问存储器(NVRAM)
1.关闭 Mac。
2.在键盘上找到以下按键:Command (⌘)、Option、P 和 R。
3.打开 Mac。
4.听到启动声后立即按住 Command-Option-P-R 键。
5.按住这些按键直到电脑重新启动,然后您会再次听到启动声。
(如果使用 MacBook Pro 2016,您将不会听到启动声,请按住这些按键至少 20 秒钟,确保 Mac 正确完成该过程。)
6.松开这些按键。
第三步:关闭系统偏好设置->显示器->自动调节亮度(关闭)。
第四步:针对16款带有touch bar 的Macbook Pro闪屏的解决方法。
点击“系统偏好设置”,打开“安全与隐私”,关闭“FileVault”,然后重新开机。
1.文件-》首选项-》设置
2.搜索设备 输入 git.path
下面显示 git.path:null (git可执行文件的路径)
3.右侧花括号内输入,在右方用户设置栏输入,注意是反斜杠:
{
"files.autoSave": "off",
"git.path": "D:/Program Files/Git/bin/git.exe",
}
注意:
不要使用 windows 的路径风格,例如 D:\\Git\\bin\\git.exe。
要使用 linux style 例如 D:/Git/bin/git.exe。
来自:https://www.cnblogs.com/ymyblog/p/8043555.html
https://blog.csdn.net/danicagogogo/article/details/79527013
同时选中所有匹配的:
用用Visual Studio的吗?Sublime有一个选择一个单词后按ctrl+F3,会把所有这个单词都会选中,在VS里怎么实现这样的?可有快捷键么。VS编辑器同时选中所有匹配的Ctrl+Shift+L。Shift+F12; 同时修改本文件中所有匹配的!
From:http://blog.poetries.top/2017/07/23/vs-keyboard-shortcuts/
2.搜索设备 输入 git.path
下面显示 git.path:null (git可执行文件的路径)
3.右侧花括号内输入,在右方用户设置栏输入,注意是反斜杠:
{
"files.autoSave": "off",
"git.path": "D:/Program Files/Git/bin/git.exe",
}
注意:
不要使用 windows 的路径风格,例如 D:\\Git\\bin\\git.exe。
要使用 linux style 例如 D:/Git/bin/git.exe。
来自:https://www.cnblogs.com/ymyblog/p/8043555.html
https://blog.csdn.net/danicagogogo/article/details/79527013
同时选中所有匹配的:
用用Visual Studio的吗?Sublime有一个选择一个单词后按ctrl+F3,会把所有这个单词都会选中,在VS里怎么实现这样的?可有快捷键么。VS编辑器同时选中所有匹配的Ctrl+Shift+L。Shift+F12; 同时修改本文件中所有匹配的!
From:http://blog.poetries.top/2017/07/23/vs-keyboard-shortcuts/
[实践OK]Ansible里的后向引用124进行替换,以及正则匹配shell下写在一行和写YAML文件的正则区别,结合正则猫RegexBuddy/Patterns的正确用法。PHP正则匹配反斜杠''和美元'$'的方法以及Ansible单行shell交互和写入yml文件的正则不同写法的原因和对比成功实践及理解。
Php/Js/Shell/Go jackxiang 2018-6-27 11:23
方便后面类似的需求,更快替换及测试,提高效率,如下:
ansible-playbook replace.yml -C -D
前置之1)Ansible的正则替换的模拟替换参数 -C -D,类似sed 的 -n 和 p结合只显示不真实替换,如下:
ansible-playbook aixiu_web.yml -e h=10.244.5.108 -C -D -t addhttpcdnsrcip
前置之2)正则被多重括号包起来的一个顺序和内容界定相当重要,它是从左到右数的一个\1\2\3的反向引用实践备忘:
上面1是最左边那个(,也就是所有的,第二个是匹配到的',它前面还有一些空行也被匹配上了的( '),所以上面显示有一些空的主要用来对新加的一行对齐,
第三个\3就是上一行去掉前和后的部分对于插入这行没有用(前无'后无,')(就是:"agent":"$http_user_agent"),第四个就是匹配到单独的一个(,'),
这个道理明白了也就对正则匹配出来的先后顺序有一个了解,再就是这个串特比有是\2里面的多个空格加一个单引号( '),
对于\n后面新加的一行对齐很重要,再就是\4也就是(,'),也是用来补充新加的一行少的部分,组成新一行起到了作用,见实践2:
') <=== \2
"http_cdn_src_ip":"$http_cdn_src_ip" <===新加的部分
,' <=== \4
上面三行构成了一个完整的和上面一样有N个空格打头的字符串:
'"http_cdn_src_ip":"$http_cdn_src_ip",'
backrefs参数:默认情况下,当根据正则替换文本时,即使regexp参数中的正则存在分组,在line参数中也不能对正则中的分组进行引用,除非将backrefs参数的值设置为yes。backrefs=yes表示开启后向引用,这样,line参数中就能对regexp参数中的分组进行后向引用了,这样说不太容易明白,可以参考后面的示例命令理解。backrefs=yes除了能够开启后向引用功能,还有另一个作用,默认情况下,当使用正则表达式替换对应行时,如果正则没有匹配到任何的行,那么line对应的内容会被插入到文本的末尾,不过,如果使用了backrefs=yes,情况就不一样了,当使用正则表达式替换对应行时,同时设置了backrefs=yes,那么当正则没有匹配到任何的行时,则不会对文件进行任何操作,相当于保持原文件不变。
原文:https://blog.csdn.net/dylloveyou/article/details/80698531
实践1)一行命令实现了正则替换,也就是Shell->Ansible的一个路径,它于直接定到yml里的正则写法不一样,看实践2作比较,原因:
写到文件里和一行的正则写法是不一样的,写一行涉及到终端传Shell的问题,而写到yaml的Ansible文件里则是python的交互,所以正则写法不大一样,如下:
shell交互: regexp='((.*)(\"agent\":\"\\\$http_user_agent\")(.*))'
yaml交互: regexp: '((.*)(\"agent\"\:\"\$http_user_agent\")(.*))'
比对发现:
一)\: 冒号在shell不需要转义,而在yaml文件里需要转义。
二)而shell里对$转义的右斜杠需要再加两个右斜杠一共三次,而yaml文件里轩一次也就行了,后面有描述这个$的问题。
三)有条件的替换,以防止出现替换时因为多次运行相同的Ansible脚本进而多次插入,注意when里面的变量加上单引号为字符串,否则会出现判断不准的问题:
实践2)实践发现假如要写到Yaml文件里,上面单独这一行放Shell里运行可以,但是放到yaml文件里是不行的,怎么办,重新修改调试Ok的文件版本如下所示:
TASK [将CDN透传过来的客户端访问出口IP写入Nginx日志] **********************************************************************************************************
--- before: /usr/local/nginx/conf/nginx.conf (content)
+++ after: /usr/local/nginx/conf/nginx.conf (content)
@@ -66,6 +66,7 @@
'"xff":"$http_x_forwarded_for",'
'"referer":"$http_referer",'
'"agent":"$http_user_agent",'
+ '"http_cdn_src_ip":"$http_cdn_src_ip",'
'"status":"$status"}';
access_log /data/logs/nginx/access.log main; #这一行显示冗余,并没有用,主要看+号。
changed: [10.244.25.77]
实践3)用ansible的insertafter实现:
如果用正则查到某行,在其后面写上也成用insertafter实现,但是这样据前面文章和实践就无法用这个\1\2这样的了,如果打开那个backrefs就需要regexp了,于是这样写实践是Ok的:
--- before: /usr/local/nginx/conf/nginx.conf (content)
+++ after: /usr/local/nginx/conf/nginx.conf (content)
@@ -66,6 +66,7 @@
'"xff":"$http_x_forwarded_for",'
'"referer":"$http_referer",'
'"agent":"$http_user_agent",'
+ '"http_cdn_src_ip":"$http_cdn_src_ip",'
'"status":"$status"}';
实践4)进一步实践发现正则和insertafter混用也是可以的,
也就是说insertafter之后,再加一个regexp正则匹配出\1\2可用在line里,同时加上backrefs: yes,可行的,
如下实践也是能实现的,去掉之前的\1和\n即可,就在它后面插入即可,实践发现并没在后面插入,而是直接替换了,也就是说insertafter失效了,还得按实践2走才Ok,要不就老老实实的按实践3在后在插入,不要引入正则也成,引入正则就失去了insertafter的本来功能了:
$ansible-playbook iweb_regexp.yml -C -D -t insertafter
PLAY [insertafter with regexp] **************************************************************************************************************
TASK [insert after] *************************************************************************************************************************
--- before: /usr/local/nginx/conf/nginx.conf (content)
+++ after: /usr/local/nginx/conf/nginx.conf (content)
@@ -65,7 +65,7 @@
'"request_uri":"$request_uri",'
'"xff":"$http_x_forwarded_for",'
'"referer":"$http_referer",'
- '"agent":"$http_user_agent",'
+ '"http_cdn_src_ip":"$http_cdn_src_ip",'
'"status":"$status"}';
access_log /data/logs/nginx/access.log main;
最后,基础研究,正则替换的基础知识:
对于斜杠来讲,在PHP里即使是单引号,它也是会和类似双引号里的$一样,有被转义:
'/\\\\/'
cat a.php
php a.php
\'
cat reg3.php
来自微信群:是因为双引号的原因,\#在双引号里,就是\#,\\#在双引号里,就是\#,\\\#在双引号里,就是\\#。
之前http://jackxiang.com/post/6466/研究过反斜杠,没有研究过$,这次主要研究$。
"^-? \\d+$":这个正则表达式为什么会有两个反斜杠
这要分两步看
首先字符串中的\\被编译器解释为\
然后作为正则表达式,\d又被正则表达式引擎解释为元字符只匹配数字
正则表达式中匹配一个反斜杠要用四个反斜杠,为什么呢?
分析一下“\\\\”,第一个斜杠是转义符,第二个斜杠是斜杠本身,第三个斜杠是转义符,第四个斜杠是斜杠本身。
有2点要清楚:
1.字符串里面表示斜杠就需要两个斜杠如“\\”
2.正则表达式里的斜杠需要转意,是用“\\”标示。
这样就比较好解释:
我们先要表示正则表达式里面的斜杠“\\”,然后再用字符串表示出来。而这2个斜杠分别需要一个转义符,这样就成了4个斜杠在正则表达式里面表示一个斜杠。
From:https://my.oschina.net/airship/blog/411045
阅读全文
ansible-playbook replace.yml -C -D
前置之1)Ansible的正则替换的模拟替换参数 -C -D,类似sed 的 -n 和 p结合只显示不真实替换,如下:
ansible-playbook aixiu_web.yml -e h=10.244.5.108 -C -D -t addhttpcdnsrcip
前置之2)正则被多重括号包起来的一个顺序和内容界定相当重要,它是从左到右数的一个\1\2\3的反向引用实践备忘:
上面1是最左边那个(,也就是所有的,第二个是匹配到的',它前面还有一些空行也被匹配上了的( '),所以上面显示有一些空的主要用来对新加的一行对齐,
第三个\3就是上一行去掉前和后的部分对于插入这行没有用(前无'后无,')(就是:"agent":"$http_user_agent"),第四个就是匹配到单独的一个(,'),
这个道理明白了也就对正则匹配出来的先后顺序有一个了解,再就是这个串特比有是\2里面的多个空格加一个单引号( '),
对于\n后面新加的一行对齐很重要,再就是\4也就是(,'),也是用来补充新加的一行少的部分,组成新一行起到了作用,见实践2:
') <=== \2
"http_cdn_src_ip":"$http_cdn_src_ip" <===新加的部分
,' <=== \4
上面三行构成了一个完整的和上面一样有N个空格打头的字符串:
'"http_cdn_src_ip":"$http_cdn_src_ip",'
backrefs参数:默认情况下,当根据正则替换文本时,即使regexp参数中的正则存在分组,在line参数中也不能对正则中的分组进行引用,除非将backrefs参数的值设置为yes。backrefs=yes表示开启后向引用,这样,line参数中就能对regexp参数中的分组进行后向引用了,这样说不太容易明白,可以参考后面的示例命令理解。backrefs=yes除了能够开启后向引用功能,还有另一个作用,默认情况下,当使用正则表达式替换对应行时,如果正则没有匹配到任何的行,那么line对应的内容会被插入到文本的末尾,不过,如果使用了backrefs=yes,情况就不一样了,当使用正则表达式替换对应行时,同时设置了backrefs=yes,那么当正则没有匹配到任何的行时,则不会对文件进行任何操作,相当于保持原文件不变。
原文:https://blog.csdn.net/dylloveyou/article/details/80698531
实践1)一行命令实现了正则替换,也就是Shell->Ansible的一个路径,它于直接定到yml里的正则写法不一样,看实践2作比较,原因:
写到文件里和一行的正则写法是不一样的,写一行涉及到终端传Shell的问题,而写到yaml的Ansible文件里则是python的交互,所以正则写法不大一样,如下:
shell交互: regexp='((.*)(\"agent\":\"\\\$http_user_agent\")(.*))'
yaml交互: regexp: '((.*)(\"agent\"\:\"\$http_user_agent\")(.*))'
比对发现:
一)\: 冒号在shell不需要转义,而在yaml文件里需要转义。
二)而shell里对$转义的右斜杠需要再加两个右斜杠一共三次,而yaml文件里轩一次也就行了,后面有描述这个$的问题。
三)有条件的替换,以防止出现替换时因为多次运行相同的Ansible脚本进而多次插入,注意when里面的变量加上单引号为字符串,否则会出现判断不准的问题:
实践2)实践发现假如要写到Yaml文件里,上面单独这一行放Shell里运行可以,但是放到yaml文件里是不行的,怎么办,重新修改调试Ok的文件版本如下所示:
TASK [将CDN透传过来的客户端访问出口IP写入Nginx日志] **********************************************************************************************************
--- before: /usr/local/nginx/conf/nginx.conf (content)
+++ after: /usr/local/nginx/conf/nginx.conf (content)
@@ -66,6 +66,7 @@
'"xff":"$http_x_forwarded_for",'
'"referer":"$http_referer",'
'"agent":"$http_user_agent",'
+ '"http_cdn_src_ip":"$http_cdn_src_ip",'
'"status":"$status"}';
access_log /data/logs/nginx/access.log main; #这一行显示冗余,并没有用,主要看+号。
changed: [10.244.25.77]
实践3)用ansible的insertafter实现:
如果用正则查到某行,在其后面写上也成用insertafter实现,但是这样据前面文章和实践就无法用这个\1\2这样的了,如果打开那个backrefs就需要regexp了,于是这样写实践是Ok的:
--- before: /usr/local/nginx/conf/nginx.conf (content)
+++ after: /usr/local/nginx/conf/nginx.conf (content)
@@ -66,6 +66,7 @@
'"xff":"$http_x_forwarded_for",'
'"referer":"$http_referer",'
'"agent":"$http_user_agent",'
+ '"http_cdn_src_ip":"$http_cdn_src_ip",'
'"status":"$status"}';
实践4)进一步实践发现正则和insertafter混用也是可以的,
也就是说insertafter之后,再加一个regexp正则匹配出\1\2可用在line里,同时加上backrefs: yes,可行的,
如下实践也是能实现的,去掉之前的\1和\n即可,就在它后面插入即可,实践发现并没在后面插入,而是直接替换了,也就是说insertafter失效了,还得按实践2走才Ok,要不就老老实实的按实践3在后在插入,不要引入正则也成,引入正则就失去了insertafter的本来功能了:
$ansible-playbook iweb_regexp.yml -C -D -t insertafter
PLAY [insertafter with regexp] **************************************************************************************************************
TASK [insert after] *************************************************************************************************************************
--- before: /usr/local/nginx/conf/nginx.conf (content)
+++ after: /usr/local/nginx/conf/nginx.conf (content)
@@ -65,7 +65,7 @@
'"request_uri":"$request_uri",'
'"xff":"$http_x_forwarded_for",'
'"referer":"$http_referer",'
- '"agent":"$http_user_agent",'
+ '"http_cdn_src_ip":"$http_cdn_src_ip",'
'"status":"$status"}';
access_log /data/logs/nginx/access.log main;
最后,基础研究,正则替换的基础知识:
对于斜杠来讲,在PHP里即使是单引号,它也是会和类似双引号里的$一样,有被转义:
'/\\\\/'
cat a.php
php a.php
\'
cat reg3.php
来自微信群:是因为双引号的原因,\#在双引号里,就是\#,\\#在双引号里,就是\#,\\\#在双引号里,就是\\#。
之前http://jackxiang.com/post/6466/研究过反斜杠,没有研究过$,这次主要研究$。
"^-? \\d+$":这个正则表达式为什么会有两个反斜杠
这要分两步看
首先字符串中的\\被编译器解释为\
然后作为正则表达式,\d又被正则表达式引擎解释为元字符只匹配数字
正则表达式中匹配一个反斜杠要用四个反斜杠,为什么呢?
分析一下“\\\\”,第一个斜杠是转义符,第二个斜杠是斜杠本身,第三个斜杠是转义符,第四个斜杠是斜杠本身。
有2点要清楚:
1.字符串里面表示斜杠就需要两个斜杠如“\\”
2.正则表达式里的斜杠需要转意,是用“\\”标示。
这样就比较好解释:
我们先要表示正则表达式里面的斜杠“\\”,然后再用字符串表示出来。而这2个斜杠分别需要一个转义符,这样就成了4个斜杠在正则表达式里面表示一个斜杠。
From:https://my.oschina.net/airship/blog/411045
阅读全文
背景:在Linux下习惯使用ll、la、l等ls别名的童鞋到mac os可就郁闷了,
whichi ll
-bash: whichi: command not found
[xiangdong@jenkins_server_bj_sjs_10_71_182_25 .ssh]$ which ll
alias ll='ls -l --color=auto'
/bin/ls
其实只要在用户目录下建立一个脚本“.bash_profile”,并输入以下内容即可:
ls -l --color=auto
1 2014-461deMacBook-Pro:~ root# cd ~
2 2014-461deMacBook-Pro:~ root#vim .bash_profile
加入:
保存后,执行
3 2014-461deMacBook-Pro:~ root#source .bash_profile
=============================================
.bash_profile
alias l='ls -alhF'
alias la='ls -AFh'
alias ll='ls -lhAF'
alias l='ls -alhF'
alias la='ls -AFh'
alias ll='ls -lhAF'
然后在终端窗口中输入下列命令后,别名即可立即生效:
source ~/.bash_profile
source ~/.bash_profile
如果不知道如何创建,可以直接在“终端”窗口中依次执行如下命令:
.bash_profile完整创建命令Shell
cd ~
touch .bash_profile
echo "alias l='ls -alhF'" >>.bash_profile
echo "alias la='ls -AFh'" >>.bash_profile
echo "alias ll='ls -lhAF'" >>.bash_profile
source ~/.bash_profile
cd ~
touch .bash_profile
echo "alias l='ls -alhF'" >>.bash_profile
echo "alias la='ls -AFh'" >>.bash_profile
echo "alias ll='ls -lhAF'" >>.bash_profile
source ~/.bash_profile
来自:https://clang.cn/blog/749.html
https://www.cnblogs.com/daly2008/p/4160066.html
whichi ll
-bash: whichi: command not found
[xiangdong@jenkins_server_bj_sjs_10_71_182_25 .ssh]$ which ll
alias ll='ls -l --color=auto'
/bin/ls
其实只要在用户目录下建立一个脚本“.bash_profile”,并输入以下内容即可:
ls -l --color=auto
1 2014-461deMacBook-Pro:~ root# cd ~
2 2014-461deMacBook-Pro:~ root#vim .bash_profile
加入:
保存后,执行
3 2014-461deMacBook-Pro:~ root#source .bash_profile
=============================================
.bash_profile
alias l='ls -alhF'
alias la='ls -AFh'
alias ll='ls -lhAF'
alias l='ls -alhF'
alias la='ls -AFh'
alias ll='ls -lhAF'
然后在终端窗口中输入下列命令后,别名即可立即生效:
source ~/.bash_profile
source ~/.bash_profile
如果不知道如何创建,可以直接在“终端”窗口中依次执行如下命令:
.bash_profile完整创建命令Shell
cd ~
touch .bash_profile
echo "alias l='ls -alhF'" >>.bash_profile
echo "alias la='ls -AFh'" >>.bash_profile
echo "alias ll='ls -lhAF'" >>.bash_profile
source ~/.bash_profile
cd ~
touch .bash_profile
echo "alias l='ls -alhF'" >>.bash_profile
echo "alias la='ls -AFh'" >>.bash_profile
echo "alias ll='ls -lhAF'" >>.bash_profile
source ~/.bash_profile
来自:https://clang.cn/blog/749.html
https://www.cnblogs.com/daly2008/p/4160066.html
[实践OK]在CentOS7上安装并配置Python3.8.1环境,新版本Python3.6.2支持Ansible的,和pip3 pip 安装 pdb调试程序如 python -m pdb mail.py,涉及到yum里的python本维持旧版本也需要修改其指向旧版本。
Unix/LinuxC技术 jackxiang 2018-6-21 10:20
背景:Python很火,且连一些如ESP8266的硬件都支持Python了。
目前Python存在两个版本Python2和Python3系列,且这两个版本同时在更新与维护。到底是选择Python2还是选择Python3,取决于当前要使用的库、框架支持哪个版本。因此一台电脑上可能需要同时安装Python2和Python3两个版本。本文主要讲述的是如何在centos7系统中存在python2系列的同时安装python3.8.1(目前python3系列的最新版本)
1.安装升级相应的软件包
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
2.下载python 3.8.1 的源码包
wget http://mirrors.sohu.com/python/3.8.1/Python-3.8.1.tgz
3.安装python3.8.1
tar zxvf Python-3.8.1.tgz -C /opt/
cd /opt/Python-3.8.1/
./configure --prefix=/usr/local/python3
make && make install
若遇到编译问题:
zipimport.ZipImportError: can't decompress data; zlib not available #make && make install
yum install zlib zlib-devel -y
4.配置python,配置python3 pip3 软链接,设置软连接:目的是让我们直接在任何地方输入python3命令都可以得到python解释器的运行。
更改/usr/bin/python链接:
ln -s /usr/local/python3/bin/python3.8.1 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
mv /usr/bin/pip{,.backup}
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip #python2-pip没有,就没有这个pip.
查看是否安装成功
python3 -V
pip3 -V
更改/usr/bin/python默认链接,实现升级:
/usr/bin/python --version
Python 2.7.5
mv /usr/bin/python{,.old.backup}
ln -sf /usr/local/python3/bin/python3.8 /usr/bin/python
5.查看当python的版本,出现版本信息即为正确安装
python3 --version
安装python3.7出现ModuleNotFoundError: No module named '_ctypes'报错(重新编译一次就OK了)
来自:https://mhl.xyz/Python/python37_ctypes.html
6.更改yum脚本的python依赖
yum localinstall mysql-5.7.12-171123111505.el7.centos.x86_64.rpm
File "/usr/libexec/urlgrabber-ext-down", line 28
except OSError, e:
^
# ls /usr/bin/yum*
# ls yum*
yum yum-config-manager yum-debug-restore yum-groups-manager
yum-builddep yum-debug-dump yumdownloader
更改以上文件头为
#!/usr/bin/python 改为 #!/usr/bin/python2
用Sed 一行搞定,参考自[实践OK]经常用到之linux sed 批量替换字符串,及模糊替换和模糊拼接的例子。http://jackxiang.com/post/2324/:
/usr/bin/yum-groups-manager #!/usr/bin/python -tt
/usr/bin/yumdownloader #直接python后面有一个空格
/usr/bin/yum-debug-restore #!/usr/bin/python -tt
/usr/bin/yum-debug-dump #!/usr/bin/python -tt
/usr/bin/yum-config-manager #!/usr/bin/python -tt
/usr/bin/yum-builddep #!/usr/bin/python -tt
/usr/bin/yum #python后面无空格
势必要有两种替换:
sed -i 's/#!\/usr\/bin\/python /#!\/usr\/bin\/python2.7 /' /usr/bin/yum-builddep
sed -i 's/#!\/usr\/bin\/python /#!\/usr\/bin\/python2.7 /' /usr/bin/yum-config-manager
sed -i 's/#!\/usr\/bin\/python /#!\/usr\/bin\/python2.7 /' /usr/bin/yum-debug-dump
sed -i 's/#!\/usr\/bin\/python /#!\/usr\/bin\/python2.7 /' /usr/bin/yum-debug-restore
sed -i 's/#!\/usr\/bin\/python /#!\/usr\/bin\/python2.7 /' /usr/bin/yumdownloader
sed -i 's/#!\/usr\/bin\/python /#!\/usr\/bin\/python2.7 /' /usr/bin/yum-groups-manager
sed -i 's/#!\/usr\/bin\/python$/#!\/usr\/bin\/python2.7/' /usr/bin/yum
sed -i 's/#!\/usr\/bin\/python$/#!\/usr\/bin\/python2.7/' /usr/libexec/urlgrabber-ext-down
这个-tt的没有啥用,只是起到警告作用,完全在替换时不要:
-t Issue a warning when a source file mixes tabs and spaces for indentation in a way that makes it
depend on the worth of a tab expressed in spaces. Issue an error when the option is given twice.
-t 当源文件以制作缩进的方式混合制表符和空格时发出警告
取决于用空格表示的选项卡的价值。 当该选项被赋予两次时发出一个错误。
7.测试用Python的Pip3安装Python扩展:
rpm -qf /bin/pip
python2-pip-8.1.2-5.el7.noarch
/bin/pip --version
pip 9.0.1 from /usr/lib/python2.7/site-packages (python 2.7)
pip3 --version
pip 9.0.1 from /usr/local/python3/lib/python3.8.1/site-packages (python 3.8.1)
pip3 install PyEmail
Collecting PyEmail
Downloading https://files.pythonhosted.org/packages/ca/39/caf0436670b6fa9f072e322fab1a2b04d5631bdbdc8ea9857230aae02dd5/PyEmail-0.0.1.zip
Installing collected packages: PyEmail
Running setup.py install for PyEmail ... done
Successfully installed PyEmail-0.0.1
You are using pip version 9.0.1, however version 10.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
pip3 install ipdb
Collecting ipdb
Downloading https://files.pythonhosted.org/packages/80/fe/4564de08f174f3846364b3add8426d14cebee228f741c27e702b2877e85b/ipdb-0.11.tar.gz
Requirement already satisfied: setuptools in /usr/local/python3/lib/python3.8.1/site-packages (from ipdb)
Collecting ipython>=5.0.0 (from ipdb)
Downloading https://files.pythonhosted.org/packages/b1/7f/91d50f28af3e3a24342561983a7857e399ce24093876e6970b986a0b6677/ipython-6.4.0-py3-none-any.whl (750kB)
62% |████████████████████ | 471kB 54kB/s eta 0:00:06
好一会下载安装就能装上这个,但是提示:You are using pip version 9.0.1, however version 10.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip
pip install --upgrade pip
pip install ipdb #再一次安装这个Python的调试扩展
python -m pdb mail.py
最后,这些脚本总结起来放一块就这些,方便后期再安装之用:
来自:https://blog.csdn.net/hobohero/article/details/54381475
来自:https://blog.csdn.net/wjqwinn/article/details/75633714
目前Python存在两个版本Python2和Python3系列,且这两个版本同时在更新与维护。到底是选择Python2还是选择Python3,取决于当前要使用的库、框架支持哪个版本。因此一台电脑上可能需要同时安装Python2和Python3两个版本。本文主要讲述的是如何在centos7系统中存在python2系列的同时安装python3.8.1(目前python3系列的最新版本)
1.安装升级相应的软件包
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
2.下载python 3.8.1 的源码包
wget http://mirrors.sohu.com/python/3.8.1/Python-3.8.1.tgz
3.安装python3.8.1
tar zxvf Python-3.8.1.tgz -C /opt/
cd /opt/Python-3.8.1/
./configure --prefix=/usr/local/python3
make && make install
若遇到编译问题:
zipimport.ZipImportError: can't decompress data; zlib not available #make && make install
yum install zlib zlib-devel -y
4.配置python,配置python3 pip3 软链接,设置软连接:目的是让我们直接在任何地方输入python3命令都可以得到python解释器的运行。
更改/usr/bin/python链接:
ln -s /usr/local/python3/bin/python3.8.1 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
mv /usr/bin/pip{,.backup}
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip #python2-pip没有,就没有这个pip.
查看是否安装成功
python3 -V
pip3 -V
更改/usr/bin/python默认链接,实现升级:
/usr/bin/python --version
Python 2.7.5
mv /usr/bin/python{,.old.backup}
ln -sf /usr/local/python3/bin/python3.8 /usr/bin/python
5.查看当python的版本,出现版本信息即为正确安装
python3 --version
安装python3.7出现ModuleNotFoundError: No module named '_ctypes'报错(重新编译一次就OK了)
来自:https://mhl.xyz/Python/python37_ctypes.html
6.更改yum脚本的python依赖
yum localinstall mysql-5.7.12-171123111505.el7.centos.x86_64.rpm
File "/usr/libexec/urlgrabber-ext-down", line 28
except OSError, e:
^
# ls /usr/bin/yum*
# ls yum*
yum yum-config-manager yum-debug-restore yum-groups-manager
yum-builddep yum-debug-dump yumdownloader
更改以上文件头为
#!/usr/bin/python 改为 #!/usr/bin/python2
用Sed 一行搞定,参考自[实践OK]经常用到之linux sed 批量替换字符串,及模糊替换和模糊拼接的例子。http://jackxiang.com/post/2324/:
/usr/bin/yum-groups-manager #!/usr/bin/python -tt
/usr/bin/yumdownloader #直接python后面有一个空格
/usr/bin/yum-debug-restore #!/usr/bin/python -tt
/usr/bin/yum-debug-dump #!/usr/bin/python -tt
/usr/bin/yum-config-manager #!/usr/bin/python -tt
/usr/bin/yum-builddep #!/usr/bin/python -tt
/usr/bin/yum #python后面无空格
势必要有两种替换:
sed -i 's/#!\/usr\/bin\/python /#!\/usr\/bin\/python2.7 /' /usr/bin/yum-builddep
sed -i 's/#!\/usr\/bin\/python /#!\/usr\/bin\/python2.7 /' /usr/bin/yum-config-manager
sed -i 's/#!\/usr\/bin\/python /#!\/usr\/bin\/python2.7 /' /usr/bin/yum-debug-dump
sed -i 's/#!\/usr\/bin\/python /#!\/usr\/bin\/python2.7 /' /usr/bin/yum-debug-restore
sed -i 's/#!\/usr\/bin\/python /#!\/usr\/bin\/python2.7 /' /usr/bin/yumdownloader
sed -i 's/#!\/usr\/bin\/python /#!\/usr\/bin\/python2.7 /' /usr/bin/yum-groups-manager
sed -i 's/#!\/usr\/bin\/python$/#!\/usr\/bin\/python2.7/' /usr/bin/yum
sed -i 's/#!\/usr\/bin\/python$/#!\/usr\/bin\/python2.7/' /usr/libexec/urlgrabber-ext-down
这个-tt的没有啥用,只是起到警告作用,完全在替换时不要:
-t Issue a warning when a source file mixes tabs and spaces for indentation in a way that makes it
depend on the worth of a tab expressed in spaces. Issue an error when the option is given twice.
-t 当源文件以制作缩进的方式混合制表符和空格时发出警告
取决于用空格表示的选项卡的价值。 当该选项被赋予两次时发出一个错误。
7.测试用Python的Pip3安装Python扩展:
rpm -qf /bin/pip
python2-pip-8.1.2-5.el7.noarch
/bin/pip --version
pip 9.0.1 from /usr/lib/python2.7/site-packages (python 2.7)
pip3 --version
pip 9.0.1 from /usr/local/python3/lib/python3.8.1/site-packages (python 3.8.1)
pip3 install PyEmail
Collecting PyEmail
Downloading https://files.pythonhosted.org/packages/ca/39/caf0436670b6fa9f072e322fab1a2b04d5631bdbdc8ea9857230aae02dd5/PyEmail-0.0.1.zip
Installing collected packages: PyEmail
Running setup.py install for PyEmail ... done
Successfully installed PyEmail-0.0.1
You are using pip version 9.0.1, however version 10.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
pip3 install ipdb
Collecting ipdb
Downloading https://files.pythonhosted.org/packages/80/fe/4564de08f174f3846364b3add8426d14cebee228f741c27e702b2877e85b/ipdb-0.11.tar.gz
Requirement already satisfied: setuptools in /usr/local/python3/lib/python3.8.1/site-packages (from ipdb)
Collecting ipython>=5.0.0 (from ipdb)
Downloading https://files.pythonhosted.org/packages/b1/7f/91d50f28af3e3a24342561983a7857e399ce24093876e6970b986a0b6677/ipython-6.4.0-py3-none-any.whl (750kB)
62% |████████████████████ | 471kB 54kB/s eta 0:00:06
好一会下载安装就能装上这个,但是提示:You are using pip version 9.0.1, however version 10.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip
pip install --upgrade pip
pip install ipdb #再一次安装这个Python的调试扩展
python -m pdb mail.py
最后,这些脚本总结起来放一块就这些,方便后期再安装之用:
来自:https://blog.csdn.net/hobohero/article/details/54381475
来自:https://blog.csdn.net/wjqwinn/article/details/75633714
[实践OK]awk之NF妙用之空格字符串重新连接、去除空行和显示中间列的方法。
Php/Js/Shell/Go jackxiang 2018-6-20 20:00
一)把空格连接改为|连接:
#cat b
a b c d
awk -vOFS="|" 'NF+=0' b
a|b|c|d
二)去空行:
cat a
1
2
3
awk NF a
1
2
3
三)
背景:鉴于安全的原因,如果你的电脑没有桌面锁密码,别人也能用,此时不安全,得把对应的自动填写的用户各、密码的Cookie清理掉,而对于那个Chrome记住并自动填写登录的用户名和密码也不安全,只需要输入验证码就进入了,于是查了下怎么给去掉这些的存在Chrome里,实践是可行的,很有必要记录下来,免得忘记了,无它。
一)如何在Chrome中删除特定于站点的Cookie:
chrome://settings/
高级-内容设置-Cookie-所有 Cookie 和网站数据[右侧有一个搜索Cookie:输入jackxiang.com]-点进去就有-XXXX.com 本地存储的数据:
PHPSESSID --> X
userid --> X
userpasswd --> X
来自:http://mos86.com/67173.html
二)如何删除chrome保存的密码,新版本的Chrome浏览器有单独删某个网站的Cookie,位置在开发者工具(Option+Command+i)->Application->Storage->Cookies->倒三角点开,就是当前网站的Cookie,在上面点右键,就有一个Clear,就能删掉了:
chrome://settings/
Ctrl+shift+del,里弹出一个清除浏览数据,里面有一个:密码项,再就是有一个选择是:过去七天、近四周、时间不限。
选一个时间,并勾选,其它给不勾选,执行即可。
如果你是当天数据的,选过去一天即可,依次类推。然后勾选<密码>项。最后选择清楚浏览数据。这样操作就完成啦。当你再次登录之前的网站时,你发现你就需要重新输入密码了。
来自:https://jingyan.baidu.com/article/f3ad7d0fe5e71309c3345baf.html
一)如何在Chrome中删除特定于站点的Cookie:
chrome://settings/
高级-内容设置-Cookie-所有 Cookie 和网站数据[右侧有一个搜索Cookie:输入jackxiang.com]-点进去就有-XXXX.com 本地存储的数据:
PHPSESSID --> X
userid --> X
userpasswd --> X
来自:http://mos86.com/67173.html
二)如何删除chrome保存的密码,新版本的Chrome浏览器有单独删某个网站的Cookie,位置在开发者工具(Option+Command+i)->Application->Storage->Cookies->倒三角点开,就是当前网站的Cookie,在上面点右键,就有一个Clear,就能删掉了:
chrome://settings/
Ctrl+shift+del,里弹出一个清除浏览数据,里面有一个:密码项,再就是有一个选择是:过去七天、近四周、时间不限。
选一个时间,并勾选,其它给不勾选,执行即可。
如果你是当天数据的,选过去一天即可,依次类推。然后勾选<密码>项。最后选择清楚浏览数据。这样操作就完成啦。当你再次登录之前的网站时,你发现你就需要重新输入密码了。
来自:https://jingyan.baidu.com/article/f3ad7d0fe5e71309c3345baf.html
Sublime编辑器里,用正则把一堆IP粘贴选取出来:
来自:https://www.jb51.net/article/101221.htm
来自:https://www.jb51.net/article/101221.htm
kernel:unregister_netdevice: waiting for lo to become free. Usage count = 1
Unix/LinuxC技术 jackxiang 2018-6-11 17:51
用ssh登录阿里云centos7主机,过一会儿会自动出现以下信息,
Message from syslogd@docker_test_bj_sjs_10_71_159_108 at Jun 11 17:49:08 ...
kernel:unregister_netdevice: waiting for lo to become free. Usage count = 1
在这个信息中,我这里按ctrl+c可以退回到, 有兄弟说是内核版本太低,升级内核:
起因:
安装了Docker容器,运行过程中报:kernel:unregister_netdevice: waiting for lo to become free. Usage count = 1
相似问题描述:https://segmentfault.com/q/1010000007045424
解决办法:https://github.com/moby/moby/issues/5618
尝试升级到最新的4.19+内核。
1.查看操作系统版本
https://blog.csdn.net/lijing742180/article/details/80662062
2.查看内核版本
uname -sr
3.升级的三种方案
参考:
https://blog.csdn.net/breeze915/article/details/79243673
https://blog.csdn.net/qq_27281257/article/details/82049634
https://blog.csdn.net/RBPicsdn/article/details/79642932
4.删除旧内核
https://blog.csdn.net/RBPicsdn/article/details/79642932
rpm -qa | grep kernel
sudo yum remove -y 旧内核的名字就好了
术语解析:
术语解析
kernel-ml
kernel-ml 中的ml是英文【mainline stable】的缩写,elrepo-kernel中罗列出来的是最新的稳定主线版本。
kernel-lt
kernel-lt 中的lt是英文【long term support】的缩写,elrepo-kernel中罗列出来的长期支持版本。
转载至链接:https://my.oschina.net/boreboluomiduo/blog/3035332。
摘自:https://www.liangzl.com/get-article-detail-123785.html
https://m.aliyun.com/yunqi/ask/2877/
Message from syslogd@docker_test_bj_sjs_10_71_159_108 at Jun 11 17:49:08 ...
kernel:unregister_netdevice: waiting for lo to become free. Usage count = 1
在这个信息中,我这里按ctrl+c可以退回到, 有兄弟说是内核版本太低,升级内核:
起因:
安装了Docker容器,运行过程中报:kernel:unregister_netdevice: waiting for lo to become free. Usage count = 1
相似问题描述:https://segmentfault.com/q/1010000007045424
解决办法:https://github.com/moby/moby/issues/5618
尝试升级到最新的4.19+内核。
1.查看操作系统版本
https://blog.csdn.net/lijing742180/article/details/80662062
2.查看内核版本
uname -sr
3.升级的三种方案
参考:
https://blog.csdn.net/breeze915/article/details/79243673
https://blog.csdn.net/qq_27281257/article/details/82049634
https://blog.csdn.net/RBPicsdn/article/details/79642932
4.删除旧内核
https://blog.csdn.net/RBPicsdn/article/details/79642932
rpm -qa | grep kernel
sudo yum remove -y 旧内核的名字就好了
术语解析:
术语解析
kernel-ml
kernel-ml 中的ml是英文【mainline stable】的缩写,elrepo-kernel中罗列出来的是最新的稳定主线版本。
kernel-lt
kernel-lt 中的lt是英文【long term support】的缩写,elrepo-kernel中罗列出来的长期支持版本。
转载至链接:https://my.oschina.net/boreboluomiduo/blog/3035332。
摘自:https://www.liangzl.com/get-article-detail-123785.html
https://m.aliyun.com/yunqi/ask/2877/