2. Linux & Shell Command

유승우·2022년 5월 11일
0

Linux


  • 프로그래밍에 본격 입문하면 Linux를 다룰 일들이 많음 ( 특히 서버와 관련된 직군이라면!)
  • 서버에서 자주 사용하는 OS
    • Mac, Window도 서버로 활용은 가능하나 유료
  • Free, 오픈 소스
    • 오픈 소스인만큼 여러 버전이 존재 → 우리만의 버전을 만들 수 있다
  • 많은 사람들이 사용하면서 안정성, 신뢰성이 높다

대표적인 Linux 배포판


  • Debian
    • 온라인 커뮤니티에서 제작해 배포가 시작
  • Ubuntu
    • 쉽고 편한 설치로 초보자들이 쉽게 접근할 수 있도록 만듦
  • Redhat
    • Redhat이라는 회사에서 배포한 리눅스
  • CentOS
    • Red Hat이 공개한 버전을 가져와서 브랜드와 로고를 제거하고 배포한 버전

Linux, Shell Script 학습 가이드


  • 처음엔 자주 사용하는 쉘 커맨드, 쉘 스크립트 위주로 학습
  • 필요한 코드가 있는 경우 검색하여 찾기
  • 해당 코드에서 나오는 새로운 커맨드 학습해서 정리하기
  • 왜 이렇게 되는가? 생각하며 배경 지식이 필요한 경우 Linux, OS 학습

Linux를 사용하는 방법


  • VirtualBox에 Linux설치, Docker로 설치

  • 윈도우에서는 WSL 사용

  • Notebook에서 터미널 실행

  • Cloud에서 띄우는 인스턴스에서 연습

Shell command


    • 사용자가 문자를 입력해 컴퓨터에 명령할 수 있도록 하는 프로그램
  • 터미널/콘솔

    • 쉘을 실행하기 위해 문자 입력을 받아 컴퓨터에 전달
    • 프로그램의 출력을 화면에 작성
  • sh

    • 최초의 쉘
  • bash

    • Linux 표준 쉘
  • zsh

    • Mac 카탈리나 OS 기본 쉘
  • 쉘 UX

    • host name : 컴퓨터 네트워크에 접속된 장치에 할당된 이름. IP 대신 기억하기 쉬운 글자로 저장
  • 쉘을 사용하는 경우

    • 서버에서 접속해서 사용하는 경우
    • crontab 등 Linux의 내장 기능을 활용하는 경우
    • 데이터 전처리를 하기 위해 쉘 커맨드를 사용
    • Docker를 사용하는 경우
    • 수백대의 서버를 관리할 경우
    • Jupyter Notebook의 Cell에서 앞에 !를 붙이면 쉘 커맨드가 사용됨
    • 터미널에서 python3, jupyter notebook도 쉘 커맨드
    • Test Code 실행
    • 배포 파이프라인 실행

커맨드라인 편집 명령어


명령어내용
위,아래 화살표이전 명령어 가져오기
Ctrl + a줄 맨 앞으로 커서 이동
Ctrl + e줄 맨 끝으로 커서 이동
Ctrl + l터미널을 모두 지우기 (clear,cls 와 동일)
Ctrl + d현재 단어 지우기
Ctrl + k현재 커서부터 처음까지 지우기
Ctrl + c터미널 실행 중지

기본 커맨드 명렁어


명령어내용예시
pwd현재 directory 위치 출력pwd
mkdirdirectory 생성mkdir 생성할 directory
ls현재 접근한 directory의 모든 파일 명을 출력ls
ls -al현재 접근한 directory의 모든 파일의 권한, 크기, 날짜, 이름 등을 출력ls -al
mv파일이나 directory를 이동할 때 사용, 주로 파일명을 변경할 때 사용mv 현재 directory, 이동할 directory
cp파일 및 directory를 복사할 때 사용(하위 directory나 file이 있으면 실행x)cp 복사할 directory, 생성될 directory
cp -r파일 및 directory를 복사할 때 하위 directory까지 모두 복사cp 복사할 directory, 생성될 directory -r
rm파일 삭제rm 제거할 파일
rmdirdirectory 삭제rmdir 제거할 directory
echopython의 print문과 비슷하게 결과를 출력, 1옆의 ` 를 통해 쉘 커맨드 결과를 출력echo “hi” , echo ‘pwd`
bash쉘 스크립트 실행bash ~
history최근에 입력한 쉘 커맨드 history 출력 , ! 줄번호로 다시 커맨드 활용 가능history , !35
  • cd
명령어내용
cd디렉토리 변경
cd .현재 위치한 디렉토리로 이동 (새로고침)
cd ..상위 디렉토리로 이동
cd -이전에 위치했던 디렉토리로 이동 (뒤로가기)
cd /ROOT 디렉토리로 이동
cd ~홈 디렉토리로 이동
  • cat
