반응형
hotkey_eclipse

HotKey Eclipse

  • 이클립스 단축키는 변경가능하여 가장 좋은 것은 설정에서 단축키를 찾는 것이 가장 정확하다.
    OS별로 다를 수 있음에 유의한다. Window , Mac , Linux 등.
    windows-preferences에서 Key로 검색
    Keys 화면내에서 검색하여 찾기
    예를 들면)
    comment : 주석관련
    find : 검색관련 , 다음 검색 등
    assist : 코드Assist (많이 찾는 Content Assist) 구조체 필드 확인, 메소드 목록 확인 등.
    import : 자동 import관련

빠르게 단축키를 보려면 ^+Shift+L 한 번 더 누르면 단축키 설정창을 띄운다. 다른 것 다 필요없고 이것만 기억해도 된다.

생각안나면 Ctrl+Shift+L 이것만 기억하자!!

+이클립스
-동일한 파일을 2개 창으로 보기
ctrl+{ ; 좌우로 보기 (ctrl+shift+{)
ctrl+_ ; 상하로 보기

-파일2개를 창2개로 보기
추가로 열 파일을 탭에서 드래그하여 원하는 윈도우 박스 위치에 놓는다.

컨쉽+O ; auto import
컨쉽+T ; 클래스 찾기
컨쉽+위/아래 ; 메소드 이동(위, 아래)
컨쉽+스페이스 ; 파라미터 보기
컨쉽+F ; 자동 코드 들여쓰기 정리. form feed.
컨+O ; 현재소스내에서 메소드나 필드로 이동 ; method
컨+T ; class tree보기/이동 상속관계 ; tree
컨+K ; 찾는 문자열 블록선택후, 연속으로 찾기. 반대방향은 쉽 추가.
컨+D ; delete line
컨+I ; auto indent (one line)

  • 가장 필요한 단축키.
    Code Assit
    추적
    돌아가기
    실행
    이전 커서위치로 이동.
    소스를 추적하여 쫒아가다가 다시 돌아갈 때 필요!!!

+요약
@+방향키 ; 이전 커서 위치로 이동!!! 소스추적하다가 되돌아갈때 필수!
^+Space ; 코드 파라미터 보기 (sysout 자동풀기) 리눅스에서는 @+/
^H ; 전체 검색
^K ; 다음 찾기. 이전찾기 ^+SHIFT+K
F3 or ^클릭 ; 추적 go to definition
^+F11 ; 실행
^F6 ; 이전 에디터창(소스).
^Q ; 소스 마지막 수정위치로 이동
^+SHIFT+/ ; 블록 주석처리
^+ / ; 주석처리
^+SHIFT+F ; 코드 정리

+이클립스(MAC)
(@대신Com)+방향키 ; 이전 커서 위치로 이동
(Com추가)+^+Space ; 코드 파라미터 보기
F3 or ^+클릭 ; 추적
(FN추가)+^+F11 ; 실행
^F6 ; 이전 에디터창(소스).
^Q ; 소스 마지막 수정위치로 이동
^H ; 전체 검색
^K ; 다음 찾기. 이전찾기 ^+SHIFT+K

단축키가 안먹는다면 다른 프로그램 단축키와 충돌이 났거나 다를 수 있어서 다른 단축키로 바꿔보자.
언제든 설정에서 원하는 단축키를 지정할 수 있고, 현재 단축키 설정도 확인 가능하니 처음에는 꼭 확인하는 것을 권장한다.

Author: crazyj7@gmail.com

'Develop > Java' 카테고리의 다른 글

gradle2 API server  (0) 2021.11.13
gradle1 기초  (0) 2021.11.13
Short URL(단축URL) API  (1) 2019.11.07
[JavaScript] 스탑와치 밀리초/StopWatch milliseconds  (0) 2019.08.27
Java RSA 간단한 비대칭키 암호 서명 검증 테스트  (0) 2019.08.14
반응형
tomcat_setup

Tomcat 8 install

Ubuntu 기준으로 tomcat8 설치하기

JDK8

$ apt-cache search openjdk-8
$ apt-get install openjdk-8-jdk
$ java -version
openjdk version 1.8.0_222

설치 경로 확인

$ upate-alternatives --list java
/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
$ cd /usr/lib
$ ln -s jvm/java-8-openjdk-amd64 java
$ ls /usr/lib/java

tomcat8

tomcat은 패키지를 apt-get으로 설치하면 자동으로 설정이 되는 장점이 있지만, 수동으로 받아서 설치하는 것이 좋다. (개인 취향)
수동으로 하는 것은 설치 경로나 구성 등을 본인에 맞게 할 수 있다.

간략 버전 (빠른 설치)

sudo apt-get install tomcat8
ufw allow 8080
service tomcat8 start
끝

수동 설치
http://tomcat.apache.org
홈페이지에서 원하는 버전의 다운로드 URL을 복사한다.

# cd /usr
# wget https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.9/bin/apache-tomcat-8.5.9.tar.gz
# tar xvfz apache*.gz
# ln -s apache-tomcat-8.5.9 tomcat
# cd /usr/tomcat/bin
# ./version.sh
Apache Tomcat/8.5.9

환경 설정

  • 방화벽 오픈
    ufw allow 8080
  • 환경 변수
$ vi /etc/profile
export JAVA_HOME=/usr/lib/java
export CATALINA_HOME=/usr/tomcat
export CLASSPATH=.:$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar:$CATALINA_HOME/lib/jsp-api.jar:$CATALINA_HOME/lib/servlet-api.jar 

$ source /etc/profile
  • 구동 테스트
    cd /usr/tomcat/bin
    ./startup.sh
    netstat -ant | grep 8080
    ps -ef | grep tomcat

브라우저에서 http://IP:8080 으로 접속하여 페이지가 뜨는지 확인한다.

  • 테스트 종료
    ./shutdown.sh

서비스 등록

  • 계정 생성
groupadd tomcat
useradd -M -s /bin/nologin -g tomcat -d /usr/tomcat tomcat
cd /usr/
chown -R tomcat.tomcat apache-tomcat-8.5.9
  • 서비스 등록
root@blockchain:/etc/systemd/system# cat tomcat.service 
# Systemd unit file for tomcat
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target

[Service]
Type=forking

Environment="JAVA_HOME=/usr/lib/java"
Environment="CATALINA_PID=/usr/tomcat/temp/tomcat.pid"
Environment="CATALINA_HOME=/usr/tomcat"
Environment="CATALINA_BASE=/usr/tomcat"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"

ExecStart=/usr/tomcat/bin/startup.sh
ExecStop=/usr/tomcat/bin/shutdown.sh

User=tomcat
Group=tomcat
UMask=0007
RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target

위와 같이 파일을 작성하고
systemctl daemon-reload

서비스 구동

service tomcat status
service tomcat start

부팅시 자동시작 스크립트

/etc/init.d에 tomcat 파일을 아래와 같이 만들고
chomd 755 tomcat으로 권한을 설정한다.
JAVA_HOME, CATALINA_HOME, tomcat 계정, 디렉터리를 잘 설정한다.

#!/bin/sh
#
# /etc/init.d/tomcat -- startup script for the Tomcat 8 servlet engine
#
# Modified init-Script from Ubuntu Tomcat init-script
#
#
### BEGIN INIT INFO
# Provides:          tomcat
# Required-Start:    $local_fs $remote_fs $network
# Required-Stop:     $local_fs $remote_fs $network
# Should-Start:      $named
# Should-Stop:       $named
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start Tomcat.
# Description:       Start the Tomcat servlet engine.
### END INIT INFO

set -e

PATH=/bin:/usr/bin:/sbin:/usr/sbin:/opt/tomcat
NAME=tomcat
DESC="Tomcat servlet engine"
DEFAULT=/etc/default/$NAME
JVM_TMP=/tmp/tomcat-tmp

if [ `id -u` -ne 0 ]; then
        echo "You need root privileges to run this script"
        exit 1
fi

# Make sure tomcat is started with system locale
if [ -r /etc/default/locale ]; then
        . /etc/default/locale
        export LANG
fi

. /lib/lsb/init-functions

if [ -r /etc/default/rcS ]; then
        . /etc/default/rcS
fi


# The following variables can be overwritten in $DEFAULT

# Run Tomcat 8 as this user ID and group ID
TOMCAT_USER=tomcat
TOMCAT_GROUP=tomcat

# The first existing directory is used for JAVA_HOME (if JAVA_HOME is not
# defined in $DEFAULT)
JDK_DIRS="/usr/lib/java"

# Look for the right JVM to use
for jdir in $JDK_DIRS; do
    if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; then
        JAVA_HOME="$jdir"
    fi
done

export JAVA_HOME=/usr/lib/java

# Directory where the Tomcat binary distribution resides
CATALINA_HOME=/usr/$NAME

# Directory for per-instance configuration files and webapps
CATALINA_BASE=/usr/$NAME

# Use the Java security manager? (yes/no)
TOMCAT_SECURITY=no

# Default Java options
# Set java.awt.headless=true if JAVA_OPTS is not set so the
# Xalan XSL transformer can work without X11 display on JDK 1.4+
# It also looks like the default heap size of 64M is not enough for most cases
# so the maximum heap size is set to 128M
if [ -z "$JAVA_OPTS" ]; then
        JAVA_OPTS="-Djava.awt.headless=true -Xmx128M"
fi

# End of variables that can be overwritten in $DEFAULT

# overwrite settings from default file
if [ -f "$DEFAULT" ]; then
        . "$DEFAULT"
fi

if [ ! -f "$CATALINA_HOME/bin/bootstrap.jar" ]; then
        log_failure_msg "$NAME is not installed"
        exit 1
fi

POLICY_CACHE="$CATALINA_BASE/work/catalina.policy"

if [ -z "$CATALINA_TMPDIR" ]; then
        CATALINA_TMPDIR="$JVM_TMP"
fi

# Set the JSP compiler if set in the tomcat.default file
if [ -n "$JSP_COMPILER" ]; then
        JAVA_OPTS="$JAVA_OPTS -Dbuild.compiler=\"$JSP_COMPILER\""
fi

SECURITY=""
if [ "$TOMCAT_SECURITY" = "yes" ]; then
        SECURITY="-security"
fi

# Define other required variables
CATALINA_PID="/var/run/$NAME.pid"
CATALINA_SH="$CATALINA_HOME/bin/catalina.sh"

# Look for Java Secure Sockets Extension (JSSE) JARs
if [ -z "${JSSE_HOME}" -a -r "${JAVA_HOME}/jre/lib/jsse.jar" ]; then
    JSSE_HOME="${JAVA_HOME}/jre/"
fi

catalina_sh() {
        # Escape any double quotes in the value of JAVA_OPTS
        JAVA_OPTS="$(echo $JAVA_OPTS | sed 's/\"/\\\"/g')"

        AUTHBIND_COMMAND=""
        if [ "$AUTHBIND" = "yes" -a "$1" = "start" ]; then
                JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true"
                AUTHBIND_COMMAND="/usr/bin/authbind --deep /bin/bash -c "
        fi

        # Define the command to run Tomcat's catalina.sh as a daemon
        # set -a tells sh to export assigned variables to spawned shells.
        TOMCAT_SH="set -a; JAVA_HOME=\"$JAVA_HOME\"; source \"$DEFAULT\"; \
                CATALINA_HOME=\"$CATALINA_HOME\"; \
                CATALINA_BASE=\"$CATALINA_BASE\"; \
                JAVA_OPTS=\"$JAVA_OPTS\"; \
                CATALINA_PID=\"$CATALINA_PID\"; \
                CATALINA_TMPDIR=\"$CATALINA_TMPDIR\"; \
                LANG=\"$LANG\"; JSSE_HOME=\"$JSSE_HOME\"; \
                cd \"$CATALINA_BASE\"; \
                \"$CATALINA_SH\" $@"

        if [ "$AUTHBIND" = "yes" -a "$1" = "start" ]; then
                TOMCAT_SH="'$TOMCAT_SH'"
        fi

        # Run the catalina.sh script as a daemon
        set +e
        touch "$CATALINA_PID" "$CATALINA_BASE"/logs/catalina.out
        chown $TOMCAT_USER "$CATALINA_PID" "$CATALINA_BASE"/logs/catalina.out
        start-stop-daemon --start -b -u "$TOMCAT_USER" -g "$TOMCAT_GROUP" \
                -c "$TOMCAT_USER" -d "$CATALINA_TMPDIR" \
                -x /bin/bash -- -c "$AUTHBIND_COMMAND $TOMCAT_SH"
        status="$?"
        set +a -e
        return $status
}

case "$1" in
  start)
        if [ -z "$JAVA_HOME" ]; then
                log_failure_msg "no JDK found - please set JAVA_HOME"
                exit 1
        fi

        if [ ! -d "$CATALINA_BASE/conf" ]; then
                log_failure_msg "invalid CATALINA_BASE: $CATALINA_BASE"
                exit 1
        fi

        log_daemon_msg "Starting $DESC" "$NAME"
        if start-stop-daemon --test --start --pidfile "$CATALINA_PID" \
                --user $TOMCAT_USER --exec "$JAVA_HOME/bin/java" \
                >/dev/null; then

                # Regenerate POLICY_CACHE file
                umask 022
                echo "// AUTO-GENERATED FILE from /opt/tomcat/" \
                        > "$POLICY_CACHE"
                echo ""  >> "$POLICY_CACHE"
                cat $CATALINA_BASE/conf/*.policy \
                        >> "$POLICY_CACHE"

                # Remove / recreate JVM_TMP directory
                rm -rf "$JVM_TMP"
                mkdir -p "$JVM_TMP" || {
                        log_failure_msg "could not create JVM temporary directory"
                        exit 1
                }
                chown $TOMCAT_USER "$JVM_TMP"

                catalina_sh start $SECURITY
                sleep 5
                if start-stop-daemon --test --start --pidfile "$CATALINA_PID" \
                        --user $TOMCAT_USER --exec "$JAVA_HOME/bin/java" \
                        >/dev/null; then
                        if [ -f "$CATALINA_PID" ]; then
                                rm -f "$CATALINA_PID"
                        fi
                        log_end_msg 1
                else
                        log_end_msg 0
                fi
        else
                log_progress_msg "(already running)"
                log_end_msg 0
        fi
        ;;
  stop)
        log_daemon_msg "Stopping $DESC" "$NAME"

        set +e
        if [ -f "$CATALINA_PID" ]; then
                start-stop-daemon --stop --pidfile "$CATALINA_PID" \
                        --user "$TOMCAT_USER" \
                        --retry=TERM/20/KILL/5 >/dev/null
                if [ $? -eq 1 ]; then
                        log_progress_msg "$DESC is not running but pid file exists, cleaning up"
                elif [ $? -eq 3 ]; then
                        PID="`cat $CATALINA_PID`"
                        log_failure_msg "Failed to stop $NAME (pid $PID)"
                        exit 1
                fi
                rm -f "$CATALINA_PID"
                rm -rf "$JVM_TMP"
        else
                log_progress_msg "(not running)"
        fi
        log_end_msg 0
        set -e
        ;;
   status)
        set +e
        start-stop-daemon --test --start --pidfile "$CATALINA_PID" \
                --user $TOMCAT_USER --exec "$JAVA_HOME/bin/java" \
                >/dev/null 2>&1
        if [ "$?" = "0" ]; then

                if [ -f "$CATALINA_PID" ]; then
                    log_success_msg "$DESC is not running, but pid file exists."
                        exit 1
                else
                    log_success_msg "$DESC is not running."
                        exit 3
                fi
        else
                log_success_msg "$DESC is running with pid `cat $CATALINA_PID`"
        fi
        set -e
        ;;
  restart|force-reload)
        if [ -f "$CATALINA_PID" ]; then
                $0 stop
                sleep 1
        fi
        $0 start
        ;;
  try-restart)
        if start-stop-daemon --test --start --pidfile "$CATALINA_PID" \
                --user $TOMCAT_USER --exec "$JAVA_HOME/bin/java" \
                >/dev/null; then
                $0 start
        fi
        ;;
  *)
        log_success_msg "Usage: $0 {start|stop|restart|try-restart|force-reload|status}"
        exit 1
        ;;
esac

exit 0

Author: crazyj7@gmail.com

'Develop > Linux_Unix' 카테고리의 다른 글

[도커] tomcat, mariadb 환경 war hang/slow  (0) 2021.04.28
Bash Tip 작업속도를 빠르게  (0) 2021.03.03
리눅스 백그라운드 실행(터미널종료에도)  (2) 2021.02.23
Git 사용법_요약  (0) 2019.12.16
VI 사용법  (0) 2015.06.02
반응형
mysql_setup

MySQL 5.7

타임존 설정

타임존 선택 수동으로 설정하는 방식

ls /usr/share/zoneinfo
여기에서 원하는 지역을 디렉터리 구조 내부를 탐색하여 찾는다.
ls /usr/share/zoneinfo/Asia/Seoul

현재설정
$ ll /etc/localtime
/etc/localtime -> /usr/share/zoneinfo/America/New_York
$ date
Thu Nov 7 20:48:33 EST 2019

다음과 같이 변경
$ sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
$ date
Fri Nov 8 10:55:06 KST 2019

사실 타임존 선택은 더 간단하게 “tzselect” 커맨드로 하면 메뉴를 골라 쉽게 설정할 수 도 있다.

$ tzselect

시간 동기화

시간이 틀리면 여러가지 문제가 발생하니 먼저 시간을 동기화하자.

sudo apt-get install ntp

vi /etc/ntp/conf
server 1.kr.pool.ntp.org
server 1.asia.pool.ntp.org
server time.bora.net

sudo service ntp restart
sudo ntpq -p

설치 (Ubuntu 기준)

-기존 설치된 것 삭제

apt list | grep mysql-server
버전 확인
sudo apt-get purge mysql-server
sudo apt-get purge mysql-common

설치 데이터 삭제
아래 경로 반드시 확인 필요!
rm -rf /var/log/mysql
rm -rf /var/log/mysql.*
rm -rf /var/lib/mysql
rm -rf /etc/mysql
  • 패키지 검색

  • sudo apt-get update

  • sudo apt-cache search mysql-server
    image

  • 설치

  • sudo apt-get install mysql-server-5.7
    image

$ mysql --version
5.7.27
$ vi /etc/mysql/mysql.conf.d/mysqld.cnf
port 번호 변경 (옵션)
$ service mysql restart

관리자 패스워드 설정

수동으로 패스워드 설정 방법

루트로 mysql을 실행한다.
$ sudo mysql -u root 
패스워드 없이 로그인 됨.
> alter user 'root'@'localhost' identified with mysql_native_password by '패스워드';
> flush privileges ;
> exit
$ service mysql restart

일반계정으로 전환하여 로그인 (로컬)
$ mysql -u root -p

간단하게 커맨드로 설정하는 방법

루트로 로그인하여
$ mysqladmin -u root -p password

계정 생성

로컬 접속

> create database test character set utf8 collate utf8_bin ;  # test DB를 만들어서 아래 권한 부여 (옵션)

> use mysql ;
> insert into user(host, user, authentication_string, ssl_cipher,
 x509_issuer, x509_subject) 
 values('localhost', '계정', password('패스워드'), '', '', ''); 
> flush privileges ;
> grant all privileges on DB명.* to 계정@localhost;
> flush privileges ;

빈 값 필드들을 빼보니 쿼리가 실패하였다. grant전에 flush를 안해주면 쿼리가 실패한다. 위에 나온대로 하는 게 좋다.

원격 접속

> 위 로컬 접속에서 localhost를 %로만 바꿔준다. 

더 간단한 방법

> craete user '계정'@'localhost' identified by '패스워드' 
   password expire never ;
> grant all privileges on DB명.* to 계정@localhost;

Author: crazyj7@gmail.com

반응형
shorturl

Short URL API

긴 http 주소를 짧게 만들어 주는 방법

이 서비스를 제공하는 곳은 구글, 네이버, bitly 등이 있다. 하지만 최근 구글은 short url 서비스를 종료해서 다른 곳을 이용해야 한다. 여기서는 bitly를 API로 이용하는 방법을 설명한다.

  • 계정생성

  • 계정ID 및 apikey 확인

  • 단축 URL 생성을 API로…
    아래 데이터를 POST로 Web API 주소로 보내면 단축URL 결과를 받을 수 있다.

아래는 curl 커맨드로 전문을 보내어 longurl을 단축해 보았다.

curl -X POST http://api.bit.ly/v3/shorten -d "login=o_5*********" \
 -d "apiKey=R_5******************************3" \
  -d "longUrl=https://crazyj.tistory.com/173?category=753578"

결과

{"status_code":200,"status_txt":"OK","data":{"url":"http://bit.ly/34BRNHZ","hash":"34BRNHZ","global_hash":"34GlWWS","long_url":"https://crazyj.tistory.com/173?category=753578","new_hash":1}}

JSON 데이터를 파싱하면 data에 url 부분으로 단축된 것을 볼 수 있다.
만들어진 짧은 주소로 접속해보니 long url로 변환되어 들어가는 것을 볼 수 있다.
기존 긴 주소: https://crazyj.tistory.com/173?category=753578
변경된 짧은 주소: http://bit.ly/34BRNHZ

  • 요약
  • POST로 아래 데이터만 채워서 API URL로 보내면 된다.
  • API URL : http://api.bit.ly/v3/shorten
  • 파라미터 POST DATA (키명은 아래처럼 다 소문자로 해도 작동되는 것 같다.)
    • login=계정
    • apikey=키
    • longurl=긴URL주소
  • GET 방식도 지원한다.

Author: crazyj7@gmail.com

반응형

크롬 브라우저 현재 최신버전으로 업데이트하지 마세요.
한글 입력 버그 있음.
버전 78.0.3904.70(공식 빌드) (64비트)
크롬에 설정에서 현재 버전 확인을 하게 되면 자동(!)으로 강제업데이트됩니다.

문제는 이렇게 업데이트된 후에,
검색시에 한글누르고 스페이스 누르면 한글이 삭제되는 버그가 있고,
브라우저내에 채팅창같은곳에 스페이스를 누르면 스페이스가 안먹히고, 두 번 눌러야
스페이스 한 개가 들어갑니다....

나만 그런줄 알았는데 방금 업데이트 한 것을 보니 같은 증상이 나타났음.
패치 나올때 까지 기다리세요 ㅜ.ㅜ

이미 업데이트가 되어버렸는데, 이전으로 돌리려면????

 

크롬 옛날 버전으로 복구 방법. 패치가 나오기 전까지 옛날 버전을 사용하려면...
먼저 자동업데이트를 중지한다. 아래 경로에서 3번을 수행(서비스 중지)
https://www.webnots.com/7-ways-to-disable-automatic-chrome-update-in-windows-and-mac

간략히 요약하면 service.msc 실행해서 Google 업데이트 서비스로 나온것들 사용안함으로 중지하는 겁니다.

 

7 Ways to Disable Automatic Chrome Update in Windows and Mac » WebNots

Learn how to disable automatic Chrome update in Windows and Mac by renaming update folder, blocking update URL, from service manager, registry editor, system configuration and modifying plist file.

www.webnots.com

 

이제 크롬을 삭제(프로그램 추가/제거에서 크롬 삭제)하고 아래 경로에서 재설치. (바이러스 검사해본 결과 이상 없어서 저도 이렇게 복구했습니다.)  설치 후 한 번 더 위와 같이 구글 업데이트 서비스 사용 안함으로 해주세요. (크롬을 설치하니 자동으로 서비스 시작으로 되는 것 같더군요.)

https://www.slimjet.com/chrome/download-chrome.php?file=files%2F76.0.3809.100%2FChromeStandaloneSetup64.exe

'Develop > Windows' 카테고리의 다른 글

윈도우 리스닝포트 찾아 강제종료  (0) 2021.02.24
자모병합 / 한타영타 변환기  (2) 2020.11.10
커맨드(cmd)창 관리자권한 실행  (1) 2019.10.23
Windows10 IP Change command line  (0) 2019.10.23
DOS Batch Script  (0) 2019.10.06
반응형

 

cmd(콘솔)창 관리자권한으로 실행하기

cmd 창을 자주 사용하는데, 가끔 관리자 권한이 필요해서 다시 창을 띄우는데 띄우기가 번거롭다.
윈도우 기본 기능으로 빨리 cmd창을 관리자 권한으로 실행할 수 없을까?

  1. Ctrl+Shift+ESC 키를 누른다. (작업관리자 실행됨)
  2. Alt를 계속 누른 상태로 F, N을 차례로 누른다.
    image
  3. cmd를 입력 후, 키, 스페이스키, 엔터 순서로 입력한다. (관리자 권한을 체크하여 실행)

Author: crazyj7@gmail.com

추가로... 더 간단한 방법이 있다...

윈도우키+X 후에 A를 누른다.

 

 

'Develop > Windows' 카테고리의 다른 글

자모병합 / 한타영타 변환기  (2) 2020.11.10
크롬 한글 버그 수정  (1) 2019.10.28
Windows10 IP Change command line  (0) 2019.10.23
DOS Batch Script  (0) 2019.10.06
curl 사용법/HTTP 테스트  (0) 2019.10.01
반응형
windows_ipchange

Windows10 IP Change Command line

윈도우10에서 PC나 노트북 이동시 자주 사용하는 곳을 왔다갔다할 경우 자주 IP 변경해야 할 경우, 그 때마다 네트웍 설정을 해 주기가 너무 번거롭다.
이것을 커맨드 라인으로 자동화 할 수 있으면 편리하다.
이런 사용자들을 위한 팁.
윈도우 10 IP 변경 커맨드 라인

장소1

현재 네트웍 정보를 확인하고 화면캡쳐를 해둘것을 권장한다. 나중에 찾아볼때 편하다. 네트웍디바이스(NIC)명을 확인하고 ip address, network, gateway, dns 설정 등이다.

ip1
위에서 “이더넷 어댑터” 뒤에 나온 스트링을 잘 기억해야 한다. 보통은 “로컬 영역 연결” 이라고 나오는 것이 일반적이다. PC마다 다를 수 있어서 확인해 주어야 한다. 여기서는 “알수없음” 이라고 나와있어서 그렇게 작성하였다.

아래와 같이 배치 파일(network_pub.bat)을 만들어 준다. 이것은 장소1에서 현재의 네트웍 상태로 만들어주는 스크립트이다. 위에서 나오는 필드들을 잘 확인하여 자신에 맞는 형태로 바꾸어 주면 된다. (인터페이스명과 IP들만 바꿔준다.)

ip2

netsh int ip set address "알수없음" static 172.16.10.11 255.255.0.0 172.16.10.254 1
netsh int ip set dns "알수없음" static 172.16.10.1 primary  validate=no
netsh int ip add dns "알수없음" 168.126.63.1 index=2 validate=no

장소2

장소2에서도 마찬가지로 부여받은 고정IP로 네트웍을 설정한 후, 현재 상태를 확인한다. (이것도 별도로 화면캡쳐 해 두는 것이 좋다.)
이더넷 어탭터(NIC 인터페이스) 이름은 장소1에서 사용한 이름과 동일할 것이다. IP address, NetMask, Gateway, DNS IP를 확인한다.
ip3

이제 장소2의 네트웍 변경 커맨드를 아래와 같이 작성한다. (인터페이스명과 IP들만 바꿔준다.)
image

netsh int ip set address "알수없음" static 192.168.10.11 255.255.255.0 192.168.10.254 1
netsh int ip set dns "알수없음" static 8.8.8.8 primary validate=no

완료

주의!!! 위 배치 파일을 실행하기 위해서는!!!
cmd.exe 창을 열 때 반드시 관리자 권한으로 실행해야 한다.
(cmd 명령프로프트 아이콘에서 마우스 우클릭하여 관리자권한으로 실행)

이제 장소 1에서는 network_pub.bat를 실행하고, 장소2에서는 network_pri.bat를 실행하기만 하면 고정IP가 설정대로 변경될 것이다.
이제 더 이상 장소 이동시 귀찮은 네트웍 설정 변경 작업을 하지 않아도 된다!!!

Author: crazyj7@gmail.com

'Develop > Windows' 카테고리의 다른 글

크롬 한글 버그 수정  (1) 2019.10.28
커맨드(cmd)창 관리자권한 실행  (1) 2019.10.23
DOS Batch Script  (0) 2019.10.06
curl 사용법/HTTP 테스트  (0) 2019.10.01
화면/윈도우 동영상 녹화 (mp4, gif)  (0) 2019.09.23
반응형
DOSBatch

DOS Batch

윈도우 커맨드에서 실행하는 DOS 스크립트 작성 방법. 쉽지만 막상 필요한 것을 하고 싶을 때 쉽지만은 않다. 자료가 많이 부족하다.

주석

  • 주석 명령은 설명문으로 실행되지 않는다.
  • rem 으로 실행하고 뒤에 주석문(아무 스트링)을 입력하면 된다. 주석은 프로그래밍시에 간략한 설명을 위한 것이다.
  • @rem test message… : 앞에 @를 붙이면 배치파일 실행시 rem 커맨드 출력이 안되도록 한다. 물론 그 전에 @echo off을 해 두었다면 @을 붙일 필요없다.
  • 더 간단하게는 :: 으로 시작하면 주석이 된다. 이것은 커맨드 출력도 되지 않아 더 간편히 사용할 수 있다. rem과 다르게 아예 없는 것으로 취급된다.

변수와 출력

  • dos batch는 파일 확장자를 .bat 또는 .cmd로 하여 메모장으로 텍스트 파일로 작성하면 된다.
  • 기본 적인 출력은 “echo” 커맨드가 있다. 뒤에 출력할 내용을 적으면 된다.
  • 출력 내용에 변수명을 적어 변수값을 출력할 수 도 있다. 또한 변수중에는 미리 시스템에서 정의된 값들도 있어서 유용하다.
  • 변수 설정은 set으로 변수이름과 값을 =으로 할당한다.
  • 변수 사용시에는 변수 이름 앞뒤로 %를 붙인다. 변수 삭제는 빈 값을 할당한다. (빈 값이 있는 변수로 만드는 것이 아니라 변수 자체를 삭제한다는 의미!)

SET FOO=hello world
echo %FOO%
echo %FOO%xxx%FOO%
SET FOO=

  • for문의 변수 이름은 커맨드창에서 바로 실행할 때 영문자앞에 %를 붙인다. 그러나, Dos batch file(.bat)에서 for문의 변수 영문자 앞에 %% 이렇게 %를 두 개 붙인다!
c:\> copy con test1.bat
@echo off
@rem this is a test batch...
set aaa=hello
echo %aaa%
echo %1
^Z
c:\> test1 kim
hello
kim
  • @echo off는 이후에 echo 실행명령은 출력하지 않고, 결과만 출력하도록 한다.

  • batch 파일 실행시 뒤에 파라미터를 줄 수 있는데, 순서대로 %1, %2, … 이렇게 변수로 사용할 수 있다.

  • 줄바꿈. 엔터 입력. 빈 줄 출력

echo.

  • 공백으로 시작하는 문자열 출력

echo. aaa
echo aaa (이것도 이제는 가능함. 앞에 공백 두 개)

  • 특수 문자 출력시 앞에 ^를 사용

echo ^< 이것은 꺾은 괄호 ^>
echo ^| 파이프
echo ^^ 두 개 입력시 하나 출력

스트링 처리

  • 문자열 추출 mid / substr

FOO 변수의 값에서 인덱스 6부터 3글자를 추출. (인덱스는 0부터 시작) 뒤에 수를 생략하면 끝까지를 의미함. -1은 마지막 바로 한글자를 의미.
set BAR=%FOO:~6,3%
set BAR=%FOO:~5%
set BAR=%FOO:~-3% : FOO가 파일명일떄 마지막 세글자(확장자명)을 가져온다.

연산

  • 수 값을 할당하거나 연산하려면 SET /a를 사용한다.

set /a num=4*8+8/2+122
set /a num=1
set /a num+=2
if %num% GEQ 3 echo big

환경 변수

%CD% : 현재 작업 디렉터리
%DATE% : date 커맨드와 같은 포맷의 날짜
%TIME%
%RANDOM% : 0~32767 범위의 수
%ERRORLEVEL%
%CMDCMDLINE%

파라미터

  • 파라미터는 %1, %2, 등으로 받는다. (%0은 배치파일 이름 자체임. %9까지 가능)
  • %*은 모든 파라미터를 의미함.
  • 파리미터 내부에 공백이 있으면 커맨드상에서 파라미터를 "로 둘러싼다. 단, 스크립트에서 "를 제거하고 받으려면 %~1, %~2 로 받는다.
  • 파라미터가 없으면 종료

if “%1” == “” goto :eof
파라미터에 "를 추가해 주어야 한다.’

Redirect

  • stderr까지 파일로 기록

cmd /c “test.exe” > “output.txt” 2>&1

  • 실행만 하고 출력은 없앰 (no output)

dir > nul
nul 이라는 파일은 생성되지 않는다. (NUL 대소문자 상관없음. 주의! L이 한 개임.)

type nul > a
0바이트짜리 a라는 파일 생성

program 2>output.txt
stderr 출력을 파일로 기록

배치내에서 배치 실행하기

call b.bat param1 param2

  • 동시 실행

start /d “directory…” /b program.exe
start /d “directory…” /b program.exe

디렉터리 경로명 이동

cd /d e:\temp

반복문 for

  • integer 증가

for /L %%n in (1,1,100) do net user %%n /add
1부터 100까지 증가하고, 숫자로 계정명으로 사용자를 추가한다.
(for의 변수는 커맨드로 실행시에는 %하나 batch file인 경우는 %% 두개를 사용한다.)

  • 1부터 5까지 출력

for /L %n in (1,1,5) do echo %n

  • 1부터 5까지 출력. 2씩 건너뜀.

for /L %n in (1,2,5) do echo %n
1,3,5 각각 한 줄로 출력됨.

goto

  • 종료시

goto :eof 또는 goto:eof
eof 레이블은 만들필요없이 미리정의된 거라 그대로 사용 가능
또는 exit /b 0

  • 레이블 지정과 goto

레이블 지정시에는 앞에 :을 붙이고 goto 시에는 :를 빼야 한다.
:loop
echo infinite…
goto loop

Sleep

@rem 3sec sleep
@ping 1.2.3.4 -n 1 -w 3000 > NUL

IF

  • 조건 판단
  • 같은지 확인 == 앞 뒤에 공백은 없어도 됨.

if %var% == 1 goto done
echo a
:done
echo b

  • if else : 괄호, 공백 주의

if %var% == 0 (
echo a
) else (
echo b
)

  • /i 옵션 : 대소문자 구분 없이 비교. (case-insensitive)

사용자 입력/텍스트파일변수

  • yn 선택지 (or 스트링 입력)

set /p result=message (Y/N)?
echo %result%
빈 값을 검사하려면 아래 코드를 참고

@echo off
:: init var for empty string.
set "result="
set /p result=are you ok(y/n)?
if "%result%" == "" (
echo no input
goto :eof
)
if /i "%result%"=="y" goto YES
if /i "%result%"=="n" goto NO

echo your input is %result%

  • 텍스트 파일을 첫 행을 읽어 변수에 할당

set /p var=<%temp%\filename.txt

> copy con lines.txt
hello1
hello2
hello3
^Z
> set /p var=<lines.txt
> echo %var% %var%
hello1 hello1

디렉터리

  • 중간 디렉터리까지 모두 생성. mkdir 대신 md를 사용

md “a\b\c”

  • 하위 파일/디렉터리 모두 삭제. /s 옵션

rmdir /s “dirname”

기타

  • 종료 : exit

exit /b 0 : /b는 cmd창은 남겨둔다는 의미. 뒤의 숫자는 프로그램 종료 리턴값. (다른 배치에서는 이 값을 errorlevel 변수로 받아 사용할 수 있다.)

  • 파일 병합 / 붙이기 concate
  • 파일 세 개를 붙여서 하나의 파일로 만든다.

copy 1.txt + 2.txt + 3.txt out.new /b

  • 배치 파일에서 다른 배치 파일 실행하기

call b.bat : call을 사용한다. 그냥 b.bat로 실행하면? b.bat가 종료시 나머지 스크립트로 돌아오지 않고 종료된다.

Author: crazyj7@gmail.com
Written with StackEdit.

'Develop > Windows' 카테고리의 다른 글

커맨드(cmd)창 관리자권한 실행  (1) 2019.10.23
Windows10 IP Change command line  (0) 2019.10.23
curl 사용법/HTTP 테스트  (0) 2019.10.01
화면/윈도우 동영상 녹화 (mp4, gif)  (0) 2019.09.23
windows 10 kernel structure  (0) 2015.08.28
반응형
curl

curl 사용법

패킷/메시지를 네트웍으로 전송하는 유용한 유틸리티입니다. HTTP/S로 GET/POST 등으로 데이터를 전송할 수 있습니다.

  • 설치

  • curl -h 를 하면 옵션이 다 나온다. 너무 많은 내용으로 읽어보기 어렵다. 필요할 때 마다 찾아서 사용하거나 아래 예제를 통해 옵션들을 배워보자.

사용 방법

많이 사용되는 옵션

  • v : 상세로그 보기
  • o : 출력 파일 지정
  • O : 출력 파일명을 자동으로 원격지 파일명과 동일
  • H : 헤더 추가
  • A : 에이전트 추가
  • d : 데이터 추가로 폼 데이터나 JSON 데이터 등을 POST로 보낸다. (단, -G 옵션이 있으면 GET으로 적용된다.)

HTML 받아오기(기본사용)

URL 주소만 뒤에 주면 알아서 받아온다. (GET방식) image

파일 받아오기

URL 주소가 image나 zip 등 바이너리 파일 주소인 경우 텍스트 출력이 아니라 파일로 받아오기. 단순하게 파일 받는 용도로 쓸 거면 wget 유틸리티가 더 편하다.
- URL 뒤에 --output 옵션으로 저장할 파일명을 지정한다. (–output 은 -o 와 같다. 대문자 -O로 하면 뒤에 파일명 지정할 필요가 없다. 원격지 파일명과 동일한 파일명으로 자동으로 생성한다.)

curl https://curl.haxx.se/windows/dl-7.66.0_2/curl-7.66.0_2-win64-mingw.zip -o a.zip
curl https://curl.haxx.se/windows/dl-7.66.0_2/curl-7.66.0_2-win64-mingw.zip -O

HTTP 헤더 보기

$ curl 주소 : 해당 주소의 html content만 출력
$ curl -i 주소 : 해당 주소의 html 헤더와 content를 모두 출력
$ cur -I 주소 : 해당 주소의 html 헤더만 출력 (-I는 --head와 같다)

GET에 추가 정보

헤더 추가
$ curl -H “Host: test.com” -H “name:jun” [주소] : 헤더 정보 추가하기. -H를 여러 번 사용할 수 있다.

User-Agent 추가
$ curl -A “Mozilla/5.0” [주소] : -A 뒤에 지정.
일반적으로 에이전트를 식별하거나 브라우져인척 가장하기 위해 사용한다.

URL 파라미터 추가
$ curl [주소]?key=value&key=value… : URL뒤에 파라미터를 지정.
$ curl -G [주소] -d “key=value&key=value” : -d 옵션은 POST DATA로 지정하는데, -G 옵션을 주면 GET방식 파라미터로 변한다.
$ curl -G [주소] -d “key=value” -d “key=value” : -d 옵션을 나눌 수도 있다.
즉, 위와 같이 입력하면 자동으로 [주소]?key=value&key=value 이런식으로 변환되어 GET으로 요청된다.

POST 사용하기

데이터추가
$ curl -X POST [주소] -d “데이터” : -X POST 옵션은 생략가능 (content-type 지정이 없으면 application/x-www-form-urlencoded 타입으로 보낸다.)

FORM 데이터 추가
HTML의 FORM에 name으로 지정된 부분에 값을 채워서 POST할 경우 사용한다. name을 key로 하여 아래처럼 값을 채워 보낸다.
$ curl -X POST [주소] -d “key=value&key=value&…” : (-X POST는 생략 가능. -d는 --data와 같다)
$ curl -X POST [주소] -d “key=value” -d “key=value” : (상동)
$ curl [주소] --data-urlencode ‘msg=한글’ --data-urlencode ‘name=kkk’ : url인코딩 변환 후 보낸다.

JSON으로 보내기
$ curl -H ‘Content-Type: application/json’ -X POST [주소] -d ‘{“id”:“abc”, “pwd”:“def”}’
$ curl -H “Content-Type: application/json” http://localhost:18899/sum -d “{\“a\”:10,\“b\”:20}”

DOS 커맨드에서는 데이터를 "로 감싸고 내부에 "가 있으면 \를 앞에 추가해 줘야 한다. Linux에서는 바깥을 '로 감싸면 된다. -d 옵션이면 POST로 가기 때문에 별도로 -X 옵션은 필요없다.

그 외 방법으로 사용하기

DELETE로 요청하기
$ curl -X DELETE -G [주소] -d key=value -d key=value
HTTP 인증
$ curl -v -u ID:PASSWORD [주소]

리눅스에서 웹서버 정상 체크 스크립트

#!/bin/bash

if [ "$#" -lt 1 ]; then
    echo "Usage: $0 [URL]"
    exit 1
fi

SVR=$1
RES=$(curl -L -s -o /dev/null -w "%{http_code}" ${SVR})

if [ ${RES} -ne 200 ];then
    echo "${SVR} fail: ${RES}"
    exit ${RES}
fi;

Author: crazyj7@gmail.com
Written with StackEdit.

반응형
screenvideocapture

Screen Capture (Video)

PC 화면의 일부를 캡쳐하는 방법은 많이 있는데…
PC 화면의 일부나 특정 윈도우를 간단하게 영상을 캡쳐하고 싶을 때는 어떻게 해야 할까? 무료 유틸리티를 사용하고 싶다.

먼저 Free License 유틸리티로 동영상 처리 관련된 강력한 프로그램인 ffmpeg를 권장한다.
물론 사용 방법은 커맨드 등을 익혀야 되서 복잡할 수 있지만, 여기서는 이것을 dos batch script로 만들어서 한 번만 만들어 두면 이후에 공짜로 편하게 사용할 수 있다.

  1. 프로그램 설치

구글에서 ffmpeg windows download 라고 검색해서 설치한다.
잘 모르겠으면 윈도우 패키지 링크 주소는
ffmpeg windows 64 bit binary download
다운 받은 파일을 열어 압축을 풀면 bin 폴더가 있다. bin 폴더의 파일들을 c:\windows에 복사하자. (별도 유틸리티 폴더를 만들고, 환경설정으로 PATH에 설정해 두는 것이 좋긴하지만 귀찮으면 위와 같이 한다.)
이제 DOS 커맨드 창에서 ffmpeg라고 실행해서 잘 되는지 확인한다.
image

  1. 스크립트 작성

스크립트1: 특정 윈도우 창만 캡쳐하기
ffmpeg_videocap.bat “윈도우제목” "파일명"
파일명.mp4로 파일이 생성됨.

@echo off
if "%1"=="" goto usage

:: by crazyj7@gmail.com
:: famerate ; 24, 30. 60 
:: 파일 확장자는 mp4, avi, mpg 등 
:: drawmouse : 마우스 커서를 보여줄지 여부 (1/0)

ffmpeg -y -rtbufsize 100M -f gdigrab -framerate 30 -probesize 10M -draw_mouse 0 -i title="%1" -c:v libx264 -r 30  -preset ultrafast -tune zerolatency -crf 25 -pix_fmt yuv420p -vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" "%2.mp4"

goto:eof

:usage
echo Usage)
echo %0 "window title" "filename"
goto:eof

스크립트2: 전체 화면 동영상 캡쳐하기 (모니터가 2개면 둘 다 캡쳐된다.)
ffmpeg_videocap_fullscreen.bat "파일명"

파일명.mp4 파일 생성됨.

@echo off
if "%1"=="" goto usage
 
:: crazyj7@gmail.com 
:: famerate ; 24, 30. 60 
:: 파일 확장자는 mp4, avi, mpg 등 
:: drawmouse : 마우스 커서를 보여줄지 여부 (1/0)
 
ffmpeg -y -rtbufsize 100M -f gdigrab -framerate 30 -probesize 10M -draw_mouse 1 -i desktop -c:v libx264 -r 30 -preset ultrafast -tune zerolatency -crf 25 -pix_fmt yuv420p "%1.mp4"
 
goto:eof
  
:usage
echo Usage)
echo %0 "filename"
goto:eof

스크립트3: 전체 화면 동영상 캡쳐하기. (모니터2개인경우 모니터1만)
주의! 모니터1의 해상도 값으로 코드를 바꿔줘야 한다. (1280x1080 예이다.)
특정 영역 캡쳐하기도 된다. (offset과 크기 조정)
ffmpeg_videocap_full1280x1080.bat “파일명”

@echo off
if "%1"=="" goto usage

:: crazyj7@gmail.com
:: famerate ; 24, 30. 60 
:: 파일 확장자는 mp4, avi, mpg 등 
:: drawmouse : 마우스 커서를 보여줄지 여부 (1/0)

ffmpeg -y -rtbufsize 100M -f gdigrab -framerate 30 -probesize 10M -draw_mouse 1 -offset_x 0 -offset_y 0 -video_size 1920x1080 -i desktop -c:v libx264 -r 30 -preset ultrafast -tune zerolatency -crf 25 -pix_fmt yuv420p "%1.mp4"

goto:eof

:usage
echo Usage)
echo %0 "filename"
goto:eof

  1. 실행
  • 커맨드 실행 종료 (녹화 종료)는 q 또는 ^c(컨트롤c)

특정 윈도우만 동영상 캡쳐를 하려면 아래와 같이 한다.
윈도우 타이틀은 창의 상단에 타이틀바에 기록된 스트링이다. (없거나 못 찾을 경우는 화면 일부영역 캡쳐를 참고하기 바란다.)

c:\temp> ffmpeg_videocap “stackedit” “aaa”
"stackedit"란 제목의 창을 찾아 aaa.mp4 동영상 파일을 생성한다.
aaa

전체화면 동영상 캡쳐
c:\temp> ffmpeg_videofullscreen “full”
전체 화면을 녹화하여 full.mp4 파일이 생성된다. (모니터가 2개면 둘 다 나온다.)
full

모니터1만 캡쳐 또는 일부 영역만 캡쳐
(일부 영역을 지정하려면 스크립트를 수정하여 offset과 size를 조정하면 된다.)
c:\temp> ffmpeg_videofullscreen_1920_1080 “full2”
모니터1만 (1920x1080 해상도) 녹화하여 full2.mp4 동영상 파일을 생성한다.
full2

  1. 보너스 (동영상을 gif로)

생성한 동영상 파일을 움직이는 gif 파일로 변환하기
ffmpeg -i aaa.mp4 aaa.gif
브라우저에 aaa.gif 파일을 드래그드롭하면 움직이는 gif 파일이 재생된다. (웹에 올리기 편하다.)

image

Written with StackEdit.

'Develop > Windows' 카테고리의 다른 글

DOS Batch Script  (0) 2019.10.06
curl 사용법/HTTP 테스트  (0) 2019.10.01
windows 10 kernel structure  (0) 2015.08.28
윈도우8/8.1에서 visual studio 2008 설치실패시 / .net framework 설치  (0) 2015.08.20
64비트 프로그래밍  (2) 2015.06.05

+ Recent posts