Shell筆記——系統管理

釋放系統緩存 來源

sync
echo 3 > /proc/sys/vm/drop_caches

 

記錄文件及目錄訪問

# 安裝工具
sudo yum install inotify-tools.x86_64

nohup inotifywait -m -r -e access,create,move,delete /home/vince --timefmt '%d/%m/%H:%M' --format '%T %w %f %e' &

<<COMMENT
輸出
Setting up watches. Beware: since -r was given, this may take a while!
Watches established.
09/08/10:41 /home/aurora/ ACCESS,ISDIR
09/08/10:41 /home/aurora/ ACCESS,ISDIR
09/08/10:41 /home/aurora/ sas CREATE
09/08/10:41 /home/aurora/ ACCESS,ISDIR
09/08/10:41 /home/aurora/ ACCESS,ISDIR
09/08/10:41 /home/aurora/ ACCESS,ISDIR
09/08/10:41 /home/aurora/ ACCESS,ISDIR
09/08/10:41 /home/aurora/ ACCESS,ISDIR
09/08/10:41 /home/aurora/ sas DELETE
COMMENT

 

終止掉正在鏈接的某個用戶

sudo pkill -kill -t pts/0

 

pam登錄次數過多限制

 

# 遠程ssh,第一行添加
/etc/pam.d/sshd

# 終端,第一行添加
/etc/pam.d/login
auth required pam_tally2.so deny=3 unlock_time=600 even_deny_root root_unlock_time=1200

# 查看用戶錯誤登錄次數,使用pam_tally2
pam_tally --user tom
pam_tally2 --user tom

# 重置用戶錯誤登錄次數
pam_tally2 --user tom --reset

  

 

收集登陸用戶信息

# 列出當前登陸主機的用戶列表
users

# 查看系統運行了多長時間
uptime

 

watch 監視命令輸出

# 默認間隔時間2秒
watch 'ls'

watch -n 5 'ls -l'

 

查看某個命令包含在哪一個包下

yum provides */nslookup

apt search ifconfig

 

向終端中全部的當前登陸用戶發送廣播消息

cat message | wall

# 向指定用戶發送消息
write hz pts/1
Hello world!

# 目錄/dev/pts中包含着與每一位系統終端中登陸用戶所對應的字符設備

 

logrotate 管理日誌文件

# logrotate 的配置目錄位於/etc/logrotate.d

# 爲本身的日誌文件(好比/var/log/program.log)編寫一個特定的配置
$ cat /etc/logrotate.d/program
/var/log/program.log {
missingok
notifempty
size 30k
compress
weekly
rotate 5
create 0600 root root
}


# logger命令默認把日誌輸出到/var/log/message中
# logger This is a test log line

 

電源監視工具 powertop (須要安裝)

# 查看電量使用狀況
powertop

# 生成html報表
powertop --html

 

檢查磁盤及文件系統錯誤

fsck /dev/sdb3

 

rsync 備份系統快照

rsync - a fast, versatile, remote (and local) file-copying tool

# 將源目錄複製到目的端
rsync -avz /home/slynux/data slynux@192.168.0.6:/home/backups/data
# -a    歸檔模式
# -v    顯示進度,詳細內容
# -z    傳輸時壓縮文件

# 在更新 rsync 備份時,刪除不存在的文件(默認狀況下, rsync 並不會在目的端刪除那些在源端已不存在的文件)
rsync -avz SOURCE DESTINATION --delete

# 按期進行備份(10小時備份一次)
crontab -e
0 */10 * * * rsync -avz /home/code user@IP_ADDRESS:/home/backups

 

彈出光盤,eject命令

# 彈出光盤
eject

# 合上光盤
eject -t

 

錄製終端

# 錄製(record)
script -t 2> timing.log -a output.session

# 回放(replay)
scriptreplay timing.log output.session

 

配置免驗證登陸

ssh-keygen -t rsa

# 修改受權文件權限
chmod 600 authorized_keys

 

配置登陸提示字符

vim /etc/motd

 

/proc目錄

