来自: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"
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
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
常常在发邮件时用到上下移动行调整服务器的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      作用:在当前行以上插入
对于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
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
SecureCrt某个设置不合朕的心意,在打开一个新的连接时不是在同一个窗口下,它又新开了一个工作窗口,像下面这样,操作起来让人很不爽:
一个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
越来越多的使用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”,然后重新开机。
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/
方便后面类似的需求,更快替换及测试,提高效率,如下:

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
背景: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



一)把空格连接改为|连接:
#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
Sublime编辑器里,用正则把一堆IP粘贴选取出来:



来自:https://www.jb51.net/article/101221.htm
用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/
分页: 18/272 第一页 上页 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 下页 最后页 [ 显示模式: 摘要 | 列表 ]