文档章节

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
粉丝 20
博文 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
Shell编程基础篇-上

1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应用软件的核心大都涉及Shell脚本的内容。每一个合格 的L...

侯召顺
2017/12/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊storm的AggregateProcessor的execute及finishBatch方法

序 本文主要研究一下storm的AggregateProcessor的execute及finishBatch方法 实例 TridentTopology topology = new TridentTopology(); topology.newStream("spout1", spout......

go4it
40分钟前
1
0
大数据教程(7.5)hadoop中内置rpc框架的使用教程

博主上一篇博客分享了hadoop客户端java API的使用,本章节带领小伙伴们一起来体验下hadoop的内置rpc框架。首先,由于hadoop的内置rpc框架的设计目的是为了内部的组件提供rpc访问的功能,并不...

em_aaron
今天
1
0
CentOS7+git+github创建Python开发环境

1.准备CentOS7 (1)下载VMware Workstation https://pan.baidu.com/s/1miFU8mk (2)下载CentOS7镜像 https://mirrors.aliyun.com/centos/ (3)安装CentOS7系统 http://blog.51cto.com/fengyuns......

枫叶云
昨天
1
0
利用ibeetl 实现selectpicker 的三级联动

1. js 直接写在html页面上面,ibeetl 就可以动态地利用后台传上来的model List ,不需要每次点击都要ajax请求后台 2. 使用selectpicker 的时候,除了对selecct option的动态处理后,还需要 $("#...

donald121
昨天
1
0
Android SELinux avc dennied权限问题解决方法

1. 概述 SELinux是Google从android 5.0开始,强制引入的一套非常严格的权限管理机制,主要用于增强系统的安全性。 然而,在开发中,我们经常会遇到由于SELinux造成的各种权限不足,即使拥有“...

TreasureWe
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部