umask

- 새로운 파일이나 디렉토리에 대한 허가권 지정 명령어

- chmod와 반대로 해당 그룹 및 다른 사용자들에게 쓰기 권한을 박탈하는 것

- 일반 파일의 경우 666, 디렉토리인 경우 777에서 umask 값을 뺀 값으로 허가권 지정

- .profile, .cshrc, .bashrc, .login과 같은 사용자 프로파일에서 설정

 

 umask

 디렉토리 허가권 

 파일 허가권

002 

 775

 664

 007

 770

 660

 020

 757

 646

 070

 705

 604

 022

 755

 644

 


모든 사용자에서 적용할 umask 값은  /etc/login.defs 에서 UMASK 값을 설정함으로써 정할 수 있다.


출 처 : http://gimbonggu.blog.me/90100567367 

* 메모리 맵 - mmap() <파일 혹은 디바이스를 메모리와 대응>

; 파일(리눅스에서는 디바이스도 파일로 처리하므로 디바이스도 메모리 맵으로 연결 가능)을 처리하기 위해서는 보통 저수준으로는 파일 디스크립터를 이용하고, 고수준으로 접근하기 위해서는 파일 구조체 포인터를 이용하여 접근하게 된다. 하지만 이런 방식을 이용하면 버퍼를 거쳐서 실제 입출력을 하게된다. 하지만 mmap()을 이용하여 메모리 맵 방식으로 파일을 연결하게 되면 버퍼를 이용하는 것이 아니라 '페이지(page)'를 이용하여 데이터 처리가 가능해진다. 상대적으로 크기가 작은 버퍼에 비해 보통 4KB의 크기를 가지는 페이지를 이용하면 처리 가능한 크기와 처리 속도가 향상된다. 그렇기 때문에 데이터 크기가 크거나 빠른 처리를 해야하는 경우 메모리 맵 방식을 종종 사용하게된다. 메모리 맵을 사용하면 처리 속도가 빨라지는 예가 바로 처리하는 데이터가 큰 동영상을 볼 때이다. 그리고 실제 실행 파일도 윈도우든 리눅스든 실행 할 때 페이지로 분할되므로 메모리 맵 방식으로 매핑된다. 대표적으로 코드 영역은 데이터의 변경이 없기 때문에 메모리 맵을 이용해 맵핑하면 처리 속도는 물론이고 메모리 낭비도 없다. 

 

 

* 특징

1. 생성된 메모리 맵을 포인터를 이용하여 쉽게 사용 가능하다.

2. 파일로 연결하여 사용시 메모리-파일 사이의 동기화가 편하다.

3. IPC(프로세스간 통신)로 활용 가능하다.

4. 대용량의 데이터를 사용할 시 성능이 향상된다.

 

* 주의점

- 메모리 맵은 바로 파일의 처리하는게 아니라 가상 메모리로 활용되는 페이지에 맵핑하는 방식이다. 그러므로 파일과 해당 메모리 맵이 된 페이지가 다른 공간이다. 그러므로 커널에 의해 여유 시간에 동기화(둘의 데이터가 같아지는..)가 될 때까지 서로 다른 데이터를 가질 수 있다. 그러므로 동기화에 대한 주의를 할 필요가 있다. <개발자가 직접 커널에 동기화를 명령 할 수 있는 함수도 있다. - fsync()>

 IPC로 사용 할 때에도 프로세스간 동기화에 대한 주의도 필요하다.

 

* 2가지 방식

1. 공유 메모리 맵 방식 (Shred Memory-Map)

메모리 맵 변경 시 원본 파일과 데이터가 동기화가 되는 방식

2. 복사 메모리 맵 방식 (Private Memory-Map)

처음 메모리 맵에 매핑 될때 파일의 내용을 읽어와서 복사하고 그 이후 동기화 하지 않는 방식.

 

 

* 메모리 맵 생성 함수 - mmap()

 

void* mmap(void *state, size_t length, int prot, int flags, int fd, ott_t offset);

 

- void *state

; 할당받기 원하는 메모리 주소. 보통 0을 써서 커널이 적합한 공간을 임의로 할당해 주소를 받을 수 있고, 직접 입력하여 사용해도된다. 하지만 직접 입력하는 경우 해당 시스템의 페이지 (배수)단위로 주소 값을 설정해줘야 한다.

 

