유용한 셸 매크로

다음 내용들을 rc파일(.bashrc, .zshrc)에 등록해 두면 편리하다. 맥, 리눅스 공통으로 적용할 수 있다.



언어 설정

시스템 기본 메시지를 영문으로 변경한다.
무언가 잘못되어 에러 메시지가 출력될 때, 영문으로 에러메시지가 나오면 편리하다. 구글링이 잘 되기 때문이다.

export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8


ls

ls 명령어로 표시되는 날자가 표시되는 형식을 변경한다. 이 설정으로 파일이 수정된 연도와 요일을 편하게 읽을 수 있다.

# 리눅스의 경우
alias ls='ls --color=tty --time-style="+%Y-%m-%d %a %H:%M:%S"'

# MAC의 경우
# brew install coreutils 으로 GNU Core Util 을 설치한 후 이용 가능
alias ls='gls --color=tty --time-style="+%Y-%m-%d %a %H:%M:%S"'


실행 결과
ubuntu:~$ ls -al
# 날자 표시 형태가 바뀐 것을 확인
drwxr-xr-x  6 gdhong gdhong 4096 2021-04-16 Fri 11:35:22 .
drwxr-xr-x 19 root   root   4096 2021-04-13 Tue 16:01:50 ..
-rw-------  1 gdhong gdhong 1699 2021-05-11 Tue 13:52:10 .bash_history
-rw-r--r--  1 gdhong gdhong  220 2014-04-09 Wed 10:03:15 .bash_logout
-rw-r--r--  1 gdhong gdhong 3771 2017-05-16 Tue 21:49:38 .bashrc


vi

vim 이 vi 보다 편리하다

# 리눅스의 경우
alias vi='vim'

# MAC의 경우
# brew install neovim 설치 후 이용 가능
alias vim="nvim"
alias vi="nvim"
alias vimdiff="nvim -d"
export EDITOR=/usr/local/bin/nvim


GNU Core Utils (MAC OS only)

맥의 경우 GNU Core Util 이 설치되어 있지 않아 불편하다.

실행 결과
# brew install coreutils 으로 GNU Core Util 을 설치한 후 이용 가능
alias zcat=gzcat


IP 도구

alias ipaddr="ifconfig | grep 'inet ' | sed -e 's#ask.*##g; s#ast.*##g' | grep -oE '[0-9.]{7,}' | sort"
alias myip="dig +short myip.opendns.com @resolver1.opendns.com"


실행 결과
ubuntu:~$ ipaddr
# 호스트의 모든 IP를 출력
10.211.55.2
10.37.129.2
127.0.0.1
172.16.11.217
192.168.0.107

ubuntu:~$ myip
# 호스트의 공인 IP를 출력 (사설IP가 아닌 공유기의 공인IP를 출력)
210.aaa.209.ccc


인증서 에러가 자주 나는 경우

전송되는 패킷을 모두 검사하는 DPI(Deep Packet Inspection) 보안장비를 운영하는 연구소의 경우에 유용하다.
DPI 장비는 모든 패킷의 인증서를 변조한다. 때문에 https 사이트에서 curl 이나 wget 을 하면 에러가 발생한다. 호스트의 키체인에 DPI 장비의 인증서를 제대로 넣었는데도 에러가 발생하는 경우가 있다. 이 때, 이를 무시하는 옵션을 넣어두면 편리하다. 

alias wget='wget --no-check-certificate'
alias curl='curl --insecure'


메일 보내기 도구

특정 작업이 완료되었을 때 이메일을 발송한다. 시간이 오래 걸리는 작업을 수행할 때 편리하다 
(스팸메일함에 들어갈 수도 있으니 예외처리가 필요하다)

function mailme(){
  #hn=`hostname -s`
  #hn=${hn:u}
  body=""
  if   [[ "$#" -eq "1" ]]; then
    title=$1
  elif [[ "$#" -eq "2" ]]; then
    title=$1
    body=$2
  else
    return
  fi
  echo $body | mail -s "[ALARM] $title" gdhong@hankuk.ac.kr
}


실행 결과
ubuntu:~$ cp 100GB.bin /new/directory && mailme "copy finished"
# 복사 완료 후, gdhong@hankuk.ac.kr 으로 메일이 전송된다.


pyenv

pyenv 로 파이썬을 설치한 경우, 다음을 선언해두면 사용이 편리하다

eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"