구름 14일차

박경현·2022년 8월 21일
0

Shell

Linux kernel과 사용자의 상호 작용을 위한 인터페이스 역할 수행 어플리케이션

기능

	1. 프로그래밍 기능(자동화),
		반복적으로 수행하는 작업을 프로그램형태로 작성 - 반복 자동화
		shell 프로그램 -> shell script 
		shell 에서 사용하는 명령을 모아 높은 파일
		
		shell script를 실행함 으로써 명령들을 자동 실행

	2. 명령 해석 및 실행기능 (사용자와 리눅스 커널 사이에서 명령을 해석하고 전달하는 해석기 및 번역기
		(interpreter, translator 기능을 함)
		리눅스 부팅 후 기본 사용하는 shell -> login shell 이라고 함
	
	login shell 지정 및 보고 싶으면 -> /etc/passwd 파일에 저장되고 cat이나 이런걸로 보면 됨
		패스워드라는 파일은 현재 Linux에 등록된  사용자 정보 저장 파일, 실제 password는 저장하고 있지 않다.

		-> 사용자이름: X(이거는 패스워드여서 이럼) :숫자(UID): 숫자(GID): 사용자 설명: 홈디렉토리: 로그인 쉘		

		/etc/shadow -> 패스워드 저장 파일
		/etc/group -> 현재 우리 리눅스의 그룹 정보가 나옴 (그룹 이름과 GID를 확인할수있다)
		chgrp 로 그룹을 변경하는게 가능
		groupadd명령으로 그룹을 추가
		프로그램을 사용할수있는 사용자를 지정 하고 싶으면 그룹을 사용해서 권한을 부여할때 그룹 생성
		/etc/gshadow 에 그룹 패스워드가 있다

		프롬프트 - 사용자로부터 명령입력을 기다릴때 표시되는 내용
			기본 프롬프트는 로그인 쉘이다!

	사용자 환경 설정 기능
		사용자 환경을 설정할 수 있는 환경 설정 파일(초기화 파일)
		설정 파일
			명령 검색 경로
			파일 생성시 기본 권한
			환경 변수 설정
	

shell 종류

	본 쉘(Bourne shell)
		UNIX V7에 처음 적용
		표준 shell 이라고도 한다.
		본 쉘 이름 - sh
		단순하고 처리 속도가 빠른 장점, 시스템 관리 작업 수행시 현재도 많이 사용하는 shell
		history, alias 작업 제어등의 편의 기능이 미약 ㅜㅜ

		vi 에서 :!sh 는 외부명령을 vi에 적을때 사용! -> 사용하는 쉘이 login shell이 아니게 됨
			
			
	C shell
		C shell 이름 - csh
		BSD UNIX에 처음 적용
		Bourne shell에 없던 history,alias등과 같은 편의 기능 추가
		shell script 형식이 c언어와 같기 때문에 C shell이라 한다
	
	쉘은 독립적인 프로그램이기 때문에 필요하면 설치하고 로그인 쉘로 해놓을 수 있다
	
	콘쉘(korn shell)
		AT&T에서 개발
		UNIX SVR4에 처음 적용
		콘 쉘 이름 - ksh
		본 쉘과 호환성을 유지하면서 사용자의 편의 기능과 C shell의 특징을 모두 포함!

	Bash shell(bourn again shell) -> 지금 우리가 사용하고 있는거
		본 쉘 기반으로 개발
		본 쉘과 호환성 유지하면서 csh,ksh 기능 포함
		본 쉘 이름 -> bash	
		리눅스 기본 쉘로 제공!!
		오픈소스이다 -> GPL license 기반(완전 무료 및 소스 공개까지!)	
	
	대시 쉘(dash shell)
		본 쉘 기반으로 개발
		POSIX 표준 준수 및 크기가 작게 개발
		대시 쉘 이름 -> dash
		Ubuntu에서는 배쉬 대신 dash 사용

	zsh 는 맥 OS에서 사용! -> BXD 기반으로 만들어서 애네가 제작함


	chsh 명령 -로그인 쉘 변경 명령
		chsh [옵션] [사용자명]
			-s shell -지정한 쉘(쉘의 절대 경로)로. Login shell 변경
			-l  -지정 가능한 shell 출력, /etc/shells 파일 저장 내용 우분투 2004에서는 지원안함!!!!

			절대경로로 입력해야 shell을 볼 수 있다.
			cat /etc/shells 하면 쉘 다 볼 수 있다
	
	로그인 쉘과 서브 쉘
		현재 프롬프트 상에서 다른 쉘을 실행하면 해당 쉘은 서브 쉘 이라 한다. 
			-> sh 입력하기, 
		서브 쉘은 현재 쉘가 별개의 다른 쉘을 실행
		서브 쉘 종료 방법은 exit 명령, ctrl+d 입력
		서브 쉘이 종료 되면 이전 쉘 환경으로 복귀
		로그인 쉘을 종료 하면 logout 상태가 된다.
			logout - 현재 사용자 사용 종료, Linux booting 후 login 화면으로 전환
			Linux 종료 - shutdown이라고 하면 리눅스를 완전히 종료한다는 의미

shell 명령

		shell 내장 명령
			쉘에 내장된 명령으로도 별도의 실행 파일이 존재 하지 않는 명령
			type 명령 - 명령 종류 확인 -> type<명령>

			ex) cd 같은애들 -> which나 whereis로 파일 존재하는지 확인할 수 있다

		shell 일반 명령
			별도의 실행 파일로 존재하면 실행시 메모리에 로드한 후 실행 되는 과정을 거치는 명령
			사용자 작성 프로그램 또한 shell 일반 명령으로 볼 수 있다.
			ex) which ls -> 하면 실행 파일 존재함