- size_t length

; 메모리 맵을 할 크기. 바이트 단위로 설정한다.

 

- int prot

; 메모리 보호 메커니즘. 플래그 형식이므로 비트 연산으로 복수 속성으로 지정 가능하다.

 + PROT_EXEC; 해당 페이지 실행 가능.

 + PROT_READ; 해당 페이지 읽기 가능.

 + PROT_WRITE; 해당 페이지 쓰기 가능.

 + PROT_NONE; 해당 페이지 접근 불가.

 => 매핑할 파일 디스크립터와 속성이 같아야한다.

 

- int flags

 + MAP_SHARED; 공유 메모리 맵 방식.

 + MAP_PRIVATE; 복사 메모리 맵 방식.

 + MAP_FIXED ; 메모리 시작 번지 지정시 사용.

 =>MAP_SHARED/MAP_PRIVATE 둘 중에 한개만 지정해야된다.

 

- int fd

 ; 메모리 맵 방식을 사용할 파일 디스크립터.(파일 혹은 디바이스)

 

- ott_t offset

 ; 해당 파일 디스크립터에서 메모리 맵을 시작할 오프셋 값.

 

 

+ return value

; 메모리 맵핑이 이루어진 가상 메모리 주소. 실패시 MAP_FAILED가 발생하고 errno에 해당 상황에 대한 값이 설정된다.

 

 

* 메모리 맵 해제 - munmap()

; 메모리 맵을 사용하고 자원을 해제 할 때 사용한다.

 

int munmap(void *start, size_t length);

 

- void *start

; 메모리 맵핑이 시작된 주소. mmap()의 반환 값을 넣으면된다.

 

- size_t length

; 메모리 맵을 한 길이. mmap() 사용시 size_t length 인자와 크기를 주면된다.

 

+ return value

;성공 0, 실패 -1

 

 

* 메모리 맵과 파일의 동기화 - fsync()

; 메모리 맵에 데이터를 갱신해도 바로 파일과 동기화가 이루어지는 것은 아니다. 커널이 여유 있을 때 동기화를 수행한다. 그러므로 개발자가 직접 동기화를 보장하고 싶을 때 사용한다. 그리고 munmap()을 하여 메모리 맵을 해제 할때에도 동기화를 해주면 데이터가 보장된다.

 

int msync(void *start, size_t length, int flags);

 

- void *start

; mmap()를 통해 리턴 받은 메모리 맵의 시작 주소.

 

-  size_t length

; 동기화를 할 길이. 시작 주소로 부터 길이를 지정하면 된다.

 

- int flags

 + MS_ASYNC

 ; 비동기 방식. 동기화(Memory->File)하라는 명령만 내리고 결과에 관계 없이 바로 리턴.

   그렇기 때문에 동기화가 된 건지 알수 없다.

 + MS_SYNC

 ; 동기 방식. 동기화(Memory->File)가 될때까지 블럭 상태로 대기한다.

 + MS_INVALIDATE

 ; 현재 메모리 맵을 무효화하고 파일의 데이터로 갱신. 즉 File->Memory

 

 

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

       ...

#define MMAP_FULENAME "test_mmap"

#define MMAP_SIZE 64

       ...

int main()

{

     int fd;

     char *p_mmap;      //메모리 맵으로 사용할 데이터 타입

       ...

     fd = open(MMAP_FILENAME, O_RDWR|O_CREAT, 0664);

       ...

     p_mmap = (char*)mmap((void*)0, MMAP_SIZE, PROT_READ|PROT_WRITE,

                                                                     MAP_SHARED, fd, 0);

     //공유 메모리 방식을 사용한다. 읽기/쓰기 가능

       ...

     //memcpy(); 등으로 메모리 맵 데이터 갱신.

       ...

     msync(p_mmap, MAP_SIZE, MS_SYNC);

       ...

     munmap(p_mmap);

     return 0;

}

  

=> 메모리 맵 할 파일 이름만 같으면 IPC도 된다.


출 처 : http://no1rogue.blog.me/30097158983

