UNIX/Linux

ログのローテーション

#!/bin/sh #logrotate.sh FILES="$HOME/log/foo $HOME/log/bar" MAX_LEVEL=6 MV=mv COMPRESS_CMD=gzip COMPRESS_SFX=.gz for file in ${FILES}; do level=${MAX_LEVEL} while [ ${level} -gt 1 ]; do dst="${file}.${level}${COMPRESS_SFX}" level=$(expr ${…

改行コード/文字コードを変換する

#!/bin/sh #dos2unix.sh filename file="$1" cat "${file}" \ | tr -d '\015' \ | iconv -f Shift_JIS -t EUC-JP > "${file}.tmp" mv "${file}.tmp" "${file}" #!/bin/sh #unix2dos.sh filename file="$1" CR=$(echo -ne '\015') cat "${file}" \ | sed 's/$…

コマンド履歴をふり返る

#!/bin/sh #bp_history.sh if [ "${HISTFILE}" == "" ]; then HISTFILE="${HOME}/.bash_history" fi if [ ! -f "${HISTFILE}" ]; then exit 0 fi cat "${HISTFILE}" \ | awk '{print $1;}' \ | sort \ | uniq -c \ | sort -nr

テキストファイルを一定のサイズに分割する

#!/bin/sh #splitter.sh -N [filename] N 分割する個数(1 < N < 個数) SPLIT=0 INFILE="" TMPDIR="/tmp" TMPFILE="splitter.sh" CAT="/bin/cat" TOUCH="/bin/touch" WC="/usr/bin/wc" RM="/bin/rm" #オプションの処理 if [ 0 -lt $# ]; then OPTTMP1="$1" OP…

小文字から大文字へ変換する

#!/bin/sh #lower.sh [filename] INFILE="-" #小文字を大文字に変換する関数 function tr_lower(){ local LLINE="$1" local LTMP1="" local LTMP2="" local LTMP3="" local LNLIN="" LTMP3="$LLINE" LTMP2="${LTMP3#?}" LTMP3="$LLINE" LTMP1="${LTMP3%${LTM…

小文字から大文字に変換する

#!/bin/sh #upper.sh [-t] [filename] -t 行頭のみ大文字に変換 INFILE="-" OPTIONS="t" TOP="FALSE" FLAG="TRUE" #小文字を大文字に変換する関数 function tr_upper(){ local LLINE="$1" local LTMP1="" local LTMP2="" local LTMP3="" local LNLIN="" LTMP…

拡張子がtxtのファイルから指定文字列を置換する

#!/bin/sh #changeText.sh [-d Directory] SrcString DistString OPTIONS="d:" FINDDIR="." TMPDIR="/tmp/" TMPFILE="changeText.tmp" DATE="/bin/date" FIND="/usr/bin/find" GREP="/usr/bin/grep" WC="/usr/bin/wc -l" CAT="/bin/cat" RM="/bin/rm -f" CP=…

拡張子がtxtのファイルから指定文字列を含むファイルを検索

#!/bin/sh #findText.sh [-d Directory] Searstring OPTIONS="d:" FINDDIR="." TMPDIR="/tmp/" TMPFILE="findText.tmp" DATE="/bin/date" FIND="/usr/bin/find" GREP="/usr/bin/grep" WC="/usr/bin/wc -l" CAT="/bin/cat" RM="/bin/rm -f" #オプションの処理…

スペースをタブに置換する

#!/bin/sh #sp2tab.sh [-s N] [filename...] Nタブストップの基準値(1以上で省略時は8) TABSTOP=8 MINTABSTOP=1 INFILE="-" OPTIONS="t:" #スペースをタブに変換する関数 function replace_sp(){ local LLINE="$1" local LTMP1="" local LTMP2="" local LTMP…

タブをスペースに置換する

#!/bin/sh #tab2sp.sh [-s N] [filename...] N タブを変換するスペースの文字数 TABSTOP=8 MINTABSTOP=1 INFILE="-" OPTIONS="s:" LSPACES={} #タブをスペースに変換する関数 function replace_tab(){ local LLINE="$1" local LTMP1="" local LTMP2="" local…

所有者のいないファイルを探す

#!/bin/sh #nouser.sh [ディレクトリ] dir=$1 [ -z "$1" ] && dir="/" nouser=`find $dir -nouser` nogroup=`find $dir -nogroup` if [ -n "$nouser" -o -n "$nogroup" ]; then cat <

コマンド実行時にバックアップを取る

#!/bin/sh #backup.sh コマンド(引数を含む) allarg=$* daytime=`date +%y%m%d_%H%M%S` shift #バックアップ処理 while [ -n "$1" ]; do if [ -f $1 ]; then cp -i $1 $1.~$daytime fi shift done #コマンドを実行 $allarg #allargの値を$1,$2...に戻す set …

一定量に達したファイルをgzipで圧縮する

#!/bin/sh #autogz.sh ファイルまたはディレクトリ名 [ファイルまたはディレクトリ名] limit="10000k" [ -z "$1" ] && exit 1 for name in `find $* -size +$limit` ; do echo "$name" gzip $name done $ ./autogz.sh a a $ ls a.gz

ファイルのスナップショットを作成する

#!/bin/sh #snapshot.sh [-d 作成先ディレクトリ] [-e] ファイル名 [ファイル名...] #-e は過去のスナップショットを削除する dir="." daytime=`date +%y%m%d_%H%M%S` while [ -n "$1" ]; do case $1 in -d) dir=$2 shift 2 ;; -e) erase=1 shift ;; *) base…

パスワードを生成する

