우분투 ubuntu2009/01/21 19:16
우분투 등 데비안 계열의 리눅스를 쓰다보면 apt-get (또는 aptitude) 명령을 참 많이 쓰게 될 것입니다. 각종 프로그램을 깔고 지우고 업그레이드하는 명령이니까요. 시냅틱(synaptic)이라는 훌륭한 패키지 관리툴이 있지만, 터미널에서 apt-get을 이용하는 것이 조금 빠르고 또한 편리한 경우도 종종 있습니다. 그런데 'sudo apt-get install" 등등을 번번히 입력하는 것은 좀 귀찮습니다. 그래서 많은 분들이 'alias'를 지정하여 명령어를 짧게 줄여서 사용하실 것입니다.

일단 alias 지정하는 방법부터 간단히 소개합니다.

터미널에서 다음 명령어를 입력하여 ".bashrc"라는 파일을 불러옵니다.
$ gedit ~/.bashrc


파일의 끝에 다음 처럼 alias를 지정합니다.

alias apti='sudo apt-get install'  # 패키지 설치
alias apty='sudo apt-get install -y'  # 확인 없이 패키지 설치
alias aptu='sudo apt-get update'  # 패키지 목록 업데이트
alias aptg='sudo apt-get upgrade'   # 패키지 업그레이드
alias aptp='sudo apt-get purge'  # 패키지 지우기


'aptitude'를 선호한다면 다음 처럼 지정해주면 되겠죠.
alias apti='sudo aptitude install'  # 패키지 설치
alias aptu='sudo aptitude update'  # 패키지 목록 업데이트
alias aptg='sudo aptitude full-upgrade'   # 패키지 업그레이드
alias aptp='sudo aptitude purge'  # 패키지 지우기


위의 예에서 붉은 글씨 부분이 이른바 alias이고, 작은 따옴표로 묶인 것이 각각의 alias에 대응되는 진짜 명령입니다. alias는 물론 자기가 원하는 대로 넣어줄 수 있습니다. 'apti'도 길다 싶으면 'ai'로 지정해도 된다는 얘기죠. 물론 'apt-get' 뿐만 아니라 자신이 자주 사용하는 명령어가 있다면 무엇이든 지정해서 사용하면 됩니다. 주의할 점은 이미 존재하는 명령어와 겹치지 않도록 해야한다는 것입니다. 만약 alias cd='sudo dpkg -i' 이렇게 지정한다면 디렉토리를 바꾸는 'cd' 명령이 불가능해지겠죠?

아무튼, alias 지정을 마쳤으면 .bashrc 파일을 저장합니다. 다음번 터미널을 열면 지정한 alias 명령이 사용 가능해집니다. 당장 효과를 보고 싶으면 아래와 같이 명령어를 입력해줍니다.

$ source ~/.bashrc


여기까지는 리눅스를 처음 경험하는 분이 아니라면 대부분 알고있을 내용이니, 팁이라고 할 것도 없는 얘기였고요. 지금부터 약간은 팁다운 이야기를 해보겠습니다.

위와 같이 alias로 apt-get 명령을 쓰면 타이핑할 일이 줄어들어 좋기는 한데 작은 문제점이 있습니다.
'tab' 키를 사용하여 나머지 부분을 자동 완성해주는 멋지고 편리한 기능이 동작하지 않거든요.
'sudo apt-get install (purge) au' 까지 입력하고 탭키를 누르면 'au'로 시작하는 패키지를 찾아서 보여주잖아요? 정확한 패키지의 이름을 모르거나 이름이 길어서 입력하기 귀찮을 때 쓰면 딱인데, alias를 사용하여 'apti au'라고 타이핑하고 탭키를 백번 눌러봤자 아무 반응이 없습니다. 좀 불편합니다.

인터넷을 뒤져보니 방법이 있더군요. 소개합니다.

.bashrc 파일을 에디터로 열고 일단 아래 코드를 복사하여 넣어줍니다.

# Author.: Ole Jørgen Brønner
# Date...: 23.03.2008
# License: Whatever

# Wraps a completion function
# make-completion-wrapper <actual completion function> <name of new func.>
#                         <command name> <list supplied arguments>
# eg.
#     alias agi='apt-get install'
#     make-completion-wrapper _apt_get _apt_get_install apt-get install
# defines a function called _apt_get_install (that's $2) that will complete
# the 'agi' alias. (complete -F _apt_get_install agi)
#
function make-completion-wrapper () {
    local function_name="$2"
    local arg_count=$(($#-3))
    local comp_function_name="$1"
    shift 2
    local function="
function $function_name {
    ((COMP_CWORD+=$arg_count))
    COMP_WORDS=( "$@" \${COMP_WORDS[@]:1} )
    "$comp_function_name"
    return 0
}"
    eval "$function"
}


(#로 시작하는 부분은 주석이니 없어도 무방하지만, 제작자에게 예의를 표하는 의미로 그냥 넣어줍시다...)
그 아래에 다음과 같은 코드를 넣어줍니다.

alias apti='sudo apt-get install'
make-completion-wrapper _apt_get _apti apt-get install
complete -o filenames -F _apti apti

위에서 주의하여 볼 곳은 붉은 글씨 부분입니다. 여러분이 지정한 alias의 이름이 저 곳에 들어가야 합니다.
파란 글씨는 지정한 alias에 대응되는 실제 명령어를 넣어주면 됩니다.
그럼 초록 글씨 부분은 뭘까요.
'complete -p <명령어>'를 입력했을 때 출력되는 것을 보고 똑같이 입력해주면 됩니다.
다 되었으면 .bashrc 파일을 저장하고, 아까 처럼 'source ~/.bashrc' 한번 쳐줍니다.
이제 'apti au'까지 입력하고 탭키를 두번 눌러주면  터미널 화면에 au로 시작하는 패키지들이 주루룩 출력될 것입니다.


'aptitude'를 예로 들어 종합적인 보충을 해보죠.
'sudo aptitude purge'를 'attp'라는 alias로 지정하기로 했다면,터미널에서 다음을 입력해봅니다.

$ complete -p aptitude


다음과 같이 출력될 것입니다.
complete -o default -F _aptitude aptitude

그러면 '.bashrc'파일에 들어갈 코드는 다음과 같이 되겠죠.

alias attp='sudo aptitude purge'
make-completion-wrapper _aptitude _attp aptitude purge
complete -o filenames -F _attp attp


위 방법을 응용하면 alias를 이용했을 때 탭키의 자동 완성 기능이 동작하지 않는 명령어들을  좀 더 편하게 사용할 수 있겠지요?

위의 팁 출처는 -> http://ubuntuforums.org/showthread.php?t=733397




TRACKBACK http://mojolog.net/trackback/395 관련글 쓰기

댓글을 달아 주세요

  1. 안녕하세요.
    위의 팁을 적용하기 전에 /etc/bash_completion 이라는 파일이 있나 확인해 보세요.
    ubuntu 등에서 패키지로 소프트웨어를 설치하면 위 파일에 자동 완성과 관련된 코드를 넣어줍니다.
    그리고 나서, /etc/bash.bashrc 나 자신의 .bashrc 에 아래 내용이 존재하는지 확인하고, 없으면 추가해주면 됩니다.

    if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
    fi

    이렇게 하면 따로 신경 쓰지 않아도 패키지로 설치된 소프트웨어에 대해서는 자동으로 자동 완성 기능이 동작합니다.

    2009/05/27 10:26 [ ADDR : EDIT/ DEL : REPLY ]