카테고리 위 설명


load averages : 로드 평균


시스템 스케줄러의 런 큐에 대기하고 있는 쓰레드의 개수 


일반적으로 시스템의 부하는 로드값이 높은 것을 의미함.... 차례대로 1분, 5분 15분 간의 평균 로드값을 나타냄


모든 프로세스 상태 개요 총개수와 각각의 상태를 말함


CPU : 현재 CPU 에 의해 실행되고있는 프로세스 갯수 


running  : 실행할 수 있는 프로세스 개수, On CPU 와 Running인 프로세스가 많다는 것은 시스템의 부하가 많다는 뜻


Sleeping : 외부 이벤트 /입력을 기다리공 ㅣㅆ는 프로세스 개수


Stopped : Ctrl + Z 와 같은 정지 시그널로 정지왿 ㄴ프로세스 개수 


Swapped : 디스크로 스왑되고 있는 프로세스 개수 0, 0이어야 함


Zombie : 종료는 되었지만 다른 이유로 정리되지 않고 기다리고있는 프로세스개수, 작은값 혹은 0 이어야 한다. 


CPU 상태


idle : 아무것도 하지 않음  User : 유저 프로세스 실행 



K : Kilobyte


M: Megabyte


G: Gigabyte


%: 1/100





top 실행시 나오는 카테고리


PID : 프로세스 id

-> 마지막으로 할당된 PID 


USERNAME

-> 프로세스 소유자 이름   -> 사용중인 유저 네임을 뜻함 (root 혹은 계정명)


THR

-> LWP 또는 스레드 개수 (Light-Weight Process, SUN 은 쓰레드와 LWP는 다르지만 유닉스 쓰레드가 LWP를 이용해 구현되기 때문에 비슷한 개념)


PRI

-> 우선순위 유저 프로세스의 경우 범위는 0~59 값이 높을수록 우선순위가 높음 


NICE

-> 우선순위를 결정하기 위해서 커널에서 참고하는 나이스 값 사용자가 설정할 수 있으며 설정하지 않으면 0 이 값이 낮을 경우 우선순위가 높게 측정 ㅗ딜 수 있음 


SIZE

-> 프로세스에 할당된 총 메모리  (Physical + Logical ) 


RES

-> 프로세스에 의해 사용된 물리 메모리의 양 (Resident set size)


STATE

-> CPU, RUN, SLEEP, STOP, SWAP, ZOMB 


C

-> 흠 아직



TIME

-> 프로세스가 사용한 CPU 시간 1:00 1분 동안 100% 소모  


WCPU(Weighted CPU) or CPU ( Shift C 로 변환 가능) 현재 프로세스의 총 CPU 대비 사용률 

4개의 CPU 에서 25%라 나왔다면 이중 1개의 CPU 를 100% 소비하고 있다고 해석할 수 있다.


지금 4개 쓰는데 180% 뜨면

문제 있는거 아닌가.. 뭐지;;;;


COMMAND

-> 프로세스를 실행한 커맨드.






CPU 1개당 100%로 계산 


'GNU > FreeBSD' 카테고리의 다른 글

Mouse_Control - 4 번째(Consio.h)  (0) 2016.07.04
Mouse_Control - 4 번째  (0) 2016.07.04
Unix Errno 표기  (0) 2016.07.04
Mouse_Control - 3 일차  (0) 2016.07.01
Mouse_Control - 2 일차  (0) 2016.06.30

