Blog

bash-程序-查询或清除端口占用及判断程序是否运行

0、根据名字查找程序是否运行

ps -ef |  grep redis

1、查询端口号占用,根据端口查看进程信息

[bash]
[root@server2 ~]# lsof -i:80
COMMAND  PID   USER   FD   TYPE DEVICE SIZE NODE NAME
httpd   5014   root    3u  IPv4  14346       TCP server2:http (LISTEN)
[/bash]

2、根据进程号查看进程对应的可执行程序 
ps -f -p 进程号

[bash]
# ps -f -p 5014
UID        PID  PPID  C STIME TTY          TIME CMD
root      5014     1  0 17:26 ?        00:00:00 /usr/local/apache/bin/httpd -k
[/bash]

3、根据端口号得到其占用的进程的详细信息
这一步骤效果 等价于 刚才上面提到的 第一和第二 两个步骤之和

[bash]
netstat -tlnp|grep 80
tcp        0      0 192.168.33.10:80            0.0.0.0:*                   LISTEN      5014/httpd
tcp        0      0 0.0.0.0:48054               0.0.0.0:*                   LISTEN      5386/java
[/bash]

4、根据可执行程序查看动态链接 
ldd 可执行文件名

[bash]
ldd  /usr/local/apache/bin/httpd
linux-vdso.so.1 =>  (0x00007fff9dc90000)
libaprutil-0.so.0 => /usr/local/apache/lib/libaprutil-0.so.0 (0x00002af026fcd000)
[/bash]

5、手工终止进程的运行

[bash]
kill 5014
# 如果终止不了,可以强制终止
kill -9 5014
lsof -i:80
[/bash]

参考 自 http://linux.it.net.cn/CentOS/fast/2015/1014/18049.html

编译和执行-终端执行命令时遇到特殊空格字符

楼主 学习 centos 命令时,再网上 找了些 shell 命令,复制到 终端运行 时 ,有时会出现,莫名其妙的错误。
有时候报错,命令中 有302 ,有时候 报错 找不到 命令。

看上去  感觉 sh 命令  很正确啊。
其实 可能是 空格 有问题,-破折号,中英文,还有可能是 看不见的 特殊 字符。

密码和证书-https(ssl/tls)之证书的概述及获取和网站部署

一、CA证书概述

★先说一个通俗的例子

考虑到证书体系的相关知识比较枯燥、晦涩。俺先拿一个通俗的例子来说事儿。

◇普通的介绍信

想必大伙儿都听说过介绍信的例子吧?假设 A 公司的张三先生要到 B 公司去拜访,但是 B 公司的所有人都不认识他,他咋办捏?常用的办法是带公司开的一张介绍信,在信中说:兹有张三先生前往贵公司办理业务,请给予接洽……云云。然后在信上敲上A公司的公章。
张三先生到了 B 公司后,把介绍信递给 B 公司的前台李四小姐。李小姐一看介绍信上有 A 公司的公章,而且A公司是经常和 B 公司有业务往来的,这位李小姐就相信张先生不是歹人了。
说到这,爱抬杠的同学会问了:万一公章是伪造的,咋办捏?在此,俺要先声明,在本例子中,先假设公章是难以伪造滴,否则俺的故事没法说下去鸟。

◇引入中介机构的介绍信

好,回到刚才的话题。如果和 B 公司有业务往来的公司很多,每个公司的公章都不同,那前台就要懂得分辨各种公章,非常滴麻烦。所以,有某个中介公司 C,发现了这个商机。C公司专门开设了一项“代理公章”的业务。
今后,A 公司的业务员去B公司,需要带2个介绍信:
介绍信1
含有 C 公司的公章及 A 公司的公章。并且特地注明:C 公司信任A公司。
介绍信2
仅含有 A 公司的公章,然后写上:兹有张三先生前往贵公司办理业务,请给予接洽……云云。

某些不开窍的同学会问了,这样不是增加麻烦了吗?有啥好处捏?
主要的好处在于,对于接待公司的前台,就不需要记住各个公司的公章分别是啥样子的;他/她只要记住中介公司 C 的公章即可。当他/她拿到两份介绍信之后,先对“介绍信1”的 C 公章,验明正身;确认无误之后,再比对“介绍信1”和“介绍信2”的两个 A 公章是否一致。如果是一样的,那就可以证明“介绍信2”是可以信任的了。

★相关专业术语的解释

费了不少口水,终于说完了一个俺自认为比较通俗的例子。如果你听到到这儿,还是想不明白这个例子在说啥,那后续的内容,就不必浪费时间听了 🙁
下面,俺就着上述的例子,把相关的名词,作一些解释。

◇什么是证书?

“证书”洋文也叫“digital certificate”或“public key certificate”(专业的解释看“这里”)。
它是用来证明某某东西确实是某某东西的东西(是不是像绕口令?)。通俗地说,证书就好比例子里面的公章。通过公章,可以证明该介绍信确实是对应的公司发出的。
理论上,人人都可以找个证书工具,自己做一个证书。那如何防止坏人自己制作证书出来骗人捏?请看后续 CA 的介绍。

具体内容介绍:密码和证书-与证书相关的名称(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12等)

◇什么是CA?

