linux curl post
curl -X POST -H 'Content-Type: application/json' -i http://localhost:8080/xxsx --data '{}' -H "token:"
先大概列一下常用的命令
cd、ls、ll、grep、less、tail、vi、vim、touch等,我就不一一列举了
查看硬盘空间情况df -l
[root@localhost dev]# df -l
查看内存:free -m
[root@localhost bin]# free -m
查看cpu型号:cat /proc/cpuinfo
[root@localhost bin]# cat /proc/cpuinfo
查看内核版本:uname -a
[root@localhost bin]# uname -a
查看系统版本:lsb_release -a
[root@localhost /]# lsb_release -a
查看端口占用情况:
lsof -i :port
查看是否有某些文件:
find ~/develop -name filename 查找develop 目录下的文件名为某某的
rpm -qa|grep -i mysql 检查是否安装过mysql
rpm -ivh:安装显示安装进度--install--verbose--hash
#注释
#单行用#多行用:<<!....!
#在bash中,$( )与` `(反引号)都是用来作命令替换的
#$( )的弊端是,并不是所有的类unix系统都支持这种方式,但反引号是肯定支持的
#一般情况下,$var与${var}是没有区别的,但是用${ }会比较精确的界定变量名称的范围
#linux中shell变量$#,$@,$0,$1,$2的含义解释:
#变量说明:
$$
#Shell本身的PID(ProcessID)
$!
#Shell最后运行的后台Process的PID
$?
#最后运行的命令的结束代码(返回值)
$-
#使用Set命令设定的Flag一览
$*
#所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$@
#所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$#
#添加到Shell的参数个数
$0
#Shell本身的文件名
$1~$n
#添加到Shell的各参数值。$1是第1参数、$2是第2参数…。
我大概列举一下简单的一些
#解压
tar -zxvf fileName
unzip FileName.zip
#查系统版本:
cat /etc/redhat-release
sudo vim #操作命令 回车输入密码就root用户权限
df -h #磁盘命令
du -sh #查文件大小
#查看某一端口的占用情况: lsof -i:端口号
#linux端口状态查看相关命令
netstat -an|grep 8080
#获取某个文件的内容,通过名字过滤、再通过:剪切,再去重
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
#后台启动某个进程
nohup sh xx.sh >./nxx.log 2>&1 &
#再如:
nohup java -jar ./springbootjardemo.jar > springbootjardemo.log 2>&1 &
shell运算
#!/bin/bash
#第一方式$()
RESULT1=$(((2+3)*4));
echo "result1=$RESULT1"
#第二种方式[]
RESULT2=$[(2+3)*4]
echo "result2=$RESULT2"
#使用expr 运算号与数据之间必须要有空格符号
#expr + , - , \*, /, % 加,减,乘,除,取余
#注意:expr运算符间要有空格
TEMP=`expr 2 + 3`;
RESULT3=`expr $TEMP \* 4`
echo "result3=$RESULT3"
#$((运算式))”或“$[运算式]
#求出两个参数的和
SUM=$[$1+$2]
echo "SUM=$SUM"
if语句
#!/bin/bash
#案例1:"ok"是否等于"ok"
#if和[ ]之间要空格
#[ ]和“ ”之间要空格
# ”和=之间要空格
#否则都会报错
if [ “ok” = “ok” ]; then
echo "equal"
else
echo "not equal"
fi
#案例2:20是否大于等于20
#大于 -gt (greater than)
#小于 -lt (less than)
#大于或等于 -ge (greater than or equal)
#小于或等于 -le (less than or equal)
#不相等 -ne (not equal)
if [ 25 -ge 25 ]; then
echo "equal"
else
echo "not equal"
fi
#案例3:/opt/tmp/aaa.txt 目录中的文件是否存在
if [ -e /opt/tmp/aaa.txt ]; then
echo "exist"
fi
$的用法
#!/bin/bash
#$$ Shell本身的PID(ProcessID)
#$! Shell最后运行的后台Process的PID
#$? 最后运行的命令的结束代码(返回值)
#$- 使用Set命令设定的Flag一览
#$* 所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
#$@ 所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
#$# 添加到Shell的参数个数
#$0 Shell本身的文件名
#$1~$n 添加到Shell的各参数值。$1是第1参数、$2是第2参数…。
#获取到各个参数
echo "$0 $1 $2"
echo "$*"
echo "$@"
echo "参数个数=$#"
echo "当前的进程号=$$"
#后台的方式运行 myShell.sh
sh myshell.sh &
echo "最后的进程的号=$!"
echo "执行的值=$?"
function
#!/bin/bash
function sum(){
S=0
S=$[$n1+$n2]
echo "s=$S"
}
read -p "请输入第一个数n1=" n1
read -p "请输入第一个数n2=" n2
sum $n1 $n2
for的用法
#!/bin/bash
#案例1 :打印命令行输入的参数
#使用 $*
for i in "$*"
do
echo "the num is $i"
done
echo "==============================="
#使用 $@
for j in "$@"
do
echo "the num is $j"
done
#案例2 :从1加到100的值输出显示
#定义一个变量
SUM=0
for((i=1;i<=100;i++))
do
SUM=$[$SUM+$i]
done
echo "sum=$SUM"
while的用法
#!/bin/shell
#案例1 :从命令行输入一个数n,统计从 1+..+ n 的值是多少
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo "sum=$SUM"
case的用法
#!/bin/bash
#案例1 :当命令行参数是 1 时,输出 "周一", 是2 时,就输出"周二", 其它情况输出 "other"
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
"3")
echo "周三"
;;
*)
echo "other"
;;
esac
同步脚本的Demo
#!/bin/shell
#1 获取输入参数个数, 如果没有参数,直接退出
paramCount=$#
if [ $paramCount -eq 0 ]; then
echo "no args"
exit
fi
#2 获取文件名称
p1=$1
#filename=$(basename $p1)和fname=`basename $p1`是一样的
filename=$(basename $p1)
echo filename=$filename
#3 获取上级目录到绝对路径
#$(cd -P $(dirname $p1); pwd) 和`cd -P $(dirname $p1); pwd` 即$() 和``反向引号是一样的
pdir=$(cd -P $(dirname $p1); pwd)
echo pdir=$pdir
#4 获取当前用户名称
#user=`whoami`
user=$(whoami)
#echo user=$user
for((hosts=2; hosts<5; hosts++)); do
#rsync -rvl $pdir/$fname $user@weisg00$host:$pdir
echo $pdir/$fname $user@weisg00$hosts:$pdir
done
进程监控的Demo
top //每隔5秒显式所有进程的资源占用情况
top -d 2 //每隔2秒显式所有进程的资源占用情况
top -c //每隔5秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名)
top -p 12345 -p 6789//每隔5秒显示pid是12345和pid是6789的两个进程的资源占用情况
top -d 2 -c -p 123456 //每隔2秒显示pid是12345的进程的资源使用情况,并显式该进程启动的命令行参数
pmap pmap - report memory map of a process(查看进程的内存映像信息)
选项含义
-x extended Show the extended format. 显示扩展格式
-d device Show the device format. 显示设备格式
-q quiet Do not display some header/footer lines. 不显示头尾行
-V show version Displays version of program. 显示版本
#!/bin/shell
#进程号
input_process_id=$1
while true
do
pmap -d ${input_process_id}|tail -1
sleep 3
done
我用springboot开发,所以看下一下springboot.jar的启动及停止,只要你看懂了启动,停止就懂了
不多说,直接上代码:
#!/bin/sh
RESOURCE_NAME=springbootjardemo.jar
tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'Stop Process...'
kill -15 $tpid
fi
sleep 5
tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'Kill Process!'
kill -9 $tpid
else
echo 'Stop Success!'
fi
tpid=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'App is running.'
else
echo 'App is NOT running.'
fi
#rm -f tpid
nohup java -jar ./$RESOURCE_NAME --spring.profiles.active=test >> demo.out &
#echo $! > tpid
if [ $! -gt ${tpid} ]; then
echo Start Success!
fi
如果是写接口的,有linux上可以了解一下压力测试工具siege的用法
在Linux上搞集群,自然少不了时间同步设置问题
llinux下时间同步的方法
ntpdate time.nist.gov
其中 time.nist.gov 是一个时间服务器.
删除本地时间并设置时区为上海
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
Linux(CentOS) 如何查看当前占用CPU或内存最多的K个进程
可以使用以下命令查使用内存最多的K个进程
ps -aux | sort -k4nr | head -K
如果是10个进程,K=10,如果是最高的三个,K=3
说明:ps -aux中(a指代all——所有的进程,u指代userid——执行该进程的用户id,x指代显示所有程序,不以终端机来区分)
sort -k4nr中(k代表从第几个位置开始,后面的数字4即是其开始位置,结束位置如果没有,则默认到最后;n指代numberic sort,根据其数值排序;r指代reverse,这里是指反向比较结果,输出时默认从小到大,反向后从大到小。)。本例中,可以看到%MEM在第4个位置,根据%MEM的数值进行由大到小的排序。
head -K(K指代行数,即输出前几位的结果)
|为管道符号,将查询出的结果导到下面的命令中进行下一步的操作。
可以使用下面命令查使用CPU最多的K个进程
ps -aux | sort -k3nr | head -K
vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。
一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如:
vmstat 2 1
2表示每个两秒采集一次服务器状态,1表示只采集一次。
vmstat 2 #2表示每个两秒采集一次服务器状态
每个参数的意思:
r 表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。
b 表示阻塞的进程,这个不多说,进程阻塞,大家懂的。
swpd 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。
free 空闲的物理内存的大小,我的机器内存总共8G,剩余3415M。
buff Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用300多M
cache cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)
si 每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。
so 每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。
bi 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到140000/s,磁盘写入速度差不多140M每秒
bo 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。
in 每秒CPU的中断次数,包括时间中断
cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。
us 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。
sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。
id 空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。
wt 等待IO CPU时间。
其他命令:
dump分析工具:tda.bat
jstack -l
jstat jstatd jstack
使用vmstat命令来查看上下文切换的次数
看看是不是context switching导致的overhead过高。常用命令: pidstat vmstat
mysql备份脚本
#!/bin/bash
DBUser=root
DBPasswd=root123@#
DBName=db_name
SERVER=localhost
save_dir=/dbbackup/
LogFile="$save_dir"backup.log
NewFile="$save_dir"$DBName'_'$(date +%Y%m%d).sql
OldFile="$save_dir"$DBName'_'$(date +%Y%m%d --date='7 days ago').sql
if [ -f $OldFile ]
then
rm -f $OldFile >> $LogFile 2>&1
echo "[$OldFile]Delete Old File Success!" >> $LogFile
else
echo "[$OldFile]No Old Backup File!" >> $LogFile
fi
if [ -f $NewFile ]
then
echo "[$NewFile]The Backup File is exists,Can't Backup!" >> $LogFile
echo "Begin ro recover the data...."
echo "Data has been restored!" >>$LogFile
else
mysqldump -h$SERVER -u$DBUser -p$DBPasswd --default-character-set='utf8' --quick --single-transaction -R $DBName >$NewFile
echo "[$NewFile]Backup Success!" >> $LogFile
fi
scp密码免输入ssh配置
yum install expect
#!/bin/bash/expect
set domain_name [lindex $argv 0]
#user_name=`echo $line | cut -d " " -f2` # 提取文件中的用户名
#pass_word=`echo $line | cut -d " " -f3` # 提取文件中的密码
spawn scp /home/weisg/.ssh/authorized_keys weisg@$domain_name:~/.ssh/
expect "yes/no" { send "yes\r"} # expect 实现自动输入密码
expect "password" { send "wbsj123456!\n"}
interact
执行方式:
expect ssh_auto.sh weisg007
升级内核到4.4版本
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
# 安装完成后检查 /boot/grub2/grub.cfg 中对应内核 menuentry 中是否包含 initrd16 配置,如果没有,再安装
一次!
yum --enablerepo=elrepo-kernel install -y kernel-lt
# 设置开机从新内核启动
grub2-set-default 'CentOS Linux (4.4.189-1.el7.elrepo.x86_64) 7 (Core)'
在目录中找到且永久删除文件(xargs命令详解,xargs与管道的区别):
find / -name *gitlab*|xargs rm -rf