반응형

출처: http://unix.stackexchange.com/questions/122676/how-to-mount-an-remote-filesystem-with-specifying-a-port-number

http://devanix.tistory.com/257



방법1)

sshfs -p 42224 -C user@server:/ ~/sshfs/


방법2)

 sudo mount -o port=1122 -t nfs 11.11.11.111:/some_directory /mnt/test/




NFS를 사용하여 원격 디렉토리 공유

 

설치 : sudo apt-get install nfs-kernel-server

 

▶ exportfs : 모든 공유서버에서 해당 디렉토리 보여줌.

$ sudo /usr/sbin/exportfs -v

/export/myshare

client.example.com(ro,wdelay,root_squash,no_subtree_check)

/mnt/public

<world>(rw,wdelay,root_squash,no_subtree_sheck)

☞ (ro) : 읽기만 가능, (rw) : 읽고/쓰기 마운트

☞ (wdelay) : 공유에 더 쓰기가 예상될 때 성능 향상을 지연

☞ (root_squash) : 클라이언트 root 유저로부터 요청은 익명 사용자 UID를 맵핑

☞ (no_subtree_check) : 파일시스템 퍼미션 체크가 덜 이루어진다.

 

▶ NFS 공유 디렉토리 추가/수정

$ sudo /etc/init.d/nfs-kernel-server reload

공유 디렉토리 익스포트 reload

$ sudo exportfs -r

공유 디렉토리 익스포트 reload

$ sudo exportfs -rv

exporting client.example.com:/export/myshare

exporting *:/mnt/public

익스포트 공유의 자세한 reload

 

▶ showmount : 공유 디렉토리 출력

/* 리눅스 서버 시스템에서, 로컬 시스템이 사용하는 공유 디렉토리 출력 */

$ sudo showmount -e

Export list for server.example.com

/export/myshare client.example.com

/mnt/public *

/* 리눅스 시스템 클라이언트에서, 선택한 컴퓨터가 사용하는 공유 디렉토리 출력*/

$ sudo showmount -e server.example.com

/export/myshare client.example.com

/mnt/public *

 

 

◎ NFS 공유 마운트

▶ mount 명령을 사용하여 NFS 공유 마운트

$ sudo mkdir /mnt/server-share

$ sudo mount server.example.com:/export/myshare /mnt/server-share

 

▶ mount 명령어에 NFS의 특별한 옵션 추가. (-o)

$ sudo mount -o rw,hard,intr server.example.com:/export/myshare /mnt/server-share

 

기본적으로, NFS 버전3 프로토콜은 공유를 연결하는데 사용.

NFS버전4를 사용하려면, 인터넷과 방화벽을 통해 작동하도록 설계.

커맨드라인에 있는 파일시스템 유형은 다음과 같은 프로토콜을 나타낸다.

$ sudo mount -t nfs4 server.example.com:/ /mnt/server-share

 

 

 

 

삼바를 사용하여 원격 디렉토리 공유

♧ 삼바는 윈도우 파일의 오픈소스 구현이고 서버 메시지 블록(SMB)으로 알려진 인쇄 공유 프로토콜 이고

지금 일반 인터넷 파일 시스템(CIFS)이라고 한다.

삼바를 사용하려면 sambasamba-doc 패키지 설치.

 

웹기반 관리 툴 : SWAT(swat 패키지 설치) 이 삼바에 포함.

SWAT 시작하는 방법에 대한 내용 : https://help.ubuntu.com/community/Swat

 

◎ 삼바 공유 보기와 액세스

▶ SMB 호스트 네트워크 스캔

$ findsmb

■■■■■■■■■■■*=DMB

■■■■■■■■■■■+=LMB

IP ADDR■■■NETBIOS NAME■■WORKGROUP/OS/VERSION

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

192.168.1.1■■SERVER1■■■■+[MYWORKGROUP] [Unix] [Samba 3.0.25a-3.fc7]

 

▶ smbtree를 사용하여 네트워크 neighborhood(프린터 및 공유 디렉토리)의 텍스트 표현

$ smbtree

Password: ******

WORKGROUP