CA 是“Certificate Authority”的缩写,也叫“证书授权中心”。(专业的解释看维基百科“这里”)
它是负责管理和签发证书的第三方机构,就好比例子里面的中介——C 公司。一般来说,CA 必须是所有行业和所有公众都信任的、认可的。因此它必须具有足够的权威性。就好比A、B两公司都必须信任 C 公司,才会找 C 公司作为公章的中介。

◇什么是CA证书?

CA 证书,顾名思义,就是CA颁发的证书。
前面已经说了,人人都可以找工具制作证书。但是你一个小破孩制作出来的证书是没啥用处的。因为你【不是】权威的 CA 机关,你自己搞的证书不具有权威性。
这就好比上述的例子里,某个坏人自己刻了一个公章,盖到介绍信上。但是别人一看,不是【受信任】的中介公司的公章,就不予理睬。坏蛋的阴谋就不能得逞啦。
文本后续提及的证书,若无特殊说明,均指 CA 证书。

◇什么是证书之间的信任关系?

在俺的例子里谈到,引入中介后,业务员要同时带两个介绍信。第一个介绍信包含了两个公章,并注明,公章C信任公章A。证书间的信任关系,就和这个类似。就是用一个证书来证明另一个证书是真实可信滴。

◇什么是证书信任链?

实际上,证书之间的信任关系,是可以嵌套的。比如,C 信任 A1,A1 信任 A2,A2 信任 A3……这个叫做证书的信任链。只要你信任链上的头一个证书,那后续的证书,都是可以信任滴。

◇什么是根证书?

“根证书”的洋文叫“root certificate”,专业的解释请看维基百科“这里”。为了说清楚根证书是咋回事,再来看个稍微复杂点的例子。
假设 C 证书信任 A 和 B;然后 A 信任 A1 和 A2;B 信任 B1 和 B2。则它们之间,构成如下的一个树形关系(一个倒立的树)。


处于最顶上的树根位置的那个证书,就是“根证书”。除了根证书,其它证书都要依靠上一级的证书,来证明自己。那谁来证明“根证书”可靠捏?实际上,根证书自己证明自己是可靠滴(或者换句话说,根证书是不需要被证明滴)。

二、证书有啥用?

◇验证网站是否可信(针对HTTPS)

通常,我们如果访问某些敏感的网页(比如用户登录的页面),其协议都会使用 HTTPS 而不是 HTTP。因为 HTTP 协议是明文的,一旦有坏人在偷窥你的网络通讯,他/她就可以看到网络通讯的内容(比如你的密码、银行帐号、等);而 HTTPS 是加密的协议,可以保证你的传输过程中,坏蛋无法偷窥。
但是,千万【不要】以为,HTTPS 协议有了加密,就可高枕无忧了。俺再举一个例子来说明,光有加密是不够滴。假设有一个坏人,搞了一个假的网银的站点,然后诱骗你上这个站点。假设你又比较单纯,一不留神,就把你的帐号,口令都输入进去了。那这个坏蛋的阴谋就得逞鸟。
为了防止坏人这么干,HTTPS 协议除了有加密的机制,还有一套证书的机制。通过证书来确保,某个站点确实就是某个站点。
有了证书之后,当你的浏览器在访问某个 HTTPS 网站时,会验证该站点上的 CA 证书(类似于验证介绍信的公章)。如果浏览器发现该证书没有问题(证书被某个根证书信任、证书上绑定的域名和该网站的域名一致、证书没有过期),那么页面就直接打开;否则的话,浏览器会给出一个警告,告诉你该网站的证书存在某某问题,是否继续访问该站点?为了形象起见,下面给出chrome 的截图。大多数知名的网站,如果用了 HTTPS 协议,其证书都是可信的(也就不会出现上述警告)。所以,今后你如果上某个知名网站,发现浏览器跳出上述警告,你就要小心啦!

◇验证某文件是否可信(是否被篡改)

证书除了可以用来验证某个网站,还可以用来验证某个文件是否被篡改。

基本原理:具体内容可看链接 密码和证书-数字签名概述及与数字证书的关系

1、用数字证书 保存  软件发布作者的公钥【证明这个公钥是软件发布作者的】

2、用将文件进行摘要算法(如hash函数),获取摘要,并用私钥加密。【这个就是数字签名】

3、将数字证书和 文件【文件附带了数字签名】一起发给用户,让用户检测软件安全性。

总结:用数字证书获得真正的公钥,提权数字签名中的摘要并将其和文件进行比较,判断文件是否修改过。


二、证书的获取

◇自签名证书

下面的操作可以看出:服务器私钥  server.key ,证书是  server.crt 【自签名证书,楼主没有亲自尝试过,仅做参考】

1.创建服务器证书密钥文件 server.key:
openssl genrsa -des3 -out server.key 1024
输入密码,确认密码,自己随便定义,但是要记住,后面会用到。
2.创建服务器证书的申请文件 server.csr
openssl req -new -key server.key -out server.csr
输出内容为:
Enter pass phrase for root.key: ← 输入前面创建的密码 
Country Name (2 letter code) [AU]:CN ← 国家代号,中国输入CN 
State or Province Name (full name) [Some-State]:BeiJing ← 省的全名,拼音 
Locality Name (eg, city) []:BeiJing ← 市的全名,拼音 
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany Corp. ← 公司英文名 
Organizational Unit Name (eg, section) []: ← 可以不输入 
Common Name (eg, YOUR name) []: ← 此时不输入 
Email Address []:[email protected] ← 电子邮箱,可随意填
Please enter the following ‘extra’ attributes 
to be sent with your certificate request 
A challenge password []: ← 可以不输入 
An optional company name []: ← 可以不输入
4.备份一份服务器密钥文件
cp server.key server.key.org
5.去除文件口令
openssl rsa -in server.key.org -out server.key
6.生成证书文件server.crt
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

