数据专栏

智能大数据搬运工,你想要的我们都有

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

「深度学习福利」大神带你进阶工程师,立即查看>>>
SSL(Secure Socket Layer 安全套接层)是基于HTTPS下的一个协议加密层,最初是由网景公司(Netscape)研发,后被IETF(The Internet Engineering Task Force - 互联网工程任务组)标准化后写入(RFCRequest For Comments 请求注释),RFC里包含了很多互联网技术的规范!
起初是因为HTTP在传输数据时使用的是明文(虽然说POST提交的数据时放在报体里看不到的,但是还是可以通过抓包工具窃取到)是不安全的,为了解决这一隐患网景公司推出了SSL安全套接字协议层,SSL是基于HTTP之下TCP之上的一个协议层,是基于HTTP标准并对TCP传输数据时进行加密,所以HPPTS是HTTP+SSL/TCP的简称。
由于HTTPS的推出受到了很多人的欢迎,在SSL更新到3.0时,IETF对SSL3.0进行了标准化,并添加了少数机制(但是几乎和SSL3.0无差异),标准化后的IETF更名为TLS1.0(Transport Layer Security 安全传输层协议),可以说TLS就是SSL的新版本3.1,并同时发布“RFC2246-TLS加密协议详解”,如果想更深层次的了解TLS的工作原理可以去RFC的官方网站:www.rfc-editor.org,搜索RFC2246即可找到RFC文档! ——以上就是历史背景
SSL 是指安全套接字层,简而言之,它是一项标准技术,可确保互联网连接安全,保护两个系统之间发送的任何敏感数据,防止网络犯罪分子读取和修改任何传输信息,包括个人资料。两个系统可能是指服务器和客户端(例如,浏览器和购物网站),或两个服务器之间(例如,含个人身份信息或工资单信息的应用程序)。
要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识。
1. 大致了解几个基本术语(HTTPS、SSL、TLS)的含义
2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长连接”)
3. 大致了解加密算法的概念(尤其是“对称加密与非对称加密”的区别)
4. 大致了解 CA 证书的用途 5.TCP通信协议的几次握手
TLS(传输层安全)是更为安全的升级版 SSL。由于 SSL 这一术语更为常用,因此我们仍然将我们的安全证书称作 SSL。但当您从赛门铁克购买 SSL 时,您真正购买的是最新的 TLS 证书,有 ECC、RSA 或 DSA 三种加密方式可以选择。
TLS/SSL是一种加密通道的规范
它利用对称加密、公私钥不对称加密及其密钥交换算法,CA系统进行加密且可信任的信息传输
在HTTP SSL中常用的对称加密算法有RC4,AES,3DES,Camellia等
SSL由从前的网景公司开发
有1,2,3三个版本,但现在只使用版本3
TLS是SSL的标准化后的产物
有1.0 1.1 1.2三个版本
默认使用1.0
TLS1.0和SSL3.0几乎没有区别
事实上我们现在用的都是TLS,但因为历史上习惯了SSL这个称呼
平常还是以SSL为多。
SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。
TLS 的最大优势就在于:TLS 是独立于应用协议。高层协议可以透明地分布在 TLS 协议上面。然而,TLS 标准并没有规定应用程序如何在 TLS 上增加安全性;它把如何启动 TLS 握手协议以及如何解释交换的认证证书的决定权留给协议的设计者和实施者来判断。
 1、SSL加密
  SSL是Netscape公司所提出的安全保密协议,在浏览器(如Internet Explorer、Netscape Navigator)和Web服务器(如Netscape的Netscape Enterprise Server、ColdFusion Server等等)之间构造安全通道来进行数据传输,SSL运行在TCP/IP层之上、应用层之下,为应用程序提供加密数据通道,它采用了RC4、MD5以及RSA等加密算法,使用40 位的密钥,适用于商业信息的加密。同时,Netscape公司相应开发了HTTPS协议并内置于其浏览器中,HTTPS实际上就是HTTP over SSL,它使用默认端口443,而不是像HTTP那样使用端口80来和TCP/IP进行通信。HTTPS协议使用SSL在发送方把原始数据进行加密,然后在接受方进行解密,加密和解密需要发送方和接受方通过交换共知的密钥来实现,因此,所传送的数据不容易被网络黑客截获和解密。 然而,加密和解密过程需要耗费系统大量的开销,严重降低机器的性能,相关测试数据表明使用HTTPS协议传输数据的工作效率只有使用HTTP协议传输的十分之一。假如为了安全保密,将一个网站所有的Web应用都启用SSL技术来加密,并使用HTTPS协议进行传输,那么该网站的性能和效率将会大大降低,而且没有这个必要,因为一般来说并不是所有数据都要求那么高的安全保密级别
  2、TLS加密
  TLS:安全传输层协议
  TLS:Transport Layer Security
  安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。较低的层为 TLS 记录协议,位于某个可靠的传输协议(例如 TCP)上面。

SSL与TLS的区别以及介绍
SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。
TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。
  SSL是Netscape开发的专门用于保护Web通讯的,目前版本为3.0.最新版本的TLS 1.0是IETE(工程任务组)指定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。两者差别极小,可以理解为SSL 3.1,它是写入了RFC的。
  SSL(Secure Socket Layer)
  为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取。
  当前版本为3.0。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。
  SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
  SSL协议提供的服务主要有:
  1)认证用户和服务器,确保数据发送到正确的客户机和服务器;
  2)加密数据以防止数据中途被窃取;
  3)维护数据的完整性,确保数据在传输过程中不被改变。
  SSL协议的工作流程:
  服务器认证阶段:
  1)客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接;
  2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息;
  3)客服根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;
  4)服务器恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。
  用户认证阶段:在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。
  TLS(Transport Layer Security Protocol):安全传输层协议
  安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。该协议由两成组成:TLS记录协议(TLS Record)和TLS握手协议(TLS Handshake)。较低的层为TLS记录协议,位于某个可靠的传输协议(例如TCP)上面。
  TLS记录协议提供的连接安全性具有两个基本特性:
私有——对称加密用以数据加密(DES、RC4等)。对称加密所产生的密钥对每个连接都是唯一的,且此密钥基于另一个协议(如握手协议)协商。记录协议也可以不加密使用。
可靠——信息传输包括使用密钥的MAC进行信息完整性检查。安全哈希功能(SHA、MD5等)用于MAC计算。记录协议在没有MAC的情况下也能操作,但一般只能用于这种模式,即有另一个协议正在使用记录协议传输协商安全参数。
  TLS记录协议用于封装各种高层协议。作为这种封装协议之一的握手协议允许服务器与客户机在应用程序协议传输和接收其第一个数据字节前彼此之间互相认证,协商加密算法和加密密钥。TLS握手协议提供的连接安全具有三个基本属性:
可以使用非对称的,或公共密钥的密码术来认证对等方的身份。该认证是可选的,但至少需要一个结点方。
共享解密密钥的协商是安全的。对偷窃者来说协商加密是难以获得的。此外经过认证过的连接不能获得加密,即使是进入连接中间的攻击者也不能。
协商是可靠的。没有经过通信方成员的检测,任何攻击者都不能修改通信协商。
  TLS的最大优势就在于:TLS是独立于应用协议。高层协议可以透明地分布在TLS协议上面。然而,TLS标准并没有规定应用程序如何在TLS上增加安全性;它如何启动TLS握手协议以及如何解释交换的认证证书的决定权留给协议的设计者和实施者来判断。
  协议结构
  TLS协议包括两个协议组——TLS记录协议和TLS握手协议。
  TLS和SSL的关系:并列关系
  最新版本的TLS(Transport Layer Security,传输层安全协议)是IETF(Internet Engineering Task Force,Internet工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。在TLS与SSL 3.0之间存在着显著的差别,主要是它们所支持的加密算法不同,所以TLS与SSL 3.0不能互操作。
  1.TLS与SSL的差异
  1)版本号:TLS记录格式与SSL记录格式相同,但版本号的值不同,TLS的版本1.0使用的版本号为SSLv3.1。
  2)报文鉴别码:SSLv3.0和TLS的MAC算法及MAC计算的范围不同。TLS使用RFC-2104定义的HMAC算法。SSLv3.0使用了相似的算法,两者差别在于SSLv3.0中,填充字节与密钥之间采用的是连接运算,而HMAC算法采用的异或运算。但是两者的安全程度是相同的。
  3)伪随机函数:TLS使用了称为PRF的伪随机函数来将密钥扩展成数据块,是更安全的方式。
  4)报警代码:TLS支持几乎所有的SSLv3.0报警代码,而且TLS还补充定义了很多报警代码,如解密失败(decryption_failed)、记录溢出(record_overflow)、未知CA(unknown_ca)、拒绝访问(access_denied)等。
  5)密文族和客户证书:SSLv3.0和TLS存在少量差别,即TLS不支持Fortezza密钥交换、加密算法和客户证书。
  6)certificate_verify和finished消息:SSLv3.0和TLS在用certificate_verify和finished消息计算MD5和SHA-1散列码时,计算的输入有少许差别,但安全性相当。
  7)加密计算:TLS和SSLv3.0在计算主密值(master secret)时采用的方式不同。
  8)填充:用户数据加密之前需要增加的填充字节。在SSL中,填充后的数据长度哟啊达到密文快长度的最小整数倍。而在TLS中,填充后的数据长度可以是密文块长度的任意整数倍(但填充的最大长度为255字节),这种方式可以防止基于对报文长度进行分析的攻击。

  2.TLS的主要增强内容
  TLS的主要目标是使SSL更安全,并使协议的规范更精确和完善。TLS在SSL v3.0的基础上,提供了以下增加内容:
  1)更安全的MAC算法
  2)更严密的警报
  3)“灰色区域”规范的更明确的定义

  3.TLS对于安全性的改进
  1)对于消息认证使用密钥散列法:TLS使用“消息认证代码的密钥散列法”(HMAC),当记录在开放的网络(如因特网)上传送时,该代码确保记录不会被变更。SSLv3.0还提供键控消息认证,但HMAC比SSLv3.0使用(消息认证代码)MAC功能更安全。
  2)增强的伪随机功能(PRF):PRF生成密钥数据。在TLS中,HMAC定义PRF。PRF使用两种散列算法保证其安全性。如果任一算法暴露了,只要第二种算法未暴露,则数据仍然是安全的。
  3)改进的已完成消息验证:TLS和SSLv3.0都对两个端点提供已完成的消息,该消息认证交换的消息没有被变更。然而,TLS将此已完成消息基于PRF和HMAC值之上,这也比SSLv3.0更安全。
  4)一致证书处理:与SSLv3.0不同,TLS试图指定必须在TLS之间实现交换的证书类型。
  5)特定警报消息:TLS提供更多的特定和附加警报,以指示任一会话端点检测到的问题。TLS还对何时应该发送某些警报进行记录。

