출처 - http://bbolmin.tistory.com/35

 

먼저 system함수를 알아 보겠습니다.

 

원형은 int system(const char* command)이며 command에 해당하는 명령어를 수행하는 함수입니다.

(반환형이 int인데 성공시 0을 반환, 실패시 -1을 리턴합니다.)

 

system함수로 ls명령어를 실행해본 화면입니다.

   ->

 

/bin/ls처럼 절대 경로말고 ls로만 입력해도 ls가 실행됩니다. (환경변수 PATH를 이용하는 듯..)

그리고 옵션을 사용할 때는 단순히 "/bin/ls -a"와 같이 해주면 됩니다.

  ->

 

 


 

 

이제 exec계열의 함수(execl, execv, execle, execve, execlp, execvp)에 대해서 알아 보겠습니다.

 

아래 그림에서 exec계열의 함수에 대해 자세히 설명해줍니다.

 

위의 exec함수들을 보면 exec에다가 l, v, e, p등 여러가지가 붙어 있습니다.

 

정리를 해보면

1. l, v : argv인자를 넘겨줄 때 사용합니다. (l일 경우는 char *로 하나씩 v일 경우에는 char *[]로 배열로 한번에 넘겨줌) 

 

2. e : 환경변수를 넘겨줄 때 사용합니다. (e는 위에서 v와 같이 char *[]로 배열로 넘겨줍니다.)

3. p : p가 있는 경우에는 환경변수 PATH를 참조하기 때문에 절대경로를 입력하지 않아도 됩니다. (위에서 system함수 처럼)

그럼 간단히 execl와 execve를 써보겠습니다.

 

(1) execl

  ->

 

(2) execve 

 ->

( 딱히 환경변수에 넣을게 없네요; )

위와 같이 실행되는 것을 볼 수 있습니다. (만약 /bin/ls라고 안하고 ls라고 하면 실행이 안되겠죠 --> p가 붙어 있다면 PATH에서 찾기 때문에 실행됩니다.)

 

출처  - http://molrayo.tistory.com/entry/Process-abort%ED%95%A8%EC%88%98%EC%97%90-%EA%B4%80%ED%95%9C-%EC%98%88%EC%A0%9C

 

#include<stdlib.h>

#include<process.h>

 

void abort(void);

 

리턴값

 - 함수 자체의 리턴 값은 없지만 이 함수에서 호출한 _exit 함수에서 exit 코드 3을 도스 또는 모 프로그램으로 리턴한다.

 

기능

 - 프로그램을 종료하되 비정상적으로 종료한다. 반면 exit 함수는 프로그램을 정상 종료한다.

abort 함수로 프로그램이 종료되면 stderr(화면)에 다음과 같은 메시지를 출력하며 _exit 함수를 호출하여 코드 3을 반환하면서 프로그램을 종료하게 된다.

 

abnormal program termination

 

참고 함수

exit => 프로그램을 정상 종료한다.

atexit, assert

 

 

예제

 

#include <stdio.h>
#include <stdlib.h>

void func(void);

main(int argc, char *argv[])
{
    atexit(func);
    /* atoi는 정수 형태의 문자열을 정수로 변환하는 함수로 argv[1]이 "1"이면 1로 변환.
      argv[1]이 "0"이 되어야 if 조건이 참이 됨 */
    if(!atoi(argv[1]))
      /* 비정상적으로 프로세스를 종료하는데 atexit에 의해 등록된 함수는 실행되지 않음 */
       abort();
    exit(0); /* 정상적으로 프로세스를 종료하는데 atexit에 의해 등록된 함수가 실행 됨 */
}

void func(void)
{
    printf("run function\n");
}

출처 - http://uiandwe.tistory.com/140

 

Race Condition 문서를 읽으면 어김없이 나올수 밖에 없는 함수.


헤더    unistd.h 
형태    pid_t fork(void);  
반환    pid_t 실행에
 실패하면 -1 을 반환. 부모에게는 새로 생성된 자식 프로세스 PID가 반환
          되며, 자식 프로세스에는 0이 반환됩니다. 


fork()함수에 의해서 생성된 프로세서는 부모의 모든 값을 그대로 이어 받지만 프로세서 아이

디만이 틀릴뿐이다. fork()함수는 0으로 자식프로세서에게 아이디를 부여한다.

그러면 첫번째 자식 프로세서는 0이면 두번째 자식은 몇이 올것인가? 라는 문제의 식이다.

간단하게 프로그램을 짜보면 

과연 결과값이 어떻게 나올것인지 곰곰히 생각해봐야한다.(처음이니까~)


결과가 어떠한가!! 

처음엔 부모 프로세서가 다 돌고 두번째로 생성된 프로세서가 돌고 마지막엔 첫번째 프로세서

가 실행되는것을 볼수 있다. 결국 자식의 자식이 아닌 그저 다른 자식일 뿐이다. 

그리고 그 또한 스택 영역으로 들어간다.(늦게 들어갔기 때문에 두번째 자식이 먼저 실행된다)

그 자식 프로세서도 0으로 되는것이다. 

단순히 새로운 프로세서를 생성하고 분기하는것일뿐(동인한 프로세서로 분기) 이다.

대략적으로 그림으로 보자면 요론 그림으로~


!! 쓰레드와 무슨차이인가요??

라고 물어본다면 당연히 프로세서는 프로그램을 실행하기 위한 하나의 단위이다.

쓰레드는 프로세서안에서 실행하기 위한 단위라고 생각하면 된다.

여러 쓰레드가 모여서 프로세서를 만들고 쓰레드는 오직 프로세서 안에서만 존재한다.

fork()는 프로세서를 만드는것이지(복사하는것) 동시에 돌아가지는 않는다.

쓰레드를 쓰는이유는 동시에 처리하기 위함이니까 전혀 틀리게 된다.





출처 - http://microsoft.tistory.com/22

 

2> fseek(), ftell()

-----------------------------------------------------------------------

우리는 모니터 화면에 커서가 있는것을 안다. 이것은 텍스트 모드에

서 뿐만 아니라 그래픽 모드에서도 마찬가지 였다. 글자나 점 하나를 모니터

의 특정한 곳에 찍고 싶으면, 이 커서를 그 곳에다 갖다 놓고 그다음 찍는

행위를 해야한다.

이와같은 개념은 "파일"을 취급할 때도 마찬가지이다. 하지만 파일

은 하드디스크에 들어 있는 것이기 때문에, 모니터처럼 고정된 좌표를 가지

지 못한다는 것에 큰 차이가 있다.

언젠가 파일을 "두루마리 편지"라고 비유한 적이 있는데, 이제 현대

식으로 다시 비유를 해보면, 도트 프린터의 "연속용지"에 파일이 전부 인쇄

된 것과 유사하다고 생각해 볼 수 있다. 아시다시피 이 상태에서는 파일의

크기(프린트 용지의 길이)가 고정적일 수가 없다. 어떤 파일은 한장짜리가

될 수도 있고, 어떤 것은 베게로 베고 잘 수 있을 정도로 두꺼울 수도 있다.

 

파일을 "읽기 위해" fopen() 하면 이 "파일 커서"(사실 이런 용어는

안쓰지만 이해를 돕기위해서 씁니다)는 인쇄된 연속용지 "첫장의 제일 첫글

자"를 가리키고 있다. 이건 어디서나 상식이다.

그리고 이 파일 커서를 움직이려면 fseek()를 쓴다. 이 파일 커서는

돌아 다닐 수 있는 곳이 파일의 크기에 따라 가변적이므로 모니터에서 쓰듯

이 좌표를 줄 수 없다는 것은 당연하다. 그래서 돌아 다니는 방법이 조금 복

잡하다. 말로 하면, "현재 위치에서 5글자 뒤로 가"를 다음과 같이 쓴다.

 

fseek(fp,5L,SEEK_CUR) <--- "현재 위치"에서 5글자 뒤로 가

fseek(fp,5L,SEEK_SET) <--- "파일 제일 처음 글자"에서 5글자 뒤로 가

fseek(fp,-5L,SEEK_END) <--- "파일 제일 끝 글자"에서 5글자 앞으로 가

(뒤로는 더이상 못간다. 상식 !)

 

여기서 "뒤로 " 라는 얘기는 한글자씩 오른쪽 옆으로 움직이는걸 얘기

한다. 즉 우리가 책을 읽어나가는 방향이다. 이 때 물론, 한 줄 끝에 이르면

다음 줄 첫 글자로 이동한다.

이때 "SEEK_" 로 시작되는 이름들은 대문자로 쓴 걸 보아 벌써 어디선

가 정의 되있다는 것을 알것이다. 따라서 우리는 무조건 외어서 써야하는데

그 의미는 위에서 얘기한데로 다음과 같다.

--------------------------------------------------------

SEEK_CUR --> "현재(current) 위치에서"를 의미한다.

SEEK_SET --> ""파일 제일 첫글자 에서"를 의미한다.

