Linux-script
单行语法
1 | cmd1 && cmd2 #cmd1正确执行cmd2,相反不执行 |
错误重定向不输出
1 | cmd 1>/dev/null 2>&1 #错误不会打印 |
实战
1 | #用户bpf不存在则创建用户,且不输出错误日志,但异常还是存在所以可能会导致整个脚本终止 |
优化
1 | <! maven pom.xml & 符号报错,解决用<![CDATA[ cmd ]]> --> |
1 | cmd1 && cmd2 #cmd1正确执行cmd2,相反不执行 |
1 | cmd 1>/dev/null 2>&1 #错误不会打印 |
1 | #用户bpf不存在则创建用户,且不输出错误日志,但异常还是存在所以可能会导致整个脚本终止 |
1 | <! maven pom.xml & 符号报错,解决用<![CDATA[ cmd ]]> --> |
mongodump
1 | mongodump --host 127.0.0.1 --port 27017 --username user --password pass --out /data/backup/ --db test --collection mycollection |
默认备份本地运行在27017端口下的 MongoDB 实例中的所有数据库(local
除外),并在当前目录下生成 dump/
路径存放备份文件,备份以文件名区分数据库,里面以bson
和json
单独存表
mongodump
命令就可以备份数据库了,备份的文件会在当前目录的dump里面mongorestore dump/
参数同备份,其中dump为备份文件的路径
创建脚本mongod_bak.sh
1 | #!/bin/sh |
添加执行权限chmod +x mongod_bak.sh
执行测试./mongod_bak.sh
,这步可忽略
添加自动执行脚本功能,执行
1 | #每天凌晨2点自动执行,脚本路径更改为自己存放的路径 |
1 | #解压备份文件 |
1 | #!/bin/bash |
1 | yum install ruby-devel gcc make rpm-build rubygems |
1 |
环境需求安装rpm
1 | #centos |
添加插件
1 | <properties> |
空配置
1 | <plugin> |
package rpm:rpm -U
1 | # 安装包名 |
安装制作工具yum -y install rpmdevtools
会自动依赖安装rpm-build
生成开发目录rpmdev-setuptree
会在~
目录生成rpmbuild
文件目录
1 | `-- rpmbuild |
创建源代码
1 | ~> mkdir -p rpmbuild/SOURCES/hello-world-1.0.0 |
打包源码tar zcvf hello-world-1.0.0.tar.gz hello-world-1.0.0
编写spec文件cd ~/rpmbuild/SPECS
然后vim hello-world.spec
创建hello-world.spec
文件,vim会自动根据后缀spec加载默认模版,修改模版如下
1 | Name: hello-world |
执行rpmbuild -ba hello-world.spec
进行打包最后目录结构
1 | . |
安装打包好的安装包yum install ~/rpmbuild/RPMS/x86_64/hello-world-1.0.0-1.el7.x86_64.rpm
测试
1 | > hello-world |
新建添加本地源vim /etc/yum.repos.d/CentOS-Media.repo
,内容如下
1 | [c7-media] |
安装yum install createrepo
新建仓库目录结构,然后放入需要的安装包,及依赖包
1 | `-- ntrepo |
在ntrepo目录执行createrepo .
会生成多一个目录,以及包的索引
1 | `-- nantianrepo |
然后执行yum clean all
清理缓存
最后测试安装yum install hello-world
会自动依赖
安装yum ``install
yum-plugin-downloadonly
下载依赖包yum install –downloadonly –downloaddir= <依赖包存储路径> <需要下载依赖包的安装包名>
例如:
1 | yum install --downloadonly --downloaddir=/data/rpm mongodb |
错误信息分析,关键信息cd jdk-8u77-linux-x64-1.0.0
1 | 执行(%prep): /bin/sh -e /var/tmp/rpm-tmp.QO57WH |
原因,是因为解压之后路径找不到对应目录
解决:
方式一手动解压,重新手动压缩
方式二修改spec文件中的prep,然后查看BUILD里面的实际解压目录/root/rpmbuild/BUILD/jdk1.8.0_77
然后设置为实际目录即可
1 | %prep |
编译后无法运行提示无架构
1 | [root@xuan SRPMS]# yum install jdk-1.8-77.src.rpm |
解决:进错目录,这个是源代码
交换分区是在内存不足的情况下,存储长期不活跃的内存,但是性能受硬盘影响,下降10倍不等,固态稍微好一点,机械硬盘简直卡死建议不设置
dd if=/dev/zero of=/home/swap bs=1024 count=3764224
其中**3764244=1024x2x实际内存大小(M)**其中2代表虚拟内存是实际内存的2倍mkswap /home/swap
swapon /home/swap
echo "/home/swap swap swap defaults 0 0" >> /etc/fstab
reboot
非必须,然后执行df -h
就可以看到swap有值了swapoff /home/swap
rm -fr /home/swap
/etc/fstab
删除行/home/swap swap swap defaults 0 0
即可cdn是资源加速缓存的服务
dig coscdn.xxxx.com
访问资源时读取老的资源不更新
解决:在CDN设置里面的访问控制->过滤参数
按钮关闭即可
原因:打开之后回忽略url中?号后面的所有参数,所以带参数时,就不会访问新资源
就是一种
项目源码见xuanfong1/springLeaning/protobuf
在项目引入maven/gradle依赖compile 'com.google.protobuf:protobuf-java:3.6.1'
下载代码生成工具,作用是将file.proto
文件转换成其他语言(java/C++/GO/Python/C#/Dart)的文件,eg:这里选择window平台,版本和maven版本一致,因此选择protoc-3.6.1-win32.zip,其他操作系统选择对应平台即可,然后解压,在bin目录可以看到protoc.exe
文件,复制重命名protoc-3.6.1-win32.exe
为了好区分版本,其他文件用不着
编写一个测试PersonMsg.proto
文件
1 | message Person { |
使用工具进行java代码生成,执行.\protobuf\protoc-3.6.1-win32.exe --java_out=.\protobuf\src\main\java\com\exxk\protobuf\ .\protobuf\src\test\protobuf\PersonMsg.proto
注意,这里生成的代码PersonMsg.java
里面是没有包名的,可以手动加入
在ProtobufApplicationTests.java
编写测试方法
1 | import java.io.ByteArrayInputStream; |
设置自动生成包名,修改PersonMsg.proto
文件
1 | //指定编译版本2或3 |
修改命令.\protobuf\protoc-3.6.1-win32.exe --java_out=.\protobuf\src\main\java\ .\protobuf\src\test\protobuf\PersonMsg.proto
插件地址:google/protobuf-gradle-plugin
在父级build.gradle
添加
1 | buildscript { |
在子项目build.gradle
添加
1 | apply plugin: 'com.google.protobuf' |
然后点击右侧gradleprotobuf->Tasks->other->generateProto
编译proto文件生成java文件
解决不同平台开发编译问题,功能能实现自动根据不同系统(os/win/linux)调用不同的protoc工具
配置更改一直不生效,一直使用最新的3.6.0版本的protoc工具
目录结构:
1 | ├─src |
编写pom.xml
添加插件
1 | <project ...> |
使用,点击右侧插件里面的protobuf->protobuf:compile
或者执行mvn protobuf:compile
protoSourceRoot
目录是,是以该目录为相对路径,因此代码里面的import "response/xxx.proto
要加上response
二级目录,但是如果可以设置protoSourceRoot为两个或二级目录就不需要修改,clearOutputDirectory
设置true,也不会清理其他目录中其他文件Gogs内存占用小
部署脚本docker-compose.yml
1 | version: '3' |
第一次运行需要初始化,网页里面设置见Application
后面可以通过脚本/dockerdata/v-gogs/gogs/conf/app.ini
修改所有配置
1 | cd /usr/lib/ |
sudo vim ~/.bashrc
在文件末尾添加
1 | export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_201 |
执行source ~/.bashrc
生效配置
测试java -version
进入tomcat安装目录,windos和linux通用,然后右键打开ubunt,执行./catalina.sh run
tomcat不要放Program Files
带空格或特殊字符的路径,在linux下识别不了