#define EPERM   1   /* Operation not permitted      */
#define ENOENT  2   /* No such file or directory        */
#define ESRCH   3   /* No such process          */
#define EINTR   4   /* interrupted system call      */
#define EIO 5   /* I/O error                */
#define ENXIO   6   /* No such device or address        */
#define E2BIG   7   /* Arg list too long            */
#define ENOEXEC 8   /* Exec format error            */
#define EBADF   9   /* Bad file descriptor          */
#define ECHILD  10  /* No child processes           */
#define EAGAIN  11  /* Resource temporarily unavailable */
#define ENOMEM  12  /* Not enough space         */
#define EACCES  13  /* Permission denied            */
#define EFAULT  14  /* Bad address              */
#define ENOTBLK 15  /* Block device required        */
#define EBUSY   16  /* Resource busy            */
#define EEXIST  17  /* File exists              */
#define EXDEV   18  /* Improper link            */
#define ENODEV  19  /* No such device           */
#define ENOTDIR 20  /* Not a directory          */
#define EISDIR  21  /* Is a directory           */
#define EINVAL  22  /* Invalid argument         */
#define ENFILE  23  /* Too many open files in system    */
#define EMFILE  24  /* Too many open files          */
#define ENOTTY  25  /* Inappropriate I/O control operation  */
#define ETXTBSY 26  /* Text file busy           */
#define EFBIG   27  /* File too large           */
#define ENOSPC  28  /* No space left on device      */
#define ESPIPE  29  /* Invalid seek             */
#define EROFS   30  /* Read only file system        */
#define EMLINK  31  /* Too many links           */
#define EPIPE   32  /* Broken pipe              */
#define EDOM    33  /* Domain error within math function    */
#define ERANGE  34  /* Result too large         */
#define ENOMSG  35  /* No message of desired type       */
#define EIDRM   36  /* Identifier removed           */
#define ECHRNG  37  /* Channel number out of range      */
#define EL2NSYNC 38 /* Level 2 not synchronized     */
#define EL3HLT  39  /* Level 3 halted           */
#define EL3RST  40  /* Level 3 reset            */
#define ELNRNG  41  /* Link number out of range     */
#define EUNATCH 42  /* Protocol driver not attached     */
#define ENOCSI  43  /* No CSI structure available       */
#define EL2HLT  44  /* Level 2 halted           */
#define EDEADLK 45  /* Resource deadlock avoided        */
#define ENOTREADY   46  /* Device not ready     */
#define EWRPROTECT  47  /* Write-protected media    */
#define EFORMAT     48  /* Unformatted media        */
#define ENOLCK      49  /* No locks available       */
#define ENOCONNECT      50      /* no connection                */
#define ESTALE          52      /* no filesystem                */
#define EDIST       53  /* old, currently unused AIX errno*/
#define EWOULDBLOCK     EAGAIN   /* Operation would block   */
#define EWOULDBLOCK 54
#define EINPROGRESS     55      /* Operation now in progress */
#define EALREADY        56      /* Operation already in progress */
#define ENOTSOCK        57      /* Socket operation on non-socket */
#define EDESTADDRREQ    58      /* Destination address required */
#define EDESTADDREQ     EDESTADDRREQ /* Destination address required */
#define EMSGSIZE        59      /* Message too long */
#define EPROTOTYPE      60      /* Protocol wrong type for socket */
#define ENOPROTOOPT     61      /* Protocol not available */
#define EPROTONOSUPPORT 62      /* Protocol not supported */
#define ESOCKTNOSUPPORT 63      /* Socket type not supported */
#define EOPNOTSUPP      64      /* Operation not supported on socket */
#define EPFNOSUPPORT    65      /* Protocol family not supported */
#define EAFNOSUPPORT    66      /* Address family not supported by protocol family */
#define EADDRINUSE      67      /* Address already in use */
#define EADDRNOTAVAIL   68      /* Can't assign requested address */
#define ENETDOWN        69      /* Network is down */
#define ENETUNREACH     70      /* Network is unreachable */
#define ENETRESET       71      /* Network dropped connection on reset */
#define ECONNABORTED    72      /* Software caused connection abort */
#define ECONNRESET      73      /* Connection reset by peer */
#define ENOBUFS         74      /* No buffer space available */
#define EISCONN         75      /* Socket is already connected */
#define ENOTCONN        76      /* Socket is not connected */
#define ESHUTDOWN       77      /* Can't send after socket shutdown */
#define ETIMEDOUT       78      /* Connection timed out */
#define ECONNREFUSED    79      /* Connection refused */
#define EHOSTDOWN       80      /* Host is down */
#define EHOSTUNREACH    81      /* No route to host */
#define ERESTART    82  /* restart the system call */
#define EPROCLIM    83  /* Too many processes */
#define EUSERS      84  /* Too many users */
#define ELOOP       85  /* Too many levels of symbolic links      */
#define ENAMETOOLONG    86  /* File name too long             */
#define ENOTEMPTY   EEXIST  /* Directory not empty */
#define ENOTEMPTY   87
#define EDQUOT      88  /* Disc quota exceeded */
#define ECORRUPT        89      /* Invalid file system control data */
#define EREMOTE     93  /* Item is not local to host */
#define ENOSYS      109 /* Function not implemented  POSIX */
#define EMEDIA      110     /* media surface error */
#define ESOFT           111     /* I/O completed, but needs relocation */
#define ENOATTR     112     /* no attribute found */
#define ESAD        113 /* security authentication denied */
#define ENOTRUST    114 /* not a trusted program */
#define ETOOMANYREFS    115     /* Too many references: can't splice */
#define EILSEQ      116     /* Invalid wide character */
#define ECANCELED   117     /* asynchronous i/o cancelled */
#define ENOSR       118 /* temp out of streams resources */
#define ETIME       119 /* I_STR ioctl timed out */
#define EBADMSG     120 /* wrong message type at stream head */
#define EPROTO      121 /* STREAMS protocol error */
#define ENODATA     122 /* no message ready at stream head */
#define ENOSTR      123 /* fd is not a stream */
#define ECLONEME    ERESTART /* this is the way we clone a stream ... */
#define ENOTSUP     124 /* POSIX threads unsupported value */
#define EMULTIHOP       125     /* multihop is not allowed */
#define ENOLINK         126     /* the link has been severed */
#define EOVERFLOW       127     /* value too large to be stored in data type */

