背景知识

  对于 Linux 系统管理员来说,没有比 shell 脚本编程更有用处的了。通常,Linux 系统管理员每天需要完成无数项任务,从监视系统磁盘空间和系统用户到备份重要文件。Shell 脚本可以让系统管理员的工作变得非常轻松!使用简单的 shell 脚本就可以自动化执行所有基本的系统管理任务。

  管理计算机是个复杂的工作,具体来说系统管理员要做以下几方面的工作:
  ①设置整个计算机系统,包括硬件和软件,如安装硬件设备、安装操作系统和应用软件、为用户创建账户、分配系统资源等。
  ②做适时的备份及需要时的恢复。
  ③操作系统、应用软件、系统网络的升级以及日常维护。
  ④为用户提供常规支持。
  在这些管理工作中, 如果能合理使用 shell 工具将使管理工作变得简洁有效,从而能极大地提高管理效率。

1、查看当前目录的父目录

#!/bin/bash

a=$(pwd)
echo ${a%/*}

2:将当前目录下所有文件按大小排序并将结果写入文本文件中

#!/bin/bash

# awk 'NR!=1表示去除第一行'
ls -l | awk 'NR!=1' |sort -n -k5>jishu
#awk'NR!=1'把第一行的总用量去掉 sort -k5把第五列排序
cat jishu

3:在当前目录下创建一个test_mkdir目录,在新建目录中创建一个文件test_file

#!/bin/bash

read -p "please input test_mkdir:" dir
if test -e $dir;then
echo "dir is exist"
exit
elif test "$dir" != "test_mkdir";then
echo "please input correct dir name"
rm -rf $dir
else
mkdir $dir && cd $dir && touch test_file
fi

4:读取文件的每一行(while)

#!/bin/bash

read -p  "please input your file : " file
cat $file | while read line
do
echo $line
done

5:读取文件的每一行(for),并将小写字母转为大写字母。

#!/bin/bash

read -p "input filename :" file
for line in $(cat $file) #$(cat $file)得到file的内容
do
upper=$(echo $line|tr '[a-z]' '[A-Z]') #得到每一行并转化为大写
echo $upper #输出
done

6:给定目录下文件/var/log/boot.log,提取该文件的目录名、文件名、扩展名

#!/bin/bash

a="/var/log/boot.log"
echo "目录名是:${a%/*}"
echo "文件名是:${a##*/}"
echo "扩展名是:${a##*.}" # */ 表示/前面所有的内容
# /* 表示/后面所有的内容
# *. 表示.前面所有的内容
# .* 表示.后面所有的内容

7:将/var/log目录归档压缩到~/backup目录中

#!/bin/bash

mkdir backup
ls /var/log
tar -czvf ~/backup/log.tar.gz /var/log

ps:tar常用命令选项

-c:创建 .tar 格式的包文件

-x:解开.tar格式的包文件

-v:输出详细信息

-z:调用gzip程序进行压缩或解压

-C:解包时指定释放的目标文件夹

-j:调用bzip2程序进行压缩或解压

-f:表示使用归档文件

-p:打包时保留原始文件及目录的权限

-t:列表查看包内的文件

8:将上一任务的log.tar.gz解压到/tmp中,并删除log.tar.gz文件

#!/bin/bash

ls /var/log
tar -xzvf ~/backup/log.tar.gz -C /tmp
rm /home/wj/backup/log.tar.gz

9:列出CPU占用率前五个的进程名、CPU占用率

#!/bin/bash

ps -aux | awk '{print $3,$11}' | sort -nr -k  | head -

10:设计一个shell程序,添加一个新组为class1,然后添加属于这个组的30个用户,用户名从stu1至stu30

#!/bin/bash

i=
groupadd class1
while [ $i -le ]
do
USERNAME=stu${i}
useradd -G class1 $USERNAME
i=$(($i+))
done

11:编写shell程序,实现自动删除5个账号的功能。账号名为stu1至stu5

#!/bin/bash

i=
while [ $i -le ]
do
  userdel -r stud${i}
  i=$(($i+ ))
done

12:在/userdata目录下建立5个目录,即user1~user5

#!/bin/bash

i=
while test $i -le 5
do
  mkdir -p /userdata/user"$i"
  i=$(($i+))
done

13:设置上一个任务所建立的5个目录(user1~user5)的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行

#!/bin/bash

i=
while test $i -le 5
do
sudo chmod /userdata/user"$i"
i=$(($i+))
done

14:获得环境变量PATH下所有目录包含的文件个数

#!/bin/bash

mypath=$(echo $PATH | sed 's/://g')
totalcnt=
cnt=
for dir in $mypath
do
lst=$(ls $dir)
cnt=
for item in $lst
do
cnt=$(($cnt+))
done
echo "$dir :$cnt"
totalcnt=$(($totalcnt+$cnt))
done
echo $totalcnt

15:找出/路径里面大小排名前十的文件

sort默认是升序排列,-k是根据列来排列,-n按数值排序

#!/bin/bash

ls -Rl / >/dev/null|awk '{print $5,$9}'|sort -k1 -nr|head -
# ls -Rl后的第一个/是表示从根目录下找 没有表示从当前目录下找
# >/dev/null表示把需要权限的警告放到/dev/null下

16:将当前目录下大于10K的文件/目录拷贝到/tmp目录下(用du命令)

du 的英文为:disk usage,含义是磁盘空间使用情况,功能是逐级进入指定目录的每一个子目录并显示该目录占用文件系统数据块的情况,如果没有指定目录,则对当前的目录进行统计。

#!/bin/bash