■■■\\THOMPSON

■■■■\\THOMPSON\

■■■■■\\THOMPSON\IPC$

 

▶ smbpasswd 명령을 사용하여 기존 리눅스 유저에 삼바 유저를 추가.

$ sudo smbpasswd -a devanix

New SMB password: ******

Retype new SMB password: ******

Added user devanix

☞ 암호를 요청하여 어떤 명령어를 수행하기 위한 삼바 패스워드 설정이 필요.

 

▶ 서버에서 익명 사용에게 서비스 목록을 제공.

$ smbclient -L WIN2003srv

password: ******

Anynymous login successful

Domain=[WIN2003] OS=[Windows Server 2003 3790 Service Pack 2] Server=[Windows…]

tree connect failed: NT_STATUS_LOGON_FAILURE

 

▶ 특정 유저를 smbclient로 출력

$ smbclient -L WIN2003srv -U administrator

Enter administrator's password:

Domain=[WIN2003] OS=[Windows Server 2003 3790 Service Pack 2] Server=[Windows…]

■■■Sharename■■Type■■Comment

■■■---------■■■----■■■-------

■■■print$■■■■Disk■■■프린터 드라이버

■■■C$■■■■■ Disk■■■ 기본 공유

■■■F$■■■■■ Disk ■■■기본 공유

■■■IPC$■■■■ IPC■■■■원격 IPC

 

▶ FTP 유형으로 삼바 공유에 연결

$ smbclient //192.168.1.1/myshare -U devanix

Password:

Domain=[WIN2003] OS=[Windows Server 2003 3790 Service Pack 2] Server=[Windows…]

smb: \>

 

대부분의 FTP 클라이언트에서 사용할 수 있는 명령어를 보려면 help 또는 ? 입력.

SMB 호스트에서 cd, ls, get, put, quit 같은 쉘 타입 명령어를 사용할 수 있다.

 

◎ 삼바 공유 마운트

▶ 로컬 혹은 원격 NFS 파일시스템에서 로컬 파일시스템으로 원격 삼바 공유를 마운트

$ sudo mount -t smbfs -o username=devanix,password=MySecret \

//192.168.1.1/myshare /mnt/mymount/

 

▶ smbstatus : 서버의 현재 연결과 잠금 파일을 볼 수 있다

$ sudo smbstatus

 

▶ nmblookup : 컴퓨터의 IP 어드레스를 결정

$ nmblookup thompson

querying Thompson on 192.168.1.255

192.168.1.1 server1<00>

 

▷ -U : 특정 서브넷에서 서버의 IP 어드레스를 발견

$ nmblookup -U 192.168.1.255 server1

querying server1 on 192.168.1.255

192.168.1.1 server1<00>

 

▶ 삼바 구성 파일(smb.conf) 체크

$ testparm

Load smb config files from /etc/samba/smb.conf

Processing section "[homes]"

☞ 삼바 공유를 사용할 수 없거나 삼바 서버 통신에 다른 어떤 문제가 있다면 삼바 구성을 테스트.

☞ smb.conf 이외의 파일에 testparm을 사용 : $ testparm /etc/samba/test-smb.conf

 

 

 

 

SSHFS를 사용하여 원격 디렉토리 공유

♧ SSH 프로토콜을 통해 또 다른 트릭으로 원격파일시스템을 마운트한다.

ssh 파일시스템(sshfs)을 사용하여 SSH 서버에서 유저 계정을 해당 로컬 리눅스 시스템에 액세스할 수 있는

디렉토리를 마운트할 수 있다. sshfs는 모든 데이터의 전송뿐만 아니라 마운트할 때 암호화를 제공.

 

sshfs의 또 다른 멋진 측면은 서버 측면에서 SSH 서비스를 실행하는 이외에 별다른 설정이 필요하지 않다.

 

▶ 원격 서버에서 로컬 디렉토리로 문서의 디렉토리를 마운트.

$ sudo apt-get install sshfs

sshfs 소프트웨어 설치

$ sudo mkdir /mnt/docs

마운트 지점 생성

$ sudo sshfs devanix@10.0.0.50:/var/docs /mnt/docs

