728x90

원본 : http://dbckdgns0515.tistory.com/178 
작성자 : 유창훈 님

grep 옵션 문자열  찾을경로

grep root /etc/*    
           이렇게 하면 root가 포함된 파일이름과 해당라인이  다 출력된다

grep -n root /etc/*    
            이렇게 하면 root가 포함된 파일이름과 해당라인과 라인 번호가  출력된다


grep -l root /etc/* 
           : root가 포함된 파일 의 절대경로만  출력된다.
(한 파일안에 여러번 root가 들어가있어도 한번만 표시된다)

 


grep -v "test" /etc/passwd
           : test라는 단어가 포함된 줄은 제외하고 출력한다. 보통  파이프라인 뒤쪽으로
써서 결과를 필터링할때 사용한다.
            cat /etc/passwd | grep -v "test"  이런식으로

 


grep "^test" /etc/passwd
            : test로 시작하는  라인만 출력한다. 역시 필터링으로 주로 사용한다.

cat /etc/passwd | grep "^test"   

 


grep "test$" /etc/passwd
             :test 로 끝나는 라인만 출력한다.

 

grep "test..." /etc/passwd

: testxxx와 같이 test뒤에 3개의 문자가 더 같이오는 문자열 형태와 정확하게 일치하는 유형을 찾고자 할때 사용한다.
단순 testxxx와 같은 문자열을 검색하고자할때는 차라리 그냥 옵션없이 grep -n test /etc/passwd 하는게 낫고,특별히 띄어쓰기가 앞이나 뒤에 포함되어있는 문자열 "test   "와 같이 test뒤에 3칸이 띄어쓰기 되어 있는 문자열을 찾을때 사용하면 되겠다.

 

옵션

-i  : 대소문자 구분안함
-l  : 절대경로로 표시
-b : 검색결과의 각 행앞에 검색된 위치의 블록 번호를 표시한다. 디스크의 어디쯤 위치하는지 알아내는데 유용하다.
-s : 에러메세지 외에는 출력하지 않는다. 종료상태를 검사할때 유용하다.

728x90
728x90

명  령  어

설                                               명

Data Transfer

MOV

Move

데이터 이동 (전송)

PUSH

Push

오퍼랜드의 내용을 스택에 쌓는다

POP

Pop

스택으로부터 값을 뽑아낸다.

XCHG

Exchange Register/memory with Register

첫 번째 오퍼랜드와 두 번째 오퍼랜드 교환

IN

Input from AL/AX to Fixed port

오퍼랜드로 지시된 포트로부터 AX에 데이터 입력

OUT

Output from AL/AX to Fixed port

오퍼랜드가 지시한 포트로 AX의 데이터 출력

XLAT

Translate byte to AL

BX:AL이 지시한 데이블의 내용을 AL로 로드

LEA

Load Effective Address to Register

메모리의 오프셋값을 레지스터로 로드

LDS

Load Pointer to DS

REG←(MEM), DS←(MEM+2)

LES

Load Pointer ti ES

REG←(MEM), ES←(MEM+2)

LAHF

Load AH with Flags

플래그의 내용을 AH의 특정 비트로 로드

SAHF

Store AH into Flags

AH의 특정 비트가 플래그 레지스터로 전송

PUSHF

Push Flags

플래그 레지스터의 내용을 스택에 쌓음

POPF

Pop Flags

스택으로부터 플래그 레지스터로 뽑음

Arithmetic

ADD

Add

캐리를 포함하지 않은 덧셈

SBB

Subtract with Borrow

캐리를 포함한 뺄셈

DEC

Decrement

오퍼랜드 내용을 1 감소

NEG

Change Sign

오퍼랜드의 2의 보수, 즉 부호 반전

CMP

Compare

두 개의 오퍼랜드를 비교한다

ADC

Add with Carry

캐리를 포함한 덧셈

INC

Increment

오퍼랜드 내용을 1 증가

AAA

ASCII adjust for Add

덧셈 결과 AL값을 UNPACK 10진수로 보정

DAA

Decimal adjust for Add

덧셈 결과의 AL값을 PACK 10진수로 보정

SUB

Subtract

캐리를 포함하지 않은 뺄셈

AAS

ASCII adjust for Subtract

뺄셈 결과 AL값을 UNPACK 10진수로 보정

DAS

Decimal adjust for Subtract

뺄셈 결과의 AL값을 PACK 10진수로 보정

MUL

Multiply (Unsigned)

AX와 오퍼랜드를 곱셈하여 결과를 AX 또는 DX:AX에 저장

IMUL

Integer Multiply (Signed)

부호화된 곱셈

AAM

ASCII adjust for Multiply

곱셈 결과 AX값을 UNPACK 10진수로 보정

DIV

Divide (Unsigned)

AX 또는 DX:AX 내용을 오퍼랜드로 나눔. 몫은 AL, AX 나머지는 AH, DX로 저장

IDIV

Integer Divide (Signed)

부호화된 나눗셈

AAD

ASCII adjust for Divide

나눗셈 결과 AX값을 UNPACK 10진수로 보정

CBW

Convert byte to word

AL의 바이트 데이터를 부호 비트를 포함하여 AX 워드로 확장

CWD

Convert word to double word

AX의 워드 데이터를 부호를 포함하여 DX:AX의 더블 워드로 변환

Logic

NOT

Invert

오퍼랜드의 1의 보수, 즉 비트 반전

SHL/SAL

Shift logical / arithmetic Left

왼쪽으로 오퍼랜드만큼 자리 이동 (최하위 비트는 0)

SHR

Shift logical Right

오른쪽으로 오퍼랜드만큼 자리 이동 (최상위 비트 0)

SAR

Shift arithmetic Right

오른쪽 자리이동, 최상위 비트는 유지

ROL

Rotate Left

왼쪽으로 오퍼랜드만큼 회전 이동

ROR

Rotate Right

오른쪽으로 오퍼랜드만큼 회전 이동

RCL

Rotate through Carry Left

캐리를 포함하여 왼쪽으로 오퍼랜드만큼 회전 이동

RCR

Rotate through Carry Right

캐리를 포함하여 오른쪽으로 오퍼랜드만큼 회전 이동

AND

And

논리 AND

TEST

And function to Flags, no result

첫 번째 오퍼랜드와 두 번째 오퍼랜드를 AND하여 그 결과로 플래그 세트

OR

Or

논리 OR

XOR

Exclusive Or

배타 논리 합 (OR)

String Manipulation

REP

Repeat

REP 뒤에 오는 스트링 명령을 CX가 0이 될 때까지 반복

MOVS

Move String

DS:SI가 지시한 메모리 데이터를 ES:DI가지시한 메모리로 전송

CMPS

Compare String

DS:SI와 ES:DI의 내용을 비교하고 결과에 따라 플래그 설정

SCAS

Scan String

AL 또는 AX와 ES:DI가 지시한 메모리 내용 비교하고 결과에 따라 플래그 설정

LODS

Load String

SI 내용을 AL 또는 AX로 로드

STOS

Store String

AL 또는 AX를 ES:DI가 지시하는 메모리에 저장

Control Transfer

CALL

Call

프로시저 호출

JMP

Unconditional Jump

무조건 분기

RET

Return from CALL

CALL로 스택에 PUSH된 주소로 복귀

JE/JZ

Jump on Equal / Zero

결과가 0이면 분기

JL/JNGE

Jump on Less / not Greater or Equal

결과가 작으면 분기 (부호화된 수)

JB/JNAE

Jump on Below / not Above or Equal

결과가 작으면 분기 (부호화 안 된 수)

JBE/JNA

Jump on Below or Equal / not Above

결과가 작거나 같으면 분기 (부호화 안 된 수)

JP/JPE

Jump on Parity / Parity Even

패리티 플레그가 1이면 분기

JO

Jump on Overflow

오버플로가 발생하면 분기

JS

Jump on Sign

부호 플레그가 1이면 분기

JNE/JNZ

Jump on not Equal / not Zero

결과가 0이 아니면 분기

JNL/JGE

Jump on not Less / Greater or Equal

결과가 크거나 같으면 분기 (부호화된 수)

JNLE/JG

Jump on not Less or Equal / Greater

결과가 크면 분기 (부호화된 수)

JNB/JAE

Jump on not Below / Above or Equal

결과가 크거나 같으면 분기 (부호화 안 된 수)

JNBE/JA

Jump on not Below or Equal / Above

결과가 크면 분기 (부호화 안 된 수)

JNP/JPO

Jump on not Parity / Parity odd

패리티 플레그가 0이면 분기

JNO

Jump on not Overflow

오버플로우가 아닌 경우 분기

JNS

Jump on not Sign

부호 플레그가 0이면 분기

LOOP

Loop CX times

CX를 1감소하면서 0이 될 때까지 지정된 라벨로 분기

LOOPZ/LOOPE

Loop while Zero / Equal

제로 플레그가 1이고 CX≠0이면 지정된 라벨로 분기

LOOPNZ/LOOPNE

Loop while not Zero / not Equal

제로 플레그가 0이고 CX≠0이면 지정된 라벨로 분기

JCXZ

Jump on CX Zero

CX가 0이면 분기

INT

Interrupt

인터럽트 실행

INTO

Interrupt on Overflow

오버플로우가 발생하면 인터럽트 실행

IRET

Interrupt Return

인터럽트 복귀 (리턴)

Processor Control

CLC

Clear Carry

캐리 플레그 클리어

CMC

Complement Carry

캐리 플레그를 반전

CLD

Clear Direction

디렉션 플레그를 클리어

CLI

Clear Interrupt

인터럽트 플레그를 클리어

HLT

Halt

정지

LOCK

Bus Lock prefix


STC

Set Carry

캐리 플레그 셋

NOP

No operation


STD

Set Direction

디렉션 플레그 셋

STI

Set Interrupt

인터럽트 인에이블 플레그 셋

WAIT

Wait

프로세서를 일지 정지 상태로 한다

ESC

Escape to External device

이스케이프 명령

MOVS 무브와 비슷한 작동을합니다


Push: sp 레지스터를 조작하는 명령어중의 하나이다.

스택에 데이터를 저장하는데 쓰인다.

ex:) Push eax

:스택에 Eax의 값을 스택에 저장한다.

ex:) Push 20

:즉석값인 20을 스택에 저장한다.

ex:) Push 401F47

:메모리 오프셋 401F47의 값을 스택에 저장한다.


Pop: 이또한 sp 레지스터를 조작하는 명령어중 하나

이다. 스택에서 데이터를 꺼내는데 쓰인다.

ex:) Pop eax

:스택에 가장 상위에 있는 값을 꺼내애서 eax에 저장

주의점: Push 의 역순으로 값은 스택에서 Pop 된다.


Mov: 메모리나 레지스터의 값을 옮길떄[로 만들떄]

쓰인다.

ex:) Mov eax,ebx

:ebx 레지스터의 값을 eax로 옮긴다[로 만든다].

ex:) Mov eax,20

:즉석값인 20을 eax레지스터 에 옮긴다[로 만든다].

ex:) Mov eax,dword ptr[401F47]

:메모리 오프셋 401F47 의 값을 eax에 옮긴다[로 만든다]


Lea: 오퍼렌드1의 값을 오퍼렌드2의 값으로 만들어준다.

ex:) Lea eax,ebx

:eax레지스터의 값을 ebx의 값으로 만든다.


Inc: 레지스터의 값을 1증가 시킨다.

ex:) Inc eax

:Eax 레지스터의 값을 1증가 시킨다.


Dec: 레지스터의 값을 1 감소 시킨다.

ex:) Dec eax

:Eax 레지스터의 값을 1 감소 시킨다.


Add: 레지스터나 메모리의 값을 덧셈할떄 쓰임.

ex:) Add eax,ebx

:Eax 레지스터의 값에 ebx 값을 더한다.

ex:) Add eax,50

:Eax 레지스터에 즉석값인 50을 더한다.

ex:) Add eax,dword ptr[401F47]

:Eax 레지스터에 메모리 오프셋 401F47의 값을 더한다.



인터넷에서 정리되어있는걸 가져왔습니다.

잘모르시는 어셈문도 있을겁니다^^

728x90
728x90

일단

첨부한 파일에 보면 test kit 제작 회로가 있다. 25pin을 다 사용하는 것이 아니라 GND포함 12pin만을 사용한다. 제어신호 3개와 LED 8개로 연결되 었다.

이를 기반으로 LED 신호 예제

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>

int main(int argc, char **argv)
{
 int fd;
 int lp;

 unsigned char buff[128]; //실제 사용하는 buff는 char 하나만 사용

 fd = open("/dev/port", O_RDWR);
 if(fd < 0 )
 {
  perror("/dev/port open error");
  return 1;
 }
 for(lp = 0; lp < 10; lp++)
 {
  lseek(fd, 0x378, SEEK_SET);
 buff[0] = 0xff;         //점등할 LED, data를 입력할 때 bit로 계산하면 쉽게 알아볼 수 있다. 
  write(fd, buff, 1);
  sleep(1);
  lseek(fd, 0x378, SEEK_SET);       //병렬포트의 물리적 주소가 0x378
  buff[0] = 0x00;
  write(fd, buff, 1);
  sleep(1);
 }
 close(fd);
 return 0;
}

switch 제어 예제
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <linux/lp.h>


int main(int argc, char **argv)
{
 int fd;
 int prnstate;
 int lp;

 unsigned char buff[128];
 
 fd = open("/dev/lp0", O_RDWR | O_NDELAY);
 if(fd < 0)
 {
  perror("open error");
  return 1;
 }

 while(1)
 {
  ioctl(fd, LPGETSTATUS, &prnstate); // 상태값을 받아온다.
  if(!(prnstate & LP_PACK)) //1
  {
   printf("ON 1 \n");
  }
  if(!(prnstate & LP_POUTPA))//2
  {
   printf("ON 2 \n");
  }  
  if(!(prnstate & LP_PSELECD))//3
  {
   printf("ON 3 \n");
  }
  //13 pin <-> GND pin
  usleep(50000);
 }
 close(fd);
 return 0;
}

위의 두 예제를 활용하여 원형 큐 구현 예제
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/lp.h>
#include <stdio.h>

int main(int argc, char **argv)
{
 int fd;
 int fd_LED;
 int prnstate;
 int lp;
 unsigned char buff[128];
 
 int flag1 = 0;
 int flag2 = 0;
 int flag3 = 0; 

 int front = 0;
 int rear = 0;

 fd = open("/dev/lp0", O_RDWR | O_NDELAY);
 fd_LED = open("/dev/port", O_RDWR);

 if(fd <0)
 {
  perror("open error");
  return 1;
 }
 if(fd_LED <0)
 {
  perror("LED error");
  return 1;
 }
 while(1)
 {
  ioctl(fd, LPGETSTATUS, &prnstate);
  if(!(prnstate & LP_PACK)){
    flag1 = 1;
  }
  if(!(prnstate & LP_POUTPA)){
   flag2 = 1;
  }
  if(!(prnstate & LP_PSELECD)){
    flag3 = 1;
  }
  if((prnstate & LP_PSELECD) && (flag3 ==1))//reset
  {
   printf("reset\n");
   flag1 = 0;
   flag2 = 0;
   flag3 = 0;
   lseek(fd_LED, 0x378, SEEK_SET);
   buff[0] = 0x00;
   write(fd_LED, buff, 1);
   front = 0; rear = 0;
  }
  if((prnstate & LP_PACK) && (flag1 == 1)) //enqueue
  {
   printf("enqueue\n");
   flag1 = 0;
   flag2 = 0;
   flag3 = 0;
   if((front+1)%8 == rear)
   {
    printf("full\n");
    continue;
   }   
   lseek(fd_LED, 0x378, SEEK_SET);
   buff[0] = buff[0] | (0x01<<front);
   front = (front + 1)%8;
   write(fd_LED, buff,1);
  }
  if((prnstate & LP_PSELECD) && (flag2 == 1)) //dequeue
  {
   printf("dequeue\n");
   flag1 = 0;
   flag2 = 0;
   flag3 = 0;
   if(front == rear)
   {
    printf("empty\n");
    continue;
   }
   buff[0] = (buff[0]- (0x01<<rear));
   lseek(fd_LED, 0x378, SEEK_SET);
   write(fd_LED, buff,1);
   rear = (rear+1)%8;
   usleep(150000);
  }
  
 }
 return 0;
}

그런데 사용하는 flag들(LP_PSELECD, LP_PACK, LP_PSELECD)을 어떻게 찾는지 아직 잘 모르겠다. 다른 스위치를 추가로 더 넣으면 어떻게 되는거지? LED가 추가되면???

728x90
728x90

오늘 회사에 들어오니

리눅스 서버군요....

디비는 윈2000 서버 오라클..(오라클 해보지도몬했는데)

jsp 소스들은 전부 리눅스이네요

이제 리눅스 공부를 해야하는데

현재 깔려있는 리눅스가 몬지 모르겠어요..

알방법이 없나요?

x 쉘을 이용해서 도스창 비스무리한곳은 나오는데

무슨 리눅스에 버젼은 몇인질 모르겠어요~~

아시는분..

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

  • uname -a
  • korlsy
  •  
  • 2006-09-04 17:37:35
  • x
  • 리눅스 에대한 정보 보는곳은 다음의 파일을 확인 하시면 됩니다 
    우선 uname -a 하시면 리눅스의 커널정보 확인 그리고 리눅스배포버전 확인 
    그리고 요 파일 확인 하시면 리눅스가 몬지 알수 있습니다 
    참고로 요 파일은 레드헷계열 이면 존재 합니다. 
    /etc/redhat-release 
    안에 열어 보면 리눅스 가 몬지 알수 있슴당... 
    그럼 좋은 하루 되세용 

  • 원준
  •  
  • 2006-09-04 17:39:01
  • x
  • Linux XXXXXX(요건계정) 2.6.14-1.1653_FC4smp #1 SMP Tue Dec 13 21:46:01 EST 2005 i686 i386 GNU/Linux 
    라고만 뜹니다 uname -a 하니깐요 
    etc 폴더는 아예 없구요 힐~
  • ㅇㅇ
  •  
  • 2006-09-04 17:54:02
  • x
  • cat /etc/issue 
    하면 ~~
  • 세나호드
  •  
  • 2006-09-05 11:00:31
  • x
  • uname -a를 입력하면 간력한 시스템 정보가 뜨죠. 
    위에 2.6.14어쩌고는 현재 사용중인 리눅스 커널버젼을 의미합니다. 메이져넘버가 2.6이니깐, 안정버전이죠. 뒤에 FC4로 나오는걸보니, 레드햇리눅스 페도라코어4 버젼입니다. 
    원준님 답변처럼 /etc/redhat-release를 보면 나오는데요, /etc/redhat정도까지 입력하고 TAB 키를 1-2번 누르시면 입력할 수 있는 파일들이 보일껍니다. 
    그걸 cat /etc/redhat TAB!! 하면 아실수 있을겁니다.
  • 손님은왕이다
  •  
  • 2006-09-06 02:40:55
  • x
728x90

+ Recent posts