top 명령어 (실시간 CPU 사용률 체크)

Posted by ironmask84
2017. 8. 4. 16:52 나는 프로그래머다!/Linux



리눅스 명령어 중에 'top' 라는 것이 있습니다.

실시간으로 CPU 사용률 체크를 해주는 도구인데요.

리눅스를 사용하는 디바이스의 성능이나 리눅스 서버의 성능을 체크할 때 매우 유용합니다.

어떤 프로세스가 CPU를 과다하게 잡고 있는지 분석이 가능하지요 :)

기본적인 실행화면은 아래와 같습니다.


맨 윗줄부터

16:25:10 현재 서버의 시간

1user : 한명의 사용자가 접속

load average : 부하율


tasks 에서 259 total은 257개의 프로세스가 가동중

2 running 2개의 프로세스가 실행중

257 sleeping : 257개의 프로세스가 대기중

0 stopped : 0개의 프로세스가 멈춤

0 zombie : 0개의 프로세스가 좀비상태


-- CPU --

%us  : 유저 레벨에서 사용하고 있는 CPU의 비중

%sy : 시스템 레벨에서 사용하고 있는 CPU비중

%id : 유휴 상태의 CPU 비중

%wa : 시스템이 I/O 요청을 처리하지 못한 상태에서의 CPU idle 상태인 비중


-- 메모리 --

Mem:   32946200total,  25504432k used,   7441768k free,  53460k buffers 

전체 물리적인 메모리, 사용중인 메모리(used), 사용되지 않는 여유 메모리(free), 버퍼된 메모리(buffers)

Swap:  17101184k total,    11708k used,  17089476k free,  22014132k cached 

전체 스왑 메모리, 사용중인 스왑 메모리, 남아있는 스왑메모리, 캐싱메모리



-- 프로세스 상태 --

PID : 프로세스 ID (PID)
USER : 프로세스를 실행시킨 사용자 ID
PRI : 프로세스의 우선순위 (priority)
NI : NICE 값. 일의 nice value값이다. 마이너스를 가지는 nice value는 우선순위가 높음.
VIRT : 가상 메모리의 사용량(SWAP+RES)
RES : 현재 페이지가 상주하고 있는 크기(Resident Size)
SHR : 분할된 페이지, 프로세스에 의해 사용된 메모리를 나눈 메모리의 총합.
S : 프로세스의 상태 [ S(sleeping), R(running), W(swapped out process), Z(zombies) ]
%CPU : 프로세스가 사용하는 CPU의 사용율
%MEM : 프로세스가 사용하는 메모리의 사용율
COMMAND : 실행된 명령어


-- top 실행후 명령어 --

 shift + p

 CPU 사용률이 높은 프로세스 순서대로 표시

 shift + m

 메모리 사용률이 높은 프로세스 순서대로 표시

 shift + t

 프로세스가 돌아가고 있는 시간 순서대로 표시

 - k

 프로세스  kill  - k 입력 후 종료할 PID 입력 signal을 입력하라고 하면 kill signal인 9를 입력

 - a

 메모리 사용량에 따라 정렬

 - b

 Batch 모드 작동

 - c

 명령행/프로그램 이름 토글

 - d

 지연 시간 간격은 다음과 같다. -d ss. tt (seconds.tenths)

 - h 

 도움말 

 - H

 스레드 토글

 - i

 유휴 프로세스 토글

 - m

 VIRT/USED 토글

 - M

 메모리 유닛 탐지

 - n

 반복 횟수 제한 : -n number

 - p

 PID를 다음과 같이 모니터 : -pN1 -pN2 ... or -pN1, N2 [, ...] 

 - s

 보안 모드 작동

 - S

 누적 시간 모드 토글

 - u

 사용자별 모니터링 : -u somebody

 - U

 사용자별 모니터링 : -U somebody

 - v

 version

 space bar

 refresh

 - u

 입력한 유저의 프로세스만 표시 - which u

 숫자 1

 CPU Core별로 사용량을 보여준다.

 

 


 

