본문 바로가기
Computer Science/UNIX & LINUX

Linux Shell - 리눅스 쉘이란

by PROGRAMMER_황금돼지코 2023. 3. 30.
반응형

들어가며

Linux Shell에 대해서 공부하며 글을 쓰게 됩니다. 여러분들도 이 글을 통해 Linux shell에 대해서 조금 더 알아가는 시간이 되셨으면 합니다.

 

1. Shell이란

리눅스를 사용하다 보면, 터미널 환경에서 명령어를 입력하여 작업을 수행하는 경우가 많습니다. 여기서 사용되는 것이 바로 Linux shell입니다. Shell은 사용자와 컴퓨터 사이에서 명령어를 해석하고 실행하는 역할을 하는데, 이 과정을 통해 시스템 작업을 보다 효과적으로 수행할 수 있게 됩니다. 

 

가령, "파일 열기" 또는 "파일 복사"와 같은 명령을 마우스로 클릭하는 대신 단어로 입력하면 컴퓨터가 요청한 대로 수행합니다. 흔히 사용하는 Microsoft Windows와 다른 점은, 마우스를 사용하거나 아무 것도 클릭할 필요가 없다는 것입니다. 명령을 입력하고 Enter 키를 누르기만 하면 됩니다.

 

2. Shell의 역할과 기능

대표전인 Shell의 주요 역할은 사용자가 입력한 명령어를 해석하여 해당 작업을 수행하는 것입니다. 하지만 Shell은 단순히 명령어를 실행하는 것뿐만 아니라, 다양한 기능을 통해 사용자가 편리하게 작업을 수행할 수 있도록 도와줍니다. 다음은 Shell의 대표적인 기능들 입니다.

  1. 명령어 실행: 사용자가 입력한 명령어를 해석하고, 해당 작업을 실행합니다.
  2. 명령어 히스토리: 이전에 실행한 명령어를 저장하여, 필요할 때 다시 사용할 수 있습니다.
  3. 파일 및 디렉토리 관리: 파일 생성, 이동, 삭제 등의 작업을 수행할 수 있습니다.
  4. 프로세스 관리: 실행 중인 프로세스를 확인, 종료 등의 작업을 수행할 수 있습니다.
  5. 파이프 및 리다이렉션: 여러 명령어의 출력을 결합하거나, 출력 결과를 다른 파일이나 프로그램으로 전달할 수 있습니다. 이를 통해 명령어들을 서로 연결하여 더 복잡한 작업을 수행할 수 있게 됩니다.

이처럼 Linux shell은 다양한 역할과 기능을 통해 사용자와 시스템 간의 원활한 상호작용을 가능하게 합니다. 리눅스를 사용하는 데 있어서 shell의 이해와 활용은 매우 중요하며, 이를 통해 더 효율적인 작업 수행이 가능해집니다.

 

3. Shell의 종류

리눅스에서 사용할 수 있는 Shell은 다양하며, 각각 특징과 장단점이 있습니

다. 대표적인 Shell 종류에는 다음과 같은 것들이 있습니다.

  1. Bourne Shell (sh): 리눅스에서 가장 오래된 쉘로, Unix에서 최초로 개발되었습니다. 기본적인 쉘 기능을 제공하며 호환성이 높아 다양한 환경에서 사용할 수 있습니다.
  2. Bourne Again Shell (bash): Bourne Shell의 확장 버전으로, GNU 프로젝트의 일환으로 개발되었습니다. 많은 리눅스 배포판에서 기본 쉘로 사용되고 있으며, 강력한 스크립팅 기능과 사용자 친화적인 기능을 제공합니다.
  3. C Shell (csh): C 프로그래밍 언어와 유사한 문법을 제공하는 쉘로, 주로 BSD 계열의 Unix에서 사용됩니다. 스크립트 작성 시에 C언어와 유사한 구조를 사용할 수 있어 프로그래머들에게 인기가 있습니다.
  4. TENEX C Shell (tcsh): C Shell의 확장 버전으로, 사용자 친화적인 기능과 향상된 스크립팅 기능을 제공합니다. 특히 명령어 자동 완성, 명령어 히스토리 등이 추가되어 있습니다.
  5. Korn Shell (ksh): Bourne Shell과 C Shell의 장점을 결합한 쉘로, 복잡한 스크립팅 작업을 수행하기에 적합합니다. 최근에는 KornShell 93 (ksh93) 등의 발전된 버전도 사용되고 있습니다.
  6. Z Shell (zsh): Bash, tcsh, ksh의 기능을 모두 포함한 쉘로, 고급 스크립팅 기능과 향상된 사용자 인터페이스를 제공합니다. 많은 플러그인과 테마를 지원하며, 개발자들 사이에서 인기가 높습니다.

각 쉘은 사용자의 요구와 환경에 따라 적합한 것을 선택하여 사용할 수 있습니다. 리눅스 배포판에 따라 기본으로 제공되는 쉘도 다르므로, 원하는 쉘을 설치하여 사용할 수 있습니다.

 

