본문 바로가기
주경야독

[OS/리눅스] 만화로 배우는 리눅스 시스템 관리 1

by 하늘의흐름 2017. 10. 8.
반응형
만화로 배우는 리눅스 시스템 관리 1 - 10점
Piro 지음, 서수환 옮김/길벗




만화로 되어 있어서 가독성이 매우 좋았다.

그래서 기술적인 내용이 나와도 큰 어려움 없이 이해할 수 있었다.

명령어에 익숙해지는 것은 리눅스를 더 만져봐야겠지만

이 책으로 인해 리눅스에 자신감이 생긴 것은 확실하다.

한권이 더 있는데, 그것도 추후에 마져 봐야겠다.


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

 X사용하기 : 리눅스(우분투) GUI 띄우기

 ssh -Y -C user@192.168.11.5


 -Y는 X 전송지정

 -C는 통신내용 압축(응답속도가 좋아짐)


 nautilus 명령어

 -> 폴더가 열림


 SSH(Secure SHell;안전한 셸) = rsh(Remote SHell)



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


 root 관리자 권한 -> id가 정해져 있어서 보안 상 사용을 권장하지 않음.

 대신에 일반관리자를 사용함. root에서 계정에 관리자 권한을 부여할 수 있음

 혹은 sudo 명령어를 이용하여 관리자 권한으로 실행이 가능함


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


grep 검색 명령어


grep-r "검색하고 싶은 문자열" /hoe/docs/


-r은 서브 폴더까지 검색하도록 지정한 옵션


grep은 golbal regular expression print가 어원.


정규표현식에서 쓰는 기호

() 그룹화

| 좌우중 하나

? 직전 표현이 0회 또는 1회 등장

* 직전 표현이 0회 이상 연속해서 등장

+ 직전 표현이 1회 이상 연속해서 등장

. 임의의 한 문자

^ 줄 머리

$ 줄 끝



grep의 그외 옵션

-i 대소문자를 무시 (ignore case)

-E 정규표현식 사용


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

Esc 노멀모드로 복귀 

:wq 쓴 글 적용

/ 검색모드 (검색시 정규표현식도 사용가능)

n 다음 검색

Shift + n 이전 검색


치트시트 http://vim.rtorr.com/lang/ko/





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


복사

v 비주얼 모드(복사가능)

비주얼 모드에서 커서로 범위를 정한다.

y 양크(yank: 끌어당기다) - 클립보드에 텍스트 복사


붙여넣기

shift + p 붙여넣기

10 shift + p 붙여넣기 (지정한 숫자 만큼 붙여넣기가 가능함)


되돌리기(undo)

u

9999 u : 처음으로 되돌리기 (숫자를 지정한 만큼 되돌아간다)


되살리기(redo)

Ctrl + R



crtl + z : 애플리케이션 일시 중지 (background;대기상태로)

fg : 애플리케이션 복귀(foreground;포그라운드)


6화 갑작스러운 네트워크 끊김에서 복귀하고 싶어(가상 터미널) 


tmux : 가상 단말 프로그램 ( 다른 종류도 있다. 

screen:가장 오래된 가상 단말. 사용법이 조금 어렵다.

byobu:병풍에서 유래한 이름. 사용이 용이하지만, 다른 애플리케이션에 영향을 많이 준다.)

-> 명령어를 찾지 못할 경우 sudo apt-get install tmux로 사용가능

-> yum의 경우 RPMForge 저장소를 사용해야 함


tmux attach : 복귀 명령어


Ctrl + b : tmux 기능 호출 키

 d : detach

 c : create, 새 탭 열기

 p : previous, 이전 탭

 n : next, 다음 탭





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


ctrl + b

 " 가로 분할

 % 세로 분할

 방향키를 이용해서 화면이동 가능

 (화면 안에서 추가로 분할도 가능. 이때 현재 커서가 있는 화면이 분할 됨)


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

 위 방향키 : 예전이력

 아래 방향키 : 최신이력


 ctrl + r : 이력 검색(후방검색)


 ctrl + s : 이력 검색(전방검색)

  전방검색은 별도의 설정이 필요함. vim ~/. bashrc 에서 bash설정을 수정함.

  shift + g(맨 밑으로 이동)를 입력하여 하단에 stty stop undef 를 추가

  -> 설정을 변경한 후에는 접속을 끊고 재접속을 해야 반영이 됨.

  -> 가상 단말은 반영이 늦다. 빠르게 반영될 수 있도록 반영빈도를 고쳐야 한다.



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


 이력 저장 건수 변경 

 vim ~/. bashrc  에서 맨 밑으로 이동해서, 

 export HISTSIZE=10000

 export HISTFILESIZE=10000

 을 입력. 중요한 것은 두 변수의 값이 동일해야 한다는 것.