◇CA机构申请证书

实际需要在自己网站上实现https的,可以用免费的https://letsencrypt.org/
对网站https://letsencrypt.org的功能重新封装的网站 https://www.sslforfree.com/

证书申请网站,会要求验证域名所有者是否是你本人。
要三种方法,建议选择 dns验证 比较简单。

一般情况下:从ca机构获取的证书,会有三个文件。

第一个是证书文件,里面有公钥。
第二个是私钥。
第三个是证书组文件,因为公钥是由中间机构签发的,一些浏览器可能不能识别,所以证书组就是为了证明从根证书到中间签发机构都是可信的。

### 在一些服务器 证书配置文件中,我们可以看到 以下配置
SSLCertificateFile /etc/ssl/example_com.crt
SSLCertificateKeyFile /etc/ssl/private/example_com.key
SSLCertificateChainFile /etc/ssl/example_com.ca-bundle

在nginx服务器配置文件中:只有ssl_certificate和 ssl_certificate_key 。如果一些浏览器不能识别单独的证书文件,那么需要将证书文件和证书组文件,组合在一起,生成一个证书链文件。最后将 ssl_certificate 配置成证书链文件。

合并证书链操作如下:

cat example_com.crt example_com.ca-bundle > example_com.chained.crt

记得一定要先将证书放在前面,然后将证书组放在后面。这样才能解析成功。
但是在实际生成过程中:证书链生成的还是有问题。实际用cat生成时,中间的

-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----

###  会合并成一行
-----END CERTIFICATE----------BEGIN CERTIFICATE-----

###  特别注意:切分的时候,每一行的格式都是统一的,前面都是 -----  五个破折号

下面举例,正确的证书链文件内容:

-----BEGIN CERTIFICATE-----
MIIFbDCCBFSgAwIBAgISA5WD5KQw2Su8QWrrv6G5nlVfMA0GCSqGSIb3DQEBCwUA
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xODExMjMxMDAwMjdaFw0x
OTAyMjExMDAwMjdaMB0xGzAZBgNVBAMTEnd3dy5odWFpaml1amlhLmNvbTCCASIw
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPB7xpQSEdD5ZvYU80fBiWaTRHa4
p1ONueojFD6NabMRMw2ct4PLHsiIt8z5hGF02JhKb/ZxLIIBh5dtqFxAy4OcYRWa
J+7Qi+1tgD695t0JkqsW/KGbbZtZRFHikhx4TTLyd5IWuEKjJA87+8ufgCv/zuEM
hpdqNs5YhjqrVNjLo5yIIwVWF4FRs3rkSqUthaw6bF3+ER5Cnlrmy4nM6t811KuS
aFAFU9ZpfxzbtFefVNZGn79CxMf9huvHUklJTZeUmtr8SkfRLSC8yclP2vW4l70G
EiT1UK7jPb+/x2qynnDMv+/EfYk3oJq1emTg1UNizLmKPAItWDhI50BGKa8CAwEA
AaOCAncwggJzMA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYI
KwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUCG4SDRTDi0shGxdi/x7S
ZFrxaSswHwYDVR0jBBgwFoAUqEpqYwR93brm0Tm3pkVl7/Oo7KEwbwYIKwYBBQUH
AQEEYzBhMC4GCCsGAQUFBzABhiJodHRwOi8vb2NzcC5pbnQteDMubGV0c2VuY3J5
cHQub3JnMC8GCCsGAQUFBzAChiNodHRwOi8vY2VydC5pbnQteDMubGV0c2VuY3J5
cHQub3JnLzAtBgNVHREEJjAkgg5odWFpaml1amlhLmNvbYISd3d3Lmh1YWlqaXVq
aWEuY29tMEwGA1UdIARFMEMwCAYGZ4EMAQIBMDcGCysGAQQBgt8TAQEBMCgwJgYI
KwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIIBBAYKKwYBBAHW
eQIEAgSB9QSB8gDwAHYAdH7agzGtMxCRIZzOJU9CcMK//V5CIAjGNzV55hB7zFYA
AAFnQDpiswAABAMARzBFAiEAyP9RowhmAeFy0FIw864vexsfEi7+I8eXXgRBgdma
lXACIFuyRLDwlDSymNcSibTq/RJt4AlYtVAs2zA9lOUOGwN4AHYAY/Lbzeg7zCzP
C3KEJ1drM6SNYXePvXWmOLHHaFRL2I0AAAFnQDpiuAAABAMARzBFAiEAtLhwBegO
6Hvo3lTzkb1OBW1pmI00QMalMyyp7a8l3DICICdx6IzPP8Q9Aj5nwHXr7TZId+ye
pT2ApN87VE74fiT8MA0GCSqGSIb3DQEBCwUAA4IBAQBJZ0dI9Uq8WzRagYaRZI3p
BelzOZ0ImRW3iipi/XBHFB3hXbEIMBvaPlzduZzYe70WRYJFkHTCdVWrUqhUuEv9
B0Q5ovW9KDcrDJVw7C9Y4UbpfDnq6NBxXXRr3azNUahCoYIVvTTNcfFiWXvhW2Ie
Yw3v1dfH4pxdeZodBInaikJ1o2IAYWXQVRuX06ywcItFIcH9aUuvP8g0DEEe3xwf
iIV3IJ+rUzEHLh/r+9CabSotT5TqwvYPLWnhBUD3YaD56VXGlipdZ7bQiH80CUXw
WvmDH84qEJ+D7btxFBYl+OP7irl3cdcQNmYYJOQWyMOK0h+AhSEBx7qpDOC/Ew1b
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow
SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT
GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF
q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8
SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0
Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA
a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj
/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T
AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG
CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv
bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k
c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw
VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC
ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz
MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu
Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF
AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo
uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/
wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu
X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG
PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6
KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==
-----END CERTIFICATE-----