grep 명령어 - 문자열 패턴 검색

Posted by ironmask84
2017. 7. 7. 14:14 나는 프로그래머다!/Linux


Unix/Linux 문자열 패턴 검색 (grep)


  패턴 검색 [grep] 

grep 명령은 파일 내에서 지정한 패턴이나 문자열을 찾은 후에, 그 패턴을 포함하고 있는 모든 행을 표준 출력해 준다. 물론, 한 디렉토리 내에서 지정한 패턴을 포함하는 파일을 출력할 수도 있다. grep 명령은 하나 이상의 파일로부터 프로그램 수정 등을 위해 변수, 또는 함수명을 찾을때 많이 사용된다. 



  grep 명령의 기본 문법 

grep [-옵션] 패턴 파일명 


   옵션

-c : 패턴이 일치하는 행의 수를 출력 

-i : 비교시 대소문자를 구별 안함 

-v : 지정한 패턴과 일치하지 않는 행만 출력 

-n : 행의 번호를 함께 출력 

-l : 패턴이 포함된 파일의 이름을 출력 

-w : 패턴이 전체 단어와 일치하는 행만 출력 


   사용 예 

$ grep -n '삼성' token_dic

= token_dic 이라는 파일내에서 '삼성' 이라는 패턴이 들어간 문자열과 행번호를 출력 


$grep -l '삼성' * 

= 현재 디렉토리의 모든 파일에서 '삼성' 이라는 패턴이 들어간 파일의 이름을 출력 


$grep -v '삼성' * 

= 현재 디렉토리의 모든 파일에서 '삼성' 이라는 패턴이 들어가지 않은 행을 출력


$grep -r '삼성' * 

= 현재 디렉토리 및 서브디렉토리의 모든 파일에서 '삼성' 이라는 패턴이 들어간 문자열 출력



  패턴의 정규 표현식(Regular Expression) 

패턴 지정에서 사용되는 정규 표현식은 작은 따옴표 (' ')로 묶어서 표현한다. 

$ grep '^a' 파일명 

= ^는 파일의 시작을 나타냄. 파일에서 a로 시작하는 행을 찾는다. 

$ grep 'apple$' 파일명

= $는 파일의 끝을 나타냄. 파일에서 e로 끝나는 행을 찾는다. 

grep 'app*' 파일명 

= 파일에서 app로 시작하는 모든 단어를 찾는다. 

$ grep 'a.....e' 파일명 

= 파일에서 a로 시작하고 e로 끝나는 7자리 단어를 찾는다. 

$ grep [a-d] 파일명 

= 파일에서 a,b,c,d 로 시작하는 단어를 모두 찾는다. 

$ grep [aA]pple 파일명 

= 파일에서 apple 또는 Apple로 시작하는 단어를 모두 찾는다.

$ grep 'apple' d*

= d로 시작하는 모든 파일에서 apple 를 포함하는 모든 행을 찾는다. 

$ grep 'apple' 파일명1 파일명2 

= 지정된 두개의 파일에서 apple 를 포함하는 모든 행을 찾는다. 

$ grep '^[ab]' 파일명 

= 파일에서 a나 b로 시작되는 모든 행을 찾는다. 



출처: http://ra2kstar.tistory.com/100 [초보개발자 이야기.]

 

vi 편집기 기본 명령어

Posted by ironmask84
2017. 7. 7. 10:19 나는 프로그래머다!/Linux


vi 실행

  vi [파일명] : 기존 파일을 열거나 새로운 파일을 작성

  vi +<숫자> [파일명] : <숫자>행에 해당 파일 열기

  vi +/"검색어" [파일명] : 파일을 열어서 "검색어"의 처음 발견된 단어에서부터 

  vi -r [파일명] : 손상된 파일 복구

  view [파일명] : 읽기 전용으로 파일 열기