원격 디렉토리 마운트

 

▶원격 디렉토리를 사용했을 때, fusermount 명령어로 언마운트.

$ sudo fusermount -u /var/docs

원격 디렉토리 언마운트

 


반응형
반응형

출처:http://janghw.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-Backtracking-%EB%B0%B1%ED%8A%B8%EB%9E%98%ED%82%B9


백트래킹

정의 : 여러 해들 중에 조건에 맞는 모든 해를 찾는 알고리즘.


알고리즘

1. 후보 해를 선택한다.

2. 조건에 따라 후보 해에 적절성 검사를 시행한다. 통과하지 못하면 지금 현재 선택한 후보 해를 버리고 1로 돌아가 후보 해를 다시 선택한다.

3. 적설성 검사가 통과한 경우 이 후보 해가 문제의 해가 되는지 검사한다. 검사를 통과하면 이것이 문제의 해이고, 검사를 통과하지 못하면 1로 돌아가 후보 해를 계속해서 선택한다.


백트래킹의 활용

1. 미로 탈출로 찾기

재귀함수를 통해 백트래킹으로 미로 탈출로를 찾아보자. 


알고리즘

1. 시작점을 현재 위치로 지정하고, 이동방향을 북으로 설정한다.

2. 현재 위치에서 가고자 하는 이동 방향으로 이동이 가능한지 확인한다. 벽과 이미 지나온 길은 이동가능한 길이 아니다.

3. 현재 가고자 하는 이동 방향으로 이동이 가능하면 그곳으로 이동한다. 이동이 불가능하면 방향을 바꾸어 다시 2번을 수행한다. 모든 방향으로 이동이 불가능하면 이전 위치로 되돌아간다.

4. 출구에 다다르거나 미로 내의 모든 길을 방문할때까지 2, 3단계를 반복한다.


3번 과정에서 이동하는 부분을 재귀함수로 구현하면 될 것이다. 이동이 가능하면 재귀함수를 통해 그곳으로 이동하면 모든 방향으로 이동이 불가능하면 반환을 통해 재귀함수를 탈출하여 이전 상태로 돌아가면 될 것이다.


2. N개의 퀸

체스에서 퀸은 모든 방향으로 거리 제한없이 움직일 수 있는 말이다. N개의 퀸 문제는 N × N 크기의 체스판에서 N개의 말들이 서로 공격이 불가능하게 배치하는 모든 경우를 구하는 문제이다. 


알고리즘

1. 첫 행, 첫 열을 시작점으로 지정한다.

2. 현재 지점에서 퀸을 놓으면 다른 퀸에게 위협을 받는지 검사한다. 이전 단계에서 놓은 퀸들 중에 현재 지점에서의 퀸의 행 값이 같으면 수평방향으로 위협을 받는 것이고, 열 값이 같으면 수직방향으로 위협을 받는 것이다. 행의 차와 열의 차가 같으면 대각선 방향으로 위협을 받고 있는 것이다.

3. 위협을 받고 있지 않다면 행의 값을 증가시키고 열의 첫번째 값으로 가서 2를 수행한다. 위협을 받고 있다면 열의 값을 증가시켜서 2를 수행한다. 열의 마지막 값에서도 위협을 받고 있다면 이전 단계의 퀸의 위치로 되돌아간다.

4. 마지막 행, 마지막 열에 다다르면 종료한다.


과정 3을 재귀함수로 구현하면 될 것이다.

반응형
반응형

출처:http://janghw.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-Dynamic-Programming-%EB%8F%99%EC%A0%81-%EA%B3%84%ED%9A%8D%EB%B2%95


동적 계획법

정의 : 어떤 문제가 반복적이고 최적 하위구조로 이루어질때, 하위구조에 있는 부분 문제의 답을 기반으로 전체 문제의 답을 구하는 방법


최적 하위구조(Optimal Substructure)란 전체 문제의 답이 부분 문제의 답으로부터 만들어지는 구조를 말한다. 예를 들어 어떤 문제를 7개의 하위문제로 나눌 수 있을때, 7개의 하위문제의 답을 모두 얻어야 이 문제의 답을 구할 수 있다면 이 문제는 최적 하위구조를 갖추었다고 할 수 있다.