三、网站部署https

nginx配置文件-安全配置-https(ssl/tls)和http2的配置

参考

https://www.namecheap.com/support/knowledgebase/article.aspx/9423//installing-a-ssl-certificate-on-apache

http://www.cnblogs.com/jingxiaoniu/p/6745254.html

https://program-think.blogspot.com/2010/02/introduce-digital-certificate-and-ca.html

http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html

密码和证书-Https与OpenSSL的关系及证书是否信任关系

HTTPS是一种协议,等于HTTP+TLS(由于历史原因,SSL3.0之后就被TLS1.0替代了)。

openssl是一套开源工具集,主要有两个特性:
1、实现了ssl2,ssl3,TLSv1,TLSv1.1,TLSv1.2协议。
2、实现目前常用的加密算法。

没有一个非常精准的方法来判断HTTPS是否使用openssl,但是根据网站返回的server类型,可以大致估计是否使用了openssl,比如如果使用apache或者nginx,那么肯定是使用了openssl。保守估计至少70%以上的网站是使用openssl的。而windows系列的服务器包括IIS,windows server等都是使用schannel,没有使用openssl,不会受heartbleed影响。

大白话:openssl就是用来创建证书密钥的工具。网站加了证书就可以实现https访问了。但是自己用openssl签发证书,是不会被浏览器信任的。权威的CA证书签发机构可以用openssl创建证书,并且被浏览器信任。

如下图,提示有风险,正常吗?是我哪里弄错了,还是一定要从某些机构申请的才可以?不申请不可以吗?

一般出现这种情况有两种原因:
1.证书签发机构,不是权威的CA证书签发机构,你目前的情况就属于这种情况
2.证书签发机构或者是该机构签发的部分证书在某些浏览器上是不受信任的,如wosign的部分证书在chrome浏览器上就会被打红叉

yum-安装软件和卸载软件

用yum查找相关软件

比如:yum list | grep php55w*

一、使用yum安装和卸载软件,有个前提是yum安装的软件包都是rpm格式的。

安装的命令是,yum install ~,yum会查询数据库,有无这一软件包,如果有,则检查其依赖冲突关系,如果没有依赖冲突,那么最好,下载安装;如果有,则会给出提示,询问是否要同时安装依赖,或删除冲突的包,你可以自己作出判断;

删除的命令是,yum remove ~,同安装一样,yum也会查询数据库,给出解决依赖关系的提示。

其中~ 代表软件名
1.用YUM安装软件包命令:yum install ~

2.用YUM删除软件包命令:yum remove ~

二、用yum查询想安装的软件

我们常会碰到这样的情况,想安装一个软件,只知道它和某方面有关,但又不能确切知道它的名字。这时yum的查询功能就起作用了。我们可以用 yum search keyword这样的命令来进行搜索,比如我们要则安装一个Instant Messenger,但又不知到底有哪些,这时不妨用 yum search messenger这样的指令进行搜索,yum会搜索所有可用rpm的描述,列出所有描述中和messeger有关的rpm包,于是我们可能得到 gaim,kopete等等,并从中选择。
有时我们还会碰到安装了一个包,但又不知道其用途,我们可以用yum info packagename这个指令来获取信息。

1.使用YUM查找软件包

命令:yum search ~

2.列出所有可安装的软件包

命令:yum list

3.列出所有可更新的软件包

命令:yum list updates

4.列出所有已安装的软件包

命令:yum list installed

5.列出所有已安装但不在Yum Repository 內的软件包

命令:yum list extras

6.列出所指定软件包

命令:yum list ~

7.使用YUM获取软件包信息

命令:yum info ~

8.列出所有软件包的信息

命令:yum info

9.列出所有可更新的软件包信息

命令:yum info updates

10.列出所有已安裝的软件包信息

命令:yum info installed

11.列出所有已安裝但不在Yum Repository 內的软件包信息

命令:yum info extras

12.列出软件包提供哪些文件
命令:yum provides~

三、清除YUM缓存
yum 会把下载的软件包和header存储在cache中,而不会自动删除。如果我们觉得它们占用了磁盘空间,可以使用yum clean指令进行清除,更精确的用法是yum clean headers清除header,yum clean packages清除下载的rpm包,yum clean all 清除所有。

