shell系統管理

背景知識shell

  對於 Linux 系統管理員來講,沒有比 shell 腳本編程更有用處的了。一般,Linux 系統管理員天天須要完成無數項任務,從監視系統磁盤空間和系統用戶到備份重要文件。Shell 腳本可讓系統管理員的工做變得很是輕鬆!使用簡單的 shell 腳本就能夠自動化執行全部基本的系統管理任務。編程

  管理計算機是個複雜的工做,具體來講系統管理員要作如下幾方面的工做:
  ①設置整個計算機系統,包括硬件和軟件,如安裝硬件設備、安裝操做系統和應用軟件、爲用戶建立帳戶、分配系統資源等。
  ②作適時的備份及須要時的恢復。
  ③操做系統、應用軟件、系統網絡的升級以及平常維護。
  ④爲用戶提供常規支持。
  在這些管理工做中, 若是能合理使用 shell 工具將使管理工做變得簡潔有效,從而能極大地提升管理效率。bash

 

一、查看當前目錄的父目錄網絡

#!/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 spa

#!/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經常使用命令選項code

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

-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 1 | head -5

 

 

10:設計一個shell程序,添加一個新組爲class1,而後添加屬於這個組的30個用戶,用戶名從stu1stu30

#!/bin/bash

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

 

 

11:編寫shell程序,實現自動刪除5個帳號的功能。帳號名爲stu1stu5

#!/bin/bash

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

 

 

12:在/userdata目錄下創建5個目錄,即user1user5

#!/bin/bash

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

 

 

13:設置上一個任務所創建的5個目錄(user1user5)的權限,其中其餘用戶的權限爲:讀;文件全部者的權限爲:讀、寫、執行;文件全部者所在組的權限爲:讀、執行

#!/bin/bash

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

 

 

14:得到環境變量PATH下全部目錄包含的文件個數

#!/bin/bash

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

 

 

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

sort默認是升序排列,-k是根據列來排列,-n按數值排序

#!/bin/bash

ls -Rl / 2>/dev/null|awk '{print $5,$9}'|sort -k1 -nr|head -10
# ls -Rl後的第一個/是表示從根目錄下找 沒有表示從當前目錄下找
# 2>/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 +10240`
do
    cp $file /tmp
done
ls -l /tmp

 

或者

#!/bin/bash

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

 

 

還有一篇shell,明天寫,累死了

相關文章
相關標籤/搜索