■ パーミッション一括変換
find /home/hoge -name \*.cgi -exec chmod 755 {} \;
find ./ -type d -exec chmod 777 {} \;
■ 文字コード一括変換
for f in `find ./ -name \*.php`;do echo $f;nkf -w --overwrite $f;done
■ ファイル名一括変換
.html → .ctp
cd 場所
for i in `ls`;do j=`echo $i | sed -e "s/\.html/.ctp/"`; mv $i $j;done
■ よく使う記号
| パイプ、左の値を右に渡す。
ex) grep hoge /home/ | grep hage 左の検索結果を右のgrepに
> ファイルに書き込み(ファイルが無ければ作る)。
ex) grep hoge /home/ | grep hage > text.dat 検索結果をtext.datと言うファイルに書き込む。
> text.dat こうすると空ファイルができる(になる)。
>> ファイルに追記。
ex) cat access_log.1 >> access_log.2 access_log1をaccess_log2の後ろに追記。
less ファイル名 ファイルの中身を表示
tail ファイル名 ファイルの中身のおしりを表示
ex) tail -f access_log
オプション-fをつけるとリアルタイムで表示されるのでaccess_logなんか見るときは便利。
■ 特定のファイルの数を調べる
例)hoge 以下にあるファイルで名前に php を含むもの
find ./hoge/ -type f|grep php|wc -l
■ コマンドラインで流す例
まず基本。
echo "hellow world!";
ループ
for i in 1 2 3;do echo $i;done
for i in `ls`;do du -h -s $i;done
MySQLとか
echo "select * from m_site"|mysql -u root -paaaaaa dbname > date.tsv
ループその2、引数の前をゼロ埋めしたいときなど
for i in `perl -e 'printf("%03d\n",$_) for 1..10'`;do perl hoge.pl $i;done
■ 2つのディレクトリ以下の全てのファイルの内容を比較
#!/bin/bash
for f in `find . -name "*.tpl" -print | grep '_e'`
do
g=`echo $f | sed -e 's/_e/_n/'`
h=`diff $f $g`
if [ -n "$h" ]
then
echo $f
echo $h
fi
done
■ ディレクトリ以下の全てのファイルの中身を置換え
#!/bin/bash
for f in `grep '/css/' /var/www/html/ -rls`
do
echo $f
/usr/bin/perl -i -pe 's{/css/}{/10css/}gxo' $f;
done
■ シェルスクリプトの書き方と実行方法
ファイルを作る
1行目に #!/bin/bash と書く
2行目以下にスクリプトを書く
sh ファイル名
■ 例
#!/bin/bash
echo '----------' >> watched_`date +%Y%m%d`.dat;
echo 'WATCHT( '`date +%H:%M`' )' >> watched_`date +%Y%m%d`.dat;
echo '----------' >> watched_`date +%Y%m%d`.dat;
echo 'uptime' >> watched_`date +%Y%m%d`.dat;
uptime >> watched_`date +%Y%m%d`.dat;
echo '----------' >> watched_`date +%Y%m%d`.dat;
echo 'free' >> watched_`date +%Y%m%d`.dat;
free >> watched_`date +%Y%m%d`.dat;
echo '----------' >> watched_`date +%Y%m%d`.dat;
echo 'df -h' >> watched_`date +%Y%m%d`.dat;
df -h >> watched_`date +%Y%m%d`.dat;
echo '----------' >> watched_`date +%Y%m%d`.dat;
echo 'netstat -at' >> watched_`date +%Y%m%d`.dat;
netstat -at >> watched_`date +%Y%m%d`.dat;
echo '----------' >> watched_`date +%Y%m%d`.dat;
echo 'ps aux' >> watched_`date +%Y%m%d`.dat;
ps aux >> watched_`date +%Y%m%d`.dat;