출처 : http://kldp.org/node/52160

 

svn diff a.c 
를 하면 vimdiff로 바로 보이게 하려면.

 

1. 적당한 디렉토리에 vimdiff.sh를 만들고 PATH를 걸어준다
$ more ~/bin/vimdiff.sh
#!/bin/sh
while test $# -gt 2; do shift; done
vimdiff $@


2. vimdiff.sh를 실행 가능으로 만든다.

$ chmod a+x ~/bin/vimdiff.sh

 

3. svn 설정 파일에 diff-cmd 값을 지정한다.

$ cat ~/.subversion/config | grep diff-cmd
diff-cmd = vimdiff.sh

kernel 2.4 이후 부터는 initrd를 apio로 압축하기 때문에 

kernel 2.6에서 initrd를 mount 하기 위해서는 아래와 같은 순서로 하면 된다.

>> mkdir initrd_mount
>> cd ./initrd_mount
>> cp /boot/initrd-xxx.img initrd.img.gz
>> gzip -d ./initrd.img.gz
>> mkdir mnt
>> cp initrd.img ./mnt/
>> cd ./mnt
>> cpio -idmv < initrd.img

위와 같은 순서로 실행하면 mnt밑에 initrd.img가 압축 해제되있다.

위키 피디아 : 

In Unix-like operating systems, a loop devicevnd (vnode disk), or lofi (loopback file interface) is a pseudo-device that makes a file accessible as a block device.
파일을 블럭 디바이스 처럼 엑세스 할 수 있게 해주는 가상의 장치라고 되어 있다.

이미지 등의 파일들을 하나의 장치처럼 사용하도록 마운트 하는 옵션.

예를 들어 CD의 iso 이미지나 플로피 디스크파일을 다룰 때 
하나의 파일안에 파일시스템 전체가 들어있는 경우( ex: 부트이미지 등)
loop device를 통해 해당 파일 시스템안의 파일등을 다룰 수가 있게 된다.

#mount -t ext2 -o loop,ro root.img /mnt/floppy의 형식으로 사용할 수 있으며

ro(readonly)의 옵션은 그 외에도 rw 등을 사용할 수 있다. 

그외에도 loop장치가 명시되지 않으면 ( -o loop라는 옵션만 주면) mount 는 사용하지 않은 loop장치를 찾아서 사용한다.

I/O port에 접근하기 위해 필요한 루틴들은 /usr/include/asm/io.h에 모두 포함되어 있으므로 단순히 C프로그램에서 #include 를 포함하기만 하면 된다. 다른 라이브러리는 필요없다. 

그리고 gcc로 컴파일할 때 최적화 옵션(gcc -O1 혹은 그 이상)을 잊지 말아야 한다. 
또한 디버깅을 위해서는 디버거 옵션(gcc -g)을 넣는 것도 중요하다. 

정리하자면 컴파일할 때는 다음의 옵션을 꼭 넣는다. 
% gcc -g -O2 ... 

Linux에서는 어떤 port에 접근하려고 할 때 프로그램에 접근 권한을 주어야 한다. 
이런 기능은 ioperm()이라는 함수에 의해서 이루어진다. 
ioperm()은 unistd.h에 선언되어 있으므로 사용하려면 이를 포함해야 한다. 

문법은 ioperm(from, num, turn_on)으로 from은 접근 권한을 주는 첫 번째 포트번호이고, num은 from으로부터 연속되는 포트의 갯수이다. 

예를 들어, ioperm(0x300, 5, 1)이면 0x300 포트부터 0x304번 포트까지의 접근 권한을 주는 것이다. 
turn_on에 Boolean으로 1을 주면 허가, 0을 주면 접근을 금지 시킨다. 

ioperm이라는 함수는 프로그램이 root의 권한을 가지고 있어야 실행된다. 그리고 ioperm 에서 접근허가 된 포트라도 프로그램이 끝나면 자동적으로 접근금지가 되므로 굳이 ioperm( , ,0)을 줄 필요는 없다. 

ioperm()은 0x000부터 0x3FF 까지의 포트에만 접근할 수 있게 한다. 

