필요한 명령어는 ctrl+f 키로 찾으면서 봅시다
셸의 사용
셸이란 사용자와 리눅스 커널 사이에서 중재자 역할을 하는 SW
사용자는 셸을 통해 리눅스를 사용
셸의 기능
명령어 해석기 기능
- 사용자와 커널 사이에서 명령을 해석하여 전달하는 해석기(interpreter)와 번역기(translator) 기능
- 또한 셸은 사용자가 입력한 명령이나 파일에서 읽어들인 명령을 해석하고, 적절한 프로그램을 실행한다.
- 로그인 할 경우 실행되는 셸을 로그인 셸이라고 하고 /etc/passwd 파일에 사용자별로 저장 된다
프로그래밍 기능
- 셸은 자체 프로그래밍 기능이 있어서 프로그램 만들기 가능
- 여러 명령을 사용하여 반복적으로 수행하는 작업을 하나의 프로그램으로 만들 수 있는데, 이렇게 작성된 프로그램을 쉘 스크립트라고 한다
사용자 환경 설정 기능
- 셸은 사용자 환경을 설정 할 수 있도록 초기화 파일 기능 제공
- 사용자가 로그인 할 경우, 초기화 파일이 실행되어 사용자 별로 특성에 맞게 추가적인 환경에 세팅 된다
셸의 종류
본셸(sh)
최초의 셸, 현재는 배시 셸 등 다른 셸로 대체
C셸(csh)
셸 스크립트 구문 형식이 C언어와 동일
콘셸(ksh)
본셸과 호환성이 높으나 초기 설치가 안되어 있기 때문에, 별도 설치 후 사용
배시셸(bash)
현재 리눅스의 기본 셸
대시셸(dash)
현재 우분투에서 사용되는 셸, 속도가 빠르고 신뢰성이 높다
#기본 셸 변경하기
$ chsh [옵션] [사용자명]
출력 명령 - echo , printf
$ echo [문자열]
$ echo linux noJam
$ printf [형식] [인수]
$ printf "%d + %d = %d" 10 10 20
특수문자 출력
#특수 문자 * (와일드카드)
$ ls * -> 현재 디렉토리의 모든 파일과 서브파일을 나열
$ cp * /tmp -> 현재 디렉토리의 모든 파일을 /tmp 디렉토리 아래로 복사한다
$ ls -F t* -> t로 시작하는 파일을 모두 출력하고, 파일 형식에 맞는 특수문자를 뒤에 붙인다
#특수 문자 ? 와 []
# ? 는 길이가 1인 임의의 문자
# [] 는 괄호 안에 포함된 문자중 하나
$ ls t?.txt -> t 다음에 임의의 한 문자가 오고 파일의 확장자가 txt 인 모든 파일의 이름을 출력
# 디렉토리를 나타내는 특수문자 ~ 와 -
# ~는 현재 작업중인 디렉토리
# -는 cd 명령으로 현재 디렉토리로 이동하기 직전에 작업하던 디렉토리
$ cp *.txt ~/ch3 -> 확장자가 txt인 모든 파일을 현재 작업중인 홈 디렉토리 아래 tmp 디렉토리로 복사
$ cd - -> 이전 디렉토리로 이동
# 특수 문자 ; 과 | -> 명령과 명령을 연결
# ; 는 연결된 명령을 왼쪽부터 차례로 실행
# | 는 왼쪽 명령의 실행 결과를 오른쪽의 입력으로 전달
$ date ; ls ; pwd -> 왼쪽 명령어부터 실행, 날짜 파일 목록, 현재 위치 출력
$ ls -al /| more -> 루트 디렉토리에 있는 모든 파일의 상세 정보를 한 화면 씩 출력(숨긴파일 포함)
# ""와 ''
# "" 는 셸 변수의 값으로 처리
# '' 는 문자열 그대로 출력
$ echo "$SHELL" -> 현재 셸 타입을 알려줌
$ echo '$SHELL' -> $SHELL을 그대로 출력
# `` (백쿼터) 감싸인 문자열을 명령으로 해석
$ echo `date` -> 날짜 및 시간을 출력
$ echo date -> 문자열 date 출력
# \\ (역슬래쉬) 특수 문자 바로 앞에 사용하여 해당 특수문자의 효과를 없애서 일반 문자 취급
$ echo \\$SHELL -> $SHELL을 문자열로 취급하여 출력
# > , > , >>
$ ls -l > res -> ls -l(긴형식 파일 출력) 결과를 콘솔이 아닌 res 파일에 저장
$ ls -l >> res -> ls -l의 결과를 res 파일의 끝부분에 추가
$ cat < command.txt -> command 파일 안에 있는 명령어를 가져와서 실행
입출력 리다이렉션
셸은 작업중 피요한 파일에 일련번호를 붙여서 관리한다 → 파일 디스크립터
파일 디스크립터 파일 디스크립터 대신 사용하는 이름 정의
0 | stdin | 명령 표준 입력 |
1 | stdout | 명령 표준 출력 |
2 | stderr | 명령 표준 오류 |
출력 리다이렉션 : 명령의 결과 화면 출력을 화면이 아닌 파일로 저장
출력 결과를 저장할 파일이 이미 존재하는 경우 >, >> 특수문자 사용
> : 기존 파일의 내용을 삭제하고 결과를 새로 저장
>> : 기존 파일 내용 뒤에 결과를 추가로 이어붙임
오류 디라이렉션 :
- 명령어 실행 과정에서 셸이 화면에 출력하는 메시지는 두개
- 명령의 정상적인 실행 결과 → 표준 출력
- 오류 메시지 → 표준 오류 → 표준 오류도 기본적으로 화면으로 출력 되므로 표준 출력처럼 리다이렉션 가능
- 표준 출력과 표준 오류 모두 기본 장치가 화면으로 지정 되어 있으므로 같은 것 처럼 보이지만 사실 따로 관리 된다
- 오류 출력을 파일에 저장하는 방법은 아래와 같다
- 명령 2> 파일명
# 명령 2> 파일명 $ ls /abc 2> ls.err $ cat ls.err #표준 출력과 표준 오류 한번에 리다이렉션 $ ls ./abc > ls.out 2> ls.err ->표준 출력의 내용은 ls.out에 저장, 표준 오류는 ls.err에 저장 # 오류 메시지 버리기 (특수 공간 /dev/null) $ ls /abc 2> /dev/null
따로 관리되는 출력, 오류 리다이렉션?
- 표준 출력은 ls.out 에 저장 된다.
- 하지만 오류 메시지는 표준 출력처럼 보이는 것일 뿐, 표준 출력이 아니므로 리다이렉션 X
입력 리다이렉션(파일을 불러와 입력으로 사용)
$ cat < command.txt -> command 파일 안에 있는 명령어를 가져와서 실행
Bash 와 Alias
셸 변수 : 현재 셸에서만 사용가능 (지역변수)
환경 변수 : 현재 셸 뿐만 아니라 서브 셸로도 전달되는 변수(전역 변수)
#변수 출력
$ set -> 셸 변수와 환경 변수 모두 출력
$ env -> 환경 변수 출력
#특정 변수 출력
$ echo $옵션
# 셸 변수 정의하기 (띄어쓰기 주의) 변수명+문자열
$ BABO="I am Babo."
# 환경 변수 정의하기 export
$ export BABO
#환경 변수 검색
$ env | grep BABO -> 환경 변수 중 BABO라는 단어가 포함된 변수가 있는지 확인하여 출력
# 환경 변수를 다시 셸 변수로 변경
$ export -n BABO
# 변수 해제
$ unset BABO
Alias 와 History
Alias = 복잡한 명령을 짧은 별명으로 사용
히스토리 = 앞에서 입력한 명령을 다시 불러서 사용
#Alias -> 띄어쓰기 주의
$ alias 이름= ' 명령'
$ alias println='echo'
#Alias 삭제
$ unalias 앨리어스
#History -> 이전 명령어 불러오기
$ history
-> 위 명령어 입력시 이전에 사용한 명령어들이 인덱스와 함께 출력됨
# 명령어 재사용하기
$ !506 -> 예를들어 506번째 명령어가 alias println='echo' 였으면 다시 실행
$ !! -> 바로 이전 명령어 실행
'Linux' 카테고리의 다른 글
[Linux] 프로세스, 관리 명령, 포그라운드/백그라운드 프로세스의 작업제어, crontab (0) | 2024.12.02 |
---|---|
[Linux] Vi 와 Vi 명령어 (0) | 2024.10.13 |
[Linux] 디렉토리 및 파일 명령어 (1) | 2024.10.12 |
[Linux] Unix와 Linux , GUI 와 CLI, 리눅스 기본 명령어 (0) | 2024.10.12 |