Code States/TIL

[0310] 리눅스 운영체제 - 출력 관련 명령어

ki1111m2 2023. 3. 10. 13:35

학습 목표

왜 리눅스인가? ~ 출력 관련 명령어

  • 리눅스를 사용하는 이유와 CLI의 장점을 이해할 수 있다.
  • 파일 및 디렉토리 확인, 이동, 복사, 생성, 삭제와 관련한 기본적인 명령어를 사용할 수 있다.
  • 루트 디렉토리, 홈 디렉토리 및 절대 경로와 상대 경로를 이해할 수 있다.
  • 리눅스 상에서 텍스트 파일을 수정할 수 있다.
  • 패키지에 대해 이해하고, 패키지 매니저를 이용해 프로그램을 설치/삭제할 수 있다.
  • 표준 스트림을 이해하고, 출력과 입력을 파이프라인으로 연결할 수 있다.
  • 파일과 디렉토리를 패턴으로 찾을 수 있다.

표준 스트림과 stdin, stdout, stderr


  • 표준 스트림 (Standard Stream)
    • 스트림: 프로그램을 드나드는 데이터를 흐름으로 표현한 단어
  • stdin
    • 프로그램으로 들어가는 입력값의 데이터
  • stdour
    • 프로그램이 출력 데이터를 기록하는 스트림
  • stderr
    • 프로그램이 오류 메세지나 진단을 출력하기 위해 일반적으로 쓰이는 또다른 출력 스트림

파이프라인과 리다이렉션


  • 리다이렉션
    • 표준 스트림의 흐름을 바꿔 파일로 표준 입/출력을 할 수 있도록 함
    • >: 표준 출력, 명령의 결과를 파일로 저장 (기존 파일 덮어씀)
    • >>: 표준 출력(append), 명령의 결과를 기존 파일에 추가
    • <: 표준 입력, 파일의 데이터를 명령에 입력
      • 예시) ps aux > ps.txt
        • ps aux의 결과(출력 스트림)를 ps.txt 파일에 저장
      • 예시> head < ps.txt
        • ps.txt의 처음 10줄을 head의 입력 스트림으로 전환하여 보냄
        • head: 파일의 처음 부분을 설명한 라인만큼 출력하는 명령어, 기본값으로 10줄이 세팅 되어 있음
      • 예시) head < ps.txt > sample.txt
        • ps.txt의 내용을 head의 입력 스트림으로 전환하여 전송
        • head의 출력 스트림을 sample.txt에 저장
  • 파이프
    • 어떤 명령의 결과를 다시 어떤 명령의 입력으로 받아야 할 때 사용
      • 예시) process1 | process2
        • 프로세스 1의 출력 스트림을 프로세스 2의 입력 스트림으로 사용
      • 예시) ls -l | grep ssh
        • ls -l에 출력된 내용 중 ssh 인자를 포함한 내용만 출력
        • grep: 특정 문자열을 찾을 때 사용

파일 읽기


  • man: 매뉴얼(도움말 보기) 명령어
    • 원하는 명령어 앞에 man을 붙이면 그 명령어에 대한 사용법을 알려줌
  • cat: 파일 내용 출력
    • 파일 내용을 출력하는 용도
    • 출력 내용을 다른 CLI 도구나 파일로 리디렉션 하는 데 기본적으로 등장
    • cat <옵션> <파일이름>
      • -n: line 번호를 함께 출력
  • more: 파일을 화면 단위로 끊어서 출격
    • 텍스트 파일의 내용을 한 번에 한 화면씩 보여줌
    • more <옵션> <파일이름>
      • +<number>: 입력한 line을 포함한 페이지를 출력(number째 줄부터 출력)
      • +/<string>: 입력한 문자열이 포함된 페이지를 출력
  • less: 파일 내용 출력
    • cat과 달리 터미널 세션을 방해하지 않으면서 화살표키 만으로도 파일 내에서 양방향으로 탐색할 수 있음
    • 구동전에 전체 파일을 읽지 않기 때문에 큰 용량의 파일을 더 빨리 읽을 수 있음
    • less <옵션> <파일이름>
      • -N: line 번호를 함게 출력
  • head: 파일 앞부분 출력
    • 터미널에서 직접 파일의 시작을 볼 수 있음
    • 기본 값은 10줄
    • head <옵션> <파일이름>
      • -n: 지정한 라인까지 출력
  • tail: 파일 뒷부분 출력
    • 파일의 마지막 행을 기준으로 지정한 행까지의 파일 내용 일부를 출력
    • 기본 값은 10줄
    • tail <옵션> <파일이름>
      • -n: 지정한 라인까지 출력
      • -f: 즉시 종료되지 않고, 파일의 내용이 추가되는 상태를 지켜보면서 계속 이어서 출력
  • awk
    • 특정 열 출력
  • cut
    • 파일의 특정 열을 추출할 때 사용
  • paste
    • 파일을 붙여넣을 때 사용
    • paste 파일 > 파일
  • sort
    • 파일 내 열 정렬
  • uniq
    • 중복 내용 제거
  • wc
    • 라인이나 단어, 캐릭터의 수를 세는 데에 사용
    • wc <옵션> <파일명>
      • -l: 라인
      • -w: 단어
      • -c: 캐릭터