[更多详细地介绍]
1、聊聊HTTPS和SSL/TLS协议 | 程序师 - 程序员、编程语言、软件开发、编程技术 http://www.techug.com/post/https-ssl-tls.html
2、详解SSL/TLS http://www.mamicode.com/info-detail-1846390.html (推荐阅读)
Buy me a cup of coffee :)
系统运维
2019-11-29 09:06:00
「深度学习福利」大神带你进阶工程师,立即查看>>> Options +FollowSymLinks -Indexes RewriteEngine On RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] Options +FollowSymlinks -Multiviews RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [L,R=302] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L] # 图片和Flash内容缓存一个月 Header set Cache-Control "max-age=2592000" Header set Access-Control-Allow-Origin "*" #ip黑名单 Order Deny,Allow Deny from 61.160.210.205
Buy me a cup of coffee :)
系统运维
2019-11-29 09:06:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
前言
linux 经常需要对文本进行编辑,有时候要看文本是第几行,有时候需要删除连续的多行文本
1.显示行号 vim test.py
显示:
esc 模式下输入 set number
2.删除连续的多行
在显示行号的基础上,esc模式下输入 1,6d 即可删除1-6行
3.另外有时候会需求清空文件,这种清空要求不能影响文件写入
可使用命令 > >test.py 表示把空重定向到test.py,即可清除文件内容,但是不影响文件当时的写入
系统运维
2019-11-28 22:25:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
0.基础环境准备
准备三台机器ip为:192.168.213.150、192.168.213.151、192.168.213.152
操作系统:CentOS Linux release 7.5.1804 (Core)
JDK: 1.8.0_231
SCALA: 2.13.1
SPARK: 3.0.0
1.安装java环境
# tar -zxvf jdk-8u231-linux-x64.tar.gz
# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/local/src/jdk1.8.0_231
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export PATH=${JAVA_HOME}/bin:$PATH
#source /etc/profile
请按照上面配置java环境变量,否则后面启动集群是会报如下错误
Spark , JAVA_HOME is not set
2.安装scala
https://www.scala-lang.org/download/
#wget https://downloads.lightbend.com/scala/2.13.1/scala-2.13.1.rpm
#rpm -ivh scala-2.13.1.rpm
#vim /etc/profile.d/scala.sh
export SCALA_HOME=/usr/share/scala
export PATH=${SCALA_HOME}/bin:$PATH
#source /etc/profile
检查环境变量
# echo $SCALA_HOME
# scala -version
3.安装spark
wget http://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-3.0.0-preview/spark-3.0.0-preview-bin-hadoop2.7.tgz
#tar xf spark-3.0.0-preview-bin-hadoop2.7.tgz -C /usr/share
#ln -s /usr/share/spark-3.0.0-preview-bin-hadoop2.7 /usr/share/spark
#vim /etc/profile.d/spark.sh
export SPARK_HOME=/usr/share/spark
export PATH=${SPARK_HOME}/bin:$PATH
#source /etc/profile
检查环境变量
# echo $SPARK_HOME
# spark-shell -version
测试
# spark-submit --class org.apache.spark.examples.SparkPi --master local[*] /usr/share/spark/examples/jars/spark-examples_2.12-3.0.0-preview.jar
4.搭建集群
vm1:
#vi /usr/share/spark/conf/spark-env.sh
加入如下内容
#!/usr/bin/env bash
export SPARK_MASTER_HOST=192.168.213.150
#vi /usr/share/spark/conf/slaves
加入如下内容
192.168.213.151
192.168.213.152
5.免密设置
vm1、vm2、vm3免密设置
设置方法见另一篇博客:
https://my.oschina.net/guiguketang/blog/730182
6.启动|关闭集群
在vm1上执行,启动集群
#sh /usr/share/spark/sbin/start-master.sh
#sh /usr/share/spark/sbin/start-slaves.sh
关闭集群
#sh /usr/share/spark/sbin/stop-slaves.sh
#sh /usr/share/spark/sbin/stop-master.sh
查看日志位置
/usr/share/spark/logs
通过如下地址访问控制台:
http://192.168.213.150:8080/
系统运维
2019-11-28 18:02:00
「深度学习福利」大神带你进阶工程师,立即查看>>> 进入互动式命令环境 开机出现 grub boot loader 开机选项菜单时,立即点击键盘任意鍵, boot loader 会暂停。 按下 e ,编辑选项菜单。 移动上下鍵至 linux16 核心命令行: linux16 /vmlinuz-3.10.0-123.el7.x86_64 root=UUID=449d53d1-84c2-40c0-b05e-d1900591d71b ro rd.lvm.lv=vg_kvm7usb/swap crashkernel=auto vconsole.keymap=us crashkernel=auto vconsole.font=latarcyrheb-sun16 rd.lvm.lv=vg_kvm7usb/root rhgb quiet LANG=en_US.UTF-8 rd.break
在核心命令行最后追加 rd.break 。 再按下Ctrl+X 重新以这个设定开机。 修改密码过程
开机后的互动式命令环境,并不是正常开机的系统,正常开机系统挂载在 /sysboot 且挂载成只读,必须重新挂载成可写入,才能修改密码,步骤如下: 重新挂载 /sysroot 成可读可写,并切换到 /sysroot 。 switch_root:/# mount –o remount,rw /sysroot switch_root:/# chroot /sysroot 设定密码 # 注意 如果修改root密码. 如下即可. sh-4.2# passwd # 如果修改普通用户密码. 必须加上用户名. sh-4.2# passwd username 因为在此情況下,SELinux 并沒有启动,对所有文件的更改,可能会造成文档的 context 不正确,为确保开机时重新设定 SELinux context,必须在根目录下添加隐藏文件 .autorelabel 。 sh-4.2# touch /.autorelabel 退出chroot,并重新开机 sh-4.2# exit switch_root:/# exit
重启后,使用修改后用户密码登入即可。
系统运维
2019-11-28 17:04:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
准备
相关依赖更新 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc-c++ perl-ExtUtils-MakeMaker wget autoconf -y
wget 安装 yum install wget
jenkins 安装
yum 安装 yum install -y java-1.8.0-openjdk && \ wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo && \ rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key &&\ yum clean all && yum makecache && \ yum install -y jenkins && \ systemctl start jenkins
开放端口 # 添加端口 firewall-cmd --zone=public --add-port=80/tcp --permanent # 重启防火墙 firewall-cmd --reload
查看秘钥 cat /var/lib/jenkins/secrets/initialAdminPassword
查询admin密码 less /var/log/jenkins/jenkins.log //查询admin密码
使用技巧
默认端口 http://localhost:8080/
重启Jenkins http://localhost:8080/restart
重载Jenkins配置信息 http://localhost:8080/reload
Jenkins 配置信息 systemctl status jenkins
卸载旧jenkins rpm -qa |grep jenkins rpm -e jenkins find / -iname jenkins | xargs -n 1000 rm -rf
在jenkins配置文件中配置jdk环境变量 vim /etc/init.d/jenkins
配置Jenkins的端口 vim /etc/sysconfig/jenkins
修改jenkins默认的操作用户
linux下jenkins默认使用jenkins用户进行脚本和文件的操作,如果不修改,在部署项目时需要调整涉及到的文件和目录的操作权限,可以调整jenkins配置文件,将用户修改为root用户。将JENKINS_USER="jenkins"调整为JENKINS_USER=“root”: vim /etc/sysconfig/jenkins
修改目录的相应权限 chown -R root /var/log/jenkins chgrp -R root /var/log/jenkins chown -R root /var/lib/jenkins chgrp -R root /var/lib/jenkins chown -R root /var/cache/jenkins chgrp -R root /var/cache/jenkins
修改文件权限 #chmod -R 777 /home/user1/workspace/git
启用端口 vim /etc/sysconfig/iptables
启动jenkins service jenkins start/stop/restart
Jenkins 问题记录
1、jenkins首次启动卡在启动界面
如果第一次在浏览器中打开项目卡在 Jenkins正在启动,请稍后... 阶段
那么 你需要修改下配置文件,因为你所在网络被限制了。
需要你进入jenkins的工作目录,打开hudson.model.UpdateCenter.xml
把 http://updates.jenkins-ci.org/update-center.json 改成
http://mirror.xmission.com/jenkins/updates/update-center.json
还是不行的话 找到updates目录下的default.json
把里面所有的谷歌地址改成百度的
2、首页一直加载问题 进入updates文件夹 修改 default.json vim /var/lib/jenkins/updates/default.json 把 "connectionCheckUrl":" http://www.google.com/ " 改为 "connectionCheckUrl":" https://www.baidu.com/ "
3、jenkins更换清华源 [root@localhost ~]# find / -name "default.json" /var/lib/jenkins/updates/default.json [root@localhost ~]# sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' /var/lib/jenkins/updates/default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' /var/lib/jenkins/updates/default.json [root@localhost ~]# service jenkins restart
4、Jenkins出现一个错误 无法连接到Jenkins如何解决 一般出现在这个问题是由于配置文件权限出了问题,只需要三大步即可解决:
1,关闭jenkins服务 systemctl stop jenkins
2,修改config.xml(最好在修改之前备份一下这个文件,以防止以后万一还需要这个版本) vim /var/lib/jenkins/config.xml
修改第10行 true
修改为:false
删除第11-17行
3,启动Jenkins服务: systemctl start jenkins
5、解决jenkins 2.2版本无法关闭跨站请求伪造保护
解决jenkins 2.2版本无法关闭跨站请求伪造保护 高版本jenkins不能界面禁用跨站请求伪造保护。
禁用跨站请求伪造保护操作如下:
修改jenkins的配置文件。vim /etc/sysconfig/jenkins
vim /etc/sysconfig/jenkins JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true"
配置后重启jenkins。service jenkins restart 访问网页查看:如下图效果
系统运维
2019-11-27 10:07:03
「深度学习福利」大神带你进阶工程师,立即查看>>>
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉

系统运维
2019-11-26 17:45:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
1-Ansible常用模块-yum_repository模块