편집기 상태에서 커서의 이동 관련 단축키

  h(←) : 커서를 왼쪽으로 이동

  j(↓) : 커서를 아래쪽으로 이동

  k(↑) : 커서를 위로 이동

  l(→) : 커서를 오른쪽으로 이동

  w : 한 단어 오른쪽으로 커서 이동

  b : 한 단어 왼쪽으로 커서 이동

  ^ : 라인의 처음으로 이동

  $ : 라인의 마지막으로 이동

  H : 화면의 맨 위로 이동

  M : 화면의 중간으로 이동

  L : 화면의 맨 아래로 이동

  Ctrl + F : 한 화면 뒤로 이동

  Ctrl + D : 반 화면 뒤로 이동

  Ctrl + B : 한 화면 앞으로 이동

  Ctrl + U : 반 화면 앞으로 이동


편집기 상태에서 문자 삽입 관련 단축키

  a : 커서 오른쪽에 문자 삽입

  A : 커서 오른쪽 행의 끝에 문자 삽입

  i : 커서 왼쪽에 문자 삽입

  I : 커서 왼쪽 행의 처음에 문자 삽입

  o : 커서 아래에 행 삽입

  O : 커서 위에 행 삽입

  Esc키 : 입력 상태에서 편집기 상태로 전환


편집기 상태에서 텍스트 변경하는 단축키

  cw : 단어 바꾸기

  R ; 현재 커서 위치부터 바꾸기

  r : 커서 위치 문자를 다른 문자로 바꾸기

  ~ : 대,소문자 변경

  J ; 현재 행과 아래 행 결합

  u : 이전 명령 취소

  x : 커서 위치 문자 삭제

  dw : 커서 위치 단어 삭제

  dd ; 커서 위치 행 삭제

  D : 커서 오른쪽 행 삭제

  : 5, 10 d   : 5-10번째 삭제


편집기 상태에서 텍스트 복사 및 이동

  yy : 커서 위치 행 복사

  <숫자>y : 커서 위치로부텨 <숫자>행 복사

  p : 붙여넣기

  : 1,2 co 3  : 1-2행을 3행으로 복사

  : 4,5 m 6   : 4-5행을 6행으로 이동


편집기 상태에서 행 번호 설정

  :set nu   : 행 번호 표시

  :set nonu : 행 번호 숨기기


편집기 상태에서 행 찾기

  G : 파일의 마지막 행으로 가기

  21G : 파일의 21번째 행으로 가기

  :<숫자>  : <숫자> 라인으로 가기


편집기 상태에서 파일을 파일로 삽입

  :r [파일명]   : 커서 다음에 파일 삽입

  :34 r [파일명]  : 파일을 34번째 행 다음에 삽입


편집기 상태에서 저장 및 종료

  ;q  : 변경한 내용이 없을 경우 종료

  :q!  : 변경한 내용이 있더라도 저장 없이 강제 종료

  :w  : 변경한 내용 저장

  :w! : 읽기 전용 파일이라도 변경한 내용 강제 저장

  :wq   or  :x   : 저장 및 종료

  :wq!  : 강제 저장 및 종료