'GNU > FreeBSD' 카테고리의 다른 글

Mouse_Control - 4 번째  (0) 2016.07.04
COMMAND - top  (0) 2016.07.04
Mouse_Control - 3 일차  (0) 2016.07.01
Mouse_Control - 2 일차  (0) 2016.06.30
Mouse_Control - 1 일차  (0) 2016.06.29
기본적으로 운영체제는 

1. 사용자 공간


2. 커널 

두개의공간으로 나누어져 있다. 문서 편집기 익스플로러같은 응용 프로그램코드는 사용자 공간에 

있으며 네트워크 스택, 같은 OS기반은 코드는 커널에 상주한다.

커널 코드는 민감한 리소스를 관리하며 응용 프로그램 사이의 보안과 신뢰 장벽을 제공한다.

이러한 까닭에 사용자 모드 응용 프로그램은 CPU 에 의해 커널 리소스를 직접 접근하는 것을 막는다.

사용자 공간 응용 프로그램은 사용자 -> 커널로 이동하는 특별한 서브루틴 콜인 시스템 콜의 수단으로

기본 커널의 대부분의 요청을 취한다.  보통 시스템 콜 벡터와 함께 추가되며 여기서 요청자는

원하는 시스템 콜을 색인 숫자로 기억한다.  하지만 이런 시스템 콜에도 드라이버 장치는 막혀있다.

대부분의 하드웨어 주변 기기는 반드시 커널 안에서 직접 접근 하여야 한다. 

그러나 사용자 코드는 장치와 통신해야 하는 경우가 있다. 


일단 마우스 장치에 대해서 

/dev/해당 관련 마우스 장치에 파일을

open ()으로 열어서 리턴되는 fd(File descriptor) 값을 이용하여서


#include <sys/ioctl.h>

int ioctl(int fd, int request, argp);


ioctl (I/O Control)을 통해서 장치 제어를 한다. 


ioctl 의 경우 (int fd, int request, argp) 로 들어오게 된다.


fd는 open으로 인해 반환된 fd(file descriptor)

request : 드라이버에서 취해야 할 명령을 보낸다. 


성공일시 0 값 실패시 -1 반환 


-1을 얻었을시에 error 값을 참조하면 문제 확인 가능(EFAULT argp는 접근할수 없는 메모리 영역)