一、概述
yum_repository 模块可以帮助我们管理远程主机上的 yum 仓库。
二、常用参数
name参数:必须参数,用于指定要操作的唯一的仓库ID,也就是”.repo”配置文件中每个仓库对应的”中括号”内的仓库ID。
baseurl参数:此参数用于设置 yum 仓库的 baseurl。
description参数:此参数用于设置仓库的注释信息,也就是”.repo”配置文件中每个仓库对应的”name字段”对应的内容。
file参数:此参数用于设置仓库的配置文件名称,即设置”.repo”配置文件的文件名前缀,在不使用此参数的情况下,默认以 name 参数的仓库ID作为”.repo”配置文件的文件名前缀,同一个”.repo” 配置文件中 可以存在多个 yum 源。
enabled参数:此参数用于设置是否激活对应的 yum 源,此参数默认值为 yes,表示启用对应的 yum 源,设置为 no 表示不启用对应的 yum 源。
gpgcheck参数:此参数用于设置是否开启 rpm 包验证功能,默认值为 no,表示不启用包验证,设置为 yes 表示开启包验证功能。
gpgcakey参数:当 gpgcheck 参数设置为 yes 时,需要使用此参数指定验证包所需的公钥。
state参数:默认值为 present,当值设置为 absent 时,表示删除对应的 yum 源。
三、示例
1.在 ansible-demo1 主机上设置ID为 aliEpel 的 yum 源,仓库配置文件路径为 /etc/yum.repos.d/aliEpel.repo。
[root@ansible-manager ~] # ansible ansible-demo1 -m yum_repository -a 'name=aliEpel description="alibaba EPEL" baseurl=https://mirrors.aliyun.com/epel/$releasever\Server/$basearch/'
ansible-demo1 | SUCCESS => { "changed": true, "repo": "aliEpel", "state": "present"}
2.在 ansible-demo1 主机上设置ID为 aliEpel 的 yum 源,仓库配置文件路径为 /etc/yum.repos.d/alibaba.repo。
[root@ansible-manager ~] # ansible ansible-demo1 -m yum_repository -a 'name=aliEpel description="alibaba EPEL" baseurl=https://mirrors.aliyun.com/epel/$releasever\Server/$basearch/ file=alibaba'
ansible-demo1 | SUCCESS => { "changed": true, "repo": "aliEpel", "state": "present"}
3.在 ansible-demo1 主机上设置ID为 local 的 yum 源,但是不启用它(local源使用系统光盘镜像作为本地 yum 源,以便测试举例,所以 baseurl 中的值以 file:/// 开头)。
ansible ansible-demo1 -m yum_repository -a 'name=local baseurl=file:///media description="local cd yum" enabled=no'
4.在 ansible-demo1 主机上设置ID为 local 的 yum 源,开启包验证功能,并指定验证包所需的公钥位置为 /media/RPM-GPG-KEY-CentOS-7。
ansible ansible-demo1 -m yum_repository -a 'name=local baseurl=file:///media description="local cd yum" gpgcheck=yes gpgcakey=file:///media/RPM-GPG-KEY-CentOS-7'
5.在 ansible-demo1 主机上删除 /etc/yum.repos.d/alibaba.repo 配置文件中的 aliEpel 源。
[root@ansible-manager ~] # ansible ansible-demo1 -m yum_repository -a 'file=alibaba name=aliEpel state=absent'
ansible-demo1 | SUCCESS => { "changed": true, "repo": "aliEpel", "state": "absent"}
重庆思庄红帽RHCE认证培训班火热报名中!每月循环开班,欢迎联系试听!
系统运维
2019-11-26 16:46:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
对于小白站长来说,服务器的配置可是一个不小的难题:既要保证环境搭建好以供网站能正常运行,又要配置好权限确保服务器的安全。
想当初我刚接触网站建设时,就为了这个倒腾了很久都没有搞定,最后还是换了一个集成了各种功能的全能镜像才得以使网站运行起来。
现在,有了云帮手面板,一切都变得不成问题!
什么是云帮手服务器管理面板?
云帮手是一款为用户轻松管理云服务器的运维管理工具,提供跨云多平台一站式批量云服务器安全管理服务。
云帮手服务器管理面板的安装非常简单,相信大家平时下载安装使用过各种PC客户端软件,是的,云帮手的安装就如同您之前下载的软件一样,支持一键安装!

特别提醒: PC端仅支持 Windows 7、Windows 8.x、Windows10 等个人桌面版操作系统!
云帮手下载地址

云帮手服务器管理面板特色功能
主动防御:从系统安全防护、网络安全防护、应用安全防护等展开全方位立体化纵深防御机制,多重保障(云)服务器安全;
风险扫描:为您提供24小时不间断安全巡检、系统漏洞扫描、一键修复加固,让风险无处可藏;
智能运维:化繁为简集中批量管理(云)服务器,一键部署Web、应用运行环境,让运维得心应手、事半功倍;
远程管理:集成Windows系统RDP远程桌面协议、Linux系统SSH远程登录协议,让远程登录如临其境;模拟Windows文件浏览器,让远程文件管理触手可及!
云帮手服务器管理面板其他功能截图
服务器集中管理界面

远程桌面&远程连接: 云帮手服务器运维面板提供远程桌面&远程连接

资源监控及资源告警: 用户可以通过设置告警阈值的方式创建告警规则,一旦系统资源使用量超过告警阈值,资源告警系统将实时产生告警消息,并推送到您的PC客户端程序,方便您及时发现并处理服务器资源使用异常!
安全巡检 :安全巡检功能可以及时发现系统存在的安全风险、系统漏洞,你可以一键修复系统漏洞、加固系统,提高系统安全性
资源监控 :系统资源监控功能可对云服务器进行系统资源监控,查看详细的监控数据,提取云服务器关键指标,以图表形式展示,并且支持自定义告警阈值,为用户提供立体化数据监控、智能化故障告警。


安全防护: 主要提供端口白名单、IP 黑白名单、网络连接管控等网络安全管理功能。
以上为部分功能界面说明和截图,如需了解,敬请安装体验,2分钟能装好。
云帮手官网地址: 点击进入官网
系统运维
2019-11-26 16:39:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
lsattr命令
查看文件的附加属性。查看文件是否被赋予了a,i属性,如果含有这两个属性,文件是不能被删除的。
a:让文件或目录路仅供附加用途
b:不更新文件或目录的最后存取时间
c:将文件或目录压缩后存放
d:将文件或目录排除在倾倒操作之外
i:不得任意更改文件或目录
s:保密性删除文件或目录
S:即时更新文件或目录
u:预防意外删除。

rpm命令
rpm -ivh package #直接安装
rpm --force -ivh package #忽略报错强制安装
rpm -ql package #查询包的所有文件
rpm -qa |grep package #查询包的安装包信息
rpm -e package #卸载
rpm -qf /usr/bin/tree #根据文件查询所需安装包

gzip压缩级别
gzip test #默认压缩级别3
数字1~9越大压缩级别越高,文件越小,同时越消耗CPU,时间越长
gzip -9 test #极限压缩

tr命令进行大小写转换
echo "HELLO WORLD" |tr 'A-Z' 'a-z'

Linux下开机脚本启动顺序
/etc/profile ---> /etc/profile.d/*.sh ---> ~/bash_profile ---> ~/.bashrc ---> /etc/bashrc

dd命令
dd if=/dev/sda of=/dev/sdb bs=4k status=progress #实时查看速度
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file #向磁盘写一个大文件,来看写性能
dd if=/root/1Gb.file bs=64k | dd of=/dev/null #从磁盘读取一个大文件,开看读性能
dd if=/dev/zero of=./a.log bs=10M count=10 #记录了10+0的读入、写出
利用/dev/urandom进行格式化(消除机密数据,防止被恢复)
dd if=/dev/urandom of=/dev/sda

crontab
*/5 * * * * shell.sh #每五分钟执行一次
* * * * * shell.sh #每分钟执行一次
0 0 * * 0 shell.sh #每周日0点执行
0 2-4 * * * shell.sh #凌晨2-4点,每小时执行一次
0 2-4,18,20 * * * shell.sh #凌晨2-4点,18和20点每小时执行一次
0 1 * * Sun shell.sh #每周末的凌晨一点执行一次

sed技巧
sed '/^north/a Hello world!' test.txt #以north开头的行之后追加Hello world!
sed '5q' test.txt #打印第五行后退出
sed 's/^[0-9][0-9]*//g' test.txt #删除所有行的首数字
sed -i 's/ /\n/g' test.txt #把字符串中的空格换成换行
ss命令:显示网络状态信息,包括TCP P连接,端口
-a 显示所有连接
-l 显示listen状态的连接(连接打开)
-m 显示内存信息(用于tcp_diag)
-o 显示tcp定时器x
-p 显示进程信息
-s 连接统计
-d 只显示dccp信息(等同于-A dccp)
-u 只显示udp信息(等同于-A udp)
-w 只显示raw信息(等同于-A raw)
-t 只显示tcp信息(等同于-A tcp)
-x 只显示unix通讯信息(等同于-A unix)
-4/-6 只显示ipv4/ipv6信息

iptables的备份恢复
iptables-save > /root/iptables-`date +%F` #备份iptables规则到文件中
ls /root
iptables-restore < /root/iptables-20190-10-09 #从文件中恢复iptables规则
iptables -L -n
扫描新设备
echo '- - -' > /sys/class/scsi_host/host0/scan
lsof命令
lsof -i :22 #查看正在使用22端口的应用程序
优化ssh
修改sshd_config
GSSAPIAuthentication no
useDNS no
系统运维
2019-11-26 15:06:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
在 redis3.0 以前集群需要借助哨兵 sentinel ,在 3.0 版本正式推出 Redis Cluster 高可用集群模式; Redis Cluster 方案不需要额外部署 Sentinel (哨兵)集群。
Redis 集群要求至少三个节点,否则不成功。本文采用虚拟机,模拟搭建三主三从集群模式。 虚拟机 IP 分别是 192.168.18.139 , 192.168.18.140 , 192.168.18.141
可以只配置一台虚拟机,其他两台直接用克隆
本文使用 192.168.18.139 进行配置
一 安装 redis v5
1. 下载 wget http://download.redis.io/releases/redis-5.0.7.tar.gz
2. 解压 tar -zxvf redis-5.0.7.tar.gz
3. 编译安装 将其安装在 /usr/local/redis 目录 cd redis-5.0.7 make cd src && make PREFIX=/usr/local/redis install
二 配置节点 将节点信息配置在 cluster 目录下, 端口号分别是 6378,6379 cd /usr/local/redis mkdir -p cluster/6378 cluster/6378
1. 修改配置文件 复制 redis.conf 到 cluster/6378/ vim cluster/redis.conf
主要修改内容如下: 启用守护线程
1. daemonize yes 同台计器不同节点的端口要不一样
2. port 6378 指定数据目录,必须要指定不同的目录位置,不然会丢失数据
3. dir /usr/local/redis/cluster/6378/ 启动集群模式
4. cluster-enabled yes 集群节点信息文件,这里 6378 最好和 port 对应上
5. cluster-config-file nodes-6378.conf 去掉bind绑定访问ip信息
6. #bind 127.0.0.1 关闭保护模式
7. protected-mode no appendonly yes cluster-node-timeout 5000
如果要设置密码需要增加如下配置 设置redis密码
10. requirepass xxx 设置集群节点间访问密码,跟上面一致
11. masterauth xxx
将 6378 的配置复制到 6379 并将 2,3,5 中的端口号修改为 6379 cp cluster/6378/redis.conf cluster/6379/redis.conf
2. 创建启动脚本 vim /usr/local/redis/start-redis-cluster.sh #!/bin/sh REDIS_HOME=/usr/local/redis $REDIS_HOME/bin/redis-server $REDIS_HOME/cluster/6378/redis.conf $REDIS_HOME/bin/redis-server $REDIS_HOME/cluster/6379/redis.conf :wq 保存
3. 克隆该虚拟机
三 启动集群
1. 创建启动集群脚本 可以在任意一台虚拟机上创建该脚本,本文在 139 上创建 vim /usr/local/redis/create-cluster.sh #!/bin/sh bin/redis-cli --cluster create 192.168.18.139:6378 192.168.18.139:6379 192.168.18.140:6378 192.168.18.140:6379 192.168.18.141:6378 192.168.18.141:6379 --cluster-replicas 1 --cluster : redis 5 提供的参数 --cluster-replicas 1 : 一主一从配置,六个节点就是 三主三从
2. 启动所有的 redis 节点 需要在三个虚拟机上都执行该命令 ./start-redis-cluster.sh
2.1 查看是否启动成功 ps -ef | grep redis
3. 创建集群 只需要在一台虚拟机上执行该命令即可 ./create-cluster.sh 如出现错误: [ERR] Node 192.168.18.139:637x is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0. 删除 cluster/637x 下aof、rdb、nodes-637x.conf本地备份文件, 然后再次执行脚本 出现交互 直接输入 yes 接受即可
[OK] All 16384 slots covered 说明集群创建成功
待续...
系统运维
2019-11-26 15:02:00
「深度学习福利」大神带你进阶工程师,立即查看>>> user root; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; #日志切割,每月一个日志 map $time_iso8601 $logdate { '~^(?\d{4}-\d{2})' $ymd; # 也可以按照天进行分割 #'~^(?\d{4}-\d{2}-\d{2})' $ymd; default date-not-found'; } access_log logs/access-$logdate.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; #定义一个名为allips的limit_req_zone用来存储session,大小是10M内存, #以$binary_remote_addr 为key,限制平均每秒的请求为20个(20r/s),每秒请求3个,则3r/s #1M能存储16000个状态,rete的值必须为整数, #如果限制两秒钟一个请求,可以设置成30r/m,如果1秒一个请求就是60r/m limit_req_zone $binary_remote_addr zone=allips:10m rate=3r/s; upstream tomcat { server 122.51.229.34:8080 weight=10 max_fails=2 fail_timeout=3s; } server { listen 80; server_name localhost; # 反爬虫 # server 全局块 include anti_spider.conf; # 加载反爬虫配置 #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; proxy_pass http://tomcat; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
系统运维
2019-11-26 10:28:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的 脚本 语言。

Python3 可应用于多平台包括 Windows、 Linux 和 Mac OS X。
Unix (Solaris, Linux, FreeBSD, AIX, HP/UX, SunOS, IRIX, 等等。)
Win 9x/NT/2000
Macintosh (Intel, PPC, 68K)
OS/2
DOS (多个DOS版本)
PalmOS
Nokia 移动手机
Windows CE
Acorn/RISC OS
BeOS
Amiga
VMS/OpenVMS
QNX
VxWorks
Psion
Python 同样可以移植到 Java 和 .NET 虚拟机上。
Python3 下载
Python3 最新源码,二进制文档,新闻资讯等可以在 Python 的官网查看到:
Python 官网:https://www.python.org/
你可以在以下链接中下载 Python 的文档,你可以下载 HTML、PDF 和 PostScript 等格式的文档。
Python文档下载地址:https://www.python.org/doc/
Python 安装
Python 已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。
您需要下载适用于您使用平台的二进制代码,然后安装 Python。
如果您平台的二进制代码是不可用的,你需要使用C编译器手动编译源代码。
编译的源代码,功能上有更多的选择性, 为 Python 安装提供了更多的灵活性。
以下是各个平台安装包的下载地址:
Source Code 可用于 Linux 上的安装。
以下为Unix & Linux平台上安装 Python3 的方法。
Unix & Linux 平台安装 Python3:
以下为在 Unix & Linux 平台上安装 Python 的简单步骤:
打开WEB浏览器访问 https://www.python.org/downloads/source/
选择适用于 Unix/Linux 的源码压缩包。
下载及解压压缩包 Python-3.x.x.tgz,3.x.x 为你下载的对应版本号。
如果你需要自定义一些选项修改 Modules/Setup
以 Python3.6.1 版本为例: # tar -zxvf Python-3.6.1.tgz # cd Python-3.6.1 # ./configure # make && make install
检查 Python3 是否正常可用: # python3 -V Python 3.6.1
本文原创地址: https://www.linuxprobe.com/python3-environment-setup.html
系统运维
2019-11-26 09:29:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
1. 安装依赖 yum install gcc
2. 下载安装包 wget http://download.redis.io/releases/redis-5.0.7.tar.gz
3. 解压 tar xzf redis-5.0.7.tar.gz
4. 进入redis解压目录并编译 > cd redis-5.0.7 > make 此时在reids解压目录的src目录下,就已经有了操作redis的相关可执行文件。
5. 启动redis
默认启动 > $REDIS_HOME/src/redis-server &
指定配置文件启动
在默认情况下,我们使用的启动配置文件是$REDIS_HOME/redis.conf,我们在启动的时候也可以指定特定的配置文件,直接加载启动命令的后面就可以了。 > ./redis-server ../redis.conf &
6. 关闭redis 找到进程 ps -aux | grep redis 干掉它 kill -9 xxxx 也可以使用自带的关闭命令 redis-cli SHUTDOWN
系统运维
2019-11-26 00:08:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
网站的第二台服务器跑的的环境主要是Python/Ruby,有时也需要简单跑跑PHP脚本,所以也安装了PHP,环境是Nginx+php-fpm,PHP是源码编译安装的,所以是最小化安装,甚至连mysqli扩展都没有。今天需要用到GD库,才发现没GD库环境,所以需要安装这个扩展。对付单个扩展,单独编译动态加载是比较方便快捷的。安装过程也比较繁杂,这个记录一下,方便后来者。
首先说明,我的PHP是源码编译安装的,可以参看 以源码编译的方式安装PHP与php-fpm。
先安装 gd 前置库 : freetype ,jpegsrc,libpng。
1. freetype
代码如下: wget "http://download.savannah.gnu.org/releases/freetype/freetype-2.4.0.tar.bz2" tar jxvf freetype-2.4.0.tar.bz2 cd freetype-2.4.0 ./configure --prefix=/usr/local/freetype && make && make install
2. jpegsrc
代码如下: wget "http://www.ijg.org/files/jpegsrc.v9.tar.gz" tar zxvf jpegsrc.v9.tar.gz cd jpeg-9 CFLAGS="-O3 -fPIC" ./configure --prefix=/usr/local/jpeg && make && make install mkdir -p /usr/local/jpeg/include mkdir -p /usr/local/jpeg/lib mkdir -p /usr/local/jpeg/bin mkdir -p /usr/local/jpeg/man/man1
3. libpng
代码如下: wget "http://downloads.sourceforge.net/project/libpng/libpng12/1.2.50/libpng-1.2.50.tar.gz?r=http%3A%2F%2Fwww.libpng.org%2Fpub%2Fpng%2Flibpng.html&ts=1376631135&use_mirror=nchc" tar zxvf libpng-1.2.50.tar.gz cd libpng-1.2.50 CFLAGS="-O3 -fPIC" ./configure --prefix=/usr/local/libpng && make && make install
接下来需要cd到php源码的 gd 目录,否则会报 cannot find config.m4 之类的错误。
代码如下: cd php-5.3.6 cd ext cd gd
然后再这个目录执行命令 /usr/local/php/bin/phpize。什么时候需要用到 phpize 呢?当我们需要再加些模块,又不想重新编译php,这些我们就可以用phpize了。我的PHP安装在 /usr/local/php/ 这个目录里,可以根据个人情况修改。
代码如下: /usr/local/php/bin/phpize
现在可以进行单独编译安装了:
代码如下:
./configure --with-php-configure=/usr/local/php/bin/php-config --with-jpeg-dir=/usr/local/jpeg --with-png-dir=/usr/local/libpng --with-freetype-dir=/usr/local/freetype 或者 ./configure --with-php-config=/usr/local/php/bin/php-config --with-jpeg-dir=/usr/local/jpeg --with-png-dir=/usr/local/libpng --with-freetype-dir=/usr/local/freetype make && make install
接着修改php.ini文件 在 ;extension=php_zip.dll 下面添加一行 extension=gd.so
重启 Nginx 之后再看看是否安装成功了。再执行 /usr/local/php/bin/php -m 查看gd模块是否加载成功。
代码如下: service nginx restart /usr/local/php/bin/php -m
console列出:
代码如下: [root@nowamagic gd]# /usr/local/php/bin/php -m [PHP Modules] Core ctype date dom ereg fileinfo filter gd ……
看到gd了,说明gd库安装成功。
接下来只要重启 php-fpm 即可:
代码如下: killall php-fpm /usr/local/php/sbin/php-fpm
phpinfo()一下,看看。
OK,安装成功。
Buy me a cup of coffee :)
系统运维
2019-11-28 09:51:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
我们php手手工安装的,php的默认配置文件在 /usr/local/apache2/conf/php.ini,我们最主要就是要配置php.ini中的内容,让我们执行php能够更安全。整个PHP中的安全设置主要是为了防止phpshell和SQL Injection的攻击,一下我们慢慢探讨。我们先使用任何编辑工具打开/etc/local/apache2/conf/php.ini,如果你是采用其他方式安装,配置文件可能不在该目录。
(1) 打开php的安全模式
php的安全模式是个非常重要的内嵌的安全机制,能够控制一些php中的函数,比如system(),
同时把很多文件操作函数进行了权限控制,也不允许对某些关键文件的文件,比如/etc/passwd,
但是默认的php.ini是没有打开安全模式的,我们把它打开:
1
safe_mode = on
(2) 用户组安全
当safe_mode打开时,safe_mode_gid被关闭,那么php脚本能够对文件进行访问,而且相同
组的用户也能够对文件进行访问。
建议设置为:
1
safe_mode_gid = off
如果不进行设置,可能我们无法对我们服务器网站目录下的文件进行操作了,比如我们需要
对文件进行操作的时候。
(3) 安全模式下执行程序主目录
如果安全模式打开了,但是却是要执行某些程序的时候,可以指定要执行程序的主目录:
1
safe_mode_exec_dir = D:/usr/bin
一般情况下是不需要执行什么程序的,所以推荐不要执行系统程序目录,可以指向一个目录,
然后把需要执行的程序拷贝过去,比如:
1
safe_mode_exec_dir = D:/tmp/cmd
但是,我更推荐不要执行任何程序,那么就可以指向我们网页目录:
1
safe_mode_exec_dir = D:/usr/www
(4) 安全模式下包含文件
如果要在安全模式下包含某些公共文件,那么就修改一下选项:
1
safe_mode_include_dir = D:/usr/www/include/
其实一般php脚本中包含文件都是在程序自己已经写好了,这个可以根据具体需要设置。
(5) 控制php脚本能访问的目录
使用open_basedir选项能够控制PHP脚本只能访问指定的目录,这样能够避免PHP脚本访问
不应该访问的文件,一定程度上限制了phpshell的危害,我们一般可以设置为只能访问网站目录:
1
open_basedir = D:/usr/www
(6) 关闭危险函数
如果打开了安全模式,那么函数禁止是可以不需要的,但是我们为了安全还是考虑进去。比如,
我们觉得不希望执行包括system()等在那的能够执行命令的php函数,或者能够查看php信息的
phpinfo()等函数,那么我们就可以禁止它们:
1
disable_functions = system,passthru,exec,shell_exec,popen,phpinfo
如果你要禁止任何文件和目录的操作,那么可以关闭很多文件操作
disable_functions = chdir,chroot,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,copy,mkdir, rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chown
以上只是列了部分不叫常用的文件处理函数,你也可以把上面执行命令函数和这个函数结合,
就能够抵制大部分的phpshell了。
(7) 关闭PHP版本信息在http头中的泄漏
我们为了防止黑客获取服务器中php版本的信息,可以关闭该信息斜路在http头中:
1
expose_php = Off
比如黑客在 telnet www.chinaz.com 80 的时候,那么将无法看到PHP的信息。
(8) 关闭注册全局变量
在PHP中提交的变量,包括使用POST或者GET提交的变量,都将自动注册为全局变量,能够直接访问,
这是对服务器非常不安全的,所以我们不能让它注册为全局变量,就把注册全局变量选项关闭:
1
register_globals = Off
当然,如果这样设置了,那么获取对应变量的时候就要采用合理方式,比如获取GET提交的变量var,
那么就要用$_GET['var']来进行获取,这个php程序员要注意。
(9) 打开magic_quotes_gpc来防止SQL注入
SQL注入是非常危险的问题,小则网站后台被入侵,重则整个服务器沦陷,
所以一定要小心。php.ini中有一个设置:
1
magic_quotes_gpc = Off
这个默认是关闭的,如果它打开后将自动把用户提交对sql的查询进行转换,
比如把 ' 转为 \'等,这对防止sql注射有重大作用。所以我们推荐设置为:
1
magic_quotes_gpc = On
(10) 错误信息控制
一般php在没有连接到数据库或者其他情况下会有提示错误,一般错误信息中会包含php脚本当
前的路径信息或者查询的SQL语句等信息,这类信息提供给黑客后,是不安全的,所以一般服务器建议禁止错误提示:
1
display_errors = Off
如果你却是是要显示错误信息,一定要设置显示错误的级别,比如只显示警告以上的信息:
1
error_reporting = E_WARNING & E_ERROR
当然,我还是建议关闭错误提示。
(11) 错误日志
建议在关闭display_errors后能够把错误信息记录下来,便于查找服务器运行的原因:
log_errors = On
同时也要设置错误日志存放的目录,建议根apache的日志存在一起:
error_log = D:/usr/local/apache2/logs/php_error.log
注意:给文件必须允许apache用户的和组具有写的权限。
MYSQL的降权运行
新建立一个用户比如mysqlstart
net user mysqlstart ****microsoft /add
net localgroup users mysqlstart /del
不属于任何组
如果MYSQL装在d:\mysql ,那么,给 mysqlstart 完全控制 的权限
然后在系统服务中设置,MYSQL的服务属性,在登录属性当中,选择此用户 mysqlstart 然后输入密码,确定。
重新启动 MYSQL服务,然后MYSQL就运行在低权限下了。
如果是在windos平台下搭建的apache我们还需要注意一点,apache默认运行是system权限,
这很恐怖,这让人感觉很不爽.那我们就给apache降降权限吧。
net user apache ****microsoft /add
net localgroup users apache /del
ok.我们建立了一个不属于任何组的用户apche。
我们打开计算机管理器,选服务,点apache服务的属性,我们选择log on,选择this account,我们填入上面所建立的账户和密码,
重启apache服务,ok,apache运行在低权限下了。
实际上我们还可以通过设置各个文件夹的权限,来让apache用户只能执行我们想让它能干的事情,给每一个目录建立一个单独能读写的用户。
这也是当前很多虚拟主机提供商的流行配置方法哦,不过这种方法用于防止这里就显的有点大材小用了。
Buy me a cup of coffee :)
系统运维
2019-11-28 09:42:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
导读:本文翻译自 Brendan Gregg 去年的一片博客文章 “CPU Utilization is Wrong”,从标题就能想到这篇文章将会引起争议。文章一上来就说,我们“人人皆用、处处使用,每个性能监控工具里都在用”的 top 命令里的 “%CPU” 指标,是不对的,其并非用于衡量 CPU 的繁忙程度的正确指标,作者谴责了一下众人(或许也包括你我)的这一行为是具有很大的误导性(deeply misleading)的,而且这种情况还在连年恶化。对于这么大一顶帽子,让我们暂且按下躁动的心,听听作者是怎么深入阐释他的观点的。
1. 引言
可能你认为的 90% CPU 利用率意味着这样的情形:
而实际却可能是这样的:
  CPU 并非 90% 的时间都在忙着,很大一部分时间在等待,或者说“停顿(Stalled)”了。这种情况表示处理器流水线停顿,一般由资源竞争、数据依赖等原因造成。多数情况下表现为等待访存操作,其中又以读操作为主。在停顿周期内,不能执行指令,这意味着你的程序不往前走。值得注意的是,图中 “Stalled” 状态所占的比例是作者依据生产环境中的典型场景计算而来,具有普遍现实意义。因此,大多时候 CPU 处于停顿状态,而你却不知道,因为 CPU 利用率这个指标没有告诉你真相。通过进一步分析 CPU 停顿的原因,可以指导代码优化,提高执行效率,这是我们深入理解CPU微架构的动力之一。