vi 설정 ($ vi ~/.vimrc) (출처: http://ra2kstar.tistory.com/100 [초보개발자 이야기.])

유저 홈 디렉토리에서 '.vimrc' 파일에서 설정 가능

자동 들여쓰기

set autoindent 


C 프로그래밍을 할때 자동으로 들여쓰기

set cindent  


검색할 때 문서의 끝에서 다시 처음으로 돌아가지 않게 하기

set nowrapscan  


백업 파일을 만들지 않기

set nobackup 


키를 잘못눌렀을 때 삑 소리를 내는 대신 번쩍이게 하기

set visualbell  


화면 우측 하단에 현재 커서의 위치보기

set ruler 


Tab을 눌렀을 때 8칸 대신 4칸 이동

set tabstop=4  


자동 들여쓰기를 할때 4칸 들여쓰기

set shiftwidth=4  


한글 처리를 하기위한 구문 

if $LANG[0] == `k' && $LANG[1] == `o'

set fileencoding=korea

endif


문법 강조 기능

if has("syntax")

syntax on " Default to no syntax highlightning 

endif



 

리눅스 기본 명령어 정리

Posted by ironmask84
2017. 7. 7. 10:08 나는 프로그래머다!/Linux


리눅스에서는 많은 명령어를 지원합니다.
저도 아직 배워가는 단계로 부족한게 많아요 ㅎㅎ
혹시 보시고 이상한게 있으면 댓글로 알려주세요~~


명령어 기초편

하위폴더 및 모든 파일을 복사하기
cp -rf ./../../mh.bae/VS950/vs950_ics_git/svlte_modem/ .  

하위폴더 및 모든 파일을 지우기
rm -rf svlte_modem

ls -l => 좀 더 구체적인 정보 제공(파일형태와 사용권한, 하드링크번호, 소유자, 그룹, 파일크기, 시간, 연도, 파일명)

file 파일명 => 파일의 정보 보여줌

경로명 쓰다가 Tab 2번 하면, 뒷경로 자동 완성

cd ../폴더명 => 상위로 갔다가 폴더명의 하위폴더로 이동

mkdir -p 경로명 =>  하위경로명으로 depth를 길게 해서 만들 경우, 없는 폴더가 있으면, 알아서 확인해준다.


자주 사용할만한 명령어

0. Screen 걸어놓기 (터미널 창 닫아도 됨)

-> screen -R 설정할이름

    screen 창 에서 실행할 명령어 수행시킴

    ctrl + A + D 로 screen 빠져나감

    screen -list 목록에서 확인

    list목록에서 숫자가 붙은 full name을 복사해서 screen -R 이름 으로 다시 들어갈 수 있음.

    exit 로 screen 빠져나가면 됨.

    

1. find 로 이름 기준 검색하기

ex) find . -name '*webidl*'


2. grep 으로 파일내 특정 단어로 검색하기

-> grep -wrns "검색어" *

(*는 모든 파일에서 찾겠다는 것임.  , 옵션은 하위폴더 등등 으로...)


3. repo forall -c git clean -xdf  클린


4. fuser -m 디렉토리 및 파일명 --> 해당 path에 rw시도중인 pid 알려줌

   위 명령어에서 검색된 pid를 가지고,

   ps | grep pid명  --> 해당 pid 정보


5. 압축하기 :   tar -cvzf 파일이름 압축할파일 혹은 /디렉토리

   압축풀기 :   tar -xvzf 파일이름  


많은 소스파일을 인덱싱해서 편리하게 파악하는 방법 (Source Insight 같은 기능)

ctags -R => 현재 폴더 하위까지 범위로 해서 tags 파일 생성

(리눅스코드는 ==>ctags -R --language-force=c++)

---> vim 으로 tags가 있는 폴더에서 해당 폴더나 하위폴더의 파일들을 vim으로 열면, 

        ctrl + ] : 정의 따라가기

        ctrl + T : 되돌아가기

        ctrl + W + F : 헤더파일 따라가기

        vim -t 함수명 : 함수명있는 곳으로 tag jump  (set cst, set tag+=/경로명/tags  를 .vimrc에 추가해야 가능)




========================================================================

명령어 응용편

df

하드 디스크의 용량이 얼마나 남아 있는지 확인하는 명령어

-a : 디폴트로 생략된 0 브록 크기의 파일 시스템도 보여줌

-i : 파일 크기를 블록 대신 inode 디스크 정보를 보여줌

-k : 파일 크기를 킬로바이트(kb) 보여줌

-T : 파일 시스템의 종류와 디스크 정보를 보여줌

-t : fstype 값을 가진 파일 시스템에 대한 디스크 정보

-h : 쉬운 용량 표시 단위로 표기( : 1G 250M 1K)

 

ps

작동중인 프로세스 상태 체크하기

-l : 포맷으로 출력

-u : 실행한 유저와 실행 시간을 표시

