05. 리눅스 쉘과 명령어 사용
- 쉘(Shell)
- 쉘은 사용자와 운영체제 사이에 창구 역할을 하는 소프트웨어
- 명령어 처리기(command processor)
- 사용자로부터 명령어를 입력받아 이를 처리
- 쉘의 종류
- 본 쉘 : /bin/sh
- 콘 쉘 : /bin/ksh
- C 쉘 : /bin/csh
- Bash : /bin/bash
- tcsh : /bin/tcsh
- 로그인시 처음 실행되는 쉘 지정 : /etc/passwd
- root:x:0:0:root:/root:/bin/bash
- 쉘의 기능
- 명령어 처리 :사용자가 입력한 명령을 해석하고 해당 프로그램 실행
- 시작 파일 : 사용자별 사용환경 설정
- 스크립트 : 프로그래밍
- 환경변수
- 사용자 정의 환경 변수 만들기
- 변수명=값 : 사용자 변수 설정
- export 변수명 : 환경변수로 등록
- =의 양쪽에 공백이 있으면 안됨
- 보기
- echo $변수명
- env
- 사용자 정의 환경 변수 제거
- unset $변수명
- 사용자 정의 환경 변수 만들기
- 쉘의 시작 파일
- 시작 파일
- 쉘 실행시 자동으로 실행
- 사용자 환경 설정을 위해 사용
- 환경설정을 위해 환경변수에 값 지정
- 시스템 시작 파일
- 모든 사용자에게 공통으로 설정
- 관리자가 지정
- 예) 환영 메시지 출력
- 사용자 시작 파일
- 사용자가 지정
- 시작 파일 정리
- 시작파일 바로 적용
- . 시작파일이름 : . 으로 실행
- 예) . .profile
- 시작 파일
- 전면 처리 vs 후면처리(foreground processing vs background processing)
- 전면 처리 : 일반적인 실행
- 후면 처리 : 명령어 뒤에 &를 붙여 실행
- 후면처리 확인 : jobs [%작업번호]
- jobs
- jobs %1
- 후면처리를 전면처리로 전환 : fg [%작업번호]
- fg %1
-
12345678910111213whan@Linux01:~$ (sleep 100; echo done) &[2] 16019whan@Linux01:~$ find . -name test.c -print &[3] 16021whan@Linux01:~$ jobs[1] 실행중 ( sleep 100; echo done ) &[2]- 실행중 ( sleep 100; echo done ) &[3]+ 완료 find . -name test.c -printwhan@Linux01:~$ jobs %1[1]- 실행중 ( sleep 100; echo done ) &whan@Linux01:~$ fg %1( sleep 100; echo done )done
- 입출력 재지정(Input/Output Redirection)
- 출력 재지정( > ) : 명령어 > 파일
- 사용 예)
- ls -al > list.txt
- cat /etc/passwd > pwlist.txt
- head /etc/passwd > pwhead.txt
- 간단한 파일 만들기
- cat > sample : 실행 후 문자열 입력 후 Ctrl+D
- 두 개의 파일 붙여 1개 파일 만들기
- cat /etc/passwd /etc/group > pwgr.txt
- 사용 예)
- 출력 추가 ( >> ) : 명령어 >> 파일
- 사용 예)
- date > sample
- ls -al >> sample
- 사용 예)
- 입력 재지정( < ) : 명령어 < 파일
- wc /etc/passwd
- wc < /etc/passwd
- 오류 재지정 : 명령어 2> 파일
- 표준 오류가 발생하면 그 결과를 모니터 대신 파일에 저장
- 2와 > 사이에 공백이 있으면 안됨
-
12345678910111213141516whan@Linux01:~$ ls -l 2> err.txt합계 44-rw-rw-r-- 1 whan whan 0 10월 3 11:05 err.txt-rw-r--r-- 1 whan whan 8980 9월 20 08:36 examples.desktopdrwxr-xr-x 2 whan whan 4096 9월 20 08:53 공개drwxr-xr-x 2 whan whan 4096 9월 20 08:53 다운로드drwxr-xr-x 2 whan whan 4096 9월 20 08:53 문서drwxr-xr-x 2 whan whan 4096 9월 20 08:53 바탕화면drwxr-xr-x 2 whan whan 4096 9월 20 08:53 비디오drwxr-xr-x 2 whan whan 4096 9월 20 08:53 사진drwxr-xr-x 2 whan whan 4096 9월 20 08:53 음악drwxr-xr-x 2 whan whan 4096 9월 20 08:53 템플릿whan@Linux01:~$ cat err.txtwhan@Linux01:~$ ls -l /tttt 2> err.txtwhan@Linux01:~$ cat err.txtls: '/tttt'에 접근할 수 없습니다: 그런 파일이나 디렉터리가 없습니다
- 파이프 : 명령어1 | 명령어2
1234567891011121314whan@Linux01:~$ ls -l /bin | grep sh-rwxr-xr-x 1 root root 1113504 4월 5 03:30 bash-rwxr-xr-x 1 root root 170456 8월 28 2017 bsd-cshlrwxrwxrwx 1 root root 21 10월 3 07:58 csh -> /etc/alternatives/csh-rwxr-xr-x 1 root root 121432 1월 25 2018 dashlrwxrwxrwx 1 root root 21 10월 3 07:59 ksh -> /etc/alternatives/ksh-rwxr-xr-x 1 root root 1588720 7월 5 2017 ksh93lrwxrwxrwx 1 root root 4 9월 20 08:31 rbash -> bashlrwxrwxrwx 1 root root 5 7월 5 2017 rksh -> ksh93lrwxrwxrwx 1 root root 5 7월 5 2017 rksh93 -> ksh93lrwxrwxrwx 1 root root 4 9월 20 08:31 sh -> dashlrwxrwxrwx 1 root root 4 9월 20 08:31 sh.distrib -> dashlrwxrwxrwx 1 root root 7 9월 20 08:31 static-sh -> busybox-rwxr-xr-x 1 root root 439544 2월 9 2017 tcsh - 요약
- 출력 재지정( > ) : 명령어 > 파일
- 여러 개 명령어 사용
- 명령어 열 : 명령어1; … ; 명령어n
- 나열된 명령어들을 순차적으로 실행
- date; pwd; ls
- 명령어 그룹 : (명령어1; … ; 명령어n)
- 나열된 명령어들을 하나의 그룹으로 묶은 뒤 순차적으로 실행
- (date; pwd; ls)
- 차이점 확인
- date; pwd; ls > out1.txt
- (date; pwd; ls) > out2.txt
-
123456789101112131415161718192021whan@Linux01:~$ date; pwd; ls > out1.txt2018. 10. 03. (수) 11:22:26 KST/home/whanwhan@Linux01:~$ (date; pwd; ls) > out2.txtwhan@Linux01:~$ cat out1.txterr.txtexamples.desktopout1.txt공개다운로드...whan@Linux01:~$ cat out2.txt2018. 10. 03. (수) 11:22:37 KST/home/whanerr.txtexamples.desktopout1.txtout2.txt공개다운로드...
- 조건 명령어 열
- 명령어1 && 명령어2 : 명령어1이 실행되면 명령어2 실행
- 명령어1 || 명령어2 : 명령어1이 실행 안되면 명령어2 실행
- 명령어 열 : 명령어1; … ; 명령어n
- 파일이름 대치
- `로 명령어를 포함시키면 명령어 실행을 먼저 수행
- 작은 따옴표(‘), 큰 따옴표(“) : 문자열로 인식하여 그대로 출력
-
12345678910111213whan@Linux01:~$ echo 현재시간명령어는 date이고 실행결과는 date이다현재시간명령어는 date이고 실행결과는 date이다whan@Linux01:~$ echo 현재시간명령어는 date이고 실행결과는 `date`이다현재시간명령어는 date이고 실행결과는 2018. 10. 03. (수) 11:32:14 KST이다whan@Linux01:~$ myname=나가수whan@Linux01:~$ echo 내이름은 $myname이고 현재시간은 date다내이름은 나가수이고 현재시간은 date다whan@Linux01:~$ echo '내이름은 $myname이고 현재시간은 date다'내이름은 $myname이고 현재시간은 date다whan@Linux01:~$ echo "내이름은 $myname이고 현재시간은 date다"내이름은 나가수이고 현재시간은 date다whan@Linux01:~$ echo "내이름은 $myname이고 현재시간은 `date`다"내이름은 나가수이고 현재시간은 2018. 10. 03. (수) 11:34:34 KST다