명령어내용
cat특정 파일 내용 출력 (concatenate)
cat ... ...여러 파일을 인자로 주면 합쳐서 출력
cat ... > ...파일에 OVERWRITE 하고 싶은 경우
cat ... >> ...파일에 APPEND 하고 싶은 경우
  • find
명령어내용
find현재 디렉토리의 파일 및 디렉토리 출려
find . -name “STR”지정된 이름을 가지는 파일 검색
find . -name “*STR”지정된 문자열로 시작되는 파일 검색
find . -name “STR*”지정된 문자열로 끝나는 파일 검색
find . -name “STR지정된 문자열을 포함하는 파일 검색
find . -name test -type dtest라는 이름의 디렉토리 검색
find . -name test -type ftest라는 이름의 일반 파일 검색
  • sort
명령어내용
sort해당 파일 행 정렬 (오름차순)
sort -n라인의 각 필드를 비교하는 대상을 숫자로 변경
sort -f영어를 정렬할 때, 대소문자 구별 x
sort -r출력 순서를 내림차순으로 변경
sort -b앞에 붙는 공백 무시
sort -t필드 구분자 무시
sort -m정렬된 파일을 병합
sort -u정렬 후 ,중복행 제거
  • uniq
명령어내용
uniq중복된 행이 연속으로 있다면 중복되는 행 제거
uniq -c중복되는 행이 몇 번 나오는지를 출력 (개수 세기)
uniq -d중복되는 행 중 한 행만 출력
uniq -D중복되는 모든 행 출력
uniq -NN번째 행부터 중복 검사
uniq -i중복되는 행을 한 라인이라 생각하고 출력
uniq -u중복 행이 없는 것만 출력
uniq -wN번째 문자까지만 비교대상으로 정렬
uniq -sN번째 문자까지는 비교대상에서 제외하고 정렬
uniq -fN번째 필드를 비교대상에서 제외하고 정렬
  • grep
명령어내용
grep “STR” 파일파일에 주어진 패턴 목록(글자)과 매칭되는 라인 검색 (특정 문자열 검색)
grep “STR” 파일1 파일2여러 디렉토리에서 문자열 찾기
grep “STR” *모든 디렉토리에 있는 파일에서 문자열 찾기
grep “STR” *.txt특정 확장자를 가진 모든 파일에서 문자열 찾기
grep -i대소문자 구별x
grep -m 숫자최대로 표시될 수 있는 결과 제한
grep -c일치하는 행의 수를 출력(count)
grep -o검색하여 일치하는 문자열만 표시
grep -v일치하지 않는 행만 출력
grep -l패턴이 포함된 파일의 이름을 출력
grep -w단어와 일치하는 행만 출력
grep -x라인과 일치하는 행만 출력
grep -r하위 디렉토리를 포함한 모든 파일에서 검색
grep -e정규 표현식 패턴으로 검색
  • cut
명령어내용
cut파일에서 특정 필드 추출
cut -d지정한 문자를 구분자로 사용
cut -c문자열을 기준으로 잘라내기
cut -f필드를 기준으로 잘라내기
cut -z라인의 구분자를 개행문자가 아닌 NULL을 사용
  • vi 명령어

command mode

명령어내용
dd현재 위치한 한 줄 삭제 또는 잘라내기(3dd 는 3 줄 삭제)
iINSERT 모드로 변경
x커서가 위치한 곳의 글자 1개 삭제 또는 잘라내기(5x : 문자 5개 삭제)
yy현재 줄을 복사(1줄을 ctrl + c)
p현재 커서가 있는 줄 바로 아래에 내용 붙여넣기
u방금 한 명령 취소 (ctrl +z)

Last line mode

명령어내용
w현재 파일명으로 저장
qvi 종료(저장 x)
q!vi 강제 종료
wqvi 저장 후 종료
wq!vi 저장 후 강제 종료
/문자현재 커서 위치부터 앞으로 문자 탐색
?문자현재 커서 위치부터 뒤로 문자 탐색
set nuvi 라인 번호 출력
  • 환경변수 관련 명령어

