IT하는 참새
File Descriptor 본문
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 |