.bash_history 명령어 이력 내용 저장 파일


설정파일에 다음 내용을 추가(메모리 복사본을 자주 동기화)


function share_history{

history -a

history -c

history -r

}

PROMT_COMMAND='share_history'

shopt -u histappend



셸명령어가 하나일 때 쉽게 처리하는 방법

mint@mintpc:~$ ssh mint@server /scripts/scripts/do_backup.sh


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

 Centos 등의 배포판에서는 yum install openssh-clients로 설치해야 함


scp ./file/ext mint@192.168.1.10:/tmp/ 특정 컴퓨터에 파일 복사 가능

scp mint@192.168.1.10:/temp/file/txt 역으로도 가능함.컴퓨터의 파일을 다운로드


scp -r mint@host:/tmp/results/ /tmp/

-r 옵션을 사용하면 디렉토리째로 복사가 가능함.


응용하여 서버끼리도 파일전송이 가능함

또 다른 PC에서 중계하여 서버-> PC -> 서버로 넘기는 것도 가능함. 다만 속도가 느림.


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


 top 명령어로 리눅스 서버의 상태를 볼 수 있다.

 load average : cpu가 처리하는 걸 기다리는 작업 개수

(0.1~0.2은 처리량이 적고, CPU 코어수와 같거나 크면 많은 것임)

(또한 1분간 평균, 5분간 평균, 15분간 평균 이렇게 3종류로 출력됨)

 %cpu 프로세스의 cpu점유율 

 +time 처리시간

 command 프로세스를 실행했을 때 실행한 명령어, 자세히 보려면 c를 누른다.


sudo kill 1234 로 프로세스를 죽일 수 있음, 1234는 pid(프로세스id)를 의미함

-> 복수개의 프로세스를 죽일 시에는 뒤에 프로세스 id를 추가로 적어줌



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


 cpu문제가 아닌 경우

 디스크 I/O 문제 : swap값이 큰 경우

 %MEM : 프로세스가 소비하는 메모리량. 


OOM Killer : 메모리 사용이 지나친 경우 리눅스에서 자체적으로 프로세스를 죽임


top 표시를 소비 메모리 순서대로 나열하기

 shift + m : 메모리 소비량으로 정렬(큰 값이 먼저 보임)

 shift + t : cpu 시간으로 정렬

 shift + p : cpu 사용량으로 정렬



13화 로그 파일에서 필요한 줄만 뽑고 싶어(파이프라인) 


 파이프라인은 | 이런 문자를 말하는데, 명령어와 명령어를 연결하는 역할을 한다.


 압축풀기 명령어들

  cat : 비압축 텍스트

  zcat : gzip용 압축풀기(.gz, .tgz)

  xz : xz 파일 압축풀기

  unzip : zip파일 압축풀기



tail -F access.log : 최신 로그 조회

Ctrl + c : tail 출력 중단

tail -F access.log | grep "/retro" | grep -v "/live" : 특정 조건으로 조회


cat 명령어(catenate;연결하다에서 유래) : 여러개의 파일을 한번에 출력해서 봄.

tcat : 역순으로 출력


14화 작업 절차를 자동화하고 싶어(셸 스크립트) 


#!bin/bash :셔뱅(shebang, Hash-Bang), bash용 스크립트라는 의미


다른 스크립트들(bash, zsh, perl, python, node, ruby)


chmod +x x setup.sh : 실행권한 설정


if [ $? != 0]; then exit; fi : 에러시 중단하는 명령어

  

15화 같은 문자열을 스크립트에서 재사용하고 싶어(셸 변수)


 %s/원문/수정문 : vim에서 치환명령어

 log=/ver/log/apache2/access.log : 변수에 값 지정 하기

 $log : 변수 호출


 tar_extact="tar xfv"

 eval "$tar_extact file.tar.gz" : 변수에 명령어 지정 가능


 스크립트의 각줄이 너무 긴 것보다는 80자 이내가 되도록 하는 게 매너라고 함.(가독성차원)


