유용한 Bash 별칭 및 기능 소개


소개

명령줄에서 더 많이 작업할수록 사용하는 명령의 대부분이 사용 가능한 명령의 매우 작은 하위 집합이라는 것을 알게 될 것입니다. 대부분의 작업은 습관적이며 매일 같은 방식으로 실행할 수 있습니다.

가장 일반적인 명령 유틸리티의 제작자는 단축 이름을 사용하여 관련 없는 입력을 제거하려고 시도했지만("list\ 대신 "ls\를 입력하고 \\ 대신 "cd\를 입력하여 매일 얼마나 많은 키 입력을 절약하는지 생각해 보십시오. change-directory), 이들은 유비쿼터스가 아닙니다. 또한 많은 사람들이 항상 동일한 몇 가지 옵션을 활성화한 상태로 명령을 실행합니다.

다행스럽게도 bash를 사용하면 별칭과 셸 함수를 사용하여 자체 단축키를 만들고 시간을 절약할 수 있습니다. 이 가이드에서는 이를 활용하는 방법에 대해 논의하고 올바른 방향으로 시작하는 데 도움이 되는 몇 가지 유용한 예를 제공합니다.

Bash 별칭을 선언하는 방법

bash에서 별칭을 선언하는 것은 매우 간단합니다. 너무 쉬워서 지금 시도해야 합니다.

단순히 명령줄에 별칭을 입력하여 셸 세션 동안 지속되는 별칭을 선언할 수 있습니다. 구문은 다음과 같습니다.

  1. alias alias_name="command_to_run"

이웃 요소와 등호 사이에는 간격이 없습니다. 이것은 선택 사항이 아닙니다. 여기에 공백이 있으면 명령이 중단됩니다.

이제 일반적인 bash 별칭을 만들어 보겠습니다. 많은 사람들이 자주 사용하는 관용적인 명령 구문은 ls -lha 또는 ls -lhA입니다(두 번째는 현재 및 상위 디렉토리 목록을 생략함). 다음을 입력하여 ll로 호출할 수 있는 바로 가기를 만들 수 있습니다.

alias ll="ls -lhA"

이제 ll을 입력하면 숨겨진 디렉토리를 포함하여 긴 형식으로 현재 디렉토리의 목록을 얻을 수 있습니다.

ll
-rw-r--r-- 1 root root 3.0K Mar 20 18:03 .bash_history
-rw-r--r-- 1 root root 3.1K Apr 19  2012 .bashrc
drwx------ 2 root root 4.0K Oct 24 14:45 .cache
drwx------ 2 root root 4.0K Mar 20 18:00 .gnupg
-rw-r--r-- 1 root root    0 Oct 24 17:03 .mysql_history
-rw-r--r-- 1 root root  140 Apr 19  2012 .profile
drwx------ 2 root root 4.0K Oct 24 14:21 .ssh
-rw------- 1 root root 3.5K Mar 20 17:24 .viminfo

별칭을 제거하려면 unalias 명령을 사용하십시오.

unalias ll

이제 별칭이 제거되었습니다.

인수 없이 alias 명령을 전달하여 구성된 모든 별칭을 나열할 수 있습니다.

alias

일시적으로 별칭을 우회하려면(예: lsls -a로 별칭 지정) 다음과 같이 입력할 수 있습니다.

\ls

이렇게 하면 별칭 버전을 사용하지 않고 경로에 있는 일반 명령을 호출합니다.

설정을 해제하지 않았다고 가정하면 현재 셸 세션 전체에서 ll 별칭을 사용할 수 있지만 새 터미널 창을 열면 이 별칭을 사용할 수 없습니다.

이를 지속적으로 유지하려면 쉘 세션이 시작될 때 읽히는 다양한 파일 중 하나에 이를 추가해야 합니다. 인기 있는 선택은 ~/.bashrc~/.bash_profile입니다. 파일을 열고 거기에 별칭을 추가하기만 하면 됩니다.

nano ~/.bashrc

맨 아래 또는 원하는 위치에 명령줄에 추가한 별칭을 추가합니다. bash 별칭에 관한 전체 섹션을 선언하는 주석을 자유롭게 추가하십시오.

#########
# Aliases
#########

alias ll="ls -lhA"

이 별칭 또는 변형은 실제로 파일에 이미 있을 수 있습니다. 많은 배포판에는 몇 가지 유용한 별칭이 있는 표준 bash 구성 파일 세트가 함께 제공됩니다.

파일을 저장하고 닫습니다. 추가한 별칭은 다음에 새 셸 세션을 시작할 때 사용할 수 있습니다. 파일에서 변경한 내용을 현재 세션으로 읽으려면 bash에게 지금 파일을 다시 읽으라고 지시하십시오.

source ~/.bashrc

별칭 예

이제 고유한 별칭을 만드는 방법을 알았으므로 유용할 수 있는 몇 가지 인기 있는 별칭에 대해 이야기해 보겠습니다. 이는 웹 전체에서 찾을 수 있으며 일부는 배포판의 기본 bash 구성에도 포함될 수 있습니다.

탐색 및 목록

대부분의 간단한 Linux 명령은 일부 형식 지정 및 옵션을 적용할 때 더 유용합니다.

위에서 하나의 ls 예를 논의했지만 찾을 수 있는 다른 많은 예가 있습니다.

기본적으로 ls가 열에 표시되고 파일 유형 표시기("/” 등의 끝 디렉토리)가 표시되도록 합니다.

alias ls="ls -CF"

또한 올바른 명령을 호출하기 위해 몇 가지 오타를 예상할 수 있습니다.

alias sl="ls"

또한 긴 형식으로 큰 디렉토리 목록을 보기 위해 출력을 less로 파이프하는 별칭을 만들어 보겠습니다.

alias lsl="ls -lhFA | less"

ls에서 벗어나 cd에 대한 몇 가지 유용한 명령을 시도해 보는 것은 어떻습니까?

이것은 공간을 잊어버린 경우에도 상위 디렉토리로 변경됩니다.

alias cd..="cd .."

..에 대한 별칭을 만들어 cd 부분을 완전히 잘라낼 수도 있습니다.

alias ..="cd .."

다음 별칭을 설정하여 현재 디렉터리에서 파일을 쉽게 찾을 수 있습니다.

alias fhere="find . -name "

시스템 별칭

일부 모니터링 및 시스템 통계 명령은 어떻습니까? 매번 같은 옵션으로 호출하므로 별칭을 만드는 것이 좋습니다.

이것은 파일 시스템 유형을 포함하여 사람이 읽을 수 있는 단위로 디스크 사용량을 나열하고 하단에 합계를 인쇄합니다.

alias df="df -Tha --total"

선호하는 du 출력에 대한 별칭도 추가할 수 있습니다.

alias du="du -ach | sort -h"

우리의 무료 출력을 보다 인간 친화적으로 만들어서 같은 방향으로 계속 갑시다.

alias free="free -mt"

상장 프로세스 테이블로 많은 일을 할 수 있습니다. 기본 출력을 설정하여 시작하겠습니다.

alias ps="ps auxf"

프로세스 테이블을 검색 가능하게 만드는 것은 어떻습니까? 전달할 인수에 대해 프로세스를 검색하는 별칭을 만들 수 있습니다.

alias psg="ps aux | grep -v grep | grep -i -e VSZ -e"

이제 찾고 있는 프로세스 이름을 인수로 사용하여 호출하면 멋지고 간결한 출력을 얻을 수 있습니다.

psg bash
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
1001      5227  0.0  0.0  26320  3376 pts/0    Ss   16:29   0:00 bash

기타 별칭

우리가 자주 사용하는 mkdir 명령에 대한 일반적인 옵션 중 하나는 필요한 상위 디렉토리를 만드는 -p 플래그입니다. 이것을 기본값으로 만들 수 있습니다.

alias mkdir="mkdir -p"

그 위에 -v 플래그를 추가하여 모든 디렉토리 생성에 대한 정보를 얻을 수 있으므로 실수로 디렉토리 분기를 유발하는 오타가 있는지 빠르게 인식할 수 있습니다.

alias mkdir="mkdir -pv"

wget을 사용하여 인터넷에서 파일을 다운로드할 때 거의 모든 상황에서 문제 발생 시 다운로드를 계속하기 위해 -c 플래그를 전달하는 것이 좋습니다. 다음과 같이 설정할 수 있습니다.

alias wget="wget -c"

history 명령 출력의 grep과 같이 쉽게 기록을 검색할 수 있습니다. 이것은 나중에 더 복잡한 리콜을 수행할 수 있는 명령 번호를 제공하기 때문에 검색을 역순으로 하기 위해 CTRL-R을 사용하는 것보다 때때로 더 유용합니다.

alias histg="history | grep"

표준 버전에서 더 복잡한 도구로 업그레이드하는 것을 선호하는 몇 가지 시스템 도구가 있습니다. 필수 유틸리티를 다운로드한 경우에만 작동하지만 매우 유용할 수 있습니다. 이는 다른 별칭에 영향을 줄 수 있습니다.

이것은 기존의 top 명령을 눈에 훨씬 더 편하고 복잡한 문제 없이 정렬, 검색 및 스크롤할 수 있는 향상된 버전으로 대체합니다.

alias top="htop"

비슷한 방식으로 ncdu 명령을 다운로드하여 간단한 파일 작업을 수행하는 데 사용할 수 있는 대화형 ncurses 디스플레이에 파일 및 디렉터리 크기를 표시할 수 있습니다.

alias du="ncdu"

df용으로 업그레이드된 유틸리티인 pydf도 있습니다. 색상화된 출력 및 텍스트 기반 사용 막대를 제공합니다. 이 유틸리티가 있는 경우 기본적으로 이 유틸리티를 사용할 수 있습니다.

alias df="pydf"

NAT를 사용하는 라우터 뒤에 있을 때 명령줄에서 공용 IP 주소가 필요한 적이 있습니까? 다음과 같은 것이 유용할 수 있습니다.

alias myip="curl http://ipecho.net/plain; echo"

저만의 목적을 위해 기사에 업로드하는 이미지를 690px 이하로 최적화하는 것을 좋아하기 때문에 명령이 포함된 ImageMagick 패키지(sudo apt-get install imagemagick가 아직 제공되지 않는 경우)를 사용합니다. 이 작업을 수행하는 mogrify라고 합니다. 내 ~/.bashrc 파일에 다음 명령이 있습니다.

alias webify="mogrify -resize 690\> *.png"

이렇게 하면 너비가 690px보다 넓은 경우에만 현재 디렉토리의 모든 PNG 이미지 크기가 조정됩니다.

그런 다음 서버에 업로드해야 하는 경우 sftp를 사용하여 연결하고 자동으로 특정 디렉토리로 변경할 수 있습니다.

  1. alias upload="sftp username@server.com</^>:/path/to/upload/directory<^>

Bash 함수 시작하기

별칭은 빠르고 쉽게 구현할 수 있지만 범위가 상당히 제한적입니다. 무엇보다도 런타임에 주어진 인수에 액세스할 수 없는 명령을 함께 연결하려고 할 때 찾을 수 있습니다. 별칭은 모든 기능 후에 읽히기 때문에 때때로 상당히 느릴 수 있습니다.

보다 강력한 별칭에 대한 대안이 있으며 bash 별칭과 전체 셸 스크립트 사이의 격차를 해소하는 데 도움이 될 수 있습니다. 이를 쉘 함수라고 합니다. 별칭과 거의 같은 방식으로 작동하지만 더 프로그래밍적이고 표준 방식으로 입력을 받아들입니다.

Bash는 매우 복잡한 상황에서 사용될 수 있고 bash는 전체 스크립팅 언어이기 때문에 여기서는 자세히 설명하지 않겠습니다. 하지만 몇 가지 기본적인 예를 살펴보겠습니다.

우선 bash 구문을 선언하는 두 가지 기본 방법이 있습니다. 첫 번째는 function 명령을 사용하며 다음과 같습니다.

  1. function function_name {
  2. command1
  3. <^>command2</^>
  4. }

다른 구문은 "C와 유사한\ 괄호 세트를 사용합니다.

  1. function_name () {
  2. command1
  3. command2
  4. }

이 두 번째 형식을 한 줄로 압축하고 명령을 세미콜론으로 구분할 수 있습니다. 마지막 명령 뒤에도 세미콜론이 반드시 와야 합니다.

  1. function_name () { command1; command2; }

매우 유용한 bash 함수를 시연하는 것으로 시작하겠습니다. 이것은 디렉토리를 만든 다음 즉시 해당 디렉토리로 이동합니다. 이것은 일반적으로 새 디렉토리를 만들 때 취하는 순서와 정확히 일치합니다.

mcd () {
    mkdir -p $1
    cd $1
}

이제 일반 mkdir 명령 대신 이 함수를 사용하여 생성 후 디렉토리로 자동 변경하는 경우:

mcd test
pwd
/home/demouser/test

주변에서 볼 수 있는 멋진 기능 중 하나는 extract 기능입니다. 이것은 많은 유틸리티를 결합하여 거의 모든 압축 파일 형식의 압축을 풀 수 있도록 합니다. 다양한 변형이 있지만 여기에서 나온 것입니다.

function extract {
 if [ -z "$1" ]; then
    # display usage if no parameters given
    echo "Usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>"
    echo "       extract <path/file_name_1.ext> [path/file_name_2.ext] [path/file_name_3.ext]"
    return 1
 else
    for n in $@
    do
      if [ -f "$n" ] ; then
          case "${n%,}" in
            *.tar.bz2|*.tar.gz|*.tar.xz|*.tbz2|*.tgz|*.txz|*.tar) 
                         tar xvf "$n"       ;;
            *.lzma)      unlzma ./"$n"      ;;
            *.bz2)       bunzip2 ./"$n"     ;;
            *.rar)       unrar x -ad ./"$n" ;;
            *.gz)        gunzip ./"$n"      ;;
            *.zip)       unzip ./"$n"       ;;
            *.z)         uncompress ./"$n"  ;;
            *.7z|*.arj|*.cab|*.chm|*.deb|*.dmg|*.iso|*.lzh|*.msi|*.rpm|*.udf|*.wim|*.xar)
                         7z x ./"$n"        ;;
            *.xz)        unxz ./"$n"        ;;
            *.exe)       cabextract ./"$n"  ;;
            *)
                         echo "extract: '$n' - unknown archive method"
                         return 1
                         ;;
          esac
      else
          echo "'$n' - file does not exist"
          return 1
      fi
    done