파일 및 디렉토리 찾기


  • find: 파일 검색
    • 파일 권한, 소유권, 수정 날짜, 크기 등 특정 기준에 따라 파일 검색
    • 위치 선정을 하지 않으면 현재 디렉토리만 검색
    • find <위치> <옵션> 검색할 내용
      • -name 내용: 지정한 내용의 이름을 가진 파일을 찾음
      • type <옵션>: 옵션에 따른 형태를 가진 파일을 찾음
  • locate: 특정 파일 위치 찾기
    • 특정 파일의 위치를 모를 때 활용
    • find에 비해 매우 빠르지만 데이터베이스의 정기적인 업데이트를 필요로 함(updatedb에 의해 생성된 미리 빌드된 파일들의 데이터베이스를 통해 검색 되기 때문)
    • 속도 향상을 위해 만들어진 유틸리티기 때문에 전체적인 효율성과 정확성은 조금 떨어지는 편
  • which: 실행파일 위치 식별
    • 특정 매개 변수를 취하여 $PATH 시스템 환경변수에서 이진 파일을 매우 효과적으로 검색함
    • 현재 사용하고 있는 명령어 실행 파일의 위치를 알아낼 수 있음
    • bash 쉘을 사용할 프로그램의 경로를 나타냄

패턴으로 찾기 (grep)


  • global, regular expression, print에서 각각의 머릿글자를 따 온 것
  • 파일이나 표준 입력을 검색하여 주어진 정규 표현식과 맞는 줄을 찾아 프로그램의 표준 출력으로 출력함
  • 대량의 텍스트 파일에서 패턴을 검색할 때 사용할 수 있는 가장 강력한 정규식 터미널 명령 중 하나
  • 찾고자 하는 패턴을 입력으로 받아 특정 패턴에 대해 지정된 파일을 검색
  • 정규 표현식
    • 특정 규칙을 가진 문자열 집합을 표현하기 위한 형식 언어
    • 문자열 패턴 매칭을 검사하거나 문자열을 치환하기 위해 사용됨
    • 문자열 검색에 정규 표현식을 적용하면 지정된 문자열의 문자 일치여부만 검사하는 것이 아니라 정규 표현식의 규칙에 부합하는지 여부가 검사됨
    • *: 0개 이상의 모든 문자
  • 대상 파일에서 문자열 검색
    • grep “문자열” [filename]
  • 현재 디렉토리의 모든 파일에서 문자열 검색
    • grep “문자열” *
  • 특정 확장자를 가진 모든 파일에서 문자열 검색
    • grep “문자열” *.txt
  • 대소문자 구분하지 않고 문자열 검색
    • grep -i “문자열” [filename]
  • 매칭되는 패턴이 존재하지 않는 라인 선택
    • grep -v “문자열” [filename]
  • 단어 단위로 문자열 검색
    • grep -w “문자열” [filename]
  • 검색된 문자열이 포함된 라인 번호 출력
    • grep -n “문자열” [filename]
  • 하위 디렉토리를 포함한 모든 파일에서 문자열 검색
    • grep -r “문자열” [filename]
  • 최대 검색 결과 갯수 제한
    • grep -m 숫자 “문자열” [filename]
  • 문자열 A로 시작해서 문자열 B로 끝나는 패턴 찾기
    • grep “A.*B” [filename]

출처