ENOTTY : fd는 문자 디바이스 파일과 연관되어있지 않다.


EINVAL : 디바이스파일에 연동된 드라이버가 request 또는 argp처리 불가능 


// 

int fd  ; // file descriptor


int ret;

int level = 2;

mousehw_t mhw;


fd = open=("/dev/장치명",O_RDWR);

if(fd==-1)  // -1 이면 에러

{

std::cout<<"Open Error -> Error Number : - > " ;

checking();

std::cout<<""<<std::endl;

}

std::cout<<"Current File Descriptor :: ->>>>  <<fd <<std::endl;


ret = ioctl(fd,MOUSE_SETLEVEL,&level);









'GNU > FreeBSD' 카테고리의 다른 글

COMMAND - top  (0) 2016.07.04
Unix Errno 표기  (0) 2016.07.04
Mouse_Control - 2 일차  (0) 2016.06.30
Mouse_Control - 1 일차  (0) 2016.06.29
Free BSD 유용한 명령어  (0) 2016.06.14


'GNU > FreeBSD' 카테고리의 다른 글

COMMAND - top  (0) 2016.07.04
Unix Errno 표기  (0) 2016.07.04
Mouse_Control - 3 일차  (0) 2016.07.01
Mouse_Control - 1 일차  (0) 2016.06.29
Free BSD 유용한 명령어  (0) 2016.06.14

후킹 -

컴퓨터 프로그램과 S/W 구성 요소간에 발생하는 함수 호출, 메시지 등을 중간에 바꾸거나 가로채는 방법 기술


간섭된 함수를 호출, 이벤트 를 처리하는 코드 = Hook 라고함 


후킹은 이벤트를 훔쳐오는 방식이다.  (OS의 구조를 알아야 한다.)


마우스 후킹 


OS 내에서 이동되는 마우스 를 후킹 한다. 


리눅스 자체에서 마우스를 제어 한다. 


// 


연결 마우스에 대한 파일 

   /dev/cuau%d      serial ports
     /dev/mse%d	      bus and InPort mouse device
     /dev/psm%d	      PS/2 mouse device
     /dev/sysmouse    virtual mouse device
     /dev/ums%d	      USB mouse	device

연결된 포트에 따라서 파라미터로 넘기고 이에 대한 제어를 해야 한다는 것 정도 


open(), write(), ioctl () 사용하여 sysmouse를 제어한다. mosued 에 대한 정보가 필요 


'GNU > FreeBSD' 카테고리의 다른 글

COMMAND - top  (0) 2016.07.04
Unix Errno 표기  (0) 2016.07.04
Mouse_Control - 3 일차  (0) 2016.07.01
Mouse_Control - 2 일차  (0) 2016.06.30
Free BSD 유용한 명령어  (0) 2016.06.14

저번에 1에서 작성 한 스크립트를 업무에 사용을 하여야 하는데 해당 스크립트는 동작에 대한 기본 틀만 알수 있을 뿐


업무에 사용은 할수가 없다. 


일단 가장 큰 문제는 사용할수가 없다  이다.


sudo 로 사용하였을시 비밀번호를 묻는 입력은 처음에만 나타나고 이후로는 나타나지 않을수도 있기 때문이다.


그렇기 때문에 패스워드에 대한 기대를 2번하고 2번 입력을 하게되면


scp로 파일을 받아 오는 도중에 시그널이 들어가게되면 파일 다운이 종료 되기 때문에 제대로 받아올수가 없다.


두번째 로는 정상적으로 실행이 됐다는 가정하에 


예상대로 Root비밀번호(sudo) 와 서버 계정의 비밀번호를 입력 하면 되겠지만

저 문자열이 아닌 다른 문자열(DNS ~~~ Yes/No ) 이 나오는 경우가 있을수 있다. 이에 대한 해결책으로 



(작성중)

'GNU > bashShell' 카테고리의 다른 글

UNIX Shell 정수 연산  (0) 2016.08.24
UNIX Shell while 반복  (0) 2016.08.16
expect 를 이용한 scp 자동 스크립트 작성  (0) 2016.06.23
UNIX 공백에 대한 변수명 사용시  (0) 2016.06.17
UNIX set 명령어  (0) 2016.06.15