# /proc 是一個在內存中的僞文件系統(pseudo filesystem)。在運行時訪問內核內部數據結構、改變內核設置的機制。
# 它只存在內存當中,而不佔用外存空間。它以文件系統的方式爲訪問系統內核數據的操做提供接口。
# 在/proc下還有三個很重要的目錄:net,scsi和sys。
# 系統中每個運行的進程在 /proc 中都有一個對應的目錄。目錄名和進程ID相同。

 

腳本 : 監測目錄變更 watchdir.sh

#!/bin/bash
# 文件名: watchdir.sh
# 用途: 監視目錄訪問,安裝inotify-tools
path=$1
# 將目錄或文件路徑做爲腳本參數
inotifywait -m -r -e access,create,move,delete $path

 

腳本 : 檢測入侵者 intruder_detect.sh

 

#!/bin/bash
#文件名:intruder_detect.sh
#用途:入侵報告工具,以auth.log做爲日誌文件
AUTHLOG=/var/log/auth.log

if [[ -n $1 ]];
then
    AUTHLOG=$1
    echo Using Log file : $AUTHLOG
fi
LOG=/tmp/valid.$$.log
grep -v "invalid" $AUTHLOG > $LOG
users=$(grep "Failed password" $LOG | awk '{ print $(NF-5) }' | sort | uniq)
printf "%-5s|%-10s|%-10s|%-13s|%-33s|%s\n" "Sr#" "User" "Attempts" "IP address" "Host_Mapping" "Time range"
ucount=0;
ip_list="$(egrep -o "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" $LOG | sort | uniq)"
for ip in $ip_list;
do
    grep $ip $LOG > /tmp/temp.$$.log
for user in $users;
do
    grep $user /tmp/temp.$$.log> /tmp/$$.log
    cut -c-16 /tmp/$$.log > $$.time
    tstart=$(head -1 $$.time);
    start=$(date -d "$tstart" "+%s");
    tend=$(tail -1 $$.time);
end=$(date -d "$tend" "+%s")
limit=$(( $end - $start ))
if [ $limit -gt 120 ];
then
    let ucount++;
    IP=$(egrep -o "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" /tmp/$$.log | head -1 );
    TIME_RANGE="$tstart-->$tend"
    ATTEMPTS=$(cat /tmp/$$.log|wc -l);
    HOST=$(host $IP | awk '{ print $NF }' )
    printf "%-5s|%-10s|%-10s|%-10s|%-33s|%-s\n" "$ucount" "$user" "$ATTEMPTS" "$IP" "$HOST" "$TIME_RANGE";
fi
done
done
rm/tmp/valid.$$.log/tmp/$$.log $$.time/tmp/temp.$$.log 2>/dev/null

 

腳本 : 找出系統中用戶的活躍時段 active_users.sh

#!/bin/bash
#用戶名: active_users.sh
#用途:查找活躍用戶
log=/var/log/wtmp
if [[ -n $1 ]];
then
log=$1
fi
printf "%-4s %-10s %-10s %-6s %-8s\n" "Rank" "User" "Start" "Logins" "Usage hours"
last -f $log | head -n -2 > /tmp/ulog.$$
cat /tmp/ulog.$$ | cut -d' ' -f1 | sort | uniq> /tmp/users.$$
(
while read user;
do
grep ^$user /tmp/ulog.$$ > /tmp/user.$$
minutes=0
while read t
do
s=$(echo $t | awk -F: '{ print ($1 * 60) + $2 }')
let minutes=minutes+s
done< <(cat /tmp/user.$$ | awk '{ print $NF }' | tr -d ')(')
firstlog=$(tail -n 1 /tmp/user.$$ | awk '{ print $5,$6 }')
nlogins=$(cat /tmp/user.$$ | wc -l)
hours=$(echo "$minutes / 60.0" | bc)
printf "%-10s %-10s %-6s %-8s\n" $user "$firstlog" $nlogins $hours
done< /tmp/users.$$
) | sort -nrk 4 | awk '{ printf("%-4s %s\n", NR, $0) }'
rm /tmp/users.$$ /tmp/user.$$ /tmp/ulog.$$
相關文章
相關標籤/搜索