-j : "job"형식으로 표시

-s : 시그널(signal) 포맷으로 표시

-m : 메모리 정보 표시

-a : 다른 유저의 프로세스 현황 표시

-x : 터미널 제어없이 프로세스 현황을 표시

-ef : 가장 많이쓰는 옵션이죠 ^^

 

kill

실행중인 프로세스를 재활성화하거나 완전히 죽이고자 쓰이는 명령

-1, -HUP : 프로세스를 재활성화함

-9 : 프로세스를 강제로 죽임

 

로그인 화면 바꾸기

/etc/issue -> 콘솔접속시(로컬)

/etc/issue.net -> 원격접속시

/etc/motd -> 로그인 성공시

/etc/rc.d/rc.local -> 부팅시

 

RPM 패키지 설치 확인 설치 경로 확인하기

rpm -qa 패키지명 -> 설치 확인

rpm -ql 패키지명 -> 설치 경로 확인

 

시스템 사용자 보기

현재 시스템에 어떤 사용자가 접속되어 있는지 확인하려면  w, who, finger  명령을 실행하면 된다.

 

커널 메시지 보기

dmesg, cat /var/log/dmesg, cat /var/log/messages

 

사용중인 커널 버전 알아보기

uname -r , uname -a

 

최신 커널 버전 벙보 알아보기

finger @finger.kernel.org

 

시스템 하드웨어 정보 보기

cat /proc/cpuinfo -> CPU

cat /proc/meminfo -> Memory

cat /proc/interrupts -> interrupts

 

작동중인 커널 모듈 확인하기

/sbin/lsmod 명령을 실행

 

패킷 전달 과정 체크

traceroute

 

NTFS 모듈 설치하기

페도라 코어에서는 윈도우 NT 계열의 파일 시스템(NTFS) 지원하지 않으므로, 윈도우 엑스피 파티션을 마운트하려면 ntfs모듈을 설치해야 합니다.

yum install ntfs-3g

 

badblocks 이용한 하드 디스크 불량블럭 검사

badblocks -s /dev/sda

 

업데이트된 커널 소스 설치

yum install yum-utils

yumdownloader --source kernel --enablerepo updates-source


========================================================================

** adb shell 기준

1. cat /proc/kmsg > /persist-lg/kmsg.txt   <== kmsg를 /persist-lg/kmsg.txt 에 저장

2. logcat > /persist/log.txt       <== Android log를 /persist/log.txt에 저장

3. ps -aux | grep 프로세스명 <= 해당 프로세스의 정보를 보여줌

   pstree <= 현재 실행중인 프로세스를 tree로 보여줌 (부모-자식 관계)

4. adb 안될때, 

    adb devices

    adb kill-server

    adb start-server

    또 안되면 재부팅

5. kill -9 PID

    kill -l  <= signal 번호가 나온다??

6. logcat & => &을 옵션으로 두면, 해당 명령이 죽지않고, 백그라운드에서 돌게된다.

7. prop 파일 내용 수정해서 적용하기

단말에 존재하는 system/build.prop

Cmd> adb root

Cmd> adb remount

Cmd> adb pull system/build.prop

Cmd> 다음과 같이 수정함

ro.product.model=LG-F180L

ro.product.manufacturer=LGE

Cmd> adb push build.prop /system/

Cmd> adb reboot

 

Linux 명령어와 시스템보안

Posted by ironmask84
2017. 3. 3. 18:23 컴퓨터공학/Security


1. ls (디렉터리, 파일 정보 출력)
-> 1) 파일종류, 접근권한  2) 하드링크수  3) 소유주  4) 소유그룹  5) 크기  6) 최종 변경일  7) 최종 변경시간  8) 이름

2. stat (i-node 속성정보 출력)
-> 1) i-node number  2) 파일타입  3) 접근권한  4) link count  5) 소유자  6) 소유그룹  7) 크기  8) MAC Time  
    9) Block Index
    ln source_file target_file : 하드링크 
    ln -s source_file target_file : 심볼릭링크 (소프트 링크)

