'Linux'에 해당되는 글 2건

  1. 2017.01.13 Linux에서 Error Redirection 처리하기 2
  2. 2013.12.01 Installing rJava package on Linux 2

Linux Shell에서 명령어를 실행할 때 에러에 대한 부분을 파일로 저장한다거나 에러만 찾아서 추가적인 처리를 하고 싶을 때 Error Redirection이라는 기능을 사용할 수 있습니다.


매번 찾아봐야 하는 수고로움이 있지만 귀차니즘 때문에 못하다가 결국 이제야 정리를 해서 간단하게 올려봅니다.


참고적으로 아래의 내용은 Linux에서 표준이라고 일컫는 Bash Shell에서 정상적으로 작동합니다. 다른 Shell이라면 어떻게 될지 알 수가 없습니다.


Linux에서 많이 사용하는 Bash 또는 여타 Shell에서 사용자는 다양한 I/O 관련 Redirection(리다이렉션) 기능을 사용하여 많은 일을 할 수가 있습니다.


일단 Bash Shell은 아래의 세 가지 파일 오픈에 대한 스트림을 지원하고 있습니다.

    • stdin : 키보드를 통한 데이터 입력(input)
    • stdout : 명령어 실행시 출력되는 내용을 화면에 표시
    • stderr : 명령어 실행시 발생하는 에러 메세지를 화면에 표시


위의 I/O 스트림 처리를 위해 Bash Shell은 아래처럼 특별한 핸들러를 또한 제공하고 있습니다.

 Handler (핸들러)

Name (이름)

Description (설명) 

 0

 stdin

 Standard input

 1

 stdout

 Standard output

 2

 stderr

 Standard error


위에서 설명한 내용을 바탕으로 아래의 작업에 활용할 수 있습니다.

  1. Redirect stdout to a file
  2. $ ls -l > ls-l.txt


    => 'ls -l' 명령어를 실행하여 화면에 출력되는 결과 모두를 'ls-l.txt' 파일을 생성하여 저장함

  3. Redirect stderr to a file
  4. $ grep da * 1> grep-errors.txt


    => 'grep-errors.txt' 파일을 생성한 후 'grep' 명령어 수행시 Error로써 출력되는 부분만 저장됨

  5. Redirect stdout to a stderr
  6. $ grep da * 1>&2


    => 'grep' 명령어 수행 결과를 stderr으로 리다이렉션시킴

  7. Redirect stderr to a stdout
  8. $ grep da * 2>&1


    => 'grep' 명령어 수행 중 발생하는 Error를 stdout으로 리다이렉션시킴

  9. Redirect stderr to a stdout to a file
  10. $ find /etc -name '*test*' 2>&1 > find_test.txt


    => 'find' 명령어 수행 중 발생하는 Error를 stdout으로 리다이렉션 후 파일로 저장함

    => Error 메세지를 보지 않으려면 파일명 대신에 /dev/null을 지정할 수도 있음



Posted by 겨울이 오나보다

When installing rJava package on Linux box, we got the following errors:

[KRX2A1]oracle@krx2adb01:/home/oracle> R CMD INSTALL rJava_0.9-4.tar.gz

* installing to library ‘/usr/lib64/R/library’

* installing *source* package ‘rJava’ ...

** package ‘rJava’ successfully unpacked and MD5 sums checked

checking for gcc... gcc -m64 -std=gnu99

checking for C compiler default output file name... a.out

checking whether the C compiler works... yes

checking whether we are cross compiling... no

checking for suffix of executables... 

checking for suffix of object files... o

checking whether we are using the GNU C compiler... yes

checking whether gcc -m64 -std=gnu99 accepts -g... yes

checking for gcc -m64 -std=gnu99 option to accept ISO C89... none needed

checking how to run the C preprocessor... gcc -m64 -std=gnu99 -E

checking for grep that handles long lines and -e... /bin/grep

checking for egrep... /bin/grep -E

checking for ANSI C header files... yes

checking for sys/wait.h that is POSIX.1 compatible... yes

checking for sys/types.h... yes

checking for sys/stat.h... yes

checking for stdlib.h... yes

checking for string.h... yes

checking for memory.h... yes

checking for strings.h... yes

checking for inttypes.h... yes

