노트북에 텍스트가 가득한 Linux 터미널.

Linux, macOS 또는 다른 UNIX 계열 시스템에서 Bash 쉘을 마스터하려면 ~, *, | 및>와 같은 특수 문자가 중요합니다. 이러한 암호화 된 Linux 명령 시퀀스를 풀고 상형 문자의 영웅이되도록 도와드립니다.

특수 문자 란 무엇입니까?

Bash 쉘은 두 가지 방식으로 취급하는 문자 세트가 있습니다. 쉘에 입력하면 명령 또는 명령의 역할을하며 특정 기능을 수행하도록 쉘에 지시합니다. 그것들을 단일 문자 명령으로 생각하십시오.

때로는 캐릭터를 인쇄하고 마법의 상징으로 사용할 필요가없는 경우도 있습니다. 특수 기능이 아닌 문자를 사용하여 자신을 나타낼 수있는 방법이 있습니다.

"특수"또는 "메타-"문자는 물론 기능 및 문자 적으로 사용하는 방법을 보여줍니다.

~ 홈 디렉토리

물결표 (~)는 홈 디렉토리의 약어입니다. 즉, 명령에 홈 디렉토리의 전체 경로를 입력 할 필요가 없습니다. 파일 시스템 어디에 있든지이 명령을 사용하여 홈 디렉토리로 이동할 수 있습니다.

cd ~
터미널 창의

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

CD ~ / 작업 / 보관
터미널 창에서

. 현재 디렉토리

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

LS -a
터미널 창의

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

./script.sh

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

터미널 창의

.. 학부모 디렉토리

이중 마침표 또는 "더블 도트"(..)는 현재 디렉토리의 상위 디렉토리를 나타냅니다. 이것을 사용하여 디렉토리 트리에서 한 수준 위로 이동할 수 있습니다.

cd ..
터미널 창에서

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

이 기술을 사용하여 디렉토리 트리에서 현재 디렉토리와 동일한 레벨로 디렉토리로 빠르게 이동할 수 있습니다. 한 레벨 위로 올라간 다음 다른 디렉토리로 다시 내려갑니다.

cd ../gc_help
터미널 창에서

/ 경로 디렉토리 구분자

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

ls ~ / work / archive
터미널 창에서

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

cd /
터미널 창의

# 주석 또는 트림 문자열