#!/bin/sh #mkpasswd.sh [文字数] len=$1 [ -z $len ] && len="8" char='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#%&()-=^~\@<>?/+*;:_' i=1 while [ $i -le $len ]; do #1以上charの文字数以下の乱数を得る dm=$(( ( $RANDOM % ${…

ファイルを分割・統合する

#!/bin/sh #splitut.sh -s 分割するファイル名 [出力ディレクトリ] #splitut.sh -c 統合するファイル名 [出力ディレクトリ] byte=10k [ -z "$2" ] && exit 1 filename=`echo $2 | sed 's/.*\///'` [ -n "$3" ] && filename="$3/$filename" case $1 in -s) if…

指定したディレクトリから特定の文字列を含むファイルを検索する

#!/bin/sh #search.sh [-l] keyword dirname lflug=0 if [ "$1" = "-l" ]; then lflug=1 shift fi dir=$2 [ -z "$dir" ] && dir="." [ -z "$1" ] && exit 1 for filename in `find $dir`; do if ! expr "$filename" : '/dev' > /dev/null && \ ! expr "$file…

ゴミ箱を実現する

#!/bin/sh #trash.sh [-f] filename ファイルをゴミ箱に移動 #trash.sh -e ゴミ箱を空にする boxdir=~/trashbox case $1 in -e) echo -n "Do you empty a trash box? [y/n]: " read answer [ -z "$answer" ] && answer="n" if [ "$answer" = "y" -o "$answer…

ファイルの大文字を小文字にする

#!/bin/sh #rename.sh [-f] dirname arg="-i" if [ "$1" = "-f" ]; then arg="-f" shift fi dir=$1 [ -d $dir ] || exit 1 dir=`echo "$dir" | sed 's/\/$//'` for filename in `ls $dir`; do #ファイル名に大文字を含むか判定 if expr "$filename" : '.*[A-…

キーワードを含むmanページ閲覧

whatisall.sh keyword #!/usr/bin/sh if [ $# -ne 1 ]; then echo "Usage : whatisall.sh keyword" exit 1 fi trap 'exit 1' INT manpathdirlists=`manpath | tr ':' ' '` for manpathdir in $manpathdirlists; do for manlist in `locate $manpathdir`; do …

パーミッションを一括置換する

#!/bin/sh #change_perm.sh . f_askdir.sh . f_askstring.sh ask_directory 1 if [ $? -eq 1 ]; then exit 1 fi ask_string "Input Target Permission: " 0 MODE1=$_STR echo "Target Permission is \"${MODE1}\"" ask_string "Input Replace Permission: " …

ファイル名のスペースをアンダーバーに変更する

#!/usr/bin/bash checkexistingfile(){ find $1 -mindepth $depth -maxdepth $depth | wc -l } checkincludespacefile(){ find $1 -mindepth $depth -maxdepth $depth \ \( -name '* *' -o -name '* *' \) } IFS_DEF=$IFS IFS=" " for (( depth=1; `checkexi…

ディレクトリをバックアップする

#!/bin/sh #archivedir.sh #指定されたディレクトリの圧縮アーカイブを作成する maxarchivedir=10 compress=gzip progname=$(basename $0) if [ $# -eq 0 ]; then echo "Usage: $progname directory" >&2 exit 1 fi if [ ! -d $1 ]; then echo "${progname}:…

データのバックアップを行う

#!/bin/sh #backup.sh #指定された一連のディレクトリのインクリメンタルバックアップまたは #フルバックアップを行う。デフォルトでは出力を圧縮し日付を含むファイル名 #を付けて /tmp ティレクトリに置く。他のファイルやリムーバブルディスク #などのデ…

ログファイルをローテートする

#!/bin/sh #lotatelogs.sh #/var/log 内のログファイルをローテートする #ローテーションのスケジュールをログファイルごとに指定できるよう設定ファイルを用意する #設定ファイルでは次の書式でローテートの間隔を指定する。単位は日数。 # logfilename=dur…

名前で指定したプロセスにシグナルを送る

#!/bin/sh #killall.sh #デフォルトではスクリプトを実行したユーザーがオーナーになっているプロセスだけを #killする(実行ユーザーがrootの場合は除く)。プロセスに送るシグナルは #-s SIGNAL、ユーザーは-u userで、端末は-t ttyで指定する #-nフラグを指…

システムの日付と時刻を設定する

#!/bin/sh #setdate.sh #dateコマンドのフロントエンド。日付と時刻を簡単に設定できる askvalue(){ #$1=フィールド名,$2=デフォルト値 #$3=最大値,$4=必要な文字数/桁数 echo -n "$1 [$2] : " read answer if [ ${answer:=$2} -gt $3 ]; then echo "$0: $1 …

setuidプログラムを見つける

#!/bin/sh #findsuid.sh #システム上の全てのsetuidコマンドを調べて #書き込み可能かどうかをチェックし結果をわかりやすく表示する mtime="7" verbose=0 if [ "$1" = "-v" ]; then verbose=1 fi for match in $(find / -type f -perm -4000 -print); do if…

dfからの出力を読みやすくする

#!/bin/sh #newdf.sh awkscript="/tmp/newdf.sh.$$" #trap "rm -f awkscript" EXIT cat << 'EOF' > $awkscript function showunit(size) { mb = size / 1024; prettymb=(int(mb * 100)) / 100; gb = mb / 1024; prettygb=(int(gb * 100)) / 100; if ( substr…

ディスクの空き容量を調べる

#!/bin/sh #diskspace.sh tempfile="/tmp/available.$$" trap "rm -f $tempfile" EXIT cat << 'EOF' > $tempfile { sum += $4 } END { mb = sum / 1024 gb = mb /1024 printf "%.0f MB (%.2fGB) of available disk space\n", mb, gb } EOF df -k | awk -f $t…