2. CPU 利用率的真实含义是什么?
  我们通常所说的CPU利用率是指 “non-idle time”:即CPU不执行 idle thread 的时间。操作系统内核会在上下文切换时记录CPU的运行时间。假设一个 non-idle thread 开始运行,100ms 后结束,内核会认为这段时间内 CPU 利用率为 100%。这种度量方式源于分时复用系统。早在阿波罗登月舱的导航计算机中,idle thread 当时被叫做 “DUMMY JOB”,工程师通过比对运行 “DUMMY JOB” 和 “实际任务” 的时间来衡量导航系统的利用率。
  那么这个所谓“利用率”的问题在哪儿呢?
  当今时代,CPU 执行速度远远大于内存访问速度,等待访存的时间成为占用 CPU 时间的主要部分。当你在 top 中看到很高的 “%CPU”,你可能认为处理器是瓶颈,但实际上却是内存。在过去很长一段时间内,CPU 频率增长的速度大于 DRAM 访存延时降低的速度(CPU DRAM gap),直到2005年前后,处理器厂商们才开始放弃“频率路线”,转向多核、超线程技术,再加上多处理器架构,这些都导致访存需求急剧上升。尽管厂商通过增大 cache 容量、优化 cache 策略、提升总线带宽来试图缓解访存瓶颈,但我们的程序仍深受 CPU stall 困扰。
3. 如何真正辨别 CPU 在做些什么?
  在 PMC(Performance Monitoring Counters) 的帮助下,我们能看到更多的 CPU 运行状态信息。下图中,perf 采集了10秒内全部 CPU 的运行状态。
  
  这里我们重点关注的核心度量指标是 IPC(instructions per cycle),它表示平均每个 CPU cycle 执行的指令数量,很显然该数值越大性能越好。上图中
  IPC 为 0.78,看起来还不错,是不是 78% busy 呢?现代处理器一般有多条流水线,运行 perf 的那台机器,IPC 的理论值可达到 4.0。如果我们从 IPC的角度来看,这台机器只运行到其处理器最高速度的 19.5%(0.78 / 4.0)。幸运的是,在处理器内部,有很多 PMU event,可用来帮助我们分析造成 CPU stall 的原因。用好 PMU 需要我们熟悉处理器微架构,可以参考 Intel SDM。
4. 最佳实践是什么?
  如果 IPC < 1.0, 很可能是 Memory stall 占主导,可从软件和硬件两个方面考虑这个问题。软件方面:减少不必要的访存操作,提升 cache 命中率,尽量访问本地节点内存;硬件方面:增加 cache 容量,加快访存速度,提升总线带宽。
  如果IPC > 1.0, 很可能是计算密集型的程序。可以试图减少执行指令的数量:消除不必要的工作。火焰图CPU flame graphs,非常适用于分析这类问题。硬件方面:尝试超频、使用更多的 core 或 hyperthread。作者根据PMU相关的工作经验,设定了1.0这个阈值,用于区分访存密集型(memory-bound)和计算密集型(cpu-bound)程序。读者可以根据自己的实际工作平台,合理调整这个阈值。
5. 性能工具应该告诉我们什么?
  作者认为,性能工具中使用 %CPU 时都应该附带上 IPC,或者将 %CPU 拆分为指令执行消耗 cycle(%INS) 和 stalled 的 cycle(%STL)。对应到 top,在 Linux 系统有一个能够显示每个处理器 IPC 的工具 tiptop:
  
6. 其他可能让 CPU 利用率引起误解的因素
 除了访存导致的 stall 容易让人误解 CPU 利用率外,还有其他一些因素:   温度原因导致处理器 stall;   Turboboost 干扰了时钟速率;   内核使得时钟速率加快;   平均带来的问题:1分钟利用率平均 80%,掩盖了中间 100% 部分;   自旋锁: CPU 一直在被使用,同时 IPC 也很高,但是应用逻辑上并没有任何进展。
7. 更新:CPU 利用率真的错了吗?
  这篇文章引起了大量留言: http://www.brendangregg.com/blog/2017-05-09/cpu-utilization-is-wrong.html 的留言栏; https://news.ycombinator.com/item?id=14301739 https://www.reddit.com/r/programming/comments/6a6v8g/cpu_utilization_is_wrong/
  总结下作者的回答是:这里讨论的并不是 iowait (那是磁盘IO),而且如果你已经确认是访存密集型,是有些处理办法(参考上面)。
  那么 CPU 利用率指标是确确实实错误的,还是只是容易误导?如作者前面所说,他认为许多人把高 CPU 利用率理解为瓶颈在 CPU 上,这一行为才是错误的;其实单看 CPU 利用率并不清楚瓶颈在何处,很多时候瓶颈是在外部。这个指标技术上看是否正确?如果 CPU stall 的周期并不能被其他地方使用,它们是不是也就因此是“忙于等待“(听起来有点矛盾)?在有些情况,确实如此,你可以说 CPU 利用率作为操作系统级别的指标技术上看是对的,但是容易产生误导。从另一个角度来说,有超线程的情况下,那些 stalled 的周期是可以被其他线程使用的,这时 “%CPU” 可能会将可用的周期统计为正在使用,这种情况是错误的。这篇文章作者想关注的是解释清楚这个问题,并给出解决方法建议,但没错,CPU 利用率这个指标本身也是存在一些问题的。
  当你可能会说利用率作为一个指标已经不对,Andrian Cockcroft之前讨论已经指出过 (http://www.hpts.ws/papers/2007/Cockcroft_HPTS-Useless.pdf )。
8. 结论
  CPU 利用率已经开始成为一个容易误导的指标:它包含访存导致的等待周期,这样会影响一些新应用。也许 “%CPU” 应该重命名为 “%CYC”(cycles的缩写)。要清楚知道 “%CPU” 的含义,需要使用其他指标进行辅助,其中就包括每周期指令数(IPC)。IPC < 1.0 多半意味着访存密集型,IPC > 1.0 多半意味着计算密集型。作者之前的文章中涵盖有 IPC 说明,以及用于测量 IPC 的 Performance Monitoring Counters(PMCs)的介绍。
  所有的性能监控产品如果展示 “%CPU”,都应该同时展示 PMC 指标用于解释其真实意义,不要误导用户。比如,可以把 “%CPU” 和 “IPC” 一起放,或者说指令执行消耗周期和 stalled 周期。有这些指标之后,开发者和操作者就能够知道该如何更好地对应用和系统进行调优。
系统运维
2019-11-28 09:39:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
chrome73版本后拖拽安装chrome插件无法安装成功会提示“crx-header-invalid”
解决办法
1、将下载下来的离线插件crx后缀改为rar
2、将rar文件解压
3、打开chrome--更多工具--扩展插件--开发者模式打开
系统运维
2019-11-27 19:31:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
现在,越来越多的站长朋友都会选择服务器用来搭建网站,但是势必需要我们自己搭建WEB环境,但是搭建WEB环境对很多用户来讲,操作服务器不简单,要请教别人,要花时间搜答案,甚至简单问题还要付费,涉及费用还会有很多坑,其实这里我们就可以选择开源WEB一键包,或者面板来安装到服务器中,一般我们用户个人使用还是较多的会用到免费脚本或者面板。
在目前国内众多一键包和面板选择上,功能可能会差不多,基本上架设普通的网站环境是没有问题的,下面给大家分享几款常用Linux服务器管理面板。
一, 宝塔运维面板
宝塔面板是一款使用方便、功能强大且终身免费的服务器管理软件,支持Linux与Windows系统。一键配置:LAMP/LNMP、网站、数据库、FTP、SSL,通过Web端轻松管理服务器。
二, WDCP运维面板
WDCP是一套通过WEB控制和管理服务器的Linux服务器管理系统以及虚拟主机管理系统,可以安装最新的PHP、MYSQL版本,而且可以多PHP版本同存,SSL证书安装都支持。
三, AMH运维面板
MH 是国内首个开源的主机面板,截止到AMH4. 2 版本都是提供免费安装的,后来从5. 0 开始提供付费安装,可以理解开发者的盈利问题,毕竟提供免费工具很难获得盈利,而且会占用较多的时间和维护精力。在此之前,AMH算是最好的面板之一,可以快速安装LNMP环境。从5. 0 开始付费之后,功能也相当丰富,可以涵盖基本所有的Linux系统的安装环境,比如LNMP、LAMP等,而且有相当丰富的插件支持。
四, 云帮手运维面板
其实相较于宝塔这种已经累积了一定量用户的软件而言,云帮手的上线时间短,知名度低,这种情况下还能吸引到一批用户并且反馈不错的,肯定是有自身优势的。
1、自带远程连接功能,无需再通过其他工具进行远程桌面控制,也是因为这样所以云帮手的安装和服务器的添加相比之下更方便快捷;
2、相比宝塔多了一键安全巡检和修复功能,减少了日常管理服务器需要花费的时间精力;
3、基础功能更齐全,且目前所有功能都是免费的。
在国内提供免费开源项目的基本是凭借兴趣和爱好一直在坚持,基本上很少有依靠盈利的,感谢这些开源工具提供者,给我们用户安装环境带来便利。
云服务器运维面板软件 下载地址
系统运维
2019-11-27 18:01:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
Linux 安装时,除了几个核心模块以外,其余几乎所有的模块均通过RPM 完成安装。RPM 有五种操作模式,分别为:安装、卸载、升级、查询和验证。
1)用RPM安装软件包,最简单的命令如下:
1 #rpm -i example.rpm 安装 example.rpm 包;
2 #rpm -iv example.rpm 安装 example.rpm 包并在安装过程中显示正在安装的文件信息;
3 #rpm -ivh example.rpm 安装 example.rpm 包并在安装过程中显示正在安装的文件信息及安装进度
2)删除已安装的软件包
要卸载软件包example,只需输入以下这行命令:
# rpm -e example
注意:软件包名是example,而不是rpm文件名"example.rpm"。
3)升级软件包
升级软件类似于安装软件:
# rpm -Uvh example.rpm
用户要注意的是:rpm会自动卸载相应软件包的老版本。如果老版本软件的配置文件通新版本的不兼容,rpm会自动将其保存为另外一个文件,用户会看到下面的信息:
saving /etc/example.conf as /etc/example.conf.rpmsave
这样用户就可以自己手工去更改相应的配置文件。
另外如果用户要安装老版本的软件,用户就会看到下面的出错信息:
# rpm -Uvh example.rpm
examle packag example-2.0-l(which is newer) is already installed
error:example.rpm cannot be installed
如果用户要强行安装就使用-oldpackage参数。
4)查询软件包
用户可以用rpm -q在rpm的数据库中查询相应的软件,rpm会给出软件包的名称,版本,发布版本号,例如:
1 # rpm -q example
下面是查询时可以使用的特定参数:
-a:查询目前系统安装的所有软件包。
-f 文件名:查询包括该文件的软件包。
-F:同-f参数,只是输入是标准输入(例如 find /usr/bin | rpm -qF)
-q 软件包名: 查询该软件包
-Q:同-p参数,只是输入是标准输入(例如 find /mnt/cdrom/RedHat/RPMS | rpm -qQ)
下面是输出时的格式选择:
-i 显示软件包的名称,描述,发行,大小,编译日期,安装日期,开发人员等信息。
-l 显示软件包包含的文件
-s 显示软件包包含的文件目前的状态,只有两种状态:normal和missing
-d 显示软件包中的文档(如man,info,README等)
-c 显示软件包中的配置文件,这些文件一般是安装后需要用户手工修改的,例如:sendmail.cf,passwd,inittab等
如果用-v参数就可以得到类似于ls -l的输出
5)用rpm校验软件包
rpm -Vf 需要验证到包
重庆思庄红帽RHCE认证培训班火热报名中!每月循环开班,欢迎联系试听!
系统运维
2019-11-27 17:14:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
KVM的克隆、快照都是老生常谈的问题,资料也非常多,这里只是针对个人实验的记录,方便以后查阅。
虚拟机克隆
虚拟机的克隆操作是再频繁不过了,安装好第一台虚拟机后就可以进行基础设置,已此虚拟机为模板,以后直接克隆,而不需要重复进行系统安装工作。
克隆虚拟机首先需要关闭或者挂起虚拟机 [root@kvm7 vps] virsh shutdown vm01
克隆vm01虚拟机为vm02 virt-clone -o vm01 -n vm02 -f /home/vps/vm02.img
克隆会非常占用磁盘IO ,如果是在虚拟机里面做实验,又是机械硬盘的话本地电脑都会很卡。
如果之前创建的虚拟机vm01 是配置了固定VNC端口,那么就需要修改一下vm02的配置文件,将VNC端口改为其他,避免冲突,当然如果是autoport=’yes’ 状态则无需调整。
虚拟机快照
kvm快照有两种方式创建,分别是: qemu-img snapshot 命令 进行生成快照 virsh snapshot 相关 命令 进行生成快照
查询了下qemu-img 生成快照需要关机,而且很多网友反应数据丢失,相对来讲大家都推荐virsh snapshot 创建快照。
磁盘转换
如果是raw格式的磁盘是不支持快照的,如果是raw磁盘格式,需要转换为qcow2 [root@kvm7 vps] qemu-img info vm01.img image: vm01.img file format: raw virtual size: 10G (10737418240 bytes) disk size: 2.5G [root@kvm7 vps] qemu-img convert -f raw -O qcow2 vm01.img vm01.qcow2 #在虚拟机磁盘文件目录下复制并转换为qcow2格式 [root@kvm7 vps] qemu-img info vm01.qcow2 image: vm01.qcow2 file format: qcow2 virtual size: 10G (10737418240 bytes) disk size: 2.3G cluster_size: 65536
创建快照
给虚拟机vm01创建快照: [root@localhost vps] virsh snapshot-create vm01
查看快照: [root@kvm7 vps] virsh snapshot-list vm01 名称 Creation Time 状态 ------------------------------------------------------------ 1481193249 2016-12-08 18:34:09 +0800 running
当前虚拟机对应的快照是存储在/var/lib/libvirt/qemu/snapshot/vm01 目录下,也就是一个xml文件,查看快照配置可以使用命令: [root@kvm7 vps] virsh snapshot-current vm01
恢复快照
在vm01中生成几个文件,然后恢复快照简单测试一下:
恢复快照是需要关闭虚拟机的,所以先关闭vm01主机: [root@kvm7 vps] virsh shutdown vm01
域vm01被关闭
查看虚拟机状态: [root@kvm7 vps] virsh domstate vm01
关闭
执行恢复快照:查看到vm01快照时间为1481193249 [root@kvm7 vps] virsh snapshot-revert vm01 1481193249
对比下之前创建的三个文件,已经没有了,快照恢复成功。
https://www.admin5.com/article/20191125/935050.shtml
https://tech.ifeng.com/c/7rsI0Yr6Spz
https://www.51cto.com/it/news/2019/1125/16914.html
https://article.pchome.net/content-2104480.html
查看对应的磁盘是否存在快照也很简单,创建了快照的磁盘通过info 查看会显示出快照信息: [root@kvm7 vps] qemu-img info vm01.img image: vm01.img file format: qcow2 virtual size: 8.0G (8589934592 bytes) disk size: 2.7G cluster_size: 65536 Snapshot list: ID TAG VM SIZE DATE VM CLOCK 1 1481193249 212M 2016-12-08 18:34:09 00:00:25.775
删除快照 [root@kvm7 vps] virsh snapshot-delete vm01 1481193249
系统运维
2019-11-27 16:53:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
前提
首先确认安装 SNMP Service
配置事件
“开始” -> “运行”,输入 evntwin
选择“自定义”,点 “编辑”,“事件来源”里选择 “Security”,选择 “事件 ID” 为 538 的“用户注销”,添加后,“确定”保存。 此处可以 “导出”,备用配置。可以通过以下命令导入。 evntcmd events.cnf 可以根据 “计算机管理” 里的 “事件查看器” 选择方便模拟的事件,并根据 “事件 ID” 来定位。
配置 Trap 发送目标
打开“SNMP Sevice” 属性配置,切换到 “陷阱” 标签页,输入 “团体名称” 和 “陷阱目标”。
验证
注销当前用户,验证 Trap消息。
中文字符 new String(getBytes(), "gb2312");
系统运维
2019-11-27 15:44:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
微软在Windows 10以及附带的很多软件里都增加笑脸标志 , 这个笑脸实际上就是用来快速进行软件问题反馈的。

