(yyyy.mm.dd追記)
はじめに
CentOSサーバ構築でよく検索することを個人的な備忘録がてら残します。
「前に検索したなこれ・・・」と思ったものは逐一追加していきます。
コマンド関連
tarコマンドによる圧縮/解凍
参考文献:【 tar 】コマンド――アーカイブファイルを作成する/展開する
tar -zcvf xxxx.tar.gz 圧縮するディレクトリ # 圧縮
tar -zxvf xxxx.tar.gz # 解凍
※オプションの補足
- c:(圧縮のみ)新しいアーカイブを作成
- x:(解凍のみ)既存アーカイブより抽出
- f:アーカイブ指定
- v:詳細表示
trコマンドによる小文字大文字変換
tr '[:upper:]' '[:lower:]' # 大文字→小文字
tr '[:lower:]' '[:upper:]' # 小文字→大文字
nmtuiコマンドによるネットワーク設定
GUIのように設定できるコマンド
(構築時によく使うけどよく忘れるので備忘録がてら・・・)
スクリプト関連
シェルスクリプトテンプレート
要件
- 特定の入力ディレクトリ内のファイルに対して繰り返し処理
- 出力は特定のディレクトリ
- どこでも実行できるようにしたい
- 開始、終了がわかるようにログに書き出したい
- 出力ディレクトリ、ログは初期化
シェルスクリプトテンプレート
テンプレート
#!/bin/bash
## 処理概要 ####################################################################
# どういった処理かざっくりと書く
## 変数 ########################################################################
# カレントディレクトリ取得
SCRIPT_DIR=$(cd $(dirname $0); pwd)
# 出力ログ
LOG="${SCRIPT_DIR}/$(basename $0 ".sh")_$(date +%Y%m%d).log"
# 適当なディレクトリ
INPUT_DIR="${SCRIPT_DIR}/xxx"
# 出力ディレクトリ
OUTPUT_DIR="${SCRIPT_DIR}/xxx"
# 適当なディレクトリの数
LIST_NUM=$(ls ${INPUT_DIR} | wc -l)
## 本処理 ######################################################################
# ログ生成(初期化)
cat /dev/null > ${LOG}
# 出力ディレクトリ存在確認
# 無ければディレクトリ作成し、存在する場合はディレクトリ内初期化
if [ -e ${OUTPUT_DIR} ]; then
rm -rf ${OUTPUT_DIR}/*
else
mkdir ${OUTPUT_DIR}
fi
echo "$(date +%T) 処理開始(対象:${LIST_NUM}件)" >> ${LOG}
echo >> ${LOG}
# 入力ファイル取得
INPUT_ARRAY=$(find ${INPUT_DIR} -maxdepth 1 -type f)
# INPUTファイル分書き出し
for file in ${INPUT_ARRAY}
do
# 必要に応じてトリミング
# INPUT_NAME=$(basename ${file})
# いい感じの処理
COMMAND -i ${file} -o ${OUTPUT_DIR}/${INPUT_NAME} >> ${LOG} 2>&1
echo "$(date +%T) 処理完了:${INPUT_NAME}" >> ${LOG}
done
echo >> ${LOG}
echo "$(date +%T) 処理終了(総数:$(ls ${OUTPUT_DIR} | wc -l)件)" >> ${LOG}
echo "正常終了 LOG : ${LOG}"
特定ファイルの更新がされているかチェック
#!/bin/bash
## 処理概要 ####################################################################
# 第一引数のファイルのタイムスタンプを参照し、前回チェック時から
# 更新されているかどうか確認する
## 変数 ########################################################################
# カレントディレクトリ取得
SCRIPT_DIR=$(cd $(dirname $0); pwd)
# 出力ログ
LOG="${SCRIPT_DIR}/$(basename $0 ".sh")_$(date +%Y%m%d).log"
## 引数 ########################################################################
if [ $# -ne 1 ]; then
echo "実行するには2個の引数が必要です。
第一引数: 監視対象ファイル名"
exit 1
fi
## 本処理 ######################################################################
# ログ生成
echo "$(date +%T) 処理開始" >> ${LOG}
# 前回のタイムスタンプチェック結果があるか確認
# チェック結果がない場合、初回のためファイルを生成
if [ ! -e ${SCRIPT_DIR}/last_check_result ]; then
ls --full-time $1 | awk '{print $6"-"$7}' > ${SCRIPT_DIR}/last_check_result
echo "前回のチェック結果がないため、ファイル生成" >> ${LOG}
# ある場合、現在のタイムスタンプと比較する
else
# 今回の結果を取得
CHECK_RESULT=`ls --full-time $1 | awk '{print $6"-"$7}'`
# 前回の結果をファイルから取得
CHECK_RESULT_BEFORE=`cat ${SCRIPT_DIR}/last_check_result`
# 前回結果と今回の結果を比較し、差分がなければコマンドを実行
if [ ${CHECK_RESULT} = ${CHECK_RESULT_BEFORE} ]; then
# 更新されていなかったときに実行してほしいコマンドを入れてください!!!!
echo "$1 is not updated from ${CHECK_RESULT} "
# ログ書き出し
echo "$(date +%T) アラート:対象ファイルが更新されていないためコマンド実行 ※時刻:${CHECK_RESULT}" >> ${LOG}
# 更新されていたら、今回の結果を前回結果に置き換えその旨ログ出力
else
echo "${CHECK_RESULT}" > ${SCRIPT_DIR}/last_check_result
echo "$(date +%T) 更新確認 ※時刻:${CHECK_RESULT}" >> ${LOG}
fi
fi
echo "$(date +%T) 処理終了" >> ${LOG}