리다이렉션
-표준입력과 출력의 방향을 재지정하는 방법
표준입력장치 fd/0 (키보드) stdin
명령어 입력(키보드/표준출력)
표준출력장치 fd/1 (모니터) stdout
명령어의 결과 (모니터/표준출력)
표준에러장치 fd/2 (모니터) stderr
명령어의 에러 (모니터/표준에러)
*fd(File Discriptor)
-리눅스의 일반 파일과 장치 파일을 포함한 모든 파일을 관리하는 방식이다.
-파일을 열거나 실행할때 혹은 명령어를 입력하게 되면 커널이 프로세스를
실행시켜 기본적으로 사용하는 장치들과 추가로 실행할 프로세스가 있다면,
이러한 정보를 파일 디스크립터 테이블이라는 곳에 저장한다.
이때, 파일 디스크립터 테이블에 가장 기본적으로 사용하는 장치에 대해서는
숫자를 부여하고 관리하며, 비어있는 0번부터 순차적으로 지정하고 자주
사용하는 장치 번호는 미리 지정되어 예약되어 있다.
출력 리다이렉션
해당 내용을 가진 파일 생성 및 덮어쓰기
# [명령어] 1> [파일이름] (1생략가능)
리다이렉션을 이용해 date 명령어의 결과를 내용으로 가진 alpha라는 파일을 생성
cat명령어를 이용해 확인한다.
vi 실습을 위해 /etc/profile을 복사해 놓은 vitest에 ll명령어의 결과를 리다이렉션을 이용해 넣었다.
확인해 보니 덮어쓰기가 되어 ll의 결과값만 들어있다.
*덮어쓰기 방지를 위해 bash 쉘에서 파일 덮어쓰기 방지를 설정해 보자.
# set -o noclobber 덮어쓰기 방지 기능 on
# set +o noclobber 덮어쓰기 방지 기능 off
덮어쓰기 방지 기능을 활성화 시켜두니 덮어쓰기를 할 수 없다는 메세지가 출력되는것을 볼 수있다.
추가 리다이렉션
기존에 내용의 있다면 덮어쓰기 되지 않고 밑에 내용이 추가된다.
# [명령어] >> [파일]
alpha에 date명령어 값을 집어넣은 후 anaconda-ks.cfg 첫 5줄을 추가 리다이렉션을 이용해 alpha에 값을 넣었다.
기존의 date명령어 값 밑에 5줄이 추가된 것을 확인 할 수 있다.
오류 리다이렉션
에러 메세지를 넣는다.
# [명령어] 2> [파일]
위와 같이 에러 메세지를 파일에 넣을 수 있다.
정상적인 명령어를 입력하여 오류 메세지가 출력되지 않을 경우,
위와 같이 내용이 없는 메세지를 넣는다.
**오류 메세지 출력하지 않기
/dev/null 리눅스 특수 파일로 파일의 내용을 지우거나 오류메세지를 해당 피일로 리다이렉션 하여 출력하지 않을 수 있다.(블랙홀)
# [명령어] 2> /dev/null
값들이 모두 사라진 것을 확인할 수 있다.
/dev/null로 오류 메세지들을 보내면 오류메세지가 출력되지 않는다.
입력 리다이렉션
# [명령어] < [파일이름] (=[명령어] [옵션] [인자])
입력 리다이렉션은 위에 보이듯이 일반 명령어 실행과 결과값이 같다.
파이프
-표준 입출력이 아닌 프로세스간에 실행되는 입출력을 다음 프로세스에게 전달하는 방식
-기호 | (Shift + \(원화모양))
# [명령어1] [명령어2] ... [명령어n]
passwd의 내용중 맨위 5줄 중 root라는 문자열을 검색한다.
위와같이 명령어의 결과값을 다음 명령어에 넘기는 것을 확인할 수 있다.
응용
최상위디렉토리를 리스트로 뽑아 d로 시작하는 것들 중 줄의 수를 센다.
정규표현식^를 사용해 d로 시작하는 디렉토리를 뽑아 줄의 수를 셈으로서 디렉토리의 수를 알 수 있다.
/etc디렉토리를 크기순으로 리스트로 뽑아 -로 시작나는 것들을 뽑고 첫 줄만 출력한다.
크기순으로 나열된 리스트 중 -로 시작하는 파일을 뽑아 첫줄에 있는 가장 큰 파일을 알 수 있다.
환경변수 및 초기화 파일
변수의 종류
- 지역 환경 변수(쉘 변수)
- 전역 환경 변수
리눅스 사용자가 사용하는 shell의 기능이나 환경을 구성을 위해 미리 정의되어있는 변수
-변수 앞에 $표시를 붙여 변수임을 나타낸다.
$PATH 실행 파일을 찾을 경로
$HOME 현재 로그인한 사용자의 홈 디렉토리가 저장되는 변수
$LANG 쉘에서 사용하는 언어
$SHELL 로그인시 사용하는 쉘 종류
$PS1 프롬프트 구조가 정의되어 있는 변수
$HISTSIZE 히스토리에 저장되는 명령어 갯수
$HISTFILE 히스토리 파일 경로
$HOSTNAME 호스트의 이름
환경변수는 사용자 초기화 파일에 의해 각 사용자에 맞는 설정이 대입되어 있다.
변수 확인 방법
# echo [변수명]
지역 환경 변수
-현재 사용하는 쉘에서만 적용되는 변수
변수 선언 및 초기화
# [변수명]=[값] (C언어의 대입연산자와 비슷하다.)
변수 해제
# unset [변수명]
지역 환경 변수 확인
# set
test라는 값을 가진 LOCAL 변수 설정 후 확인한다.
/bin/bash로 새로운 bash쉘을 실행 후 LOCAL변수를 확인한다.
LOCAL쉘은 지역 환경 변수이기 때문에 다른 쉘에는 적용되지 않는다.
열었던 bash쉘을 닫고 LOCAL변수 확인 후 해제하고 다시 확인해 보면 없는 것을 알 수 있다.
**프롬프트 구조 바꿔보기
PS1은 프롬프트의 변수이므로 echo함수를 이용하여 순서를 바꿔보았다.
제대로 안했다고 혼났지만 새로운 bash쉘을 열어본다.
새로운 쉘에서는 적용이 안되었음을 확인 후 다시 돌아온다.
이제 제대로 고쳐보자.
**로그인 시 실행되는 파일 순서
1. /etc/profile -> /etc/profile.d/*
-/etc/profile 파일이 실행되면 /etc/profile.d/ 디렉토리내에 있는 모든 스크립트 파일을 실행
-환경 변수와 bash가 수행될 때 실행되는 프로그램을 제어하는 전역적인 시스템 설정과 관련된 파일
2. ~/.bash_profile
- 각 사용자의 홈디렉토리에 위치한 파일
- 환경 변수와 bash가 수행될 때 실행되는 프로그램을 제어하는 지역적인 시스템 설정과 관련된 파일
(지역적인-해당사용자에게만 적용되는 설정)
3. ~/.bash_rc
- 각 사용자의 홈디렉토리에 위치한 파일
- ~.bash_profile에 의해서 실행이되며 ~/.bashrc는 다시 /etc/bashrc를 실행
4. /etc/bashrc
- ~/.bashrc에 의해 실행이 되며 사용자에게 적용할 alias 및 shell 환경설정 값이 되어있는 파일
실행순서 /etc/profile /etc/profile.d/* ~/.bash_profile ~/.bash_rc /etc/bashrc
전역 설정 파일 - 모든 사용자에게 적용할 공통 설정
/etc/prifile
/etc/bashrc
지역 설정 파일 - 해당 사용자에게만 적용할 설정
~/.bash_rc
~/.bash_prifile
전역 환경 변수
-모든 쉘에 적용되는 변수
변수 선언
# export [변수명]=[값]
변수 해제
# unset [변수명]
변수 확인
# env
GLOBAL 전역 변수를 설정 후 확인
새로운 bash쉘 실행 후 확인
전역 변수이기 때문에 새로운 쉘에서도 적용되었음을 알 수 있다.
bash쉘 종료 후 다시 확인
변수 해제 후 확인
'Linux' 카테고리의 다른 글
사용자 계정 관리2(명령어) (0) | 2017.06.06 |
---|---|
사용자 계정 관리1 (파일) (0) | 2017.06.05 |
VI & VIM (0) | 2017.06.03 |
링크파일 (0) | 2017.06.02 |
파일 및 디렉토리 관련 명령어2 (0) | 2017.06.01 |