SEEK_END --> "파일 제일 끝 글자 에서"를 의미한다.

---------------------------------------------------------

 

<숙제> 이런 상수들은 전부"헤더 파일"에 선언되 있다는 것을 알 수 있을 것

입니다. 어떤 헤더 파일에 정의되 있는지 찾아 보세요. (노턴 유틸

리티를 가지고 있는 분들은 TS( Text Search) 명령을 쓰세요.)

그리고 만일, 아직도 이런 툴(tool)을 안가지고 있는 분들은 빨리

구해서 활용을 해야 합니다. 프로그래머들에게는 이런 툴은 필수적

입니다.

 

실제로 파일을 열어놓고 이 파일 커서가 돌아다니기 시작하면 조금

정신이 없다. 왜냐하면 이건 모니터상에 깜박이는게 아니고 우리 머리속에서

만 움직이는 것이다. 따라서 누가 조금만 정신을 어지럽히면 현재 커서위치

를 놓치고 만다.

큰 파일을 취급할땐, 연속용지로 치면 길이가 무척 길어서 경부고속

도로를 쭉 따라가며 펼쳐 놔야한다. 그러다가 한 순간에 커서를 놓치면 이

놈이 천안에 가있는지 대전에 가있는지 알기 어렵다. 물론 그렇다고 전혀 못

찾는건 아니다.

이 때 "커서야 어디있니 !" 이렇게 외치는게 ftell() 이다. 쓰는법

을 정확히 알아보기 위해 [439쪽]을 참조하자. 이 사용법은

더이상 내가 설명을 안해도 잘 아실 줄로 믿는다. 예를 들면 다음과 같이 쓰

라는 얘기다.

 

#include <stdio.h>

main()

{

int i;

long ll;

FILE *from;

 

ll = ftell(from);

}

 

ftell() 의 대답(리턴 값)은 long형 이므로, long 타입 변수 ll 이

받은게 당연하다. 또 사용법에서 언급하는 ftell(FILE *fp)의 "FILE *fp"는

from 변수의 타입과 같음을 보라.

그러면 여기서, "왜 long형으로 대답하는지" 그 이유를 를 짚고 넘

어가기로 하자. "어디있니 ?"의 대답이 long 형 이면 4 바이트(32 비트) 크

기이다. 즉 4G 바이트 만큼 멀리갈 수 있다는 얘기다.

여러분의 하드디스크가 얼마나 큰지 모르겠는데, 나는 지금 420M(메

가) 짜리 하드 디스크를 쓰고 있다. 이것은 요즘 유행으로 봐서는 그다지 큰

것도 아닌 것 같다. 만일 이런 하드디스에 하나 짜리 파일이 통째로 들어가

있어도 ftell()은 가볍게 대답할 수 있는 거리다.

단 여기서 주의할 것은, 대답하는 거리는 무조건 "파일의 처음"에서

부터 떨어진 거리를 말한다. 여기에는 빨간 형광펜으로 밑줄을 "쫙" 그어두

기로 하자. 그러나 곰곰이 생각해보면 너무 당연한 얘기이기도 하다.

왠가하면 아마 지금도 교통방송에서는 어느 여자 아나운서의 낭랑한

목소리를 들을 수 있을테니까.

 

"경부 고속도로, "서울 기점 200Km 지점"에서 두 차가 장렬하게

닿았습니다."

 

아마도 그 여자 아나운서는 "C 언어"를 모를테지만 그래도 사고지점을 우리

에게 알려주는 방법은 ftell()의 "리턴값"과 같은 것이다.

"서울 기점 200Km" 면 아마 대전 근처가 아닐까 짐작하는데, 아무리

그래도 "대전 북방 2Km"따위로 얘기하지 않고, 기준점을 "서울"로 잡은 것이

다. 그게 "파일의 처음 위치"이다.

이제 다음의 예를 읽어보면서, "파일 커서"가 (개구리 처럼) 어디로

튀는지 잘 쫓아가 보기로 하자.

------------------------------------

#include <stdio.h>

 

main()

{

char c;

int i;

FILE *fp;

 

fp=fopen("a_to_z", "w+b");

 

for (c='A' ; c<='Z' ; c++)

fputc(c, fp);

 

fseek(fp, 0, SEEK_SET);

 

for (i=0 ; i<3 ; i++)

printf("\n%c : %d", fgetc(fp), ftell(fp) );

putchar('\n');

 

fseek(fp, -5, SEEK_END);

 

for (i=0 ; i<3 ; i++)

printf("\n%c : %d", fgetc(fp), ftell(fp) );

putchar('\n');

 

fseek(fp, -10, SEEK_CUR);

 

for (i=0 ; i<3 ; i++) {

printf("\n%c : %d", fgetc(fp), ftell(fp) );

fseek(fp, -2, SEEK_CUR);

}

fclose(fp);

}

<문제> 답을 미리 적어보고 실행해보세요.

 

-----------------------------------------------------------------------

3> fread(), fwrite()

-----------------------------------------------------------------------

이 함수들은 특정 자료형을 글자 단위로 입출력하지 않고 "덩어리

단위"로 읽고 쓴다. 다음의 예를 보자.

main()

{

FILE *fp;

char name[20] = "Lim chungha";

 

fp = fopen("xxx.xxx","w");

fwrite(name, 20,1,fp); <-- (요기)

}

(요기)를 말로 하면 "name[] 에 있는 데이타들을 파일 fp에 쓰는

데, 덩어리는 20 바이트가 한묶음이고 그런걸 한 덩어리 쓰라"는 얘기다.

즉, 이 경우에는 한 사람의 이름을 파일에 쓰라는 얘기이다.

여기서 name[]의 크기는 사람 이름을 위한 길이를 임의로 넉넉하게

[20] 바이트로 잡았다. fread() 도 마찬가지다.

main()

{

FILE *fp;

char name[20];

 

fp = fopen("xxx.xxx","r");

fread(name, 20,1,fp); <-- (요기)

}

fread()를 실행하기 전에 name[20]이라는 배열에는 아무 값도 안들

어가 있다. 그러나 위 fwrite()에서 임 청하의 이름을 xxx.xxx 에 성공적으

로 썼다면 위의 (요기)를 실행하고 나면 name[]에 임청하라는 이름이 들어

가 있을 것이다.

이것도 말로 하면 "파일 fp 에서 읽는데 쓸 곳은 name (즉 name[]

배열의 첫집)이다. 크기는 20 바이트짜리 덩어리 한 묶음이다"

이제 다음의 예제를 보자. 친구의 이름과 전화번호를 입력받아 파일에

저장하고 화면에 보여준다.

------------------------------

#include <stdio.h>

main(int argc, char *argv[])

{

int c;

FILE *fp;

struct {

char name[20];

char tel_no[20];

} entry;

 

char yn;

 

clrscr();

/*------------< write record to file >--------------*/

if((fp = fopen("friends.tel","w")) == NULL) {

printf(" can't open ..");

exit(1);

}

 

do {

printf("\n 이름 : ");

gets(entry.name);

printf(" 전화번호 : ");

gets(entry.tel_no);

fwrite(&entry, sizeof(entry),1,fp);

 

printf("\n 계속할까요 (y/n) ? ");

yn = getch();

} while ( yn == 'y' || yn == 'Y');

 

fclose(fp);

 

/*----------< display records >--------------*/

clrscr();

 

if((fp = fopen("friends.tel","r")) == NULL) {

printf(" Can't open file \n");

putch(0x07);

exit(1);

}

while(fread(&entry, sizeof(entry),1,fp) == 1) {

printf(" %s %s\n", entry.name, entry.tel_no);

}

fclose(fp);

getch();

 

}

출처 - http://soooprmx.com/wp/archives/4993

 

C프로그램의 파라미터 파싱 및 처리

문자열 파싱은 스크래치 상태(아무것도 없는 빈 상태)로부터 구현하기가 만만치 않은데, 이를 도와주는 라이브러리 함수가 있으니 바로 unistd.h에 정의된 getopt() 함수이다.

getopt()

이 함수의 원형은 다음과 같다.

int getopt(int argc, char * const argv[], const char *optstring);

이 함수의 파라미터는 간단한다.

  1. argc, argv : main() 함수가 받은 파라미터를 그대로 전달한다.
  2. optstring : 파싱해야 할 파라미터를 쓴다. 옵션이 별도의 파라미터를 받는 경우 콜론을 함께 쓴다.

예를 들어 -h, -v, -f filename을 받는 세 가지 옵션이 있다고 하면 옵션스트링은 "hvf:"가 된다. 각각의 옵션을 파싱해내기 위해서는 getopt()함수가 0을 리턴할 때까지 계속해서 반복하면 된다.

그외 전역변수

