파일 디스크립터 / 파일 기술자 (File Discriptor, FD)
- 리눅스의 모든 파일을 관리하는 방식
명령어 실행 ( 컴퓨터에게 작업을 요청 -> 프로세스 생성 )
- 실제 프로그램을 실행시키는 작업
- 이러한 프로그램은 파일로 존재
- 파일을 실행 시키기위해서는 먼저 파일을 열어야 한다.
- 파일이 열리면 커널이 해당 프로세스가 동작하는데 필요한장치나 파일을 번호를 붙이며 관리하고, 이러한 번호를 파일 디스크립터 테이블에 저장
- 자주 사용하는 장치들은 미리 번호가 예약되어 있어서 아래와 같이 표현된다.
파일 디스크립터 테이블
장치 FD번호
표준 입력장치 (키보드) 0 ( stdin ) - 명령어의 표준 입력
표준 출력장치 (모니터) 1 ( stdout ) - 명령어의 표준 출력
표준 에러장치 (모니터) 2 ( stderr ) - 명령어의 표준 오류
리다이렉션 ( Redirection )
기본적으로 명령어의 결과는 표준 출력 방식인 모니터에 출력이 됩니다.
하지만 리다이렉션을 이용하면 명령의 출력을 변경할 수 있습니다.
리다이렉션을 이용하여 파일에 기록할 수 있습니다.
기존 파일의 내용을 삭제하고 새로 결과를 저장할 때는 >를,
기존 파일의 내용 뒤에 결과를 추가할 때는 >>를 사용합니다.
< / << : 입력 방향 재지정
> / >> : 출력 방향 재지정
> : 덮어씀
>> : 추가됨
① 입력 리다이렉션
#[명령어] < [파일]
- 명령어의 입력(0)으로 파일을 사용
ex) #cat < /etc/resolv.conf == cat /etc/resolv.conf와 동일
ex) #nl < /etc/resolv.conf == nl /etc/resolv.conf와 동일
ex) #head -3 < /etc/passwd == head -3 < /etc/passwd와 동일
② 출력 리다이렉션**
#[명령어] 1> [파일]
화면 (표준 출력장치)에 출력되는 결과를 파일의 내용으로 사용하는 방법
*표준 출력을 의미하는 fd"1"은 생략 가능합니다.
#ls -l > result
: ">기호를 통해 result라는 파일로 리다이렉션하라" 라는 뜻입니다.
그리고 리다이렉션이 잘 되었는지 확인을 해봅니다.
※ 파일이 이미 존재하는 경우 덮어쓰기 때문에, 지정한 파일과 동일한 이름을 가진 파일이 있는지 먼저 확인한 후에 사용을 해야 합니다.
※B ash 쉘 덮어쓰기 기능
#set -o noclobber
: 덮어쓰기 방지 기능 활성화
→ 작업을 할 때 이 기능을 사용하면 실수를 막을 수 있습니다.
③ 추가 리다이렉션
#[명령어] >> [파일]
- 표준출력장치(1)에 결과를 파일에 추가
④ 오류 리다이렉션
#[명령어]2> [파일]
오류 출력은
예를들면, Root가 아닌 일반 사용자로 find 명령어를 사용할 때에는 일반 사용자가 접근 할 수 있는 폴더에서만 파일을 찾게 됩니다. 검색 과정 중 Root만이 들어갈 수 있는 폴더에 접촉할 경우 오류 메세지를 내보내게 됩니다.
그럴 경우 이것을 다른 파일로 돌려버리면 오류를 제외한 검색 결과만을 볼 수 있게 되는 것입니다.
/dev/null
- 리눅스 특수 장치 파일로, 해당 파일로 리다이렉션된 내용은 저장이 되지 않는다.
- 항상 null(0)값을 가지는 파일
ex) 파일은 만들어지거나 저장되지 않는다.
파이프 (pipe)
기호 - | (shift + \)
파이프란?
앞 명령어의 결과를 뒤에 나오는 명령어의 입력으로 처리하기 위해 사용하는 방법입니다.
즉, 파이프를 이용하면 명령어를 조합해서 쓸 수 있습니다.
<예제 1> [명령어1] | [명령어2]
→ 명령어 1의 결과가 명령어 2의 입력으로 전달되어 명령어 2의 결과가 출력됩니다.
cat /etc/passwd | grep "root" == grep "root" /etc/passwd
<예제 2> [명령어1] | [명령어2] | [명령어3]
디렉토리 개수 확인하기
ll | grep "^d" | wc -l
* grep "^d" : d로 시작하는 행 (행의 앞글자 d는 directory를 의미)
* ll = ls -l : List 형태로 출력
* wc -l은 행의 개수를 출력
'서버 > Linux' 카테고리의 다른 글
[Linux] 쉘 스크립트 (0) | 2017.09.28 |
---|---|
[Linux] 쉘 환경 변수 (0) | 2017.09.28 |
[Linux] SSH 배너 설정 (0) | 2017.09.21 |
[Linux] vi(visual editor) & vim(vi improved) (0) | 2017.09.19 |
[Linux] 파일 링크 (심볼릭 & 하드) (0) | 2017.09.19 |