一 常用命令
1 查看进程
查看进程树
ps -axjf
查看自己的进程
ps -l
查看进程运行目录
pwdx 23121
2 查看当前机器的链接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);}'
3 查看当前目录占用空间
du -sh *
4 查看内存占用
free -h
5 查看文件行数
wc -l aa.txt
6 查看排序后的数据
sort -h
7 时间排序后查看
ls -lht dir
8 同一个用户多个组之间切换
$ newgrp root
9 修改目录所有者(及组)
chown -R xiaoming:dev /opt/dev
9.1 查询用户所属组
id user #查看群组分配是否正确
9.2 用户组切换(非追加)
usermod -g dev xiaoming
9.3 查看组内用户
groups dev
10 scp文件传输例子
scp -r dev/redis xiaoming@192.168.1.1:/home/xiaoming
11 字符替换
sed -i "s/wode/nide/g" test.log
11.1 删除文件第一行
sed -i '1d' test.log
12 脚本后台运行(关闭窗口不停止)
nohup test.sh > log &
13 批量杀进程
kill -9 `ps -ef | grep pushtestkill|awk '{print $2}'`
14 截取字符串(索引最后一个字符)
awk -F ',' '{print $5","$10","$NF }'
15 文件分割split
split -a 2 --additional-suffix=".log" -d -b 10m mysql.log small_mysql
生成文件名称:small_mysql00.log
small_mysql01.log
参数说明
- -a生成长度为N的后缀(默认为2)
- –additional-suffix为文件名追加一个后缀
- -d 使用从0开始的数字后缀,而不是字母后缀
- -b指定分割后文件大小为10m
- mysql.log 源文件名称
- small_mysql 分割后的文件名称前缀
更多参数使用查看 --help
二 常用脚本例子
1 数组、for
#!/bin/bash
#条件
if [ $(ps -ef | grep -c "java") -gt 1 ];
then
echo "true";
fi
#数组
my_array=(1,2,3,4,5,6)
echo "第一个元素为: ${my_array[0]}"
echo "第二个元素为: ${my_array[1]}"
echo "第三个元素为: ${my_array[2]}"
echo "第四个元素为: ${my_array[3]}"
echo "第5个元素为: ${my_array[4]}"
echo "数组元素个数为: ${#my_array[*]}"
echo "数组元素个数为: ${#my_array[@]}"
#循环
for i in ${my_array[*]}
do
printf "$i\n"
done
2 统计脚本执行计算时间
#!/bin/bash
starttime=`date +'%Y-%m-%d %H:%M:%S'`
echo "时间:$starttime 开始执行 $1"
sh $1
endtime=`date +'%Y-%m-%d %H:%M:%S'`
echo "时间:$startime 执行结束"
#耗时计算
start_seconds=$(date --date="$starttime" +%s);
end_seconds=$(date --date="$endtime" +%s);
echo "时间:$endtime 传输完成 耗时: $((end_seconds-start_seconds)) s"
3 修改目录下文件名
#查看脚本打印信息
for name in `ls log/*`;do echo $name;done
#打印验证修改结果
for name in `ls log/*`;do echo ${name%_hdd*}_0901${name##*tps};done
#修改操作:慎重!!!!!!
for name in `ls log/*`;do mv $name ${name%_hdd*}_0902${name##*tps};done
3 if
判断非空
[ -z "3kw" ] && echo "yes" || echo "no";
4 md5处理字符串(替换每行前32个字符)
#!/bin/bash
printf "*************************************\n"
echo " cat file whiel read line"
declare -i x=1
echo "">tmp.csv
cat source.csv |while read line
do
sub=${line:32}
pre=$(echo -n $x|md5sum|cut -d ' ' -f1)
#echo $x
echo "前缀---"$pre
#echo $sub
result=$pre""$sub
echo $result >> tmp.csv
x+=1
done
5 sed 替换内容
5.1 搜索并且在搜索内容后面添加:00
grep "[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}:[0-9]\{2\}\"" tmp.csv | sed "s/:[0-9][0-9]/&:00/g"
sed “s/11/&22/g” 在搜索到的内容后面添加22
sed “s/11/22&/g” 在搜索到的内容前面添加22
sed "s/$/&22/g"在搜索到的一行数据后面添加22
sed "s/^/22&/g"在搜索到的一行数据前面添加22