본문으로 바로가기

리눅스(Linux) 명령어 학습 - (1)

category 인프라/리눅스 2019. 4. 27. 22:22


글을 앞서


이동욱님 블로그를 보다가 '만화로 배우는 리눅스 시스템 관리' 책을 알게 되어 이 책을 통해 리눅스를 공부하겠다 싶었습니다.

(https://jojoldu.tistory.com/36?category=717427)


해당 글은 '만화로 배우는 리눅스 시스템 관리' 1권을 정리하는 글로, 앞으로 2권도 읽게 되면 추가로 내용을 채워갈 예정입니다.

이 책은 만화로 되어 있어 잘 읽히고, 쉽게 설명되어 있으니 이 포스팅을 읽으신 분들도 많이 구매하면 좋을 것 같아요~

(다만... 밖에 나가서 읽기는 약간 애매하더라구요...)


1. 멋진 터미널에서 리눅스를 학습하기 위해 아래 링크에 있는 글을 참고해서 터미널을 꾸몄습니다. 

  (아무래도 예쁜 터미널에서 작업의 능률이 오르기 때문이죠!)

  ( https://beomi.github.io/2017/07/07/Beautify-ZSH/ )


2. CodeonWeb이라는 사이트를 통해서도 온라인 상으로 실습을 할 수는 있지만.... 서버가 자주 꺼져서 로컬에서 실습해보시는 걸 추천드립니다!



2편 글도 읽어주세요~ : https://brenden.tistory.com/92


(미리 보는) 명령어
  1. ssh
  2. sudo (-i, -s)
  3. grep
  4. vim
  5. yank
  6. tmux
  7. 화면분할 (tmux 상태일 때)
  8. history (+ 전방 검색, 후방 검색)
  9. .bashrc 코드 추가
  10. scp
  11. top
  12. top-추가

1화 [SSH] (다른 컴퓨터를 리모트로 조작하고 싶어)

  1. Secure Shell의 약어
  2. 다른 PC에 네트워크 경유로 로그인해서 자기 앞에 있는 PC처럼 조작 가능
  3. SSH Client와 SSH Server를 연결해주는 SSH Tunnel(통신 경로)는 암호화 되어 있어서 안전!
  4. ssh 사용자명@IP or Network명
1
2
3
ssh brenden@workstation
ssh brenden@workstation.lab.example.com
ssh brenden@192.168.43.XX
cs

  5. exit 명령어 로그아웃해서 ssh 접속 종료


2화 [sudo] (임시로 관리자 권한을 얻고 싶어)

  1. root는 관리자 권한을 가진 특별 사용자로, 파일 접근 권한을 가지고 자유롭게 변경 가능하다.
  2. 일반 관리자 사용자 : root와 같은 권한을 가지며 사전에 지정한 비밀번호를 입력한다.
  3. sudo : sudo를 사용하면 자신의 관리자 권한을 행사할 수 있다.
  4. sudo 명령어 + 실제 사용하고 싶은 명령어
1
sudo rm -rf ~/brenden/test
cs

  ※ 우분투의 경우 root로 로그인 접근을 막지만... 접근해야되는 경우가 생긴다면?
  - sudo -i , sudo su : root 권한을 빌려서 명령어를 실행할 수 있게끔 해준다.
  - (차이점) sudo같은 경우 권한을 빌리는 것이지만, sudo su같은 경우 반영구적으로 root권한을 가지게 되면서 환경변수까지도 모두 가져오게 된다.
  - sudo -s을 사용하게되면 현재 계정의 환경변수들을 root로 사용하므로 그대로 사용이 가능하다. (위 처럼 root의 환경변수까지 모두 가져오지 않고 싶을 때 사용하면된다.)
 - su , su - 와 같은 명령어도 있으니 한 번 확인하면 좋을 것 같다.


3화 [grep] (다양한 문자열을 한 번에 검색하고 싶어)

  1. 파일 내용을 빠짐없이 확인해서 찾는 문자열이 포함되어 있는지 조사해주는 명령어이다.
  2. global regular expression print가 어원으로 파일 전체에서 정규 표현식과 일치하는 위치를 출력하는 명령어이다.
  3. grep -r "검색하고 싶은 문자열" /brenden/docs/
    • -r(서브 폴더까지 검색하도록 지정하는 명령어) + "검색하고 싶은 문자열" + (찾을 파일이 있는 폴더 경로(시작점))
  4. 정규표현식을 써서 유연하게 검색도 가능하다!!
    • () : 그룹화
    • | : 좌우 중 하나
    • ? : 직전 표현이 0회 또는 1회 등장
    • * : 직전 표현이 0회 이상 연속해서 등장
    • + : 직전 표현이 1회 이상 연속해서 등장
    • . : 임의의 한 문자
    • ^ : 줄 머리
    • $ : 줄 끝
  5. 예시
1
2
ifconfig | grep inet
grep ---"()" 디렉토리 경로
cs



- ip주소 , history 검색 등에 쉽게 사용이 가능하며, -i (ignore case , 대소문자 차이 무시), -E (정규 표현식을 사용할 때 옵션) 등을 조합해서 사용이 가능합니다.



4화 [vim] (터미널에서도 대화형으로 파일을 편집하고 싶어)

  1. vim : vi의 강화판으로 텍스트 에디터이다. (설치가 되어있지 않다면 아래와 같이 사용해본다.)
    • sudo apt-get install vim
    • yum install vim
  2. 보통의 프로세스(끼워넣기 모드)
    1. 파일을 노멀 모드로 연다.
    2. I(insert)를 통해 끼워넣기 모드로 편집을 한다.
    3. ESC를 눌러 노멀 모드로 돌아가서 :wq를 입력해 저장과 종료를 한다.
  3. 검색 모드
    1. 노멀 모드에서 / + 검색할 문자열을 입력한뒤 Enter
    2. 이후 N(Next), Shift+N(반대방향으로 이동)을 통해 조작한다.
    3. 정규표현식도 /\v 를 사용해서 검색이 가능하다.

  ※ 치트 시트 : https://vim.rtorr.com/lang/ko/



5화 [yank] (vim에서도 복사 & 붙이기 & 되돌리기를 하고 싶어)

  1. vim 같은 콘솔 애플리케이션은 데스크톱 환경의 GUI 애플리케이션과 전혀 다른 규칙으로 동작한다.
    • GUI 애플리케이션의 경우 마우스로도, 키보드로도 단말 자체의 조작을 하지만, 키보드로만 할 수 있는 조작은 콘솔 자체의 조작이라고 보면 된다.
  2. vim에서의 복사 붙여넣기
    1. 비주얼 선택으로 범위를 지정 (노멀모드에서 선택 시작 위치로 커서를 옮기고 V(비주얼 모드)로 변환화살표로 범위 선택)
    2. 양크 (Y : yank(끌어당기다)를 누르면 클립보드에 텍스트가 복사)
    3. 붙이기 (Shift + P : 붙여넣기 한다.)
      1. 10을 쓰고 shift+p를 하면
  3. 되돌리기 작업
    1. 되돌리기 : 노멀모드에서 U (Undo) 입력
    2. 되돌리기의 되돌리기 : Ctrl + R (Redo) 입력
    3. '9999U'와 같이 숫자와 혼합해서 사용 가능
  4. 기타
    1. Ctrl + Z는 되돌리기가 아닌 애플리케이션을 일시 정지하고 명령어 입력 상태로 돌아가게 하는 명령어
      1. 결국 background로 실행하는 느낌
      2. fg (foreground)를 입력하면 돌아오게 된다. 



6화  [tmux] (갑작스러운 네트워크 끊김에서 복귀하고 싶어)

  1. 구조
    • 원래 : [PC] ( GNOME | 콘솔환경(ssh) ) --> [서버 콘솔환경] (vim)
    • tmux :  [PC] ( GNOME | 콘솔환경(ssh) ) --> [서버 콘솔환경] (가상단말(tmux) , vim
      • GNOME : 데스크톱 환경에서 콘솔 환경을 바라보는 창
    • 동작원리
      • SSH 접속이 끊긴 사용자가 로그아웃한 상태라도 계속 동작하는 특징을 가진다
  2. 특징
    1. 이미 존재하는 다른 조작법과 겹치기 않기 위해 Prefix Key(Ctrl + B)가 존재 (tmux 가상단말이 해당 Prefix Key만 처리한다고 보면 된다.)
      1. Ctrl + B 입력 후
        1. D (Detach)
        2. C (Create)
        3. P (Previous)
        4. N (Next)
    2.  GNODE 단말 탭이라면 그 때마다 서버의 SSH 접속해야되지만, tmux로 여러화면을 쓰면 처음 한 번만 접속하면 된다.
    1
    2
    3
    4
    5
    6
    7
    # ssh 접속 이후
    tmux
     
    # ssh 접속이 끊긴 뒤, 다시 ssh 접속한 상황일 때
    tmux attach
     
    # 접속을 끊고 싶을 때 (Ctrl + B 입력한 다음 D(detach) 입력)

    cs



    7화 [화면분할] (다른 화면도 보면서 작업하고 싶어)

    1. [주의] 화면분할을 하면, 스크롤 결과를 하나의 화면으로 합쳐서 GNOME으로 보내주기 때문에 스크롤을 하려면 다른 방법이 필요하다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # 1. 화면분할
    # => [가로 분할] Ctrl + B 이후 " 입력 
    # => [세로 분할] Ctrl + B 이후 % 입력 
    # 2. 분할된 화면의 포커스 전환
    # => Ctrl + B 이후 방향키 입력
    # 3. 화면 스크롤
    # => Ctrl + B 이후 [ 입력 후 화살표나 마우스 휠로 스크롤 가능
    # => 작업이 끝나면 Q, ESC로 원래 상태 복귀
    # 4. 분할 해제
    # => exit 입력
    # 5. 화면 크기조정
    # => Ctrl + B 이후 Ctrl + 방향키
    cs



    8화 [명령어 이력] (최근 실행한 명령어를 호출하고 싶어)

    1. Shell
      • linux에서는 bash나 dash라는 셸 사용
        • 커널 기능은 핵심이며 조금만 실수해도 시스템이 망가질 수 있어, 셸을 사용(조개처럼 속은 감추고 간단한 명령어로 대화식으로 진행을 비유)
      • 사용자가 콘솔 환경에서 대화식으로 명령을 입력하면서 사용하는 소프트웨어
      • GNOME 단말은 GUI 환경에서 셸을 실행하기 위해 사용하므로 다르다~
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 1. 명령어 이력 확인
    vim ~/.bash_history
     
    # 2. 이전, 이후 명령어 이력 호출
    # => 방향키 (위, 아래)
     
    # 3. 훨씬 전 명령어 이력 검색
    # => 후방 검색 (Ctrl + R) 이후 format 입력 (그 전 format 검색을 원하면 Ctrl + R만 재 입력)
    # => 전방 검색 (Ctrl + S) 이후 format 입력
    cs



    9화 [명령어 이력 검색] (오래전에 실행한 명령어를 호출하고 싶어)

    1. 특징
      1. 이력에서 재실행한 명령어는 새로 기록한다.
      2. 너무 오래 재실행하지 않으면 오래된 것부터 순서대로 지운다.
    2. bash 명령어 이력 구조
      1. 명령어 이력내용을 .bash_history라는 파일에서 읽어서 메모리에 복사
      2. 이후 bash에서 실행한 명령어 이력은 그 복사본(메모리)에 저장
      3. bash를 종료할 때 .bash_history에 이력을 지정
    3. .bashrc 수정
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    ## 이력 저장 건수 늘리기
    # Step 1
    vim ~/.bashrc
     
    # Step 2 : Shift + G로 파일 끝으로 이동해 다음 코드 추가
    export HISTSIZE 10000 # histsieze는 bash 세션동안 히스토리에 저장되는 명령어 수
    export HISTFILESIZE=10000 # histfilesize는 실제 히스트리 파일에 저장되는 명령어 수
     
     
    ## bash_history와 메모리 복사본을 자주 동기화
    # Step 1
    vim ~/.bashrc
     
    # Step 2 : Shift + G로 파일 끝으로 이동해 다음 코드 추가
    function share_history {
        history -a
        history -c
        history -r
    }
    PROMPT_COMMAND='share_history'
    shopt -u histappend
    cs




    10화 [scp] (네트워크 건너서 파일을 복사하고 싶어)

    1. scp
      1. Secure CoPy 의 약어
      2. 네트워크를 통해서 파일을 복사하는 명령어
      3. SSH 통신 경로를 사용해 파일을 보낸다.
      4. A, B에 SSH 통신 경로가 뚫려 있다면 A->B, B->A로 서로 파일을 복사하는 것이 가능하다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # CentOS 등의 배포판에서는 설치가 되어 있다는 것을 전제
    yum install openssh-clients
     
    # 사용법
    scp <file명> <사용자명>@<네트워크명 or IP주소>:/<복사할 곳>
     
    # 예시
    ## 1. A -> B or B -> A로 전송
    scp ./text.txt brenden@192.168.0.4:/tmp/
    scp brenden@192.168.0.4:/tmp/text.txt ~/
    scp brenden@server1:/file/ brenden@server2:/backup/
     
    ## 2. Port 지정
    scp -20000 ./text.txt brenden@192.168.0.4:/tmp/
     
    ## 3. -r (recursively) 디렉토리로 재귀적으로 복사
    scp -r brenden@192.168.0.4:/tmp/ /home/
    cs




    11화 [top] (시스템 과부하를 파악하고 싶어)

    1. 시스템 부하 상태를 조사하는 명령어
    2. 수초 간격으로 실시간으로 갱신하면서 보여준다.
      1. load average : 1분당 평균적으로 CPU가 해야될 일이 쌓이는지 나타내는 값 (CPU 코어수와 관련)
        • load average >= CPU 코어수 : 과부하 상태
        • %CPU, TIME+열 : ex) 과부하 원인 : CPU 사용률이 높다. CPU 시간이 길다.
        • COMMAND열을 본다. => C를 누르면 자세한 내역을 볼 수 있다.
        • 왼쪽 열부터 1분간/5분간/15분간의 평균값이다.
      2. 과부하의 원인이 되는 것을 kill한다.
        • 종료하고 싶은 process id를 기억한다.
        • Q로 top명령어 종료 시킨다.
        • sudo kill <process_id...>
          • 단, 명령어 실행시킨 후 안내 메시지 없다~
          • load average는 일정 시간의 평균이기 때문에 현재 상태가 반영되려면 조금 시간이 필요하다.


    12화 [top 표시 전환] (시스템 메모리 부족을 파악하고 싶어)

    1. 용어
      • 스왑아웃 : 메인 메모리가 가득차면 OS는 최근에 사용하지 않은 데이터를 하드 디스크로 옮긴다.
      • 스왑인 : 스왑아웃한 데이터가 필요해지면 하드 디스크에서 메모리로 데이터를 옮긴다.
    2. 원인 : 메모리를 점점 더 사용하면 스왑인,아웃이 반복되어 I/O 대기 시간이 길어진다 => load average 증가
      • 상단에 %MEM, Swap in & out 확인하고, %MEM열 확인~
      • 상주형 프로세스(서비스) : 기동 스크립트를 사용해야된다.
      • 결론 : 메인 메모리가 부족해지면 -> 하드 디스크로 스왑(디스크 I/O)가 자주 발생 -> 앞 선 과정이 시간이 걸려 CPU 처리가 쌓임 -> load average가 높어져서 시스템 반응이 나빠짐
    1
    2
    3
    4
    5
    # service 명령어
    sudo service apache2 restart
     
    # init.d 명령어
    sudo /etc/init.d/apache2 restart
    cs

       # OOM Killer (Out of Memory Killer) : 스왑인,아웃을 반복하다가 하드디스크가 가득차면, OS가 프로세스를 골라서 강제로 종료시키는 상황 




    # 2편도 기대해 주세요~




    '인프라 > 리눅스' 카테고리의 다른 글

    리눅스(Linux) 명령어 학습 - (2)  (0) 2019.05.07

    댓글을 달아 주세요