忍者ブログ

◆当blogは、Linuxサーバ構築する際の実際の設定手順を個人的メモとして記載しております。LinuC試験の役に立つ情報があるかも…?

LinuC(Linux技術者認定資格)&リナックスサーバ構築設定事例

   
カテゴリー「Shell Script」の記事一覧

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

【Linux】スクリプト用メモ

#=============================
# スクリプト用のメモ
#-----------------------------
# デバッグ用
set -eu
#-----------------------------
# デバッグモード
sh -x <スクリプトファイル>
sh -uvx <スクリプトファイル>
#-----------------------------
# 定義ファイル読込
source ./<変数の定義ファイル>
#-----------------------------
# 日時
echo `date "+%Y%m%d_%H%M%S"`
#-----------------------------
# /var/messagesに出力する
logger -p local0.info "<メッセージ文字列>"
#-----------------------------
# ファイルの中身を空にする
cp /dev/null <ファイル名>
PR

【Linux】cron用スクリプト

#!/bin/bash
###=============================
###【作業メモ】
### スクリプトの作成場所:/usr/local/bin/
### 実行コマンド:/usr/local/bin/SCRIPT_cron_backup.sh
### 対象ファイルのバックアップ
### 保存世代数は7個/保存対象外の世代は削除
### 毎日0時0分に実行
### crontab -e
### 0 0 * * * /usr/local/bin/SCRIPT_cron_backup.sh 2>&1 >/dev/null
###=============================
#-----------------------------
# 環境変数の設定
PATH=/usr/local/sbin:/usr/bin:/bin
#-----------------------------
#-----------------------------
# 日付取得
#-----------------------------
DATE_YYYYMMDD=`/bin/date --date '1 day ago' "+%Y%m%d"`
#-----------------------------
# バックアップ名
#-----------------------------
FILE_Name=BACKUP
#-----------------------------
# バックアップ名+日付
#-----------------------------
BACKUP_FILE_NAME=${FILE_Name}-${DATE_YYYYMMDD}
#-----------------------------
# ログファイルの場所
#-----------------------------
FILE_log=/usr/local/bin/script.log
#-----------------------------
# 対象ディレクトリ名
#-----------------------------
DIR_Target=/work/
#-----------------------------
# 保存場所のディレクトリ名
#-----------------------------
DIR_Output0=/backup/
DIR_Output1=/backup/${FILE_Name}
DIR_Output2=/backup/${BACKUP_FILE_NAME}
#-----------------------------
echo "=== バックアップ === 開始 ===" > $FILE_log 2>&1
#-----------------------------
#-----------------------------
# 毎日作成ディレクトリ(既に存在する場合はスキップ)
#-----------------------------
mkdir -p -m 777 ${DIR_Output1} >> ${FILE_log} 2>&1
mkdir -p -m 777 ${DIR_Output2} >> ${FILE_log} 2>&1
#-----------------------------
# 正規表現のパターンに該当するファイルだけをコピーする
#-----------------------------
\find ${DIR_Targe -name} "*_data*" | xargs -i cp -fp {} ${DIR_Output1} >> ${FILE_log} 2>&1
\find ${DIR_Targe -name} "*_data*" | xargs -i cp -fp {} ${DIR_Output2} >> ${FILE_log} 2>&1
#-----------------------------
# 古いバックアップを削除
#-----------------------------
cd ${DIR_Output0}
rm -fr `ls -t | grep "特定文字列1" | tail -n+8` >> ${FILE_log} 2>&1
rm -fr `ls -t | grep "特定文字列2" | tail -n+8` >> ${FILE_log} 2>&1
rm -fr `ls -t | grep "特定文字列3" | tail -n+8` >> ${FILE_log} 2>&1
#-----------------------------
echo "=== バックアップ === 終了 ===" >> ${FILE_log} 2>&1
#-----------------------------

【Shell Script】nmcli設定

▼▲▼【使い方】▼▲▼
 以下のように引数を付けてスクリプトを実行する
 change_ip_script.sh arg.txt

