[에스넷시스템 부트캠프] TIL Day5 - 검색 명령어, 시간 정보, Bash, 파일 디스크립터, 파이프, 변수

2025. 5. 25. 15:00·TIL
728x90

1. 검색 명령어

# grep 

: 파일 내에서 특정 패턴을 검색

 

# grep -i [패턴] [파일]

: 대소문자 구분 없이 검색

 

# grep -E `(패턴1|패턴2|...)`

: 동시에 여러개의 패턴을 검색

 

# grep -F [패턴] [파일]

: 특수문자를 포함한 검색

 

# grep -v [패턴]

: 패턴에 해당하는 줄은 제외하고 검색

 

# find

: inode의 속성 정보를 기반으로 현재 디렉토리 기준 모든 하위 디렉토리에서 검색

검색된 정보를 기반으로 2차 실행을 하는 데 주로 쓰인다. 

 

# find . -mtime 3 -type f 

: 수정한 날짜가 3일 전인 파일 검색

 

💡 50만개의 파일을 지우는 경우 
# find [디렉토리] -type f -exec rm -fv {} \; 로 find에서 출력된 내용을 바탕으로 rm 명령어를 수행한다. 

-exec 옵션에서 {}(중괄호)는 버퍼의 역할을 하며 find 명령어의 수행 결과를 순차적으로 입력으로 받는 역할을 한다. 
정확히 -exec rm -rf {} ; 까지가 문법인데 ;(세미콜론)은 CMD 구분자라 역슬래시(\)로 무시하겠다고 지정해줘야 정상적으로 동작한다.

 

2. 파일의 시간 정보

1) Access

  • 접근 시간
  • 파일 Read시 업데이트
  • mount 옵션으로 noatime을 설정해주면 고정됨

2) Modify

  • 수정 시간
  • # ls -l 에서 보는 정보로 데이터의 변경이 일어났을 때 업데이트 

3) Change

  • 변경 시간
  • inode를 변경했을 때 업데이트
  • ex) 내용이 바뀌었을 때나 권한이 바뀌었을 때 등

4) Birth

  • 파일의 최초 생성 시간

 

2. Bash Shell

쉘은 사용자와 커널 사이에서 명령어를 해석하고 실행하는 인터페이스이다. 단순한 명령어 입력 도구를 넘어서 프로그래밍 언어처럼 조건문, 반복문, 함수, 변수 등을 사용할 수 있는 환경을 제공한다. 

 

Bash는 리눅스에서 가장 널리 쓰이는 Shell로 다양한 기능과 확장성을 제공한다. 

즉 Shell은 개념이고, Bash는 Shell의 한 종류이다. 

 

1) 리다이렉션

입력과 출력을 원하는 곳으로 방향을 바꾸는 기능이다. 

💡 파일 디스크립터

프로세스가 파일을 열면 커널은 해당 파일에 대한 ID를 할당해주는데 이것을 파일 디스크립터(FD)라고 한다. 

 

기본 파일 디스크립터 3가지

0 : 표준 입력, 지정하지 않으면 키보드 입력

1 : 표준 출력, 지정하지 않으면 터미널 출력

2 : 표준 에러, 지정하지 않으면 터미널 에러 출력

💡 에러는 버퍼가 없고, 출력은 라인 버퍼를 사용하기 때문에 같이 사용했을 경우 표준 에러가 먼저 나온다. 

라인버퍼는 출력 버퍼링 방식 중 하나로 출력을 할 때 개행 문자(\n)가 나오면 버퍼를 비워서 출력하는 방식이다. 

 

# wall < [파일]

: 표준입력으로 파일 내용을 전체 메시지로 보내기

 

# ls -l > list

: 표준 출력 리다이렉션을 먼저 수행하여 list 파일을 만든 다음에 ls 출력 내용을 list에 덮어씌움

 

# ls -l [존재하는 디렉토리] [존재하지 않는 디렉토리] > [파일] 

: 에러만 터미널에 출력되고, 정상 결과는 파일에 저장

 

# ls -l [존재하는 디렉토리] [존재하지 않는 디렉토리] 2> [파일]

: 정상 결과만 터미널에 출력되고, 에러만 파일에 저장

 

# ls -l [존재하는 디렉토리] [존재하지 않는 디렉토리] > [파일1] 2> [파일2]

: 정상 결과는 파일1에, 에러는 파일2에 저장

 

# ls -l [존재하는 디렉토리] [존재하지 않는 디렉토리] > [파일] 2>&1 

: 표준 에러를 표준 출력 스트림으로 변경하여 한 파일에 정상 결과와 에러 둘다 저장

 

# ./script.sh > file.log 2>&1

: (실무)script.sh 로그 파일 생성

 

2) 파이프

파이프(|)는 앞에서 실행된 명령어의 표준 출력을 뒤의 명령어의 표준 입력으로 전달하는 기능이다. 명령어를 연결해서 마치 데이터를 흐렬 보내듯 처리할 수 있게 해준다.

❗️파이프 사용시 주의할 점
오직 표준 출력만 다음 명령어로 전달되며, 표준 에러는 파이프를 통해 전달되지 않는다. 

 

# script -a /dev/null | tee /dev/pts/1 | tee /dev/pts/2

