{"id":4748,"date":"2021-08-18T13:54:17","date_gmt":"2021-08-18T04:54:17","guid":{"rendered":"\/blog\/?p=4748"},"modified":"2023-09-21T09:26:31","modified_gmt":"2023-09-21T00:26:31","slug":"%ed%8c%8c%ec%9d%bc-%eb%b3%b5%ec%82%ac-%eb%b0%a9%ec%8b%9d%ec%9d%98-patch-%ec%8a%a4%ed%81%ac%eb%a6%bd%ed%8a%b8","status":"publish","type":"post","link":"https:\/\/hasu0707.duckdns.org\/blog\/?p=4748","title":{"rendered":"\ud30c\uc77c \ubcf5\uc0ac \ubc29\uc2dd\uc758 patch \uc2a4\ud06c\ub9bd\ud2b8"},"content":{"rendered":"\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#!\/bin\/bash\n###########################################################\n#\n# \ud2b9\uc815 \ud30c\uc77c \ub610\ub294 \ub514\ub809\ud1a0\ub9ac\ub97c \ub36e\uc5b4 \uc4f0\ub294 \ubc29\uc2dd\uc758\n# \ud328\uce58\ub97c \uc801\uc6a9\ud558\uae30 \uc704\ud55c \uc2a4\ud06c\ub9bd\ud2b8\n#\n###########################################################\nLANG=\"ko_KR.UTF-8\"\nCURRENT_TIME=$(date \"+%Y%m%d_%H%M%S\")\nCURRENT_DIR=$(pwd)\nPATCH_FILES_DIR=\"patch_files\"\nTMP_FILE=\"\/tmp\/__tmp__.$$$\"\n\nPATCH_FILES=( \\\n\"\/opt\/gate1\/www\/ONE_user\/user_add.html\" \\\n\"\/opt\/gate1\/www\/include\/function\/user.fun\" \\\n\"\/opt\/gate1\/www\/ONE_device\/device_process.php\" \\\n\"\/opt\/gate1\/www\/include\/function\/device.fun\" \\\n)\n\n###########################################################\n# \"\uc5d4\ud130\ud0a4 \ub204\ub974\uba74 \ub2e4\uc74c\uc73c\ub85c \uc774\ub3d9\" \uba54\uc138\uc9c0 \ud45c\uc2dc\n###########################################################\nfunc_continue() {\n  echo \"###########################################################\"\n  echo \"# Press ENTER to continue...\"\n  echo \"###########################################################\"\n  read\n}\n\n###########################################################\n# \ud30c\uc77c\uc774 \uc874\uc7ac\ud558\ub294\uc9c0 \uac80\uc0ac\ud55c\ub2e4.\n# \ud30c\uc77c\uc774 \uc5c6\uc73c\uba74 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc885\ub8cc\ud55c\ub2e4.\n###########################################################\nfunc_prepare() {\n  echo \"###########################################################\"\n  echo \"#\"\n  echo \"# func_prepare\"\n  echo \"#\"\n  echo \"###########################################################\"\n\n  for TMPV in ${PATCH_FILES[@]}\n  do\n    if [ ! -f \"${TMPV}\" ]\n    then\n      echo \"${TMPV} not found !\"\n      exit 1\n    fi\n  done\n}\n\n###########################################################\n# \ubc31\uc5c5 \ub514\ub809\ud1a0\ub9ac\ub97c \ub9cc\ub4e4\uace0 \uae30\uc874 \ud30c\uc77c\uc744 \ubc31\uc5c5\ud55c\ub2e4.\n# \uc774 \ud568\uc218\ub294 \ubc18\ub4dc\uc2dc \ud328\uce58\ub97c \uc801\uc6a9\ud558\uae30 \uc804\uc5d0 \ud638\ucd9c\ub418\uc5b4\uc57c \ud55c\ub2e4.\n###########################################################\nfunc_backup() {\n  echo \"###########################################################\"\n  echo \"#\"\n  echo \"# func_backup\"\n  echo \"#\"\n  echo \"###########################################################\"\n\n  if [ ! -d \"${CURRENT_DIR}\/backup.${CURRENT_TIME}\" ]\n  then\n    mkdir -p \"${CURRENT_DIR}\/backup.${CURRENT_TIME}\"\n  fi\n\n  for TMPV in ${PATCH_FILES[@]}\n  do\n    FILE_PATH=$(dirname ${TMPV})\n    FILE_NAME=$(basename ${TMPV})\n    mkdir -p \"${CURRENT_DIR}\/backup.${CURRENT_TIME}${FILE_PATH}\"\n    cp -av ${TMPV} \"${CURRENT_DIR}\/backup.${CURRENT_TIME}${FILE_PATH}\/\"\n  done\n}\n\n###########################################################\n# \ud604\uc7ac \uc11c\ubc84\uac00 \uac1c\ubc1c \uc11c\ubc84\uc77c \uacbd\uc6b0 \uae30\uc874 \uc2e4\ud589\ud30c\uc77c\uc744 \uac00\uc9c0\uace0\n# \ud328\uce58\ub97c \ub9cc\ub4e0\ub2e4.\n# \ud30c\uc77c\uc740 ${PATCH_FILES_DIR} \uc548\uc5d0 \uc6d0\ubcf8 \ub514\ub809\ud1a0\ub9ac \uad6c\uc870\ub85c \ub4e4\uc5b4\uac04\ub2e4.\n###########################################################\nfunc_make_patch() {\n  echo \"###########################################################\"\n  echo \"#\"\n  echo \"# func_make_patch\"\n  echo \"#\"\n  echo \"###########################################################\"\n\n  if [ ! -d \"${CURRENT_DIR}\/${PATCH_FILES_DIR}\" ]\n  then\n    mkdir -p \"${CURRENT_DIR}\/${PATCH_FILES_DIR}\"\n  fi\n\n  for TMPV in ${PATCH_FILES[@]}\n  do\n    FILE_PATH=$(dirname ${TMPV})\n    FILE_NAME=$(basename ${TMPV})\n    mkdir -p \"${CURRENT_DIR}\/${PATCH_FILES_DIR}${FILE_PATH}\"\n    cp -av ${TMPV} \"${CURRENT_DIR}\/${PATCH_FILES_DIR}${FILE_PATH}\/\"\n  done\n}\n\n###########################################################\n# \ud328\uce58\ub97c \uc801\uc6a9\ud55c\ub2e4.\n# (\ud604\uc7ac \ub514\ub809\ud1a0\ub9ac\uc5d0 \ud328\uce58 \ud30c\uc77c\ub4e4\uc774 \uc788\uc74c)\n###########################################################\nfunc_run_patch0() {\n  echo \"###########################################################\"\n  echo \"#\"\n  echo \"# func_run_patch0\"\n  echo \"#\"\n  echo \"###########################################################\"\n\n  # \ud328\uce58 \ud30c\uc77c\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \uc874\uc7ac\ud558\ub294\uc9c0 \uac80\uc0ac\ud55c\ub2e4.\n  for TMPV in ${PATCH_FILES[@]}\n  do\n    FILE_PATH=$(dirname ${TMPV})\n    FILE_NAME=$(basename ${TMPV})\n    if [ ! -f \"${CURRENT_DIR}\/${FILE_NAME}\" ]\n    then\n      echo \"${CURRENT_DIR}\/${FILE_NAME} not found.\"\n      exit 1\n    fi\n  done\n\n  # \ud328\uce58 \uc2e4\ud589\n  for TMPV in ${PATCH_FILES[@]}\n  do\n    FILE_PATH=$(dirname ${TMPV})\n    FILE_NAME=$(basename ${TMPV})\n    if [ ! -d \"${FILE_PATH}\" ]\n    then\n      mkdir -p \"${FILE_PATH}\"\n    fi\n    cp -av \".\/${FILE_NAME}\" \"${FILE_PATH}\/\"\n  done\n}\n\n###########################################################\n# \ud328\uce58\ub97c \uc801\uc6a9\ud55c\ub2e4.\n# (${PATCH_FILES_DIR} \uc548\uc5d0 \ud328\uce58 \ud30c\uc77c\ub4e4\uc774 \uc788\uc74c)\n###########################################################\nfunc_run_patch1() {\n  echo \"###########################################################\"\n  echo \"#\"\n  echo \"# func_run_patch1\"\n  echo \"#\"\n  echo \"###########################################################\"\n\n  # \ud328\uce58 \ud30c\uc77c\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \uc874\uc7ac\ud558\ub294\uc9c0 \uac80\uc0ac\ud55c\ub2e4.\n  for TMPV in ${PATCH_FILES[@]}\n  do\n    FILE_PATH=$(dirname ${TMPV})\n    FILE_NAME=$(basename ${TMPV})\n    if [ ! -f \"${CURRENT_DIR}\/${PATCH_FILES_DIR}\/${FILE_NAME}\" ]\n    then\n      echo \"${CURRENT_DIR}\/${PATCH_FILES_DIR}\/${FILE_NAME} not found.\"\n      exit 1\n    fi\n  done\n\n  # \ud328\uce58 \uc2e4\ud589\n  for TMPV in ${PATCH_FILES[@]}\n  do\n    FILE_PATH=$(dirname ${TMPV})\n    FILE_NAME=$(basename ${TMPV})\n    if [ ! -d \"${FILE_PATH}\" ]\n    then\n      mkdir -p \"${FILE_PATH}\"\n    fi\n    cp -av \"${CURRENT_DIR}\/${PATCH_FILES_DIR}\/${FILE_NAME}\" \"${FILE_PATH}\/\"\n  done\n}\n\n###########################################################\n# \ud328\uce58\ub97c \uc801\uc6a9\ud55c\ub2e4.\n# (${PATCH_FILES_DIR} \uc548\uc5d0 \uc6d0\ubcf8 \ub514\ub809\ud1a0\ub9ac \uad6c\uc870\ub85c \ud328\uce58\n# \ud30c\uc77c\ub4e4\uc774 \uc788\uc74c)-func_make_patch \ud568\uc218\ub85c \ub9cc\ub4e0 \ud328\uce58\n###########################################################\nfunc_run_patch2() {\n  echo \"###########################################################\"\n  echo \"#\"\n  echo \"# func_run_patch2\"\n  echo \"#\"\n  echo \"###########################################################\"\n\n  # \ud328\uce58 \ud30c\uc77c\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \uc874\uc7ac\ud558\ub294\uc9c0 \uac80\uc0ac\ud55c\ub2e4.\n  for TMPV in ${PATCH_FILES[@]}\n  do\n    FILE_PATH=$(dirname ${TMPV})\n    FILE_NAME=$(basename ${TMPV})\n    if [ ! -f \"${CURRENT_DIR}\/${PATCH_FILES_DIR}${TMPV}\" ]\n    then\n      echo \"${CURRENT_DIR}\/${PATCH_FILES_DIR}${TMPV} not found.\"\n      exit 1\n    fi\n  done\n\n  # \ud328\uce58 \uc2e4\ud589\n  find \"${CURRENT_DIR}\/${PATCH_FILES_DIR}\" -type d -exec chmod 755 {} \\;\n  find \"${CURRENT_DIR}\/${PATCH_FILES_DIR}\" -type f -exec chmod 644 {} \\;\n  chown -R www:www \"${CURRENT_DIR}\/${PATCH_FILES_DIR}\"\n  #rsync -avh --keep-dirlinks \"${CURRENT_DIR}\/${PATCH_FILES_DIR}\/opt\/gate1\/www\" \"\/opt\/gate1\/\"\n  cp -Rfv \"${CURRENT_DIR}\/${PATCH_FILES_DIR}\/opt\/gate1\/www\" \"\/opt\/gate1\/\"\n}\n\n###########################################################\n# \uc774\uc804\uc5d0 \ubc31\uc5c5\ub41c \ud30c\uc77c\uc5d0 \ub300\ud55c \ubcf5\uad6c \uc2e4\ud589\n###########################################################\nfunc_run_restore() {\n  echo \"###########################################################\"\n  echo \"#\"\n  echo \"# func_run_restore\"\n  echo \"#\"\n  echo \"###########################################################\"\n\n  # \ud328\uce58 \ud30c\uc77c\uc774 \uc815\uc0c1\uc801\uc73c\ub85c \uc874\uc7ac\ud558\ub294\uc9c0 \uac80\uc0ac\ud55c\ub2e4.\n  for TMPV in ${PATCH_FILES[@]}\n  do\n    FILE_PATH=$(dirname ${TMPV})\n    FILE_NAME=$(basename ${TMPV})\n    if [ ! -f \"${CURRENT_DIR}\/${1}${TMPV}\" ]\n    then\n      echo \"${CURRENT_DIR}\/${1}${TMPV} not found.\"\n      exit 1\n    fi\n  done\n\n  # \ubcf5\uad6c \uc2e4\ud589\n  find \"${CURRENT_DIR}\/${1}\" -type d -exec chmod 755 {} \\;\n  find \"${CURRENT_DIR}\/${1}\" -type f -exec chmod 644 {} \\;\n  chown -R www:www \"${CURRENT_DIR}\/${1}\"\n  cp -Rfv \"${CURRENT_DIR}\/${1}\/opt\/gate1\/www\" \"\/opt\/gate1\/\"\n}\n\n###########################################################\n# \ud328\uce58\ub97c \uc801\uc6a9 \ud6c4 \uc815\ub9ac\n###########################################################\nfunc_finish() {\n  echo \"###########################################################\"\n  echo \"#\"\n  echo \"# func_finish\"\n  echo \"#\"\n  echo \"###########################################################\"\n\n  chown -R www:www \/opt\/gate1\/www\n  chown -R www:www \/opt\/gate1\/sbin\/lib\n}\n\ncase \"$1\" in\n  \"make_patch\")\n    func_prepare\n    func_make_patch\n    func_continue\n    ;;\n  \"patch0\")\n    func_prepare\n    func_backup\n    func_continue\n    func_run_patch0\n    func_continue\n    func_finish\n    ;;\n  \"patch1\")\n    func_prepare\n    func_backup\n    func_continue\n    func_run_patch1\n    func_continue\n    func_finish\n    ;;\n  \"patch2\")\n    func_prepare\n    func_backup\n    func_continue\n    func_run_patch2\n    func_continue\n    func_finish\n    ;;\n  \"restore\")\n    if [ -z \"$2\" ]\n    then\n      echo \"backup directory not found.\"\n      exit\n    fi\n    func_run_restore \"$2\"\n    func_continue\n    func_finish\n    ;;\n  *)\n    echo \"Usage: $0 {make_patch|patch0|patch1|patch2|restore}\"\n    echo \"\"\n    echo \"  make_patch: \uc6b4\uc601 \ub514\ub809\ud1a0\ub9ac\uc5d0\uc11c \ud30c\uc77c\uc744 \uac00\uc838\uc640\uc11c \ud328\uce58\ub97c \ub9cc\ub4e6-patch2 \uc635\uc158\uc73c\ub85c \ud328\uce58 \uac00\ub2a5.\"\n    echo \"  patch0: \ud328\uce58 \ud30c\uc77c\uc774 \ud604\uc7ac \ub514\ub809\ud1a0\ub9ac\uc5d0 \uc788\uc74c.\"\n    echo \"  patch1: \ud328\uce58 \ud30c\uc77c\uc774 ${PATCH_FILES_DIR} \ub0b4\uc5d0 \uc788\uc74c.\"\n    echo \"  patch2: \ud328\uce58 \ud30c\uc77c\uc774 ${PATCH_FILES_DIR} \ub0b4\uc5d0 \/\ub514\ub809\ud1a0\ub9ac \uae30\uc900\uc758 \ud2b8\ub9ac\ud615\ud0dc\ub85c \uc788\uc74c.\"\n    echo \"  restore: \ubc31\uc5c5\ubcf8\uc73c\ub85c \uc6d0\uc0c1\ubcf5\uad6c \uc2dc\ud0a8\ub2e4. (\ubc31\uc5c5 \ub514\ub809\ud1a0\ub9ac\ub97c \uc9c0\uc815\ud574\uc57c \ud55c\ub2e4)\"\n    echo\n    echo \"  ex)\"\n    echo \"    $0 make_patch\"\n    echo \"    $0 patch0\"\n    echo \"    $0 restore backup.20210917_093551\"\n    exit 1\nesac<\/pre>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[39],"tags":[],"class_list":["post-4748","post","type-post","status-publish","format-standard","hentry","category-os_linux_unix_macos"],"_links":{"self":[{"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/4748","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4748"}],"version-history":[{"count":0,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/4748\/revisions"}],"wp:attachment":[{"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4748"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4748"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4748"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}