데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      실무에서 많이 사용되는 터미널 (terminal) 작업 모음-1부

      Groche 23.07.18
      5,602 13 4

      터미널의 시작은 shell 이라 이에대한 간단한(?) 설명을 첨부한다.


      학교에서 알려주지 않는 터미널 관련 업무들

      개발자나 엔지니어로 처음 회사에 들어와 일을 시작하게 되면 제일 당황스러운 부분 중 하나가 Terminal 을 통해 infra 를 다루거나 server 관련 작업들이다.

      서버 환경들이 Cloud 로 변경되고 PaaS 나 SaaS 들이 늘어나고 있어 이런 작업들이 줄어드는것 같았으나,

      결국은 그런것도 CLI 를 통해 컨트롤 할 일이 많아지면서 Shell 과 터미널의 사용 빈도는 줄어들지 않고 있다.


      < 흔히 사용되는 Cloud CLI 예제 들 >

      # AWS Cli 예제 
      $ aws configure
      AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
      AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
      Default region name [None]: us-west-2
      Default output format [None]: ENTER
      
      # az CLI 예제
      $ az account set --subscription "my subscription name"
      $ az role assignment create --assignee servicePrincipalName --role Reader --scope /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName
      $ az role assignment delete --assignee userSign-inName --role Contributor

      요즘은 실제 업무도메인 들에 대해 여러 정보들이 알려졌지만,

      유독 Linux ( Unix ) 시스템을 다루는 도구적 기술들에 대한 교육이나 자료는 인터넷 여기저기 나뉘어 있어 이를 조금 정리 해 보고자 한다.


      어떤 shell 을 쓸 것인가?

      두괄식으로 선택지가 있다면 요즘은 zsh 를 많이 사용한다. 범용성은 Bash 가 더 높으나 하위 호환 가능하고 여러가지 plugin 들로 사용 편리성이 높아졌다.

      https://zsh.sourceforge.io/

      < 엔틱을 넘어 시조새 같은 구성의 웹 페이지 >

      다양한 응용이 있다

      선택 기준

      Shell 을 선택할때는 몇가지 고려 사항들이 있으나, 현재는 대부분 bash 와 zsh 위주의 사용성이 높은 편이다.

      서버들은 대부분 기본 shell 이 Bash 로 되어있으며, Mac 과 개인들의 PC 에서는 zsh 가 대세이다.

      1. 기존 작성 Shell Script 들과의 호환.

        1. Shell 은 쉽게 말해서 터미널 프롬프트를 달리 부르는 이름이다.

          내가 입력하거나 미리 입력한 명령어들을 그 규칙에 맞게 해석해서 동작 시키기 때문에 Shell 의 종류마다 약간 도는 좀 많이 다른 형태로 작성된다.

        2. 일반적으로 이전 리눅스들의 표준 shell 들을 따라가는 구도여서 대부분 sh ( Bourne Shell ), bash ( Bourne Again Shell ) 의 호환성을 가지는 형태로 작성된다.

      2. 표준화

        1. 현재 개발자들이 많이 사용하고 있는 Mac OS Catalina 부터 기본 쉘이 zsh 로 바뀌었다.

        2. 현재 서버들로 많이 사용되는 Linux OS 들의 기본 shell 은 대부분 bash 이다


      변경 방법

      혹시 사용하고 있는 Shell 종류를 확인하고 싶으면 아래와 같이 확인/변경 한다.

      # SHELL 확인
      $ echo $SHELL
      /bin/bash 
      
      /bin/sh # This is the Bourne shell.
      /bin/ksh93 # This is the Korn shell.
      /bin/bash # This is the Bash shell.
      /bin/zsh # This is the Z shell.
      /bin/csh # This is the C Shell.
      /bin/tcsh # This is the TC Shell.
      
      # 단순히 위 shell 을 실행 해 주는것 만으로도 사용 가능 ( /bin 이 $PATH 에 등록되어 있을때 )
      $ bash 
      $ zsh
      
      # 기본 Shell 을 변경 하고 싶을 때
      # INTERACTIVE METHOD  
      $ chsh
      
      # NON-INTERACTIVE METHOD
      $ chsh -s /bin/csh



      본론

      그럼 Shell 을 통해 많이 하는 작업들을 열거 해 보자

      작업 1. crontab


      Local 에서 터미널을 통해 작업하거나, 개인서버, 상용서버들을 다루다보면 시간이나 주기 별로 자동으로 동작 해야 할 일들이 자주 있다. ( 거의 다 그런 일이다.)

      • 주기적으로 파일을 보내거나,

      • 주기적으로 프로세스의 상태를 검사하거나

      • 주기적으로 메일로 알림을 보내거나

      • 주기적으로 끄고 켜거나

      • 여튼 주기적으로 뭔가 해야 할때 한다.


      # 아래 명령을 통해 에디터 모드로 접근 해서 crontab 내용을 입력합니다. 
      $ crontab -e
      # * * * * * echo "HELL OH! World!" 를 입력해보자 ( 오타아님 )
      
      # 아래 명령을 통해 현재 등록된
      $ crontab -l
      * * * * * echo "HELL OH! World!"
      
      #아래 명령으로 crontab 을 삭제한다 ( 잘 안쓴다. 안내없이 지우니 실행 안하는게 ... )
      $ crontab -r

      crontab 문법 관련 안내는 여기저기 많으니까 간추리면

      *      *      *      *      *
      분(0-59)  시간(0-23)  일(1-31)  월(1-12)   요일(0-7)
      
      0 */1 * * * 매일 1시간 간격으로 실행
      0 */12 * * * 매일 12시간마다 실행
      0 6,12 * * * 매일 06시, 12시에 실행
      5 3-5 * * * 매일 03시 ~ 05시 사이 매시간 10분에 실행 (03시 05분, 04시 05분, 05시 05분)

      이런 식이고, 간혹 약간 시간 강박이 있어서 초단위까지 맞춰야 하면 아래와 같은 방법도 있다.

      ( 실험 해 봤으나 정확하지는 않고, sleep 의 구조 특성상 해당 작업이 많이 등록되면 성능상 이슈가 생길 수 있다. - 결국 이것도 쓰지 말자 - )

      $ crontab -e
      * * * * * sleep 10; /run.sh
      # 간단히 해당 시간에 10초 기다렸다 실행하라는 의미


      작업 2. logrotate

      사실 요즘 대부분의 Web Server 나 Web Framework 들은 자체적으로도 logroatate 기능을 가지고 있어서 파일들을 나누거나 용량관리를 해 주기때문에 필요 없을수도 있으나,

      자체적으로 log 관리를 하거나 할때는 분명 log 파일은 신경 써 줘야 하는 파일이다.


      경험상 서버 관리할때 서버쪽 문제의 3할 이상은 디스크 부족으로 생겼던 경험들이 있다. ( 개인적 경험 )

      그래서 잘 모를때는 서버 접속할때는 알아서 df 나 du 명령어랑 친해져야 했다.


      Logrotate를 구성하는 파일들은 아래와 같은 구조를 가진다.

      • /usr/sbin/logrotate : Logrotate 데몬 프로그램

      • /etc/logrotate.conf : Logrotate 데몬 설정 파일

      • /etc/logrotate.d/ : Logrotate 프로세스 설정 파일

      • /etc/cron.daily/logrotate : Logrotate 작업내역 로그

      그냥 설정 파일인 /etc/logrotate.conf 를 보자

      # rotate log files weekly
      # log 회전 주기 yearly : 매년, monthly : 매월, weekly : 매주, daily : 매일
      daily
      
      # keep 4 weeks worth of backlogs
      # log 파일 개수, 해당 개수가 넘어가면 logrotate의 주기에 따라 실행됨
      rotate 7
      
      # create new (empty) log files after rotating old ones
      # 새로운 log 파일 생성 여부, create : log 파일 생성, empty : log 파일 생성 안함
      create
      
      # use date as a suffix of the rotated file
      # 파일명 날짜 여부, logrotate 실행 후 log파일에 날짜를 부여
      dateext
      
      # uncomment this if you want your log files compressed
      # log파일 압축 여부, 로그 파일 크기 조절 용도
      # compress
      
      # RPM packages drop log rotation information into this directory
      # 개별 로그 process 설정 경로
      include /etc/logrotate.d

      대략 위와 같은 설정으로 동작하는데, 프로세스를 여러개 만들어서 사용 가능하다. ( 로그파일이 여러개있으니... )

      관심있는 분들은 좀 더 자세한 사용법을 찾아보시길

      좀 더 자세히 나온 [ 찰떡개발자 코딩 님 블로그 ]


      원치않게 길어져서 1부는 여기까지


      2부 작성 예정

      작업 3. network 연결 확인

      작업 4. 구동중인 process port 확인 + 죽이기(? Kill )

      작업 5. 빠이프 ( | ) 와 grep 사용 원하는 부분만 발취 하기


      원하는 부분이나 이걸 더 많이 써요 하는것들 댓으로 주시면 추가 하겠습니다!!!

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      Groche 님의 최신 블로그

      더보기
      동영상 기고하기