리다이렉션 파이프?
데이터 스트림(Data Stream)
[입력] input stream
--------------------------------------->
사람 <---------> 운영체제 <---------> 컴퓨터
<---------------------------------------
[출력] output stream
1. 표준 입력 : standard input stream , 0
2. 표준 출력 : standard output stream , 1
3. 표준 에러 : standard error stream , 2
**** 파일 디스크립터 (fd) => 리눅스에선 모든 장치를 파일로 인식. (입력도 출력도 파일로!)
리다이렉션
원래 출력은 사람이 컴퓨터에게 시킴!
만약 [출력] ----> test_file 같은 파일로 이동시킨다면? 파일에 명령어의 결과가 저장됨.
" > " 꺾새로 데이터 흐름 바꿀 수 있음.
위처럼 pwd는 쉘에 결과를 나타냄.
하지만 파일에 > 로 결과를 보내면? 새로운 파일을 만들어서 저장됨.
요렇게
이번엔 id를 보내볼까?
그런데 뭔가 이상함!
pwd 결과가 사라지고 id 결과만 남아있다!!
리다이렉션은 기존 내용을 싹 다 지워버림!!!!
만약 기존 내용을 지우지 않고 추가하고 싶으면???
요렇게 꺾새를 두개 " >> " 넣으면 추가 가능함!
여기서 중요한거
*Redirection
id > red_test == id 1> red_test (출력 스트림이 숨겨져있었다!)
만약 id 2> red_test ???
칼리 계정은 권한이 없어서 원래는 에러메세지 ㅈㄴ 많이떠서 확인불가.
하지만 에러메세지를 임시파일에 리다이렉션하면? == " 2> /tmp/errorMsg "
===>>> 개꿀!! 원하는 결과만 찾을 수 있다!
/tmp/errorMsg 를 확인하면
에러 메세지가 저장 되어있는걸 확인가능!
하지만 여기서 파일을 안만들고 ==> 너네 쓰레기통으로 가! 하려면?
/dev/null ==>> 쓰레기통!! (리눅스의 쓰레기통 like.블랙홀)
=> 에러메세지 걸러내면서 저장 안할 때 자주 씀.
요렇게 리다이렉션은 에러메세지를 걸러낼때 자주 쓰임.
+ 해킹 공부할 때 스크립트를 실행하거나, nmap(스캔)을 실행할때도 쓰임.
==> ***명령어의 결과를 파일로 저장하고 싶을때 !!! 정말 많이 쓰임. *** 굉장히 많이쓰임!! 계속 강조해도 모자름.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
[참고] # find [경로] [표현식] ==> 표현식이 포함된 파일을 해당경로에서 모두 찾기!
# 현재 디렉토리에서 test가 포함되는 파일 찾기
find . -name "*test*"
# 현재 디렉토리에서 .txt 확장자 모두 찾기
find . -name "*.txt"
# 현재 디렉토리에서 .txt 확장자 파일 검색 후 모두 삭제
find . -name "*.txt" -delete
# 현재 디렉토리에서 test로 시작되는 파일 찾기
find . -name "test*"
# 현재 디렉토리에서 test로 끝나는 파일 찾기
find . -name "*test"
=> 요렇게 확장자나 별표로 파일을 찾기도함.
요렇게 우리가 실습하면서 뒤에 " _test "를 붙인 파일을 찾아낸 모습.
근데 다른 것도 찾아버렸네;;
-type [f, d] 로 파일, 디렉토리 타입만 검색할 수도 있고,
-user [N, Name] 사용자에게 속한 파일을 찾을 수도 있다.
-delete 옵션으로 파일을 제거할 수도 있다.
나는 이걸 활용해서
# find /root -name "*_test" -user 0
내가 실습할 때 만든 파일을 찾아냈고.
다 지워내려했지만~
요렇게 폴더 안에 파일이 있으면 안지워진다 오호.
그래서 뭔지 확인하고
여기서 폴더를 수동으로 지우려했지만
안되네.. 안에 파일있어어 안된다네요.
그래도 강제로 삭제하는 옵션 -r . (위험한 명령어)
-r (-recrusive) 재귀적인 이라는 뜻으로
지정한 디렉토리 내부에 파일이 있으면 모두 제거 후 디렉토리 제거.
만약 디렉토리 내부에 디렉토리가 있으면 => 그 디렉토리를 가져와 디렉토리 유무 확인 후 파일 제거.
... 계속 디렉토리가 있으면 디렉토리를 가져와 내부 디렉토리 확인 및 파일 제거를 계속함.
==> 결국 지정한 디렉토리 내부의 모든 폴더 및 파일을 제거! => 그래서 재귀적인 이라는 뜻인듯.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
파이프?
=> 빨때? 통로? ==> 어떤 물질을 이동시킬 때 사용함.
컴퓨터도 동일!
*PIPE
프로세스와 프로세스를 연결.
*** 어떤 프로세스의 출력을 다른 프로세스의 입력으로 넣어주고 싶을 때!!!!!!!!
# grep [찾을 패턴] [수색할 파일/디렉토리]
요렇게 # grep 명령어는 특정 패턴을 찾을 수 있다.
grep은 언제 활용하냐?
==> 앞에 있는 명령어의 결과에서 특정 단어를 찾을 때! 사용함.
" | " 기호를 활용해서 프로세스로 넘김.
==> " | " 앞에 있는 명령어의 결과를 화면에 출력하지마. 대산 그 결과를 뒤에 프로세스로 넘겨라!
요렇게 넘길 수 있다.
요렇게 ifconfig의 결과 중 inet이 들어간 부분만 찾아낼 수 있다.
즉 [A] | [B]
==> [A]프로세스의 결과를 화면(쉘)에 출력하지 않고 [B]프로세스로 보내서(입력해서) 그 결과를 출력하라!
요렇게 /bin 내부의 파일들 중 "find"가 포함된 파일을 찾을 수도 있음.
명령어의 결과를 다른 프로세스로 보낼 때 주로 사용!
파이프를 사용한 명령어 되게 많이쓴다.
'Linux > 리눅스 기초' 카테고리의 다른 글
리눅스 기초 ... 24.09.14 공부 임시저장 (0) | 2024.09.16 |
---|---|
운영체제(OS) ... 24/09/13 공부 임시저장 (0) | 2024.09.16 |