for file in `du -a |awk '$1>10240'`
do
cp $file /tmp
done
ls -l /tmp

17:将当前目录下大于10K的文件/目录拷贝到/tmp目录下(用find命令)

#!/bin/bash

for file in `find ./ -size +`
do
cp $file /tmp
done
ls -l /tmp

或者

#!/bin/bash

for file in `ls -l`
do
find . -size +10k
cp $file /tmp
done

还有一篇shell,明天写,累死了

shell系统管理的更多相关文章

  1. 系统管理中 bash shell 脚本常用方法总结

    在日常系统管理工作中,需要编写脚本来完成特定的功能,编写shell脚本是一个基本功了!在编写的过程中,掌握一些常用的技巧和语法就可以完成大部分功能了,也就是2/8原则 1. 单引号和双引号的区别 单引 ...

  2. linux 8 -- 管道组合Shell命令进行系统管理

    二十. 通过管道组合Shell命令获取系统运行数据: 1.  输出当前系统中占用内存最多的5条命令:     #1) 通过ps命令列出当前主机正在运行的所有进程.     #2) 按照第五个字段基于数 ...

  3. 收集的55个Linux系统管理中常用的一些shell命令

    .显示消耗内存/CPU最多的10个进程 代码如下: | tail | tail .查看进程 按内存从大到小排列 代码如下: ps -e -o "%C : %p : %z : %a" ...

  4. Unix/Linux系统管理技术手册学习笔记——shell

    创建日期:2016/02/29 更新日期:2016/02/29 shell变量赋值时不能在等号两边留空白,否则shell会把变量名误认为是命令名 双引号括起来的变量可以进行替换(用*和?这样的文件名匹 ...

  5. UNIX/Linux系统管理技术手册(1)----脚本和shell

    1. 管道和重定向 (i) 要让第二条命令只有在第一条命令成功完成之后才执行,可以用一个 && 符号把两条命令隔开.例如: $ > /dev/null && cd ...

  6. Unix/Linux环境C编程入门教程(39) shell命令之系统管理

    df命令 用于检测文件系统的磁盘空间占用和空余情况,可以显示所有文件系统对节点和磁盘块的使用情况.命令的使用格式如下: df  [选项] 常用参数及含义如下表所示. df -a:显示所有文件系统的磁盘 ...

  7. 学习 shell脚本之前的基础知识

    转载自:http://www.92csz.com/study/linux/12.htm  学习 shell脚本之前的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写sh ...

  8. 第9章 Shell基础(2)_Bash基本功能

    3. Bash的基本功能 3.1 历史命令与命令补全 (1)历史命令:#history [选项] [历史命令保存文件] ①选项:-c:清空历史命令: -w:把缓存中的历史命令写入文件~/.bash_h ...

  9. 【shell 大系】Linux Shell常用技巧

    在最近的日常工作中由于经常会和Linux服务器打交道,如Oracle性能优化.我们数据采集服务器的资源利用率监控,以及Debug服务器代码并解决其效率和稳定性等问题.因此这段时间总结的有关Linux ...

随机推荐

  1. JavaScript中变量、作用域和内存问题(JavaScript高级程序设计第4章)

    一.变量 (1)ECMAScript变量肯能包含两种不同的数据类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段,引用类型值指那些可能由多个值构成的对象. (2)基本数据类型是按值访问,可 ...

  2. 【02】一个实现h5的拖放的整个过程-魔芋

    [02]拖放的整个过程-魔芋   01,创建2个元素,一个为拖放元素dragEle,一个是存放的元素targetEle.添加一些样式.   <div class="dragEle&qu ...

  3. Linux内核设计与实现——读书笔记2:进程管理

    1.进程: (1)处于执行期的程序,但不止是代码,还包括各种程序运行时所需的资源,实际上进程是正在执行的 程序的实时结果. (2)程序的本身并不是进程,进程是处于执行期的程序及其相关资源的总称. (3 ...

  4. 毕业bg--hdu1881(01背包)

    http://acm.hdu.edu.cn/showproblem.php?pid=1881 01 背包  先按发起人离开的时间从小到大排序 然后再套01背包的模板 #include <iost ...

  5. python 爬虫(转,我使用的python3)

      原文地址:http://blog.csdn.net/pi9nc/article/details/9734437 [Python]网络爬虫(一):抓取网页的含义和URL基本构成 分类: 爬虫 Pyt ...

  6. Spoj 3267 DQUERY - D-query

    题目描述 English VietnameseGiven a sequence of n numbers a _{1}1​ , a _{2}2​ , ..., a _{n}n​ and a numbe ...

  7. java基础语法4--封装,继承,多态

    学习路线: 未封装==>封装==>继承==>多态==>抽象类 首先还是那句话,万物皆对象,对象有行为和属性. 一:封装 1.封装的概念: 信息隐蔽和对象的属性及操作结合成一个独 ...

  8. mysql写入数据乱码问题的解决

    mysql默认编码为latin. 我的mysql版本为5.6.安装路径下没有my.ini,但是有my-default.ini.其实mysql没有配置文件也是可以启动的,但是为了设置编码,需要将my-d ...

  9. Java中的数字

    以下内容引用自http://wiki.jikexueyuan.com/project/java/numbers.html: 通常情况下,当处理数字时,使用原始数据类型,如byte,int,long,d ...

  10. Linux OpenSSH后门的加入与防范

    引言:相对于Windows,Linux操作系统的password较难获取.只是非常多Linuxserver配置了OpenSSH服务.在获取root权限的情况下,能够通过改动或者更新OpenSSH代码等 ...