例如在浏览器右上角点击这个笑脸标志会自动弹出反馈选项,然后会获取页面地址和用户联系方式提交反馈意见。
然而功能虽好但微软公司并不提供任何方式将这个反馈标志隐藏,如果你尝试右键点击笑脸会发现没有任何反应。
考虑到Microsoft edge base chromium的用户量正在逐渐增多,因此提供教程将这个反馈标志隐藏是有必要的。
注意:此功能使用微软提供的企业客户策略进行管理,因此修改后 Microsoft Edge 会显示由您的组织进行管理。

通过注册表将反馈功能彻底禁用:

多数微软软件并不能直接将笑脸反馈关闭包括注册表方法,而浏览器方面倒是有个选项可以用来禁用反馈功能的。
因此我们只需要彻底禁用反馈功能即可将这个笑脸标志隐藏,反之如果需恢复笑脸标志再启动反馈功能即可搞定。
具体注册表编辑和修改方法如下,如果你懒得动手修改的话也可直接下载制作好的注册表文件直接合并导入就行。 步骤一:运行regedit.exe或者搜索框搜索关键词注册表即可打开注册表编辑器
步骤二:注册表导航到如下路径 HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge 步骤三:检查注册表项 UserFeedbackAllowed 是否存在,如果存在则直接转到步骤五操作 步骤四:如果不存在则右键点击 Edge 选择新建Dword 32位并将其命名为 UserFeedbackAllowed
步骤五:双击UserFeedbackAllowed将其默认值修改为0保存即可,然后重启Microsoft Edge
懒人版注册表文件下载:
如果你懒得动手修改注册表的话直接下载制作好的文件进行导入即可,压缩包中同时含有禁用和恢复反馈的文件。
其中edge-feedback-removed.reg 双击合并可禁用反馈隐藏笑脸 , restored.reg则可以恢复反馈重新显示笑脸。
压缩包文件下载地址: 从蓝点网文件服务器下载 备用下载地址: 蓝奏云网盘下载 网盘下载
附注册表内容: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge] "UserFeedbackAllowed"=dword:00000000 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge] "UserFeedbackAllowed"=dword:00000001 本文地址: https://www.linuxprobe.com/edge-resgite-update.html
系统运维
2019-11-27 12:52:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
按navicat-keygen注册之后,新建的链接无法正常保存密码,提示failed save password 25229错误 按 https://github.com/DoubleLabyrinth/navicat-keygen/issues/50 方法解决。
如果原来签名不对,需要重新签名,可加-f参数强制替换 codesign -f -v -s "navicat_p_ca" /Applications/Navicat\ Premium.app
系统运维
2019-11-27 10:37:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
方法:使用inode进行删除
1.删除乱码文件、空目录(此处以非空目录为例)
# find -inum 179631 -delete
备注:目录非空,不能使用此方式进行删除,就使用如下方式删除!
2.删除乱码非空目录 # find -inum 179631 -exec rm -rf {} \;
备注:虽有提示,但是文件已经被删除,验证如下!
至此,乱码非空目录删除成功!
系统运维
2019-11-25 10:56:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
1.安装中文输入法 # apt-get install -y ibus ibus-pinyin
2.安装谷歌浏览器
2.1下载安装包 # wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
2.2安装依赖 # apt-get -f install
2.3安装浏览器 # dpkg -i google-chrome-stable_current_amd64.deb
2.4启动浏览器 # vim /usr/share/applications/google-chrome.desktop
修改为: Exec=/usr/bin/google-chrome --no-sandbox --user-data-dir
通过应用程序搜索到,然后启动即可!
系统运维
2019-11-25 10:53:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
iperf是一个基于Client/Server的网络性能测试工具,可以测试TCP、UDP和SCTP带宽质量,能够提供网络吞吐率信息,以及震动、丢包率,最大段和最大传输单元大小等统计信息,帮助我们测试网络性能,定位网络瓶颈。其中抖动和丢包率适应于UDP测试,二带宽测试适应于TCP和UDP。
一、介绍
iperf是一个基于Client/Server的网络性能测试工具,可以测试TCP、UDP和SCTP带宽质量,能够提供网络吞吐率信息,以及震动、丢包率,最大段和最大传输单元大小等统计信息,帮助我们测试网络性能,定位网络瓶颈。其中抖动和丢包率适应于UDP测试,二带宽测试适应于TCP和UDP。
Iperf可以说是嵌入式设备里网络接口测试的一个利器。这里的网络接口不但可以是一般的以太网,也可以是无线网络,还可以是4G模块;
官方提供的公网服务器:iperf-servers。不过测试过速度有点捉鸡,还是自己建个测试爽。
二、交叉编译
Step1. 下载
下载地址:http://downloads.es.net/pub/iperf/。本文以 iperf-3.0.1.tar.gz 版本为例。
Step2. 配置./configure --host=arm- linux --prefix=$PWD/xxx_install
其中,
--host: 指定交叉编译工具,一般为arm-none-linux-gnueabi、arm-linux-gnueabihf、arm-linux等,具体要和目标板用的交叉编译工具对应。--prefix: 指定安装目录,编译后的文件会全部放在安装目录中。
Step3. 编译安装make make install
完成后,文件会自动安装到上面指定的 install 目录。
Step4. 去除调试信息并压缩
在嵌入式设备上的资源毕竟寸土寸金的;使用交叉编译工具 strip 去除镜像的调试信息,在不影响使程序使用的情况下,程序大小一般可以减小50%左右。本程序我们仅用到其中2个文件,bin下的iperf3 和 lib下的libiperf.so.0.0.0。
$cd xxx_install # 进入安装目录 $ arm-linux-gnueabi-strip bin/iperf3 # 去除iperf3镜像调试信息 $ arm-linux-gnueabi-strip lib/libiperf.so.0.0.0 # 去除共享库的调试信息 $ rm lib/libiperf.a lib/libiperf.la # 删除两个不用的库文件 $ tar cvf iperf-exec-3.0.1.tar.gz bin lib # 压缩bin和lib目录
三、带宽测试Step1. 启动服务器iperf
在Ubuntu上,以服务端方式启动:
$iperf3 -s -i 1
参数说明:
-s:以服务器方式启动-i:以秒为单位显示报告间隔-w:指定TCP窗口大小,默认是8KB Step2. 启动客户端$iperf3 -c 192.168.1.100(也可为公网IP) -i 1 -w 448k -t 10
参数说明:
-c:以client模式启动,随后跟着服务器的IP地址-t:测试时间,默认10秒LOG的记录 服务器: iperf3 -s >> iperfs.log 2>&1 & 客户端: iperf3 -c 192.168.1.100 -i 1 -w 448k -t 10 >> iperfc.log 2>&1 &四、iperf 参数
官方使用文档:https://iperf.fr/iperf-doc.php
也可在安装成后,使用iperf3 -h 进行查看。 本文地址: https://www.linuxprobe.com/method-bandwidth-embedded.html
系统运维
2019-11-25 09:37:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
和输出重定向一样,Unix 命令 也可以从文件获取输入.