분할정복과 비슷해 보이지만, 분할정복은 문제를 큰부분에서 작은부분으로 나누는데반해(Top-Down), 동적 계획법은 제일 작은 부분부터 큰 문제로 풀어 올라간다(Bottom-Up). 또한 분할정복은 나눈 문제들을 완전히 새로운 하나의 독립된 새로운 문제로 보지만, 동적 계획법은 이전 단계의 답에 의존적이다. 그래서 한번 푼 적 있는 문제는 다시 푸는 일이 없도록 테이블 등에 저장해둔다.


알고리즘

1. 문제를 부분 문제로 나눈다.

2. 가장 작은 부분의 문제부터 답을 구한 뒤 테이블에 저장한다.

3. 테이블에 저장되어 있는 부분 문제의 답을 이용하여 점차적으로 상위 부분의 문제의 답을 구한다.


동적 계획법의 활용

1. 피보나치 수열 (Fibonacci Sequence)

피보나치 수열은 다음과 같이 정의할 수 있다.


이것을 그냥 코드로 옮기면 다음과 같이 작성된다.

1
2
3
4
5
6
7
8
int Fibonacci(int n) {
    if (n > 1)
        return Fibonacci(n - 1) + Fibonacci(n - 2);
    else if (n == 1)
        return 1;
    else
        return 0;
}
cs

이 알고리즘의 수행시간은 으로 상당히 비효율적이다.

동적 계획법을 이용하여 이 알고리즘을 재구성해보자.

먼저 문제를 부분 문제로 나눈다.


은  과 의 합이다. 은 와 의 합이다.

그리고 은 과 의 합이다. 이로부터 이라는 문제를 ,, …, 의 하위구조로 나눌 수 있는 것을 알 수 있다.

두번째로 작은 부분의 답을 구한뒤 테이블에 저장한다.


 인덱스

 저장된 값

 0

 0

 1

 1

 2

 1

 3

 2

 4

 3

 5

 5

 6

 8

 ...

 ...

 n-2

 

 n-1

 

 n 



과 는 이미 정의되어 있는 값을 저장하면 되고, 부터는 테이블에 저장된 값을 이용하여 답을 구해 나간다. 이렇게 계속 구해나가면 의 값을 구할 수 있다.

이렇게 구한 피보나치 수의 시간 복잡도는 이다.

분할정복으로 구한 시간 복잡도는 이였지만 동적 계획법으로 구한 시간 복잡도는 로써 분할정복보단 떨어진다. 더 나은 기법을 알기 위해서가 아니라 알고리즘 설계 기법의 이해를 위한 것이므로 뭐가 더 우수한지는 논외로 하기로 한다.

반응형
반응형

출처:http://janghw.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-Divide-and-Conquer-%EB%B6%84%ED%95%A0%EC%A0%95%EB%B3%B5



분할정복

정의 : 분할정복 알고리즘은 문제를 나눌 수 없을 때까지 나누어서 각각을 풀면서 다시 합병하여 문제의 답을 얻는 알고리즘이다.


알고리즘을 설계하는 요령

(1) Divide : 문제가 분할이 가능한 경우, 2개 이상의 문제로 나눈다.

(2) Conquer : 나누어진 문제가 여전히 분할이 가능하면, 또 다시 Divide를 수행한다. 그렇지 않으면 문제를 푼다.

(3) Combine : Conquer한 문제들을 통합하여 원래 문제의 답을 얻는다.


  • 문제를 제대로 나누면 Conquer하는 것은 쉽기 때문에 Divide를 제대로 하는 것이 가장 중요하다.
  • 분할정복 알고리즘은 재귀 알고리즘이 많이 사용되는데, 이 부분에서 분할정복 알고리즘의 효율성을 깎아내릴 수 있다.


분할정복의 응용

1. 병합 정렬 (Merge Sort)

헝가리 출신 미국인 수학자인 존 폰 노이만이 1945년에 개발한 알고리즘이다. 시간복잡도는 이고, 공간복잡도는 이다.


