[Unix] 쉘 사용하기

Infrastructure/Unix

[Unix] 쉘 사용하기

조커린 2021. 9. 22. 12:45

이건 깃헙의 TIL에도 올렸지만 한 번 더 블로그에 정리하고자...

쉘 개요

쉘 사용법을 전반적으로 요약, 아직 생략된 부분이 있다. 차차 업로드 할 것 

쉘은 명령어 해석기 이면서 스크립트 언어
어떤 리눅스 배포판을 사용하든지 기본 셸로는 Bash셸이 제공된다.

  • 명령행 : 명령을 입력할 수 있는 라인
  • 터미널 띄우면 명령 프롬프트가 표시된다.
  • 기본 프롬프트는 $, 루트 사용자는 #이다.

셸 선택하기

  • 기본 셸 변경 : chsh -s 쉘의 이름
  • 터미널 창은 대화형 셸, 종료시엔 exit 혹은 ctrl + d
  • 셸 프롬프트에서 셸 실행시 서브셸 실행된다. (sh)
  • 서브셸의 실행시 자식 프로세스로 실행된다.
  • chsh시 사용자가 생략되면 사용자 본인을 대상으로함. 다른 사용자의 셸을 바꾸려면 권한이 있어야 한다.

chsh의 옵션

  • -l : /etc/shells에 기록된 가용한 셀을 나열한다. 
    -> 현재 centos에서 실행시 chsh 안됨. 
  • -s shell : 로그인 쉘을 변경. chsl -s /bin/lssh 과 같이
  • -u : 도움말 출력

셸 명령

가장 간단하게 명령을 수행하는 방법은 명령어의 이름만을 타이핑 하는 것이다.

기본적인 셸 명령의 형식 : 명령어 옵션 인수(command option arguments)

  • 짧은 옵션 (-)
    • ls -l
    • ls -lat와 ls -l -a -t는 같은 것
  • 긴 옵션 (—)
    • ls —all
  • 인수는 명령의 수행 대상을 지정하는 것
    • cat -n /etc/passwd
    • grep 'Garin' /etc/passwd
  • 옵션도 인수를 가질 수 있음 ex ) chsh -s /bin/sh garin

명령의 종류

셸의 모든 명령이 환경 변수 PATH에 포함되어 있는 디렉터리에 실행 파일로 존재해야 하는 것이 아닌
셸 자체에 내장된 내장명령도 있음.

종류

  • 에일리어스 : alias 명령을 사용하여 특정 명령을 옵션과 함꼐 짧은 별칭으로 정의해 둘 수 있다.
  • 셸 예약어 : 셸에서 예약된 단어로. 셸 스크립트 작성 시 사용되는 do, while, case, else등을 말한다.
  • 함수 : 셸에서 수행될 수 있는 일련의 명령을 함수롤 정의한 것
  • 내장 명령 : 셸 내부에 만들어져 있는 명령으로 cd, echo, pwd등 man builtin을 실행하면 내장 명령의 사용법을 확인할 수 있다.
  • 일반 명령 : 파일 시스템에 실행 파일로 존재하는 명령어

환경 변수 PATH에 설정된 경로 중에 실행파일이 존재하면 이름만으로 실행이 가능하다. 아니면 절대 경로를 사용해야 한다.

현재 디렉터리 (.)는 보통 PATH 에 포함되어 있지 않음

echo $PATH로 저장된 경로를 확인할 수 있다.

단축 명령 만들기 : alias

자주 사용되는 명령의 별칭을 만드는 것

alias 변수='명령어'

ex ) alias rm='rm -i'

해제시에는 unalias rm 과 같이 수행

실행 프로그램 찾기 : which

실행 프로그램을 환경변수 PATH를 기초로 찾아 경로를 출력

  • which rm

명령의 해석 방법 알기 : Type

특정 명령을 어떻게 해석하는지 알기 위해

실행파일의 위치를 보여줌

여러 유형으로 명령이 존재하는 경우 -a 옵션을 이용

ex ) type -a ls

실행 프로그램 확인 : whereis

찾고자 하는 명령을 whereis 명령의 인수로 지정하여 실행하면
명령의 실행 프로그램이 어디에 있는지 찾아서 알려 준다.

ex ) whereis which

온라인 매뉴얼 페이지 보기 : man

명령의 사용법이나 설정 파일 등에 관한 온라인 도움말을 제공

명령 히스토리

이전에 수행했던 명령의 이력을 조회할 수 있다.

history명령

이전에 수행했던 명령행의 목록을 불러옴

  • history , history 10등

다음의 기능을 이용하여 명령 실행 가능
기본적으로 탭을 이용하여 자동완성을 제공한다.

명령의 연결과 확장

특수문자

셸에서 특별한 의미를 가짐

  • 백슬래시 () : 특수 문자의 기능을 제거하는 이스케이프. 혹은 긴 명령 행을 분리할 때 사용
  • 틸트(~) - 또는 —username은 사용자의 홈 디렉터리를 의미
  • 도트 (.) : 현재 작업 디렉터리를 표시한다.
    또는 명령 행의 맨 앞에서 쉘 스크립트를 실행하는 source명령
  • 더블도트(..) : 현재 디렉터리의 부모 디렉터리
  • 파운드 (#) : # 문자와 뒤에 나타나는 문자를 주석으로 처리
  • 달러($) : $ 변수는 변수의 값을 추출

파이프와 입출력 리다이렉션

파이프 문자를 사용하면 한 명령의 출력을 다음 명령의 입력으로 연결시킬 수 있음 (파이프라인)

ex ) cat /etc/passwd | sort

명령을 수행할 때 필요한 입력을 표준입력(키보드)로 읽어 들이지 않고 파일로부터 입력을 얻을 수 있다.

왼쪽 화살 괄호를 사용하면 표준 입력을 지정된 파일로 리다이렉션하는 기능을 제공한다.

명령의 결과를 화면에 출력하지 않고 파일에 기록할 수도 있다.

오른쪽 화살 괄호를 사용하여 표준출력을 지정된 파일로 리 다이렉션 할 수 있다.

명령 치환

명령을 수행할 때, 명령의 인수로서 다른 명령의 결과를 사용

S(command) or command (백틱에 주의)

인용 부호

  • 빈칸을 포함하는 문자열을 1개의 인수로 사용할 때 인용부호를 사용한다.
  • 작은 따옴표는 특수 문자의 의미를 제거한다.
  • 큰 따옴표는 $, ``, , ! 를 해석하여 확장한다.
    • echo $(date)" → 날짜 출력
    • echo "\$(date)" → $(date)출력
    • echo 'Today is $(date)' → Today is $(date)출력

수식과 변수의 확장

셸은 셸 변수를 사용하여 정보를 저장할 수 있다.

셸 변수는 문자열 정보를 갖는다.

현재 사용중인 셸에서 설정되어 있는 모든 변수를 확인하려면 옵션이나 인수를 사용하지 않고 단순히 set 명령을 사용.

수식의 결과를 명령 수행 전에 전달한다.

$[수식] 또는 $((수식))

변수의 값을 추출하여 명령 수행 전 전달 한다.

환경 변수

셸 변수와 유사하나 새로운 서브셸이 만들어 질 때에 전달된다. 마치 전역변수처럼 사용이 된다.
보통 대문자를 사용하며 단순히 env 또는 printenv명령을 사용.

변수 설정과 환경 변수로 만들기 위해선

변수=값
->
export 변수

특정 환경 변수의 값을 확인

  • printenv 변수
  • echo $변수 는 모든 종류 변수 값을 확인할 수 있음