文档章节

SHELL常用命令与脚本

eddy_linux
 eddy_linux
发布于 2015/11/05 02:58
字数 959
阅读 26
收藏 1
记录一下写的shell命令
 1.列出自己最常用的10个命令
[root@www script]# vim top10.sh
#!/bin/bash
#
#
printf  "COMMAND\tCOUNT\n"
cat ~/.bash_history|awk '{list[$1]++;} \
END \
    {for (i in list)\
    {printf("%s\t\t%d\n",i,list[i])\
    }\
}'|sort -nrk 2 |head

 [root@www script]# ./top10.sh 
COMMAND		COUNT
vim		141
./match_palindrome.sh		76
sh		66
ll		64
sed		56
echo		55
ipvsadm		30
yum		29
cd		26
ip		23
前面表示命令 后面表示使用次数说明一下sort -nrk 2 对第二列进行倒序排列

2.列出占用最近某个时间段cpu占用最多的10个进程

 [root@www script]# cat pcpu_usage.sh 
sec=3600
unit_time=60
steps=$(( $sec / $unit_time ))
echo "Watching Cpu usage...."
for ((i=0;i<steps;i++))
do
    ps -eo comm,pcpu|tail -n +2 >> /tmp/cpu_usage.$$
    sleep $unit_time
done
echo
echo "CPU eaters:"
cat /tmp/cpu_usage.$$|\
awk '
{ process[$1]+=$2; }
END{
    for (i in process)
    {
        printf("%-20s %s\n",i,process[i]);
    }
}'|sort -nrk 2|head
rm /tmp/cpu_usage.$$

[root@www script]# ./pcpu_usage.sh 
Watching Cpu usage....
CPU eaters:
sshd                       0.1
watchdog/0             0
vmmemctl                0
usbhid_resumer      0 
udevd                      0
tail                           0
sync_supers           0
scsi_eh_2               0
scsi_eh_1               0
scsi_eh_0               0
 说明sec=3600测试的总时间,unit_time=60时间间隔
表示总共测试3600s也就是一小时,每次检测间隔60s也就是一分钟这个可以根据自己的情况去设置

 
 3.入侵检测脚本
 [root@www script]# cat login_detech.sh 
#!/bin/bash
#
#
users=`grep -v "invalid" /var/log/secure|grep "Failed password"|awk '{print $(NF-5)}'|sort|uniq`
ip=`grep -v "invalid" /var/log/secure|egrep -o "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"|sort|uniq`
count=0
for i in $users
do
    countuser=`grep -v "invalid" /var/log/secure|grep "Failed password"|grep "$i"|wc -l`
    for j in $ip
    do
        countfailed=`grep -v "invalid" /var/log/secure|grep "Failed password"|grep "$i"|grep "$j"|wc -l`
        case $countfailed in
            0)
            continue     
            ;;
            *)
                startlogin=`grep -v "invalid" /var/log/secure|grep "Failed password"|grep "$i"|head -1|awk '{for(i=1;i<4;i++)printf $i "" FS;print ""}'`
                endlogin=`grep -v "invalid" /var/log/secure|grep "Failed password"|grep "$i"|tail -1|awk '{for(i=1;i<4;i++)printf $i "" FS;print ""}'`
                echo "============================"
                echo "User:$i"
                echo "IP:$j"
                echo "Login Failed:$countfailed"
                echo "Start Login Failed:$startlogin"
                echo "End Login Failed:$endlogin"
                echo "============================"
                echo
        esac
    done
done
[root@www script]# ./login_detech.sh 
============================
User:oracle
IP:192.168.1.100
Login Failed:3
Start Login Failed:Jul 13 23:09:53 
End Login Failed:Jul 13 23:13:49 
============================
============================
User:oracle
IP:192.168.1.202
Login Failed:2
Start Login Failed:Jul 13 23:09:53 
End Login Failed:Jul 13 23:13:49 
============================
============================
User:root
IP:192.168.1.100
Login Failed:5
Start Login Failed:Jul 13 22:46:42 
End Login Failed:Jul 13 22:46:57 
============================
这里我默认的是试用/var/log/secure文件来进行检测的 
 4.用户管理工具
[root@www script]# cat user_admin.sh 
#!/bin/bash
#
#
function usage()
{
    echo Usage:
    echo Add a new user
    echo $0 -adduser username password
    echo
    echo Remove an existing user
    echo $0 -deluser username
    echo
    echo Suspend a user account
    echo $0 -disable username
    echo
    echo Enable a suspend user account
    echo $0 -enable username
    echo
    echo Set expiry date for user account
    echo $0 -expiry username
    echo
    echo Change password for user account
    echo $0 -passwd username
    echo
    echo Create an existing user group
    echo $0 -newgroup groupname
    echo
    echo Remove an existing user group
    echo $0 -delgroup groupname
    echo
    echo Add a user to a group
    echo $0 -addgroup username groupname
    echo
    echo Show details about a user
    echo $0 --details username
    echo
    echo Show usage
    echo $0 -usage
    echo
    exit
    }
if [ $UID -ne 0 ];then
        echo "Run $0 as root"
        exit 2
