: 사용자와 커널 사이의 중재자 역할을 수행하는 도구 또는 프로그램
명령어 해석기 : 사용자와 커널 사이에서 명령을 해석해서 전달하는 역할
프로그래밍
사용자 환경 설정
🔸 bourne Shell :
🔸 C Shell :
🔸 Korn Shell :
🔸 Bash Shell :
🔸 Dash Shell :
ls -l /bin/sh🔸현재 셸을 확인하는 방법
프롬프트를 확인해서 $이면 본셸이나 콘셸 또는 배시셸이고 %이면 C셸
grep 명령으로 특정 사용자 정보를 확인
grep jiwon /etc/passwd -> 우분투는 배시셸
🔸셸 변경 방법
우분투의 기본셸은 bash이지만 사용자가 다른 셸로 변경이 가능
chsh 라는 명령으로 셸을 변경할 수 있다
chsh [옵션][사용자게정]
옵션
-s shell경로 : 지정하는 셸(절대 경로로 설정)로 로그인 셸 변경-l : /etc/shells 파일에 지정된 셸을 출력🔸셸 변경 하기
1. 사용가능한 셸 확인 : cat /etc/shells
2. 셸변경
# 절대경로가 아니라서 에러
chsh -s sh jiwon
# 절대 경로
chsh -s /bin/sh
3. 셸 변경 확인 (bash -> sh)
grep jiwon /etc/passwd

실행 파일은 cat 명령으로 확인할 수 없고 file 명령으로 확인
file /usr/bin/pwd : 이 경우 실행 가능한 파일이라고 메시지를 출력
cd : 대표적인 셸 내장 명령
file cd : 내장명령이므로 파일을 확인할 수 없다고 메시지 출력
🔸echo 명령 : 화면에 한 줄의 문자열을 출력
echo [-n] [문자열 또는 변수]-n : 마지막에 줄바꿈을 하지 않음echo linuxecho "linux ubuntu"🔸printf 명령 : c언어의 printf와 동일
printf [형식] [인수]printf "text\n"printf "%d\n" 100🔸* : 임의의 문자열을 나타내는 특수문자
ls * : 현재 디렉토리의 모든 파일과 서브 디렉토리를 나열, 서브디렉토리의 내용도 출력한다cp * /tmp : 현재 디렉토리의 모든 내용을 /tmp 디렉토리 아래로 복사🔸? : 1글자에 해당
ls t?.txt : t로 시작하는 두 글자의 텍스트 파일만 조회🔸[] : 여러 문자 중 하나
ls -l tmp[135].txt : tmp1.txt , tmp3.txt, tmp5.txt 만 조회ls -l tmp[1-3].txt : tmp1.txt , tmp2.txt, tmp3.txt 만 조회ls [0-9] * : 숫자로 시작하는 모든 파일 목록 조회ls [a-zA-Z가-힣]* : 문자로 시작하는 파일 목록 조회🔸~ : 현재 사용자의 홈 디렉토리
🔸- : 현재 디렉토리로 이동하기 직전의 디렉토리
🔸; : 연결된 명령을 왼쪽부터 차례대로 실행
date ; ls ; pwd
🔸| : 앞의 명령의 결과를 뒤로 전달
ls -al /| more : ls -al /의 결과인 루트 디렉토리에 모든 내용을 more에 전달해서 화면단위로 출력🔸' ' : 모든 특수문자를 일반 문자로 간주
🔸" " : $ ,` , \를 제외한 특수문자를 일반문자로 간주

🔸` ` : 감싸인 문자열을 명령어로 해석
echo "Today is `date`" 
🔸\ : 특수문자의 효과를 없에주는 역할
ls t\* : t*이라는 파일의 내용을 조회리눅스에서 셸이 작업을 수행하는데 필요한 정보를 받아들이는 장치를 표준 입력 장치라고 하고, 실행결과를 내보내는 장치를 표준 출력 장치라고 한다. 기본적으로 표준 입력 장치를 키보드로 설정되어 있고, 표준 출력 및 표준 오류장치는 모니터로 설정되어 있다

리눅스는 장치도 파일로 관리하므로 셸은 작업 중 필요한 파일에 일련번호를 붙여서 관리하고 이를 File Discriptor 라고 한다. 표준 입출력장치도 파일로 관리되기 때문에 File Discriptor가 부여되어 있다.

표준 입출력을 파일로 변경하는 것을 redirection이라고 한다.
🔸출력 redirection - 내용 덮어쓰기
> , 1> : 출력의 방향을 변경하는 명령어로 새로 출력(덮어쓰기)set -o noclobber , 해제 : set +o noclobber ls -l > res
파일이 없으면 만들어주고 파일이 있으면 기존 내용이 없어지고 명령의 수행 결과로 대체됨.
🔸출력 redirection - 내용 변경없이 추가
>> : 출력의 방향을 변경하는 명령어로 파일에 내용을 추가ls -l >> res
🔸 에러 redirection
2> : 표준 오류 메시지를 파일에 저장
정상적으로 명령이 수행되면 내용을 기록하지 않는다.
사용 예:
ls out1 2> ls.err

🔸표준 출력과 오류를 한꺼번에 redirection
명령 > 표준출력파일경로 2> 에러출력파일경로
사용 예:
ls /abc > ls.out 2> ls.err : 에러인 경우
cat ls.err : 에러메시지 출력
사용 예:
ls / > ls.out 2> ls.err : 정상인 경우
cat ls.out : 정상 출력
🔸오류메시지 버리기
/dev/null 이라는 특수파일로 내용을 출력
ls /abc 2> /dev/null : 원래 에러메시지가 보이지만 이 명령어를 사용하면 에러메시지가 안보인다🔸파일 1개에 오류메시지와 정상적인 출력을 동시에 수행
명령어 > 표준출력경로 2>&1
🔸 입력 redirection
< , 0< : 표준입력을 바꾸는 기능tr a-z A-Z < today.txt🔸 Shell 변수
현재의 셸에서만 사용 할 수 있는 변수
🔸 환경 변수
모든 셸에서 사용 할 수 있는 변수
HISTSIZE : 히스토리 저장 크기
PATH : 명령을 탐색할 경로
HOME : 사용자의 홈 디렉토리 경로
PWD : 작업 디렉토리의 절대 경로
LANG : 사용하는 언어
SHELL : 로그인 셸
LOGNAME : 사용자 계정 이름
env : 환경 변수 전부 출력set : 모든 변수와 함수를 출력🔸 셸 변수 정의
변수명=문자열

만약 SOME = test 처럼 공백이 들어가면 에러가 발생한다

echo $변수

set | grep 변수명 : 셸 변수와 환경 변수 모두 조회하므로 조회가 됩니다

env | grep 변수명 : 환경 변수만 조회하므로 현재는 조회되지 않습니다.

🔸 환경 변수 정의
export [옵션] [셸변수] : 셸 변수 -> 환경 변수

🔸 환경 변수를 셸 변수로 변환
export -n 변수명 : 환경 변수 -> 셸 변수

🔸 변수 해제
unset 변수
