리눅스와 쉘

HYEON·2023년 7월 14일
0

CS

목록 보기
1/1
post-thumbnail
💡 쉘 스크립트에 관해 공부하면서 정리한 내용입니다.

리눅스와 유닉스


유닉스

  • 다중 사용자, 다중 작업 환경에서 동작하는 운영 체제(OS)이다.
    • CLI을 특징으로 하며, 터미널 기반의 작업을 지원한다.
    • 강력한 기능과 안정성, 보안성을 갖춘 운영체제이다.
      • 권한과 접근제어를 강력하게 제어하고, 뛰어난 이식성과 표준화는 안정성과 보안성을 보장한다.

리눅스

  • 유닉스 계열의 오픈 소스 운영 체제이며, 리누스 토발즈에 의해 개발되었다.
  • 오픈 소스 기반으로 개발되어, 누구나 소스 코드에 접근하고 수정할 수 있다.

차이점

유닉스리눅스
소스 코드가 주로 사유적이다.오픈 소스이다.
다수의 금융인프라 그리고 많은 가용솔루션의 뼈대를 이루는 인프라에 사용된다.모바일폰, 태블릿 컴퓨터 그리고 비디오 게임 콘솔에서부터 메인프레임이나 슈퍼컴퓨터까지 다양한 컴퓨터 하드웨어에 설치가 가능하다.
OS X, Solaris 등Ubuntu, Fedora, Red Hat, Debian 등

리눅스 명령어

  1. $ifconfig: 네트워크를 구성하는 인터페이스를 확인하는 명령어로써 활성화된 인터페이스의 세부사항을 표시

    1. lo: 루프백 인터페이스로 내부 통신용 네트워크 인터페이스이다. 자기 자신과의 통신을 위한 가상 이더넷 장치이다.
    2. <global>: 전역 IPv6 주소로, 글로벌 범위로 라우터를 통해 인터넷에 연결된 장치에 할당되는 주소이다. 이는 인터넷 상에서 고유한 주소로 사용되며, 인터넷으로부터 직접 접근 가능한 주소를 의미한다.
    3. enp0s1: Linux 시스템에서 인텔 이더넷 카드의 첫 번째 포트를 나타내는 네트워크 인터페이스의 이름이다. 이 네트워크를 이용해 ssh 접속을 한다. <global>을 이용해도 접속이 가능하다.
  2. $chmod [옵션] 모드 파일명: chmod(change mode)의 줄임말로, 파일 및 디렉토리의 권한(permissions)을 변경하는 명령어이다.

    1. 모드는 권한을 나타내는 숫자나 기호로 표현된다. 권한으로는 read, write, execute 3가지가 있다.
    # 숫자 모드 : 각 숫자 자리는 소유자, 그룹, 기타 사용자의 권한을 나타낸다.
    # rwx -> 4 2 1 로 7은 read, write, execute 3가지의 권한을 의미한다.
    chmod 755 {파일명}
    #기호 모드 : u(소유자), g(그룹), o(기타 사용자), a(모든 사용자), +(추가), -(제거), =(설정)
    chmod u+rx {파일명}

쉘(Shell)과 쉘 스크립트(Shell Script)란?


