文档章节

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
粉丝 21
博文 135
码字总数 188789
作品 0
成都
程序员
私信 提问
Shell编程基础 shell的结构、执行及变量

12月27日任务 20.1 shell脚本介绍 20.2 shell脚本结构和执行 20.3 date命令用法 20.4 shell脚本中的变量 shell脚本介绍 shell是一种脚本语言,是一名运维工程师所必需掌握的最基本的能力。通...

robertt15
2018/12/27
0
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
Spark源码分析之Spark Shell(上)

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

青夜之衫
2017/12/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Django进阶 1.1 ORM基础—ORM 1.2.1 增删改查之查询 1.2.2 删改增 (1) 1.2.3 删改增 (2)

ORM基础 ORM是Django操作数据库的API,Django的作者将sql语句封装在里面供我们使用。 我们前面还提到过Django提供一个模拟数据库的工具,sqlite,供我们学习测试使用。 如果我们想使用mysql...

隐匿的蚂蚁
今天
1
0
Windows 上安装 Scala

在安装 Scala 之前需要先安装 Java 环境,具体安装的详细方法就不在这里描述了。 您可以自行搜索我们网站中的内容获得其他网站的帮助来获得如何安装 Java 环境的方法。 接下来,我们可以从 ...

honeymose
今天
3
0
数据库篇多表操作

第1章 多表操作 实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。且这些表的数据之间存在一定的关系...

stars永恒
今天
3
0
nginx日志自动切割

1.日志配置(Nginx 日志) access.log----记录哪些用户,哪些页面以及用户浏览器,IP等访问信息;error.log------记录服务器错误的日志 #配置日志存储路径:location / {      a...

em_aaron
昨天
5
0
java 反射

基本概念 RTTI,即Run-Time Type Identification,运行时类型识别。RTTI能在运行时就能够自动识别每个编译时已知的类型。   要想理解反射的原理,首先要了解什么是类型信息。Java让我们在运...

细节探索者
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部