국문과 유목민

Linux Shell & Vi Editor Command 본문

IT 견문록/함수 및 코드 (디지털치매 대비)

Linux Shell & Vi Editor Command

논곰 2022. 2. 15. 23:31

개발자들은 파이썬, 자바, C등 어떤 언어를 사용하든 Linux를 마주치게 될 수밖에 없고 그만큼 많이 사용하게 된다. 하지만 꾸준히 사용하지 않는 경우가 생기기 때문에 자주 까먹게 되고, 그래서 매번 같은 내용을 검색하게 된다(일단 내가 그렇다). 따라서 Linux Shell Command와 Vi Editor Command에 관해 간략하게 정리해놓으려고 한다.

Shell Commad

man: manual, 기본 쉘 커맨드, 매뉴얼 확인

mkdir: make directory, 폴더를 만드는 명령어

ls: List Segments, 현재 접근한 폴더의 폴더나 파일 확인

  • -a: .으로 시작하는 파일, 폴더 포함 전체 출력
  • -l: 퍼미션, 소유자, 만든 날짜, 용량 등의 정보 출력
  • -h: 용량을 사람이 읽기 쉽도록 GB와 MB로 표현한다. -l과 같이 사용

pwd: 현재 경로

cd: change directory, 폴더 변경해서 이동하기

echo: Python의 print처럼 터미널에 텍스트를 출력 ("")

  • backtick을 입력하면 출력하는 디렉토리의 pwd값을 출력해준다. (``)

Bash Command

bash: 쉘 스크립트 실행 bash vi-test.sh

sudo: 관리자 권한으로 실행하고 싶은 경우 커맨드 앞에 sudo를 붙임 (설치가 안 되어 있는 경우가 있을 수 있다)

  • sudo rm -rf

cp: copy, 파일 또는 폴더 복사하기 cp vi-test.sh vi-test2.sh

  • -r : 디렉토리를 복사할 때 디렉토리 안에 파일이 있으면 recursive(재귀적)으로 모두 복사
  • -f : 복사할 때 강제로 실행

mv: move, 파일, 폴더 이동하기(이름 바꿀 때도 활용 가능) mv vi-test.sh vi-test2.sh

cat: concatenate, 특정 파일 내용 출력 cat vi-test.sh

  • 여러 파일을 인자로 주면 합쳐서(CONCAT) 출력
    • cat vi-test2.sh vi-test3.sh
  • 파일에 저장하고(OVERWRITE) 싶은 경우
    • cat vi-test2.sh vi-test3.sh > new_test.sh
  • 파일에 추가(APPEND) 싶은 경우
    • cat vi-test2.sh vi-test3.sh >> new_test.sh

clear: 터미널 창을 깨끗하게 지워준다. (기록은 남음)

history: 최근에 입력한 쉘 커맨드 Histoty를 출력한다. 히스토리 결과에서 느낌표를 붙이고 숫자를 입력하면 그 커맨드를 다시 활용할 수 있다.

  • !30

find: 파일 및 디렉토리를 검색할 때 사용 find . -name "파일명"

export: 특정 변수에 값을 넣어준다고 생각하면 된다. 

export water="물"

  • echo $water  (output: )
  • 매번 쉘을 실행할 때마다 환경변수를 저장하고 싶으면 .bashrc에 저장하면 된다.
  • (Linux) vi ~/.bashrc에 들어가서 원하는 코드명을 설정하고 나오면 된다.

alias: 터미널에서 alias라고 치면 현재 별칭으로 설정된 것을 볼 수 있다.

여기까지의 코드는 그냥 사용할 수 있을 정도로 손에 익히기


head/tail: 파일 앞 뒤 출력 head -n 3 vi-test.sh

sort: 행 단위 정렬

  • -r : 정렬을 내림차순으로 정렬(Default 옵션 : 오름차순)
  • -n : Numeric Sort
  • cat fruits.txt | sort
  • cat fruits.txt | sort -r

uniq: 중복된 행이 연속인 경우 중복 제거 sort와 함께 사용한다.

  • -c: 중복 행의 개수 출력
  • cat fruits.txt | uniq
  • cat fruits.txt | sort | uniq
  • cat fruits.txt | uniq | wc -l
  • cat fruits.txt | sort | uniq | wc -l