명령어내용예시
env환경 변수 조회, 등록env
env grep ...특정 환경 변수 조회env grep 환경변수명
export환경 변수 일시 적용export 환경변수명 = 값
unset환경 변수 해제unset 환경변수명
  • 환경 변수 영구 적용

    1. vim ~/. bashrc 또는 .zshrc로 파일 열기
    2. 맨 아래에 export MYPATH=/usr/home 추가
    3. source ~/.bashrc 로 적용 후 재접속
    4. echo $MYPATH로 확인
  • sudo

    • 관리자 권한으로 실행하고 싶은 경우 커맨드 앞에 sudo를 붙임
    • sudo 명령어 : 최고 권한을 가진 슈퍼 유저로 프로그램을 실행
    • “superuser do”에서 유래하고, 최근엔 “subsitute user do”(다른 사용자의 권한으로 실행)의 줄임말로 해석
    • sudo rm -rf / : 모든 것을 삭제 (조심해야 됨!)
  • alias

    • 기본 명령어를 간단히 줄일 수 있는것
    • ex) ll는 ls -l로 별칭이 지정되어 있음
    • alias ll2=’ls -l’
  • 표준 스트림(Stream)

    • Unix에서 동작하는 프로그램은 커맨드 실행시 3개의 Stream이 생성

    • stdin : 0으로 표현, 입력(비밀번호, 커맨드 등)

    • stdout : 1로 표현, 출력 값(터미널에 나오는 값)

    • stderr : 2로 표현, 디버깅 정보나 에러 출력

  • Redirection

    • 프로그램의 출력(stdout)을 다른 파일이나 스트림으로 전달

    • : 덮어쓰기(Overwrite) 파일이 없으면 생성하고 저장

    • : 맨 아래에 추가하기(Append)

    • 기존의 vi-test3.sh를 hi로 덮어쓰고 hello추가해서 출력

  • Pipe

    • 프로그램의 출력(stdout)을 다른 프로그램의 입력으로 사용하고 싶은 경우
    • A의 Output을 B의 Input으로 사용(다양한 커맨드를 조합)
    • 현재 폴더에 있는 파일명 중 vi가 들어간 단어를 찾고 싶은 경우
    • 최근 입력한 커맨드 중 echo가 들어간 명령어를 찾고 싶은 경우
    • 연습 문제
      • test.txt 파일에 “Hi!!!!”를 입력해주세요(vi 사용 금지)

      • test.txt 파일 맨 아래에 “kkkkk”를 입력해주세요(vi 사용 금지)

      • test.txt의 라인 수를 구해주세요(힌트 : wc -l를 쓰면 라인 수를 구할 수 있음)

서버에서 자주 사용하는 쉘 커맨드

  • ps
    • 현재 실행되고 있는 프로세스 출력하기 : Process Status

    • -e : 모든 프로세스

    • -f : Full Format으로 자세히 보여줌

  • curl
    • Command Line 기반의 Data Transfer 커맨드 : Client URL
    • Request를 테스트할 수 있는 명령어
    • 웹 서버를 작성한 후 요청이 제대로 실행되는지 확인할 수 있음
  • df
    • 현재 사용 중인 디스크 용량 확인 : Disk Free

    • -h : 사람이 읽기 쉬운 형태로 출력

  • scp(Secure Copy)
    • SSH를 이용해 네트워크로 연결된 호스트 간 파일을 주고 받는 명령어
    • -r : 재귀적으로 복사
    • -P : ssh 포트 지정
    • -i : SSH 설정을 활용해 실행
  • nohup
    • 터미널 종료 후에도 계속 작업이 유지하도록 실행(백그라운드 실행)
    • nohup python3 app.py &
    • nohup으로 실행될 파일은 Permission이 755 여야 한다.
    • 종료는 ps ef | grep app.py 한 후, pid(Process ID) 찾은 후 kill -9 pid로 프로세스를 Kill 한다.
    • 로그는 nohup.out에 저장
    • nohup 외에도 screen이란 도구도 있다.
  • chmod(Change Mode)
    • 파일의 권한을 변경하는 경우 사용
    • 유닉스에서 파일이나 디렉토리의 시스템 모드를 변경
    • ls -al을 하면 왼쪽에 Permission이 나타남
    • Permission
      • r = Read(읽기), 4

      • w = Write(쓰기), 2

      • x = eXecute(실행하기), 1

        • = Denied
      • r-x : 읽거나 실행할 수는 있지만 수정은 불가능

      • chmod 755 vi-test2.sh 를 실행하면 Permission이 변경되는 것을 볼 수 있다.

쉘 스크립트


  • .sh 파일을 생성하고, 그 안에 쉘 커맨드를 추가

  • 파이썬처럼 if, while, case 문이 존재하며 작성시 bash name.sh로 실행 가능하다

  • 쉘 스크립트 = 쉘 커맨드의 조합

  • 지금은 쉘 커맨드에 익숙해진 후, 추후에 하나씩 스크립트로 생성

  • #!/bin/bash : Shebang

    • 이 스크립트를 Bash 쉘로 해석하겠다 라는 것을 의미하며 항상 시작에 지정해줘야 한다.
  • $(date +%s) : date를 %s(unix timestamp)로 변형

  • START=$(date + %s) : 변수 저장

0개의 댓글