Computer >> 컴퓨터 >  >> 프로그램 작성 >> BASH 프로그래밍

없이는 살 수 없는 Bash 별칭

Bash 별칭은 Bash 명령을 새 명령으로 보완하거나 재정의하는 방법입니다. Bash 별칭을 사용하면 사용자가 POSIX 터미널에서 환경을 쉽게 맞춤설정할 수 있습니다. 종종 $HOME/.bashrc에 정의됩니다. 또는 $HOME/bash_aliases ($HOME/.bashrc에 의해 로드되어야 함 ).

대부분의 배포판은 기본 .bashrc에 최소한 몇 가지 인기 있는 별칭을 추가합니다. 새 사용자 계정의 파일. 다음은 Bash 별칭의 구문을 보여주는 간단한 것입니다.

alias ls='ls -F'
alias ll='ls -lh'

모든 배포판에 미리 채워진 별칭이 있는 것은 아닙니다. 별칭을 수동으로 추가하는 경우 현재 Bash 세션에 이를 로드해야 합니다.

$ source ~/.bashrc

그렇지 않으면 터미널을 닫았다가 다시 열어 구성 파일을 다시 로드할 수 있습니다.

Bash 초기화 스크립트에 정의된 별칭으로 ll을 입력할 수 있습니다. ls -l의 결과를 얻습니다. , 그리고 ls를 입력하면 평범한 old 의 출력 대신에 얻을 수 있습니다. 엘.

이러한 별칭은 있으면 좋지만 가능한 것의 표면을 긁는 것일 뿐입니다. 다음은 한 번 사용하면 없이는 살 수 없는 상위 10개의 Bash 별칭입니다.

먼저 설정

시작하기 전에 ~/.bash_aliases라는 파일을 만듭니다. :

$ touch ~/.bash_aliases

그런 다음 이 코드가 ~/.bashrc에 나타나는지 확인합니다. 파일:

if [ -e $HOME/.bash_aliases ]; then
    source $HOME/.bash_aliases
fi

이 문서의 별칭을 직접 사용해보고 싶다면 .bash_aliases에 입력하세요. 파일을 만든 다음 소스 ~/.bashrc를 사용하여 Bash 세션에 로드합니다. 명령.

파일 크기별로 정렬

GNOME의 Nautilus, MacOS의 Finder, Windows의 Explorer와 같은 GUI 파일 관리자로 컴퓨팅 생활을 시작했다면 파일 목록을 크기별로 정렬하는 데 익숙할 것입니다. 터미널에서도 할 수 있지만 정확하지 않습니다.

GNU 시스템의 구성에 이 별칭을 추가하십시오.

alias lt='ls --human-readable --size -1 -S --classify'

이 별칭은 lt를 대체합니다. ls 각 항목의 크기를 표시한 다음 파일의 종류를 나타내는 표기법과 함께 단일 열에서 크기별로 정렬하는 명령입니다. 새 별칭을 로드한 다음 시도해 보세요.

$ source ~/.bashrc
$ lt
total 344K
140K configure*
 44K aclocal.m4
 36K LICENSE
 32K config.status*
 24K Makefile
 24K Makefile.in
 12K config.log
8.0K README.md
4.0K info.slackermedia.Git-portal.json
4.0K git-portal.spec
4.0K flatpak.path.patch
4.0K Makefile.am*
4.0K dot-gitlab.ci.yml
4.0K configure.ac*
   0 autom4te.cache/
   0 share/
   0 bin/
   0 install-sh@
   0 compile@
   0 missing@
   0 COPYING@

MacOS 또는 BSD에서는 ls 명령에는 동일한 옵션이 없으므로 이 별칭이 대신 작동합니다.

alias lt='du -sh * | sort -h'

이 버전의 결과는 약간 다릅니다:

$ du -sh * | sort -h
0       compile
0       COPYING
0       install-sh
0       missing
4.0K    configure.ac
4.0K    dot-gitlab.ci.yml
4.0K    flatpak.path.patch
4.0K    git-portal.spec
4.0K    info.slackermedia.Git-portal.json
4.0K    Makefile.am
8.0K    README.md
12K     config.log
16K     bin
24K     Makefile
24K     Makefile.in
32K     config.status
36K     LICENSE
44K     aclocal.m4
60K     share
140K    configure
476K    autom4te.cache

