Jenkins构建Host key verification failed. lost connection
由于新购买了服务器,并且要将jar包cp到新购买的服务器上,涉及到前任运维交接问题,这块一直没有了解。
前言:
最近在开发项目的过程中遇到了一些坑(也可能不是坑,是自己没弄过导致折腾了很久),我们项目中遇到有用到一些第三方的库,有些第三方库可能不支持openjdk,只支出jdk,所以就要更换一下jdk,然后服务器又是之前的前同事配置的,这时候我把服务器的jdk版本从原来的openjdk1.7换成了官方的jdk1.8之后项目启不起来了,提示 “Unable to find Java” ,????,这个时候问了问chatGPT 它也没给合适的答案,就百度继续找看了一篇文章 说是跟软链接有关,然后一拍脑袋试了试,结果还真是没加软连接,加了之后重启一切正常。
正文:
系统环境:
Centos 7.5,Jdk1.8
解决办法:
将java 链接到/sbin 文件夹下
ln -s /usr/java/jdk/bin/java /sbin/java
然后再重启一切正常,问题解决。
为了方便我们开发,经常会有需求就是将第三方的jar包发布到我们自己的nexus私服上;具体可有两种方式实现:1、通过命令进行上传;2、通过nexus管理端页面操作上传。本文就以这两种方式分别做介绍。
mvn install:install-file -DgroupId=com.xxx-DartifactId=xxx.pdf -Dversion=2.1.1 -Dpackaging=jar -Dfile=xxx-2.1.1.jar
mvn install:install-file "-DgroupId=com.xxx" "-DartifactId=xxx.pdf" "-Dversion=2.1.1" "-Dpackaging=jar" "-Dfile=xxx-2.1.1.jar"
mvn deploy:deploy-file "-DgroupId=com.xxx" "-DartifactId=xxx.pdf" "-Dversion=2.1.1" "-Dpackaging=jar" "-Dfile=xxx-2.1.1.jar" -Durl=http://10.188.0.26:8081/repository/maven-releases/ -DrepositoryId=maven-public
DgroupId、DartifactId、Dversion:构成了该jar包在pom.xml的坐标,自己起名字也是可以的.
Dpackaging:表示打包类型.
Dfile:表示需要上传的jar包的绝对路径.
Durl:私服上第三方仓库的地址,打开nexus——>repositories菜单,可以看到该路径。
DrepositoryId:服务器的表示id,就是我们在setting.xml文件中配置的serverId。
https://blog.csdn.net/weixin_37848710/article/details/125915741
1 2 3 projectName="你的项目名" 4 5 #提醒功能 6 help() { 7 echo "help: sh ${projectName}.sh [start|stop|restart]" 8 exit 1 9 } 10 11 #判断项目是否运行,并且返回对应数字(0 为未启动 1为启动) 12 is_exist(){ 13 #获取pid的方式,个人喜欢咋写就咋写 14 pid=`ps -ef|grep ${projectName}.jar|grep -v grep|awk '{print $2}'` 15 if [ -z "${pid}" ] 16 then 17 return 0 18 else 19 return 1 20 fi 21 } 22 23 #开始运行项目 24 start(){ 25 is_exist 26 #如果正在运行直接提示 27 if [ $? -eq 1 ] 28 then 29 echo "${projectName} is running" 30 exit 0; 31 else 32 #没有运行则运行项目 33 echo "start running ${projectName} ..." 34 currentPath=`pwd` 35 startPath=$(cd `dirname $0`;pwd) 36 #这里写的比较简单,实际生产环境,需要配置参数 37 cd ${startPath} 38 nohup java -jar -server ${projectName}.jar --spring.profiles.active=test > ${currentPath}/run.log 2>&1 & 39 cd ${currentPath} 40 fi 41 } 42 43 #停止项目 44 stop(){ 45 echo "stop $projectName ..." 46 is_exist 47 if [ $? -eq 1 ] 48 then 49 #通过pid关闭 50 kill -9 $pid 51 echo "[ok]" 52 else 53 echo "[ok]" 54 fi 55 } 56 57 # 选择运行方式 58 case "$1" in 59 start) 60 start 61 ;; 62 stop) 63 stop 64 ;; 65 restart) 66 stop 67 start 68 ;; 69 *) 70 help 71 ;; 72 esac
前言
由于之前ubuntu自动安装的mongodb版本太低,不支持外部查看。
所以需要装最新版
安装最新的官方地址:https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-ubuntu/#uninstall-mongodb-community-edition
sudo systemctl restart mongod
sudo systemctl status mongod
cat /var/log/mongodb/mongod.log
mkdir -p /data/db#新增数据库
sudo chmod a+w /data/db#给数据库权限
配置文件地址:/etc/mongod.conf
日志文件地址:/var/log/mongodb/mongod.log(可以去配置文件去修改,看看启动日志什么的~~·)
如果启动有下面的报错信息:Cannot start server with an unknown storage engine
如果以前装过删除db下所有的文件即可,因为老版本的存储引擎和新版本的存储引擎不一样
----------------------------------------------------------------------------------------------------------------------------------------
2022.10.12更新
数据库被黑客工具了,大无语,要提高安全性
All your data is a backed up. You must pay 0.05 BTC to 12KDdVSHvaB46gGTS7pDiBACyWtx5pv5Hs 48 hours for recover it. After 48 hours expiration we will leaked and exposed all your data. In case of refusal to pay, we will contact the General Data Protection Regulation, GDPR and notify them that you store user data in an open form and is not safe. Under the rules of the law, you face a heavy fine or arrest and your base dump will be dropped from our server! You can buy bitcoin here, does not take much time to buy https://localbitcoins.com or https://buy.moonpay.io/ After paying write to me in the mail with your DB IP: rambler+1jn5p@onionmail.org and/or mariadb@mailnesia.com and you will receive a link to download your database dump.
腾讯云给出的建议:
1)为MongoDB添加认证:MongoDB 启动时添加–auth参数、为MongoDB添加用户认证;
2)MongoDB 自身带有一个HTTP服务和并支持REST接口,在2.6以后这些接口默认是关闭的。MongoDB默认会使用默认端口监听web服务,一般不需要通过web方式进行远程管理,建议禁用。可以修改配置文件设置 nohttpinterface=false
或在启动的时候选择参数 --nohttpinterface。
3)使用云控制台安全组防火墙或本地系统防火墙对访问源IP进行控制,如果仅对内网服务器提供服务,建议勿将 MongoDB服务发布到互联网上。
4)启动时加入参数 --bind_ip 127.0.0.1 或在 /etc/mongodb.conf 文件中添加以下内容:bind_ip = 127.0.0.1,只允许本地访问。
upstream www.xxxxxx.com {
server localhost:9041;
}
#配置80端口重定向443端口
server {
listen 80;
server_name www.xxxxxx.com;#域名
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name www.xxxxxx.com;
ssl on; #如果强制HTTPs访问,这行要打开
ssl_certificate /ssl/1_www.xxxxxx.com_bundle.crt;
ssl_certificate_key /ssl/2_www.xxxxxx.com.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
# 指定密码为openssl支持的格式
ssl_protocols SSLv2 SSLv3 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5; # 密码加密方式
ssl_prefer_server_ciphers on; # 依赖SSLv3和TLSv1协议的服务器密码将优先于客户端密码
root /home/web/website/web;
#关键代码
location ~ .php$ {
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/run/php/php5.6-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location / {
index index.php index.html;
}
location ^~ /api/ {
proxy_pass http://www.xxxxxx.com;
client_max_body_size 1024m; #允许客户端请求的最大单文件字节数,人话:能上传多大文件
client_body_buffer_size 6m; #缓冲区代理缓冲用户端请求的最大字节数,人话:一次能接受多
proxy_connect_timeout 600; #nginx跟后端服务器连接超时时间(代理连接超时),这个看需求
proxy_read_timeout 600; #连接成功后,后端服务器响应时间(代理接收超时),这个 同上
rewrite "^/api/(.*)$" /$1 break;
}
}
关键词:nginx,php,ubuntu,linux
1、下载
1 2 | wget http: //cn2.php.net/distributions/php-7.0.30.tar.gz 解压 tar -zxvf php-7.0.30.tar.gz |
2、下载安装依赖
1 | yum -y install gcc openssl openssl-devel curl curl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel pcre pcre-devel libxslt libxslt-devel bzip2 bzip2-devel |
3、编译安装php
1 2 3 4 5 6 7 8 9 10 | ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-pdo-mysql --with-mysqli --with-gd --with-zlib --with-mcrypt --enable-fpm make && make install 安装完成后,别忘记 make test 有如下报错 configure: error: mcrypt.h not found. Please reinstall libmcrypt. 解决 yum install -y epel-release yum install -y libmcrypt-devel 重新编译 |
4、配置PHP相关文件
1 2 3 4 5 6 7 8 | 1)配置php.ini,这是php的配置文件: cp /etc/we/php-7.1.11/php.ini-development /usr/local/php/lib/php.ini 2)配置php-fpm.conf,这是php-fpm配置文件: cp /usr/local/php/etc/php-fpm.conf. default /usr/local/php/etc/php-fpm.conf 3)配置www.conf,配置用户的文件: cp etc/php-fpm.d/www.conf. default etc/php-fpm.d/www.conf 4)将php-fpm启动文件复制到init.d文件夹中一份方便启动php: cp /usr/local/php/sbin/php-fpm /etc/init.d/php-fpm |
5、启动php,确定是否安装成功
执行命令/etc/init.d/php-fpm即可
查看是否启动:ps -ef |grep php
关键词:php,linux
话不多说直接代码
server {
listen 80;
server_name www.xxxxx.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name www.xxxxx.com;
......
}
就这样配置就可以
详解一下
listen 80; - 使用端口80,服务器将侦听指定域名的所有传入连接。
server_name www.xxxxx.com - 它指定域名。因此,将其替换为您要重定向的网站域名。
return 301 https://$server_name$request_uri; - 将流量移至该站点的HTTPS版本。$request_uri变量用于完整的原始请求URI,其中也包含参数。
其他的已经不需要解释了吧,443代表监听https 请求。
#解压 tar -txvf nacos-server-2.0.2.tar.gz
配置conf 文件夹下 application.properties
spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://xxx.xxx.xxx.xx:3306/nacos_config?characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&serverTimezone=UTC db.user=root db.password=xxxxxx
单机启动
bash -f ./startup.sh -m standalone
查看启动日志
cat /你的目录/nacos/logs/start.out
ps:如果报:No DataSource set,就检查数据库连接是否正常,还有导入配置文件里面的数据库文件。
-----------------------------------------------------------------------------END----------------------------------------------------------------------------------
我们都是搬运工,CV工程师.
这里踩了一些坑,如果用系统自带的源去安装mongodb,安装出来的是2.4版本左右的,外部连接工具已经不支持3.0版本已下的连接了,所以就需要找高版本的去安装。
首先先来个什么事MangoDB的简单定义:
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
请注意,似乎MongoDB不太怎么有32bit的版本,所以请优先选择64bit的版本吧
首先到MongoDB的官网,寻找自己想要版本的MangoDB链接,替换一下如下的指令,直接在终端中执行就好了。
#创建一个目录放下载的mongodb文件 curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz #解压 tar -zxvf mongodb-linux-x86_64-3.0.6.tgz #将解压包拷贝到指定目录进行安装 sudo mv mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb
然后将MongoDB的安装目录添加到Path当中
#编辑 vi /etc/profile #最后一行增加环境变量 export PATH=/usr/local/mongodb/bin:$PATH #刷新配置 source /etc/progile
启动数据库,首先我使用的不是他的默认地址,所以需要手工创建一个目录并且指定位置,如果下面语句执行没问题,就证明已经服务ok了
根据自己使用的角色来创建数据文件,我用的root用户,然后是在/root/data/db
#启动 mongod --dbpath ~/data/db&
隔天补充:
上面这个启动会有点问题,隔天服务就自动关了
然后又网上找了些解决办法
mongod --dbpath ~/data/db --logpath=/usr/local/mongodb/run.log --fork
启动完成看到:waiting for connections on port 27017,基本就可以确定是成功了!
#连接mongo,进去玩一玩
mongo
这个时候如果你服务器安全组已经把27017端口打开,那么你就可以用远程连接工具去连接你这个数据库了。
连接成功后,就可以自己在工具里面创建角色和数据库等等操作。。
---------------------------------------------------------------------------------------END---------------------------------------------------------------------------------------------
我们都是搬运工,CV工程师。
解决方法:
1、先用ubuntu账号登录,执行sudo passwd root 2、设置新密码,输入密码,请牢记。 3、执行sudo vi /etc/ssh/sshd_config 4、找到PermitRootLogin without-password这一行,把后面的without-password改为yes,取消注释,保存文件。 5、执行sudo service ssh restart
现在就可以用root账号登录了。
----------结束----------
我们都是搬砖工,CV工程师!
1. 在Ubuntu下最傻瓜的步骤(以下都在root用户下进行操作):
MongoDB安装很简单,无需下载源文件,可以直接用apt-get命令进行安装。
打开终端,输入以下命令:
sudo apt-get install mongodb
2.这时装好以后应该会自动运行mongod程序,通过"pgrep mongo -l "查看进程是否已经启动
3.在终端输入"mongo",然后回车进入数据库
4、创建一个超级管理员root:db.createUser({user: "root",pwd: "root123", roles: [ { role: "root", db: "admin" } ]})
老版本:root:db.addUser({user: "root",pwd: "root123!", roles: [ { role: "root", db: "admin" } ]})
角色:root。root角色用于关闭数据库
5、验证用户是否添加成功
db.auth("root", "root123") #如果返回1,则表示成功。
6、修改默认端口和希望外网访问
vim /etc/mongod.conf
或者
vim /etc/mongodb.conf
修改配置文件
vim下按字母 i 输入进行文件修改。
修改端口:修改port:27017如修改成port: 28017
外网访问:
①直接注释掉bindIp:127.0.0.1,例:#bindIp:127.0.0.1
②有的版本注释不起作用,可以修改为bindIp:0.0.0.0
修改完成按esc,再按Shift+:,然后输入“wq”,保存文件并退出,然后重启服务
开启服务
sudo service mongodb start
停止服务
sudo service mongodb stop
重启服务
sudo service mongodb restart
使用“mongo --port 28017”进入mongo shell
----------结束----------
我们都是搬砖工,CV工程师!
目前支持两种安装方式,一种是apt-get的方式,另一种是根据包安装的方式
为方便我统一使用root用户
# 切换至root用户 sudo su root apt-get install nginx
查看nginx是否安装成功
nginx -v
启动nginx
service nginx start
nginx文件安装完成之后的文件位置:
卸载apt-get安装的nginx
# 彻底卸载nginx apt-get --purge autoremove nginx #查看nginx的版本号 nginx -v
需要连接互联网,然后执行sudo apt-get update更新软件包
sudo apt-get install redis-server 执行后如下图所示,我们输入y 确认安装并使用空间
接下来会执行完成,我们可以看到包括redis的版本信息等,执行service redis status 可以查看redis服务的状态为running,说明安装完成系统自动启动了服务
找到/et/redis/redis.conf文件修改如下 ,注释掉 127.0.0.1 #bind 127.0.0.1,如果不需要远程连接redis则不需要这个操作
找到/et/redis/redis.conf文件修改如下 ,添加 requirepass kingredis(密码设置为kingredis)
步骤三的操作完成后,重启redis服务需要,接下来我们来测试
启动: sudo service redis start
停止: sudo service redis stop
重启: sudo service redis restart
执行redis-cli命令打开redis客户端 set操作的时候要求我输入密码,说明密码设置成功,执行auth 密码验证密码后,可以执行set操作
在本地window打开一个客户端 ,cd到redis安装的目录,主要是要有redis-cli.exe的目录输入 redis-cli -h redis服务器IP -p redis服务端口号(默认6379)
如上图所示,访问远程redis服务成功,操作redis成功,说明我们远程的redis安装切配置安全密码成功了
参考:https://www.cnblogs.com/wxjnew/p/9189191.html
这里是Ubuntu 18.04的mysql安装教程,ubuntu低版本或其他非Debian的Linux发行版可能不适用。
sudo apt-get install mysql-server
sudo apt-get install mysql-client
sudo apt-get install libmysqlclient-dev
这里我安装完了没有提示设置密码或其他配置项的步骤,所以有需要的话可以看下一步更改默认密码。
sudo cat /etc/mysql/debian.cnf
结果如下:
图有‘user=debian-sys-maint’,即为自动配置的默认用户;‘password=ol9uVJAxu9L1AzOa’,即为自动配置的密码。
mysql -u debian-sys-maint -p // 用户名以自己的配置文件为准
提示输入密码,这里要输入的就是上一步的‘password=ol9uVJAxu9L1AzOa’(密码以自己的配置文件为准)。
use mysql;
update user set password=password("test") where user='root';
flush privileges;
quit;
sudo service mysql restart
mysql -u root -p
输入新密码:yourpassword
如果需要外网可以连,就需要改一下连接地址,不然会报10061错误!
mysql 10061错误为配置原因 第一步: 先查看mysql运行状态 netstat -ntlp | grep -v tcp6; //查看端口状态 mysql -V; //查看mysql版本号 find / -name mysqld.cnf; // 查找mysqld.cnf 的位置 如果端口为127.0.0.1:3306,解决办法 mysql5.7 版本: vi /etc/mysql/mysql.conf.d/mysqld.cnf; //将bind-address = 127.0.0.1 修改成 bind-address = 0.0.0.0 mysql5.7以前的版本: vi /etc/mysql/my.cnf; //将bind-address = 127.0.0.1 修改成 bind-address = 0.0.0.0 ,或注释掉即可 service mysql restart; //重启mysql netstat -ntlp | grep -v tcp6; //查看端口状态为0.0.0.0:3306即可
作者:Panda
链接:http://siye1982.github.io/2016/02/25/linux-list/
虽然平时大部分工作都是和Java相关的开发, 但是每天都会接触Linux系统, 尤其是使用了Mac之后, 每天都是工作在黑色背景的命令行环境中. 自己记忆力不好, 很多有用的Linux命令不能很好的记忆, 现在逐渐总结一下, 以便后续查看。
# 关机
shutdown -h now
# 重启
shutdown -r now
# 查看系统内核信息
uname -a
# 查看系统内核版本
cat /proc/version
# 查看当前用户环境变量
env
cat /proc/cpuinfo
# 查看有几个逻辑cpu, 包括cpu型号
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
# 查看有几颗cpu,每颗分别是几核
cat /proc/cpuinfo | grep physical | uniq -c
# 查看当前CPU运行在32bit还是64bit模式下, 如果是运行在32bit下也不代表CPU不支持64bit
getconf LONG_BIT
# 结果大于0, 说明支持64bit计算. lm指long mode, 支持lm则是64bit
cat /proc/cpuinfo | grep flags | grep ' lm ' | wc -l
ln -s /usr/local/jdk1.8/ jdk
# 查看是否通过rpm安装了该软件
rpm -qa | grep 软件名
# 创建sshkey
ssh-keygen -t rsa -C your_email@example.com
#id_rsa.pub 的内容拷贝到要控制的服务器的 home/username/.ssh/authorized_keys 中,如果没有则新建(.ssh权限为700, authorized_keys权限为600)
# 在各个用户的.bash_profile中添加重命名配置
alias ll='ls -alF'
sudo ntpdate -u ntp.api.bz
# 后台运行,并且有nohup.out输出
nohup xxx &
# 后台运行, 不输出任何日志
nohup xxx > /dev/null &
# 后台运行, 并将错误信息做标准输出到日志中
nohup xxx >out.log 2>&1 &
# 命令来完成强制活动用户退出.其中TTY表示终端名称
pkill -kill -t [TTY]
which <命令>
ulimit -n
vim /etc/resolv.conf
nslookup google.com
# 最近登录的5个账号
last -n 5
ifconfig em1 192.168.5.177 netmask 255.255.255.0
# 也可以去 cd /proc 目录下, 查看进程内存中加载的东西
ps eww -p XXXXX(进程号)
ps auwxf
cd /proc/xxx(进程号)
ls -all
# cwd对应的是启动路径
# 新增用户
useradd 用户名
passwd 用户名
#增加sudo权限
vim /etc/sudoers
# 修改文件里面的
# root ALL=(ALL) ALL
# 用户名 ALL=(ALL) ALL
ps aux|grep xxx | grep -v grep | awk '{print $2}' | xargs kill -9
#normal模式下 g表示全局, x表示查找的内容, y表示替换后的内容
:%s/x/y/g
#normal模式下
0 # 光标移到行首(数字0)
$ # 光标移至行尾
shift + g # 跳到文件最后
gg # 跳到文件头
# 显示行号
:set nu
# 去除行号
:set nonu
# 检索
/xxx(检索内容) # 从头检索, 按n查找下一个
?xxx(检索内容) # 从尾部检索
# 在normal模式下
:w !sudo tee %
# 查看磁盘挂载情况
mount
# 查看磁盘分区信息
df
# 查看目录及子目录大小
du -H -h
# 查看当前目录下各个文件, 文件夹占了多少空间, 不会递归
du -sh *
# 查看文件里有多少行
wc -l filename
# 看文件里有多少个word
wc -w filename
# 文件里最长的那一行是多少个字
wc -L filename
# 统计字节数
wc -c
tar czvf xxx.tar 压缩目录
zip -r xxx.zip 压缩目录
tar zxvf xxx.tar
# 解压到指定文件夹
tar zxvf xxx.tar -C /xxx/yyy/
unzip xxx.zip
chown eagleye.eagleye xxx.log
#复制
cp xxx.log
# 复制并强制覆盖同名文件
cp -f xxx.log
# 复制文件夹
cp -r xxx(源文件夹) yyy(目标文件夹)
# 远程复制
scp -P ssh端口 username@10.10.10.101:/home/username/xxx /home/xxx
# 级联创建目录
mkdir -p /xxx/yyy/zzz
# 批量创建文件夹, 会在test,main下都创建java, resources文件夹
mkdir -p src/{test,main}/{java,resources}
diff -u 1.txt 2.txt
# 如果做性能测试, 可以每执行一次, 往日志里面输出 “.” , 这样日志中的字节数就是实际的性能测试运行的次数, 还可以看见实时速率.
tail -f xxx.log | pv -bt
# 查看特殊字符
cat -v xxx.sh
# 去除特殊字符
sed -i 's/^M//g’ env.sh 去除文件的特殊字符, 比如^M: 需要这样输入: ctrl+v+enter
# 可以转换为该系统下的文件格式
cat file.sh > file.sh_bak
# 先将file.sh中文件内容复制下来然后运行, 然后粘贴内容, 最后ctrl + d 保存退出
cat > file1.sh
# 在vim中通过如下设置文件编码和文件格式
:set fileencodings=utf-8 ,然后 w (存盘)一下即可转化为 utf8 格式,
:set fileformat=unix
# 在mac下使用dos2unix进行文件格式化
find . -name "*.sh" | xargs dos2unix
awk ‘{print $0}’ xxx.log | tee test.log
# 反向匹配, 查找不包含xxx的内容
grep -v xxx
# 排除所有空行
grep -v '^/pre>
# 返回结果 2,则说明第二行是空行
grep -n “^$” 111.txt
# 查询以abc开头的行
grep -n “^abc” 111.txt
# 同时列出该词语出现在文章的第几行
grep 'xxx' -n xxx.log
# 计算一下该字串出现的次数
grep 'xxx' -c xxx.log
# 比对的时候,不计较大小写的不同
grep 'xxx' -i xxx.log
# 以':' 为分隔符,如果第五域有user则输出该行
awk -F ':' '{if ($5 ~ /user/) print $0}' /etc/passwd
# 统计单个文件中某个字符(串)(中文无效)出现的次数
awk -v RS='character' 'END {print --NR}' xxx.txt
# 在目录下找后缀是.mysql的文件
find /home/eagleye -name '*.mysql' -print
# 会从 /usr 目录开始往下找,找最近3天之内存取过的文件。
find /usr -atime 3 –print
# 会从 /usr 目录开始往下找,找最近5天之内修改过的文件。
find /usr -ctime 5 –print
# 会从 /doc 目录开始往下找,找jacky 的、文件名开头是 j的文件。
find /doc -user jacky -name 'j*' –print
# 会从 /doc 目录开始往下找,找寻文件名是 ja 开头或者 ma开头的文件。
find /doc \( -name 'ja*' -o- -name 'ma*' \) –print
# 会从 /doc 目录开始往下找,找到凡是文件名结尾为 bak的文件,把它删除掉。-exec 选项是执行的意思,rm 是删除命令,{ } 表示文件名,“\;”是规定的命令结尾。
find /doc -name '*bak' -exec rm {} \;
lsof -i:por
/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"
# 查看iptables状态
service iptables status
# 要封停一个ip
iptables -I INPUT -s ***.***.***.*** -j DROP
# 要解封一个IP,使用下面这条命令:
iptables -D INPUT -s ***.***.***.*** -j DROP
备注: 参数-I是表示Insert(添加),-D表示Delete(删除)。后面跟的是规则,INPUT表示入站,***.***.***.***表示要封停的IP,DROP表示放弃连接。
#开启9090端口的访问
/sbin/iptables -I INPUT -p tcp --dport 9090 -j ACCEPT
# 防火墙开启、关闭、重启
/etc/init.d/iptables status
/etc/init.d/iptables start
/etc/init.d/iptables stop
/etc/init.d/iptables restart
#给某一个endpoint发送TCP请求,就将data的内容发送到对端
nc 192.168.0.11 8000 < data.txt
#nc可以当做服务器,监听某个端口号,把某一次请求的内容存储到received_data里
nc -l 8000 > received_data
#上边只监听一次,如果多次可以加上-k参数
nc -lk 8000
# dump出本机12301端口的tcp包
tcpdump -i em1 tcp port 12301 -s 1500 -w abc.pcap
# traceroute默认使用udp方式, 如果是-I则改成icmp方式
traceroute -I www.163.com
# 从ttl第3跳跟踪
traceroute -M 3 www.163.com
# 加上端口跟踪
traceroute -p 8080 192.168.10.11
ss
# 显示本地打开的所有端口
ss -l
# 显示每个进程具体打开的socket
ss -pl
# 显示所有tcp socket
ss -t -a
# 显示所有的UDP Socekt
ss -u -a
# 显示所有已建立的SMTP连接
ss -o state established '( dport = :smtp or sport = :smtp )'
# 显示所有已建立的HTTP连接
ss -o state established '( dport = :http or sport = :http )'
#找出所有连接X服务器的进程
ss -x src /tmp/.X11-unix/*
#列出当前socket统计信息
ss -s
解释:netstat是遍历/proc下面每个PID目录,ss直接读/proc/net下面的统计信息。所以ss执行的时候消耗资源以及消耗的时间都比netstat少很多
# 输出每个ip的连接数,以及总的各个状态的连接数
netstat -n | awk '/^tcp/ {n=split($(NF-1),array,":");if(n<=2)++S[array[(1)]];else++S[array[(4)]];++s[$NF];++N} END {for(a in S){printf("%-20s %s\n", a, S[a]);++I}printf("%-20s %s\n","TOTAL_IP",I);for(a in s) printf("%-20s %s\n",a, s[a]);printf("%-20s %s\n","TOTAL_LINK",N);}'
# 统计所有连接状态,
# CLOSED:无连接是活动的或正在进行
# LISTEN:服务器在等待进入呼叫
# SYN_RECV:一个连接请求已经到达,等待确认
# SYN_SENT:应用已经开始,打开一个连接
# ESTABLISHED:正常数据传输状态
# FIN_WAIT1:应用说它已经完成
# FIN_WAIT2:另一边已同意释放
# ITMED_WAIT:等待所有分组死掉
# CLOSING:两边同时尝试关闭
# TIME_WAIT:主动关闭连接一端还没有等到另一端反馈期间的状态
# LAST_ACK:等待所有分组死掉
netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'
# 查找较多time_wait连接
netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20
按大写的 F 或 O 键,然后按 a-z 可以将进程按照相应的列进行排序, 然后回车。而大写的 R 键可以将当前的排序倒转。每天学一个 Linux 命令(48):top
PID 进程id
PPID 父进程id
RUSER Real user name
UID 进程所有者的用户id
USER 进程所有者的用户名
GROUP 进程所有者的组名
TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
PR 优先级
NI nice值。负值表示高优先级,正值表示低优先级
P 最后使用的CPU,仅在多CPU环境下有意义
%CPU 上次更新到现在的CPU时间占用百分比
TIME 进程使用的CPU时间总计,单位秒
TIME+ 进程使用的CPU时间总计,单位1/100秒
%MEM 进程使用的物理内存百分比
VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
CODE 可执行代码占用的物理内存大小,单位kb
DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
SHR 共享内存大小,单位kb
nFLT 页面错误次数
nDRT 最后一次写入到现在,被修改过的页面数。
S 进程状态。D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程
COMMAND 命令名/命令行
WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
Flags 任务标志,参考 sched.h
dmesg
iostat -xz 1
# r/s, w/s, rkB/s, wkB/s:分别表示每秒读写次数和每秒读写数据量(千字节)。读写量过大,可能会引起性能问题。
# await:IO操作的平均等待时间,单位是毫秒。这是应用程序在和磁盘交互时,需要消耗的时间,包括IO等待和实际操作的耗时。如果这个数值过大,可能是硬件设备遇到了瓶颈或者出现故障。
# avgqu-sz:向设备发出的请求平均数量。如果这个数值大于1,可能是硬件设备已经饱和(部分前端硬件设备支持并行写入)。
# %util:设备利用率。这个数值表示设备的繁忙程度,经验值是如果超过60,可能会影响IO性能(可以参照IO操作平均等待时间)。如果到达100%,说明硬件设备已经饱和。
# 如果显示的是逻辑设备的数据,那么设备利用率不代表后端实际的硬件设备已经饱和。值得注意的是,即使IO性能不理想,也不一定意味这应用程序性能会不好,可以利用诸如预读取、写缓存等策略提升应用性能。
free -m
eg:
total used free shared buffers cached
Mem: 1002 769 232 0 62 421
-/+ buffers/cache: 286 715
Swap: 1153 0 1153
第一部分Mem行:
total 内存总数: 1002M
used 已经使用的内存数: 769M
free 空闲的内存数: 232M
shared 当前已经废弃不用,总是0
buffers Buffer 缓存内存数: 62M
cached Page 缓存内存数:421M
关系:total(1002M) = used(769M) + free(232M)
第二部分(-/+ buffers/cache):
(-buffers/cache) used内存数:286M (指的第一部分Mem行中的used – buffers – cached)
(+buffers/cache) free内存数: 715M (指的第一部分Mem行中的free + buffers + cached)
可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数.
第三部分是指交换分区
# sar命令在这里可以查看网络设备的吞吐率。在排查性能问题时,可以通过网络设备的吞吐量,判断网络设备是否已经饱和。
sar -n DEV 1
#
# sar命令在这里用于查看TCP连接状态,其中包括:
# active/s:每秒本地发起的TCP连接数,既通过connect调用创建的TCP连接;
# passive/s:每秒远程发起的TCP连接数,即通过accept调用创建的TCP连接;
# retrans/s:每秒TCP重传数量;
# TCP连接数可以用来判断性能问题是否由于建立了过多的连接,进一步可以判断是主动发起的连接,还是被动接受的连接。TCP重传可能是因为网络环境恶劣,或者服务器压力过大导致丢包
sar -n TCP,ETCP 1
# 2表示每2秒采集一次状态信息, 1表示只采集一次(忽略既是一直采集)
vmstat 2 1
eg:
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 0 3499840 315836 3819660 0 0 0 1 2 0 0 0 100 0
0 0 0 3499584 315836 3819660 0 0 0 0 88 158 0 0 100 0
0 0 0 3499708 315836 3819660 0 0 0 2 86 162 0 0 100 0
0 0 0 3499708 315836 3819660 0 0 0 10 81 151 0 0 100 0
1 0 0 3499732 315836 3819660 0 0 0 2 83 154 0 0 100 0
--- EOF ---
$ docker pull nginx:latest
运行如下命令来启动nginx container
docker run --detach \ --name wx-nginx \ -p 443:443\ -p 80:80 \ -v /home/nginx/data:/usr/share/nginx/html:rw\ -v /home/nginx/config/nginx.conf:/etc/nginx/nginx.conf/:rw\ -v /home/nginx/config/conf.d/default.conf:/etc/nginx/conf.d/default.conf:rw\ -v /home/nginx/logs:/var/log/nginx/:rw\ -v /home/nginx/ssl:/ssl/:rw\ -d nginx
这里需要准备如下几个文件,
#运行nginx的用户 user nginx; #启动进程设置成和CPU数量相等 worker_processes 1; #全局错误日志及PID文件的位置 error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; #工作模式及连接数上限 events { #单个后台work进程最大并发数设置为1024 worker_connections 1024; } http { #设定mime类型 include /etc/nginx/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"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; #设置连接超时的事件 keepalive_timeout 65; #开启GZIP压缩 #gzip on; include /etc/nginx/conf.d/*.conf; }
可以看到最后一行还要包含另一个配置文件conf.d/default.conf,用来配置server字段
server { listen 80; #侦听80端口,如果强制所有的访问都必须是HTTPs的,这行需要注销掉 server_name www.buagengen.com; #域名 #charset koi8-r; #access_log /var/log/nginx/host.access.log main; # 定义首页索引目录和名称 location / { root /usr/share/nginx/html; index index.html index.htm; } #定义错误提示页面 #error_page 404 /404.html; #重定向错误页面到 /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
这个时候直接通过IP地址就可以访问nginx定义的这个html文件了。但是这个时候的访问只是http的,https的访问还是不行的,需要添加证书到nginx服务器。
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
然后需要输入如下的信息,大概填一下就可以了,反正是测试用的
Country Name (2 letter code) [AU]: 国家名称 State or Province Name (full name) [Some-State]: 省 Locality Name (eg, city) []: 城市 Organization Name (eg, company) [Internet Widgits Pty Ltd]: 公司名 Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []: 网站域名 Email Address []: 邮箱 Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: 这里要求输入密码 An optional company name []:
openssl rsa -in server.key -out server_nopwd.key
openssl x509 -req -days 365 -in server.csr -signkey server_nopwd.key -out server.crt
完成这一步之后就得到了我们需要的证书文件和私钥了
把前面一步生成的文件拷贝到host上的ssl目录,/home/evan/workspace/wxserver/nginx/ssl。
然后修改配置文件default.conf,添加ssl支持
server { listen 80; #侦听80端口,如果强制所有的访问都必须是HTTPs的,这行需要注销掉 listen 443 ssl; server_name www.buagengen.com; #域名 # 增加ssl #ssl on; #如果强制HTTPs访问,这行要打开 ssl_certificate /ssl/server.crt; ssl_certificate_key /ssl/server.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; # 指定密码为openssl支持的格式 ssl_protocols SSLv2 SSLv3 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; # 密码加密方式 ssl_prefer_server_ciphers on; # 依赖SSLv3和TLSv1协议的服务器密码将优先于客户端密码 # 定义首页索引目录和名称 location / { root /usr/share/nginx/html; index index.html index.htm; } #重定向错误页面到 /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
重启nginx容器,现在就可以通过https来访问nginx的服务器了。
这里有个重点,证书的目录必须在 /ssl 下面,其他目录启动可能会报找不到在证书的错误!
[emerg] 1#1: cannot load certificate "/home/nginx/ssl/1_hxt.yszku.com_bundle.crt": BIO_new_file() failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/home/nginx/ssl/1_hxt.yszku.com_bundle.crt','r') error:2006D080:BIO routines:BIO_new_file:no such file)
报上面这个错误 “cannot load certificate”,就把证书移到/ssl目录即可,无论是自己生成的证书,还是阿里云/腾讯云生成的证书.
1、拉取镜像
docker pull nacos/nacos-server
2、挂载目录
mkdir -p /mydata/nacos/logs/ #新建logs目录 mkdir -p /mydata/nacos/init.d/ vim /mydata/nacos/init.d/custom.properties #修改配置文件
3、mysql新建nacos的数据库,并执行脚本
下载地址
https://github.com/alibaba/nacos/blob/master/config/src/main/resources/META-INF/nacos-db.sql
4、修改配置文件custom.properties
server.contextPath=/nacos server.servlet.contextPath=/nacos server.port=8848 spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://xx.xx.xx.x:3306/nacos_devtest_prod?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=user db.password=pass nacos.cmdb.dumpTaskInterval=3600 nacos.cmdb.eventTaskInterval=10 nacos.cmdb.labelTaskInterval=300 nacos.cmdb.loadDataAtStart=false management.metrics.export.elastic.enabled=false management.metrics.export.influx.enabled=false server.tomcat.accesslog.enabled=true server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i nacos.security.ignore.urls=/,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/login,/v1/console/health/**,/v1/cs/**,/v1/ns/**,/v1/cmdb/**,/actuator/**,/v1/console/server/** nacos.naming.distro.taskDispatchThreadCount=1 nacos.naming.distro.taskDispatchPeriod=200 nacos.naming.distro.batchSyncKeyCount=1000 nacos.naming.distro.initDataRatio=0.9 nacos.naming.distro.syncRetryDelay=5000 nacos.naming.data.warmup=true nacos.naming.expireInstance=true
5、启动容器
docker run \ --name nacos -d \ -p 8848:8848 \ --privileged=true \ --restart=always \ -e JVM_XMS=256m \ -e JVM_XMX=256m \ -e MODE=standalone \ -e PREFER_HOST_MODE=hostname \ -v /mydata/nacos/logs:/home/nacos/logs \ -v /mydata/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties \ nacos/nacos-server
6、浏览器输入服务器地址:http://xxx.xxx.xx.xx:8848/nacos/index.html,账号nacos 密码nacos,登陆成功!
我们可以用 下面命令来查看可用版本:
docker search redis
$ docker search redis
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
redis Redis is an open source ... 2321 [OK]
sameersbn/redis 32 [OK]
torusware/speedus-redis Always updated official ... 29 [OK]
bitnami/redis Bitnami Redis Docker Image 22 [OK]
anapsix/redis 11MB Redis server image ... 6 [OK]
webhippie/redis Docker images for redis 4 [OK]
clue/redis-benchmark A minimal docker image t... 3 [OK]
williamyeh/redis Redis image for Docker 3 [OK]
unblibraries/redis Leverages phusion/baseim... 2 [OK]
greytip/redis redis 3.0.3 1 [OK]
servivum/redis Redis Docker Image 1 [OK]
...
这里我们拉取官方的最新版本的镜像:
$ docker pull redis:latest
使用以下命令来查看是否已安装了 redis:
$ docker images
在上图中可以看到我们已经安装了最新版本(latest)的 redis 镜像。
安装完成后,我们可以使用以下命令来运行 redis 容器:
$ docker run -itd --name redis-test -p 6379:6379 redis
参数说明:
最后我们可以通过 docker ps 命令查看容器的运行信息:
接着我们通过 redis-cli 连接测试使用 redis 服务。
$ docker exec -it redis-test /bin/bash
至此,一个redis服务就安装好了,如果需要外部可以访问就去把安全组打开。一般不建议打开,打开也可以 记得设置密码
$ sudo passwd root
可设置跟 ubuntu 用户一样
/etc/ssh/sshd_config
# sudo vim /etc/ssh/sshd_config
将 PermitRootLogin 改为 yes
#LoginGraceTime 2m
PermitRootLogin yes
#StrictModes yes
$ sudo service ssh restart