vim-lite 를 설치 하여서 사용하다 보면 워낙 vi에 적응이 되어있어서 vim 이라고 치지 않고


vi tab(자동완성)을 하다보면 아쒸! 하면서 다시 :q! 하고 vim으로 들어오는 경우가 있다.


그럴때 alias로 별칭을 지정해서 사용한다. 뭔가 C에서 #define 느낌이랄까 ;


alias 단축명 = "커맨드" 를 지정하여서 사용 한다.


저같은 경우는 vim 대신 vi가 너무 손에 익어서 


alias vi vim 으로 하여서 vi가 습관적으로 나오지만 vim이 실행되게 한다. 


alias a vim 으로 하게되면 a가 vim을 대신하여서 사용할수 있다.


현재 별칭을 확인하기 위해서는


alias 만 입력시에 현재 별칭이 나온다. 


test@test-Test:~/test % alias

a       vim

h       (history 25)

j       (jobs -l)

la      (ls -aF)

lf      (ls -FA)

ll      (ls -lAF)

vi      vim


이런식으로 나오게 된다. 


어느날 사용도중 엄청난 실수를 하게 된다. alias vi vim 이라고 할것을


alias vim vi 라고 한것이다. 


그래서 '에 뭐야 다시 해야지 '


하고 alias vi vim 을 했다.


그리고 다시 평소처럼 사용시 Alias loop. 라는 메시지가 나타난다. 


vim vi 이고 vi 가 vim이기 때문에 뭔지 모르겠다는 그런 메시진가 보다


이 경우에 대해서 unalias 라는 커맨드가 존재한다.


alias 로 별칭을 확인후에 지울 별칭을 지정하면 된다. 


unalias vim 입력시 alias vim vi 가 사라진다.


해당 명령어는 현재 세션에만 유효하기 때문에 재부팅시 사라지게된다.


해당 alias 명령어는 alias를 지정하는 스크립트에 지정해 놓으면 재부팅해도 사라지지 않는다.


~/User/.bashrc ( or .cshrc) 계정세션


/root/.bashrc(or .cshrc) 




scp를 이용하여서 파일을 받아 온다 .치면


sudo scp -r test@192.168.1.11:~/Test/Tmp 에서 받아오는데 이 이후에


password :입력과

DNS어쩌구 머시기 yes를 해주어야 한다. 


이 부분을 매번 테스트할때마다 받아오기도 귀찮고 그냥 ./scp.sh 하면안될까 싶어서 찾아보니 expect 로 한댄다.


그래서 expect 가설치 되어있는지 확인을 하여야 하기 때문에


터미널에서 그냥 expect 라고 입력시 not found 뜨면 설치를 해주어야 한다. 


저는 Unix시스템에서 작업을 하기 때문에 Unix기준으로 보면


pkg search expect 해당 커널 버전에 따라서 이렇게 나오게 됩니다. 


 

순수 expect 입력시 not found command가 뜬다면 pkg install expect 로 설치를 해주세요 


repository 가 없다면


expect  http://www.nist.gov/el/msid/expect.cfm

tcl   http://tcl.sourceforge.net/ 에서 설치를 해주셔야 합니다.


repository 없이는 tcl까지 설치 하여야 합니다.


기본적인 루틴


spwan (지정된 어플리케이션을 실행)

send (명령 실행)

expect -re(기대 값 설정)

interact (스크립트 종료)


#!/bin/sh 으로 실행하게되면 not found가 뜰수가 있는데


sh 혹은 bash 쉘에 expect 를 넣어 서사용하는방식이


expect << EOL 을 넣어 주면 사용할수 있다.


아주 간단한것부터 시작ㅇ르 해본다.


test라는 계정으로 접속하여 192.168.1.11 서버에 /home/Test/Temp 라는 폴더를 /home/Test/Tmp 라는 폴더(현재서버)로 가져올려고 한다.