: 현재 터미널에서 입력한 내용과 출력 결과를 여러개의 터미널(pts)에 동시에 출력

 

3) 쉘 옵션/설정 변수

쉘의 동작을 제어하거나 사용자 환경을 설정하는 데 사용되는 변수를 의미한다. 대부분 Bash 내부에 미리 정의되어 있고 사용자가 직접 값을 변경하거나 읽어서 쉘의 동작이나 환경을 설정할 수 있다. 

 

# set -o ignoreeof

: 로그아웃 방지 기능(ignoreeof)을 켜면 Ctrl+D 키로 쉘 프롬프트가 바로 종료되지 않도록 막아줌

10번 정도 Ctrl+D를 연속 입력하면 쉘이 종료되긴 한다. 

 

# set -o noclobber

: 덮어쓰기 방지 기능(noclobber)을 켜면 리다이렉션(>)을 사용할 때 기존 파일이 실수로 덮어써지는 것을 방지

 

4) 변수

4-1) 지역 변수

현재 사용중인 쉘에만 적용되는 변수이다. 서브 쉘에서 지역 변수 값을 확인하려 할 경우 값이 나타나지 않는다.

 

# VAR=5 

: 지역변수에 5를 저장

 

4-2) 환경 변수

현재 쉘과 서브 쉘에 모두 적용되는 변수이다. 상위의 쉘에는 적용되지 않는다.

 

# export VAR

: 환경 변수로 설정

 

💡 env와 set의 차이점
- env : 환경 변수만 출력
- set : 모든 변수(지역 + 환경)에 대해 출력 

 

4-3) 특수 변수 

# echo $$ 

: 현재 쉘의 PID 출력

 

# echo $?

: 가장 최근에 실행한 명령어의 종료 상태 코드(return code)를 출력

 

# echo $!

: 가장 최근에 백그라운드로 실행한 프로세스의 PID 출력

 

# echo $n

: 쉘 스크립트나 함수에서 전달받은 인자 중 n번째에 위치한 인자의 값 출력

 

✍️ 하루 회고

리눅스 명령어를 단순히 쓰는 데 그치지 않고, 실무에서 어떻게 응용되는지까지 함께 배울 수 있어서 더욱 유익했다. 

 

주말 동안 그동안 배운 내용을 복습하며 뒤늦게 TIL을 정리하게 되었다.

내일부터는 수업이 끝난 당일에 바로 TIL을 작성해서 기억이 생생할 때 기록을 남기는 습관을 들이고자 한다. 

배운 모든 내용을 TIL에 적기보다는 수업을 들으면서 기록해두고 싶은 부분만 키워드로 메모해놓고 그걸 바탕으로 정리하는 방식이 좀 더 효율적일 것 같다. 

728x90

'TIL' 카테고리의 다른 글

[에스넷시스템 부트캠프] TIL Day7 - 네트워크 2  (1) 2025.05.28
[에스넷시스템 부트캠프] TIL Day6 - 메타캐릭터, 히스토리, 환경파일, 네트워크 1  (0) 2025.05.27
[에스넷시스템 부트캠프] TIL Day4 - 파일 퍼미션, vi 편집기  (0) 2025.05.25
[에스넷시스템 부트캠프] TIL Day3 - 디렉토리와 파일 관리 2, 파일  (0) 2025.05.25
[에스넷시스템 부트캠프] TIL Day2 - 리눅스 명령어 실행의 3대 요소, 디렉토리와 파일 관리 1  (0) 2025.05.25
'TIL' 카테고리의 다른 글
  • [에스넷시스템 부트캠프] TIL Day7 - 네트워크 2
  • [에스넷시스템 부트캠프] TIL Day6 - 메타캐릭터, 히스토리, 환경파일, 네트워크 1
  • [에스넷시스템 부트캠프] TIL Day4 - 파일 퍼미션, vi 편집기
  • [에스넷시스템 부트캠프] TIL Day3 - 디렉토리와 파일 관리 2, 파일
yulee_to
yulee_to
  • yulee_to
    yulee
    yulee_to
  • 전체
    오늘
    어제
    • 전체 글 (141) N
      • CS (2)
        • OS (0)
        • DB (0)
        • Network (2)
      • Develop (21)
        • Spring (9)
        • Java (12)
        • Python (0)
        • Algorithm (0)
        • 기타 (0)
      • PS (39)
        • C++ (39)
        • Java (0)
      • TIL (33)
      • Book (39)
        • 자바의 신 (32)
        • 스프링 입문을 위한 자바 객체 지향의 원리와 이해 (7)
      • ETC (4)
        • Blog (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    에스넷시스템
    boj
    백준
    멀티캠퍼스it부트캠프
    클라우드 활용 네트워크 엔지니어 부트캠프
    스프링 입문
    자바의 신
    에스넷시스템 부트캠프
    Java
    GodOfJava
    알고리즘
    부트캠프후기
    TiL
    C++
    객체지향
    스터디
    1일1백준
    EC2
    자바
    aws
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
yulee_to
[에스넷시스템 부트캠프] TIL Day5 - 검색 명령어, 시간 정보, Bash, 파일 디스크립터, 파이프, 변수
상단으로

티스토리툴바