grep: 파일에 주어진 패턴 목록과 매칭되는 라인 검색

  • grep 옵션 패턴 파일명
  • 옵션
    • -i : Insensitively하게, 대소문자 구분 없이 찾기
    • -w : 정확히 그 단어만 찾기
    • -v: 특정 패턴 제외한 결과 출력
    • -E : 정규 표현식 사용
  • 정규 표현식 패턴
    • ^단어 : 단어로 시작하는 것 찾기
    • 단어$ : 단어로 끝나는 것 찾기
    • . : 하나의 문자 매칭

cut: 파일에서 특정 필드 추출

  • -f : 잘라낼 필드 지정
  • -d : 필드를 구분하는 구분자. Default는 \t
  • cat cut_file | cut -d : -f 1,7 # 1번째, 7번째 값을 가져옴

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

  • stdin : 0으로 표현, 입력(비밀번호, 커맨드 등)
  • stdout : 1로 표현, 출력 값(터미널에 나오는 값)
  • stderr : 2로 표현, 디버깅 정보나 에러 출력

Redirection & Pipe (강조)

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

  • > : 덮어쓰기(Overwrite) 파일이 없으면 생성하고 저장
  • >> : 맨 아래에 추가하기(Append)
  • echo “hi” > vi-test3.sh \ echo “hello” >> vi-test3.sh

Pipe : 프로그램의 출력(stdout)을 다른 프로그램의 입력으로 사용하고 싶은 경우 A의 Output을 B의 Input으로 사용(다양한 커맨드를 조합)

  • 활용: 최근 입력한 커맨드 중 echo가 들어간 명령어를 찾고 싶은 경우 history | grep “echo

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

    • -e: 모든 프로세스
    • -f: Full Format으로 자세히 보여줌

curl: ClientURL, Command Line 기반의 Data Transfer 커맨드

  • Request를 테스트할 수 있는 명령어 웹 서버를 작성한 후 요청이 제대로 실행되는지 확인할 수 있음
  • curl -X localhost:5000/ {data}

df: DiskFree, 현재 사용 중인 디스크 용량 확인

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

scp: Secure Copy, SSH을 이용해 네트워크로 연결된 호스트 간 파일을 주고 받는 명령어

  • -r : 재귀적으로 복사
  • -P : ssh 포트 지정
  • -i : SSH 설정을 활용해 실행

scp local_path user@ip:remote_directory

scp user@ip:remote_directory local_path

scp user@ip:remote_directory user2@ip2:target_remote_directory

 

nohup: 터미널 종료 후에도 계속 작업이 유지하도록 실행(백그라운드 실행)

  • nohup으로 실행될 파일은 Permission이 755여야 함
  • nohup python3 app.py &
  • 종료는 ps ef | grep app.py 한 후, pid(Process ID) 찾은 후 kill -9 pid 로 프로세스를 Kill한다. 로그는 nohup.out에 저장됨 nohup 외에도 screen, tmux란 도구도 있음 (나는 tmux가 좋은 것 같다...)

chmod: Change Mode, 파일의 권한을 변경하는 경우 사용

  • ls -l (ll)을 입력하면 나온다.
  • Permission (2의 3승으로, 111=rwd)
    • r = Read(읽기), 4
    • w = Write(쓰기), 2
    • x = eXecute(실행하기), 1= Denied
    • r-x : 읽거나 실행할 수는 있지만 수정은 불가능
  • chmod 755 vi-test2.sh로 Permission을 변경한다.

Vi Editor Mode

vi: vim 편집기로 파일 생성

Command Mode

  • dd : 현재 위치한 한 줄 삭제
  • i : INSERT 모드로 변경
  • x : 커서가 위치한 곳의 글자 1개 삭제(5x : 문자 5개 삭제)
  • yy : 현재 줄을 복사(1줄을 ctrl + c)
  • p : 현재 커서가 있는 줄 바로 아래에 붙여넣기
  • k : 커서 위로
  • j : 커서 아래로
  • l : 커서 오른쪽으로
  • h : 커서 왼쪽으로

Insert Mode

  • i로 들어오는 Mode. 파일을 수정할 수 있는 Mode. Command로 나가고 싶다면 ESC입력

LastLine Mode

  • ESC를 누른 후 콜론(:)을 누르면 나오는 Mode
  • q : vi 종료(저장되지 않음)
  • q! : vi 강제 종료(!는 강제를 의미)
  • wq : 저장한 후 종료
  • :wq! : 강제로 저장하고 나오기
  • /문자 : 문자 탐색. 탐색한 후 n을 누르면 계속 탐색 실행
  • set nu : vi 라인 번호 출력

쉘 스크립트

  • .sh 파일을 생성하고, 그 안에 쉘 커맨드 추가하며 if, else, while문을 사용가능 (아직 안 써봄;;)
Comments