42seoul/circle-3
[ minishell ] 1. 사전지식
saniii
2022. 5. 15. 07:48
# shell
- 명령어 해석기 command interpreter
- 사용자가 입력한 명령어를 해석하여 커널에 전달
- 터널과 사용자간의 대화식 인터페이스를 제공
- 로그인 할 때 실행되어 사용자별로 사용 환경 설정을 가능하게 한다.
- 강력한 스크립트 언어
- 리다이렉션과 파이프 기능을 제공하고 포그라운드/백그라운드 프로세스를 실행
# bash shell
- /bin/bash
- 명령어 완성 기능, 히스토리, 명령어 치환, 편집 등의 지원
# 환경 변수
- 전체 shell에서 사용 가능한 전역 변수
- 서브 shell에 기능 상속 가능
- env로 환경 변수를 확인할 수 있다.
# 셸 변수
- 현재 로그인 shell에서만 사용 가능한 지역 변수
- 서브 shell에 기능 상속 불가능
- set으로 shell 변수를 확인할 수 있다.
# 프롬프트
https://ko.wikipedia.org/wiki/%EB%AA%85%EB%A0%B9_%ED%94%84%EB%A1%AC%ED%94%84%ED%8A%B8
# 프로세스
- CPU와 메모리를 할당받아 실행시키는 프로그램으로 프로세스마다 고유의 프로세스 ID(PID)를 할당받는다.
- 포그라운드
- 사용자와 상호작용하는 프로세스
- 터미널에 직접 연결되어 입출력을 주고받는다.
- 명령 입력 후 수행 종료까지 기다려야 한다.
- 응용 프로그램, 명령어 ...
- 백그라운드
- 사용자와 직접적인 대화없이 뒤에서 실행되는 프로세스
- 시스템 프로그램, 데몬 ,,,
- 사용자가 새로운 프로세스를 생성하기 위해서는 시스템 호출 함수 fork() 와 exec()를 사용할 수 있다.
- fork()
- 새로운 프로세스를 위한 메모리를 할당
- 새로운 프로세스를 만들 때 기존 프로세스를 복제
- 원본 프로세스 -> 부모 프로세스 (parent) , 복제된 프로세스 -> 자식 프로세스 (child)
- exec()
- 새로운 프로세스를 위해 메모리를 할당하지 않음
- 호출하는 프로세스가 새로운 프로세스로 변경된다.
- 호출한 프로세스 메모리를 새로운 프로세스가 덮어버려 exec()를 호출한 프로세스는 사라지고 exec()로 호출된 프로세스만 메모리에 남는다.
- fork()
- 시그널
- 프로세스에게 발생한 이벤트를 전달해주는 소프트웨어 인터럽트
# 리다이렉션 (redirection)
- 표즌 입력, 출력의 방향을 재지정
- 표준 입력, 출력, 에러가 화면이 아닌 파일로 대체된다.
- 연산자
- >
- 명령을 프린터나 파일에 출력
- 파일이 존재하지 않으면 새로운 파일을 만들고 같은 파일이 존재하면 덮어쓴다.
- >>
- 파일이 있는 경우 지정된 파일에 결과를 '추가'
- 파일이 존재하지 않으면 지정된 이름으로 파일을 생성
- <
- 키보드가 아닌 지정된 파일에서 입력 내용을 읽어옴
- >&
- 명령의 출력을 다른 명령의 입력으로 보냄
- <&
- 명령의 입력을 다른 명령의 출력으로 보냄
- >
# 파이프 ( | )
- 둘 이상의 명령을 함께 묶어 출력 결과를 다른 프로그램의 입력으로 전달하는 기능
형식 : 명령어1 | 명령어2 | 명령어3 ..
- 명령어1의 출력 결과는 명령어2의 입력으로 전달되고 명령어2의 출력 결과는 명령어3의 입력이 된다.
- 가장 마지막 명령어의 출력 결과를 화면으로 출력한다.
# 경로
- 절대 경로
- 시작 위치와 상관없이 경로에 모든 디렉터리를 포시
- 경로의 시작은 루트(/)부터 시작된다.
- 상대 경로
- 현재 작업 중인 디렉터리를 기준으로 표시하는 경로
# 내장 명령어
- export
- unset
- env
- exit
- echo
- cd
- pwd326
[참고]
이기적 리눅스마스터 2급