fi
case $1 in 
    -adduser)
    [ $# -ne 3 ] && usage
    useradd $2 -p $3 -m
    ;;
    -deluser)
    [ $# -ne 2 ] && usage
    deluser $2 -p --remove-all-files
    ;;
    -shell)
    [ $# -ne 3 ] && usage
    chsh $2 -s $3
    ;;
    -disable)
    [ $# -ne 2 ] && usage
    usermod -L $2
    ;;
    -enable)
    [ $# -ne 2 ] && usage
    usermod -U $2
    ;;
    -expiry)
    [ $# -ne 3 ] && usage
    chage $2 -E $3
    ;;
    -passwd)
    [ $# -ne 2 ] && usage
    psswd $2
    ;;
    -newgroup)
    [ $# -ne 2 ] && usage
    addgroup $2
    ;;
    -delgroup)
    [ $# -ne 2 ] && usage
    delgroup $2
    ;;
    -addgroup)
    [ $# -ne 3 ] && usage
    addgroup $2 $3
    ;;
    -details)
    [ $# -ne 2 ] && usage
    finger $2
    chage -l $2
    ;;
    -usage)
    usage
    ;;
    *)
    usage
    ;;
esac


查看oracle用户的信息
[root@www script]# ./user_admin.sh -details oracle
./user_admin.sh: line 90: finger: command not found
Last password change					: Jul 13, 2014
Password expires					: never
Password inactive					: never
Account expires						: never
Minimum number of days between password change		: 0
Maximum number of days between password change		: 99999
Number of days of warning before password expires	: 7

查看使用说明
[root@www script]# ./user_admin.sh 
Usage:
Add a new user
./user_admin.sh -adduser username password
Remove an existing user
./user_admin.sh -deluser username
Suspend a user account
./user_admin.sh -disable username
Enable a suspend user account
./user_admin.sh -enable username
Set expiry date for user account
./user_admin.sh -expiry username
Change password for user account
./user_admin.sh -passwd username
Create an existing user group
./user_admin.sh -newgroup groupname
Remove an existing user group
./user_admin.sh -delgroup groupname
Add a user to a group
./user_admin.sh -addgroup username groupname
Show details about a user
./user_admin.sh --details username
Show usage
./user_admin.sh -usage


© 著作权归作者所有

共有 人打赏支持
eddy_linux
粉丝 19
博文 135
码字总数 188789
作品 0
成都
程序员
SHELL调试方法

如何调试Shell脚本 1) 检查语法错误: 一般来说我们可以通过修改shell脚本的源代码,令其输出相关的调试信息来定位错误,那有没有不修改源代码来调试shell脚本的方法呢?答案就是使用shell的...

xiaofengge315
2014/05/29
0
0
npm scripts 使用指南

Node 开发离不开 npm,而脚本功能是 npm 最强大、最常用的功能之一。 本文介绍如何使用 npm 脚本(npm scripts)。 一、什么是 npm 脚本? npm 允许在文件里面,使用字段定义脚本命令。 上面...

阮一峰
2016/10/11
0
0
Spark源码分析之Spark Shell(下)

继上次的Spark-shell脚本源码分析,还剩下后面半段。由于上次涉及了不少shell的基本内容,因此就把trap和stty放在这篇来讲述。 上篇回顾:Spark源码分析之Spark Shell(上) 总结一下,上面的...

青夜之衫
2017/12/04
0
0
写一个简易的shell脚本(一)

如果经常操作linux 或者配置文件的话以及平时开发和处理文本文件等,会有很多的重复工作,这时如果有一个简易的shell脚本,会大大提升工作的效率,因此我查阅了了一些资料,下载了shell脚本学...

江火似流萤
2016/12/14
41
0
Spark源码分析之Spark Shell(上)

终于开始看Spark源码了,先从最常用的spark-shell脚本开始吧。不要觉得一个启动脚本有什么东东,其实里面还是有很多知识点的。另外,从启动脚本入手,是寻找代码入口最简单的方法,很多开源框...

青夜之衫
2017/12/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

win32截屏并rgb24转yuv420

//最终f的内存布局为BGRA格式,需要保证buf长度足够(>w*h*4)void ScreenCap(void* buf, int w, int h){ HWND hDesk = GetDesktopWindow(); HDC hScreen = GetDC(hDesk); ......

styleman
48分钟前
1
0
php输出mysql取出的中文为??的问题

解决方法: @ $db=new mysqli(DB_HOST,DB_USER,DB_PASSWORD,DB_DB); $db->query("set names utf8");//添加此语句,可以解决问题...

Aomo
59分钟前
1
2
白话SpringCloud | 第五章:服务容错保护(Hystrix)

前言 前一章节,我们知道了如何利用RestTemplate+Ribbon和Feign的方式进行服务的调用。在微服务架构中,一个服务可能会调用很多的其他微服务应用,虽然做了多集群部署,但可能还会存在诸如网...

oKong
今天
2
0
【解惑】领略Java内部类的“内部”

内部类有两种情况: (1) 在类中定义一个类(私有内部类,静态内部类) (2) 在方法中定义一个类(局部内部类,匿名内部类) 1、私有内部类 —— 在方法之间定义的内部类,非静态 我们首先看看类中...

偶尔诗文
今天
1
0
sqlserver 2008 r2 直接下载地址(百度云)

之前下载的sqlserver2008发现不能附加,就卸载了,重新找到了sqlserver2008R2的百度云资源 卸载sqlserver2008还是有点麻烦,不过就是需要删除注册表中的信息 自己来回卸载了3次终于重装sqlse...

dillonxiao
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部