linux命令
cat|group|sed
cat comm-log | grep "SIDE=P|@|RS-S" | sed 's/ aaa.*//g' |sed 's/info.*cost/ cost/g' | grep "=8[9-9]$" | wc - l
1 sed 再输出
2. ’ ’ 执行的命令
3 ./ 开始将
3. xxx 啥啥啥
4. / 替换为
5. xxx 啥啥啥
6. ./g 结束
例如:
sed ‘s/aaa.*//g’ 将aaa.*后面的字符串包括aaa都替换为 空
sed ‘s/aaa.*bbb/ccc/g’ 将aaa.*bbb的字符串 都替换为ccc
统计某个异常出现的次数
grep -rni 'Exception:' | sed 's/Exception.*/Exception/g' | grep -Eo '[\.a-zA-Z]+Exception' | sort | uniq -c
sed搜索指定时间的日志
sed -n ‘/超始时间/,/结束时间/p’ xxx.log >> test.log
sed -n ‘//,//p’ xxx.log >> test.log
查找字符在一个目录下
在 /home 目录下的所有文件中查找包含 test 字符串的文件
grep -r -e "test" /home/
解压/压缩jar包
解压缩包
unzip xxx.jar -d test/ 将xxx.jar包解压到test目录里
打jar包
jar cvf0 xxxx.jar ./* 将当前目录打成一个jar包 0表示里面的内容不压缩
一个小例子
增加MANIFEST.MF文件
jar -uvfm xxx.jar MANIFEST.MF 将MANIFEST.MF文件放入jar包里 通常有时MANIFEST.MF不正确我们要手动弄
lsof
lsof -i:9002 知道9002端口现在运行什么程序
top
top -p xxpidxxx #只显示pid的信息并且为0时也会显示
top | grep xxxpidxxx 只显示pid信息为0时不显示,不为0时显示
查看磁盘
df -hl 磁盘大小空间使用情况
du -h --max-depth=1 磁盘目录文件大小
du -sh * 查看当前目录下的文件大小
日志操作
不输出日志
/dev/null表示将产生的信息丢弃
nohup sh start.sh &>/dev/null &
nohup java -jar qbsea.jar &>/dev/null &
输出到日志文件
nohup sh start.sh &>xxx.log 2>&1 &
nohup java -jar qbsea.jar &>xxx.log 2>&1 &
清空日志
echo “” > xxx.log
shell
string的substring的方法
#java code
String str="abc";
String target=str.substring(0,1);
//shell code
MEDIUM="abcdabcdabcdabcdabcdabcdabcdabcd";
MEDIUM_LENGTH=${#MEDIUM}
PROXY_PATH=${MEDIUM:0:MEDIUM_LENGTH-7}
引用变量
APP_NAME=user
xxx/$APP_NAME/xxx
#! /bin/sh
JAR_VERSION=1.0.4-SNAPSHOT
JAR_NAME=globalrouter-service-${JAR_VERSION}_original.jar
脚本传参
aaa.sh
#! /bin/sh
MY_PARAM1_INPUT=$1
MY_PARAM2_INPUT=$2
echo $MY_PARAM1_INPUT $MY_PARAM2_INPUT
执行时
./aaa.sh aaa bbb
会输出 aaa bbb
判断脚本的个数 $#
if [$#==2] ; then
echo "录入了两个参数"
fi
逻辑与 逻辑非
-a 代表逻辑与
#判断两个字符串都不能为空
if[ ! -z "$SEVER_ADDRESS" -a ! -z "$RAFT_CONF" ];
then
echo " 这两个变量都不能为空"
else
echo"xxxx"
fi
case
case "$1" in #$1为变量
xxxstartxxx) #匹配上xxxstartxxx
echo "this is start" #写你要执行的命令
;; #代表命令执行完毕
xxxstopxxxx) #匹配上xxxstopxxx
echo "this is stop" #写你要执行的命令
;; #代表命令执行完毕
*) #默认值,没有匹配的模式
echo "this is default value" #默认值执行的命令
;;
esac #代表case语句的结束
if语句
if fi的用户
a=10
b=20
if [ $a < $b ]
then
echo "a is equal to b"
fi
判断一个字符串变量是否为空
c=""
if [ -z "$c" ] #判断一个字符串是否为空
then
echo "c is null"
fi
#判断两个字符串都不能为空
if[ ! -z "$SEVER_ADDRESS" -a ! -z "$RAFT_CONF" ];
then
echo " 这两个变量都不能为空"
else
echo"xxxx"
fi
if else fi
a=10
b=20
if [ $a == $b ]
then
echo "a is equal to b"
else
echo "a is not equal to b"
fi
敲击脚本目录,具有通用性
#! /bin/bash
cd `dirname $0`
DEPLOY_DIR=`pwd`
echo $DEPLOY_DIR
./bbb.sh 后执行
/applog/maqingbin/shtest
pid记录到文件中去
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_45
SERVICE_DIR=/maqingbin
PID=qbsea.pid
nohup JAVA_HOME/bin/java -jar qbsea.jar &>/dev/null & #执行程序的命令丢弃日志
echo $!> $SERVICE_DIR/$PID #$!为最后运行的后台Process的PID 会往qbsea.pid文件里写
调用带返回值命令
kill `cat $SERVICE_DIR/$PID` 也可以利用进行linux调用java获得值
gate=`/usr/lib/jvm/jdk1.7.0_45/bin/java -jar /tmp/maqingbin/linuxCmd.jar`
if [ $gate -ge 90 ] ; then
delFile;
fi
ps -ef|grep
ps -ef | grep -w "$SERVICE_NAME" | grep -v "grep" | awk '{print $2}'
ps -ef | 全格式显示当前所有进程
grep -w "$SERVICE_NAME" 滤出"$SERVICE_NAME"的进程
grep -v grep 把grep这个进程忽略掉
awk '{ print $1; }' 输出第一列```
可以用于git目录下查询某个关键字在哪个文件中
grep -rni "tb_cdr7g" >> test.txt
获取时间倒序的文件
MEDIUM=`ls -rt *.tar.gz|grep db-proxy|tail -n 1`
按数字排序文件
ls | sort -V
linux的日期
currentDate=`date +%Y%m%d_%H%M%S` #20180525_190115
mkdir ${currentDate}
linux的rpm
rpm -qa | grep -i mysql 查询mysql这个应用是否有安装 如果有安装会有列表
rpm -ev xxxMySQL-devel-5.6.23-1.linux_glibc2.5 xxx 删除列表中的组件
也可以写成 rpm -e --nodeps xxxmysql-libs-5.1.71-1.el6.x86_64xxx
linux的cpu内存硬盘信息
#查看cpu
cat /proc/cpuinfo | grep 'physical id' |wc -l
#查看内存
cat /proc/meminfo | grep MemTotal
#查看硬盘
lsblk | grep app
问题记录
/bin/bash^M: bad interpreter: No such file or directory
[taoge@localhost learn_shell]$ ./a.sh
bash: ./a.sh: /bin/bash^M: bad interpreter: No such file or directory
[taoge@localhost learn_shell]$
vi a.sh 执行:set fileformat=unix后执行:x或者:wq保存修改。 然后就可以执行./a.sh运行脚本了