16화 작업 환경과 상태를 정해서 스크립트를 실행하고 싶어(환경 변수)


 env : 현재 사용가능한 환경변수 목록


 HOME 현재 사용자의 홈 디렉토리

 PWD 현재 디렉터리 작업 디릭터리

 EDITOR 정해진 텍스트 에디터 경로 (vim)

 PAGER 정해진 페이지 경로

 USER 현재 사용자의 사용자명

 GROUP 현재 사용자의 그룹명

 HOSTNAME 머신의 호스트명

 


 $(date +%y%m%d) -> 160622

 $(date +%Y-%m-%d) -> 2016-06-22


 명령어 중첩

 $(명령어$(명령어))


17화 로그 파일에서 필요한 줄만 뽑고 싶어(cut)


 cat /var/log/apache2/access.log | grep -v "/live" l cut -d " " -f 7 | less


cut은 넘어온 값을 구분자

(-d 옵션에 지정한 문자, 옵션을 지정하지 않으면 기본 구분자로 탭문자 사용)로 분할 함

-f 옵션으로 숫자로 지정한 문자만 모아서 표시한다.



18화 같은 내용의 줄을 세어보고 싶어(sort와 uniq) 

 uniq -c 

 uniq는 중복을 제거함을 의미.

 -c는 -count 옵션과 같다. 


sort 

 오름차순 : 작은 것부터 시작해서 마지막에 가장 큰 것이 온다.

 내림차순 : 큰 것부터 시작해서 마지막에 가장 작은 것이 온다.

 즉 값이 커지는가가 기준이 됨. 값이 커지면 오름차순, 작아지면 내림차순


sort --reverse -r :내림차순



tail -n +6 6번째 이후부터 출력

tail -n -5 뒤에서 5줄을 제외한 나머지 출

head -n 5 앞에서 5줄째부터 출력

tail -n 5 뒤에서 5줄째부터 출력

 

19화 CSV 파일을 열의 내용에 따라 정렬하고 싶어(sort와 리다이렉트) 


 sort 

 --field-separator 구분자지정

 -t 구분자지정

 --key 열번호 지정

 -k 열번호지정

 --number 숫자정렬

 -n 숫자정렬

 --ignore-leading-blanks 스페이스무시

 -b 스페이스무시


 > : 리다이렉트, 명령어 실행결과를 파일로 저장함

 명령어 > /tmp/retro-access.log

 

 

20화 명령줄 지정으로 작업 내용을 바꾸고 싶어(명령줄 인수)


 인수값설정 

 첫번째 인수: $S1 

 두번째 인수: $S2 

 세번째 인수: $S3 ...


#옵션 이름으로 값 받는 방법

while getopts b:n:p:o: OPT

do

 case $OPT in

  b) base="SOPTARG" ;;

  n) next="SOPTARG" ;;

  p) previous="SOPTARG" ;; #-p 값을 previous로 참조가능

  o) output="SOPTARG" ;;

 esac

done


21화 조건에 따라 처리 흐름을 바꾸고 싶어(조건 분기)


 if [ $# = 2 ]

 then

  echo "hello!"

 fi

 #각각을 인수로 인식함으로 붙여쓰기하지 말고 띄어쓰기 해야 함



22화 명령어 이상 종료에 대응하고 싶어(종료 상태)


$? #직전 명령어의 성공여부를 확인할 수 있는 변수, 0이 나오면 정상종료이며, 0이 아니라면 오류임.

    #일반적인 오류는 1로 표시하며, 프로그램에 따라 0~255까지의 오류 변수가 나올 수 있음.


23화 같은 처리를 반복해서 실행하고 싶어(for) 

 for filename in *.log \

   *.txt

 do

 ./create-report.sh $filename

 done



for 반복문을 한줄로 작성할 때 주의할 점
for file in date log scripts; do echo $file; done
if [ $1 = "" ]; then echo $1; fi

for xx, do xx, if xx, then xx가 한 묶음!

24화 공통 처리를 계속 재사용하고 싶어(셸 함수)


#!/bin/bash
hello(){
 echo "안녕"

 echo "호걸입니다"

 echo "잘부탁해요"
}

hello
hello
hello

return #함수 종료를 명시하는 것으로 쉘 함수에서만 이렇게 사용함.

#중요한 함수라면 함수로 만들어서 제일 위에 위치시킬 수도 있다. 예를 들어 main()함수라던지.

함수에서 인수를 사용할 경우, 변수를 따로 만들어서 사용한다.

target=$1





반응형

댓글