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

리눅스 실습 정리 — cat vs echo, 파일/디렉토리 개념, grep

by Lsung 2026. 8. 13.

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

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

 


2. cat vs echo — 근본적인 차이

cat의 정의

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

echo의 정의

  • 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
코드 접기 15줄

단계별 해석

  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)**로 응답함 → 즉, 사용자가 1.txt만 지우고 b.txt는 남기기로 선택한 상황.
  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 명령어 자체가 한 줄(한 문자열)만 입력 가능하다는 특성 때문에, 여러 줄을 입력했을 때의 출력값 차이를 비교하기는 어려웠음.
  • 이 부분은 추후에 다시 여러 줄 입력 상황을 만들어 비교해보는 것으로 남겨둠 (복습 예정 항목).