fi
}

이 함수는 첫 번째 인수를 사용하고 사용된 파일 확장자에 따라 적절한 유틸리티 프로그램을 호출합니다.

결론

이 가이드가 자신만의 별칭과 bash 함수를 만드는 데 영감을 주었기를 바랍니다. 이것들을 광범위하게 사용하면 쉘에서의 시간을 더 즐겁고 덜 복잡하게 만드는 데 도움이 될 수 있습니다.

잠재적으로 파괴적인 동작으로 기존 명령을 재정의하는 것을 주의해야 합니다. 반대의 작업을 수행하고 더 안전한 변형에 대한 명령의 별칭을 지정(예를 들어 재귀적으로 삭제하기 전에 항상 확인을 요청)하는 경우에도 한 번 의존하게 된 시스템이 없는 시스템에 처음 있을 때 다시 물릴 수 있습니다. .

별칭을 만드는 데 적합할 수 있는 후보를 찾으려면 가장 일반적으로 사용되는 명령에 대한 기록을 검색하는 것이 좋습니다. 여기에서 한 줄로 가장 많이 사용되는 명령을 볼 수 있습니다.

history | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl |  head -n10
 1	247  24.7%  cd
 2	112  11.2%  vim
 3	90   9%     exit
 4	72   7.2%   ls
 5	70   7%     xset
 6	56   5.6%   apt-get
 7	40   4%     vlc
 8	40   4%     rm
 9	38   3.8%   screen
10	27   2.7%   htop

자주 사용하는 명령의 시작점으로 이 목록을 쉽게 사용할 수 있습니다. 댓글 섹션에서 좋아하는 bash 별칭 및 기능을 자유롭게 공유하십시오.

저스틴 엘링우드