シェルスクリプトの最近のブログ記事
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
tarでのバックアップ
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[root@localhost ~]# tar zcvf $HOME/backup`date +%m%d`.tar.gz $HOME/ATBK5TH
tar: メンバ名から先頭の `/' を取り除きます
/home/admin/ATBK5TH/
/home/admin/ATBK5TH/atmarkit.ini
/home/admin/ATBK5TH/index.html
/home/admin/ATBK5TH/insert.php
/home/admin/ATBK5TH/update.ini
/home/admin/ATBK5TH/select.php
/home/admin/ATBK5TH/jscripts.ini
/home/admin/ATBK5TH/update.php
/home/admin/ATBK5TH/insert_form.ini
/home/admin/ATBK5TH/grant.sql
/home/admin/ATBK5TH/select_form.ini
/home/admin/ATBK5TH/ADDRESS.sql
/home/admin/ATBK5TH/image/
/home/admin/ATBK5TH/image/back.gif
/home/admin/ATBK5TH/image/0.gif
/home/admin/ATBK5TH/image/sakujo.gif
/home/admin/ATBK5TH/image/title1.gif
/home/admin/ATBK5TH/image/1shori.gif
/home/admin/ATBK5TH/image/title2.gif
/home/admin/ATBK5TH/image/henko.gif
/home/admin/ATBK5TH/image/xpress2.gif
/home/admin/ATBK5TH/image/line.gif
/home/admin/ATBK5TH/image/uketsuke.gif
/home/admin/ATBK5TH/image/kensaku.gif
/home/admin/ATBK5TH/delete.php
[root@localhost ~]# ls
ATBK5TH backup0105.tar.gz dumpbackup2 iptable_config_base.sh dumpbackup index.html.1 modsecurity_crs_20071222.conf source
[root@localhost ~]#
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
tarアーカイブの中身を確認する。 (tfオプション)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[root@localhost ~]# tar tf backup0105.tar.gz
home/admin/ATBK5TH/
home/admin/ATBK5TH/atmarkit.ini
home/admin/ATBK5TH/index.html
home/admin/ATBK5TH/insert.php
home/admin/ATBK5TH/update.ini
home/admin/ATBK5TH/select.php
home/admin/ATBK5TH/jscripts.ini
home/admin/ATBK5TH/update.php
home/admin/ATBK5TH/insert_form.ini
home/admin/ATBK5TH/grant.sql
home/admin/ATBK5TH/select_form.ini
home/admin/ATBK5TH/ADDRESS.sql
home/admin/ATBK5TH/image/
home/admin/ATBK5TH/image/back.gif
home/admin/ATBK5TH/image/0.gif
home/admin/ATBK5TH/image/sakujo.gif
home/admin/ATBK5TH/image/title1.gif
home/admin/ATBK5TH/image/1shori.gif
home/admin/ATBK5TH/image/title2.gif
home/admin/ATBK5TH/image/henko.gif
home/admin/ATBK5TH/image/xpress2.gif
home/admin/ATBK5TH/image/line.gif
home/admin/ATBK5TH/image/uketsuke.gif
home/admin/ATBK5TH/image/kensaku.gif
home/admin/ATBK5TH/delete.php
[root@localhost ~]#
[root@localhost ~]#
━━━━━━━━━━━━━━━━━━━━━━━━━━
for文やwhile文にて繰り返し,部分はdo~doneとして定義する。
━━━━━━━━━━━━━━━━━━━━━━━━━━
以下の文は,3分毎にログファイル末尾10桁を表示している。
[root@localhost ~]# ps -Af | grep cron
root 2278 1 0 21:18 ? 00:00:00 crond
root 3305 3240 0 22:44 pts/0 00:00:00 grep cron
[root@localhost ~]# /var/spool/cron/root ← ユーザー毎にcrontabの設定をする。
書式
<分> <時> <日> <月> <曜日> <コマンド>
<分> 0~59までの整数
<時> 0~23までの整数
<日> 1~31までの整数
<月> 1~12までの整数
<曜日> 0~7までの整数 (0,7 : 日曜~6:土曜日)
<コマンド> 実行するコマンド,シェルスクリプトなど。
(日次例)
23時45分に毎日実行
45 23 * * * /home/admin/filechk.sh
(週次例)
月曜日の9時と12時に実行 (複数の値を指定しているので,","で9時と12時を区切っています。
0 9,12 * * 1 /home/admin/filechk.sh
(2時間毎)
2時間毎にジョブを実行 (2分,2時間などと設定する場合は,"*/2"のように設定します。
0 */2 * * * /home/admin/filechk.sh
システム用のcrontabファイル(/etc/crontab)もあります。このファイルでは実行ユーザー名の指定をします。
/etc/cron.deny /etc/crontab
/etc/cron.d:
/etc/cron.daily:
/etc/cron.hourly:
/etc/cron.monthly:
/etc/cron.weekly:
※システムダウン中に実行されるべきジョブがシステム復旧後に自動的に実行されるようにするには,
anacronを利用します。
[root@localhost ~]# cat /etc/anacrontab
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
1 65 cron.daily run-parts /etc/cron.daily
7 70 cron.weekly run-parts /etc/cron.weekly
30 75 cron.monthly run-parts /etc/cron.monthly
[root@localhost ~]#
おまけ:
ジョブを一回実行する場合は,ATコマンドを利用します。
対話モード
[root@localhost ~]# at 23:40
at> /sbin/shutdown -h now
at> <EOT> ←Ctrl+Dで終了
job 1 at 2007-11-25 23:40
[root@localhost ~]# at -l
1 2007-11-25 23:40 a root
[root@localhost ~]#
『結果 ↓ 無事に実行されました。』
[root@localhost ~]# date
2007年 11月 25日 日曜日 23:40:00 JST
[root@localhost ~]#
Broadcast message from root (Sun Nov 25 23:40:00 2007):
The system is going down for system halt NOW!
非対話モード
[root@localhost ~]# at -f /home/admin/at.sh 23:30job 2 at 2007-11-25 23:30
[root@localhost ~]# at -l
1 2007-11-25 23:40 a root
2 2007-11-25 23:30 a root
[root@localhost ~]#
真夜中:midnight 今日:today 明日:tomorrow 2日後:now + 2days 2週間後の10時PM: 22:00 + 2weeks
※ at -dコマンドで実行中のジョブを削除出来ます。
※ atqコマンド, atrmコマンド
cronやatのアクセス制御
/etc/cron.allow ← 登録されたユーザーのみCronを利用出来る。
/etc/cron.deny ← cron.allowが無ければ,cron.denyに記述されていない全てのユーザーが利用出来る。
※どちらのファイルも無ければ,全てのユーザーがcronを利用出来る。
/etc/at.allow
/etc/at.deny
※どちらのファイルも無ければ,rootだけがatを利用出来る。
[admin@localhost extra]$ grep -v ^# httpd-info.conf
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from .example.com
</Location>
<Location /server-info>
SetHandler server-info
Order deny,allow
Deny from all
Allow from .example.com
</Location>
[admin@localhost extra]$ egrep -v -e "#" httpd-info.conf
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from .example.com
</Location>
<Location /server-info>
SetHandler server-info
Order deny,allow
Deny from all
Allow from .example.com
</Location>
[admin@localhost extra]$
[admin@localhost extra]$ egrep -e "SetHandler" httpd-info.conf
SetHandler server-status
SetHandler server-info
[admin@localhost extra]$
バッチを組むときに使える,testコマンド
[root@localhost ~]# test -f t; echo $? <----ファイルが無い
1
[root@localhost ~]# test -f lslink ; echo $? <----ファイルが有る
0
[root@localhost ~]#
==========================================================
testコマンド
説明
test は条件式 expr を評価した結果によって、 0 (真) または 1 (偽) を終了ステータスとして返す。
式 の各部分はそれぞれ分離された引数でなければならない。式は単項式あるいは二項式である。 test はファイ
ルのステータス調査、文字列操作、数値の比較演算を行うことができる。
ほとんどのシェルには同名の組み込みコマンドがあるので、単に 'test' として実行すると、ここで記述され た
ものとは異なった機能のものが実行されるだろう。
ファイル形式のテスト
-b file
file が存在し、ブロックスペシャルファイルであれば真。
-c file
file が存在し、キャラクタスペシャルファイルであれば真。
-d file
file が存在し、ディレクトリであれば真。
-f file
file が存在し、通常ファイル (regular file) であれば真。
-h file
-L file
file が存在し、シンボリックリンクであれば真。
-p file
file が存在し、名前付きパイプ (named pipe) であれば真。
-S file
file が存在し、ソケットであれば真。
-t [fd]
fd が端末でオープンされていれば真。 fd が省略された場合のデフォルト値は 1 (標準出力)。
ファイルのパーミッションのテスト
-g file
file が存在し、set GID されていれば真。
-k file
file が存在し、 sticky ビットが立っていれば真。
-r file
file が存在し、読み取り可能であれば真。
-u file
file が存在し、 set SUID されていれば真。
-w file
file が存在し、書き込み可能であれば真。
-x file
file が存在し、実行可能であれば真。
-O file
file が存在し、現在の実効ユーザー id による所有であれば真。
-G file
file が存在し、現在の実効グループ id による所有であれば真。
ファイル特性のテスト
-e file
file が存在すれば真。
-s file
file が存在し、サイズが 0 より大きければ真。
file1 -nt file2
file1 が file2 より (修正時刻で比較して) 新しければ真。
file1 -ot file2
file1 が file2 より古ければ真。
file1 -ef file2
file1 と file2 のデバイス番号と i-ノード番号が共に等しければ真。
文字列のテスト
string
-n string
string の長さが 0 より大きければ真。
-z string
string の長さが 0 であれば真。
string1 = string2
二つの文字列が等しければ真。
string1 != string2
二つの文字列が等しくなければ真。
数値のテスト
arg1 OP arg2
OP は -eq, -ne, -lt, -le, -gt, -ge のいずれか。これらの代数二項演算子は、それぞれ arg1 が arg2
(に等しい、に等しくない、より小さい、より小さいか等しい、より大きい、より大きいか等しい) 条 件
を 満たせば真。 arg1 および arg2 は正の整数、負の整数をとることができる。また -l string という
特殊な式を指定することもでき、この場合は string の長さとなる。
テストの論理結合
! expr expr が偽であれば真。
expr1 -a expr2
expr1 と expr2 の両方が真であれば真。
expr1 -o expr2
expr1 か expr2 のどちらかが真であれば真。
==========================================================
############################################
(例) 以下のような内容でバッチを作成してみる。
############################################
[root@localhost ~]# cat filechk.sh
#!/bin/bash
if test -f lsld
then
echo "ファイルがありました。シェルを実行します"
./lsld
else
"スクリプトが存在しませんでした,処理を中止いたします"
fi
[root@localhost ~]#
↓ 実行
[root@localhost ~]# ./filechk.sh
ファイルがありました。シェルを実行します
Link Files
Directories
drwxr-xr-x 2 admin admin 4096 10月 4 21:11 Desktop
drwxr-xr-x 4 root root 4096 10月 8 00:16 postsource
drwxr-xr-x 3 root root 4096 10月 27 01:50 source
[root@localhost ~]#
追記: test = [ ] コマンドです。
[root@localhost ~]# cat filechk2.sh
#!/bin/bash
if [ -f lsld ]
then
echo "ファイルがありました。シェルを実行します"
./lsld
else
"スクリプトが存在しませんでした,処理を中止いたします"
fi
[root@localhost ~]# ./filechk2.sh
ファイルがありました。シェルを実行します
Link Files
Directories
drwxr-xr-x 2 admin admin 4096 10月 4 21:11 Desktop
drwxr-xr-x 3 admin admin 4096 8月 12 2002 atmarkit5th
drwxr-xr-x 4 root root 4096 10月 8 00:16 postsource
drwxr-xr-x 3 root root 4096 10月 27 01:50 source
drwxr-xr-x 5 1000 1000 4096 5月 12 2007 vim71
[root@localhost ~]#
[root@localhost ~]# cat lsld <-----サンプルシェルスクリプト
ls -l $1 > lslink
echo "Link Files"
grep '^l' lslink
echo "Directories"
grep '^d' lslink
[root@localhost ~]#
[root@localhost etc]# source lsld <-----(「sourceコマンド」, 「. lsld」, 「./lsldなど(chmod755後)」)
Link Files
lrwxrwxrwx 1 root root 22 10月 5 04:31 grub.conf -> ../boot/grub/grub.conf
lrwxrwxrwx 1 root root 11 10月 5 03:27 init.d -> rc.d/init.d
lrwxrwxrwx 1 root root 7 10月 5 03:47 rc -> rc.d/rc
lrwxrwxrwx 1 root root 13 10月 5 03:47 rc.local -> rc.d/rc.local
lrwxrwxrwx 1 root root 15 10月 5 03:47 rc.sysinit -> rc.d/rc.sysinit
lrwxrwxrwx 1 root root 10 10月 5 03:47 rc0.d -> rc.d/rc0.d
lrwxrwxrwx 1 root root 10 10月 5 03:47 rc1.d -> rc.d/rc1.d
lrwxrwxrwx 1 root root 10 10月 5 03:47 rc2.d -> rc.d/rc2.d
lrwxrwxrwx 1 root root 10 10月 5 03:47 rc3.d -> rc.d/rc3.d
lrwxrwxrwx 1 root root 10 10月 5 03:47 rc4.d -> rc.d/rc4.d
lrwxrwxrwx 1 root root 10 10月 5 03:47 rc5.d -> rc.d/rc5.d
lrwxrwxrwx 1 root root 10 10月 5 03:47 rc6.d -> rc.d/rc6.d
lrwxrwxrwx 1 root root 11 10月 5 03:29 rmt -> ../sbin/rmt
Directories
drwxr-xr-x 2 root root 4096 3月 15 2007 NetworkManager
drwxr-xr-x 8 root root 4096 10月 5 04:31 X11
drwxr-xr-x 4 root root 4096 10月 5 03:59 acpi
drwxr-xr-x 4 root root 4096 10月 5 03:38 alsa
drwxr-xr-x 2 root root 4096 10月 5 04:22 alternatives
drwxr-x--- 2 root root 4096 10月 5 03:51 audit
drwxr-xr-x 4 root root 4096 10月 5 03:47 avahi
drwxr-xr-x 2 root root 4096 11月 10 22:19 blkid
drwxr-xr-x 2 root root 4096 10月 5 03:59 bluetooth
drwxr-xr-x 2 root root 4096 10月 5 03:29 bonobo-activation
drwx------ 2 root root 4096 3月 15 2007 cron.d
drwxr-xr-x 2 root root 4096 10月 5 04:04 cron.daily
drwxr-xr-x 2 root root 4096 1月 6 2007 cron.hourly
drwxr-xr-x 2 root root 4096 10月 5 03:34 cron.monthly
drwxr-xr-x 2 root root 4096 10月 5 03:45 cron.weekly
drwxr-xr-x 5 root lp 4096 10月 5 03:48 cups
drwxr-xr-x 3 root root 4096 10月 5 03:39 dbus-1
drwxr-xr-x 2 root root 4096 10月 5 03:37 default
drwxr-xr-x 2 root root 4096 10月 5 03:38 depmod.d
drwxr-xr-x 2 root root 4096 1月 6 2007 desktop-profiles
drwxr-xr-x 3 root root 4096 10月 5 03:52 dev.d
drwxr-xr-x 2 root root 4096 10月 5 03:59 firmware
drwxr-xr-x 4 root root 4096 10月 5 03:37 fonts
drwxr-xr-x 2 root root 4096 10月 5 03:49 foomatic
drwxr-xr-x 2 root root 4096 10月 5 04:26 gaim
drwxr-xr-x 6 root root 4096 10月 5 03:39 gconf
drwxr-xr-x 7 root root 4096 10月 5 04:12 gdm
drwxr-xr-x 2 root root 4096 10月 5 04:18 ghostscript
drwxr-xr-x 4 root root 4096 1月 7 2007 gimp
drwxr-xr-x 3 root root 4096 10月 5 04:04 gnome-vfs-2.0
drwxr-xr-x 2 root root 4096 10月 5 04:08 gre.d
drwxr-xr-x 3 root root 4096 10月 5 03:40 gtk-2.0
drwxr-xr-x 3 root root 4096 10月 5 03:52 hal
drwxr-xr-x 2 root root 4096 10月 5 03:30 iproute2
drwxr-xr-x 2 root root 4096 10月 14 03:01 ld.so.conf.d
drwxr-xr-x 2 root root 4096 10月 14 17:57 logrotate.d
drwxr-xr-x 4 root root 4096 10月 5 04:02 logwatch
drwxr-xr-x 2 root root 4096 10月 5 03:57 lsb-release.d
drwxr-xr-x 4 root root 4096 10月 14 22:52 lvm
drwxr-xr-x 2 root root 4096 10月 5 03:49 mail
drwxr-xr-x 2 root root 4096 10月 5 03:52 makedev.d
drwxr-xr-x 2 root root 4096 10月 5 03:34 mgetty+sendfax
drwxr-xr-x 2 root root 4096 10月 5 03:38 modprobe.d
drwxr-xr-x 2 root root 4096 10月 5 03:42 netplug
drwxr-xr-x 2 root root 4096 10月 5 03:42 netplug.d
drwxr-xr-x 2 root root 4096 10月 5 04:23 ntp
drwxr-xr-x 2 root root 4096 1月 6 2007 oddjob
drwxr-xr-x 2 root root 4096 10月 5 04:11 oddjobd.conf.d
drwxr-xr-x 3 root root 4096 10月 5 03:37 openldap
drwxr-xr-x 2 root root 4096 3月 30 2007 opt
drwxr-xr-x 2 root root 4096 11月 10 02:38 pam.d
drwxr-xr-x 2 root root 4096 10月 5 03:59 pam_pkcs11
drwxr-xr-x 3 root root 4096 10月 5 03:38 pango
drwxr-xr-x 2 root root 4096 10月 5 03:57 pcmcia
drwxr-xr-x 6 root root 4096 10月 5 03:37 pki
drwxr-xr-x 5 root root 4096 10月 5 03:48 pm
drwxr-xr-x 3 root root 4096 10月 5 03:58 ppp
drwxr-xr-x 2 root root 4096 10月 5 04:04 profile.d
drwxr-xr-x 3 root root 4096 10月 5 03:59 racoon
drwxr-xr-x 10 root root 4096 10月 5 03:47 rc.d
drwxr-xr-x 2 root root 4096 10月 5 04:02 readahead.d
drwxr-xr-x 2 root root 4096 10月 5 04:05 reader.conf.d
drwxr-xr-x 2 root root 4096 10月 5 03:57 redhat-lsb
drwxr-xr-x 3 root root 4096 10月 5 03:58 rhgb
drwxr-xr-x 2 root root 4096 10月 5 03:57 rpm
drwxr-xr-x 2 root root 4096 3月 22 2007 rwtab.d
drwxr-xr-x 2 root root 4096 10月 5 03:48 samba
drwxr-xr-x 2 root root 4096 10月 5 04:22 sane.d
drwxr-xr-x 2 root root 4096 1月 7 2007 sasl2
drwxr-xr-x 2 root root 4096 10月 5 03:40 scim
drwxr-xr-x 4 root root 4096 10月 5 03:47 security
drwxr-xr-x 3 root root 4096 10月 14 16:53 selinux
drwxr-xr-x 2 root root 4096 10月 5 03:58 setuptool.d
drwxr-xr-x 2 root root 4096 10月 5 03:59 sgml
drwxr-xr-x 2 root root 4096 10月 5 03:55 skel
drwxr-xr-x 2 root root 4096 3月 15 2007 smrsh
drwxr-xr-x 3 root root 4096 3月 15 2007 sound
drwxr-xr-x 2 root root 4096 10月 4 21:26 ssh
drwxr-xr-x 2 root root 4096 1月 7 2007 stunnel
drwxr-xr-x 2 root root 4096 3月 15 2007 subversion
drwxr-xr-x 10 root root 4096 10月 14 22:52 sysconfig
drwxr-xr-x 4 root root 4096 10月 5 03:52 udev
drwxr-xr-x 2 root root 4096 10月 5 03:41 w3m
drwxr-xr-x 2 root root 4096 10月 5 03:50 wpa_supplicant
drwxr-xr-x 4 root root 4096 10月 5 03:42 xdg
drwxr-xr-x 2 root root 4096 10月 5 04:02 xinetd.d
drwxr-xr-x 2 root root 4096 10月 5 03:59 xml
drwxr-xr-x 3 root root 4096 10月 5 03:59 yum
drwxr-xr-x 2 root root 4096 4月 4 2007 yum.repos.d
[root@localhost etc]#