▼▲▼引数「arg.txt」の記述例▼▲▼
ens192,192.168.0.zzz/24,192.168.0.xxx,192.168.0.www
ens224,192.168.0.vvv/24,,
▼▲▼スクリプト「change_ip_script.sh」の内容▼▲▼
#!/bin/sh
#=============================
# | ■ 引数$1のテキストファイルの記述例
# | ens192,192.168.0.zzz/24,192.168.0.xxx,192.168.0.www
#=============================
# |  ■ 配列の設定値の例
# | 【配列0】ARRmnt[0]=<インタフェース名>
# | 【配列1】ARRmnt[1]=<IPアドレス/プレフィックス値>
# | 【配列2】ARRmnt[2]=<ゲートウェイ>
# | 【配列3】ARRmnt[3]=<DNSのアドレス>
#=============================
# 環境変数IFSで区切って配列変数に格納する
#-----------------------------
IFS=,
while read -a ARRmnt
  #-----------------------------
  # ■ 全行の内容表示
  # do echo ${ARRmnt[@]}
  #-----------------------------
  # ■ 変数に配列の値を格納
  IFNAME=ARRmnt[0]
  IPADDR=ARRmnt[1]
  IP_GW=ARRmnt[2]
  IP_DNS=ARRmnt[3]
  #-----------------------------
  # ■ 変更前の設定をファイル出力
  nmcli d show ${IFNAME} > /tmp/nmcli_device_show_${IFNAME}_1.txt
  #-----------------------------
  # ■ 設定変更(IPアドレス)
  if [ -n "${IPADDR}" ]; then
  nmcli c modify ${IFNAME} ipv4.method manual ipv4.address ${IPADDR}
  fi
  #-----------------------------
  # ■ 設定変更(GWアドレス)
  if [ -n "${IP_GW}" ]; then
    nmcli c modify ${IFNAME} ipv4.gateway ${IP_GW} ipv4.never-default no
  fi
  #-----------------------------
  # ■ 設定変更(DNS)
  if [ -n "${IP_DNS}" ]; then
    nmcli c modify ${IFNAME} ipv4.dns ${IP_DNS}
  fi
  #-----------------------------
  # ■ 設定反映
  nmcli c up ${IFNAME}
  #-----------------------------
  # ■ 変更後の設定をファイル出力
  nmcli d show ${IFNAME} > /tmp/nmcli_device_show_${IFNAME}_2.txt
  #-----------------------------
  # ■ 差分確認(修正箇所)
  diff /tmp/nmcli_device_show_${IFNAME}_[12].txt
#-----------------------------
# ■ 引数$1を読み込ませて必要行数分だけ実行を繰り返す
done < $1

【Shell Script】設定コピー取得

■ スクリプトの書き方
 #!/bin/bash ⇒ スクリプトの先頭行に必ず記入する
■ for文を1行で書いて実行する場合は以下のように記入する
 for aaa in $(ls /usr); do ls -ld /usr/$aaa; done