echo 명령 - 문자열 또는 변수 내용 출력

		echo 명령은 자동 줄 바꿈 기능이 있다
		echo [옵션] <문자열 또는 변수>
			-n: -줄바꿈 하지 않는다
			문자열은 ‘(따옴표)’ 나 “(이중 따옴표)”로 묶거나 직접 문자열만 표기 가능!
				
			특수문자
				‘(따옴표)’ - 문자열을 감싸서 표현, 문자열 안의 특수 문자 기능은 모두 해제
				“(이중 따옴표)” - 문자열을 감싸서 표현, 문자열 안의 특수 문자중 $,`(백틱), / 는 가능
				₩백틱 - 표현식 또는 명령에 대한 기능 수행 결과
				\(백슬래쉬) - 제어문자(특정 문자에 기능을 적용) 효과 배제!
					\n, \t, \b -등을 의미

			변수 
				- 값을 저장하는 메모리의미
				- 항상 대문자로 사용
				- 변수명은 변수에 대한 이름
				- 변수 종류
					shell 변수 - 현재 사용중인 쉘에서만 사용 가능한 변수(지역변수)
					환경 변수 - 현재 사용중인 shell과 서브 쉘 모두 적용되는 변수(전역변수)	
						생성 - > export 변수명=값
							-> shel l변수를 환경 변수로 변경 - export <shell 변수>

					다시 돌리기 위해서는 export -n 적기!

					unset 명령 - 변수 해제
						unset 변수 명
				
				- 변수 목록 출력	
					set 명령 - 전체 변수 출력 shell변수와 환경변수 전부 출력
					env 명령, printing 명령 - 환경 변수 전체 출력, 여러개 있으면 맨위에만 출력

				주요 환경 변수
					HISTSIZE - 명령 history 저장크기
					HOME - 사용자 홈 디렉토리 절대 경로
					LANG - 사용 언어
					LOGNAME - 사용자 계정 이름

PATH - 명령 탐색 경로

		리눅스에서 명령 검색 하면 path 변수내용의 경로에서 검색
		맨 처음 경로부터 한개 씩 봄 -> 없으면 없다고 나옴

			PWD - 현재 디렉토리 경로
			SHELL - login shell	
			
			ex) echo ‘hello world’ > text 처럼 리다이렉션도 가능! (원래 표준 출력은 전부 리다이렉션이 가능)
			쉘에서 변수 내용을 지칭할때는 $를 앞에 붙인다!

alias

		별명을 의미하여 원하는 기능을 수행하는 명령들을 별도의 alias를 통해 지정
		alias <이름> = ‘명령; 명령’ ~~ alias
		unalias <alias 이름> - alias 해제

환경 설정

		리눅스 부팅시 또는 사용자 로그인 할때 마다 자동으로 shell 환경 설정
		환경 설정 파일 - 환경 설정 내용을 담고 있는 text 파일
			

시스템 환경 설정 파일

		Linux 시스템을 사용하는 모든 사용자들에게 공통으로 적용되는 환경 정보를  담고 있는 파일
		관리자 권한으로 수정 가능
				
		/etc/profile
			시스템 공통으로 적용되는 환경 변수 설정
			PATH, USER, HOME, HISTSIZE 등
			기본 접근권한설정 - /etc/profile.d/*.sh 실행

		/etc/bashrc- 없을 수도 있다
			시스템 공통으로 적용되는 함수와 alias 설정
			기본 프롬프트 설정
			서브 쉘을 위한 명령 경로 설정, 기본 접근 권한 설정
				
		/etc/profile.d/*
			언어나 명령 별 각각 필요 환경 설정, 필요시 설정 파일 추가

사용자 환경 설정

		개별 사용자 마다 원하는 환경 설정에 대하여 환경 설정 정보를 담고 있는 파일
		사용자가 로그인 하면 먼저 시스템 환경 설정 파일 내용을 적용하고 이 후 사용자 환경 설정 파일을 적용
		사용자 환경 설정 파일은 사용자 홈 디렉토리에 hidden 파일로 저장

		~/.bash_profile
			
			경로 추가 등 사용자 정의 환경 설정
		~/.bashrc ====================== 여기에 적기!~!
			일반적인 사용자 환경 설정
			사용자 정의 함수나 alias등 설정

		~/.bash_logout
			로그 아웃시 실행할 함수 등 설정
		

		-> vi ~/.bashrc에 가서 MYPWD=“current directory - `pwd`”
					echo $MYPWD 하면 적용됨 —> 우리가 실제 들어올때마다 적용됨

Shell Script

shell 명령 기반으로 자동화를 수행하는 텍스트 파일(실행권한을 부여해줘서 실행이 가능함!)
단순히 shell 명령만 사용 하는 것이 아니라 선택/ 반복과 같은 실행
흐름 제어기능을 적용하여 프로그램 성격을 갖도록 작성한 파일
shell script 파일 첫 줄에 #!/bin/sh 또는 #!/bin/bash(shebang, 셔뱅) 을 추가하여 실행할 shell을 명시 해주는 것이 일반적인 형식
shell script 파일은 .sh 확장자 부여

쉘 스크립트 실행
	실행 권한 부여
		chmod 명령을 이용하여 실행 권한 부여
		
	소스 명령 사용
		source <shell script 파일>
		환경 설정 파일 변경 후 바로 적용하고자 할때 사용

		vi ~/.bashrc에 적고 source ~/.bashrc 하면 exit로 안나가도 바로 내가 적은 내용 지금 쉘에 적용됨!

	shell script 구성요소
		변수 - 값 저장목적으로 사용하는 shell 변수
		변수명은 소문자 사용
		만약 shell 변수나 환경 변수로 사용할 변수는 대문자 사용
		변수 내용 접근 시 $를 변수명 앞에 사용
		다른 문자열과 변수를 혼합하여 사용시 변수를 {} 로 묶어서 사용

	shell script에서 사용하는 특수 변수
		$0 - 쉘 스크립트 파일 이름
		$1 - $n - n번째 인수
		$# - 인수 개수
		$? - 직전 실행 명령 상태(반환 값)
		$$ - shell script process ID
		$LINENO - 변수를 사용할 줄 번호
		shift - 인수 위치를 하나씩 왼쪽으로 이동 -> 1번째 인수 버리고 2번재 인수가 1번째 인수가 됨!
		
	조건에 따른 실행 
		if then - elif - else - fi - 조건식

		if [조건식1] then
			조건식1 참인경우 실행내용
		elif [조건식2] then
			조건식2 참인경우 실행 니용
		else
			조건식1과 2 아닐때
		fi 
	
			•	[ 식 ]
* [ -n string ] - string 길이가 0이 아니면 참
* [ -z string ] - string 길이가 0이면 참
* [ str1 = str2 ] - str1과 str2가 동일하면 참
* [ str1 != str2 ] - str1과 str2가 같지않으면 참
  • 관계 연산

    • -eq( 같다 ), -ne( 같지 않다 ), -gt( 크다 ), -ge( 크거나 같다 ), -lt( 작다 ), -le( 작거나 같다 )
  • 논리 연산

    • -a( and ), -o( or ), ! 식( not )
    • ( 식 ) - () 안의 식의 결과를 돌려준다. 여러 식 결합시 사용, ‘’로 감싸서 사용
  • 파일 판단

    • -f file : 파일이 존재하고 일반 파일이면 참
    • -c file : 파일이 존재하고 특수 파일이면 참
    • -e file : 파일이 존재하면 참
    • -d file : 파일이 존재하고 디렉토리 파일이면 참
    • -L file : 파일이 존재하고 심볼릭 링크 파일이면 참
    • -r file : 파일이 존재하고 읽기 가능하면 참
    • -w file : 파일이 존재하고 쓰기 가능하면 참
    • -x file : 파일이 존재하고 실행 가능하면 참
  • 반복 실행
    • 일정 회수 또는 일정 조건이 만족하는 동안 원하는 동작을 반복 실행할 경우 사용
  • 반복할 횟수가 정해진 경우 - for

    • for <변수> in <반복대상>; do
      반복시 수행할 내용
      done
  • 조건에 따라 반복을 수행할 경우 - while

    • 조건이 만족하는 동안 반복
    • while 문 안에서 반복 제어 변수의 내용을 변경하여 조건식의 결과가 거짓이 될 수 있도록 하지 않으면 무한 loop에 빠진다.
  • <반복 제어 변수 초기화>
    while [ <반복 제어 변수> 이용한 조건식 ]; do
    조건이 참인 동안 수행할 내용
    <반복 제어 변수 내용 변경>

    			expr - 연산식을 표현할때 맨 앞에 사용!
    				express `1+2`

PATH에 저장 안되어있는 쉘 스크립트면 실행이 되지않는다!! Sammple.sh 만 해도 실행파일이면 나와야하는데 안나온다!!
절대경로나 상대경로로 지정해서 이름을 적어야한다

애플이 zsh만든건 아니다!! -> 그냥 자기네 맞게끔 설정 하기만 한 거!
눈에 보이지 않는 문자는 white space인데 이걸 하고 싶으면 ‘ ‘나 “” 사용해서 안에 적어야한다
Echo -n ‘ ‘ ; echo world

변수 - 메모리공간에 부여한 이름, 메모리 공간에 값을 저장할때 사용

환경변수랑 쉘 변수 구분하기 힘듬
리눅스는 항상 환경변수 내에 있는 path 경로 들을 살펴보고 정함 (현재 디렉토리 굳이 검사 안함!!)

윈도우는 명령어 입력하면 현재 디렉토리에 있는지 먼저 검색 하고 path안에 있는지 검색

alias 도 변수 처럼 생성 하기 때문에 그리고 명령의 형태를 담는 것이기 때문에 변수처럼 생각 하면 된다

profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글