알고리즘

1. 정렬할 데이터 집합의 크기가 0또는 1이면 이미 정렬된 것으로 보고, 그렇지 않으면

2. 데이터 집합을 반으로 나눈다.

3. 원래 같은 집합에서 나뉘어져 나온 데이터 집합 둘을 병합하여 하나의 데이터 집합으로 만든다. 단, 병합할 때 데이터 집합의 원소는 순서에 맞춰 정렬한다.

4. 데이터 집합이 다시 하나가 될 때까지 3을 반복한다.


예를 들어 다음과 같은 데이터 집합이 있다고 해보자.



알고리즘의 1~2 과정을 반복하여 나눈다. 색칠한 부분은 나눈 기준이 되는 부분이다.




분할을 했으니 정복을 할 차례다. 3~4과정을 반복해서 수행한다.


조각난 데이터 집합을 정렬해가면서 병합하면 결국 완전히 정렬된 하나의 데이터 집합을 얻는 알고리즘이다.


그런데 병합이 어떻게 정렬하면서 합칠 수 있는 것일까.


두 데이터 집합을 정렬하면서 합치는 방법

1. 두 데이터 집합의 크기의 합만큼의 크기를 가지는 빈 데이터 집합을 만든다.

2. 두 데이터 집합의 첫 번째 요소들을 비교하여 작은 요소를 빈 데이터 집합에 추가한다. 그리고 새 데이터 집합에 추가한 요소는 원래 데이터 집합에서 삭제한다.

3. 원래 두 데이터 집합의 요소가 모두 삭제될 때 까지 2를 반복한다.


예를 들어 다음과 같은 데이터 집합 A, B와 이 두 데이터 집합의 크기의 합만큼의 크기를 가지는 빈 데이터 집합인 C가 있다고 하자.


두 데이터 집합의 첫 번째 요소를 비교한다. A의 첫 번째 요소는 2, B의 첫번째 요소는 1이므로 B의 것이 더 작다. C에 1을 추가하고 B에서 1을 삭제한다.


그 다음 A의 2와 B의 3을 비교한다. 2가 작으니 C에 2를 추가하고 A에서 2를 삭제한다.


A의 5와 B의 3을 비교한다. 3이 작으니 C에 3을 추가하고 B에서 3을 삭제한다.

이렇게 데이터 A와 B의 요소들을 비교해서 C에 넣고 A와 B의 각 요소들을 삭제해나가다보면, A에 9하나만 남게된다. B에는 비교할 요소가 남아 있지 않으므로 그냥 9를 C에 추가하고 A에서 9를 삭제한다. 이로써 A와 B의 요소들이 모두 삭제되었고 C는 정렬된 데이터 집합이 되었다.


2. 거듭 제곱 (Exponentiation)

n거듭 제곱은 자신을 n번 곱해야 함으로 의 시간이 소요된다. 이것을 개선하기 위해서 연산방법을 조금 바꾸어보자.


은 다음과 같이 정의되지만,

다음과 같이 표현할 수도 있다.

을 구할 때 C를 8번 곱하지 않고 를 구한 뒤 제곱을 두 번 더 반복하면 결국 세번의 연산만으로 같은 결과를 얻을 수 있다.

지수가 짝수일때는 지수를 반으로 나눠서 곱한다.

지수가 홀수일때는 지수에서 1을 빼고 반으로 나누어서 곱하고 밑을 한번 더 곱하면 된다.


이렇게 지수를 반으로 나눠가는 거듭 제곱 알고리즘의 수행 시간은 이다.


3. 피보나치 수열 (Fibonacci Sequence)

피보나치 수열은 다음과 같이 정의된다.


이 알고리즘으로는 걸리는 시간은 이다.

연산을 줄이기 위해 2차 정사각행렬을 이용한다.


 이므로 n제곱을 하게 되면



  이렇게 거듭제곱 알고리즘때와 비슷하게 나타낼 수 있다.

수행 시간 또한 거듭 제곱 알고리즘과 똑같은 이 걸리게 된다.

반응형

+ Recent posts