실제로 Linux에서도 이 명령이 유용합니다. ls 사용 디렉토리와 심볼릭 링크를 크기가 0으로 나열하며 이는 실제로 원하는 정보가 아닐 수 있습니다. 당신의 선택입니다.

이 별칭 아이디어에 대해 Brad Alexander에게 감사드립니다.

마운트된 드라이브만 보기

마운트 명령은 너무 간단했습니다. 단 하나의 명령으로 컴퓨터에 마운트된 모든 파일 시스템의 목록을 얻을 수 있으며 워크스테이션에 연결된 드라이브의 개요에 자주 사용되었습니다. 대부분의 컴퓨터에는 USB 포트가 그보다 많지 않아 결과를 관리할 수 있었기 때문에 3~4개 이상의 항목을 보는 것이 인상적이었습니다.

컴퓨터는 이제 좀 더 복잡해지고 LVM, 물리적 드라이브, 네트워크 스토리지 및 가상 파일 시스템 간에 mount 결과 구문 분석이 어려울 수 있습니다.

sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=8131024k,nr_inodes=2032756,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
[...]
/dev/nvme0n1p2 on /boot type ext4 (rw,relatime,seclabel)
/dev/nvme0n1p1 on /boot/efi type vfat (rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=ascii,shortname=winnt,errors=remount-ro)
[...]
gvfsd-fuse on /run/user/100977/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=100977,group_id=100977)
/dev/sda1 on /run/media/seth/pocket type ext4 (rw,nosuid,nodev,relatime,seclabel,uhelper=udisks2)
/dev/sdc1 on /run/media/seth/trip type ext4 (rw,nosuid,nodev,relatime,seclabel,uhelper=udisks2)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,relatime)

이 문제를 해결하려면 다음과 같은 별칭을 사용하십시오.

alias mnt="mount | awk -F' ' '{ printf \"%s\t%s\n\",\$1,\$3; }' | column -t | egrep ^/dev/ | sort"

이 별칭은 awk 를 사용합니다. mount 의 출력을 구문 분석하려면 열별로 출력을 아마도 찾고 있는 것으로 줄입니다(파일 시스템이 아닌 어떤 하드 드라이브가 마운트되었는지):

$ mnt
/dev/mapper/fedora-root  /
/dev/nvme0n1p1           /boot/efi
/dev/nvme0n1p2           /boot
/dev/sda1                /run/media/seth/pocket
/dev/sdc1                /run/media/seth/trip

MacOS에서는 마운트 명령은 매우 장황한 출력을 제공하지 않으므로 별칭이 과도할 수 있습니다. 그러나 간결한 보고서를 원하는 경우 다음을 시도하십시오.

alias mnt='mount | grep -E ^/dev | column -t'

결과:

$ mnt
/dev/disk1s1  on  /                (apfs,  local,  journaled)
/dev/disk1s4  on  /private/var/vm  (apfs,  local,  noexec,     journaled,  noatime,  nobrowse)

grep 기록에서 명령 찾기

때때로 당신은 터미널에서 무엇을 하는 방법을 알아내고 방금 배운 것을 결코 잊지 않을 것이라고 스스로에게 약속합니다. 그런 다음 한 시간이 지나면 자신이 한 일을 완전히 잊어버립니다.

Bash 기록을 검색하는 것은 모든 사람이 때때로 해야 하는 일입니다. 검색하는 내용을 정확히 알고 있다면 Ctrl+R을 사용할 수 있습니다. 히스토리를 통해 역 검색을 수행하지만 찾고자 하는 정확한 명령을 기억하지 못하는 경우가 있습니다.

이 작업을 좀 더 쉽게 하기 위한 별칭은 다음과 같습니다.

alias gh='history|grep'

사용 방법의 예는 다음과 같습니다.