■ サーバの情報取得のスクリプト例
#=============================
# 情報取得用ディレクトリ作成
DATE=`date +%Y%m%d%H%M%S`
TMP_DIRECTORY="/tmp/_`hostname`_${DATE}"
mkdir -p ${TMP_DIRECTORY}
mkdir -p ${TMP_DIRECTORY}/OS
mkdir -p ${TMP_DIRECTORY}/MW
chmod -R 777 ${TMP_DIRECTORY}
#=============================
# 実行シェル情報
echo $SHELL > ${TMP_DIRECTORY}/shell.txt
echo $0 >> ${TMP_DIRECTORY}/shell.txt
#=============================
# 設定ファイル名表示
ls -laR --ignore=proc* / > ${TMP_DIRECTORY}/OS/ls-laR.txt
ls -lh ${TMP_DIRECTORY}/OS/ls-laR.txt
#=============================
# 配下のファイルを全部コピー
cd /
tar cf - ./etc | (cd ${TMP_DIRECTORY}/OS/ ; tar xf - )
tar cf - ./boot | (cd ${TMP_DIRECTORY}/OS/ ; tar xf - )
tar cf - ./usr/local/lib | (cd ${TMP_DIRECTORY}/MW/ ; tar xf - )
#=============================
# NetWork情報
ifconfig > ${TMP_DIRECTORY}/OS/ifconfig_ip.txt
ip addr >> ${TMP_DIRECTORY}/OS/ifconfig_ip.txt
netstat -rn > ${TMP_DIRECTORY}/OS/NETSTAT.txt
netstat -rn -A inet6 >> ${TMP_DIRECTORY}/OS/NETSTAT.txt
netstat -a >> ${TMP_DIRECTORY}/OS/NETSTAT.txt
netstat -a -A inet6 >> ${TMP_DIRECTORY}/OS/NETSTAT.txt
netstat -s >> ${TMP_DIRECTORY}/OS/NETSTAT.txt
netstat -s -A inet6 >> ${TMP_DIRECTORY}/OS/NETSTAT.txt
netstat >> ${TMP_DIRECTORY}/OS/NETSTAT.txt
route -n > ${TMP_DIRECTORY}/OS/route.txt
#=============================
# ログ設定
logrotate -dv /etc/logrotate.conf > ${TMP_DIRECTORY}/OS/logrotate.txt 2>&1
cp -p /var/lib/logrotate/logrotate.status ${TMP_DIRECTORY}/OS/logrotate.status
#=============================
# uptime情報
uptime > ${TMP_DIRECTORY}/OS/uptime.txt
#=============================
# ディスク情報
df -h > ${TMP_DIRECTORY}/OS/df_fdisk_swapon.txt
fdisk -l >> ${TMP_DIRECTORY}/OS/df_fdisk_swapon.txt
/sbin/swapon -s >> ${TMP_DIRECTORY}/OS/df_fdisk_swapon.txt
#=============================
# LVM情報
pvs > ${TMP_DIRECTORY}/OS/LVM.txt
pvdisplay -v >> ${TMP_DIRECTORY}/OS/LVM.txt
vgs >> ${TMP_DIRECTORY}/OS/LVM.txt
vgdisplay -v >> ${TMP_DIRECTORY}/OS/LVM.txt
lvs >> ${TMP_DIRECTORY}/OS/LVM.txt
lvdisplay -v >> ${TMP_DIRECTORY}/OS/LVM.txt
#=============================
# マウント情報
mount > ${TMP_DIRECTORY}/OS/mount.txt
#=============================
# ホスト名の設定
hostnamectl > ${TMP_DIRECTORY}/OS/HOSTNAME.txt
hostname >> ${TMP_DIRECTORY}/OS/HOSTNAME.txt
uname -a >> ${TMP_DIRECTORY}/OS/HOSTNAME.txt
hostid >> ${TMP_DIRECTORY}/OS/HOSTNAME.txt
#=============================
# rpmパッケージ情報
rpm -aq > ${TMP_DIRECTORY}/OS/RPM.txt
rpm -qa --list >> ${TMP_DIRECTORY}/OS/RPM.txt
rpm -qa --qf '%{name}-%{version}-%{release}.%{arch}.rpm\n' | sort >> ${TMP_DIRECTORY}/OS/RPM.txt
#=============================
# デバイス情報
lspci -vv > ${TMP_DIRECTORY}/OS/lspci.txt
dmidecode > ${TMP_DIRECTORY}/OS/dmidecode.txt
cat /proc/cpuinfo > ${TMP_DIRECTORY}/OS/CPUinfo.txt
cat /proc/meminfo > ${TMP_DIRECTORY}/OS/MEMinfo.txt
#=============================
cd ${TMP_DIRECTORY}
cd ..
#=============================
# tar zcvf _`hostname`_${DATE}.tar.gz ./_`hostname`_${DATE}
zip -r _`hostname`_${DATE}.zip ./_`hostname`_${DATE}

【Shell Script】情報表示取得