더 높은 포트에 접근하려고 하면 iopl()이라는 함수를 사용하여야 한다. 
iopl()은 모든 포트에 대한 접근허가를 단 한번에 준다. 

그러므로 조심하여야 한다. 잘못된 포트로의 접근은 켬퓨터에 치명적인 문제를 일으킬 수 있다. 

포트에 실질적으로 값을 쓰고 읽는 기능을 주는 함수는 inb()/outb()이다. 

원하는 포트(port)에서 한 바이트(8bit)를 읽기 위해서는 inb(port)를, 쓰기 위해서는 outb(value, port)를 사용하는 데 value는 주고자 하는 값이다. 

두 바이트씩 즉 16bit씩 읽고 쓰기 위해서는 inw(port)/outw(value, port)를 사용하는데, 이는 실질적으로 port로 지정한 포트와 그 다음 포트를 합쳐서 읽고 쓰는 것이다. 

또한 32bit씩 읽고자 한다면 inl(port)/outl(value, port)를 사용하며 이는 지정된 port 에서 연속적으로 이어서 4포트를 한꺼번에 읽고 쓰는 것이다. 

포트를  읽고 쓸 때는 근사적으로 1microsecond(백만분의 1초)가 소요된다. 

또한 포트에 접근한 후에 값을 읽고 쓰는 것을 보다 확실히 하기 위해서 약간의 delay시간을 줄 수 있는 데, 이에 쓰이는 함수는 inb_p()/outb_p()와 같이 함수 끝에 _p를 붙이는 것이다. 

이는 pause를 의미하며, delay시간은 io.h에 정의되어 있는 매크로를 사용하여 조종되어질 수 있고, 초기치는 약 4 microsecond 이다. 

이를 바꾸는 방법은 #define REALLY_SLOW_IO (value) 이므로 이를 이용하면 된다. 
그런데 이 pause시간을 정하는 매크로는 0x80포트를 통하여 이루어 지므로 이에 대한 접근권한을 주는 것을 잊지 말아야 한다.

출처 : http://gnudevel.tistory.com/33http://gnudevel.tistory.com/33

폴딩을 걸어 놓은 상태에서 다음에 파일을 열 때도 기존에 해 놨던 폴딩을 보고 싶으면,
명령행에 :mkview을 입력해서 폴딩 상태를 저장한다.

다시 읽어오고 싶으면, :loadview을 사용해서 폴딩정보를 로드하도록 한다.

출처 : http://shellbt.tistory.com/298872

vim의ㅣ 폴딩 기능이 유용할 것 같긴 한데..
저장하고 다시 열면 접었던 것들이 다 날아가서
실제로 사용하기가 힘들었죠.
오래 헤멘 끝에 마침내 영구적으로 폴딩 기능을
사용할 수 있는 방법을 알아냈습니다.

먼저 foldmarker에 대해 아셔야 합니다.
이름 그대로 폴딩을 위한 마커입니다.
"{{{", "}}}"을 접고자 하는 라인 위 아래에 넣어줍니다.
그냥 넣으면 안되니 라인 주석으로 "//" 감싸줍니다.

-------------
//{{{ function foobar(str1, str2)

/**
* foobar
*
*/
function foobar(str1, str2)
{
}

//}}}
//{{{ function barfoo(str)
------------

이런 식으로 넣고 :set fdm=marker 하면 자동으로
{{{, }}}로 감싼 부분이 폴딩됩니다.
외국 소스를 보다보면 위와 같은 코딩 관습이 종종
발견되는데 역시 다 이유가 있는 거였더군요. :)


이번엔 보너스팁입니다.
.vimrc 에 fdm=marker를 추가하셔도 되고,
소스 파일에 vim에서만 인식되는 다음 주석을
처음이나 끝에 추가하시면 됩니다.

-----------
/*
* vim60: ts=4 sw=4 fdm=marker
*/
-----------

출처 : http://kltp.kldp.net/stories.php?story=02/11/16/6893604

ftp> ! [command]

잠시 셸로 빠져나간다.

셸을 종료하면 다시ftp로 돌아간다.

 

?, help

ftp> ? [command-name]

help 내용을 본다.

?만 입력하면 모든 명령어 목록이 출력되며명령어를 파라미터로 주면 해당 명령어의help 내용을 출력한다.

 

