文章目录
Linux 命令
用户权限
切换用户
su root
新建用户
useradd Peter
passwd Peter
新建用户不登录
useradd -s /sbin/nologin nagios
为文件加权限
chmod 775 *.sh
为用户赋权限
chown -R vision:vision /usr/local/jboss
指定目录所属用户
chown -R nagios.nagios /usr/local/nagios
某个文件 root 用户也无法修改时,先去除该文件的某个属性
[root@guaoran install]# lsattr config.cache.inc.php
----i-------- config.cache.inc.php
[root@guaoran install]# chattr config.cache.inc.php
增加用户 sudo 权限
vi /etc/sudoers
文件读写
查看文件内容
从第一个字节开始正向查看文件的内容
cat file
从最后一行开始反向查看一个文件的内容
tac file
查看一个长文件的内容
more file
类似于 ‘more’ 命令,但是它允许在文件中和正向操作一样的反向操作
less file
查看一个文件的前两行和最后两行
head -2 file1
tail -2 file1
实时查看被添加到一个文件中的内容
tail -f
VIM
复制 、 剪切 、 粘贴 整行
yy
dd
p
到文件头、尾
gg
shift+g
显示文件行
:set number
:set nu
隐藏文件行
:set nonumber
:set nu!
定位到第 n 行
:n
向文件首翻半屏、尾翻半屏
Ctrl+u
Ctrl+d
向文件首翻一屏、尾翻一屏
Ctrl+b
Ctrl+f
将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。
:nz
强制保存
:w!
统计、替换、解压缩文件、远程复制文件
统计替换
linux 统计某个关键字的出现次数
grep -o '/dataManual/dataResultAjax.do' localhost_access_log.2018-06-04.txt|wc -l
替换某个文件下的某个字符串
sed -i 's/要替换的值/替换为谁/g' 文件名
查询某个目录下某个关键字
显示关键字所在的文件名以及所在行的内容
grep -r 'key' /目录
显示关键字所在的文件名以及行数和所在行的内容
grep -nr 'key' /目录
显示关键字所在的文件名
grep -lr 'key' /目录
模糊查询并显示文件的各个属性值
find epg_8701_20170* -exec ls -l {} \;
根据名称从当前目录搜索
find . -type f -name SDzhizhux2.jpg
解压缩文件
压缩目录
tar czvf guaoran.tar.tgz guaoran
解压文件
tar -zxvf guaoran.tar.tgz
解压 zip 文件
unzip yasuobao.zip
远程复制
将本地文件 /guaoran/file
复制到远程ip(60) 的 /guaoran/
目录下
scp -r /guaoran/file guaoran@192.168.20.60:/guaoran/
防火墙
查询端口是否已打开
netstat -anp | grep 端口
或
netstat -tunlp |grep 端口
查看该服务的端口
netstat -tlpn| grep httpd
根据端口查看进程id
lsof -i tcp:端口
firewall
启动、重启、查看状态、停止
systemctl start firewalld
systemctl restart firewalld
systemctl status firewalld
systemctl stop firewalld
开机启用和禁用防火墙
systemctl enable firewalld.service
systemctl disable firewalld.service
查看防火墙服务是否开机启动
systemctl is-enabled firewalld.service
查看启动失败的服务列表
systemctl --failed
开放端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
查看所有打开的端口
firewall-cmd --zone=public --list-ports
iptables
启动、重启、查看状态和关闭服务
service iptables start
service iptables restart
service iptables status
service iptables stop
开放端口 : 修改 vim /etc/sysconfig/iptables
文件 ,增加如下一行
iptables -I INPUT -j ACCEPT -p tcp --dport 3306 -m state --state NEW
设置服务开机启动
开机启动
chkconfig httpd on
取消开机启动
chkconfig httpd off
服务器重启和关机
服务器重启
重启命令
reboot
立刻重启(root用户使用)
shutdown -r now
过10分钟自动重启(root用户使用)
shutdown -r 10
在时间为20:35时候重启(root用户使用)
shutdown -r 20:35
服务器关机
立刻关机
halt
或
poweroff
立刻关机(root用户使用)命令安全地将系统关机
shutdown -h now
10分钟后自动关机
shutdown -h 10
内存、CPU
查看文件或目录大小
du -sh cms
查看目录每个文件的大小
du -sh cms/*
查看剩余内存
free -m
IO 信息
iostat
查看磁盘空间占用情况
df -h
端口查看
查看进程的端口号
sudo netstat -unltp|grep java
根据端口查看进程id
lsof -i tcp:8998
http_load
命令格式:http_load -p 并发访问进程数 -s 访问时间 需要访问的URL文件
-parallel 简写-p :含义是并发的用户进程数。
-fetches 简写-f :含义是总计的访问次数
-rate 简写-p :含义是每秒的访问频率
-seconds简写-s :含义是总计的访问时间
执行了一个持续时间10秒的测试,并发次数为3次
http_load -parallel 3 -seconds 10 urls.txt
执行了一个持续时间10秒的测试,每秒的频率为3次
http_load -rate 3 -seconds 10 urls.txt
性能监控
查看CPU 个数
总核数 = 物理CPU个数 X 每颗物理CPU的核数
总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
获得CPU核心数 (该命令即可全部算出多少核)
grep 'model name' /proc/cpuinfo | wc -l
查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq
查看逻辑CPU的个数
cat /proc/cpuinfo |grep "processor"|wc -l
查看内存IO
查看内存
free
查看系统负载
vmstat 1 2
查看磁盘负载
iostat -x 1 3
查看系统监信息(1/c)
top
MySQL
导出/入 MySQL 数据
mysqldump
将库导出到一个SQL文件
mysqldump db_name > /path/name.sql -uroot -p
将库导出到一个SQL文件,如果数据库太大,压缩导出
mysqldump db_name | gzip > /path/name.sql.gz -u root -p
导出多个库
mysqldump -h192.168.20.45 -uroot -p123456 --databases db db1|gzip > /mnt/users/guaoran/dumpdata/db.sql.gz
导出所有库
mysqldump -uroot -proot --all-databases |gzip > /guaoran/all.sql.gz
导出单个库,并生成创建库的脚本
如果加上–opt参数则生成的dump文件中稍有不同:
建表语句包含drop table if exists tableName
insert之前包含一个锁表语句lock tables tableName write,insert之后包含unlock tables
如果加上 -B 会生成创建库脚本
mysqldump -h192.168.20.45 -uroot -p123456 --opt -B db> /mnt/users/guaoran/db.sql
导入sql.gz 文件到数据库
gunzip <db.sql.gz |mysql -uroot -proot
锁
全局读锁定,执行了命令之后所有库所有表都被锁定只读。
一般都是用在数据库联机备份,mysql 连接中执行
FLUSH TABLES WITH READ LOCK;
UNLOCK TABLES;
Oracle
进入SQL
sqlplus vision/vision@127.0.0.1:1521/appdb
导出表
exp vision/vision@127.0.0.1:1521/szdb_taf file=d:\daochu.dmp tables=t_cpg_program_v2
导入表
imp vision/vision@127.0.0.1:1521/appdb file=d:\daochu.dmp fromuser=sz_visiontv TOUSER=sz_visiontv tables=t_cpg_program_v2
JVM 调优命令
启动应用
启动 java 应用
nohup java -Dfile.encoding=utf-8 -jar cms.jar --server.port=8080 --logging.level.root=warn > cms.log 2>&1 & echo $!> cms.pid
启动 java 应用并设置 JVM 参数
nohup java -Dfile.encoding=utf-8 -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC eurekaServer.jar --server.port=10000 --logging.level.root=warn >> logs/eurekaServer.log 2>&1 & echo $!> pid
查看命令
JPS
输出主类 或者 jar 的完全路径名
sudo jps -l
输出 jvm 参数
sudo jps -v
输出 main 的参数
sudo jps -m
输出主类 或者 jar 的完全路径名并输出 main 的参数
sudo jps -lm
jstat
查看垃圾收集信息
sudo jstat -gcutil pid 1000
堆内存统计
sudo jstat -gccapacity pid
jinfo
查看虚拟机参数
jinfo -flags pid
实时参数调整
sudo jinfo -flag -PrintGC pid
jmap
打印 java 堆摘要
sudo jmap -heap pid
打印类加载器统计信息
sudo jmap -clstats pid
打印 java 对象堆的柱状图
sudo jmap -histo:live pid
打印 dump 日志信息
sudo jmap -dump:format=b,file=/mnt/users/guaoran/cms.hprof pid
jstack
查看 java 线程的调用堆栈信息
sudo jstack 12617
把线程ID转为16进制
printf "%x\n" 2866
jconsole 和jvisualVM 监控远程应用(开放端口不行,把防火墙关了)
java -Djava.rmi.server.hostname=192.168.20.60 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -jar xxx.jar
MongoDB
数据导出和导入
导出 demo 数据库 collection 表的数据为 json 格式
./mongoexport -d demo -c student -o /guaoran/mongodb/export/demo.json --type json
导入 json格式 数据到 demo2 数据库student 表
./mongoimport -d demo2 -c student --file /guaoran/mongodb/export/demo.json --type json
索引
创建复合索引
db.priceInfo.createIndex({"state" : 1,"provId":1,"marketName:":1},{background:true});
创建唯一索引
db.student.createIndex({name:1},{unique:true});
查看索引
db.priceInfo.getIndexes();
删除指定的索引
db.COLLECTION_NAME.dropIndex("INDEX-NAME");
删除所有索引
db.COLLECTION_NAME.dropIndexes();
查看执行计划
db.student.find({country:"商丘"}).explain("executionStats");
查询语句
查询分组格式化日期并排序
db.loadometerIncome.aggregate([
{ $match : { state : 1 } } ,
{$group : {_id : "$time", count : {$sum : "$netWeight"} }} ,
{$project:
{time: { $dateToString: { format: "%Y-%m-%d", date: "$_id" } },count:1,_id:0}
},
{ $sort: { time: -1 }},
{$limit:15}
])
查询分组并分页
db.priceInfo.aggregate([
{
"$match" : {
"state" : 1 ,
"marketName" : "合肥周谷堆农产品批发市场" ,
"provName" : "安徽省" ,
"pubDate" : {
"$gte" : ISODate("2016-03-04T16:00:00.000Z") ,
"$lte" : ISODate("2016-06-24T16:00:00.000Z")
}
}
} ,
{ "$group" : { "_id" : "$productName"}},{ $sort: { _id: 1 }},
{ $skip : 0 },
{ $limit : 2 }
]);
查询并指定显示字段
db.getCollection('FAO生产数据集合').find({
item7: "油菜籽",
item4: "亚洲",
item3: "中国",
item10: {
$in: ["收获面积", "单产", "产量"]
},
"item13": {
$lte: "2015",
$gte: "1962"
}
},
{item12: 1, item10:1,item14:1,item13:1,_id:0}
).sort({item13: 1})
查询 and or
db.getCollection('专利数据库').find(
{
state:1,
$or :[
{"item10" : {
"$gte" : "20180912"
}
},
{
"item10" : {
"$gte" : "2018.09.12"
}
}
]
},{item10:1,_id:0}
).sort({item10:1})
批量修改某个字段
db.getCollection('农业部批发市场数据').find({'loc':{"$eq":null, $exists:false}}).forEach(
function(item){
db.getCollection('农业部批发市场数据').update(
{"_id":item._id},
{$set:
{"loc":
{"lon":Number(item.item14),"lat":Number(item.item15)}
}
},{multi:true})
}
)
db.getCollection('市场基本信息').find({}).forEach(
function(item){
db.getCollection('市场基本信息').update(
{"_id":item._id},
{$set:
{"item16":
{"lon":Number(item.item16.lon),"lat":Number(item.item16.lat)}
}
},{multi:true})
}
)
转换数字为字符串
db.getCollection('农业部批发市场数据').find({'item4':'江苏省盐城市建湖县',item7:{$gt:'20180100'}}).forEach(
function(item){
db.getCollection('农业部批发市场数据').update(
{"_id":item._id},
{$set:
{"item7":String(item.item7)}
},{multi:true})
}
)
拼接截取后的字符串
db.getCollection('农业部批发市场数据').aggregate( [
{
$match : {
'item4':'江苏省盐城市建湖县',
item7:{$gt:'20180100'}
}
},
{
$project:
{ item7:1,
year: { $substr: [ "$item7", 0, 4 ] },
mon: { $substr: [ "$item7", 4, 2 ] },
day:{ $substr: [ "$item7", 6, 2 ]}
}
},
{
$project:
{ item7:1,
year:1,
mon:1,day:1,
date:{$concat:["$year",'-',"$mon",'-',"$day"]}
}
}
]).forEach(
function(item){
db.getCollection('农业部批发市场数据').update(
{"_id":item._id},
{$set:
{"item7" : item.date}
},{multi:true})
}
)
为经纬度创建索引
db.getCollection('农业部批发市场数据').ensureIndex( { loc : "2d" } , { min : -500 , max : 500 } )
其他
marker down 生成目录
pandoc -s --toc --toc-depth=6 README.md -o README.md
从大到小排序
du -sh /mnt/home/guaoran/* | sort -nr
git 合并请求 将多次请其次转换为自己的一次
git merge --squash taigu_jingyingzhuti
git 设置 push 多仓库
git remote set-url --add origin https://gitee.com/guaoran/java-commons.git
start.sh
baseDir=$(cd `dirname $0`;pwd;)
nohup java -Dfile.encoding=utf-8 -jar $baseDir/springboot.jar --server.port=8080 --logging.level.root=info >> $baseDir/logs/spring.log 2>&1 & echo $!> $baseDir/pid
shutdown.sh
baseDir=$(cd `dirname $0`;pwd;)
kill -9 `cat $baseDir/pid`
idea 出现 Cannot Download Sources
mvn dependency:resolve -Dclassifier=sources