3. find (파일 검색)
-> find path [expression] [action]
    1) find . -name "*.c" : 현재 디렉터리에서 파일명이 .c로 끝나는 파일 검색
    2) find . -size +56 : 현재 디렉터리에서 파일 크기가 56블록보다 큰 것을 검색
    3) find . -perm -664 : 현재 디렉터리에서 user와 group에 읽기 및 쓰기 권한, other에 읽기 권한이 있는 파일 검색
    4) find . -mtime +3 : 현재 디렉터리에서 파일을 수정한지 3일이 지난 것을 검색

4. touch : 0byte 파일을 생성 또는 파일의 시간을 변경

5. umask : 파일 생성 시 접근권한에 영향을 미침 (/etc/profile 에 적용, 개인은 .profile에 적용)

6. diff : 파일이 동일한지 여부를 검사

7. comm : 파일을 비교할 때 사용 (한쪽에만 있거나 양쪽 모두에 있는 행 출력)

8. grep : 파일 내 특정 패턴이나 문자열을 검색

9. ps : 시스템에 상주중인 프로세스 정보 출력
-> UID, PID, PPID, STIME(프로세스 시작 시간), TTY(프로세스가 연결된 터미널), TIME(CPU 사용시간), CMD(프로세스명)

10. 시그널 : UNIX 시스템에서 지원하는 소프트웨어 인터럽트, 프로세스간 통신수단
-> 1) 외부에 의해서 : 키보드 입력 (ctrl + c)
    2) (커널)에러에 의해서 : divde zero 오류, 메모리 참조 오류
    3) 이벤트에 의해서 : alarm() 함수, 프로세스 종료
    4) 인위적으로 : kill() 함수, kill 명령어 (kill -시그널번호 PID)
  * 주요시그널 : SIGKILL(9), SIGSTOP(23) 이 2가지는 무시나 핸들링이 불가능하므로 관리자가 해커를 막기위한 강력권한
  * 좀비프로세스 : 프로세스 수행을 종료했지만 부모 프로세스가 종료상태정보를 확인하지 않아서 소멸하지 않고
                        남아있는 프로세스
  * 고아프로세스 : 자식프로세스가 살아있는 상태에서 부모 프로세스가 종료하게 되면 자식프로세스는 고아프로세스 됨.

11. mount : 보조기억장치에 설치된 파일시스템을 UNIX시스템이 인식하도록 특정 디렉토리에 논리적으로 연결시킴

12. cron : 정기적 처리할 작업을 crontab명령으로 crontab파일에 저장, cron데몬 프로세스가 관리
              해커가 주기적으로 정보를 빼돌리는 데에 사용도 가능하다. -> crobtab 파일 관리 필요

13. /etc/passwd : account / password(x로표시) / user_ID / group_ID / comment / home_directory / login_shell
    /etc/shadow : account / encrypted_password / last_change / minlife / maxlife / warn / inactive / expires
      ** chage 명령어로 패스워드 Aging관련 설정을 할 수 있다. -> /var/log/secure파일에 로그가 남는다.

14. setuid, setgid (chmod ug+s)
   1) setuid, setgid 설정된 경우 -> RUID == EUID,  RGID == EGID
   2) setuid, setgid 설정되지 않은 경우
   -> RUID, RGID = 실행시킨 사용자의 ID
       EUID, EGID  = 실행파일 소유자의 ID (프로세스가 실행중인 동안에 접근권한을 판단하기 위한 ID)
* root소유의 실행파일에 setuid를 설정하면, ruid는 실행자의 id, euid는 root id로 설정이 된다. 
  따라서, 실행 프로그램 내에 euid 설정에 따라 root권한으로 접근하게 된다.

* sticky bit (chmod o+t)
-> 디렉토리에 설정이 되면, 파일의 생성은 자유롭게 할 수 있지만
    파일 삭제 및 파일명 변경은 파일소유자 또는 root만이 가능하다.