본문 바로가기

컴퓨터활용/유닉스

gdb 에서 objectdir 지정하는 방법 gdb 실행 후 onjectdir 이나 directory 명령을 실행하면 현재 설정된 디렉토리를 볼 수 있다. 이 때 2개의 디렉토리가 보이는데 $cdir:$cwd 다. (gdb) directory Reinitialize source path to empty? (y or n) Source directories searched: $cdir:$cwd (gdb) directory /xxxdev/obj Source directories searched: /xxxdev/obj:$cdir:$cwd (gdb) objectdir /yyydev/obj Object directories searched: /yyydev/obj:$cdir:$cwd 그런데 일일이 이렇게 지정해 주기 귀찮으면 gdb 를 실행하기 전에 objec.. 더보기
U2L프로젝트 NULL 이슈 유닉스로 개발된 C 소스를 리눅스에서 컴파일만 하고서 돌리면 잘 돌아갈까? 대부분 프로그램들은 잘 돌아가지만 몇몇 코드들은 손을 봐줘야 하는 것들이 있다. 리눅스에서는 sprintf 를 사용할 때도 유닉스와 다르게 동작해서 오류가 발생되는 경우가 있다. 유닉스에서는 멀쩡히 잘 돌아가던 프로그램을 리눅스에서 돌리면 오류가 발생되는 경우로서 sprintf()가 있다. memset(b, 0x00, sizeof(b)); sprintf(a, "name:%s" , b ); printf("%s\n", a ); 이런 소스의 경우 b 값이 NULL일 경우 유닉스에서는 아무 것도 찍히지 않는다. name: 이라고만 찍한다. 그러나 리눅스에서는 "(null)" 이라는 문자가 찍히게 되면서 name:(null) 이라고 찍힌다.. 더보기
쉘에서 date 사용 기본 일자 포맷으로 출력할 때는 그냥 단순히> date -I 2020-02-22 date 명령어에서 포맷을 주려면 date뒤에 +로 시작한다. 포맷이 붙어 있을 경우 ' 로 감싸지 않아도 되지만 스페이스가 들어가면 ' 로 감싸줘야 한다.> date +'%F %T' 2020-02-22 13:23:53 $로 date 명령을 실행하여 변수처리를 할 수 있다.> echo $(date +%F_%T) 2020-02-22_13:24:23 > CUR_DATE=$(date +%F_%T) > echo $CUR_DATE 2020-03-21_13:34:23 동일한 효과를 얻을 수 있는 ` 문자로 date 명령을 실행할 수 있다.> CUR_DATE=`date +%F_%T > echo $CUR_DATE 2020-03-21_13:.. 더보기
vi 에서 탭 문자 찾기 >Is there a handy command to display all the TAB characters in a file? >And for a large file, is there a way I can search it in VIM? One easy way is ":set list". It also shows other control characters, but it may be exactly what you need. Turn it off with ":set nolist". If that doesn't do it, you can do / C-V C-I (slash control-V control-I) to search for a tab character. If you have highlighting.. 더보기
sprintf함수에서 포매팅 처리 방법 sprintf함수에서 포매팅 처리 방법을 실험해 봤다. 1) 숫자처리 %4d는 네 자리의 십진수를 표시하되 네 자리가 안될 때에는 공백으로 대체합니다. %.4d는 네 자리가 안될 경우 0으로 대체합니다. 2) 문자열 처리 %.10s 는 space_buf 값에서 최대 10문자만 출력합니다.이것은 %10s 처럼 중간에 쩜(.) 이 없는경우와 다릅니다.(.)이 없으면 즉 %10s 라면 무조건 자리를 10개 확보하고 그곳에 space_buf 의 값을출력하는데 만얀 space_buf 의 내용이 10개가 모라라면 나머지 공간은앞부분에 공백으로 남습니다. 그러나 %.10s 는 10개가 모자라도 공백을 주지 않고 바로 다음것을 이어서 씁니다. 예)printf([%d], 1234 ); ==> [1234] printf([.. 더보기
ipcs, ipcrm 으로 공유메모리 삭제 방법 프로프레임에서 사용하는 쉐어드메모리는 TDL 과 Tcache 가 있다. 보통 이것은 티맥스 유저보다는 프로프레임 유저로 생성한다. 어느 유저로 생성하던 지간에 tdlinit 명령을 실행할 때는 tmdown 상태에서 하는 것이 좋다.생성된 공유메모리가 제대로 해제 되지 못 한 경우에 강제로 삭제하는 방법은 ipcrm 명령을 사용한다. 삭제하기 전에 ipcs 명령으로 현재 생성되어 있는 키값을 조회한다. 많기 때문에 user 로 grep 하여 범위를 줄여서 보면 쉽게 찾아 낼 수 있다. 아래 예제는 75000번을 키로해서 생성된 메모리를 삭제하는 절차를 보여주고 있다.문제의 키값을 찾았으면 ipcrm 명령으로 지워 주자. 쉐어드메모리 키는 생성한 유저로 삭제할 수 있다. 12345678910111213141.. 더보기
pfmNumCalc 인자 개수 체크 쉘 | 개요 프로프레임에서 수식 계산에 사용하는 pfmNumCalc 라는 함수가 있다. 계산식을 자유롭게 기술할 수 있기 때문에 참 유용한 함수이고 많이들 사용한다. 그런데 문제는 파라미터 포매팅 개수와 아규먼트 인자의 개수가 다를 경우에 문제가 발생될 수 있다. 개수가 다를 경우에 어떤 예기치 않은 문제가 발생될 수 있기 때문에 꼼꼼하게 체크해야 하지만 워낙에 개발자들이 바쁘시다 보니 많이들 놓칠 수 있다. 쉘 프로그램을 이용해서 일괄적으로 한꺼번에 모든 프로그램의 인자 개수를 체크하는 로직을 만들어 봤다. 프로프레임 엔지니어나 일반 개발자들도 잘 응용해서 사용하면 유용할 거 같아서 공개한다. 필요한 부분을 수정해서 본인의 용도에 맞게 사용하면 좋을 것이다. | 아이디어pfmNumCalc 함수 뒤에는 포매.. 더보기
Lock option has no effect for the map 프로프레임에서 사용하는 DBIO의 경우 select 하거나 fetch 할 때 pdb_lock 옵션을 이용할 수 있다. DBIO 스튜디오에서 Lock Query 생성을 체크하고 소스생성, 컴파일 할 때 생성된 SQL을 보면 WAIT 옵션이 뒤에 붙어 있는 것을 볼 수 있다. dbio 내부에서 sql을 실행하기 전에 input 의 pdb_lock 변수에 PDB_LOCK 값이 세트되어 온 경우에 SQL에 WAIT 절이 있는 지 체크하게 되고 SQL 에 WAIT 절이 없는데 LOCK option을 사용하겠다고 했을 때 "Lock option has no effect for the map" 메시지가 나오게 된다. 하지만 개발자가 dbio_in.pdb_lock = PDB_LOCK; 와 같이 코딩한 적도 없는데도 D.. 더보기
dlopen error : Permission denied 프로프레임 환경에서 프로그램 실행시 [dlopen error Permission denied] 함수 [mxx_dacom_msg_deco]에 대한 dlcall이 실패하였습니다 [seq_no:14984545] 라는 메세시지를 만날 때가 있다. mxx_dacom_msg_deco.c 를 컴파일하여 libmxx_dacom_msg_deco.so 를 만들고 이 libmxx_dacom_msg_deco.so 를 dlupdate 한 후에 실행했을 때 나온 메시지 이다. libmxx_dacom_msg_deco.so 는야 dlupdate 될 때 $TDLDIR/run/ 아래에 복사되어 지므로 접근 권한이 없지 않겠지만libmxx_dacom_msg_deco.so 를 만들때 링크된 libclntsh.a, liblicense.a 라.. 더보기
디렉토리 사용량 조회 디렉토리 사용량을 볼 때는 보통 du 명령을 많이 사용한다. 그런데 이렇게 du 명령을 사용하면 하위디렉토리까지 모두 표시되기 때문에 불편할 때가 있다. 내가 원하는 것은 특정디렉토리 하위의 디렉토리만 사용 사이즈를 구하고 싶기 때문이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #!/usr/bin/ksh if [ $# -eq 0 ]; then rootdir=./ else rootdir=$1/ fi for dir in `ls $rootdir` do if [ ! -d $rootdir$dir ]; then continue fi du -k -s $rootdir$dir 2> /dev/null done Colored by Color Scripter cs 11 line 에서 디렉토리가 .. 더보기
디스크 사용량 조회 디스크 사용량을 보는 명령은 df -k 을 사용한다. 이것을 좀 더 응용한 쉘 프로그램을 소개한다. AIX 에서는 df -k 명령을 이용하면 아래와 같이 나온다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $ df -k Filesystem 1024-blocks Free %Used Iused %Iused Mounted on /dev/hd4 1048576 481888 55% 12328 11% / /dev/hd2 4718592 165192 97% 58400 56% /usr /dev/hd9var 14680064 4061824 73% 9015 1% /var /dev/hd3 10485760 7397560 30% 610 1% /tmp /dev/hd1 16777216 3857024 78% 8581.. 더보기
일괄 거래 재거래 프로프레임에서 제공하는 pfmtcl 명령을 이용하여 거래를 재현할 수 있다. 하나이던 여러개 이던 거래 전문을 별도의 파일로 저장한 후에 다음 쉘을 이용하여 거래를 재현할 수 있다. 아래 쉘 프로그램은 text 로 저장된 거래 전문 파일을 한 line 씩 읽으면서 pfmtcl 거래를 하는 예제이다. 이 때 pfmtcl 은 거래 전문을 읽어서 IPPR로 거래를 날릴 수 있는 기능이 제공되어야 한다. (여기서는 pfmtcl -s 명령이라고 가정한다, 사이트 마다 옵션이 다름) 사용옵션은 pfmtcl 명령을 실행하면 사용법을 보여주기도 한다. 또는 매뉴얼을 참고한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30.. 더보기
AIX dbx 사용 core 분석 C 프로그램에서 늘 마주치는 것이 코어덤프인데 어떤 코드 때문에 발생했는 지 찾을 때 사용하는 것이 gdb 와 dbx 명령이다. AIX 에서는 dbx명령을 주로 사용한다. 이렇게 dbx 를 사용하여 추적하기 위하여서는 컴파일 할 때 -g 옵션을 줘서 컴파일을 해 줘야 한다.| 샘플프로그램 작성 샘플 프로그램인 sfw0023.c 에 아래와 같이 코어덤프가 발생할 코드를 기술한다. ( 324 라인 ) bug 라는 포인터에는 메모리가 할당되지 않았기 때문에 값을 write 하면 core 덤프가 발생하게된다. 12345678910111213 318 static long 319 a000_validation(sfw0023_ctx_t *ctx) 320 { 321 long rc = RC_NRM; 322 char *bu.. 더보기
티베로 쿼리 실행 쉘 예제 티베로(Tibero) 쿼리를 실행하는 예제인데 오라클과 거의 유사하게 사용할 수 있네. 정말 오랫동안 고생 많이 해서 만들었으리라. 123456> vi test.sh out=`tbsql $CONNECT_INFO PHYSICAL_NAME-------------------------AA0002MS_VS0011 row selected.SQL> Disconnected.Colored by Color Scriptercs 이제 $out 결과를 잘 자르고 붙여서 지저분한거 다 지우고 내가원하는 값만 추출해서 사용하면 될 것이다. 더보기
유닉스 쉘에서 스페이스 잘리지 않게 유지하고 읽는 방법 유닉스 쉘에서 파일을 읽어서 처리하는 프로그램이 필요하였다. 솔직히 말하면 프로프레임에는 pfmtcl 이라는 테스트거래하는 프로그램이 있는데 이미지로그의 전문을 읽어서 연속으로 거래를 날리고자 했다. 그런데 전문 끝에는 스페이스가 있는데 쉘에서 이것을 읽으면 모두 날라가버리고 Trim되어 읽힌다는 것이다. 인터넷을 찾아보면 따옴표(") 로 감싸면 된다지만 이게 또 잘 안된다. 끝에 있는 스페이는 이미 읽을 때 지워버리고 읽어버리기 때문에 소용없는 일이었다. 123while read line; do echo "$line"done 더보기
gdb 사용법 흔히 유닉스 C 프로그램을 개발하는 프로젝트에서 코어덤프가 발생하게 되면 gdb 를 사용하게 된다. gdb 를 이용하면 프로그램이 어디를 어떻게 흘러갔는지 스택정보를 보여주게 되므로 코어가 발생된 위치를 추측하는데 도움이 된다. 대부분의 gdb 사용법은 인터넷에 나와 있는 것과 동일하다. 그런데 흔히 사용하는 명령은 bt (where) 정도 밖에 없다. 이런 bt 명령을 치기 위해서 file 코어파일 을 이용하여 코어가 발생한 실행 파일을 알아 내고 다시 gdb 실행파일 코어파일 을 하여 gdb 모드로 들어가서 bt 명령을 입력하게 된다. 이런 과정을 한방에 할 수 있는 쉘을 작성해 놓고 사용하면 편하다. 보통 gdb [프로그램명] [코어파일명] 이렇게 실행한다. 아래 쉘이름이 gdb.sh 라고 하면 g.. 더보기
LIBPATH 환경 변수 Library 로드 오류 의뢰인이 다음과 같은 문제에 대하여 질문을 하였다. 그래서 몇개의 자료를 찾아 보고 나름 정리를 해 보기로 했다. Could not load program user: $> user Could not load program user: Dependent module libclntsh.a(shr.o) could not be loaded. Could not load module libclntsh.a(shr.o). System error: No such file or directory UNIX 에서 프로그램 실행시 위와 같은 오류메시지를 만났다면 libclntsh.a 라는 파일을 우선 점검해야 한다. 이 파일이 지정된 디렉토리에 실제로 존재하는 지 점검하고 존재한다면 READ권한이 있는지.. 더보기
*.a 와 *.so 차이점 *.a 는 아카이브(Archive) 라는 뜻이다. 보통 우리가 object 파일들을 묶어서 library 로 제공하는 것과 동일하다. 이런 의미에서 *.so 도 동일한 성격이다. java 프로그램을 짜본 개발자라면 jar 파일을 연상하면 이해가 쉽다. C프로그램에 1차 컴파일하면 .o 파일이 생성된다. 소스 속에 main() 함수가 있다면 실행 바이너리로 컴파일 되겠지만 외부에서 호출할 수 있는 function 들로만 구성되어 있다면 .c 소스를 컴파일하면 .o 파일이 생성된다. 흡사 .java 를 컴파일 하면 .class 가 생성되는 것과 같다. java 는 원래 태생이 c 언어에서 시작되었기 때문에 그 구조가 비슷할 수 밖에 없다. 이제 본론으로 들어가서 *.a 와 *.so 의 차이점을 생각해 보면 .. 더보기
리눅스에서 kitchen 설치 ubuntu 14.04 버젼을 사용하고 있다. android custom ROM 을 관리하기 위해서 kitchen 을 설치하고자 한다. kitchen을 설치하기 위해서 아래 명령으로 최신 소스를 git 를 통하여 소스를 가져온다. git clone https://github.com/dsixda/Android-Kitchen stephen@stephen-LifeBook-S7110:~$ git clone https://github.com/dsixda/Android-Kitchen Cloning into 'Android-Kitchen'... remote: Counting objects: 5466, done. remote: Total 5466 (delta 0), reused 0 (delta 0) Receiving .. 더보기
ftp server install in Ubuntu Linux ftp 서버를 설치하는 방법은 두 가지가 있다. 일반적인 vsftpd 서버가 있고 보안이 강화된 sftpd 를 설치하는 방법이 있다. vsftp는 설치가 용이하며 일반적으로 21번 port 로 접속하는 반면에 sftpd 는 22번 포트로 통신한다. 첫번째 방법 : vsftpd 설치할 경우 유닉스,리눅스의 커맨드라인에 다음과 같이 입력하면 간단하게 ftp서버를 설치할 수 있다. > sudo apt-get install vsftpd Reading package lists... DoneBuilding dependency tree Reading state information... DoneThe following NEW packages will be installed: vsftpd0 to upgrade, 1 t.. 더보기
telnetd install in Ubuntu Linux 1.Install telnet use this command in terminal(Applications/Accessories/Terminal): stephen@stephen-LifeBook-S7110:~$ sudo apt-get install xinetd telnetd [sudo] password for stephen: Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: telnetd xinetd 0 to upgrade, 2 to newly install, 0 to remove and 0 not to upgrade... 더보기
Locale value syntax Locale value syntax In general, a value for a locale category (the according environment variable) is constructed like this: "xy[_XY][.codeset][@modifier]" xy: language-abbreviation, ISO 639-1 (2 characters), [ISO 639-2 (3 characters) might be used for languages without a two letter code] XY: country/territory, ISO 3166 [3166-2 three letter codes might be possible] codeset: f.i. "iso88591", "ISO.. 더보기
유닉스 쉘에서 전일 날짜를 구하는 법 유닉스에서 전일자를 구하는 방법이 필요하여 찾아 보았다. 유닉스에서 날짜를 구하는 명령어는 date 이다. > date2014년5월23일 (금), 오후 1시16분20초> set | grep TZTZ=KST-9> TimeZone 이 세계 표준시 보다 9시간 앞서 있다는 (영국에 비해서 날짜가 앞서가는 동양) 말이다. 다른 타임존의 시간을 보면. GMT+9 라고 하면 영국 보다 +9 시간 늦게 해가 뜨는 지역의 시간을 말한다. > TZ=GMT-9 date +"%Y-%m-%d %H:%M" 2014-05-23 13:19 > TZ=GMT+9 date +"%Y-%m-%d %H:%M"2014-05-22 19:19 그렇다면 전일자를 구하려면 한국 (GMT-9) 보다 24시간 늦은 지역의 시간을 구하면 된다. 즉 (GM.. 더보기
AUTH_MAXTRIES clear Nevermind, I have answer! Need to do this: userdbset -d -u username auth_failures by root in HP-UX 더보기
HP 기본 .profile HP 기본 .profile export PS1="[`hostname`:\$PWD]# " LANG=ko_KR.eucKR export LANG set -o vi umask 022 stty erase "^H" kill "^U" intr "^C" eof "^D" stty hupcl ixon ixoff tabs export PS1="[`hostname`:\$PWD]# " alias ls="ls -aF" alias rm="rm -i" JAVA_HOME=/opt/java6 ORACLE_BASE=/sw/appprod/oracle ORACLE_HOME=$ORACLE_BASE/product/11.2.0.3/client 더보기
set -o vi 프로젝트에서 HP장비가 하나 들어 왔는데 profile 설정이 하나도 되어 있지 않았다. 프롬프트도 안 뜨고 커맨드모드에서 백스페이스도 안 먹는 등, 여간 불편하지 않았다. 그래서 인터넷을 찾아 본 즉 몰랐던 사실을 알았다. 커맨드 모드에서 vi 명령어를 쓸 수 있으려면 profile 에( .profile 또는 .bash_profile) 아래와 같이 설정을 해 줘야 한다는 사실이다. set -o vi export EDITOR=vi export VISUAL=vi 위의 3개중에 아무거나 하나를 profile 에 넣어 준다. 그러면 쉘 명령모드에서 Esc 키를 누르면 vi 모드로 들어가게 되어서 vi 의 편리한 명령을 쓸 수 있다. 아울러 프롬프트도 없으면 꽤 불편하다. 대충 아래와 같이 많이 넣어 놓고 쓴다.. 더보기
CentOs ftpd 띄우는 방법 22.4. Starting and Stopping vsftpdThe vsftpd RPM installs the /etc/rc.d/init.d/vsftpd script, which can be accessed using the/sbin/service command.To start the server, as root type:/sbin/service vsftpd start To stop the server, as root type:/sbin/service vsftpd stop The restart option is a shorthand way of stopping and then starting vsftpd. This is the most efficient way to make configuration ch.. 더보기
Cent OS 에서 svn 설치 프로젝트에서 사용하는 os 가 Cent OS이다. 인프라팀에서 윈도우서버 위에 hyper-V 를 설치하고 그 위에 VM 을 깔고 거기에 Cent OS 리눅스를 설치해 준 것이다. 설치 설치는 리눅스에서 yum 명령으로 쉽게 깔 수 있다. 리눅스에 기본으로 포함되어 있는 것인가 보다. os별 설치법은 http://subversion.apache.org/packages.html 에서 참고 # yum install subversion 리포지토리 만들기 svn 루트 디렉토리를 만들고 거기로 이동한 후에 create 한다. 필요하다면 사용자 그룹에게도 읽고 쓸 수 있도록 권한을 준다. # mkdir /home/svn # cd /home/svn # svnadmin create --fs-type fsfs {repon.. 더보기
egrep 리눅스에서는 egrep 이 사용법이 약간 다르네요. 좀 더 유연한 거 같습니다. 정리를 잘 해 놓으신 블로그(http://neotrinity.egloos.com)가 있어서 스크랩해 놓습니다. 나중에 필요할 때 참고하기 위해서. 출처 : 유닉스 쉘 바이블 (엘리 퀴클리 지음)에서 발췌. 3.1 grep 명령어 grep : 파일 전체를 뒤져 정규표현식에 대응하는 모든 행들을 출력한다. egrep : grep의 확장판으로, 추가 정규표현식 메타문자들을 지원한다. fgrep : fixed grep 이나 fast grep으로 불리며, 모든 문자를 문자 그래도 취급한다. 즉, 정규표현식의 메타문자도 일반 문자로 취급한다. 3.2 정규표현식을 사용하는 grep의 예제 # grep NW datafile # grep N.. 더보기
substring SubstringsOften times a programmer needs to be able to get a substring from a variable at a given position. In unix you can use the exprcommand to do this with the substr parameter. Let's say that we have the text string "5283username$$2384/" and we want to get the text "username". To do this we need to read from position 5 for a length of 8. The parameters for substr are the input string, the s.. 더보기