쉘이란 무엇인가?터미널 에뮬레이터쉘 프롬프트파일과 디렉토리 조작와일드카드명령어와 친해지기별칭으로 나만의 명령어 만들기리다이렉션표준 입출력과 표준 오류표준 출력 재지정표준 오류 재지정원치 않는 출력 제거
쉘이란 무엇인가?
- 쉘이란 키보드로 입력한 명령어를 운영체제에 전달하여 이 명령어를 실행하게 하는 프로그램임
- 대부분의 리눅스 배포판은 bash라고 하는 GNU 프로젝트의 쉘 프로그램을 제공함
- bash라는 이름은 Bourne Again Shell 의 약어로 스티븐 본이 개발한 최초 유닉스 쉘 프로그램인 sh의 확장판이라는 의미
터미널 에뮬레이터
- GUI 환경에서는 쉘과 직접 작업할 수 있도록 도와주는 터미널 에뮬레이터라는 프로그램이 필요함
쉘 프롬프트
- 쉘이 입력 가능한 상태일 때에만 나타남
- 프롬프트의 마지막 글자가 달러 표시($)가 아니라 해쉬 표시(#)라면 현재 터미널 세션이 슈퍼유저 권한을 가졌다는 뜻임
- 시스템에 처음 로그인하면 홈 디렉토리가 현재 작업 디렉토리가 됨. 일반 사용자로 시스템을 사용할 때 파일 쓰기 권한이 부여된 유일한 공간임
파일과 디렉토리 조작
- GUI 환경의 파일 관리자는 손쉽게 파일을 관리할 수 있지만 아주 복잡한 작업들은 커맨드 라인 프로그램으로 하는 것이 더 쉬움
와일드카드
- 파일명의 그룹을 지정할 수 있도록 특수한 문자 지원함
- * : 모든 문자
- b*.txt : b로 시작하되 .txt 형식 파일
- ? : 모든 하나의 문자
명령어와 친해지기
- 명령어는 다음 네가지 중 하나
- /usr/bin 디렉토리에서 본 파일들처럼 실행 프로그램. 이러한 범주에서 프로그램은 C나 C++ 언어로 작성된 프로그램처럼 컴파일된 바이너리 형식의 파일이거나 쉘, 펄, 파이썬, 루비와 같은 스크립트 언어로 만든 프로그램일 수 있음
- 명령어란 쉘에 내장되어 있는 명령어. bash는 쉘-빌트인 이라고 하는 다수의 명령어를 내부적으로 지원함 (cd 명령어가 한 예시)
- 명령어란 쉘 함수. 쉘 함수란 시스템 환경에 포함된 쉘 스크립트의 미니어처 같은 존재
- 명령어란 별칭. 다른 명령어로부터 우리만의 명령어를 새롭게 정의할 수 있음
- type — 명령어 타입 표시. 쉘이 실행하게 될 명령어가 어떤 타입인지를 보여줌.
별칭으로 나만의 명령어 만들기
cd /usr; ls; cd - # 세미콜론을 통해 한줄에 여러 명령어 실행이 가능함 alias foo='cd /usr; ls; cd -' # alias 명령어를 통해 별칭을 만들 수 있음 unalias foo # 별칭 삭제
리다이렉션
표준 입출력과 표준 오류
- “모든 것은 파일이다” 라는 유닉스 정신을 상기하며 다시 보면, ls와 같은 프로그램은 사실 표준 출력(stdout이라고 함)이라고 불리는 특수한 파일에 이 명령어에 대한 결과를 보내고 표준 오류(stderr)라는 또 다른 파일에 그 상태 메시지를 전송함
- 기본적으로 표준 출력과 오류 모두 화면에 연결되어 있고 디스크 파일에 따로 저장되지 않음
- 많은 프로그램들이 표준 입력(stdin) 이라 부르는 곳에서 입력 내용을 가져오고 그것은 기본적으로 키보드에 직접 연결되어 있음
- I/O 리다이렉션 기능으로 출력과 입력의 방향을 변경할 수 있음. 일반적으로 출력은 화면에 나타나고 입력은 키보드로부터 인식되지만 I/O 리다이렉션으로 이러한 방식을 변경할 수 있음
표준 출력 재지정
ls -l /usr/bin > ls-output.txt # 해당 결과를 ls-output.txt 에 넣음 ls -l /bin/usr > ls-output.txt # 표준 출력만을 redirection 햇기에 표준 오류는 콘솔에 출력됨 ls : cannot access /bin/usr : No such file or directory # 따라서 ls-output.txt 는 파일 크기가 0임. > 로는 파일을 새로 작성하기 때문 ls -l /usr/bin >> ls-output.txt # 파일에 이어 쓰기가 가능해짐
표준 오류 재지정
ls -l /bin/usr 2> ls-error.txt ls -l /bin/usr > ls-output.txt 2>&1 # 표준 오류와 표준 출력을 한 파일에 쓰기.
- 표준 오류 재지정 시에는 파일 디스크립터를 참조함
- 표준 입력 : 0, 표준 출력 : 1, 표준 오류 : 2 파일 디스크립터 표현
원치 않는 출력 제거
ls -l /bin/usr 2> /dev/null
- 명령어의 출력 결과를 원치 않고 그것을 단지 버리고 싶을 때, /dev/null 이라는 특수한 파일로 출력 방향을 지정함으로써 가능함. /dev/null은 비트 버킷이라고 불리는 시스템 장치로 입력을 받고 아무것도 수행하지 않음