Bash에 대해 알아야 할 15가지 특수 문자

Linux, macOS 또는 다른 UNIX 계열 시스템에서 Bash 셸을 마스터하려면 특수 문자(예: ~, *, | 및 >)가 중요합니다. 우리는 당신이 이러한 신비한 Linux 명령 시퀀스를 풀고 상형 문자의 영웅이 되도록 도울 것입니다.

특수 문자란 무엇입니까?

캐릭터 세트가 있다 배쉬 쉘 두 가지 다른 방식으로 취급합니다. 쉘에 입력하면 명령이나 명령으로 작동하여 쉘에 특정 기능을 수행하도록 지시합니다. 단일 문자 명령으로 생각하십시오.

때로는 문자를 인쇄하기만 하고 마술 기호 역할을 하는 데 필요하지 않은 경우가 있습니다. 특수 기능 대신 문자를 사용하여 자신을 나타낼 수 있는 방법이 있습니다.

어떤 문자가 “특수” 또는 “메타-” 문자인지, 그리고 기능적으로나 문자 그대로 사용할 수 있는지 보여드리겠습니다.

~ 홈 디렉토리

물결표(~)는 홈 디렉토리의 줄임말입니다. 이는 명령에 홈 디렉토리의 전체 경로를 입력할 필요가 없음을 의미합니다. 파일 시스템에 있는 모든 위치에서 이 명령을 사용하여 홈 디렉토리로 이동할 수 있습니다.

cd ~

그만큼

상대 경로와 함께 이 명령을 사용할 수도 있습니다. 예를 들어, 홈 폴더 아래가 아닌 파일 시스템의 어딘가에 있고 작업 디렉터리의 아카이브 디렉터리로 변경하려는 경우 물결표를 사용하여 수행합니다.

cd ~/work/archive

그만큼

. 현재 디렉토리

마침표(.)는 현재 디렉토리를 나타냅니다. ls와 함께 -a(all) 옵션을 사용하면 디렉토리 목록에서 볼 수 있습니다.

ls -a

그만큼

명령에 마침표를 사용하여 현재 디렉토리의 경로를 나타낼 수도 있습니다. 예를 들어, 현재 디렉토리에서 스크립트를 실행하려면 다음과 같이 호출합니다.

./script.sh

이것은 Bash가 현재 디렉토리에서 script.sh 파일을 찾도록 지시합니다. 이렇게 하면 실행 파일이나 스크립트와 일치하는 경로의 디렉터리를 검색하지 않습니다.

그만큼

.. 부모 디렉토리

이중 마침표 또는 “이중 점”(..)은 현재 디렉토리의 상위 디렉토리를 나타냅니다. 이것을 사용하여 디렉토리 트리에서 한 레벨 위로 이동할 수 있습니다.

cd ..

그만큼

예를 들어 디렉터리 트리에서 한 수준 위로 이동한 다음 해당 수준에서 다른 디렉터리를 입력하려는 경우와 같이 이 명령을 상대 경로와 함께 사용할 수도 있습니다.

또한 이 기술을 사용하여 현재 디렉토리와 동일한 수준의 디렉토리 트리로 빠르게 이동할 수 있습니다. 한 수준 위로 이동한 다음 다른 디렉터리로 다시 아래로 이동합니다.

cd ../gc_help

그만큼

/ 경로 디렉토리 구분자

슬래시(/)(종종 단순히 슬래시라고도 함)를 사용하여 경로 이름에서 디렉토리를 구분할 수 있습니다.

ls ~/work/archive

그만큼

하나의 슬래시는 가능한 가장 짧은 디렉토리 경로를 나타냅니다. Linux 디렉터리 트리의 모든 항목은 루트 디렉터리에서 시작하므로 이 명령을 사용하여 루트 디렉터리로 빠르게 이동할 수 있습니다.

cd /

그만큼

# 주석 처리 또는 문자열 자르기

