[Ubuntu] Ubuntu rsync 오류 및 옵션

Ubuntu rsync 오류 및 옵션


rsync와 scp는 원격으로 파일을 복사할때 사용하는 명령어이다.

내가 주로 사용하는 rsync 명령어 및 옵션은 `rsync -avPh source dest’으로 평소에 사용할 때에는 별 문제가 없다. 하지만 exFAT로 format되어있는 하드디스크로 복사를 하려고 할 때

failed to set permissions on 경로 Function not implemented (38)

이라는 오류가 뜨면서 재대로 복사가 되지 않는다. rsync exFAT로 검색하여 찾은 해결법은 다음에서 확인할 수 있다.

위의 포스트에 따르면 -a 옵션이 문제가 된다.

-a 옵션은 -archive의 옵션으로 rsync를 아카이브 모드로 실행을 하며 [-rlptgoD]의 동작을 한다. 즉 7개의 옵션을 모두 포함하고 있는 옵션이란 뜻이다.

이때 exFAT로 복사할 때 문제가 되는 부분은 permission과 관련되는 pgo옵션이다. 따라서 이 3가지 옵션을 제외한 나머지 옵션을 -a 대신 넣어주면 된다. 즉 rsync -rltDvPh 이렇게 옵션을 넣어주면 rsync -avPh에서 위의 3가지 옵션을 제외한 옵션이 된다.

이렇게 옵션을 바꾸어 주면 문제없이 exFAT format으로도 복사가 잘 된다.

자세한 rsync 들의 옵션들은 다음 블로그에 잘 정리되어 있다.

참고URL

http://blog.marcelotmelo.com/linux/ubuntu/rsync-to-an-exfat-partition/

http://gyus.me/?p=214


[Ubuntu] Ubuntu apt-get 명령어 정리

Ubuntu apt-get 명령어 정리


apt-get(Advanced Packaging Tool)은 우분투(Ubuntu)를 포함안 데비안(Debian)계열의 리눅스에서 쓰이는 팩키지 관리 명령어 도구입니다. 우분투에는 GUI로 되어 있는시냅틱 꾸러미 관리자도 있기는 하지만 이런 저런 개발관련 패키지를 설치할 때는 커맨드기반인 apt-get이 더 편하기도 합니다. sudo는 superuser권한으로 실행하기 위함입니다.

1. 패키지 인덱스 인덱스 정보 업데이트

apt-get은 인덱스를 가지고 있는데 이 인덱스는/etc/apt/sources.list에 있습니다. 이곳에 저장된 저장소에서 사용할 패키지의 정보를 얻습니다.

sudo apt-get update

2. 설치된 패키지 업그래이드

설치되어 있는 패키지를 모두 새버전으로 업그래이드 합니다.

sudo apt-get upgrade

3. 의존성검사하며 설치하기

sudo apt-get dist-upgrade

4. 패키지 설치

sudo apt-get install 패키지이름

5. 패키지 재설치

apt-get --reinstall install 패키지이름

6. 패키지 삭제

설정파일은 지우지 않음

sudo apt-get remove 패키지이름

7. 설정파일까지 모두 지움

sudo apt-get --purge remove 패키지이름

8. 패키지 소스코드 다운로드

sudo apt-get source 패키지이름

9. 위에서 받은 소스코드를 의존성있게 빌드

sudo apt-get build-dep 패키지이름

10. 패키지 검색

sudo apt-cache search 패키지이름

11. 패키지 정보 보기

sudo apt-cache show 패키지이름

apt를 이용해서 설치된 deb패키지는 /var/cache/apt/archive/ 에 설치가 됩니다.


[Math] SE(3) and SO(3) transformation

SE(3) and SO(3) transformation


SE(3), SO(3) And GL(3,R)

SE(3), SO(3), GL(3,R) 와 관련된 내용을 정리해 보려고 한다.

만약 3차원 공간상에서 f를 x1의 점을 x2의 점으로 변환시키는 matrix R이라고 할 때 다음과 같이 표현 할 수 있다. \[f : \mathbb{R}^3 \to \mathbb{R}^3\] \[\begin{bmatrix} x_2\\ y_2\\ z_2 \end{bmatrix} = R \begin{bmatrix} x_1\\ y_1\\ z_1 \end{bmatrix}\]

이때 역행렬이 가능한 $3X3$ 매트릭스의 set은 general linear group $GL(3, \mathbb{R})$ 이다. 이런 무한개의 가능성을 갖고 있는 R 중에서 determinant 가 $\pm1$인 orthogonal matrices 들을 orthogonal group 이라고 한다.($O(3)$ $\subset$ $GL(3, \mathbb{R})$)

이러한 변환 matrix중에서 두 점의 쌍의 거리가 변하지 않는 transformation을 isometries이라고 하며, 그 중에서 determinant가 +1인 matrix을 proper isometries라고 한다. 이러한 special orthogonal group을 $SO(3)$ 라고 한다. ($SO(3)\subset O(3)$)

이런 $SO(3)$ group은 순수한 rotation만 표현 가능하다. Translation을 표현하기 위해서는 $4X4$ matrix를 고려해야 하며, 3D point들은 homogeneous coordinate으로 확장해야 한다.($GL(4, \mathbb{R})$) \[\begin{bmatrix} X_2\\ 1 \end{bmatrix} = T \begin{bmatrix} X_1\\ 1 \end{bmatrix}\] \[\begin{bmatrix} x_2\\ y_2\\ z_2\\ 1 \end{bmatrix} =\begin{bmatrix} R_{11}&R_{12}&R_{13}&T_x\\ R_{21}&R_{22}&R_{23}&T_y\\ R_{31}&R_{32}&R_{33}&T_z\\ 0&0&0&1 \end{bmatrix} \begin{bmatrix} x_1\\ y_1\\ z_1 \\ 1 \end{bmatrix}\]

이러한 T중에서 R의 determinant가 +1을 만족하며, affine rigid motion을 이루는 group을 special Euclidean group($SE(3)$)라고 부른다.(affine: 평행선의 관계는 유지되는 변환, rigid(isometry): 각 쌍의 점들의 거리가 변하지 않는 변환)

즉 \(SE(3) \subset GL(4, \mathbb{R})\)의 관계이다.

더 자세한 내용은 A tutorial on SE(3) transformation parameterizations and on-manifold optimization 를 참고하기 바란다.


[Ubuntu] gcc default include path 확인 방법

gcc default include path 확인하기


다른 정보들이 더 출력이 되긴 하지만, 간단히 다음과 같은 명령어를 입력하면 된다. (-x 다음 인자에 c/c++ 입력)

echo | gcc -v -x c -E - 
echo | gcc -v -x c++ -E - 

Ubuntu 14.04에서 테스트 결과는 다음과 같다

Using built-in specs.
COLLECT_GCC=gcc
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.8.4-2ubuntu1~14.04.1' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libmudflap --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.1) 
COLLECT_GCC_OPTIONS='-v' '-E' '-mtune=generic' '-march=x86-64'
 /usr/lib/gcc/x86_64-linux-gnu/4.8/cc1 -E -quiet -v -imultiarch x86_64-linux-gnu - -mtune=generic -march=x86-64 -fstack-protector -Wformat -Wformat-security
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/x86_64-linux-gnu/4.8/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.
# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "<stdin>"
COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.8/:/usr/lib/gcc/x86_64-linux-gnu/4.8/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.8/:/usr/lib/gcc/x86_64-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.8/:/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-E' '-mtune=generic' '-march=x86-64'

위 결과 중에서 다음 부분이 기본 include path가 된다.

 /usr/lib/gcc/x86_64-linux-gnu/4.8/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include

“-v” 옵션으로 인해, 본인이 사용하는 compiler가 어떤 configuration option을 통해 Build 되었는지, Thread model이 무엇인지 등의 부가 정보들이 훨씬 많이 나오는데, 너무 길어서 대부분 생략하고, 원하는 내용이 포함된 부분만 발췌했다.

한번쯤 실행해 보고, 나머지 부분도 알아두면 좋은 정보들이 많다.


[Ubuntu] bash shell 환경변수

bash shell 환경변수


<본 포스팅은 다음을 참고하였습니다>

Bash shell 관련 소개 내용

환경변수란?

OS레벨에서 “자주사용하는” 또는 “필요한 변수들을 미리 선언해 놓은 것 이 환경변수의 리스트를 보기 위해서는 export라는 명령어를 쓴다. 1개의 환경변수를 보기 위해서는 echo $환경변수(ex: echo $PATH) $PATH 환경변수에 있는 file들은 어느 위치에서나 실행 가능.

환경변수 설정 방법

1. export 명령어를 통해 실행

export PATH=$PATH:$JAVA_HOME/bin

하지만 이 방법은 재부팅 시엔 초기화됨

2. .bashrc file 설정을 수정

vi ~/.bashrc 로 file을 연후

아래쪽에

export PATH="$PATH:/usr/프로그램 경로/bin"

를 추가해준다

$PATH: 를 앞에 추가해 준 것은 기존 PATH 환경변수 뒤에 내용을 추가한다는 의미

이부분을 빼먹으면 기존 설정은 삭제된다.

환경변수 적용

컴퓨터 재시작을 하거나 또는

source .bashrc

와 같이 source 명령어를 이용하면 된다.


Pagination