이 함수와 관련된 전역 변수에는 다음과 같은 것들이 있다.

  • optarg : 옵션 뒤에 별도의 파라미터 값이 오는 경우, 이를 파싱한 결과 파라미터 값은 optarg에 문자열로 저장된다.
  • optind : 다음번 처리될 옵션의 인덱스이다. 만약 파싱한 옵션이후에 추가적인 파라미터를 받는다면 (예를 들어 입력 파일 이름 같이) 이 값을 활용할 수 있다. getopt()함수는 한 번 호출될 때마다 이 값을 업데이트한다.
  • opterr : 옵션에 문제가 있을 때, 이 값은 0이 아닌 값이되며, getopt()함수가 메시지를 표시하게 된다.
  • optopt : 알 수 없는 옵션을 만났을 때 해당 옵션이 여기에 들어간다. (이 때 getopt의 리턴값은 ‘?’가 된다.)

샘플 코드

아래 샘플 코드는 간략한 예를 보여준다. 이 코드에서는 a, b, c의 세 옵션을 인식하며 각각의 옵션이 주어지는 경우 해당 플래그 변수를 1로 정의하고 그 결과를 출력한다.

1:  #include <stdio.h>
2:  #include <unistd.h> // for getopt()
3:  
4:  int main(int argc, char * const * argv){
5:      int flag_a = 0, flag_b = 0, flag_c = 0;
6:      int c; // option
7:      while( (c = getopt(argc, argv, "abc")) != -1) {
8:          // -1 means getopt() parse all options
9:          switch(c) {
10:             case 'a':
11:                 flag_a=1;
12:                 break;
13:             case 'b':
14:                 flag_b=1;
15:                 break;
16:             case 'c':
17:                 flag_c=1;
18:                 break;
19:             case '?':
20:                 printf("Unknown flag : %c", optopt);
21:                 break;
22:         }
23:     }
24:     if(flag_a) {printf("flag a is ON \n");}
25:     if(flag_b) {printf("flag b is ON \n");}
26:     if(flag_c) {printf("flag c is ON \n");}
27:     return 0;
28: }

보통 while문으로 루프를 돌면서 옵션들을 하나씩 검사한다. getopt가 optstring으로 정의되지 않은 옵션문자를 만나면 opterr 값이 세팅되고, 동시에 getopt()함수가 해당 문자에 대해 메시지를 출력한다. 이 때 반환값은 '?'가 되고 이때 알 수 없는 옵션 문자는 optopt에 저장된다.

추가 파라미터를 필요로하는 옵션

gcc의 -o와 같이 파일 이름등의 추가 파라미터를 필요로하는 옵션은 다음과 같이 처리한다.

  1. optsting에서 옵션 문자 뒤에 콜론을 붙인다. "abcf:"와 같은 식으로 쓴다.
  2. getopt()함수는 -f를 만나면 자동으로 그 뒤에 붙은 문자열을 공백까지 탐색하여 이를 optarg에 복사한다.
  3. 처리시에는 리턴값이 ‘f’인 경우 optarg의 값을 그대로 액세스하면 된다.

이러한 처리 코드는 아래와 같다.

case 'f':
    memcpy(file_name, optarg, strlen(optarg));
    break;

또한 파라미터가 있다고 정의한 경우, 파라미터 값이 빠진채로 실행되었다면 이 때는 옵션이 인식할 수 없는 옵션으로 처리된다.

case '?':
    if(optopt == 'f') {
        printf("option -f requires FILENAME\n");
    }
    break;

optind

옵션문자들을 모두 처리한 이후에 프로그램 자체의 파라미터를 처리하기 위해서는 optindargv의 인덱스로 사용하여 파라미터를 전달 받을 수 있다.

그외 긴 이름

--output등의 긴 이름 옵션을 사용하기 위해서는 getoptlong함수를 사용한다.

touch

(1) 설명: 파일의 크기가 0인 빈 파일을 생성하는 명령어로 파일의 최종 접근시간을 바꿀 수 있는
          명령이다.
(2) 사용법
    touch [option] 파일명
(3) option
   -d : 접근 시간을 변경한다.
   -m : 수정 시간을 변경한다.
   -t 타임스탬프 : 현재 시간 대신 [[CC]YY]MMDDhhmm[.ss]형식으로 지정된 타임스탬프를 이용한다.
                 예를 들어, 2001년 1월 12일 오후6시45분은 200101121845로 나타낸다. 리눅스배포
                 판에 따라 타임스탬프형식이 MMDDhhmm[[CC]YY][.ss]로 다를수도 있으니 man 명령으
                 로 확인해야 한다.
(4) 사용예
   1) [posein@www posein]$ touch a.txt
       => 현재 디렉토리에 a.txt라는 파일이 존재하면 파일의 접근시간을 바꾸고 파일이 없을 경우
         에는 a.txt라는 파일의 크기가 0인 빈파일을 생성한다.
         생성파일이다.
   2) [root@int03 root]# touch -t 04011330 /etc/passwd
      [root@int03 root]# ls -l /etc/passwd
      -rw-r--r--    1 root     root         2655  4월  1 13:30 /etc/passwd
        => /etc/passwd 파일의 접근시간을 바꾼다.
(5) 쓰임 : 주로 설정파일을 만들어야 할때 사용되는데 없으면 안되고, 내용을 적을 것이 없는
          경우나 현재 디렉토리에 쓰기가 가능한지를 알아보기 위한 목적으로 쓰인다

'IT' 카테고리의 다른 글

[펌] Unix 명령어  (0) 2016.03.14

1. chmod : 파일, 디렉토리 권한 수정

옵션 설명
4 파일에 대한 읽기의 허가
2 파일에 대한 쓰기 허가
1 파일에 대한 실행하기 허가
0 파일의 읽기,쓰기,실행하기 금지
400 소유자에 의한 읽기 가능
200 소유자에 의한 쓰기 가능
100 소유자에 의한 수행 가능
700 소유자에 의한 읽기,쓰기 허가
그룹에 속한 사용자, 일반사용자는 모든 권한 금지
070 그룹에 의한 읽기,쓰기 가능
007 다른 그룹 또는 사용자에 의해 수행,읽기,쓰기 가능

w : 4, x : 2, r : 1
   - ex) 
        
chmod 755 a_file         
        ( 소유자에겐 7(rwx), 그룹과 나머지에겐 5(r-x) 권한부여 )
        chmod o+rw a_file         
        ( others에게 읽기, 쓰기 권한 부여 )
        chmod 700 *                
         ( 현재 위치의 모든 파일과 폴더 권한 수정 )
        chmod -R 755 www        
        ( www디렉토리 내의 모든 파일과 디렉토리의 권한 수정 )

2. chown : 파일 소유자, 소유그룹 수정
   - ex) 
        chown bible file1        
         ( file1 파일의 소유자를 bible로 수정 )
        chown bible:bible2 file2         
        ( file2 파일의 소유자를 bible로 그룹을 bible2로 수정 )
        chown -cR nobody:nobody dirl       
        ( dirl 폴더와 그안의 모든 파일,디렉토리의 소유자,소유그룹 변경 )
        chown -R bible:webhost uploads --from=nobody:nobody    
        ( uploads디렉토리 내의 파일중 소유자가 nobody이고 소유그룹이 nobody로 되어 있는 파일의
           소유자를 bible로 변경하고 소유그룹을 webhost로 변경 )

 

출처 - http://egloos.zum.com/slog2/v/3546476


입력명령

-       i : 커서 앞에 삽입

-       a : 커서 뒤에 삽입

-       I : 현재 줄 첫 칸에 삽입

-       A : 현재 줄 끝에 삽입

-       o : 현재 줄 다음에 삽입

-       O : 현재 줄 앞에 삽입

 

커서이동

-       k : , j : 아래, l : 오른쪽, h : 왼쪽

-       ^ 또는 0(숫자) : 줄의 시작으로 이동

-       $ : 줄의 마지막

-       + : 다음 줄의 처음, - : 이전 줄의 처음

 

화면이동

-       H : 키 화면 맨 위로, M : 중간으로, L : 아래로

-       w : 다음 단어 첫 문자, b : 이전 단어의 첫 문자, e : 다음 단어의 끝 글자

-       G 또는 :$ : 파일의 마지막 줄로 이동

-       :n 또는 nG : 줄 번호 n으로 이동

-       n+ : n줄만큼 앞으로 이동, n- : n줄만큼 뒤로

-       ( : 현재 문장의 처음으로, ) : 다음문장의 처음으로

-       { : 현재 문단의 처음으로, } : 다음문단의 처음으로

-       ^u : 반 화면 위로, ^d : 반 화면 아래로

-       ^b : 한 화면 위로, ^f : 한 화면 아래로

-       ^y : 한 줄만 위로, ^e : 한 줄만 아래로

-       ^l : 파일내용 다시 출력

 

내용삭제 및 취소 생략(x, dw, dd, D, u, U)

 

내용수정

-       r : 현재 커서위치의 한 문자 변경

-       R : 현재 커서부터 ESC 입력까지 변경

-       cw : 커서 위치부터 현재 단어의 끝까지 내용변경

-       cc : 커서가 위치한 줄의 내용 변경