$ gh bash
482 cat ~/.bashrc | grep _alias
498 emacs ~/.bashrc
530 emacs ~/.bash_aliases
531 source ~/.bashrc

수정 시간으로 정렬

매주 월요일에 발생합니다. 출근하고 컴퓨터 앞에 앉아 단말기를 열고 지난 금요일에 하던 일을 잊어버렸습니다. 가장 최근에 수정된 파일을 나열하는 별칭이 필요합니다.

ls를 사용할 수 있습니다. 중단한 부분을 찾는 데 도움이 되는 별칭을 만드는 명령:

alias left='ls -t -1'

--long으로 확장할 수 있지만 출력은 간단합니다. 원하는 경우 옵션. 나열된 별칭은 다음을 표시합니다.

$ left
demo.jpeg
demo.xcf
design-proposal.md
rejects.txt
brainstorm.txt
query-letter.xml

파일 수

디렉토리에 있는 파일 수를 알아야 하는 경우 솔루션은 UNIX 명령 구성의 가장 고전적인 예 중 하나입니다. ls 명령에서 -1을 사용하여 출력을 하나의 열로만 제어합니다. 옵션을 선택한 다음 해당 출력을 wc (단어 개수) 단일 파일의 줄 수를 계산하는 명령입니다.

UNIX 철학을 통해 사용자가 작은 시스템 구성 요소를 사용하여 자체 솔루션을 구축할 수 있는 방법을 잘 보여줍니다. 이 명령 조합은 하루에 여러 번 수행하는 경우에도 입력해야 하며 -R을 사용하지 않고 디렉토리 디렉토리에 대해 정확히 작동하지 않습니다. 출력에 새 줄을 도입하고 연습을 쓸모 없게 만드는 옵션입니다.

대신 이 별칭을 사용하면 프로세스가 쉬워집니다.

alias count='find . -type f | wc -l'

이것은 디렉토리를 무시하고 파일을 계산하지만 아닙니다. 디렉토리의 내용. 두 개의 디렉터리가 포함된 프로젝트 폴더가 있고 각 디렉터리에 두 개의 파일이 포함되어 있는 경우 전체 프로젝트에 네 개의 파일이 있기 때문에 별칭은 네 개를 반환합니다.

$ ls
foo   bar
$ count
4

Python 가상 환경 만들기

파이썬으로 코딩하십니까?

Python으로 코딩을 많이 하시나요?

그렇다면 Python 가상 환경을 만드는 데 최소한 53번의 키 입력이 필요하다는 것을 알 수 있습니다.

49번은 너무 많지만 ve<라는 두 개의 새 별칭으로 쉽게 우회할 수 있습니다. /강한> 및 :

alias ve='python3 -m venv ./venv'
alias va='source ./venv/bin/activate'

ve 실행 venv라는 새 디렉토리를 만듭니다. , Python3에 대한 일반적인 가상 환경 파일 시스템을 포함합니다. alias는 현재 쉘에서 환경을 활성화합니다:

$ cd my-project
$ ve
$ va
(venv) $

복사 진행률 표시줄 추가

진행률 표시줄은 악명 높게 부정확하기 때문에 모든 사람이 진행률 표시줄을 조롱합니다. 그러나 마음 속 깊이 우리 모두는 그것들을 원하는 것 같습니다. UNIX cp 명령에는 진행률 표시줄이 없지만 -v는 있습니다. 자세한 정보 표시 옵션은 터미널에 복사되는 각 파일의 이름을 표시함을 의미합니다. 꽤 좋은 방법이지만 하나의 큰 파일을 복사하고 파일의 아직 전송되지 않은 양을 표시하려는 경우에는 제대로 작동하지 않습니다.

pv 명령은 복사하는 동안 진행률 표시줄을 제공하지만 기본 응용 프로그램으로 일반적이지 않습니다. 반면에 rsync 이 명령은 사용 가능한 거의 모든 POSIX 시스템의 기본 설치에 포함되어 있으며 원격 및 로컬에서 파일을 복사하는 가장 현명한 방법 중 하나로 널리 알려져 있습니다.

더 좋은 점은 진행률 표시줄이 내장되어 있다는 것입니다.