1.清除缓存目录(/var/cache/yum)下的软件包
命令:yum clean packages

2.清除缓存目录(/var/cache/yum)下的 headers
命令:yum clean headers

3.清除缓存目录(/var/cache/yum)下旧的 headers
命令:yum clean oldheaders

4.清除缓存目录(/var/cache/yum)下的软件包及旧的headers
命令:yum clean, yum clean all (= yum clean packages; yum clean oldheaders)

四、yum命令工具使用举例

yum update  升级系统

yum install  ~ 安装指定软件包

yum update ~ 升级指定软件包

yum remove ~ 卸载指定软件

yum grouplist   查看系统中已经安装的和可用的软件组,可用的可以安装

yum grooupinstall ~安装上一个命令显示的可用的软件组中的一个

yum grooupupdate ~更新指定软件组的软件包

yum grooupremove ~ 卸载指定软件组中的软件包

yum deplist ~ 查询指定软件包的依赖关系

yum list yum\* 列出所有以yum开头的软件包

yum localinstall ~ 从硬盘安装rpm包并使用yum解决依赖

五、yum高级管理应用技巧

技巧1:加快你的yum的速度.使用yum的扩展插件yum-fastestmirror,个人认为这个插件非常有效,速度真的是明显提高,

#yum -y install yum-fastestmirror
注意:在Centos 4上,名字叫yum-plugin-fastestmirror

技巧2:扩展你的rpm包好多包官方没有,怎么搞定他.要我自己编译吗? 好了,你安装这个包,这个是redhat5的哦。你可以自己到  http://dag.wieers.com/rpm/FAQ.php#B 这来找

# Red Hat Enterprise Linux 5 / i386:

rpm-Uhvhttp://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm

# Red Hat Enterprise Linux 5 / x86_64:
rpm-Uhvhttp://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS//rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm

#ATrpms
[atrpms  ]
name= CentOS-$releasever – ATrpms
baseurl=http://dl.atrpms.net/el$releasever-$basearch/atrpms/stable
gpgcheck=1
gpgkey=http://ATrpms.net/RPM-GPG-KEY.atrpms

技巧3:rpm查找.还是有rpm包找不到怎么办,到下面这个网站。基本上都收集全了,你可以用高级查找看看。http://rpm.pbone.net/

技巧4:通过yum工具下载RPM源码包。前提是有安装 yum-utils这个软件包.如果有安装的话。

#yum downloader  –source   ;  RPM源码包

#yum downloader  –source vsftpd

当然,没有源包的话,还要加入一个源

[linux-src]

name=Centos$releasever-$basearch- Source

baseurl=http://mirrors.163.com/centos/$releasever/os/SRPMS/

enabled=1

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

技巧5:软件组安装有时我们安装完系统,管理有一类软件没有安装,比如用于开发的开发包,我们可以用软件包来安装。

#yum grouplist 这样可以列出所有的软件包

比如我们要安装开发有关的包

#yum groupinstall “Development Libraries”

#yum groupinstall “Development Tools”

比如我们要安装中方支持
#yum groupinstall “Chinese Support”

#yum deplist package1  #查看程序package1依赖情况

以上所有命令参数的使用都可以用man来查看:

[root@F7常用文档]$ man yum

yum -y install 包名(支持*) :自动选择y,全自动
yum install 包名(支持*) :手动选择y or n
yum remove 包名(不支持*)
rpm -ivh 包名(支持*):安装rpm包
rpm -e 包名(不支持*):卸载rpm包

升级内核:#yum install kernel-headers kernel-devel

yum-yum和rpm有什么区别?

rpm是由红帽公司开发的软件包管理方式,使用rpm我们可以方便的进行软件的安装、查询、卸载、升级等工作。但是rpm软件包之间的依赖性问题往往会很繁琐,尤其是软件由多个rpm包组成时。
Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。

简单点回答吧, rpm 只能安装已经下载到本地机器上的rpm 包. yum能在线下载并安装rpm包,能更新系统,且还能自动处理包与包之间的依赖问题,这个是rpm 工具所不具备的。

总结就是:一个是包 安装 卸载管理器, 另一个是 本地 网络 全局包管理器。

Yum 内部 调用 rpm ,卸载 安装 软件。 大致 就是这个 道理。

yum-什么是EPEL及Centos上安装EPEL

RHEL以及他的衍生发行版如CentOS、Scientific Linux为了稳定,官方的rpm repository提供的rpm包往往是很滞后的,当然了,这样做这是无可厚非的,毕竟这是服务器版本,安全稳定是重点,官方的rpm repository提供的rpm包也不够丰富,很多时候需要自己编译那太辛苦了,而EPEL恰恰可以解决这两方面的问题。

什么是EPEL?

EPEL的全称叫 Extra Packages for Enterprise Linux 。EPEL是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 EPEL之后,就相当于添加了一个第三方源。

如果你知道rpmfusion.org的话,拿 rpmfusion 做比较还是很恰当的,rpmfusion 主要为桌面发行版提供大量rpm包,而EPEL则为服务器版本提供大量的rpm包,而且大多数rpm包在官方 repository 中是找不到的。