和输出重定向一样,Unix 命令 也可以从文件获取输入,语法为: command1 < file1
这样,本来需要从键盘获取输入的命令会转移到文件读取内容。
注意:输出重定向是大于号(>),输入重定向是小于号(< )。
实例
接着以上实例,我们需要统计 users 文件的行数,执行以下命令: $ wc -l users 2 users
也可以将输入重定向到 users 文件: $ wc -l < users 2
注意:上面两个例子的结果不同:第一个例子,会输出文件名;第二个不会,因为它仅仅知道从标准输入读取内容。 command1 < infile > outfile
同时替换输入和输出,执行command1,从文件infile读取内容,然后将输出写入到outfile中。
重定向深入讲解
一般情况下,每个 Unix/ Linux 命令运行时都会打开三个文件:
标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
默认情况下,command > file 将 stdout 重定向到 file,command < file 将stdin 重定向到 file。
如果希望 stderr 重定向到 file,可以这样写: $ command 2 > file
如果希望 stderr 追加到 file 文件末尾,可以这样写: $ command 2 >> file
2 表示标准错误文件(stderr)。
如果希望将 stdout 和 stderr 合并后重定向到 file,可以这样写: $ command > file 2>&1 或者 $ command >> file 2>&1
如果希望对 stdin 和 stdout 都重定向,可以这样写: $ command < file1 >file2
command 命令将 stdin 重定向到 file1,将 stdout 重定向到 file2。
本文原创地址: https://www.linuxprobe.com/shell-input-redirection.html
系统运维
2019-11-25 09:36:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
(1)useradd,groupadd,usermod,passwd,userdel.
系统运维
2019-11-24 21:36:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
BREAK NEWS!!!
就在 1024 将将过去的深夜,突然,有人在 QQ 群内丢了一个链接和一句话“Linux QQ 发布了”,顿时在静悄悄的 QQ 群内,大家纷纷冒了出来。一时间,群内就和开了锅一样热闹,大家纷纷抄起心爱的土琵琶 Linux,各种截屏与测试消息齐飞,臭虫共吐槽一色。
为什么这么热闹?因为 Linux 桌面在中国得不到日常用户的青睐的一个主要吐槽点就是,“没有 QQ 啊!”,自从 10 年前——没错,就是 10 年前——据说是一位实习生随手做的 Linux QQ 停更并停用后,在 Linux 中使用 QQ 就成了一件麻烦事。这十年来,中国的 Linux 社区们有过种种努力和尝试,如,被封杀的 libqq,也有逐渐摸索和改善后的 Wine QQ 方案,各路 Linux 爱好者们在入门 Linux 之后大都会总结或整理一份 Linux QQ 秘籍,当然,随着各路国内的 Linux 操作系统的成熟,也纷纷提供了各种成熟的 Linux QQ 解决方案——至少能用吧。但是,这些都总有隔靴挠痒之憾。
好了,我想你肯定已经等急了,那么下面是 Linux QQ 的下载链接:
https://im.qq.com/linuxqq/download.html
十年生死两茫茫,Linux QQ突然复活!
在下载安装时,我们继续聊聊 Linux QQ。
据官方的消息,这次是 “Linux QQ全新回归”,并且支持“支持x64、ARM64、MIPS64三种架构”,“每种架构支持Debian系、 红帽 系、Arch Linux系、其它发行版中的一种或几种”,也“优化消息体验,完善消息收发能力”,版本则是明晃晃的“Linux QQ 2.0.0 Beta”,而在十年前,最后一个公开发布的版本是“QQ for Linux 1.0 Beta1”(据闻有未公示的 Beta2 版本)。
之所以支持 ARM64、MIPS64,我想这应该是对龙芯(mips64el)、飞腾(arm64)的额外支持吧。
据大家的反馈,这次的更新作为十年后第一次发布,亮点略有,但是大致还是沿袭了之前的版本,也存在一些 bug,有的同学经过几次重启、输入法适配,还是可以完成 QQ 基本功能的体验。
新版 Linux QQ 的发布,让不少极客们大呼“有生之年”。对于开发者来说,Linux 是他们所推崇的,但一直以来,因为中国办公习惯等历史原因,QQ 和微信的 Linux 版本很难获得新的用户。毕竟,一旦老板要给你发一个文件时,你发现你没有办法方便的传递到电脑上,或者在更多的场景下存在问题,都会让 Linux 的新用户们望而却步。
成也萧何败萧何
在 10 月 24 日这个程序员节上发布了 Linux QQ 2.0 版本让人觉得有点无厘头,甚至让人觉得可能仅仅是一个快闪活动,频繁的断线都让人担心是不是到了 25 日,可能 Linux QQ 就又不能用了。在 1024 程序员节的释出,使得 Linux QQ 可以以一个怀旧的形态重新出现在人们的眼前。但是,同样的,在这个节日的释出,也让人觉得这件事似乎并没有相信中的那么重视,对于 Linux QQ 的前景蒙上了一层阴影。
而且,腾讯并非一个慈善组织,对于腾讯这样的一个企业,是否会长期为一个很难产生现金流,而且小众的操作系统提供长期维护还尚未可知,更是让人无法相信 Linux QQ 的未来。
生态决定了操作系统的一切
近两年来,自主研发的操作系统不断的刷屏,我们也一次次为自主研发的操作系统而欢呼。但是,高潮之后,还能剩下来的是什么?
我一直强调,操作系统卖的不是系统本身,而是卖因其产生的生态,由生态倒闭用户为系统本身付费。就如同我尝试很多次从 iPhone 转回 Andorid ,从 macOS 转回 Windows,但是,也正如我自己每次失败后的总结一样,我没有办法完全抛弃掉 iPhone 、macOS,因为其所带来的生态是我无法迁移到 Android 上的,被操作系统所挟裹,不得不去面对的现实是:最终,我还是回到了 iPhone 所构建的生态。
对于 Linux 也是一样的,Linux 的服务端的用户诉求是明确的、简单直接的、绝大多数场景都可以被覆盖掉的。而桌面端的产品可能会有数万种不同类型的需求,这使得产品经理在进行设计时预见不了需求的问题,也就很正常的问题。
我们回过头去看,Linux 想要占领桌面市场还需要什么呢?需要的不仅仅是一个 Linux QQ,我们需要给更多人提供 Linux 上的微信、办公套件等等一系列软件。没有这些软件,我们就很难让用户迈过入门的第一关:我如何登录 QQ /微信和我的同事、家人沟通。如果他发现,我用了 Linux ,但是我却没有办法使用 QQ /微信进行沟通,那么我用 Linux 还有什么意义呢?
对于 Linux 来说,除了去适配这些我们所熟悉的软件以外,更是需要有厂商能够面向 Linux 开发出独占的杀手级用户,这样,才能够更好的去推动一个操作系统的发展。
Linux 距离成为流行操作系统,还差多少个 QQ 微信
如果 Linux QQ 仍然继续更新,那对于 Linux 来说,是一大利好消息,一些做的好的、做的不好的应用,都可能会重新考虑创建自己的 Linux 版本。而过去,可能没有这样的机会。
系统运维
2019-11-24 17:25:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
一、显示/etc目录下,以非字母开头,后面跟了一个字母以及其他任意长度任意字母的文件或目录
ls /etc/[^[:alpha:]][:alpha:]*
二、复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中
cp /etc/p*[^[:digit:]] /tmp/mytest1
三、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中
cat /etc/issue | tr [:lower:] [:upper:] >>/tmp/issue.out
四、总结描述用户和组管理类命令的使用方法
useradd [options] LOGIN #创建用户命令
常用选项:-m:自动创建家目录
-s:指定创建用户的登录shell
-d:指定用户的家目录
-g:指定用户的基本组
-G:指定用户的附加组
-u:指定用户的uid
userdmod [options] LOGIN #修改用户命令
常用选项:-d:修改用户的家目录
-s:修改创建用户的登录shell
-g:修改用户的基本组
-G:修改用户的附加组
-u:修改用户的uid
-l:修改用户名
-L:锁定用户密码
-U:解除锁定用户密码
userdel [options] LOGIN #删除用户命令
常用选项:-f:强制删除
-r:删除与用户有关的文件
passwd [--stdin] [username] #修改用户密码
常用选项:--stdin:使用标准输入写入密码
-d:删除密码
-n:密码最小有效天数
-x:密码最大有效天数
-w:密码过期提前警告的天数
groupadd [options] group #创建组命令
常用选项:-g:指定用户gid
-r, --system:创建系统组
-p, --password:创建用户同时创建组密码
groupmod [options] GROUP #修改组命令
常用选项:-n:修改组名
-p, --password:修改组密码
-g:修改用户gid
groupdel [options] GROUP #删除用户组命令

练习: 1、创建组distro,GID为2019
~]# groupadd -g 2019 distro
2、创建用户mandriva,其ID号为1005,基本组为distro
~]# useradd -g distro -u 1005 mandriva
3、创建用户mageia,其ID号为1100,家目录为/home/linux
~]# useradd -u 1100 -d /home/linux mandriva
4、给用户mageia添加密码,密码为mageedu,并设置用户密码7天后过期
~]# echo mageedu |passwd --stdin -x 7 mageia
5、删除mandriva,但保留其家目录
~]# userdel mandriva
6、创建用户slackware,其ID号为2002,基本组为distro,附加组为peguin
~]# useradd -u 2002 -g distro -G peguin slackware
7、修改slackware的默认shell为/bin/tcsh
~]# usermod -s /bin/tcsh slackware
8、为用户slackware新增附加组admins
~]# usermod -G admins slackware
系统运维
2019-11-24 17:23:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
KeePass 能够帮你记住各种各样的密码,比如银行卡密码、邮箱密码、支付宝以及各种网站的账号密码,解决各个密码不同的很容易混淆,而且经常换密码的话更不好记忆的困难,在这里说下我现在管理密码的方法吧。 我使用的密码管理软件是 KeePass ,它是一款出色的密码管理软件,可以使用一个主密码及key 来验证,不仅使用高强度的加密算法保存密码,而且也可以将密码数据库同步到其他地方,可以防止丢失,并且 KeePass 支持多种插件,可以很方便的实现各种密码管理。 KeePass 优点:
安全:截至此时应该没有泄露的风险,就算数据库丢了没访问密码问题也不严重(它还可以使用一个文件作为加密密码,我还使用了key 文件,安全性更高!);
方便:注册网站时首先创建一个新条目,随机生成密码后再填入注册网站,方便且密码多变。登录各个网站时,可以直接双击需要复制的字段,再去登陆框粘贴即可;
简单:没有大多数密码管理软件的繁琐,使用熟练后会非常舒心,数据库也仅一个kdb文件,压缩加密后放到邮箱就完成了备份;
多样:软件是开源的,数据库除了在Windows可以使用,在Linux、MacOS X、PocketPC、Symbian、BlackBerry、PalmOS等都可以使用。 KeePass 安装:
下载 KeePass 安装包;安装包可以通过官方网站下载,也可以通过科技爱好者社区的文件高速下载。 安装 KeePass ;
将中文语言包放到 KeePass 的安装目录下,打开 KeePass ,在 View 选项里选择语言,设置为简体中文即可,重启后 KeePass 就变成中文的了。 KeePass 应用: 3.1、创建密码数据库
开始试用前要创建密码数据库,步骤如下:
启动 KeePass,选择文件菜单,选择新建选项。选择数据库文件保存路径,请将其存放在安全之处并注意备份。
选择数据库保护方式,包括以下三种类型: 主密码:最为传统的保护方式,输入足够健壮而又易记的密码即可。 密钥文件:保存一个密钥文件作为访问密码数据库的凭据,选择这种方式必须注意密钥文件的安全。 Windows用户帐户:将密码数据库和 Windows 账户关联,只要使用当前 Windows 账户登录即可使用,但是如果重装系统的话请先导出当前账户,否则密码数据库将无法使用。
三种方式可以叠加使用,但是推荐大家使用主密码加密钥文件的方式进行保护,比如我在管理我的密码时,加密方式选择的是管理密码和密钥文件两种方式。
最后对密码数据库进行设置,包括数据库名称、加密选项等等,请按照自己的需要进行设置即可。
KeePass 创建密码数据库 3.2 保存密码及自动输入
此处讲解如何保存密码和自动输入,步骤如下: 运行 KeePass,点击添加记录(或者按下 Insert 键),弹出添加记录对话框。
KeePass 添加纪录 在记录标签页中需要填写的项目主要有以下几项: 标题:需要输入密码的窗口标题,该信息是KeePass在全局自动填写时用于选择帐户密码的根据。 用户名:在本例中为邮箱 账号。 密码:在本例中为 邮箱 的登录密码。 网址:用于按下 Ctrl + U 快捷键 快速启动相关网址或程序,在本例中为 http://mail.lxx1.com 。如果需要设置程序时则输入 cmd://程序文件路径,或者点击工具按钮,选择其中的网址:选择程序选项。 在自动输入标签页,还可以勾选双通道自动输入混淆选项,以阻止木马通过键盘记录窃取你的密码,但是只有支持 Ctrl + V 快捷键粘贴的窗口才能使用。 设置完成之后启动浏览器(如果设置网址的话可在选中相关条目后按下 Ctrl + U 启动),按下快捷键左 Ctrl + Alt + A(注意关闭中文输入法),将自动输入密码并登录 邮箱。除此之外还可以先选择浏览器窗口,然后调出 KeePass(快捷键左Ctrl+Alt+K),在相应密码条目右击,选择执行自动输入,就会自动输入账户密码,注意 KeePass 是按照前一焦点窗口的原则选择输入窗口的,所以请保证前一焦点窗口是正确的。
系统运维
2019-11-24 12:46:00
「深度学习福利」大神带你进阶工程师,立即查看>>> 查看英伟达显卡的温度: nvidia-smi , Temp 对应的就是当前GPU温度,使用 nvidia-smi -q -i 0,1 -d TEMPERATURE 可以查看更详细的温度信息; 查看CPU温度: paste <(cat /sys/class/thermal/thermal_zone*/type) <(cat /sys/class/thermal/thermal_zone*/temp) | column -s $'\t' -t | sed 's/\(.\)..$/.\1C/' 。
系统运维
2019-11-23 22:26:00
「深度学习福利」大神带你进阶工程师,立即查看>>> 查看英伟达显卡的温度: nvidia-smi , Temp 对应的就是当前GPU温度,使用 nvidia-smi -q -i 0,1 -d TEMPERATURE 可以查看更详细的温度信息; 查看CPU温度: paste <(cat /sys/class/thermal/thermal_zone*/type) <(cat /sys/class/thermal/thermal_zone*/temp) | column -s $'\t' -t | sed 's/\(.\)..$/.\1 C/' 。
系统运维
2019-11-23 22:26:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
https://github.com/aminglinux/shell20
一台MySQL服务器,跑着5个数据库,在没有做主从的情况下,需要对这5个库进行备份,具体要求如下: 1)每天备份一次,需要备份所有的库 2)把备份数据存放到/data/backup/下 3)备份文件名称格式示例:database_name-2018-11-11.sql 4)需要对1天以前的所有sql文件压缩,格式为gzip 5)本地数据保留1周 6)需要把备份的数据同步到远程备份中心,假如本机可以直接通过rsync命令同步,同步目标地址为rsync://10.10.20.100/mysqlbak/ 7)远程备份数据要求保留1个月
拿到需求后,我们不应该马上就动手,而是应该先分析需求点,准备好储备知识。如果你没有足够的储备知识,无论脚本语法掌握的多么熟练,这个脚本也是不能完成的。本脚本的核心知识点是如何备份所有的库。