checking for stdint.h... yes

checking for unistd.h... yes

checking for string.h... (cached) yes

checking sys/time.h usability... yes

checking sys/time.h presence... yes

checking for sys/time.h... yes

checking for unistd.h... (cached) yes

checking for an ANSI C-conforming const... yes

checking whether time.h and sys/time.h may both be included... yes

configure: checking whether gcc -m64 -std=gnu99 supports static inline...

yes

checking whether setjmp.h is POSIX.1 compatible... yes

checking whether sigsetjmp is declared... yes

checking whether siglongjmp is declared... yes

checking Java support in R... present:

interpreter : '/u01/app/oracle/product/11.2.0.3/dbhome_1/jdk/jre/bin/java'

archiver    : '/u01/app/oracle/product/11.2.0.3/dbhome_1/jdk/bin/jar'

compiler    : '/u01/app/oracle/product/11.2.0.3/dbhome_1/jdk/bin/javac'

header prep.: '/u01/app/oracle/product/11.2.0.3/dbhome_1/jdk/bin/javah'

cpp flags   : '-I/u01/app/oracle/product/11.2.0.3/dbhome_1/jdk/include -I/u01/app/oracle/product/11.2.0.3/dbhome_1/jdk/include/linux'

java libs   : '-L/u01/app/oracle/product/11.2.0.3/dbhome_1/jdk/jre/lib/amd64/server -L/u01/app/oracle/product/11.2.0.3/dbhome_1/jdk/jre/lib/amd64 -L/u01/app/oracle/product/11.2.0.3/dbhome_1/jdk/jre/../lib/amd64 -ljvm'

checking whether JNI programs can be compiled... yes

checking JNI data types... configure: error: One or more JNI types differ from the corresponding native type. You may need to use non-standard compiler flags or a different compiler in order to fix this.

ERROR: configuration failed for package ‘rJava’

* removing ‘/usr/lib64/R/library/rJava’


This is caused by not setting up the JAVA-related environmental parameter. Firstly, we need to set up the parameter and then execute the javareconf as follows:

[KRX2A1]oracle@krx2adb01:/home/oracle> export JAVA_HOME=/u01/app/oracle/product/11.2.0.3/dbhome_1/jdk/jre

[KRX2A1]oracle@krx2adb01:/home/oracle> R CMD javareconf -e

Java interpreter : /u01/app/oracle/product/11.2.0.3/dbhome_1/jdk/jre/bin/java

Java version     : 1.5.0_30

Java home path   : /u01/app/oracle/product/11.2.0.3/dbhome_1/jdk/jre

Java compiler    : /u01/app/oracle/product/11.2.0.3/dbhome_1/jdk/jre/../bin/javac

Java headers gen.: /u01/app/oracle/product/11.2.0.3/dbhome_1/jdk/jre/../bin/javah

Java archive tool: /u01/app/oracle/product/11.2.0.3/dbhome_1/jdk/jre/../bin/jar

Java library path: $(JAVA_HOME)/lib/amd64/server:$(JAVA_HOME)/lib/amd64:$(JAVA_HOME)/../lib/amd64

JNI linker flags : -L$(JAVA_HOME)/lib/amd64/server -L$(JAVA_HOME)/lib/amd64 -L$(JAVA_HOME)/../lib/amd64 -ljvm

JNI cpp flags    : -I$(JAVA_HOME)/../include -I$(JAVA_HOME)/../include/linux


The following Java variables have been exported:

JAVA_HOME JAVA JAVAC JAVAH JAR JAVA_LIBS JAVA_CPPFLAGS JAVA_LD_LIBRARY_PATH

Running: /bin/bash

Here I used the pre-installed JDK 1.5.x from Oracle Database 11g R2. If you want, you can install the latest Oracle Java 7 or 8, too.


As shown above, JAVA_HOME is exported, but due to this, the required libjvm.so library cannot be successfully loaded. Hence, before installing rJava package, we need to unset it by executing

[oracle@krx2adb01 ~]$ unset JAVA_HOME

[oracle@krx2adb01 ~]$ R CMD INSTALL rJava_0.9-4.tar.gz


Now, it works pretty well.


Good Luck!!


Posted by 겨울이 오나보다
이전버튼 1 이전버튼