Linux/리눅스 기초

리눅스 기초 ... 24.09.15 공부 임시저장

cheonjaehacker 2024. 9. 16. 08:02

리다이렉션 파이프?

 

데이터 스트림(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"가 포함된 파일을 찾을 수도 있음.

 

명령어의 결과를 다른 프로세스로 보낼 때 주로 사용!

파이프를 사용한 명령어 되게 많이쓴다.