-       s, ns : 현재 커서부터 내용변경(ex:5s)

-       C : 커서 위치에서 줄 끝까지 내용 변경

 

편집기능-복사, 잘라내기, 붙이기 생략(yy, dd, p, P)

 

검색

-       /문자열 : 현재위치부터 다음줄 쪽으로 문자열 탐색

-       ?문자열 : 현재위치부터 이전줄 쪽으로 문자열 탐색

-       n : 다음 문자열 탐색, N : 역방향으로 탐색

 

바꾸기 기능

-       :s/문자열1/문자열2/ : 커서가 위치한 줄에서만 문자열 1을 문자열 2로 바꿈

-       :<범위>s/문자열1/문자열2 : 범위 안에서 각 줄의 첫번째 문자열1->2로 바꿈

-       :<범위>s/문자열1/문자열2/g : 범위 안에서 모든 문자열1->2로 바꿈

-       :<범위>s/문자열1/문자열2/gc : 범위 안에서 모든 모든 문자열1->2로 치환할 때 묻고 바꿈

 

파일 읽어오기

-       :r 파일명 : 지정한 파일의 내용을 커서위치 뒤쪽에 삽입

-       :e 파일명 : 지정파일을 연다 (기존파일은 버퍼로 들어감)

-       :n : vi 시작 시 여러 파일을 열었을 경우 다음파일로 이동

 

쉘 명령 실행

-       :!명령어 : 해당 명령어를 쉘에서 실행함

-       :sh : vi를 잠시 빠져나가 쉘로 간다. 돌아올때는 exit(!bash 랑 같음)

 

기타

-       :f 파일명 : 파일이름을 지정한 이름으로 변경

-       :w %.old : 현재 파일을 .old 이름으로 저장해 둘 때

-       ^g : 기본적인 파일정보 출력(파일명, 현재 줄/전체 줄, 현재 칸, 전체 몇 %의 영역에 위치)

-       J : 현재 줄과 다음 줄 연결

-       . : 바로 이전에 수행한 명령 재 실행

-       ~ : 현재 커서 위치의 한 문자를 소문자 혹은 대문자로 전환(->, ->)

 

vi환경 설정(생략, 따로 정리)


 

 

쉘 명령어

 

Touch [옵션] 파일

-       지정한 파일이 존재하지 않으면 생성, 있으면 현재 혹은 지정시간으로 변경

   -a : 접근 시간만 변경

   -c : 지정한 파일이 없는 경우 새로 생성하지 않음

   -m : 수정시간만 변경

   -r ref_file : 시간을 ref_file에서 읽음

   -t 시간입력 : 시간 직접입력 ( [[CC]YY]MMDDhhmm[.ss]  형식으로 입력)

 

쉘 특수문자(몇 가지 너무 흔한 건 생략)

-       ;     한 줄에 여러 개의 명령입력 (ex : date;cal;ls)

-       [ ]    한 문자 위치를 위한 문자 범위표시(ex ls [a-f])

-       |     명령어 파이핑 (ex : ls | grep home)

-       -     이전작업 디렉토리 (ex : cd -)

-       ‘ ‘    모든 쉘 문자 무시(ex : printf ‘$SHELL’)

-       ` `    쉘 명령 수행 (ex : printf “today : `date`”)

-       \    특수문자 기능 제거 (ex : printf”\$SHELL”)

 

입출력 방향 바꾸기

-       > : 새로운 파일로 생성, 기존파일 사라짐

-       >> : 기존 파일의 끝에 내용 추가

-       2> : 표준 오류 출력

-       < : 입력을 키보드에서 파일로 변경(ex : mailx user1 < loveletter)

 

쉘 환경변수

-       set : 쉘 변수(지역)

-       env : 환경변수(전역)

 

-       쉘 변수 정의 : 변수 = (MYENV=KSH)

-       환경 변수 : export 변수=

-       변수 값 확인 echo $변수(또는 printf)

-       변수 정의 해제 : unset 변수

 

프롬프트 설정

PS1에 저장된 값을 프롬프트로 사용함

echo $PS1으로 값을 확인

