IT하는 참새

File Descriptor 본문

리눅스

File Descriptor

pshot 2018. 9. 19. 23:18

File Descriptor: 파일의 일련번호들을 모아놓은 array


파일이 실행(open())되면 기본적으로 할당되는  

File Descriptor번호가 있는데 0, 1, 2이다


0 = 표준 입력

1 = 표준 출력

2 = 표준 에러


그리고 별일이 없다면 순차적으로 3 4 ~~~ MAX번호까지 생긴다


3 은 그러면 방금실행한 프로세스가 되는것임


File Descriptor에는 번호만 있는것이 아니라


번호 + File Table주소 + 등등 정보들이 있음


File Table주소로 찾아가고, 그곳의 inode주소를 찾아 파일을 참조하는 것



-------------------------------------------------------------------------------------------------------



리다이렉션(Redirection)이란?


- 단순히 입/출력 방향바꾼다고만 알고있었는데.... 더 깊은뜻이 있었다...

- 표준 입/출력의 파일을 다른파일로 대신 지정하여 출력하는 것



출력 리다이렉션

(표준출력은 1번이였지만 다른파일이 1번이 되게하여 출력하는 것)


ex)

ls -l .

 - 현재 디렉토리의 내용을 표준출력스트림에 출력하는 것

 - 당연히 내가보고있는 Terminal에 값이 나옴(왜냐면, 이게 표준출력스트림의 방향이니까)


리다이렉션은 이 방향, 대상을 다른파일로 대신하겠다는 것


ls -l . 1> newfile

(명령어 FD > 파일명)


이렇게하면 Terminal에 나오지않고 newfile에 값이 출력됨

(참고로 표준출력 리다이렉션의 기본 FD값은 1이므로 생략가능)


참고로 리다이렉션 기호는 >, >> 두개 있는데 


> : 파일이 없으면 새로생성하며, 존재하면 덮어씀

>> : 파일이 없으면 새로생성하며, 존재하면 맨끝에 이어서씀



에러 리다이렉션

(표준에러는 2번이였지만 다른파일이 2번이 되게하여 에러출력하는 것)


ex)

ls -l /abc  

 - abc디렉토리가 없다면 에러가 출력됨, Terminal에


하지만 리다이렉션을 통해 파일에 에러가 출력되게 하려면?


ls -l /abc 2> errorfile

(명령어 FD> 파일명)


이렇게하면 에러내용이 errorfile에 정상출력된다

(주의할 점: >방향의 리다이렉션의 FD기본값은 1이므로 에러는 2를 꼭 명시해야함)



그런데, 에러를 굳이 안보고싶다. 여러결과중에서 에러는 빼고 보고싶다 그러면??


리다이렉션의 방향을 내가만든 파일말고 /dev/null로 바꿔버리면 됨

/dev/null은 블랙홀 같은놈이고 막 보내지만 파일로 저장이되지는 않아 안성맞춤


find / -perm -4000 -exec ls -l { } 2> /dev/null \; 


에러는 버리고 SetUID가 걸린 파일들을 루트밑에서 찾아줌



입력 리다이렉션

(표준입력은 0번이였지만 다른파일이 0번이 되게하여 입력하게하는 것)


ex)

cat file

 - file의 내용을 출력한다

 - 이거는 표준입력을 파일로 리다이렉션해서 사용하고 있던 코드이다(이제알음)

 - cat < file과 같고     cat 0< file과 같다


cat은 표준입력에서 입력을 받아 화면에 출력하는 명령어이므로

단독적으로 사용하면 에러가 발생하지않고 력을 기다리는 상태가됨


이 기능을 이용하여 cat으로 파일생성도 가능


'리눅스' 카테고리의 다른 글

alias 명령어  (0) 2018.09.19
shell의 변수  (0) 2018.09.19
shell의 기본개념  (0) 2018.09.19
vi 자주 사용되는 명령어  (0) 2018.09.19
ls 명령어 팁  (0) 2018.09.18