본문 바로가기
카테고리 없음

리눅스 개념 정리 — echo와 cat의 차이, 그리고 grep 필터링의 원리

by Lsung 2026. 8. 13.

1. 표준 입출력(Standard I/O)이란?

  • 표준 입출력 지시자입력이 있고 출력이 있는 대상에 대해서만 적용되는 개념.
  • 팩스로 문서를 보내는 것처럼 "입력을 받아서 → 출력으로 내보내는" 구조를 가진 명령어에서만 쓰이는 개념이며, 대표적으로 cat, echo 같은 명령어들이 이 개념을 많이 활용함.

 


2. cat과 echo의 근본적인 차이

cat의 정의

  • 파일의 내용을 입력(Input)으로 읽어서, 표준 출력(Standard Output)으로 출력하는 명령어.
  • 핵심은 "파일" 단위로 움직인다는 점 — 이미 존재하는 파일을 읽어서 그 내용을 화면에 뿌려주는 역할.

echo의 정의

  • echo는 파일 입출력이 아니라 변수나 문자열을 출력하는 명령어.
  • 여기서 **변수란 "값을 저장하기 위한 공간"**을 뜻함.
  • 파일을 지정하지 않으면 자동으로 모니터(CRT)에 출력되며, 유닉스에서는 모니터도 하나의 "파일"로 간주함. 즉, 유닉스 안에서는 입력·출력에 관여하는 모든 대상이 "파일"로 취급된다는 철학이 깔려 있음.

한 줄 비교

구분catecho
다루는 대상 이미 존재하는 파일 문자열/변수
동작 방식 파일 → 읽어서 → 출력 문자열/변수 → 출력 (파일 생성은 부수 효과일 뿐)

 


3. (곁가지) "파일"과 "디렉토리"를 엄밀히 정의하기 어려운 이유

  • 강의 중 "파일이 뭐냐", "디렉토리가 뭐냐"를 엄밀히 정의하려 하면 오히려 설명이 매우 어려워진다는 이야기가 나옴.
  • 비유: 중력에 대해 완벽히 정리된 이론은 아직 없고 "질량과 가까워지면 무거워진다" 정도로만 일상적으로 이해하는 것처럼, 파일·디렉토리도 이미 일상적으로 알고 쓰고 있는 개념이라는 것.
  • 엄밀한 정의는 **OS론(운영체제 이론)**이라는 학문에서 다루며, 이 부분은 수업 후 별도로 찾아보기로 함.

 


4. 실습: echo로 만든 문자열과 rm의 관계

실습 로그

Code
[root@linux181 ~]# echo 1.txt > b.txt
[root@linux181 ~]# cat b.txt
1.txt
[root@linux181 ~]# cat 1.txt
cat: 1.txt: 그런 파일이나 디렉터리가 없습니다
[root@linux181 ~]# echo sese > 1.txt
[root@linux181 ~]# cat 1.txt
sese
[root@linux181 ~]# cat b.txt
1.txt
[root@linux181 ~]# rm *.txt
rm: remove 일반 파일 '1.txt'? yes
rm: remove 일반 파일 'b.txt'? no
[root@linux181 ~]# cat b.txt
1.txt
 

단계별 해석

  1. echo 1.txt > b.txt → b.txt라는 파일 안에 "1.txt"라는 문자열을 써넣음 (이 시점에 1.txt는 실제 파일이 아니라 그냥 텍스트일 뿐).
  2. cat b.txt → b.txt 안의 내용인 **문자열 "1.txt"**가 출력됨.
  3. cat 1.txt → 아직 1.txt라는 실제 파일이 없으므로 에러 발생.
  4. echo sese > 1.txt → 이번엔 진짜로 1.txt 파일을 새로 생성하고, 그 안에 "sese"를 넣음.
  5. rm *.txt 실행 시 1.txt는 삭제(yes), **b.txt는 삭제 거부(no)**로 응답.
  6. 삭제 후에도 cat b.txt를 하면 여전히 "1.txt"라는 문자열이 출력됨.

결론

  • b.txt 안에 들어있는 "1.txt"라는 텍스트는 **단순한 문자열(데이터)**일 뿐, 실제 파일 시스템상의 "1.txt 파일"과는 무관함.
  • rm이 지우는 것은 실제 파일 시스템의 개체이지, 파일 내용 속에 적힌 텍스트가 아니라는 것을 실습으로 확인함.
  • echo가 파일을 만들어내는 것은 어디까지나 부수적인 결과이며, echo의 본질은 변수나 문자열을 출력하는 것임.

 


5. 실습: truncate로 파일 크기를 0으로 만들기

  • ls -al 결과에서 b.txt의 크기가 6바이트로 표시되어 있음을 확인.
  • truncate -s 0 b.txt 명령어로 파일 크기를 0바이트로 초기화.
  • 이후 cat b.txt를 실행하면 아무 내용도 출력되지 않음.
  • 이를 통해 확인한 사실: 파일 내부의 내용은 지워지지만, 파일 자체(파일이라는 객체)는 그대로 유지된다는 것.

이어서 다시 내용 채워넣기

  • 크기를 0으로 만든 직후, 같은 b.txt에 echo lololo > b.txt처럼 문자열을 다시 써넣으면 → cat b.txt로 "lololo"가 정상 출력됨.
  • ls -al | grep으로 확인해보면:
    • grep lololo(파일 안 내용 문자열)로 검색했을 때는 원하는 결과가 나오지 않았고,
    • grep b.txt(파일 목록 자체에서 파일명 검색)로 검색하니 b.txt 항목이 빨간 글씨로 강조 표시되고, 늘어난 파일 크기도 함께 확인됨.

이 실습에서 얻은 결론

  • echo의 본질은 파일에 대해 환경변수나 입력 문자열을 출력하는 것이며, 파일 생성/크기 변화는 그 결과로 따라오는 부수적 현상.
  • grep 필터링은 "파일 자체를 검색하는 것"이 아니라, 명령어 실행 결과로 나타나는 출력 문자열(예: ls -al의 목록) 중에서 원하는 단어가 포함된 줄을 찾아주는 것으로 이해하는 것이 정확함.

 


6. 추가 실습 — echo와 grep 조합의 한계 확인

  • echo로 1.txt 파일에 "love dive"라는 문자열을 넣고, grep으로 원하는 문자열을 검색하는 실습을 진행함.
  • 다만 이 실습에서는 echo 명령어 자체가 한 줄(한 문자열)만 입력 가능하다는 특성 때문에, 여러 줄을 입력했을 때의 출력값 차이를 비교하기는 어려웠음.
  • 이 부분은 추후에 다시 여러 줄 입력 상황을 만들어 비교해보는 것으로 남겨둠 (복습 예정 항목, 0626 18:37 작성 기준).