scp명령자체에 sudo를 걸어서 가져올려고 한다. 그럴시에 PassWord입력이 2개가 뜨게 된다.



그렇기 때문에 대략적인 스크립트를 적어 본다면 


#!/bin/sh/

expect << EOL

spawn sudo scp -r test@192.168.1.11:~/Test/Temp /home/Test/Tmp

expect "Password*" // 처음 나타난 메시지중에 Password로 시작하는 메시지를 기대한다.

sleep 0.5                // 0.5초 쉬고 

send "1234\r"        // 1234를 입력하고 캐리지 리턴 (\r)엔터 입력 

expect "Password*"    // 두번째 나타난 메시지 중에 Password로 시작하는 메시지를 기대한다.

sleep 0.5                //0.5초 쉬고 

send "1234\r"        //1234 입력 후 엔터 


interact


로 나타날수 있다.




해당 스크립트는 쓸모가 없다. (쓸수도 없고...)


2탄으로 다시 작성하도록 하겠습니다.





'GNU > bashShell' 카테고리의 다른 글

UNIX Shell while 반복  (0) 2016.08.16
expect 를 이용한 scp 자동 스크립트 작성 - 2  (0) 2016.06.28
UNIX 공백에 대한 변수명 사용시  (0) 2016.06.17
UNIX set 명령어  (0) 2016.06.15
UNIX Shell 조건문  (0) 2016.06.15

scp 서버간 파일 복사 에 사용되는 명령어 이며 보안성이 (ftp, sftp 등에 비해 뛰어나다) - 이에 대해서는 따로 정리


기본 사용법에 대해서만 설명한다


첫번째는 내가 갖고 있는 파일을 보낼때 


scp [option][file_location] [send_account]@IPAddress:/location


현재 서버인 192.168.0.0.1 /home/User/ 에 있는    


temp.txt 파일을 111.123.5.12(계정은 test) 에 /home/user/ports 에 보낸다고 하면


scp /home/user/temp.txt test@111.123.5.12:/home/user/ports 


반대로 서버에서 가져오는 방법도 있다.


192.168.1.11 서버에 있는 /home/Test/temp/memo.txt 파일을 가져온다고 할시에는


scp [account]@IPAddress:[download_location] [current_location]


scp test@192.168.1.11:/home/Test/temp/memo.txt .


마지막 memo.txt 띠고 . 의 의미는 현재 위치(pwd)로 라는 뜻이 된다. 절대 경로로 /home/test라고 주어도 된다.


*** 만약에 ssh 기본 포트인 22번 포트가 아닐 경우에는


scp -P 하고 포트번호를 써 주어야 한다.


scp -P 8080 test@192.168.1.11:~/temp


*** 가져오거나 보내는 파일이 폴더일 경우에는 -r 옵션을 추가한다. (mv나 cp에서 사용하는 -r의 옵션과 동일하다 하위 폴더 모두 복사 이동)


scp - r test@192.168.1.11:~/Test/temp /home/Test/temp








공백이 있는 파일명을 처리하기 위한 상황이 생겼다.


Program Files 윈도우에선 이렇게 표시되지만


유닉스에선 그렇지 않다.

Program\ Files 로 표시가 된다. 


그렇기에 사용방법은 같을 것으로 보여


_DIR_="/Program\Files/"


을 사용했지만 되지 않는다.... Program 과 Files를 따로 보게 된다.


여러번 삽질후에 찾은 결론 

#!bin/sh


_PROGRAM_DIR_="/Program Files/"


사용시에


ls $_PROGRAM_DIR_이 아닌

ls "$_PROGRAM_DIR_" 로 호출시에 따옴표로 묶어주면 된다. ㄷㄷ



'GNU > bashShell' 카테고리의 다른 글

expect 를 이용한 scp 자동 스크립트 작성 - 2  (0) 2016.06.28
expect 를 이용한 scp 자동 스크립트 작성  (0) 2016.06.23
UNIX set 명령어  (0) 2016.06.15
UNIX Shell 조건문  (0) 2016.06.15
UNIX Shell의 기본  (0) 2016.06.14

+ Recent posts