另外一个特点是绝大多数rpm包要比官方repository 的rpm包版本要来得新,比如我前些日子在CentOS上安装的php,RHEL为了稳定性还在延用5.1.6版,我记得这是去年上半年的版本,而php 的最新版本已经到5.3.2,如果在php5.1.6的基础上安装phpmyadmin,则会提示php版本过低,这时候,EPEL中提供的较新php rpm就能很方便的派上用场了。

===================================

一,什么是epel
如果既想获得 RHEL 的高质量、高性能、高可靠性,又需要方便易用(关键是免费)的软件包更新功能,那么 Fedora Project 推出的 EPEL(Extra Packages for Enterprise Linux)正好适合你。EPEL(http://fedoraproject.org/wiki/EPEL) 是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。

二,使用心得
1,不用去换原来yum源,安装后会产生新repo
2,epel会有很多源地址,如果一个下不到,会去另外一个下
http://mirror.xfes.ru/fedora-epel/6/x86_64/ibus-table-chinese-scj-1.3.4-1.el6.noarch.rpm: [Errno 14] PYCURL ERROR 6 – “”
Trying other mirror.
http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/ibus-table-chinese-scj-1.3.4-1.el6.noarch.rpm: [Errno 14] PYCURL ERROR 6 – “”
Trying other mirror.
http://repo.boun.edu.tr/epel/6/x86_64/ibus-table-chinese-scj-1.3.4-1.el6.noarch.rpm: [Errno 14] PYCURL ERROR 6 – “”kjs
3,更新时如果下载的包不全,就不会进行安装。这样的话,依赖关系可以保重

三,安装epel,centos6选6,5就选5
32位系统选择:
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -ivh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
64位系统选择:
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
导入key:
rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-5
如果用比较新的软件,用epel-test.repo这个文件就行了
别忘了安装yum install yum-priorities

[root@localhost yum.repos.d]# ls |grep epel
epel.repo
epel-testing.repo

转自:http://www.unxmail.com/read.php?67

SSH-解决连接自动断开

在使用SSH客户端进行连接管理的时候如果长时间不输入命令,服务器会自动断开连接,尤其是利用代理进行SSH连接时情况更突出。

Bad packet length 2165930639.
padding error: need -2129036657 block 8 mod 7
ssh_dispatch_run_fatal: Connection to UNKNOWN: message authentication code incorrect

——————————————————————————-
这样连接上去,利用代理,会经常掉线。
后来,我提权 ,用sudo ,以root 身份运行就 不会掉线了,奇怪了啊。
记得 用 root 身份连接 +
打开服务器 /etc/ssh/sshd_config,我在最后增加一行
ClientAliveInterval 60
ClientAliveCountMax 1
(可能我在 ~/.ssh/ssh_config 文件里配置了
TCPKeepAlive yes
ServerAliveInterval 30
前一个参数是说要保持连接,后一个参数表示每过30秒发一个数据包到服务器表示“我还活着”。可能这地方也需要配置下吧。)
这样实际使用中 的确 可以 保持 很长的连接。
(操作 环境 mac下 使用root账户 操作 SSH , 并以root用户登入到远程 centos 主机中 )

重要信息:经过测试:

# 在 ~/.ssh/ssh_config 文件(即当前用户的SSH配置文件中) 配置了下面参数
#1、保持 tcp 连接
TCPKeepAlive yes
#2、每过30秒发一个数据包到服务器表示"我还活着"
ServerAliveInterval 30
# 经过测试,用本机当前用户 进行 SSH远程连接操作 也没有问题。不会掉线了。

其他方法也有,比如用 screen 恢复 ssh 会话。
*********************************************************************

后面提到的方法都已经单独试过了,感觉 没有 效果。
——————————————————————————-
针对这种情况,我在网上搜集了可以让 SSH 保持连接的方法与大家分享
在服务器端, 可以让服务器发送“心跳”信号测试提醒客户端进行保持连接
通过修改 sshd 的配置文件,能够让 SSH Server 发送“心跳”信号来维持持续连接,下面是设置的内容
打开服务器 /etc/ssh/sshd_config,我在最后增加一行
ClientAliveInterval 60
ClientAliveCountMax 1
这 样,SSH Server 每 60 秒就会自动发送一个信号给 Client,而等待 Client 回应,(注意:是服务器发心跳信号,不是客户端,这个有别于一些 FTP Client 发送的 KeepAlives 信号哦~~~),如果客户端没有回应,会记录下来直到记录数超过 ClientAliveCountMax 的值时,才会断开连接。
如果你没有服务器端管理权限, 在客户端进行设置也可以实现
只要在/etc/ssh/ssh_config文件里加两个参数就行了
1 TCPKeepAlive yes
2 ServerAliveInterval 300
前一个参数是说要保持连接,后一个参数表示每过5分钟发一个数据包到服务器表示“我还活着”
如果你没有root权限,修改或者创建~/.ssh/ssh_config也是可以的
在这种方法中, 如果你只想针对某一个ssh连接进行持续, 你可以将上述配置文件复制一下进行修改然后在连接的时候使用 -F参数进行配置文件的指定。 当然因为只需要修改两个参数, 你也可以直接在连接命令中进行设定即:
ssh -o TCPKeepAlive=yes -o ServerAliveInterval=300 [email protected] -p 12345678

——————————————————————————-
有可能是 网络问题,杀毒软件导致 端口被占,收到的 数据包 出错
Found the cause for my problem by accident. I tried to use an old trick and started a System Recovery to undo my Git installation. It failed because of my Virus Scanner. After uninstalling Bitdefender Antivirus Free Edition it worked. Incoming SSH2 messages were blocked (got Windows 8 Pro) which caused the bad packet length error. Anyway, thanks for your support!
——————————————————————————–
有可能是 一开始 验证密钥文件 时,密钥文件 默认名字可能是其他服务器的密钥 ,所以尽量重命名,指定服务器需要的密钥
save the keys in C:\Users\myUserName\.ssh\keyName
Your local ssh command would look for ssh keys in %HOME%\.ssh\id_rsa(.pub).

So you need to either:

rename the local files representing your ssh (public and private) keys
or reference those through a %HOME%\.ssh\config which can reference the exact name of your private key (with an IdentityFile directive).

Host gitlab
user git
hostname your.gitlab.server.com
IdentityFile C:\user\YourUsername\.ssh\keyName

yum-用rpm查看软件是否安装以及安装目录

用rpm 安装软件  rpm -ivh  xxxx.rpm    软件名xxx要带.rpm 后缀
用rpm查看软件目录   rpm -ql  xxxx     软件名xxx不要带.rpm 后缀


yum list 《安装包》 其实是 查看 本地和网络 是否存在,两边都在看的。

利用 yum list installed 其实 也可以查看 本地安装 哪些 软件

[root@testdb ~]# yum list installed | grep mysql
mysql-community-client.x86_64 5.7.21-1.el7 installed
mysql-community-common.x86_64 5.7.21-1.el7 installed
mysql-community-libs.x86_64 5.7.21-1.el7 installed
mysql-community-libs-compat.x86_64 5.7.21-1.el7 installed
mysql-community-server.x86_64 5.7.21-1.el7 installed
mysql57-community-release.noarch el7-10 @mysql57-community
php71w-mysql.x86_64 7.1.11-1.w7 @webtatic
[root@testdb ~]#
# 查看 nginx 是否已经安装
sh-4.2# rpm -qa | grep -i nginx
nginx-1.12.2-1.el7_4.ngx.x86_64
# 查看 具体 软件名 的安装目录
sh-4.2# rpm -ql nginx-1.12.2-1.el7_4.ngx.x86_64
/etc/logrotate.d/nginx
/etc/nginx
/etc/nginx/conf.d
/etc/nginx/conf.d/default.conf
/etc/nginx/fastcgi_params
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
/etc/nginx/modules
/etc/nginx/nginx.conf
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params
/etc/nginx/win-utf
/etc/sysconfig/nginx
/etc/sysconfig/nginx-debug
/usr/lib/systemd/system/nginx-debug.service
/usr/lib/systemd/system/nginx.service
/usr/lib64/nginx
/usr/lib64/nginx/modules
/usr/libexec/initscripts/legacy-actions/nginx
/usr/libexec/initscripts/legacy-actions/nginx/check-reload
/usr/libexec/initscripts/legacy-actions/nginx/upgrade
/usr/sbin/nginx
/usr/sbin/nginx-debug
/usr/share/doc/nginx-1.12.2
/usr/share/doc/nginx-1.12.2/COPYRIGHT
/usr/share/man/man8/nginx.8.gz
/usr/share/nginx
/usr/share/nginx/html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html
/var/cache/nginx
/var/log/nginx
sh-4.2#

编译和执行-程序中有游离的‘\240’‘\302’‘\XXX 时解决方案

偶尔从网上看到不错的源码,想研究下,不幸编译时遇到
“错误:程序中有游离的’\240”\302′”之类的错误,

首先,编译器提示的\xxx,都是8进制的编码,使用sed做下全文替换,命令如下:

sed -i 's/\o240\|\o302//g'  filename.cpp

\o指定用8进制编码,中间的\|是指要同时替换多个,这样就OK了。


刚才给你实验了一下:

sed 's/\x20//g' test.txt
# 这个命令表示将test.txt中,字符为0x20的字符替换为空。
# s表示替换,x20表示16进制0x20实际上空格,另外的空的表示替换为空,g表示全部。
# 实际就是把test.txt中的全部空格删除掉。
sed 's/aaa/bbb/g' test.txt  
# 将aaa替换为bbb。

这一般是“”,“”、,、;等符号使用错误,有时甚至是空格。

怎么解决呢?

很简单就是把他们一一改正,但很多不容易找怎么办?

可以使用linux 下的od命令加上重定向,

od详解:

Linux指令:od

# 示例用法:
od -c hello

od命令
用户通常使用od命令查看特殊格式的文件内容。通过指定该命令的不同选项可以以十进制、八进制、十六进制和ASCII码来显示文件。

语法:od [选项] 文件…
命令中各选项的含义:
- A 指定地址基数,包括:
d 十进制
o 八进制(系统默认值)
x 十六进制
n 不打印位移值
- t 指定数据的显示格式,主要的参数有:
c ASCII字符或反斜杠序列
d 有符号十进制数
f 浮点数
o 八进制(系统默认值为02)
u 无符号十进制数
x 十六进制数
除了选项c以外的其他选项后面都可以跟一个十进制数n,指定每个显示值所包含的字节数。

说明:od命令系统默认的显示方式是八进制,这也是该命令的名称由来(Octal
Dump)。但这不是最有用的显示方式,用ASCII码和十六进制组合的方式能提供更有价值的信息输出。

例如:

1.

qust@qust-K42JZ:~/test$ gcc get_ip.c -o get_ip
get_ip.c: 在函数‘main’中:
get_ip.c:32:1: 错误: 程序中有游离的‘\302’
get_ip.c:32:1: 错误: 程序中有游离的‘\240’
get_ip.c:36:1: 错误: 程序中有游离的‘\302’
get_ip.c:36:1: 错误: 程序中有游离的‘\240’

2.我们在终端中用 od -c get_ip.c > log.txt 命令将get_ip.c的内容已以 ASCII字符或反斜杠序列 输出到log.txt 中

3.查看log.txt内容

0000000   #   i   n   c   l   u   d   e       < s t d l i b 0000020 . h >  \n   #   i   n   c   l   u   d   e       < s t 0000040 r i n g . h >  \n   #   i   n   c   l   u   d   e  
0000060       < s y s / s o c k e t . h >  \n  
0000100   #   i   n   c   l   u   d   e       < s y s / i o 0000120 c t l . h >  \n   #   i   n   c   l   u   d   e      
0000140   < n e t / i f . h >  \n   #   i   n   c   l  
0000160   u   d   e       < s t d i o . h >  \n   #   i  
0000200   n   c   l   u   d   e       < n e t i n e t / 0000220 i n . h >  \n   #   i   n   c   l   u   d   e       < 0000240 a r p a / i n e t . h >  \n  \n   i   n  
0000260   t 302 240   m   a   i   n   (   )  \n   {  \n   i   n   t 302  
0000300 240   i   =   0   ;  \n   i   n   t 302 240   s   o   c   k   f  
0000320   d   ;  \n   s   t   r   u   c   t 302 240   i   f   c   o   n  
0000340   f       i   f   c   o   n   f   ;  \n   u   n   s   i   g   n  
0000360   e   d 302 240   c   h   a   r 302 240   b   u   f   [   5   1  
0000400   2   ]   ;  \n   s   t   r   u   c   t 302 240   i   f   r   e  
0000420   q       *   i   f   r   e   q   ;  \n   /   / 345 210 235 345  
0000440 247 213 345 214 226   i   f   c   o   n   f  \n   i   f   c   o  
0000460   n   f   .   i   f   c   _   l   e   n       =   5   1   2   ;  
0000500  \n   i   f   c   o   n   f   .   i   f   c   _   b   u   f      
0000520   =       b   u   f   ;  \n   i   f 302 240   (   (   s   o   c  
0000540   k   f   d       =       s   o   c   k   e   t   (   A   F   _  
0000560   I   N   E   T   ,   S   O   C   K   _   D   G   R   A   M   ,  
0000600   0   )   )   < 0 ) \n { \n p e r r o r ( 0000620 " s o c k e t " ) ; \n e x i t ( 0000640 1 ) ; \n } \n i o c t l ( s o c k 0000660 f d , S I O C G I F C O N F , & 0000700 i f c o n f ) ; 302 240 / / 350 216 267 345 0000720 217 226 346 211 200 346 234 211 346 216 245 345 217 243 344 277 0000740 241 346 201 257 \n / / 346 216 245 344 270 213 346 235 245 0000760 344 270 200 344 270 252 344 270 200 344 270 252 347 232 204 350 0001000 216 267 345 217 226 I P 345 234 260 345 235 200 \n i f 0001020 r e q = ( s t r u c t 302 240 i f r 0001040 e q * ) b u f ; \n f o r 302 240 ( i 0001060 = ( i f c o n f . i f c _ l e n 0001100 / s i z e o f 302 240 ( s t r u c t 0001120 302 240 i f r e q ) ) ; i >   0   ;      
0001140   i   -   -   )  \n   {  \n   /   /       i   f   (   i   f   r  
0001160   e   q   -   >   i   f   r   _   f   l   a   g   s       =   =  
0001200       A   F   _   I   N   E   T   )   {       /   /   f   o   r  
0001220       i   p   v   4  \n   p   r   i   n   t   f   (   "   n   a  
0001240   m   e       =       %   s       \   n   "   ,       i   f   r  
0001260   e   q   -   >   i   f   r   _   n   a   m   e   )   ;  \n   p  
0001300   r   i   n   t   f   (   "   l   o   c   a   l       a   d   d  
0001320   r       =       %   s       \   n   "   ,   i   n   e   t   _  
0001340   n   t   o   a   (   (   (   s   t   r   u   c   t 302 240   s  
0001360   o   c   k   a   d   d   r   _   i   n   *   )   &   (   i   f  
0001400   r   e   q   -   >   i   f   r   _   a   d   d   r   )   )   -  
0001420   >   s   i   n   _   a   d   d   r   )   )   ;  \n   i   f   r  
0001440   e   q   +   +   ;  \n   /   /       }  \n   }  \n   r   e   t  
0001460   u   r   n 302 240   0   ;  \n   }  \n  \n  
0001473

这样我们就可以看到游离的’\200′ ‘\240’ 等在哪了。