대부분의 경우 해시 또는 숫자 기호(#)를 사용하여 쉘에 뒤에 오는 것이 주석임을 알리고 이에 따라 작동하지 않아야 합니다. 쉘 스크립트에서 사용할 수 있으며 덜 유용하지만 명령줄에서 사용할 수 있습니다.

# This will be ignored by the Bash shell

그만큼

그러나 명령 기록에 추가되기 때문에 실제로 무시되지는 않습니다.

해시를 사용하여 문자열 변수를 자르고 처음부터 일부 텍스트를 제거할 수도 있습니다. 이 명령은 this_string이라는 문자열 변수를 생성합니다.

이 예에서는 “Dave Geek!”이라는 텍스트를 할당합니다. 변수에.

this_string="Dave Geek!"

이 명령은 echo를 사용하여 터미널 창에 “How-To”라는 단어를 인쇄합니다. 다음을 통해 문자열 변수에 저장된 값을 검색합니다. 매개변수 확장. 해시와 텍스트 “Dave”를 추가하기 때문에 echo에 전달되기 전에 문자열의 해당 부분을 잘라냅니다.

echo How-To ${this_string#Dave}

안

이것은 문자열 변수에 저장된 값을 변경하지 않습니다. 에코로 전송되는 내용에만 영향을 미칩니다. echo를 사용하여 문자열 변수의 값을 한 번 더 인쇄하고 다음을 확인할 수 있습니다.

echo $this_string

그만큼

? 단일 문자 와일드카드

Bash 셸은 세 ​​개의 와일드카드를 지원하며 그 중 하나는 물음표(?)입니다. 와일드카드를 사용하여 파일 이름 템플릿의 문자를 바꿉니다. 와일드카드가 포함된 파일 이름은 하나가 아닌 파일 이름 범위와 일치하는 템플릿을 형성합니다.

물음표 와일드카드는 정확히 하나의 문자를 나타냅니다. 다음 파일 이름 템플릿을 고려하십시오.

ls badge?.txt

이것은 “이름이 ‘badge’로 시작하고 파일 이름 확장자 앞에 단일 문자가 오는 모든 파일을 나열합니다.”로 번역됩니다.

다음 파일과 일치합니다. 파일 이름의 “배지” 부분 뒤에 숫자가 있는 것도 있고 문자가 있는 것도 있습니다. 물음표 와일드카드는 문자와 숫자 모두와 일치합니다.

그만큼

그 파일 이름 템플릿은 “badge.txt”와 일치하지 않습니다. 왜냐하면 파일 이름은 “badge”와 파일 확장자 사이에 단일 문자가 없기 때문입니다. 물음표 와일드카드는 파일 이름의 해당 문자와 ​​일치해야 합니다.

물음표를 사용하여 파일 이름에 특정 문자 수가 있는 모든 파일을 찾을 수도 있습니다. 다음은 파일 이름에 정확히 5자를 포함하는 모든 텍스트 파일을 나열합니다.

ls ?????.txt

ㅏ

* 문자 시퀀스 와일드카드

별표를 사용할 수 있습니다

ls badge*

와일드카드는 문자 없음을 포함하여 모든 문자 시퀀스를 나타냅니다. 다음 파일 이름 템플릿을 고려하십시오.

이것은 다음과 모두 일치합니다.

와일드카드는 일련의 문자를 나타내거나 문자를 나타내지 않기 때문에 “badge.txt”와 일치합니다.

ls source.*

이 명령은 파일 확장자에 관계없이

[] 안

문자 집합 와일드카드

위에서 다룬 것처럼 물음표를 사용하여 단일 문자를 나타내고 별표를 사용하여 모든 문자 시퀀스(문자 없음 포함)를 나타냅니다. [] 대괄호(

) 및 포함된 문자. 그런 다음 파일 이름의 관련 문자는 와일드카드 문자 집합의 문자 중 하나 이상과 일치해야 합니다.

ls badge_0[246].txt

이 예에서 명령은

ls badge_[01][789].txt

파일 이름 템플릿당 두 개 이상의 대괄호 세트를 사용할 수 있습니다.

ls badge_[23][1-5].txt

문자 집합에 범위를 포함할 수도 있습니다.  다음 명령은 파일 이름에 21~25 및 31~35의 숫자가 있는 파일을 선택합니다.

; 셸 명령 구분 기호

ls > count.txt; wc -l count.txt; rm count.txt

각 명령을 세미콜론(;)으로 구분하기만 하면 명령줄에 원하는 만큼 명령을 입력할 수 있습니다.  다음 예에서 이 작업을 수행합니다.

count.txt; 화장실 -l count.txt; 터미널 창의 rm count.txt” 명령’ width=”646″ height=”122″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);” onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”>

두 번째 명령은 첫 번째가 실패해도 실행되고 세 번째 명령은 두 번째가 실패해도 실행되는 식입니다.

cd ./doesntexist && cp ~/Documents/reports/* .

하나의 명령이 실패할 경우 실행 시퀀스를 중지하려면 세미콜론 대신 이중 앰퍼샌드(&&)를 사용합니다.

및 백그라운드 프로세스

터미널 창에 명령을 입력하고 완료되면 명령 프롬프트로 돌아갑니다. 일반적으로 이 작업은 1~2분 정도 걸립니다. 그러나 gedit와 같은 다른 응용 프로그램을 실행하면 응용 프로그램을 닫을 때까지 터미널 창을 사용할 수 없습니다.

gedit command_address.page &

그러나 애플리케이션을 백그라운드 프로세스로 시작하고 터미널 창을 계속 사용할 수 있습니다.  이렇게 하려면 명령줄에 앰퍼샌드를 추가하기만 하면 됩니다.

Bash는 시작된 항목의 프로세스 ID를 표시한 다음 명령줄로 돌아갑니다. 그런 다음 터미널 창을 계속 사용할 수 있습니다.

sort 

많은 Linux 명령은 파일을 매개변수로 받아들이고 해당 파일에서 데이터를 가져옵니다.  이러한 명령의 대부분은 스트림에서 입력을 받을 수도 있습니다.  스트림을 생성하려면 왼쪽 꺾쇠 괄호(

When a command has input redirected into it, it might behave differently than when it reads from a named file.

If we use wc to count the words, lines, and characters in a file, it prints the values, and then the filename. If we redirect the contents of the file to wc, it prints the same numeric values but doesn’t know the name of the file from which the data came. It cannot print a filename.

Here are some examples of how you can use wc:

wc words.txt
wc 

ㅏ

> Output Redirection

You can use the right-angle bracket ( > ) to redirect the output from a command (typically, into a file); here’s an example:

ls > files.txt
cat files.txt

ㅏ

터미널 창에서 "files.txt" 명령." 너비="646" 높이="382" >

wc doesntexist.txt 2> errors.txt
cat errors.txt

출력 리디렉션은 >와 함께 숫자(이 예에서는 2)를 사용하는 경우에도 오류 메시지를 리디렉션할 수 있습니다.  방법은 다음과 같습니다.

터미널 창에서 "errors.txt" 명령." 너비="646" 높이="122" >

| 파이프

"파이프"는 명령을 함께 연결합니다. 한 명령의 출력을 가져와 다음 명령에 입력으로 제공합니다. 파이프된 명령의 수(체인 길이)는 임의적입니다.

여기에서 우리는 grep에 단어.txt 파일의 내용을 공급하기 위해 cat을 사용할 것입니다. grep은 소문자 또는 대문자 "C"를 포함하는 모든 줄을 추출합니다. 그런 다음 grep은 이 줄을 전달하여 정렬합니다. sort는 -r(역방향) 옵션을 사용하므로 정렬된 결과가 역순으로 나타납니다.

cat words.txt | grep [cC] | sort -r

다음을 입력했습니다.

! 파이프라인 논리 NOT 및 기록 연산자

느낌표(!)는 NOT을 의미하는 논리 연산자입니다.

[ ! -d ./backup ] && mkdir ./backup

이 명령줄에는 두 가지 명령이 있습니다.
첫 번째 명령은 대괄호 안에 있는 텍스트입니다.

두 번째 명령은 이중 앰퍼샌드 && 다음에 오는 텍스트입니다.

첫 번째 명령은 ! 논리 연산자로. 대괄호는 테스트가 진행 중임을 나타냅니다. -d(디렉토리) 옵션은 백업이라는 디렉토리가 있는지 테스트합니다. 두 번째 명령은 디렉토리를 생성합니다.

이중 앰퍼샌드가 두 명령을 분리하기 때문에 Bash는 첫 번째 명령이 성공하는 경우에만 두 번째 명령을 실행합니다. 그러나 그것은 우리가 필요로 하는 것과 정반대입니다. "backup" 디렉토리에 대한 테스트가 성공하면 생성할 필요가 없습니다. 그리고 "backup" 디렉토리에 대한 테스트가 실패하면 두 번째 명령이 실행되지 않고 누락된 디렉토리가 생성되지 않습니다.

이것은 논리 연산자 ! 논리적 NOT 역할을 합니다. 따라서 테스트가 성공하면(즉, 디렉토리가 존재함), ! 그것을 "성공이 아님"으로 바꾸는데, 이는 실패입니다. 따라서 두 번째 명령은 활성화되지 않습니다.

디렉토리 테스트가 실패하면(즉, 디렉토리가 존재하지 않음), ! 성공인 "NOT 실패"로 응답을 변경합니다. 따라서 누락된 디렉토리를 생성하는 명령이 실행됩니다.

그 작은 ! 당신이 그것을 필요로 할 때 많은 펀치를 포장!

ls -l -d backup

백업 폴더의 상태를 확인하려면 아래와 같이 ls 명령과 -l(긴 목록) 및 -d(디렉토리) 옵션을 사용합니다.

!24

느낌표가 있는 명령 기록에서 명령을 실행할 수도 있습니다.  history 명령은 명령 기록을 나열한 다음 !로 다시 실행하려는 명령 번호를 입력합니다.  실행하려면 아래와 같이

!!

다음은 이전 명령을 다시 실행합니다.

$ 변수 표현식 Bash 셸에서 값을 저장할 변수를 만듭니다. 일부, 같은 환경 변수,

항상 존재하며 터미널 창을 열 때마다 액세스할 수 있습니다. 여기에는 사용자 이름, 홈 디렉터리 및 경로와 같은 값이 포함됩니다.

echo $USER
echo $HOME
echo $PATH

echo를 사용하여 변수가 보유하는 값을 볼 수 있습니다. 아래와 같이 변수 이름 앞에 달러 기호($)를 붙이면 됩니다.

ThisDistro=Ubuntu
MyNumber=2001
echo $ThisDistro
echo $MyNumber

변수를 생성하려면 이름을 지정하고 보유할 값을 제공해야 합니다.  변수를 생성하기 위해 달러 기호를 사용할 필요는 없습니다.  다음 예와 같이 변수를 참조할 때만 $를 추가합니다.

달러 기호 주위에 중괄호( {} )를 추가하고 매개변수 확장을 수행하여 변수 값을 얻고 값의 추가 변환을 허용합니다.

MyString=123456qwerty

그러면 아래와 같이 문자열을 포함하는 변수가 생성됩니다.

echo ${MyString}

다음 명령을 사용하여 문자열을 터미널 창에 에코합니다.

echo ${myString:6}

전체 문자열의 위치 6에서 시작하는 부분 문자열을 반환하려면 다음 명령을 사용합니다(오프셋이 0이므로 첫 번째 위치는 0입니다).

echo ${myString:0:6}

위치 0에서 시작하고 다음 6자를 포함하는 부분 문자열을 에코하려면 다음 명령을 사용하십시오.

echo ${myString:4:4}

다음 명령을 사용하여 위치 4에서 시작하고 다음 네 문자를 포함하는 부분 문자열을 에코합니다.

특수 문자 인용

특수 문자를 리터럴(비특수) 문자로 사용하려면 Bash 쉘에 알려야 합니다. 이를 인용이라고 하며 세 가지 방법이 있습니다.

텍스트를 따옴표("...")로 묶으면 Bash가 대부분의 특수 문자에 대해 작동하지 않고 인쇄만 됩니다. 그러나 한 가지 주목할만한 예외는 달러 기호($)입니다. 여전히 변수 표현식의 문자로 작동하므로 출력에 변수의 값을 포함할 수 있습니다.

echo "Today is $(date)"

예를 들어 다음 명령은 날짜와 시간을 인쇄합니다.

echo 'Today is $(date)'

아래와 같이 텍스트를 작은따옴표('…')로 묶으면 모든 특수 문자의 기능이 중지됩니다.

echo "Today is $(date)"

백슬래시( )를 사용하여 다음 문자가 특수 문자로 작동하지 않도록 할 수 있습니다. 이것을 문자 "이스케이프"라고 합니다. 아래 예를 참조하십시오.

특수 문자는 매우 짧은 명령으로 생각하십시오. 사용법을 기억한다면 Bash 셸과 다른 사람들의 스크립트를 이해하는 데 큰 도움이 될 것입니다.