-       컬러 프롬프트 설정 : PS1=”^[[x;y;nm 프롬프트 ^[[x;y;0m”      (^[ctrl-v+[ 이다]

-       x,y는 색깔 번호를 뜻하고 n은 특수기능을 뜻함

-       특수기능 번호 - 0 : 기본색, 1 : 굵게, 4 : 흑백에서 밑줄, 5 : 반짝임, 7 : 역상, 10 : 기본폰트,

                   38 : 밑줄 사용가능, 39 : 밑줄 사용불가능

-       글자색 컬러번호 : 검정색30부터 시작->,,,,,청록,흰색으로 37까지

-       배경색 번호 : 검정색 40부터 시작->,,,,,청록,흰색으로 47까지

Ex) 프롬프트 파란색으로 : PS1=1”^[ [34;1mBlue! ^[ [0;0m”

 

 

 

파일의 사용권한 및 검색

 

파일의 종류

 ls –l 명령으로 파일과 디렉토리의 속성을 알 수 있다.

Ex) –rw-r—r—1 cn05777 2011 50 9 1 12:00 hello.c

다음과 같이 파일명이 나왔을 때, 맨 앞에(rw전에) 나오는 문자 하나는 파일의 종류를 의미

-       -   : 일반파일

-       d : 디렉토리 파일

-       b : 블록 단위로 읽고 쓰는 블록장치 특수 파일

-       c : 문자 단위로 읽고 쓰는 문자 장치 특수 파일

-       l : 기호적 링크

-       p : 파이프

-       s : 소켓

 

파일사용 권한

그 다음으로 나오는 rw-r—r—는 파일사용 권한을 의미한다.

-       읽기(r), 쓰기(w), 실행(x)

-       순서대로 rw-(소유자)r—(그룹)r—(기타사용자)를 의미

-       chmod [옵션] 모드 파일명       <-이렇게 사용 –R 옵션 주면 하위 디렉토리를 포함 싹 다

권한부여 방법들

1.     기호모드

n  u(소유자),g(그룹),o(기타사용자), a(모든 사용자)

n  +(허가권부여), -(허가권제거), =(허가권지정)

ex) u+w (소유자에게 쓰기 권한 부여)

ex) chmod go=rw first.dat 그룹과 기타에 읽기와 쓰기 권한 부여

ex) chmod +rwx first.dat 소유자는 rwx, 그룹과 기타사용자는 r-x

2.     숫자모드

n  rwx->111, rw- -> 110, r-x ->101 이런식으로 바꿔줌

그리고 8진수에 따라서 이 숫자를 써줌

ex) 755 ->rwxr-xr-x, 764->rwxrw-r—

 

3.     마스크

n  umask [마스크값]

n  umask를 치면 현재 마스크 값이 나온다

n  umask [8진수] (ex: umask 077)로 마스크값을 변경

n  허용하지 않을 값 umask 값으로 지정한다

n  Umask와 파일의 권한이 XOR되어 해당 권한이 제거된다

n  파일생성시 혹은 수정을 할 때 등에 umask가 자동으로 적용된다.

(그래서 chmod +rwx해도 그룹,기타에는 r-xr-x로 설정되는 것이다. 기본 mask 022)

 

 

파일내용 검색

 

grep : 지정한 파일에 패턴이 들어있는지 검색하는 명령어(해당 패턴이 있는 줄을 출력)

grep [옵션] 패턴 파일명들

 옵션 -i : 대소문자를 무시하고 검색

      -l : 해당 패턴이 들어있는 파일 이름을 출력

      -n : 각 라인의 번호도 함께 출력

      -v : 명시된 패턴과 일치하지 않는 줄을 출력

      -c : 패턴과 일치하는 라인수 출력

      -w : 패턴이 하나의 단어로 된 것만 검색

ex) grep –i hello hello.c   (hello.c안에있는 hello를 가져옴, 대소문자 무시)

 

메타문자

  ^ : 라인의 시작 해당 문자열로 시작하는 모든 행(ex : grep ^문자열 a.txt)

  $ : 라인의 끝 해당 문자열로 끝나는 모든 행(ex : grep 문자열$ a.txt)

  . : 한 글자 – .하나가 임의의 한글자로 대응됨(ex : grep a..b a.txt ->a로시작 b로 끝나는 4글자)

  ? : 없거나 한 글자 – ab?으로 쓰면 ab거나 ab다음 임의의 한 글자

* : 앞의 항목이 없거나 반복 – ab*쓰면 ab다음에 업거나 반복적라인 검색

[ ] : 괄호 안의 글자 중 하나 – [ab]d로 쓰면 ad혹은 bd검색

[^] : 괄호 안에 있는 글자가 아닌 글자 – [^a-m]att 쓰면 att앞에 a에서 m이 나오는 않는 라인 검색

 

 

egrep : grep의 확장판 명령

egrep [옵션] 패턴 파일명들

 메타문자

+ : 앞의 글자가 하나 이상 나옴 – [a-z]+ark하면 결과는 airpark, dark, bark, shark

x|y : x또는 y중 하나가 나옴

( | ) : 문자열 그룹 – (1|2)+하면 1또는 2가 하나이상, search(es | ing)하면 searches 또는 searching

 

fgrep : 문자열 검색

fgrep [옵션] 문자열 파일명들

-       이 명령어는 문자열에 들어가는 모든 문자를 일반 문자로 인식한다

*을 쓰거나 ?, + 등을 써도 특수한 메타문자대신 그냥 *,?,+로 인식함

 

find : 파일을 찾는 명령어

find 범위 표현식 동작

 범위설정 :  ~(홈 디렉토리에서 찾기 시작), .(현재 디렉토리에서 찾기 시작) 등등

 표현식

-       -name filename : 파일이름을 지정(메타문자사용 가능하나 “ “ 안에 있어야함)

-      -type : 파일종류(f : 일반파일, d : 디렉토리)

-       -mtime[+ | -]n : 수정(접근)시간으로 검색, +하면 n일보다 오래된거, -하면 n보다 짧거나 일치하는 파일 (atime도 있음) (여기서 n 24시간 단위, 2 48시간)

-       -user loginID : 해당 id가 소유한 파일 모두 검색

-       -size [+ | -]n : 파일크기 설정 +n보다 크거나 -n보다 작거나 크기 n인 파일검색(1=512bytes)

-       -newer : 기준시간, 기준시간보다 이후에 생성된 파일검색 (-newer 기준파일명)

-       -perm : 사용권한, 사용권한과 일치하는 파일검색(8진수로 입력)

동작종류

-       -exec 명령 {} \;   exec옵션은 \;으로 끝난다. 검색된 파일은 {}위치에 들어감

-       -ok 명령 {} \;     exec의 확인모드, 사용자의 확인을 받아야 명령적용

-       -print             화면에 경로명을 출력(기본동작임)

-       -ls                긴 목록형식으로 검색결과를 출력

결합기호

-       -a : and(기본임), -o : or, ! : not  <- 이 세가지 사용해서 결합가능

 

 

which : PATH 환경변수에 지정된 경로에서 명령을 찾음

which 명령 (ex : which ls   -> 결과는 /user/bin/ls)

 

whereis : 지정된 경로에서 명령검색(/usr/bin, /usr/sbin, /usr/game등등등)

whereis 명령

 

 

 

UNIX 프로세스의 종류

-       데몬 : UNIX커널에 의해 시작되는 프로세스로 서비스 제공을 위한 프로세스들

-       부모, 자식 프로세스(^^ 알겟지…)

-       고아 : 자식프로세스 종료 전에 부모가 종료된 프로세스, 고아는 1번 프로세스를 새 부모로 가짐

-       좀비 : 부모프로세스가 종료처리를 하지 않은 프로세스, 프로세스 테이블만 차지하고 있음

ps [옵션]

 옵션

-       -e : 시스템에 있는 모든 프로세스 목록 출력

-       -f : 프로세스에 대한 자세한 정보 출력

-       -u uid : 특정 사용자에 속한 모든 프로세스 출력

 목록보기

-       UID : 소유자의 사용자 ID

-       PID : 프로세스 번호

-       PPID : 부모 프로세스 번호

-       C : 프로세스 우선순위

-       STIME : 프로세스 시작시간

-       TTY : 터미널 번호( ? = 데몬 )

-       TIME : CPU 사용시간

-       CMD : 명령어 이름

 

pgrep : 프로세스 이름으로 찾아 정보를 출력(Solaris only라고 나와있지만 요즘 리눅스 다됨 - _-)

pgrep [옵션] 패턴

 옵션

-       -x : 패턴과 정확히 일치하는 PID 출력

-       -n : 패턴을 포함하고 있는 가장 최근의 PID출력

-       -U uid : 특정 사용자에 속한 PID출력

-       -l : PID와 프로세스 이름출력

-       -t term : 특정 터미널과 관련된 프로세스 출력

 

Kill : 프로세스 종료 (pkill)

kill [시그널] pid

 시그널 종류

-       1 (SIGHUP) : 터미널 연결이 끊어진 경우에 발생

-       2 (SIGINT) : 보통 ctrl-c에 의해 발생

-       9 (SIGKILL) : 프로세스 kill시킴, 무시불가능, 강제종료

-       15 (SIGTERM) : 프로세스 종료시킴, 무시될 수도 있음, 기본시그널(soft kill)

 

pkill [시그널] 프로세스명

-       사용방법은 kill와 같지만 프로세스명으로 사용가능

 

Foreground & background

-       Foreground는 사용자가 명령을 입력한 후 결과가 출력될 때까지 기다려야 하는 경우

-       Background는 처리결과 출력과 관계없이 다른 작업 계속함.(명령 실행 시 마지막에 &붙임)

 

Jobs : 백그라운드 작업을 모두 출력

Job은 쉘이 관리할 수 있는 프로세스(pid와 쉘이 할당한 job id있음)

Jobs [%작업번호] ->특정 작업의 정보만 출력

-       %+ 또는 %% 하면 작업순사가 +인 작업 정보 출력, %-하면 순서가 인 작업정보 출력

 

작업 전환 및 종료명령

bg [%작업번호] : 현재 작업 혹은 특정작업 백그라운드로 전환시켜 실행

fg [%작업번호] : 포그라운드로 전환시켜실행

ctrl+z : 포그라운드작업 중지시키고 백그라운드의 중지된 목록으로 보냄

stop %작업번호 : 백그라운드 수행중인 특정작업 중지

kill %n : 특정 작업을 종료

 

nohup 백그라운드명령

일반적으로 백그라운드 작업을 실행시킨 단말기나 사용자가 로그아웃 시 함께 종료된다.

로그아웃 후에도 작업이 완료될 때까지 실행해야 할 대 nohup사용

명령어 실행 결과와 오류메시지는 현재 디렉토리 nohup.out파일로 자동저장

 

users : 현재 시스템에 로그인하고 있는 사용자명을 출력

 

who : 시스템을 사용하고 있는 사용자의 정보를 출력

-       -q : 사용자명만 출력

-       -H : 출력항목의 제목도 함께 출력

-       -b :마지막으로 재부팅한 날짜와 시간을 출력

 

w [사용자명] : 로그인한 사용자정보와 현재하고 있는 작업정보를 출력

 

who am i whoami 명령의 차이

who am i는 자신의 정보를 출력한다(로긴ID, 시간, 아이피 등), whoami는 로긴ID만 출력

 

id [옵션] : 사용자의 로긴ID와 그룹정보를 출력

-       -a : 기본 그룹외에 2차 그룹정보도 출력

 

 

 

 

 

 

 

 

파일백업 및 압축명령

 

tar : 파일과 디렉토리를 묶어 하나로 만드는 것

tar 기능 [아카이브파일] 파일이름

기능

-       c : tar 파일 생성

-       t : tar 파일목록 보기

-       x : tar 파일 풀기

-       f : 아카이브파일이나 장치 등 지정

-       v : 표준출력으로 실행내용 출력

-       h : 심볼릭링크의 원본 파일 포함

 

jar : 여러 파일을 하나의 jar 아카이브 파일로 묶어서 압축

jar 옵션 [아카이브파일] 파일이름

 옵션

-       c : tar파일생성

-       t : 파일목록보기

-       x : tar파일풀기

-       f : 아카이브파일지정

-       v : 실행내용 출력

-       0 : 압축없이 아카이브 파일만 생성

 

pack / unpack : 확장자가 .z인 압축 파일 생성 및 해제

pack [옵션] 파일이름   /    unpack 파일이름

 옵션

-       - : 상세정보 출력

-       -f : 강제압축

 

pcat 파일이름          :   .z파일 내용을 화면에 출력

 

compress / uncompress : 확장자가 .Z인 압축파일 생성 및 해제

compress [옵션] 파일이름 / uncompress 파일이름

 옵션

-       -v : 압축관련 정보 출력

-       -c : 압축 결과를 화면에 출력. .Z 파일생성 안함

 

zcat 파일이름         : .Z파일 내용을 화면에 출력

 

gzip / gunzip : 확장자가 .gz인 압축파일 생성 및 해제

 옵션

-       -d : 압축해제

-       -l : 압축된 파일의 내용 출력

-       -r : 현재 디렉토리부터 하위 디렉토리까지 모두 압축

-       -t : 압축 파일 검사

-       -v : 압축정보 화면에 출력

-       -g : 최대한 압축

 

gzcat 파일이름    :   .gz파일 내용을 화면에 출력

 

zip / unzip  : 확장자가 .zip인 압축파일 생성 및 해제

zip [옵션] 파일이름   /  unzip 파일이름

-       -v : 압축정보 화면에 출력

 

 

통신명령

 

write 로그인ID [단말기명]       :  사용자에게 메시지를 보냄 작성 후 콘트롤+d누름 전송

wall [파일명]    :  로그인하고 있는 모든 사용자에게 메시지 전송,

파일명은 메시지를 파일로 저장했을 경우 지정

talk 사용자주소 [단말기명] : 다른 사용자와 1:1대화하기

(사용자명@호스트명, 같은 호스트면 사용자명만 지정)

mesg [y | n] : 메시지를 단말기로 출력하는 것을 허용 또는 거부

mailx [-sf] [사용자명@호스트]        / 내용작성 후 . 이나 ^D 입력하면 전송

 옵션

-       -s : 제목 지정

-       -f : mbox의 내용확인

 

hostname : 현재 시스템의 호스트명을 출력

ping 호스트명 또는 IP주소 : 시스템이 네트워크를 통해 연결되는지 확인

finger [id | id@host | @host] : 현재 로그인한 사용자 정보를 출력 

(who결과에 덧붙여 완전한 이름출력->/etc/passwd

@host하면 특정호스트의 사용자 목록 출력

ftp host명 또는 IP주소 : TCP/IP를 사용하는 파일송수신 명령

ftp명령어 생략 : bin, get, put, cd, bye pwd 등등)

 

 

 

 

유틸리티 명령

 

wc : 파일의 라인수, 단어수, 바이트, 문자수 출력

 옵션

-       -c : 바이트 수

-       -m : 문자수

-       -C : -m과 동일

-       -l : 라인수

-       -w : 공백이나 새로운 행으로 구분된 단어수

 

sort : 아스키 코드값을 기준으로 파일의 텍스트 내용을 정렬하여 화면에 출력

sort [옵션] 파일

 옵션

-       -b : 앞에 붙는 공백무시

-       -c : 정렬이 되지 않은 상태로 출력

-       -d : 사전식 순서로 정렬. 숫자, 문자, 공백만 비교(특수문자는 무시)

-       -f : 대소문자 구분안함

-       -m : 정렬된 파일을 통합

-       -n : 숫자를 산술값으로 전환해 정렬

-       -r : 역순정렬

-       -t 문자 : 지정한 문자를 필드 구분자로 사용

-       +번호 : 번호+1필드를 기준으로 정렬

-       +pos1 –pos2 : 정렬하고자 하는 필드의 열을 지정, pos1부터 pos2까지 정렬

 

split : 큰 파일을 일정한 크기의 여러 개 작은 파일로 분할

split [옵션] [파일]

 옵션

-       -b n : 크기가 n 바이트인 파일로 분할

-       -n : n줄씩 분할

(디폴트는 1000줄씩 분할),(파일을 지정하지 않으면 표준입력내용을 분할 저장)

 

uniq : 파일/표준입력으로 입력된 내용 중 중복된 내용의 줄이 연속으로 있으면 하나만 남김

uniq [옵션] [입력파일 [출력파일] ]

 옵션

-       -u : 중복되지 않는 줄만 출력

-       -d : 중복된 줄 중 1줄만 출력

-       -n : 원하는 필드 앞의 공백과 문자열 무시. n은 필드번호

-       -c : 앞에 붙어있는 라인번호는 그대로 유지한다

(파일을 지정하지 않으면 표준입력내용을 처리, 입출력 파일 이름은 달라야 함)

cut : 파일의 각 행에서 선택된 필드를 잘라햄

cut [옵션] [파일]

 옵션

-       -c 리스트 : 각 줄에서 잘라낼 문자 위치 지정

(ex : cut –c5-8 -> 5번째전까지 그리고 8번째이후 자름, cut –c5하면 5번째 문자 외 다 자름)

-       -f 필드수 : 지정한 필드 잘라냄

-       -d 문자 : 필드 구분자

 

paste : 사용자가 지정한 두 개 이상의 파일 내용 중 같은 줄을 붙이거나 파일 끝에 다른 파일의 내용을 추가

paste [옵션] [파일1 파일2 …]

 옵션

-       -s : 파일의 끝에 추가(split으로 나눈 파일을 원래대로 붙일 때, 수평붙이기)

-       -d문자 : 필드 구분자

-       - : 파일대신 표준입력 사용

 

dd : 지정한 입력파일을 지정한 옵션에 따라 변환하여 출력파일로 저장

dd [옵션] [if=입력파일] [of=출력파일]

 옵션

-       bs=n : 입출력 블록의 크기를 n바이트로 지정

-       conv=lcase : 알파벳을 소문자로 변환

-       conv=ucase : 알파벳을 대문자로 변환

 

 출처 - http://arings.tistory.com/entry/Unix-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%A0%95%EB%A6%AC1

 

--------------------------------------------------------------------------------
1.DOS와 비슷한 명령어
--------------------------------------------------------------------------------
(1). cat

기능    : 파일의 내용을 화면에 출력. DOS의 'type' 명령과 유사.
사용법  : cat [options]

옵션    : -n     
        : 행번호를 붙여서 출력.
예제    # cat /etc/fstab
        : /etc/fstab의 내용을 화면에 출력
사용팁  : 리눅스에서 두개이상의 옵션을 붙힐때는 앞의 '-'는 한번만 사용하고
          영문자만 붙혀서 사용.
--------------------------------------------------------------------------------
(2). cd

기능    : 디렉토리 변경.
          그냥 'cd'만 입력하고 엔터키를 누르면 자기 자신의 홈디렉토리로 이동.
사용법  : cd <디렉토리>

예제    # cd ~dalma
        : dalma 라는 유저의 홈디렉토리로 이동

        # cd
        : 자기자신의 홈디렉토리로 이동

        # cd ..
        : 현재 디렉토리에서 부모디렉토리로 이동

        # cd /usr/bin
        : /usr/bin 디렉토리로 이동

주의점  : cd 명령 후 반드시 한칸 띄우도록 하자.
--------------------------------------------------------------------------------
(3). cp

기능    : 파일 복사
사용법  : cp [options]

옵션
        -b  : 덮어쓰거나 지울 때 백업본의 파일을 만든다.
        -d  : symbolic link 파일을 그대로 복사한다.
        -f  : 같은 파일의 이름을 가지는 파일이 있는 경우 이 파일을 지운 후 복사한다.
        -i  : 같은 파일 이름을 가지는 파일이 있는 경우 사용자에게 확인 후 복사한다.
        -R  : 서브디렉토리를 포함하여 복사한다.

예제
        # cp .bash_profile temp.bash_profile
        : .bash_profile 파일을 temp.bash_profile로 복사

        # cp -R ../home/tmp/* .
        : 현재 디렉토리의 부모 디렉토리에 있는 '/home/tmp' 디렉토리 밑의 서브디렉토리를
          포함한 모든 디렉토리를 현재의 디렉토리로 복사.

주의점  : DOS와는 달리 현재 디렉토리로 복사할 때 을 생략해서는 안된다.
          현재 디렉토리를 뜻하는 '.'을 두번째 예제와 같이 꼭 붙혀주도록 하자.
--------------------------------------------------------------------------------
(4). date

기능    : 시스템의 날짜와 시간을 표시하고 이를 수정
사용법  : date
--------------------------------------------------------------------------------
(5). ls

기능    : 파일과 디렉토리를 출력
사용법  : ls [option]

옵션
        -a  : 디렉토리내의 숨김 파일까지 모두 표시
        -l  : 파일의 사용허가, 소유자, 그룹, 파일의 크기, 날짜 등을 출력
        -F  : 파일의 형태와 함께 출력되는데 출력되는
              파일의 형태는 '*', '@', '|', '=' 등이며,
              이것은 각각 실행 파일, 심볼릭 링크, FIFO 소켓을 나타낸다.
        -m  : 쉼표를 구분하여 파일을 가로로 출력한다.
        -R  : 서브디렉토리의 내용을 포함하여 파일을 출력한다.

예제    
        # ls -alF /home/dalma
        : /home/dalma 디렉토리에 있는 모든 파일을 파일의
          사용허가, 소유자, 그룹, 파일의 크기, 날짜등을 포함하여,
          파일의 형태와 함께 출력

사용팁  : 리눅스를 비롯한 유닉스에서는 파일의 처음이 '.'로 시작하면
          숨겨진 파일로 인식.
          즉, '.bash_profile' 같은 파일은 '-a' 옵션을 붙히지 않으면 'ls'명령으로
          확인을 할 수가 없다.
--------------------------------------------------------------------------------
(6). man

기능    : 도움말을 출력
사용법  : man [option]

예제    : 'man ls' (ls 명령어의 도움말을 출력한다.)
--------------------------------------------------------------------------------
(7). mkdir

기능    : 새로운 디렉토리를 만드는 데 사용한다. DOS의 'md' 명령과 유사하다.
사용법  : mkdir [option]
옵션
        -p  : 지정된 모든 서브디렉토리까지 함께 생성한다.
        -m mode : mode에 해당하는 사용 허가로 디렉토리를 생성한다.
                  Mode에 대한 설명은 뒤에서 설명할 'chmod' 명령에서 함께 설명한다.

예제    : 'mkdir /home/dalma/tmp' (/home/dalma 디렉토리 밑에 tmp 디렉토리를 만든다.)
--------------------------------------------------------------------------------
(8). more

기능    : 주어진 파일의 내용을 한 화면씩 출력한다. DOS의 'more' 명령과 유사하다.
사용법  : more

옵션    : 리눅스에서의 more 명령은 DOS에서와는 다르게 실행중 화면이 정지해 있을 때
          명령어가 제공되는데 이 명령어를 이용하여 파일의 내용을 편리하게 볼 수 있다.
       
        h           : 도움말
        [space], z  : 다음 페이지를 출력
        [Return]    : 한 라인씩 스크롤시킴
        d, : 반 페이지씩 스크롤시킴
        q, Q        : 종료
        f           : 다음 페이지를 출력
        b,          : 앞 페이지를 다시 출력
        /<검색어>   : <검색어>에 해당되는 단어를 검색
        =           : 현재라인을 출력
        :! : 에 의해 주어진 명령어를 실행
            : 화면을 다시 리프레쉬 시킴
        :f          : 현재 파일 이름과 라인을 출력

사용팁  : 유닉스와 파이프 명령 '|'을 이용해서 다른 명령과 함께 조합하여 사용할 수 있다.
          예를 들어 'cat /home/dalma/readme | more' 를 입력하면 /home/dalma/readme 파일을
          화면에 출력하는데 한화면씩 끊어서 출력을 하고, 'ls /home/dalma |more' 명령을
          입력하면 /home/dalma 디렉토리 안의 내용을 한화면씩 출력한다.
--------------------------------------------------------------------------------
(9). mv

기능    : 파일을 다른 파일이나 디렉토리로 이동시키거나 파일의 이름을 바꾼다.
          DOS에서는 'ren' 명령이나 'move' 명령과 유사하다.
사용법  : mv [option]
옵션
        -b  : 파일을 지우기 전에 백업본을 만든다.
        -f  : 옮겨질 디렉토리에 같은 파일이 있으면 덮어쓴다.
        -i  : 옮겨질 디렉토리에 같은 파일이 있는지 확인한다.
        -u  : 옮겨질 디렉토리에 구버전의 파일이 있는 경우에만 옮긴다.
예제
        'mv /home/dalma /home/bar'
        (/home/dalma 디렉토리를 /home/bar 디록토리로 이름을 바꾼다)
       
        'mv /home/dalma/readme /home/foo/README'
        (/home/dalma/readme 파일을 /home/foo/README 파일로 이동한다.)

사용팁  : 리눅스에서는 파일명에 대소문자를 철저히 구분한다.
          즉 'readme'파일과 'README' 파일은 엄현히 다른 파일이다.
--------------------------------------------------------------------------------
(10). pwd

기능    : 현재 작업하고 있는 디렉토리의 절대경로명을 보여준다. DOS의 'cd' 명령어와
          유사하다.
사용법  : pwd
주의점  : 도스에서 'cd' 명령을 입력하면 현재 디렉토리의 절대경로를 보여주지만
          리눅스에서 'cd' 명령을 입력하면 자신의 홈디렉토리로 이동해 버린다.
          절대경로를 알기 위해서는 'pwd' 명령을 써야 한다.
--------------------------------------------------------------------------------
(11). rm

기능    : 파일을 지우는 명령으로 DOS의 'del', 'deltree' 명령과 유사하다.
사용법  : rm [option]
옵션
        -f  : 삭제중 오류가 발생하더라도 에러 메시지를 출력하지 않는다.
        -i  : 삭제하기 전에 확인을 한다.
        -r  : 서브디렉토리를 포함하여 지운다.
        -v  : 지워지는 파일 이름을 출력한다.
예제
        'rm -rf /home/dalma/tmp'
        (/home/dalma/tmp 디렉토리를 서브디렉토리를 포함해서 모두 지운다.)
        'rm .history'
        (.history 파일을 지운다.)

주의점  : 슈퍼유저 계정인 'root'로 이 명령을 쓸때는 아주 신중을 가해야 한다.
          특히 '-r' 옵션을 쓰면 실수로 리눅스 전체를 날릴 수 있기 때문에
          가급적 '-i' 옵션과 함께 사용하도록 한다. 'alias rm rm -i' 명령을 내리면
          rm 명령을 쓸 때 마다 -i 옵션이 자동으로 추가된다.
--------------------------------------------------------------------------------
(12). rmdir

기능    : 빈 디렉토리를 지우는 명령으로 DOS의 'rm' 명령과 유사하다. 그러나 'rm -r'
          명령으로 대처할 수 있기 때문에 그렇게 많이 쓰이지는 않는 명령이다.
사용법  : rmdir [option]
옵션
        -p : 지우고자 하는 디렉토리의 부모디렉토리까지 지운다.

예제    : 'rmdir -p /home/dalma'
          (/home 디렉토리에 파일이 존재하지 않을 경우라면 /home 디렉토리까지 지운다.)
--------------------------------------------------------------------------------

--------------------------------------------------------------------------------
2.User에 관한 명령어
--------------------------------------------------------------------------------
(1). chgrp

기능    : 파일의 그룹소유권을 바꾼다.
사용법  : chgrp [option]
옵션
        -R : 한 디렉토리내의 모든 파일이나 하위 디렉토리의 그룹소유권을 바꾼다.
예제
        'chgrp admin /home/dalma/readme'
        (/home/dalma/readme 파일의 그룹소유권을 admin으로 바꾼다.)
        'chgrp -R admin /home/dalma
        (/home/dalma 디렉토리아래의 모든 파일의 그룹 소유권을 admin으로 바꾼다.)
--------------------------------------------------------------------------------
(2). chmod

기능    : 파일에 대한 개인, 그룹, 타인에 대한 접근 권한을 변경.
사용법  : chmod [options]

옵션
        r : 읽기 권한 설정
        w : 쓰기 권한 설정
        x : 실행 권한 설정 (디렉토리의 경우는 접근 권한)
       
        u : 파일의 소유자(user)
        g : 그룹(group)
        o : 기타(other)
       
        a : 전체사용자(all)
        + : 권한 추가
        - : 권한 삭제
        = : 권한 지정

예제
        # chmod a+r *
          (현재 디렉토리의 모든 파일을 모든 사용자가 읽을 수 있도록 설정)
        # chmod +r *
          (위예제와 상동)
        # chmod o-r, o-w *
          (현재 디렉토리의 모든 파일을 기타사용자에게 읽기, 쓰기 권한을 없앰)
        # chmod og-x stuff
          (stuff 파일에서 그룹과 기타사용자에게 실행권한을 없앰)
        #chmod u+rwx stuff
          (stuff 파일에서 파일 소유자가 읽기, 쓰기, 실행권한을 추가)
        #chmod a=r *.txt
          (.txt로 끝나는 모든 파일을 전체 사용자가 읽을 수만 있도록 지정)

사용팁  : 숫자를 이용하여 특정권한을 지정

        '4'는 읽기 권한
        '2'는 쓰기 권한
        '1'은 실행 권한

        즉, 읽기, 쓰기권한 지정 => 4+2 = 6 로 표시
        예를 들면
        stuff라는 파일에 소유자에게는 모든권한을 그룹과
        다른 사용자에게는 읽기,실행권한을 주려면
        # chmod 755 stuff
--------------------------------------------------------------------------------
(3). chown

기능    : 파일의 소유권을 바꾼다.
사용법  : chown [option]
옵션    -R : 한 디렉토리내의 모든 파일이나 하위 디렉토리의 그룹소유권을 바꾼다.

예제    :
        'chown igi /home/dalma/readme'
        (/home/dalma/readme 파일의 소유권을 igi으로 바꾼다.)
        'chown -R igi /home/dalma
        (/home/dalma 디렉토리아래의 모든 파일의 소유권을 igi으로 바꾼다.)

사용팁  : 리눅스에서는 chown 명령을 통해서 파일의 소유권과 그룹의 소유권을
          한번에 바꿀 수 있다. 이를 위해서는 chown의 란에
          'igi.admin'이라고 입력하면 파일의 소유권은 'igi' 파일의
          그룹소유권은 'admin'으로 바뀌어진다.
--------------------------------------------------------------------------------
(4). su

기능    : 시스템에 접속한 상태에서 재로그인없이 다른 사람 ID로 접속한다.
사용법  : su [option] [user ID]
옵션
        - : 이 옵션이 없으면 자신의 환경변수의 값을 가지고 다른 사람 ID의 권한만 갖지만
            이 옵션을 붙히면 그 사용자의 환경변수의 내용까지 완벽하게 복사를 한다.
예제
        'su'
        (사용자 ID없이 명령을 내리면 자동으로 root로 접속을 시도한다.)
        'su - dalma'
        (dalma ID로 접속을 하는데 dalma의 환경변수의 내용까지 맞춘다.)
사용팁  : 리눅스에서는 외부에서 접속을 할 때 root로의 접속을 금지하고 있다.
          이유는 보안상의 문제인데 가급적(가능한) root에서의 작업은 피하고
          root의 권한이 필요하면 일반 사용자 ID로 작업을 하다가 su 명령을
          이용하여 root로 접속하는 습관을 들이는게 좋다.
--------------------------------------------------------------------------------
(5). who

기능    : 시스템에 어떤 사람이 로그인하고 있는가를 보여준다.
사용법  : who
          write
기능    : 특정사용자와 대화를 시작한다.
사용법  : write [ttyname]
예제
        'write dalma'
        (dalma에게 표준입력을 이용하여 대화하기 시작한다.)
        'write dalma /dev/tty21'
        (/dev/tty21에 있는 dalma와 대화를 시작한다.)

사용팁  : 마지막의 [ttyname]은 한사용자가 동시에 두번이상 접속을 하였을경우
          대화할 터미널을 결정하는 부분이다.
          그리고 어떤 사용자와 대화를 마쳤을 경우 [CTRL+D]를 눌러주면 대화를 종료한다.
--------------------------------------------------------------------------------
(6). find

기능    : 디스크에서 특정 파일을 찾아낸다.
사용법  : find <경로명> [expression]
옵션
        -name filename    : 찾을 filename을 입력한다.
        -perm octperm     : 특정 권한을 가진 파일을 검색한다.
                            이때 권한은 숫자형태로 입력한다.
        -type t           : 특정 종류의 파일을 (디렉토리, 일반파일 등등) 검색한다.
        -size n           : 크기가 n인 파일을 검색한다.
        -mtime n          : n일동안 변경된 파일을 검색한다.
        -print            : 파일 이름을 출력한다.
        -maxdepth levels  : 검색 시 서브디렉토리를 levels만큼만 진입을 해서 검색한다..
        -mindepth levels  : maxdepth와 반대의 명령어로 검색 시 서브디렉토리의
                            깊이가 level 이상부터 검사를 한다.
예제
        'find ~ -name '*.doc' -print
        ( 접속한 사용자의 홈디렉토리에 있는 파일 중에서 .doc로 끝나는 모든 파일을
          화면에 보여준다.)
        'find ~ -type d -print'
        (접속한 사용자의 홈디렉토리에 있는 파일 중 디렉토리만 출력한다.)
--------------------------------------------------------------------------------
(7). ln

기능    : 특정파일의 링크파일을 만든다.
사용법  : ln [option] , ln [option]
          file1의 링크를 file2에 만든다. file2가 명시되어 있지 않으면
          현재 디렉토리에 링크를 만든다.
옵션
        -s  : 심볼릭 링크를 만든다. 이 옵션을 넣고 링크를 만들면
              파일의 형태가 'l'로 표기가 된다.
예제
        'ln /usr/base /usr/lock'
        (/usr/base에 /usr/lock라는 링크를 만든다.)
        'ln com1 com2 com3 /bin'
        (/bin에 com1, com2, com3의 링크를 만든다.)
--------------------------------------------------------------------------------
(8). grep

기능    : 주어진 패턴을 포함하는 파일의 라인을 출력시킨다.
사용법  : grep [option]
옵션
        -C : 패턴이 일치하는 문장의 아래 위 두 라인까지 포함하여 출력한다.
        -c : 패턴이 일치하는 라인의 개수를 출력한다.
        -i : 대소문자를 구분하지 않고 패턴과 일치하는 것을 찾는다.
        -v : 패턴과 일치하지 않는 내용을 출력한다.
        -w : 패턴과 한단어로 일치해야 출력한다.
        -x : 패턴과 전체 라인이 일치해야 출력한다.
예제
        'grep linux /home/dalma/readme'
        (readme 파일 중에서 linux라는 패턴을 포함하는 모든 라인을 출력한다.)
        'grep -c /bin/bash /etc/passwd
        (/etc/passwd 파일에서 /bin/bash의 개수 -로그인셀이 본셀인 사용자의 수를 출력한다.)
        'grep -v '^[0-9]' readme'
        (readme 파일에서 숫자로 시작하지 않는 모든 라인을 보여준다.

사용팁  : 마지막 예제에서 '^[0-9]'의 표현은 좀 생소한 표현일것이다.
          이것은 정규식이라고 해서 어떤 문자패턴을 표현하는 하나의 표현식이다.
          간단히 설명을 하면 '[0-9]'는 0에서 9까지를 의미하고 '^'는 반대의 의미를 나타낸다.
          즉 '^[0-9]'는 0-9로 시작하지 않는 표현이라는 뜻을 가지게 된다.
--------------------------------------------------------------------------------
(9). wc

기능    : 그렇게 많이 쓰이는 명령은 아니지만, 리눅스 프로그래머가 자신이 짠 소스의
          총라인이 얼마인지 아님 특정 단어의 개수를 조사할 때 쓰이는 명령으로
          특정 단어나 문자 또는 행의 수를 세는 명령이다.
사용법  : wc [option]
옵션
        -c : 문자의 수만 센다.
        -l : 행의 수만을 센다.
        -w : 단어의 수만을 센다.
사용예
        'wc /home/dalma/readme'
        (readme 파일의 행, 단어, 문자의 수를 출력한다.)
        'who | wc -l'
        (현재 접속한 사람의 수를 표시한다.)
사용팁  : 리눅스는 혼자서 쓰는 운영체제가 아니라 여러 사람이 동시에 사용을 하는 운영체제이다.
          who는 리눅스에 접속한 모든 사용자의 목록을 보여주는 명령이고 '|'는 파이프 기호라고
          해서 여러 개의 명령어를 조합할 때 쓰이는 기호이다.
          즉, 파이프 앞의 출력의 내용을 파이프 뒤의 명령의 입력으로 넣어주는 기능을 한다.
          위의 예제에서 'who | wc -l' 명령은 'who' 명령의 결과를 'wc -l'의 입력으로 넣어준다.
          그래서 현재 접속한 사용자의 개수를 알수 있는것이다.
--------------------------------------------------------------------------------

--------------------------------------------------------------------------------
3.시스템 명령어
--------------------------------------------------------------------------------
(1). df (disk free)

기능    : 디스크의 남은 공간을 보여준다.
사용법  : df [option] [FileSystem | File]

옵션
        -k : kilobyte 단위로 보여준다.
        -m : megabyte 단위로 보여준다.

예제
        # df -k
        (kilobyte단위로 남은 공간을 보여준다. -기본값)
        # df .
        (현재 디렉토리가 포함되어 있는 파티션의 남은공간을 보여준다.)
--------------------------------------------------------------------------------
(2). du

기능    : 특정 디렉토리에서 하부디렉토리까지 포함한 디스크의 사용량을 보여주는 명령이다.
사용법  : du [option] [files]
옵션
        -a : 디렉토리에 있는 파일 하나하나의 크기를 출력한다.
        -s : 총 사용량만 표시해 준다.
        -k : 사용량을 kilobyte 단위로 출력해준다.
        -h : 용량을 보기 좋게 표시해준다.
예제
        'du -a'
        (현재 디렉토리의 디스크 사용량을 파일단위로 모두 출력한다.)
        'du -s *'
        (현재 디렉토리의 첫번째 단계까지만 디스크의 사용량을 출력한다.)
--------------------------------------------------------------------------------
(3). env

기능    : 현재 시스템 사용자들의 환경 변수를 보여준다.
사용법  : env
--------------------------------------------------------------------------------
(4). free

기능    : 가상메모리를 포함한 메모리의 사용현황을 보여준다.
사용법  : free
--------------------------------------------------------------------------------
(5). id

기능    : 자신의 ID번호와 자신이 속한 그룹의 ID를 보여준다.
사용법  : id
--------------------------------------------------------------------------------
(6). kill

기능    : 특정 프로세서에게 특정 시그널을 보낸다.
사용법  : kill [-signal_number] [process id]
예제    u 'kill -HUP 549'
        (549번 프로세서에 HUP신호를 보낸다.)
--------------------------------------------------------------------------------
(7). ps

기능    : 사용자나 시스템 프로세서의 상태에 관한 정보 출력
사용법  : ps [option]

옵션
        -a : 전체 사용자의 모든 프로세서를 출력
        -l : 결과를 상세하게 출력
        -u : 사용자 이름과 프로세서 시작 시간을 출력
        -x : 제어터미널을 갖고 있지 않은 프로세서를 출력

예제
        # ps -aux
        : 전체 사용자의 제어터미널을 갖고 있는 프로세서를 포함하여
          사용자 이름과 프로세서 시작시간을 포함하여 출력. 일반적으로 많이 쓰이는 형태
         
- END -         

출처 - http://blog.daum.net/mindus/15650888


'IT' 카테고리의 다른 글

[UNIX] 파일의 날짜와 시간정보를 변경하는 touch 명령어  (0) 2016.03.15

+ Recent posts