alias cpv='rsync -ah --info=progress2'

이 별칭을 사용하는 것은 cp를 사용하는 것과 동일합니다. 명령:

$ cpv bigfile.flac /run/media/seth/audio/
          3.83M 6%  213.15MB/s    0:00:00 (xfr#4, to-chk=0/4)

이 명령을 사용할 때의 흥미로운 부작용은 rsync -r 없이 파일과 디렉토리를 모두 복사합니다. cp 플래그 그렇지 않으면 필요합니다.

파일 제거 사고로부터 자신을 보호하세요

rm을 사용하면 안 됩니다. 명령. rm 설명서에도 이렇게 나와 있습니다.

<블록 인용>

경고 :'rm'을 사용하여 파일을 제거하면 일반적으로 해당 파일의 내용을 복구할 수 있습니다. 콘텐츠가 실제로 복구할 수 없는지 더 확실하게 확인하려면 '파쇄'를 사용하는 것이 좋습니다.

파일을 제거하려면 데스크톱을 사용할 때와 마찬가지로 파일을 휴지통으로 이동해야 합니다.

휴지통은 파일 시스템에서 액세스할 수 있는 실제 위치이기 때문에 POSIX를 사용하면 이 작업을 쉽게 수행할 수 있습니다. 해당 위치는 플랫폼에 따라 변경될 수 있습니다. FreeDesktop에서 휴지통은 ~/.local/share/Trash에 있습니다. , MacOS에서는 ~/.Trash입니다. , 하지만 어느 쪽이든, 그것은 당신이 그들을 영원히 지울 준비가 될 때까지 보이지 않게 원하는 파일을 배치하는 디렉토리일 뿐입니다.

이 간단한 별칭은 터미널에서 파일을 휴지통으로 버리는 방법을 제공합니다.

alias tcn='mv --force -t ~/.local/share/Trash '

이 별칭은 잘 알려지지 않은 mv를 사용합니다. 이동하려는 파일을 최종 인수로 제공할 수 있는 플래그를 지정하고 해당 파일이 먼저 나열되어야 하는 일반적인 요구 사항을 무시합니다. 이제 새 명령을 사용하여 파일과 폴더를 시스템 휴지통으로 이동할 수 있습니다.

$ ls 
foo  bar
$ tcn foo
$ ls
bar

이제 파일은 "사라져" 있지만 여전히 필요하다는 것을 식은땀을 흘리며 깨달을 때까지만입니다. 그 시점에서 시스템 휴지통에서 파일을 구출할 수 있습니다. Bash와 mv에 팁을 주어야 합니다. 나가는 길에 개발자입니다.

참고: 더 강력한 휴지통이 필요한 경우 FreeDesktop 규정을 더 잘 준수하는 명령은 Trashy를 참조하십시오.

Git 워크플로 간소화

사람마다 고유한 작업 흐름이 있지만 일반적으로 무엇을 하든 반복적인 작업이 있습니다. 정기적으로 Git을 사용하는 경우 꽤 자주 반복하는 시퀀스가 ​​있을 것입니다. 하루 동안 마스터 브랜치로 돌아가서 최신 변경 사항을 계속해서 가져오는 자신을 발견하거나 태그를 생성한 다음 원격으로 푸시하는 자신을 발견하거나 완전히 다른 것일 수도 있습니다.

입력하는 데 지친 Git 주문이 무엇이든 Bash 별칭으로 약간의 고통을 완화할 수 있습니다. 후크에 인수를 전달하는 기능 덕분에 Git에는 Bash에서 기이한 작업을 수행하지 않아도 되는 풍부한 내성 명령 세트가 있습니다.

예를 들어, Bash에서 프로젝트의 최상위 디렉토리를 찾는 데 어려움을 겪을 수 있지만(Bash에 관한 한 이 디렉토리는 컴퓨터의 절대 최상위 레벨이 루트 디렉토리이기 때문에 완전히 임의적인 지정입니다) Git 간단한 쿼리로 최상위 수준을 알고 있습니다. Git 후크에 대해 공부하면 Bash가 전혀 알지 못하는 모든 종류의 정보를 찾을 수 있지만 해당 정보를 Bash 별칭으로 활용할 수 있습니다.

다음은 현재 작업 중인 프로젝트의 위치에 관계없이 Git 프로젝트의 최상위 수준을 찾은 다음 디렉터리를 변경하고 마스터 분기로 변경하고 Git 풀을 수행하는 별칭입니다.

alias startgit='cd `git rev-parse --show-toplevel` && git checkout master && git pull'

이러한 종류의 별칭은 결코 보편적으로 유용한 별칭은 아니지만 상대적으로 간단한 별칭이 많은 힘든 탐색, 명령 및 프롬프트 대기를 제거하는 방법을 보여줍니다.

더 간단하고 아마도 더 보편적인 별칭을 사용하면 Git 프로젝트의 최상위 수준으로 돌아갑니다. 이 별칭은 프로젝트에서 작업할 때 해당 프로젝트가 "임시 홈" 디렉토리가 되기 때문에 유용합니다. 실제 집으로 가는 것처럼 "집"으로 가는 것이 간단해야 하며 이를 위한 별칭은 다음과 같습니다.

alias cg='cd `git rev-parse --show-toplevel`'

이제 명령 cg 디렉토리 구조의 깊이에 관계없이 Git 프로젝트의 맨 위로 이동합니다.

디렉토리 변경과 동시에 내용 보기

한 저명한 과학자가 cd를 입력하는 괴짜들이 소비하는 에너지를 활용하여 지구의 많은 에너지 문제를 해결할 수 있다고 제안한 적이 있습니다. 뒤에 ls .

일반적으로 디렉토리를 변경할 때 주변에 무엇이 있는지 보고 싶은 충동이나 욕구가 생기기 때문에 일반적인 패턴입니다.

그러나 컴퓨터의 디렉토리 트리를 "이동"하는 것이 시작 및 중지 프로세스일 필요는 없습니다.

이것은 전혀 별칭이 아니기 때문에 부정 행위이지만 Bash 기능을 탐색하기에 좋은 변명입니다. 별칭은 빠른 대체에 적합하지만 Bash를 사용하면 .bashrc에 로컬 기능을 추가할 수 있습니다. 파일(또는 .bashrc에 로드하는 별도의 함수 파일 , 별칭 파일을 수행하는 것처럼).

모듈을 유지하려면 ~/.bash_functions라는 새 파일을 만드세요. 그런 다음 .bashrc 로드:

if [ -e $HOME/.bash_functions ]; then
    source $HOME/.bash_functions
fi

함수 파일에서 다음 코드를 추가합니다.

function cl() {
    DIR="$*";
        # if no DIR given, go home
        if [ $# -lt 1 ]; then
                DIR=$HOME;
    fi;
    builtin cd "${DIR}" && \
    # use your preferred ls command
        ls -F --color=auto
}

함수를 Bash 세션에 로드한 다음 사용해 보세요.

$ source ~/.bash_functions
$ cl Documents
foo bar baz
$ pwd
/home/seth/Documents
$ cl ..
Desktop  Documents  Downloads
[...]
$ pwd
/home/seth

함수는 별칭보다 훨씬 더 유연하지만 이러한 유연성에는 코드가 의미가 있고 예상한 대로 수행되도록 해야 할 책임이 있습니다. 별칭은 단순하므로 사용하기 쉽지만 유용합니다. Bash가 작동하는 방식을 심각하게 수정하려면 PATH의 위치에 저장된 함수 또는 사용자 지정 셸 스크립트를 사용하세요. .

참고로 있습니다. cd를 구현하기 위한 몇 가지 영리한 해킹 및 ls 시퀀스를 가명으로 사용하므로 인내심만 있다면 천박한 가명을 사용해도 한계가 있습니다.

앨리어싱 및 기능 시작

환경을 사용자 정의하는 것은 Linux를 재미있게 만들고 효율성을 높이는 것은 Linux의 삶을 변화시키는 것입니다. 간단한 별칭으로 시작하고, 기능으로 전환하고, 댓글에 필수 별칭을 게시하세요!