Bash 기본 사항

완료됨

Bash에 대한 이해는 Bash 구문을 이해하는 것으로 시작합니다. 구문을 확인한 후에는 실행하는 모든 Bash 명령에 적용할 수 있습니다.

Bash 명령의 전체 구문은 다음과 같습니다.

command [options] [arguments]

Bash는 첫 번째로 발견된 문자열을 명령으로 처리합니다. 다음 명령은 Bash의 ls(“list”) 명령을 사용하여 현재 작업 디렉터리의 내용을 표시합니다.

ls

인수는 종종 Bash 명령을 수반합니다. 예를 들어, ls 명령에 경로 이름을 포함하여 다른 디렉터리의 내용을 나열할 수 있습니다.

ls /etc

대부분 Bash 명령에는 작동 방식을 수정하기 위한 옵션이 있습니다. 플래그라고도 하는 옵션은 명령에 더욱 구체적인 지침을 제공합니다. 예를 들어, 이름이 마침표로 시작하는 파일 및 디렉터리는 사용자에게 표시되지 않으며 ls를 통해서도 표시되지 않습니다. 그러나 ls 명령에 -a(“all”) 플래그를 포함하고 대상 디렉터리에 있는 모든 항목을 볼 수 있습니다.

ls -a /etc

간편성을 위해 플래그를 결합할 수도 있습니다. 예를 들어, ls -a -l /etc를 입력하여 Linux의 /etc 디렉터리에 있는 모든 파일과 디렉터리를 자세히 표시하는 대신 다음과 같이 입력할 수 있습니다.

ls -al /etc

Bash는 간결합니다. 경우에 따라 단일 명령을 사용하여 수행할 수 있는 작업 수준이 상당히 높을 수 있으며 Bash 마니아에게 큰 자부심이 됩니다.

도움말 보기

사용할 수 있거나 사용해야 하는 옵션 및 인수는 명령에 따라 달라집니다. 다행히 Bash 설명서는 운영 체제에 기본적으로 제공됩니다. 도움말은 명령 하나면 이용할 수 있습니다. 명령 관련 옵션에 대한 자세한 내용을 보려면 man(“manual”) 명령을 사용합니다. 예를 들어, mkdir(“make directory”)에 대한 모든 옵션을 보려면 다음을 수행합니다.

man mkdir

Bash를 배울 때 man이 가장 좋은 친구입니다. man은 명령의 작동 방식을 이해하는 데 필요한 정보를 찾는 방법입니다.

대부분 Bash 및 Linux 명령은 --help 옵션을 지원합니다. 명령의 구문 및 옵션에 대한 설명을 표시합니다. 시연하려면 mkdir --help를 입력합니다. 출력은 다음과 같습니다.

Usage: mkdir [OPTION]... DIRECTORY...
Create the DIRECTORY(ies), if they do not already exist.
    
Mandatory arguments to long options are mandatory for short options too.
  -m, --mode=MODE   set file mode (as in chmod), not a=rwx - umask
  -p, --parents     no error if existing, make parent directories as needed
  -v, --verbose     print a message for each created directory
  -Z                   set SELinux security context of each created directory
                         to the default type
      --context[=CTX]  like -Z, or if CTX is specified then set the SELinux
                         or SMACK security context to CTX
      --help     display this help and exit
      --version  output version information and exit
    
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Report mkdir translation bugs to <http://translationproject.org/team/>
Full documentation at: <http://www.gnu.org/software/coreutils/mkdir>
or available locally via: info '(coreutils) mkdir invocation'

해당 방식으로 얻을 수 있는 도움말은 일반적으로 man에서 얻은 도움말보다 더 간결합니다.

와일드카드 사용

와일드카드는 Bash 명령에서 하나 이상의 문자를 나타내는 기호입니다. 가장 자주 사용되는 와일드카드는 별표입니다. 0자 또는 문자 시퀀스를 나타냅니다. 현재 디렉터리에 수백 개의 이미지 파일이 포함되어 있지만, 파일 이름이 .png로 끝나는 PNG 파일만 표시하려는 경우를 가정해 보겠습니다. 해당 파일만 나열하는 명령은 다음과 같습니다.

ls *.png

참고

Linux에는 다른 운영 체제처럼 파일 이름 확장명에 대한 공식적인 개념이 없습니다. PNG 파일에 .png 확장명이 지정되지 않을 것을 의미하는 것은 아닙니다. 간단히 말하자면, 파일 이름이 .png로 끝나기 때문에 Linux에서는 특별한 의미가 없습니다.

이제 현재 디렉터리에도 JPEG 파일이 포함되어 있다고 가정해 보겠습니다. 일부 파일은 .jpg로 끝나지만 일부 파일은 .jpeg로 끝납니다. 모든 JPEG 파일을 나열하는 한 가지 방법은 다음과 같습니다.

ls *.jpg *.jpeg

그리고 또 다른 예입니다.

ls *.jp*g

* 와일드카드는 0개 이상의 일치하는 문자를 찾지만, ? 와일드카드는 단일 문자를 나타냅니다. 현재 디렉터리에 0001.jpg, 0002.jpg ~ 0009.jpg 등의 파일이 포함되어 있으면 다음 명령은 모든 파일을 나열합니다.

ls 000?.jpg

그러나 와일드카드를 사용하여 출력을 필터링하는 또 다른 방법은 문자 그룹을 나타내는 대괄호를 사용하는 것입니다. 다음 명령은 현재 디렉터리에서 이름에 마침표가 포함되고 바로 뒤에 소문자 J 또는 P가 나오는 모든 파일을 나열합니다. 또한 .jpg, .jpeg.png 파일은 나열하지만, .gif 파일은 나열하지 않습니다.

ls *.[jp]*

Linux에서 파일 이름과 파일 이름에 작동하는 명령은 대/소문자를 구분합니다. 따라서 현재 디렉터리에서 이름에 마침표와 대문자 또는 소문자 J나 P를 포함하는 모든 파일을 나열하려면 다음과 같이 입력하면 됩니다.

ls *.[jpJP]*

대괄호 안의 식은 문자 범위를 나타낼 수 있습니다. 예를 들어, 다음 명령은 현재 디렉터리에서 이름이 소문자로 시작하는 모든 파일을 나열합니다.

ls [a-z]*

이와는 대조적으로 이 명령은 현재 디렉터리에서 이름이 대문자로 시작하는 모든 파일을 나열합니다.

ls [A-Z]*

또한 이 명령은 현재 디렉터리에서 이름이 소문자 또는 대문자로 시작하는 모든 파일을 나열합니다.

ls [a-zA-Z]*

해당 모든 내용을 토대로, 다음 명령이 어떤 작업을 수행할 것으로 추측할 수 있나요?

ls [0-9]*
ls *[0-9]*
ls *[0-9]

와일드카드 문자 중 하나를 일반 문자로 사용해야 하는 경우 리터럴로 만들거나 앞에 백슬래시를 붙여 “이스케이프”합니다. 따라서 어떤 이유로든 파일 이름의 일부로 별표를 사용한 경우(의도적이 아닌 경우) 다음과 같은 명령을 사용하여 검색할 수 있습니다.

$ ls *\**