#=============================
#【実行日時の取得】
#-----------------------------
DATE=`date +%Y%m%d%H%M%S`
echo 【実行日時:${DATE}】
#=============================
#【情報取得用ディレクトリ作成】
#-----------------------------
mkdir -p "/tmp/ZIP_`hostname`_${DATE}"
chmod -R 777 "/tmp/ZIP_`hostname`_${DATE}"
cd /tmp/ZIP_`hostname`_${DATE}
pwd
ls -ltr
#=============================
#【情報取得用ファイルの初期化】
#-----------------------------
FILE_OS=`hostname`_OS_${DATE}.txt
FILE_NW=`hostname`_NW_${DATE}.txt
echo -n > ${FILE_OS}
echo -n > ${FILE_NW}
#=============================
#【定数設定】⇒ 区切り用の文字列を格納する
#-----------------------------
x_CONST=#*****************************
#=============================
#【変数設定】⇒ 改行区切りで格納する
#-----------------------------
x_LIST='# ★★★ 処理開始 ★★★ #
# ■ OS設定情報
cat /etc/redhat-release
uname -r
cat /etc/ssh/sshd_config | grep PermitRootLogin
cat /etc/ssh/sshd_config | grep AllowUsers
cat /etc/ssh/sshd_config | grep MaxStartups
getenforce
ip route | grep default
df -h
lsblk -l
cat /etc/fstab | grep -v "^#" | grep -v "^$"
rpm -qa | sort -f
systemctl get-default
systemctl -l --no-pager
cat /etc/profile | grep -v "^#" | grep -v "^$"
cat /etc/sysctl.conf | grep -v "^#" | grep -v "^$"
ls -l /var/log | grep core
cat /etc/kdump.conf | grep UUID
cat /etc/kdump.conf | grep -v "^#" | grep -v "^$"
cat /boot/grub2/grub.cfg | grep crashkernel
cat /etc/security/limits.conf | grep -v "^#" | grep -v "^$"
timedatectl status | grep zone
cat /etc/chrony.conf | grep -v "^#" | grep -v "^$"
systemctl list-unit-files -t service | grep chronyd
cat /etc/nsswitch.conf | grep -v "^#" | grep -v "^$"
cat /etc/rsyslog.conf | grep -v "^#" | grep -v "^$"
cat /etc/sysconfig/rsyslog | grep -v "^#" | grep -v "^$"
cat /etc/pam.d/login
cat /etc/pam.d/su
cat /etc/sudoers | grep -v "^#" | grep -v "^$"
cat /etc/rc.d/rc.local | grep -v "^#" | grep -v "^$"
# ★★★ 処理終了 ★★★ # '
#=============================
#【ループ処理】⇒ 読み込んだ行数分の処理を実行する
#-----------------------------
while read x_LINE
do
echo "${x_CONST}" >> ${FILE_OS}
echo "${x_LINE}" >> ${FILE_OS}
x_COMMAND=${x_LINE}
eval ${x_COMMAND}  >> ${FILE_OS}
done < <(echo "${x_LIST}")
#=============================
#【変数設定】⇒ 改行区切りで格納する
#-----------------------------
x_LIST_NW='# ★★★ 処理開始 ★★★ #
# ■ ネットワーク設定
ifconfig
ls -l /etc/sysconfig/network-scripts/
cat /etc/sysconfig/network-scripts/ifcfg-ens192
ip route
# ★★★ 処理終了 ★★★ # '
#=============================
#【ループ処理】⇒ 読み込んだ行数分の処理を実行する
#-----------------------------
while read x_LINE
do
echo "${x_CONST}" >> ${FILE_NW}
echo "${x_LINE}" >> ${FILE_NW}
x_COMMAND=${x_LINE}
eval ${x_COMMAND} >> ${FILE_NW}
done < <(echo "${x_LIST_NW}")
#=============================
#【ZIP圧縮、SCP転送】
#-----------------------------
cd /tmp
ls -l ZIP_`hostname`_${DATE}
zip -r ZIP_`hostname`_${DATE}.zip ZIP_`hostname`_${DATE}
chmod 777 ZIP_`hostname`_${DATE}.zip
ls -l /tmp/ZIP_`hostname`_${DATE}.zip
# ⇒⇒⇒ TeratermのSCP転送でダウンロードする
#scp /tmp/ZIP_`hostname`_${DATE}.zip 【ユーザ】@【IPアドレス】:/tmp/
cd /tmp
ls -ltr
rm -rf ZIP_`hostname`_${DATE}
rm -f ZIP_`hostname`_${DATE}.zip
ls -ltr

【Shell Script】デバッグ

#======================
# デバッグモードでスクリプトを動かす方法
#======================
#-----------------------------------
# シェルスクリプトのデバッグ方法
#-----------------------------------
bash -x <シェルスクリプト>
bash -v <シェルスクリプト>

【Shell Script】複数サーバへ同じスクリプトを流す

for HOST in $(cat /var/tmp/<リストファイル.lst> | grep -v "^#")
do echo ""
ssh -l <ユーザ名> $(echo $HOST | awk -F,'{print $1}') "sudo uname -a; sudo /opt/<スクリプト.sh>"
echo ""
done

更新日付

05 2025/06 07
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

RECOMMEND

プロフィール

HN:
Account
HP:
性別:
非公開
職業:
--- NODATA ---
趣味:
--- NODATA ---
自己紹介:
◆当blogは、Linuxサーバ構築する際の実際の設定手順を個人的メモとして記載しております。LinuC試験の役に立つ情報があるかも…?

リンク

 | HOME | 
Copyright ©  -- LinuC(Linux技術者認定資格)&リナックスサーバ構築設定事例 --  All Rights Reserved
Design by CriCri / Photo by Melonenmann / powered by NINJA TOOLS / 忍者ブログ / [PR]