「サーバー学習」shellの基本コマンド(uptime、find、crontab、catなど)

1.rootの最大のファイルを検索し、トップ10をリストする

[root@ip-172-31-5-226~]# find -type f -exec du -k {} \; | sort -nr | head -10
[root@ip-172-31-5-226~]# find -type f -exec du -k {} \; | sort -nr | tail -10
結果:
4492 ./.wp-cli/vendor/wp-cli/wp-cli/.git/objects/pack/pack-a619857a1dca5dc19a6d23b2f7a1e1c9d72e01c8.pack
1520 ./.wp-cli/vendor/rmccue/requests/.git/objects/pack/pack-2df70433818f2f9f0b039ab8798e1bb1c60ad463.pack
916 ./.wp-cli/composer.phar
588 ./.wp-cli/vendor/mustache/mustache/.git/objects/pack/pack-e99c2f26ef88dbb403bb37341b4f3a2eb59fb9d9.pack
528 ./.composer/cache/repo/https—packagist.org/p-provider-stale.json
512 ./.composer/cache/repo/https—packagist.org/p-provider-archived.json
496 ./.composer/cache/repo/https—packagist.org/p-provider-latest.json
480 ./.wp-cli/vendor/wp-cli/wp-cli/.git/objects/pack/pack-a619857a1dca5dc19a6d23b2f7a1e1c9d72e01c8.idx
404 ./.composer/cache/repo/https—packagist.org/p-provider-active.json
224 ./.wp-cli/vendor/rmccue/requests/library/Requests/Transport/cacert.pem
2.historyコマンドで出力回数10以内を出力
[root@ip-172-31-5-226~]# cat .bash_history | awk '{print $1}’ | sort | uniq -c | sort -nr | head -10
結果:
| sort -nr | head -10
268 ls
172 cd
72 vim
42 cat
30 df
29 mysql
25 uptime
25 cp
24 /etc/rc.d/init.d/nginx
23 chmod

3./etc/passwordの最後5行のユーザIDとユーザ名をリストする
[root@ip-172-31-5-226~]# tail -5 /etc/passwd | awk -F: '{print $3″ “$1}’
[root@ip-172-31-5-226~]# tail -5 /etc/passwd | awk -F: '{print “uid"$3″が"$1}’
結果:
497 memcached
496 mysql
97 dovecot
495 dovenull
500 lyg
4.システムのブート時間、過去1分、5分、15分以内平均負荷、結果をmydataに書き込む
[root@ip-172-31-5-226~]# uptime | awk '{print $1,$(NF-2),$(NF-1),$(NF) }’ | tr -d ',’ >>mydata
[root@ip-172-31-5-226~]# cat mydata
10:37:48 0.27 0.16 0.11

5.1分ごとにデータを収集する、「~/mydata」に書き込む
[root@ip-172-31-5-226]$ crontab -e
[root@ip-172-31-5-226]$ crontab -l
* * * * * uptime | awk '{print $1,$(NF-2),$(NF-1),$(NF) }’ | tr -d ',’ >>~/mydata
6.1分、5分、15分以内の平均負荷を収集したデータをグラフ化する
[root@ip-172-31-5-226~]# yum install gnuplot.x86_64 gnuplot-common.x86_64
[root@ip-172-31-5-226~]# gnuplot
gnuplot> set xdata time //x軸時間
gnuplot> set timefmt '%H%M%S’ //時間のフォーマット
gnuplot> set xlabel 'TIME’ //x軸
gnuplot> set ylabel 'AVERAGE’ //y軸
gnuplot> set xtics rotate
gnuplot> plot '~/mydata’ u 1:2 t '1-min’ with lines ,’~/mydata’ u 1:3 t '5-min’ with lines,’~/mydata’ u 1:4 t ’15-min’ with lines

 

7.gnuplotで描いたグラフを「*.png」拡張子を出力し、同時にデータを更新する
 7.1 スクリプトの内容
[root@ip-172-31-5-226~]# cat /opt/cpuload.gnuplot
#!/bin/bash
uptime | awk '{print $1,$(NF-2),$(NF-1),$(NF) }’ | tr -d ',’ >>/opt/mydata
gnuplot <<EOF
set terminal png tiny font '/usr/share/fonts/liberation/LiberationSans-Regular.ttf’
set output '/var/www/html/loadavg.png’
set xdata time
set timefmt '%H:%M:%S’
set xlabel 'TIME’
set format x '%H:%M’
set xtics rotate
set ylabel 'load average’
plot '/opt/mydata’ u 1:2 t '1-min’ with lines, '/opt/mydata’ u 1:3 t '5-min’ with lines,’/opt/mydata’ u 1:4 t ’15-min’ with lines
EOF
#注意:chmod +x /opt/cpuload.gnuplot

7.2 gnuplot.htmlのコード
[root@ip-172-31-5-226~]# cat /var/www/html/gnuplot.html
<html>
<h1>Performance Charts</h1>
<a href="/loadavg_startnews24.png">平均負荷</a>
</html>

7.3 crontab 内容
[root@ip-172-31-5-226~]# crontab -l
* * * * * uptime | awk '{print $1,$(NF-2),$(NF-1),$(NF) }’ | tr -d ',’ >>/opt/mydata
*/5 *

7.4 ページにアクセス
http://192.168.0.102/loadavg_startnews24.png

8.ルートディスク領域の使用量は50%より大きくかどうかチェックする
[root@ip-172-31-5-226~]# df | grep /$ | awk '{print $(NF-1)}’ | awk -F% '{if($1>50){print “50%使用量を超える"} else {print “50%使用量を超えない"}}’
50%使用量を超えない
9.すべてのプロセスのメモリ総量
root@ip-172-31-5-226~]# ps -eo rss | awk 'BEGIN {print “すべてのプロセスのmemory総計:"} /^ *[0-9]/ { rss_total += $1} END {print rss_total }’
すべてのプロセスのmemory総量:
337448
10.ホストIPとサブネットマスクを確認する
[root@ip-172-31-5-226~]# ifconfig br0 | grep “inet addr" | awk -F: '{print $2,$NF}’ | awk '{print $1″/"$3}’
192.168.1.233/255.255.255.0
11.「8、9、10」の情報を取得するスクリプト
コード下記:
root@ip-172-31-5-226opt]# cat case.sh
#!/bin/bash
echo -e "
\033[49;31;7m A \033[0m IP/submask
\033[49;32;7m B \033[0m Disk使用量
\033[49;33;7m C \033[0m memoryを使用したプロセの総量
"
read -p “項目を選択してください:" num

case $num in
a|A)
ifconfig br0 | grep “inet addr" | awk -F: '{print $2,$NF}’ | awk '{print $1″/"$3}’
;;
b|B)
df | grep /$ | awk '{print $(NF-1)}’ | awk -F% '{if($1>50){print “Disk使用量50%を超える"} else {print “Disk使用量50%を超えない"}}’
;;
c|C)
ps -eo rss | awk 'BEGIN {print “すべてのプロセスのmemory総量:"} /^ *[0-9]/ { rss_total += $1} END {print rss_total }’
;;
*)
echo “[A|B|C]を入力してください"
esac

shellscript

Posted by arkgame