知识点一:MySQL数据库备份
假设已知备份数据的用户为backup,密码为34KpmyzUq,要备份的5个数据库分别为db1-db5。
备份数据库的命令为: mysqldump -ubackup -p34KpmyzUq db1 > db1.sql
如果是远程的MySQL服务,还可以加上IP和Port,例如: mysqldump -ubackup -p34KpmyzUq -h192.168.100.100 -P3308 db1 > db1.sql
mysqldump工具常用的几个用法,如下:
1)只备份表结构,不备份数据 mysqldump -ubackup -p34KpmyzUq -h192.168.100.100 -P3308 -d db1 > db1.sql
2)只备份数据,不备份表结构 mysqldump -ubackup -p34KpmyzUq -h192.168.100.100 -P3308 -t db1 > db1.sql
3)只备份指定表 mysqldump -ubackup -p34KpmyzUq -h192.168.100.100 -P3308 db1 tb1 > db1_tb1.sql
4)导出全部数据库 mysqldump -ubackup -p34KpmyzUq -h192.168.100.100 -P3308 -A > all_db.sql
5)导出指定多个库 mysqldump -ubackup -p34KpmyzUq -h192.168.100.100 -P3308 -B db1 db2 > db12.sql
6)--master-data 我们在使用mysqldump工具备份时,偶尔会用到--master-data选项,它可以在导出时增加binlog文件的位置和change master语句(这样有助于我们做从库)。 这个选项有两个值,分别为--master-data=1和--master-data=2。 如果值等于1,就会添加一个CHANGE MASTER语句,如果值等于2,就会在CHANGE MASTER语句前添加注释,这个参数会--lock-all-tables锁表,除非你指定了--single-transaction。 若MySQL数据量很大,比如有几十GB,使用mysqldump备份工具会特别慢,推荐使用percona-xtrabackup备份工具。 该工具官方下载地址为:https://www.percona.com/software/mysqldatabase/percona-xtrabackup 它包含两个备份工具: xtrabackup和innobackupex。 如果数据引擎为myisam或者个别表的数据引擎为myisam,则需要使用innobackupex。
在本例中,我们将使用mysqldump作为备份工具。
知识点二:date命令
date在Linux系统里可以显示当前的系统日期和时间。示例命令如下: [root@aminglinux ~]# date 2018年 09月 15日 星期六 20:36:37 CST
在shell脚本中,date命令非常有用,就比如本例,要求备份文件名称要带有日期,我们就可以用date命令来实现,示例命令如下: [root@aminglinux ~]# date +%F 2018-09-15
对于本例的第7点要求,也可以用date的日期来实现,示例命令如下: [root@aminglinux ~]# date +%d 15
下面列出一些date命令常见的用法,如表1所示。
表1 date命令用法:
命令 显示结果 说明
date +%T 21:01:26 时间
date +%H 21 小时
date +%M 02 分钟
date +%S 10
date +%s 1537016549 时间戳(距离1970-01-0100:00:00 GMT过去多少秒)
date +%m 09
date +%d 15
date +%y 18 两位的年份
date +%Y 2018 四位的年份
date +%w 6 周几
date +%W 37 本年度第几周
date -d "-1 day" +%F 2018-09-14 昨天的日期
date -d "1 month ago" +%F
date -d "-1 min" +"%Y:%H:%M"
2018-08-15
2018:21:09
一个月以前的日期
格式化输出指定日期和时间
知识点三:找出一天以前的文件
在Linux系统里找文件有一个很厉害的工具 — find,从字面意思上看就知道这个工具就是用来“查找”符合要求文件的。
下面这几种用法会经常在shell脚本中使用:
1)找到logs目录下一周以前的老文件 find logs/ -type f -mtime +7
2)找到/etc/目录下所有文件名以.cnf结尾的文件 find /etc/ -type f -name "*.cnf"
3)找到当前目录下所有权限为777的目录 find . -type d -perm 777
4)找到/tmp/下大小超过1MB的文件 find /tmp/ -size +1M
5)找到当前目录下10天以前的文件并删除 find . -type f -mtime +10 -exec rm -f {} \;
还可以使用管道+xargs命令的形式: find . -type f -mtime +10 |xargs rm
本例中,要求把一天以前的备份文件找到,可以这样做: find /data/backup/ -name "*.sql" -mtime +1
知识点四:gzip压缩
gzip支持压缩文件,但不支持压缩目录,压缩一个文件的命令是: gzip file
此时,该文件被压缩为file.gz,也就是说该文件被压缩后也会被删除掉。
解压.gz的文件,使用gzip命令的-d选项,如: gzip -d file.gz
在Linux系统里,常见的压缩工具除了gzip外,还有bzip2,xz,zip等,其中bzip2和xz用法和gzip类似,而zip支持压缩目录。
结合知识点三和知识点四,把一天以前的备份文件压缩,命令为: find /data/backup/ -name "*.sql" -mtime +1 |xargs gzip
知识点五:rsync rsync是一个远程同步数据的工具,多用在备份脚本中。 rsync同步数据有两种方式,一种是通过ssh协议,需要知道对方机器用户密码或者通过密钥认证,此方式相对来说安全性稍差,毕竟知道了对方机器的密码或者建立了密钥认证,那么就能登录到对方机器上去,并可以执行命令。 另外一种方式是通过在远程机器上开启一个rsyncd的服务,通过它特有的通信协议进行数据传输,该方式不用密码或建立密钥认证,但可以设置虚拟用户以及密码,这样就安全多了。 本例中给出的远程备份地址,属于第二种方式。
rsync同步一个目录,最常用的命令为: rsync -av /source_dir/ user@ip::module_name/dest_dir/
rsync有几个常用的选项,如下: -a 归档模式,表示以递归方式传输文件,并保持所有属性,等同于-rlptgoD, -a选项后面可以跟一个 --no-OPTION 这个表示关闭-rlptgoD中的某一个,例如 -a--no-l 等同于-rptgoD -r 对子目录以递归模式处理,主要是针对目录来说的,如果单独传一个文件不需要加-r,但是传输的是目录必须加-r选项 -v 打印一些信息出来,比如速率,文件数量等 -l 保留软链结 -L 像对待常规文件一样处理软链结,如果是SRC中有软连接文件,则加上该选项后将会把软连接指向的目标文件拷贝到DST -p 保持文件权限 -o 保持文件属主信息 -g 保持文件属组信息 -D 保持设备文件信息 -t 保持文件时间信息 --delete 删除那些DST中SRC没有的文件 --exclude=PATTERN 指定排除不需要传输的文件,等号后面跟文件名,可以是万用字符模式(如*.txt) --progress 在同步的过程中可以看到同步的过程状态,比如统计要同步的文件数量、同步的文件传输速度等等 -u 加上这个选项后将会把DST中比SRC还新的文件排除掉,不会覆盖 选项确实有点多,常用的选项仅仅那么几个: (-a -v --delete --exclude )。
下面针对这些选项做一些列小实验:
1) 准备工作(建立目录以及文件): # mkdir rsync # cd rsync # mkdir test1 # cd test1 # touch 1 2 3 # ln -s /root/123.txt ./123.txt # ls -l 总用量 0 -rw-r--r-- 1 root root 0 6月 10 12:58 1 lrwxrwxrwx 1 root root 13 6月 10 12:59 123.txt -> /root/123.txt -rw-r--r-- 1 root root 0 6月 10 12:58 2 -rw-r--r-- 1 root root 0 6月 10 12:58 3 # cd ..
2)使用 -a 选项 # rsync -a test1 test2 # ls test2 test1 # ls test2/test1/ 1 123.txt 2 3
这里有一个问题,就是本来想把test1目录直接拷贝成test2目录,可结果rsync却新建了test2目录 ,然后把test1放到test2当中。
为了避免这样的情况发生,可以这样做: # rm -rf test2 # rsync -a test1/ test2/ # ls -l test2/ 总用量 0 -rw-r--r-- 1 root root 0 6月 10 12:58 1 lrwxrwxrwx 1 root root 13 6月 10 12:59 123.txt -> /root/123.txt -rw-r--r-- 1 root root 0 6月 10 12:58 2 -rw-r--r-- 1 root root 0 6月 10 12:58 3
加一个斜杠就好了,所以建议你在使用rsync备份目录时要养成加斜杠的习惯。
在上面讲了-a选项 等同于-rlptgoD,而且 -a 还可以和 --no-OPTIN 一并使用。
下面看看-l选项的作用: # rsync -av --no-l test1/ test2/ sending incremental file list created directory test2 ./ 1 skipping non-regular file "123.txt" 2 3 sent 200 bytes received 72 bytes 544.00 bytes/sec total size is 13 speedup is 0.05
使用-v选项看来就是方便,上例告诉我们跳过了非普通文件123.txt,其实123.txt是一个软连接文件,如果不使用-l选项则不理会软连接文件的。
虽然加上-l选项会把软连接文件给拷贝过去,但是 软连接的目标文件却没有拷贝过去,有时候咱们指向拷贝软连接文件所指向的目标文件,那这时候该怎么办呢?
3)使用-L选项 # rsync -avL test1/ test2/ sending incremental file list created directory test2 ./ 1 123.txt 2 3 sent 231 bytes received 91 bytes 644.00 bytes/sec total size is 0 speedup is 0.00 # ls -l test2/ 总用量 0 -rw-r--r-- 1 root root 0 6月 10 12:58 1 -rw-r--r-- 1 root root 0 6月 10 12:39 123.txt -rw-r--r-- 1 root root 0 6月 10 12:58 2 -rw-r--r-- 1 root root 0 6月 10 12:58 3
加上 -L 选项就可以把SRC中软连接的目标文件给拷贝到DST
4) 使用-u选项
首先查看一下test1/1 和test2/1的创建时间(肯定是一样的),然后使用touch修改一下test2/1的创建时间(此时test2/1要比test1/1的创建时间晚了一些),如果不加-u选项的话,会把test2/1的创建时间变成和test1/1的创建时间一样。 # ll test1/1 test2/1 -rw-r--r-- 1 root root 0 6月 10 12:58 test1/1 -rw-r--r-- 1 root root 0 6月 10 12:58 test2/1
两者之间的创建时间是一样的,下面修改test2/1 的创建时间,然后不加-u同步: # touch test2/1 # ll test2/1 -rw-r--r-- 1 root root 0 6月 10 13:20 test2/1 # rsync -a test1/1 test2/ # ll test2/1 -rw-r--r-- 1 root root 0 6月 10 12:58 test2/1
test2/1 的创建时间又变成和test1/1的创建时间一样了。
下面加上 -u 再看看结果是怎么样的: # touch test2/1 # ll test2/1 -rw-r--r-- 1 root root 0 6月 10 13:31 test2/1 # rsync -avu test1/ test2/ sending incremental file list ./ 123.txt -> /root/123.txt sent 100 bytes received 18 bytes 236.00 bytes/sec total size is 13 speedup is 0.11 [root@localhost rsync]# ll test2/1 -rw-r--r-- 1 root root 0 6月 10 13:31 test2/1 ll test1/1 -rw-r--r-- 1 root root 0 6月 10 12:58 test1/1
加上-u 选项后,不会再把 test1/1 同步为 test2/1了。

5)使用 --delete 选项
首先删除test1/123.txt: # rm -f test1/123.txt # ls test1/ 1 2 3
然后把test1/ 目录 同步到 test2/ 目录下: # rsync -av test1/ test2/ sending incremental file list ./ 1 sent 94 bytes received 34 bytes 256.00 bytes/sec total size is 0 speedup is 0.00 [root@localhost rsync]# ls test2/ 1 123.txt 2 3
test2/目录并没有删除掉123.txt, 下面加上 --delete 选项: # rsync -av --delete test1/ test2/ sending incremental file list deleting 123.txt sent 52 bytes received 12 bytes 128.00 bytes/sec total size is 0 speedup is 0.00 [root@localhost rsync]# ls test2/ 1 2 3
test2/ 目录里的123.txt也被删除了,这就是 --delete 选项的用处。还有一种情况就是如果在DST增加文件了,而SRC当中没有这些文件,同步时加上 --delete 选项后同样会删除新增的文件: # touch test2/4 # ls test1/ 1 2 3 # ls test2/ 1 2 3 4 # rsync -a --delete test1/ test2/ # ls test1/ 1 2 3 # ls test2/ 1 2 3
6)使用 --exclude 选项 # touch test1/4 # rsync -a --exclude="4" test1/ test2/ # ls test1/ 1 2 3 4 # ls test2/ 1 2 3
另外还可以使用匹配字符 * # touch test1/1.txt test1/2.txt # ls test1/ 1 1.txt 2 2.txt 3 4 # rsync -a --progress --exclude="*.txt" test1/ test2/ sending incremental file list ./ 4 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/5) sent 104 bytes received 34 bytes 276.00 bytes/sec total size is 0 speedup is 0.00 # ls test2/ 1 2 3 4
上例中,也连带着使用了--progress 选项,这个主要是用来观察rsync同步过程的状态的。
最后简 单总结一下,平时使用rsync同步数据的时候,使用-a选项基本上就可以达到我们想要的效果了,只是有时候会有个别的需求,
会用到 -a --no-OPTION, -u, -L, --delete, --exclude 以及-- progress 这些选项,还有些选项没有介绍,如果在以后的工作中遇到特殊需求了,就去查一下 rsync的man文档吧。
本案例参考脚本
有了以上的背景知识点,再去写最终的shell脚本就很容易了。
参考脚本,内容如下: #!/bin/bash ##该脚本用来备份本机数据库 ##本地保留一周,远程保留一个月 ##作者: ##日期:2018-09-15 ##版本:v0.1 mysqldump="/usr/local/mysql/bin/mysqldump" bakuser="backup" passwd="34KpmyzUq" bakdir="/data/backup" remote_dir="rsync://10.10.20.100/mysqlbak" d1=`date +%F` d2=`date +%d` #定义日志,以下的执行的所有输出,不管正确的还是错误的,全部写入到/tmp/mysql_bak.log 文件中 exec &> /tmp/mysql_bak.log echo "mysql backup begin at `date`" #对所有数据库进行遍历 for db in db1 db2 db3 db4 db5 do $mysqldump -u$bakuser -p$passwd $db >$bakdir/$db-$d1.sql done #对1天前的所有sql文件压缩 find $bakdir/ -type f -name "*.sql" -mtime +1 |xargs gzip #查找一周以前的老文件,并删除 find $bakdir/ -type f -mtime +7 |xargs rm #把当天的备份文件同步到远程 for db in db1 db2 db3 db4 db5 do rsync -a $bakdir/$db-$d1.sql $remote_dir/$db-$d2.sql done echo "mysql backup end at `date`"
脚本中,有几个点需要解释一下。 1)脚本第一行#!/bin/bash是固定格式,用来指定解释器bash的具体位置,前面的"#!"是必须要加上的。 2)所有以"#"开头的行,都是解释说明的文字,为了便于大家理解,所以我都用了中文,建议大家尽可能地用英文,因为中文可能会出现乱码。 这些注释文字用来对该脚本的描述,通常会写脚本的作用、作者以及时间或者版本等信息。 3)脚本中我用了大量的变量,这是因为这些信息可能会改变,把它们定义到变量里方便修改。 4)shell脚本中,可以使用反引号来引用一条命令的结果,然后将其保存到变量中 5)&>指定正确输出和错误输出到/tmp/mysql_bak.log 6)在shell脚本中一旦遇到了exec命令,则它会接管该shell脚本中后续所有的命令,我们可以理解为从exec那行以下所有的命令都“被拉到了一个盒子里去执行”, 而这个“盒子”就是exec本身,所以exec &> 1.txt,就可以理解为这个“盒子”里所有的操作的输出全部都到1.txt里。 7)shell脚本中循环遍历,可以使用for,语法是for ... ; do ...; done 8)本例中要求远程备份文件保存1个月,由于脚本不能到远程机器上执行find命令,所以在这我想了一个“曲线救国”的方法, date +$d表示日期,一个月的所有日期都有了,每天一个新sql文件。 例如,本月15日sql文件将会覆盖上个月15日的,同理,下个月会覆盖本月的相同日期的文件,因为文件名是一样的。但无论如何,总能保存一个月。 9)本例中,我并没有考虑要把当天的sql文件压缩后再同步到远程机器上,如果想要压缩,也可以这样做:a)压缩;b)同步;c)解压缩。
系统运维
2019-11-23 22:05:08
「深度学习福利」大神带你进阶工程师,立即查看>>> 国内博客大都采用手动从网站 Unofficial Windows Binaries for Python Extension Packages 下载 curses 库,然后用 pip 安装; 从 stackoverflow ,得知可以使用 pip install windows-curses 直接安装,省去繁琐的操作过程。不过从 link 可知 fcntl 仍然不支持Windows系统。
系统运维
2019-11-23 19:55:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
需求,更新静态文件更新
cd /data/test && sudo /usr/bin/git pull
cd /data/test&& sudo /usr/bin/git stash && sudo /usr/bin/git pull && sudo /usr/bin/git stash clean
cd /data/test && sudo /usr/bin/git branch && sudo /usr/bin/git show server { listen 80; server_name carlton.com; location ~ ^/ { root /data/test/; index index.html index.htm; } location ~ /\.ht { deny all; } access_log /data/logs/nginx/test_access.log mainlog; error_log /data/logs/nginx/test_error.log; }
系统运维
2019-11-25 22:24:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
Outlook邮箱是微软旗下的一个免费个人邮箱,Outlook不是电子邮箱的提供者,它是Windows操作系统的一个收、发、写、管理电子邮件的自带软件,即收、发、写、管理电子邮件的工具,使用它收发电子邮件十分方便。发信时,可以使用Outlook Express创建新邮件,通过网站服务器联机发送。在outlook2010、2013中添加附件超过20M,就会提示:“附件大小超出了允许的范围”!而Outlook 2010 、2013对 Internet 电子邮件帐户的新默认附件大小限制为 20 MB (20480 KB),也许微软出于安全方面的考虑,设置此限制可以防止您的计算机不断地尝试上载超出许多 Internet 服务提供商限制的超大附件,而造成发送邮件失败。Outlook怎么发送超过20MB的附件?
下面分享2种解决方法:
方法一,使用坚果云outlook将文件保存到云服务和共享的链接
有许多云存储服务,您可以向其上载,然后共享大型文件。一些常用云存储服务包括坚果云、OneDrive、 Dropbox、 iCloud 和 Google 驱动器。一旦您的文件存储在云中,您可以电子邮件中包括文档的链接。
1,将文件上载到云服务,如坚果云outlook, OneDrive或Dropbox。
2,上载文件后,复制链接,并将其粘贴到您的电子邮件。
坚果云outlook:
1,用坚果云Outlook插件,将附件替换为下载链接,可以突破公司邮箱限制,附件秒上传,你想发多大的附件就发多大的附件,有空间就是可以任性!
2,使用坚果云Outlook插件,你可以无感化地自动整理邮箱附件,附件自动按时间归类到坚果云,无需手动,即到即整理,无时差。不管是已经收取的邮件还是即将要收到的附件都可以自动化的整理到云端。
Outlook插件下载地址:https://www.jianguoyun.com/s/downloads
方法二,减小图像的大小
如果您正在发送大型图像文件您可以自动调整其大小以减小其文件大小。 将图像附加到电子邮件。 单击“文件”>“信息”。 在图像附件部分中,选择调整图像发送此消息时的大小。
返回到您的消息,然后单击发送。
系统运维
2019-11-25 22:10:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
基于ElasticSearch多实例架构,实现资源合理分配、冷热数据分离
作者: “发颠的小狼” ,欢迎转载与投稿
目录
▪ 用途
▪ 架构
▪ 192.168.1.51 elasticsearch-data部署双实例
▪ 192.168.1.52 elasticsearch-data部署双实例
▪ 192.168.1.53 elasticsearch-data部署双实例
▪ 测试
用途
前情提要:
▷ 在第一篇《EFK教程 - 快速入门指南》中,阐述了EFK的安装部署,其中ES的架构为三节点,即master、ingest、data角色同时部署在三台服务器上。
▷ 在第二篇《EFK教程 - ElasticSearch高性能高可用架构》中,阐述了EFK的data/ingest/master角色的用途及分别部署三节点,在实现性能最大化的同时保障高可用
前两篇文章,ES集群中只存在一个实例,而在本文中,将在一个集群中部署多个ES实例,来实现资源合理分配。例如data服务器存在SSD与SAS硬盘,可以将热数据存放到SSD,而冷数据存放到SAS,实现数据冷热分离。
在本文中,将为data服务器创建2个实例,分别基于SSD和基于SAS硬盘,将nginx的9月份索引放在SAS盘上,其它的全放在SSD盘上
架构
架构图
服务器配置
192.168.1.51 elasticsearch-data部署双实例
索引迁移 (此步不能忽略):将192.168.1.51上的索引放到其它2台data节点上 curl -X PUT "192.168.1.31:9200/*/_settings?pretty" -H 'Content-Type: application/json' -d' { "index.routing.allocation.include._ip": "192.168.1.52,192.168.1.53" }'
确认当前索引存储位置 :确认所有索引不在192.168.1.51节点上 curl "http://192.168.1.31:9200/_cat/shards?h=n"
停掉192.168.1.51的进程,修改目录结构及配置 :请自行按SSD和SAS硬盘挂载好数据盘
# 安装包下载和部署请参考第一篇《EFK教程 - 快速入门指南》 cd /opt/software/ tar -zxvf elasticsearch-7.3.2-linux-x86_64.tar.gz mv /opt/elasticsearch /opt/elasticsearch-SAS mv elasticsearch-7.3.2 /opt/ mv /opt/elasticsearch-7.3.2 /opt/elasticsearch-SSD chown elasticsearch.elasticsearch /opt/elasticsearch-* -R rm -rf /data/SAS/* chown elasticsearch.elasticsearch /data/* -R mkdir -p /opt/logs/elasticsearch-SAS mkdir -p /opt/logs/elasticsearch-SSD chown elasticsearch.elasticsearch /opt/logs/* -R
SAS实例/opt/elasticsearch-SAS/config/elasticsearch.yml配置 cluster.name: my-application node.name: 192.168.1.51-SAS path.data: /data/SAS path.logs: /opt/logs/elasticsearch-SAS network.host: 192.168.1.51 http.port: 9200 transport.port: 9300 # discovery.seed_hosts和cluster.initial_master_nodes 一定要带上端口号,不然会走http.port和transport.port端口 discovery.seed_hosts: ["192.168.1.31:9300","192.168.1.32:9300","192.168.1.33:9300"] cluster.initial_master_nodes: ["192.168.1.31:9300","192.168.1.32:9300","192.168.1.33:9300"] http.cors.enabled: true http.cors.allow-origin: "*" node.master: false node.ingest: false node.data: true # 本机只允行启2个实例 node.max_local_storage_nodes: 2
SSD实例/opt/elasticsearch-SSD/config/elasticsearch.yml配置 cluster.name: my-application node.name: 192.168.1.51-SSD path.data: /data/SSD path.logs: /opt/logs/elasticsearch-SSD network.host: 192.168.1.51 http.port: 9201 transport.port: 9301 # discovery.seed_hosts和cluster.initial_master_nodes 一定要带上端口号,不然会走http.port和transport.port端口 discovery.seed_hosts: ["192.168.1.31:9300","192.168.1.32:9300","192.168.1.33:9300"] cluster.initial_master_nodes: ["192.168.1.31:9300","192.168.1.32:9300","192.168.1.33:9300"] http.cors.enabled: true http.cors.allow-origin: "*" node.master: false node.ingest: false node.data: true # 本机只允行启2个实例 node.max_local_storage_nodes: 2
SAS实例和SSD实例启动方式 sudo -u elasticsearch /opt/elasticsearch-SAS/bin/elasticsearch sudo -u elasticsearch /opt/elasticsearch-SSD/bin/elasticsearch
确认SAS和SSD已启2实例 curl "http://192.168.1.31:9200/_cat/nodes?v"
192.168.1.52 elasticsearch-data部署双实例
索引迁移 (此步不能忽略):将192.168.1.52上的索引放到其它2台data节点上 curl -X PUT "192.168.1.31:9200/*/_settings?pretty" -H 'Content-Type: application/json' -d' { "index.routing.allocation.include._ip": "192.168.1.51,192.168.1.53" }'
确认当前索引存储位置 : 确认所有索引不在192.168.1.52节点上 curl "http://192.168.1.31:9200/_cat/shards?h=n"