account

ftp> account [passwd]

remote 서버로account 정보를 보낸다.

 

append

ftp> append [local-file [remote-file]]

remote 서버에 파일이 존재할 경우 이어붙인다.

remote-file 명을 입력하지 않으면local-file 명으로 지정된다.

 

ascii

ftp> type ascii

전송 모드를ascii로 설정한다.

 

binary, image

ftp> type [binary/image]

전송 모드를binary로 설정한다.

 

bell

ftp> bell [on/off]

명령어 실행 완료 시 삐 소리 출력 여부 설정한다.

 

bye, quit

ftp 연결을 끊고 종료한다.

case

mget 명령 시의 원격 서버 파일명 대소문자 구분을 설정(on/off toggle, default: off)

(on이면) remote 서버의 파일들을mget으로 가져올 때대소문자 구분없이 모두 소문자로 가져온다.

 

 

cd

ftp> cd [remote-directory]

서버의 디렉토리를 변경

 

cdup

서버의 디렉토리를 한단계 전으로 변경(cd .. 와 동일)

 

chmod

ftp> chmod [mode remote-file]

파일의 권한을 변경

 

close, disconnect

ftp 연결을 끊는다.

ftp 연결만 끊으며ftp를 종료하지는 않는다정의한 매크로는 모두 삭제된다.

 

cr

텍스트 파일 전송시 엔터코드(Carriage Return) 유무를 조정. (on/off toogle, default: on)

 

delete

ftp> delete [remote-file]

remote 파일을 삭제한다.

빈 디렉토리도 삭제할 수 있다.

 

debug

디버깅 모드를 설정한다. (on/off toggle debug 레벨 설정)

 

dir, ls

ftp> dir [remote-directory] [local-file]]

디렉토리를 출력한다.

local 파일을 파라미터로 줄 경우, dir 명령의 결과를 파일로 저장할 수 있다.

 

form

파일 전송 포맷을 설정한다.

(non-print 포맷만 지원)

 

get, recv

ftp> get [remote-file [local-file]]

remote 파일을local 서버로 전송받는다.

local 파일명을 파라미터로 줄 경우전송받은 파일의 파일명을 지정할 수 있다.

 

glob

local 파일이름의 메타문자 확장을 설정한다. (on/off toggle, default: on)

 

hash

1024 바이트 전송 시마다'#' 기호를 출력한다.

hash 기능 사용 시 퍼포먼스 저하

 

idle

ftp> idle [seconds]

remote 서버 연결의 비활성화 시간을 설정/확인한다.

초 단위로 파라미터를 줄 경우비활성화 시간을 설정하며파라미터가 없는 경우 현재 설정 상태를 출력한다.

설정된 시간이 지나면ftp 접속이 끊어진다. (30~7200초 설정 가능)

 

lcd

ftp> lcd [local-directory]

local 디렉토리를 변경한다.

파라미터로 주어진 디렉토리로local 디렉토리를 변경하며파리미터가 없는 경우local home 디렉토리로 변경

 

macdef

ftp> macdef [macro-name]

매크로를 정의

명령어 실행 후 다음 라인부터의 내용이 매크로로 저장

빈 라인(내용없이 엔터 입력)이 입력되면 매크로 저장이 종료

최대4096개의 문자로 된16개의 매크로를 정의할 수 있으며정의된 매크로는close 명령어로 종료될 때까지 유지

 

$

ftp> $ [macro-name]

매크로를 실행한다.

 

macdef 명령어로 먼저 매크로를 정의해 놓은 후해당 매크로를 실행

반복적인 작업이나 일괄작업 등에 쓰임

 

mdelete

ftp> mdelete [remote-files]

다수의 파일을 삭제한다.

 

mdir

ftp> mdir [remote-files local-file]

다수의 디렉토리/파일의 출력 결과를local 파일로 저장한다.

 

mls

ftp> mls [remote-files local-file]

다수의 디렉토리/파일의 간단한 출력 결과를local 파일로 저장한다.

 

mget

ftp> mget [remote-files]

다수의remote 파일을 전송받는다.   

 

mkdir

ftp> mkdir [directory-name]

서버에 디렉토리를 생성한다.

  