대부분의 경우 해시 또는 숫자 기호 (#)를 사용하여 셸에 다음에 나오는 내용이 주석임을 알려주고 이에 따라 행동해서는 안됩니다. 쉘 스크립트와 명령 줄에서 유용하게 사용할 수 있습니다.

# 이것은 Bash shell에 의해 무시 될 것이다
터미널 창의

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

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

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

this_string = "Dave Geek!"
터미널 창에서

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

에코 사용 방법 $ {this_string # Dave}
터미널 창에있는

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

에코 $ this_string
터미널 창에서

? 단일 문자 와일드 카드

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

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

ls badge? .txt

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

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

터미널 창에서

그러나 파일 이름에 "badge"와 파일 확장자 사이에 단일 문자가 없으므로 해당 파일 이름 템플릿이 "badge.txt"와 일치하지 않습니다. 물음표 와일드 카드는 파일 이름의 해당 문자와 ​​일치해야합니다.

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

ls ?????. txt
터미널 창에서

* 문자 시퀀스 와일드 카드

별표 (*) 와일드 카드를 사용하여 문자를 포함하지 않는 모든 문자 시퀀스를 나타낼 수 있습니다. 다음 파일 이름 템플릿을 고려하십시오.

ls 배지 *

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

터미널 창에

와일드 카드는 문자 시퀀스를 나타내거나 문자를 나타내지 않으므로 "badge.txt"와 일치합니다.

이 명령은 파일 확장자에 관계없이“source”라는 모든 파일과 일치합니다.

ls 소스. *
터미널 창에

[] 문자 세트 와일드 카드

위에서 설명한 것처럼 물음표를 사용하여 단일 문자를 나타내고 별표를 사용하여 문자 시퀀스를 포함하여 모든 문자 시퀀스를 나타냅니다.

대괄호 ([])와 포함 된 문자를 사용하여 와일드 카드를 구성 할 수 있습니다. 파일 이름의 관련 문자는 와일드 카드 문자 세트의 문자 중 하나 이상과 일치해야합니다.

이 예에서이 명령은 "확장자가".png "인 파일,"pipes_0 "으로 시작하고 다음 문자가 2, 4 또는 6 인 파일"로 번역됩니다.

ls badge_0 [246] .txt
터미널 창에서

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

ls badge_ [01] [789] .txt
터미널 창에서

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

ls badge_ [23] [1-5] .txt
터미널 창에서

; 셸 명령 구분 기호

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

ls> count.txt; wc -l count.txt; rm count.txt
터미널 창에서 count.txt; wc -l count.txt; rm count.txt"명령" src="https://imgstore.nyc3.cdn.digitaloceanspaces.com/tvaschool-org/1587087897826.png" />

두 번째 명령은 첫 번째 명령이 실패하더라도 실행되고 세 번째 명령은 두 번째 명령이 실패하더라도 실행됩니다.

하나의 명령이 실패한 경우 실행 순서를 중지하려면 세미콜론 대신 이중 앰퍼샌드 (&&)를 사용하십시오.

cd ./doesntexist && cp ~ / Documents / reports / *.
터미널 창에서

백그라운드 프로세스

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

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

gedit command_address.page &
터미널 창에서

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

<입력 리디렉션

많은 Linux 명령은 파일을 매개 변수로 승인하고 해당 파일에서 데이터를 가져옵니다. 이러한 명령의 대부분은 스트림에서 입력을받을 수도 있습니다. 스트림을 만들려면 다음 예제와 같이 왼쪽 꺾쇠 괄호 (<)를 사용하여 파일을 명령으로 리디렉션하십시오.

터미널 창에서 

명령이 입력을 리디렉션하면 이름이 지정된 파일에서 읽을 때와 다르게 동작 할 수 있습니다.

wc를 사용하여 파일의 단어, 줄 및 문자를 세면 값을 인쇄 한 다음 파일 이름을 인쇄합니다. 파일의 내용을 wc로 리디렉션하면 동일한 숫자 값을 인쇄하지만 데이터가 나온 파일의 이름을 모릅니다. 파일 이름을 인쇄 할 수 없습니다.

다음은 wc를 사용하는 방법에 대한 몇 가지 예입니다.

화장실 words.txt
화장실 터미널 창에서 

> 출력 리디렉션

직각 괄호 (>)를 ​​사용하여 명령의 출력 (일반적으로 파일)을 리디렉션 할 수 있습니다. 다음은 예입니다.

ls> files.txt
고양이 files.txt
터미널 창에서 files.txt"명령" src="https://imgstore.nyc3.cdn.digitaloceanspaces.com/tvaschool-org/1587087900863.png" />

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

wc doestexist.txt 2> errors.txt
고양이 errors.txt
터미널 창에서 errors.txt"명령" src="https://imgstore.nyc3.cdn.digitaloceanspaces.com/tvaschool-org/1587087901637.png" />

관련 : Linux에서 stdin, stdout 및 stderr 란 무엇입니까?

| 파이프

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

여기서는 cat을 사용하여 words.txt 파일의 내용을 grep에 공급합니다.이 스크립트는 소문자 또는 대문자“C”를 포함하는 행을 추출합니다. grep은이 줄을 통과시켜 정렬합니다. sort는 -r (reverse) 옵션을 사용하므로 정렬 된 결과는 역순으로 나타납니다.

다음을 입력했습니다 :

고양이 words.txt | grep [cC] | 정렬 -r
터미널 창에서

! 파이프 라인 논리 NOT 및 히스토리 연산자

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

이 명령 행에는 두 가지 명령이 있습니다.

[! -d ./backup] && mkdir ./backup
  • 첫 번째 명령은 대괄호 안의 텍스트입니다. 두 번째 명령은 이중 앰퍼샌드 && 뒤에 나오는 텍스트입니다.

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

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

이것은 논리 연산자입니다! 논리적 NOT으로 작동합니다. 따라서 테스트가 성공하면 (즉, 디렉토리가 존재하는 경우)! 이를 "성공하지 않음"으로 바꾸면 실패입니다. 따라서 두 번째 명령은 활성화되지 않습니다.

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

그 작은! 필요할 때 많은 펀치를 포장합니다!

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

ls -l -d 백업
터미널 창에서

느낌표를 사용하여 명령 기록에서 명령을 실행할 수도 있습니다. history 명령은 명령 내역을 나열한 다음 다시 실행할 명령 번호를 입력합니다! 아래와 같이 실행하십시오.

! 24
터미널 창에

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

!!

$ 변수 표현식

Bash 셸에서 값을 보유 할 변수를 만듭니다. 환경 변수와 같은 일부는 항상 존재하며 터미널 창을 열 때마다 액세스 할 수 있습니다. 여기에는 사용자 이름, 홈 디렉토리 및 경로와 같은 값이 있습니다.

echo를 사용하여 변수가 보유한 값을 확인할 수 있습니다. 아래에 표시된 것처럼 변수 이름 앞에 달러 기호 ($)를 붙이십시오.

에코 $ USER
에코 $ HOME
에코 $ PATH
터미널 창에서

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

ThisDistro = 우분투
MyNumber = 2001
에코 $ ThisDistro
에코 $ MyNumber
터미널 창에서

달러 기호 주위에 중괄호 ({})를 추가하고 변수 확장을 수행하여 변수 값을 얻고 추가 ​​값 변환을 허용하십시오.

아래와 같이 문자열을 포함하는 변수를 만듭니다.

MyString = 123456qwerty

다음 명령을 사용하여 문자열을 터미널 창에 에코하십시오.

에코 $ {MyString}

전체 문자열의 위치 6에서 시작하는 하위 문자열을 반환하려면 다음 명령을 사용하십시오 (제로 오프셋이 있으므로 첫 번째 위치는 0 임).

에코 $ {myString : 6}

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

에코 $ {myString : 0 : 6}

다음 명령을 사용하여 위치 4에서 시작하고 다음 4자를 포함하는 하위 문자열을 에코하십시오.

에코 $ {myString : 4 : 4}
터미널 창에서

인용 특수 문자

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

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

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

echo "오늘은 $ (날짜)입니다"

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

echo '오늘은 $ (날짜입니다)'

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

echo "오늘은 \ $ (날짜)입니다"
터미널 창에서

특수 문자를 매우 짧은 명령으로 생각하십시오. 사용을 외우면 Bash 쉘과 다른 사람들의 스크립트에 대한 이해가 엄청나게 도움이 될 수 있습니다.

관련 : 37 알아야 할 중요한 Linux 명령