리눅스의 구조(https://wogh8732.tistory.com/75)

쉘(Shell)이란?

  • 운영체제의 커널과 사용자 간의 인터페이스로 동작하는 프로그램이다.
💡 커널이란? 운영 체제의 핵심 부분으로, 하드웨어와 응용 프로그램 사이의 인터페이스 역할을 한다. 시스템의 자원 관리, 프로세스 스케줄링, 메모리 관리, 입출력 처리 등 다양한 핵심 기능을 수행한다.
  • 사용자는 쉘을 통해 운영 체제에 명령을 내리고 프로그램을 실행할 수 있다.
  • 초기화 파일을 이용해 사용자의 환경을 설정할 수 있다.
    • 환경 변수를 이용
  • 프로그래밍 기능이 내장되어 프로그램이 작성 가능하다. 쉘 프로그램을 쉘 스크립트라고 한다.

환경변수

  • 시스템 또는 사용자 환경에서 사용되는 변수, 프로그램이 실행되는 동안 값이 유지되는 데이터이다.
  • 쉘 환경에서 정의되며, 주로 시스템 설정, 사용자 설정, 프로그램 설정 등을 저장하고 전달하는 데 사용된다.
  • 환경 변수를 사용하면 시스템과 응용 프로그램의 설정을 유연하게 관리하고 다양한 환경에서 일관성을 유지할 수 있다. 또한, 동일한 환경 변수를 다른 시스템 또는 사용자 간에 공유하여 설정 값을 일관되게 유지할 수도 있다.


Shell 시작 및 로그인시 환경변수를 읽어들이는 순서(https://velog.io/@dhkim1522/리눅스-환경변수)

  • 환경 변수의 동작 범위
    • 로컬 환경 변수: 현재 세션에서만 동작하는 변수
    • 사용자 환경 변수: 특정 사용자에 대해서만 정의된 환경 변수로 로컬 터미널 세션 또는 원격 로그인 세션을 사용하여 로그인 할 때만 로드된다.
      • 관련 파일: .bashrc, .bash_profile, bash_login, .profile
    • 시스템 환경 변수: 해당 시스템에 존재하는 모든 사용자가 사용할 수 있는 환경 변수로 시스템 전원이 켜져 있고 모든 사용자가 원격 또는 로컬로 로그인 할 때마다 로드된다.
      • 관련 파일: /etc/environment, /etc/profile, /etc/profile.d, /etc/bash.bashrc

쉘 스크립트(Shell Script)란?

  • 쉘에서 실행되는 스크립트로, 쉘 명령어와 제어 구조를 사용하여 작성된 일련의 명령어 집합이다.
  • 자동화된 작업을 수행하거나 반복적인 작업을 자동으로 처리 할 수 있다.
  • 쉘 스크립트는 쉘 프로그래밍 언어로 작성된다.
    • ex) bash, zsh, sh, csh, ksh, …

bash와 zsh 차이

  • 이번에 사용한 쉘 스크립트인 bash와 zsh의 공통점, 차이를 알아보겠다.
    • 기본적으로 bash와 zsh은 명령어 인터프리터로서 사용자와 운영 체제 간의 상호 작용을 가능하게 하는데, zsh이 bash 보다 좀 더 많고 강력한 기능과 많은 커스터마이징을 지원한다.
bashzsh
리눅스의 표준 쉘이다.bash 쉘의 확장 버전으로 많은 새로운 기능과 플러그인, 테마를 지원한다.
기본적인 자동 완성 제공다양한 자동 완성 기능 제공(경로 완성, 명령어 옵션 완성, 변수 및 함수 이름 완성, …)
기본적인 프롬프트 외관과 동작을 변경 할 수 있는 설정 제공다양한 프롬프트 테마와 옵션 설정 가능

쉘 스크립트 문법에 대한 간단한 예시


  • #!/bin/bash: 쉘 스크립트의 첫 줄에 위치하는 특별한 주석으로, 스크립트를 실행하기 위해 사용할 쉘(Shell)의 경로를 지정한다.
  • 변수
    • 쉘 스크립트의 변수에는 타입이 없다.
    • var=123 이런식으로 변수를 설정한다.
  • 쉘 스크립트 연산자
    =변수에 값을 할당하는 연산자-d디렉토리의 존재 여부를 확인
    ==문자열 비교 연산자 (같은지 여부를 확인)-r읽기 권한 여부를 확인
    !=문자열 비교 연산자 (다른지 여부를 확인)-w쓰기 권한 여부를 확인
    -eq숫자 비교 연산자 (같은지 여부를 확인)-x실행 권한 여부를 확인
    -ne숫자 비교 연산자 (다른지 여부를 확인)-s파일이 비어있지 않은지 여부를 확인
    -lt숫자 비교 연산자 (작은지 여부를 확인)-lt, -gt숫자 비교 연산자로 사용되어 숫자의 크기를 비교할 때 사용
    -gt숫자 비교 연산자 (큰지 여부를 확인)-le, -ge숫자 비교 연산자로 사용되어 숫자의 크기 또는 같음을 비교할 때 사용
    -le숫자 비교 연산자 (작거나 같은지 여부를 확인)-eq, -ne숫자 또는 문자열 비교 연산자로 사용되어 숫자나 문자열이 같은지 또는 다른지 여부를 비교할 때 사용
    -ge숫자 비교 연산자 (크거나 같은지 여부를 확인)!논리 NOT 연산자 (명령의 결과를 부정)
    -z문자열 길이 비교 연산자 (빈 문자열인지 확인)-a파일 및 디렉토리의 존재 여부를 확인하는 AND 연산자
    -n문자열 길이 비교 연산자 (빈 문자열이 아닌지 확인)-o파일 및 디렉토리의 존재 여부를 확인하는 OR 연산자
    &&논리 AND 연산자 (앞의 명령이 성공하면 뒤의 명령 실행)-e파일 또는 디렉토리의 존재 여부를 확인
    논리 OR 연산자 (앞의 명령이 실패하면 뒤의 명령 실행)
  • for문(반복문)
#기본 문법
for 변수 in 범위(배열, 리스트, ...)
do
		명령
done

#예제: 1..4로 특정 범위 특정 간격으로 증가 {1..4}로 하면 순차적으로 1씩 증가
for var in {1..4..2}
do 
	echo var
done
#출력
1
3

#예제: 배열을 이용한 예제
array=(1 2 3 4)
for var in "${array[@]}"
do
	echo var
done
#출력
1
2
3
4
  • if문
#기본 문법
if [값1 조건식 값2]; then
	수행문
else
	수행문
fi

#예제
if (($var = 1)); then
	echo "value is 1"
else
	echo $var
fi

개발환경


  • 로컬에서 작업하던 코드나 프로젝트를 다른 물리적, 논리적 환경에서 실행할 필요가 있다.
    • 어플리케이션을 배포할 때, 다른 개발자와 협업시, 실제 운영 환경으로 이동해야 할 때 등과 같이 많은 이유가 있다.
  • 다른 컴퓨터에서 나의 개발 환경과 비슷하게 어떻게 만들 수 있을까?
    • 도커를 이용한 컨테이너, 가상 머신을 이용한 가상화를 통한 개발 환경 격리, 공유
    • 환경 설정 및 패키지 관리 도구를 이용해 개발 환경을 비슷하게 만듦
    • 환경 변수 관리, … 다양한 방법이 있다.

마무리


리눅스와 쉘(Shell)에 대한 이해를 바탕으로 환경 변수가 로컬, 사용자, 시스템의 동작 범위에서 어떠한 실행 순서를 가지고 어떤 파일에서 설정하거나 가지고 있는지 알게 되었다. 또한 환경 변수를 사용하면 시스템과 응용 프로그램의 설정을 유연하게 관리하고 다양한 환경에서 일관성을 유지할 수 있다는 점 또한 알게 되었다.

또한, 일련의 동작을 구현하기 위한 쉘 스크립트로 프로그래밍을 하는 과정에서, 쉘 스크립트에 대한 내용과 다양한 리눅스 명령어들을 알게 되었다.

이번 학습 내용을 정리하면서 기존으로 알고 있던 내용들이 있었는데, 다시 한번 더 정리하면서 새롭게 알게 되는 내용이 있었다. 학습 시에 좀 더 깊게 파고드는 습관을 가지도록 노력해야겠다!

profile
레벨업하는 개발자

0개의 댓글