mode

파일 전송 모드를 설정한다.

제공되는 모드는stream 뿐이다.

 

modtime

ftp> modtime [remote-file]

파일의 최종 수정시각을 출력한다.

 

mput

ftp> mput [local-files]

다수의local 파일을 서버로 전송한다.

 

newer

ftp> newer [remote-file [local-file]]

파일을get 하되, local 파일보다 나중인 경우에만 가져온다.

local 파일이 없는 경우 그냥get 한다.

 

nlist

ftp> nlist [remote-directory] [local-file]

디렉토리의 파일 목록을 출력한다.

디렉토리명을 지정할 수 있으며지정하지 않으면 현재 디렉토리가 출력된다.

 

open

ftp> open [server-host] [port-number]]

서버에 접속한다.

ftp 접속이 끊어졌을 경우ftp를 종료하지 않고open 명령어로 재접속 가능

 

prompt

multiple 명령어 실행 시 응답 여부를 설정한다. (on/off toggle, default: on)

off로 설정할 경우, multiple 명령어(mget, mput 실행시y/n 선택없이 강제로 진행된다. (모두y)

 

sendport

data 연결을 위해PORT 명령어 사용 여부를 설정한다. (on/off toggle, default: on)

off로 설정할 경우 명령어 실행에delay가 생길 수 있다.

 

passive

passive 모드 설정을 변경한다. (on/off toggle, default: off)

 

put, send

ftp> put [local-file] [remote-file]]

서버로local 파일을 전송한다.

파일명을 파라미터로 줄 경우, remote 서버로 전송되는 파일명을 지정할 수 있다.

 

pwd

서버의 현재 디렉토리를 출력한다.

 

reget

ftp> reget [file-name]

파일의 끝에 이어서get 한다.

파일을get 하던 중 중지된 경우처음부터 다시 받지 않고reget 명령어를 이용해 이어받을 수 있다.

 

rstatus

ftp> rstatus [file-name]

서버의 상태를 출력한다.

 

rhelp

ftp> rhelp [command-name]

서버로부터help 정보를 얻어온다.

ftp 프로그램 상의 명령어가 아닌 순수ftp 프로토콜의 명령어에 대한help 정보이다.

 

rename

ftp> rename [from-name [to-name]]

서버의 파일디렉토리의 이름을 변경한다.

 

rmdir

ftp> rmdir [directory-name]

빈디렉토리를 삭제한다.

 

runique

local 파일의unique 저장 설정을 변경한다. (on/off toggle, default: off)

만약remote 파일을get/mget으로 가져올 때, local 서버에 같은 이름의 파일이 존재하는 경우

해당off로 설정되어있으면 덮어씌기하고, on으로 설정되어있으면 파일명 끝에.1 과 같이 숫자 붙는다.

 

size

ftp> size [file-name]

파일의 사이즈를 출력한다.

 

status

현재ftp 접속 상태 정보를 출력한다.

 

struct

ftp> struct [struct-name]

파일 전송struct를 설정한다.

 

system

서버의OS 타입을 출력한다.

 

tenex

파일 전송 모드를tenex로 설정한다.

 

type

ftp> type [type-name]

파일 전송 모드를 설정

 

umask

ftp> umask [newmask]

서버의umask를 설정

 

verbose

verbose 모드를 설정한다. (on/off toggle, default: on)

on일 경우파일 전송 완료 시 전송 통계 내역(전송size, 소요시간초당 속도 등)을 출력한다.

출처 : 
http://blog.bntpidc.com/60109402564

[출처] ftp 명령어정리|작성자 BNTP IDC

일단 ftp 명령 파일을 작성한다.
 ftp_cmd 파일

verbose
open 접속할주소
user ID PASSWORD
bi
ha
cd 디렉토리
put 업로드할파일
bye

접속할주소 : 접속 할 ftp 서버 주소
ID : 접속 할 ftp 서버의 계정명
PASSWORD : 계정에 대한 패스워드
디렉토리 : 작업할 디렉토리

위와 같이 파일을 만든 후

$ ftp -n < ftp_cmd 

명령을 내리면 저 명령들이 순차적으로 실행된다.

+ Recent posts