4. Linux shell 사용법 기초

4.1 기본적인 파일 및 디렉터리 관리 명령어

다음은 Linux shell에서 파일 및 디렉터리를 관리하는 대표적인 명령어입니다.

  • ls: 현재 디렉토리의 파일 및 디렉터리 목록을 출력합니다.
  • cd: 디렉터리를 이동합니다.
  • mkdir: 새로운 디렉터리를 생성합니다.
  • rmdir: 디렉터리를 삭제합니다.
  • touch: 새로운 빈 파일을 생성합니다.
  • rm: 파일을 삭제합니다.
  • cp: 파일을 복사합니다.
  • mv: 파일을 이동하거나 이름을 변경합니다.

 

4.2 환경 변수와 설정

환경 변수는 컴퓨터에서 여러 프로그램이 공유하는 정보를 저장하는 '기억장소'와 같은 것입니다.

예를 들어, 컴퓨터에서 실행 가능한 프로그램을 찾을 때, 이 프로그램이 저장되어 있는 위치를 알려주는 경로를 저장하는 'PATH'라는 환경 변수가 있습니다. 이 경로 정보를 환경 변수에 저장해 놓으면, 프로그램 실행 시마다 매번 경로를 입력하지 않아도 되어 편리합니다.

환경 변수는 대문자로 표기되며, 쉘에서 'export 변수명=값' 형식으로 설정할 수 있습니다. 이후에는 다른 프로그램에서 '변수명'으로 환경 변수에 접근하여 값을 사용할 수 있습니다. 이렇게 환경 변수를 사용하면 여러 프로그램에서 필요한 정보를 효율적으로 공유하고 사용할 수 있습니다.

 

4.3 기본적인 스크립트

Linux shell 스크립트는 일련의 명령어들을 순차적으로 실행하는 프로그램입니다. 스크립트를 작성할 때는 주로 '.sh' 확장자를 사용하며, vim 같은 텍스트 에디터를 이용하여 작성할 수 있습니다. 스크립트를 실행하려면 'bash 스크립트명.sh' 또는 'sh 스크립트명.sh' 명령어를 사용합니다.

 

5. Shell 스크립트

스크립트를 활용하면 반복적인 작업을 자동화할 수 있고, 복잡한 명령어를 쉽게 관리할 수 있습니다. 

예를 들면, 시스템 관리 작업을 자동화할 수 있습니다. 백업 작업이나 서버 모니터링, 로그 분석 등의 작업을 스크립트를 통해 자동으로 실행할 수 있습니다. 이를 통해 시스템 관리자의 부담을 줄이고, 작업의 정확성과 효율성을 높일 수 있습니다.

5.1 간단한 스크립트 예제

#!/bin/bash
echo "Hello, World!"

 

6. Alias 와 History

6.1 Alias(앨리어스)

앨리어스(alias)는 긴 명령어를 짧게 축약하여 사용할 수 있도록 하는 기능입니다. 앨리어스를 사용하면 자주 사용하는 명령어를 간편하게 실행할 수 있어 작업 효율성이 향상됩니다. 앨리어스를 생성하려면 다음과 같은 형식으로 명령어를 입력합니다.

alias 축약명='원래 명령어'
ex. alias ll='ls -alF'

 

7.1 History(히스토리)

히스토리(history)는 이전에 사용한 명령어들을 저장하여 나중에 다시 사용할 수 있게 해주는 기능입니다. 히스토리 기능을 사용하면 이전에 실행했던 명령어를 쉽게 찾아서 재사용할 수 있습니다. 히스토리를 확인하려면 'history' 명령어를 입력하면 됩니다.


8. 프롬프트 설정

프롬프트(prompt)는 쉘에서 명령어를 입력하기 전에 표시되는 문자열입니다. 프롬프트를 설정함으로써 작업 환경을 개인화하고, 명령어 입력에 도움이 되는 정보를 표시할 수 있습니다. 대단한 건 아니며, 단순히 프롬포트에 보이는 문자열에 대한 개인화라고 보면 됩니다.

8.1 프롬포트 설정 방법

프롬프트를 설정하려면 'PS1' 환경 변수를 수정하면 됩니다. 예를 들어, 현재 작업 중인 디렉토리와 사용자 이름을 프롬프트에 표시하려면 다음과 같이 입력합니다.

export PS1='\u@\h:\w\$ '
반응형

'Computer Science > UNIX & LINUX' 카테고리의 다른 글

파일 시스템 & 디스크 관리  (0) 2023.03.30
프로세스 관리  (0) 2023.03.30
파일 접근 권한 관리  (0) 2023.03.30
[리눅스] 리눅스 표준 디렉터리  (0) 2023.03.25
[리눅스] 유닉스와 리눅스 역사  (0) 2023.03.25

댓글