停掉192.168.1.52的进程,修改目录结构及配置 :请自行按SSD和SAS硬盘挂载好数据盘
# 安装包下载和部署请参考第一篇《EFK教程 - 快速入门指南》 cd /opt/software/ tar -zxvf elasticsearch-7.3.2-linux-x86_64.tar.gz mv /opt/elasticsearch /opt/elasticsearch-SAS mv elasticsearch-7.3.2 /opt/ mv /opt/elasticsearch-7.3.2 /opt/elasticsearch-SSD chown elasticsearch.elasticsearch /opt/elasticsearch-* -R rm -rf /data/SAS/* chown elasticsearch.elasticsearch /data/* -R mkdir -p /opt/logs/elasticsearch-SAS mkdir -p /opt/logs/elasticsearch-SSD chown elasticsearch.elasticsearch /opt/logs/* -R
SAS实例/opt/elasticsearch-SAS/config/elasticsearch.yml配置 cluster.name: my-application node.name: 192.168.1.52-SAS path.data: /data/SAS path.logs: /opt/logs/elasticsearch-SAS network.host: 192.168.1.52 http.port: 9200 transport.port: 9300 # discovery.seed_hosts和cluster.initial_master_nodes 一定要带上端口号,不然会走http.port和transport.port端口 discovery.seed_hosts: ["192.168.1.31:9300","192.168.1.32:9300","192.168.1.33:9300"] cluster.initial_master_nodes: ["192.168.1.31:9300","192.168.1.32:9300","192.168.1.33:9300"] http.cors.enabled: true http.cors.allow-origin: "*" node.master: false node.ingest: false node.data: true # 本机只允行启2个实例 node.max_local_storage_nodes: 2
SSD实例/opt/elasticsearch-SSD/config/elasticsearch.yml配置 cluster.name: my-application node.name: 192.168.1.52-SSD path.data: /data/SSD path.logs: /opt/logs/elasticsearch-SSD network.host: 192.168.1.52 http.port: 9201 transport.port: 9301 # discovery.seed_hosts和cluster.initial_master_nodes 一定要带上端口号,不然会走http.port和transport.port端口 discovery.seed_hosts: ["192.168.1.31:9300","192.168.1.32:9300","192.168.1.33:9300"] cluster.initial_master_nodes: ["192.168.1.31:9300","192.168.1.32:9300","192.168.1.33:9300"] http.cors.enabled: true http.cors.allow-origin: "*" node.master: false node.ingest: false node.data: true # 本机只允行启2个实例 node.max_local_storage_nodes: 2
SAS实例和SSD实例启动方式 sudo -u elasticsearch /opt/elasticsearch-SAS/bin/elasticsearch sudo -u elasticsearch /opt/elasticsearch-SSD/bin/elasticsearch
确认SAS和SSD已启2实例 curl "http://192.168.1.31:9200/_cat/nodes?v"
192.168.1.53 elasticsearch-data部署双实例
索引迁移 (此步不能忽略):一定要做这步,将192.168.1.53上的索引放到其它2台data节点上 curl -X PUT "192.168.1.31:9200/*/_settings?pretty" -H 'Content-Type: application/json' -d' { "index.routing.allocation.include._ip": "192.168.1.51,192.168.1.52" }'
确认当前索引存储位置 :确认所有索引不在192.168.1.52节点上 curl "http://192.168.1.31:9200/_cat/shards?h=n"

停掉192.168.1.53的进程,修改目录结构及配置 :请自行按SSD和SAS硬盘挂载好数据盘
# 安装包下载和部署请参考第一篇《EFK教程 - 快速入门指南》 cd /opt/software/ tar -zxvf elasticsearch-7.3.2-linux-x86_64.tar.gz mv /opt/elasticsearch /opt/elasticsearch-SAS mv elasticsearch-7.3.2 /opt/ mv /opt/elasticsearch-7.3.2 /opt/elasticsearch-SSD chown elasticsearch.elasticsearch /opt/elasticsearch-* -R rm -rf /data/SAS/* chown elasticsearch.elasticsearch /data/* -R mkdir -p /opt/logs/elasticsearch-SAS mkdir -p /opt/logs/elasticsearch-SSD chown elasticsearch.elasticsearch /opt/logs/* -R
SAS实例/opt/elasticsearch-SAS/config/elasticsearch.yml配置 cluster.name: my-application node.name: 192.168.1.53-SAS path.data: /data/SAS path.logs: /opt/logs/elasticsearch-SAS network.host: 192.168.1.53 http.port: 9200 transport.port: 9300 # discovery.seed_hosts和cluster.initial_master_nodes 一定要带上端口号,不然会走http.port和transport.port端口 discovery.seed_hosts: ["192.168.1.31:9300","192.168.1.32:9300","192.168.1.33:9300"] cluster.initial_master_nodes: ["192.168.1.31:9300","192.168.1.32:9300","192.168.1.33:9300"] http.cors.enabled: true http.cors.allow-origin: "*" node.master: false node.ingest: false node.data: true # 本机只允行启2个实例 node.max_local_storage_nodes: 2
SSD实例/opt/elasticsearch-SSD/config/elasticsearch.yml配置 cluster.name: my-application node.name: 192.168.1.53-SSD path.data: /data/SSD path.logs: /opt/logs/elasticsearch-SSD network.host: 192.168.1.53 http.port: 9201 transport.port: 9301 # discovery.seed_hosts和cluster.initial_master_nodes 一定要带上端口号,不然会走http.port和transport.port端口 discovery.seed_hosts: ["192.168.1.31:9300","192.168.1.32:9300","192.168.1.33:9300"] cluster.initial_master_nodes: ["192.168.1.31:9300","192.168.1.32:9300","192.168.1.33:9300"] http.cors.enabled: true http.cors.allow-origin: "*" node.master: false node.ingest: false node.data: true # 本机只允行启2个实例 node.max_local_storage_nodes: 2
SAS实例和SSD实例启动方式 sudo -u elasticsearch /opt/elasticsearch-SAS/bin/elasticsearch sudo -u elasticsearch /opt/elasticsearch-SSD/bin/elasticsearch
确认SAS和SSD已启2实例 curl "http://192.168.1.31:9200/_cat/nodes?v"
测试
将所有索引移到SSD硬盘上 # 下面的参数会在后面的文章讲解,此处照抄即可 curl -X PUT "192.168.1.31:9200/*/_settings?pretty" -H 'Content-Type: application/json' -d' { "index.routing.allocation.include._host_ip": "", "index.routing.allocation.include._host": "", "index.routing.allocation.include._name": "", "index.routing.allocation.include._ip": "", "index.routing.allocation.require._name": "*-SSD" }'
确认所有索引全在SSD硬盘上 curl "http://192.168.1.31:9200/_cat/shards?h=n"
将nginx9月份的日志索引迁移到SAS硬盘上 curl -X PUT "192.168.1.31:9200/nginx_*_2019.09/_settings?pretty" -H 'Content-Type: application/json' -d' { "index.routing.allocation.require._name": "*-SAS" }'
确认nginx9月份的日志索引迁移到SAS硬盘上 curl "http://192.168.1.31:9200/_cat/shards"
系统运维
2019-11-25 21:22:00
「深度学习福利」大神带你进阶工程师,立即查看>>>
Step 1.调整版本 mysql> select version(); +------------+ | version() | +------------+ | 5.7.28-log | +------------+ 1 row in set (0.00 sec)

Step 2.查看当前innodb_buffer_pool_size,当前设置的20G mysql> show global variables like 'innodb_buffer_pool_size'; +-------------------------+-------------+ | Variable_name | Value | +-------------------------+-------------+ | innodb_buffer_pool_size | 21474836480 | +-------------------------+-------------+ 1 row in set (0.01 sec)
Step 3.调整为30G,计算字节如下 mysql> select 30*1024*1024*1024; +-------------------+ | 30*1024*1024*1024 | +-------------------+ | 32212254720 | +-------------------+ 1 row in set (0.00 sec)
Step 4.调整执行 mysql> set global innodb_buffer_pool_size=32212254720; Query OK, 0 rows affected (0.01 sec)
Step 5.查看结果 mysql> show global variables like 'innodb_buffer_pool_size'; +-------------------------+-------------+ | Variable_name | Value | +-------------------------+-------------+ | innodb_buffer_pool_size | 32212254720 | +-------------------------+-------------+ 1 row in set (0.00 sec)
提示:在命令行修改后,建议在/etc/my.cnf也做更新
系统运维
2019-11-25 15:56:00