macOS 터미널을 효과적으로 활용하기 위한 필수 명령어들을 정리합니다.

네비게이션

디렉토리 이동

# 이전 디렉토리로 이동
cd -

# Tab으로 경로 자동완성
cd /Users/Tab

프롬프트 커스터마이징

# 시간과 현재 디렉토리 표시
export PS1="(\t) \W "

# 색상 추가
export PS1="\e[0;32m[\t | \W]\$ \e[m "

터미널 단축키

단축키 설명
Ctrl + A 줄 맨 앞으로 이동
Ctrl + E 줄 맨 뒤로 이동
Ctrl + U 커서 앞부분 삭제
Ctrl + K 커서 뒷부분 삭제

파일 검색

find 명령어

# 현재 디렉토리에서 파일 이름으로 검색
find . -name 'LoginActivity.smali'

명령어 실행

명령어 결과를 변수에 저장

# 백틱 사용
변수명=`명령어`

# $() 사용 (권장)
변수명=$(명령어)

여러 명령어 실행

# 세미콜론으로 연결
명령어1; 명령어2; 명령어3

파일 내용 보기

# n번째 줄부터 보기 (1은 처음부터)
tail +n filename

# 매뉴얼 보기
man command_name

텍스트 처리

파일 내용 일괄 수정

# 모든 .java 파일에서 문자열 치환
perl -pi -w -e 's/검색문자열/치환문자열/g;' *.java

환경변수

기본 환경변수

$USER   # 현재 사용자
$HOME   # 홈 디렉토리

환경변수 없이 프로그램 실행

/usr/local/bin/ 디렉토리에 실행 파일을 넣으면 경로 지정 없이 실행할 수 있습니다.

Java 관련

Java 경로 확인

/usr/libexec/java_home

Automator와 AppleScript

Terminal에서 스크립트 실행

on run {input, parameters}
    tell application "Terminal"
        activate
        do script "sh ~/script.sh"
    end tell
    return input
end run

텍스트 단어 수 세기

on run {input, parameters}
    set theWordCount to count words of (input as string)
    display dialog (theWordCount & " words in the selected text." as string)
end run

ADB 명령어 (Android 개발)

여러 디바이스에 앱 설치

# 모든 연결된 디바이스에 앱 언인스톨
adb devices | tail -n +2 | cut -sf 1 | xargs -I {} adb -s {} uninstall com.example.app

# 모든 디바이스에 APK 설치
adb devices | tail -n +2 | cut -sf 1 | xargs -I {} adb -s {} install -r app.apk

# 모든 디바이스에 파일 푸시
adb devices | tail -n +2 | cut -sf 1 | xargs -I {} adb -s {} push ./file.apk ./sdcard/file.apk

ADB 타겟 디바이스 지정

옵션 설명
-d USB로 연결된 디바이스만
-e 에뮬레이터만
-s serial 특정 시리얼 번호 디바이스
# 특정 디바이스에서 셸 실행
adb -s 7f1c864e shell

함수 정의와 파라미터

Bash 함수

testfunc2() {
    echo "$# parameters"
    echo Using '$*'
    for p in $*; do
        echo "[$p]"
    done
    echo Using '"$*"'
    for p in "$*"; do
        echo "[$p]"
    done
    echo Using '$@'
    for p in $@; do
        echo "[$p]"
    done
    echo Using '"$@"'
    for p in "$@"; do
        echo "[$p]"
    done
}

디바이스별 명령 실행 스크립트

adb devices | while read line; do
    if [ ! "$line" = "" ] && [ $(echo $line | awk '{print $2}') = "device" ]; then
        device=$(echo $line | awk '{print $1}')
        echo "$device $@ ..."
        adb -s $device $@
    fi
done

Android 리버스 엔지니어링

odex를 smali로 변환

baksmali -a <api_level> -x <odex_file> -d <framework_dir>

smali를 dex로 변환

java -jar smali.jar framework -o classes.dex

dex를 jar로 변환

dex2jar classes.dex

ADB TCP/IP 설정 (Tasker)

su
setprop service.adb.tcp.port 5555
stop adbd
start adbd

결론

터미널 명령어를 잘 활용하면 Mac에서의 작업 효율을 크게 높일 수 있습니다. 자주 사용하는 명령어는 alias로 등록하거나 스크립트로 만들어 두면 더욱 편리합니다.