Linux2009.01.20 23:45
윈도우에서는 ipconfig 라는 녀석으로 유선랜의 경우에는 dhcp까지 설정이 가능하다.
ipconfig /all <- 모든 어댑터 리스트 보기
ipconfig /renew <- dhcp 갱신

&lt;도움말&gt; ipconfig /?



리눅스에서는 조금은 분화가 되어있다.(윈도우에 익숙해서인지 불편하다)
ifconfig - configure a network interface
dhclient - Dynamic Host Configuration Protocol Client

iwconfig - configure a wireless network interface

iwspy - Get wireless statistics from specific nodes
iwlist - Get more detailed wireless information from a wireless interface

굳이 윈도우와 비교를 하자면
 windows  linux
 ipconfig  ifconig, iwconfig
 ipconfig /renew
 dhclient, dhcpcd

[dhcpcd : http://www.phystech.com/download/dhcpcd_man.html]
Posted by 구차니

댓글을 달아 주세요

Linux2009.01.18 23:03
syntax highlight 관련해서 찾다가 신경을 쓰지 않던 Regular expression을 보게 되었다.

dp.sh.RegexLib = {
	MultiLineCComments : new RegExp('/\\*[\\s\\S]*?\\*/', 'gm'),
	SingleLineCComments : new RegExp('//.*$', 'gm'),
	SingleLinePerlComments : new RegExp('#.*$', 'gm'),
	DecimalValue : new RegExp('[0-9]+','g'),
	HexaValue : new RegExp('[0][xX][A-Fa-f0-9]+','g'),
	DoubleQuotedString : new RegExp('"(?:\\.|(\\\\\\")|[^\\""\\n])*"','g'),
	SingleQuotedString : new RegExp("'(?:\\.|(\\\\\\')|[^\\''\\n])*'", 'g')
};


이런 부분이 shCore.js에 들어 있는데 RegExp의 인자중 'g' 'gm' 부분이 먼지 몰라서 찾아 보게 되었다.

Global match
Ignore case
match over Multiple line
stickY - new in FireFox 3

[참고 : http://user.chollian.net/~spacekan/source/string/regExp.htm]
[참고  : https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Objects/RegExp]

man grep - Regular expression

더보기


Posted by 구차니

댓글을 달아 주세요

Linux2009.01.14 13:20

 $ldd ps
        linux-gate.so.1 =>  (0x00110000)
        libproc-3.2.7.so => /lib/libproc-3.2.7.so (0x00b23000)
        libdl.so.2 => /lib/libdl.so.2 (0x00b4c000)
        libc.so.6 => /lib/libc.so.6 (0x009e1000)
        /lib/ld-linux.so.2 (0x009c4000)


$ar -t libdevmapper.a
bitset.o
hash.o
libdm-common.o
libdm-file.o
libdm-deptree.o
libdm-string.o
dbg_malloc.o
pool.o
libdm-iface.o


ldd 라는 녀석은 실행파일이 동적으로 사용하고 있는 라이브러리의 목록을 보여주고

ar 이라는 녀석은 라이브러리에 포함되어 있는 목록을 보여준다.


[참조 : http://www.misofruit.co.kr/seojewoo/embedded/linuxschedule/030312study.htm]


man page for ldd & ar

더보기


Posted by 구차니

댓글을 달아 주세요

  1. 오호.. ldd라는 녀석... 제가 만든 프로그램을 한번 살펴보니... 아래처럼 나오네요.

    libm.so.6 => /lib/tls/libm.so.6 (0x40034000)
    libc.so.6 => /lib/tls/libc.so.6 (0x42000000)
    libdmalloc.so => /usr/lib/libdmalloc.so (0x40056000)
    libsqlite3.so.0 => /usr/local/lib/libsqlite3.so.0 (0x4009f000)
    /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
    libdl.so.2 => /lib/libdl.so.2 (0x400f3000)
    libpthread.so.0 => /lib/tls/libpthread.so.0 (0x400f6000)

    2009.01.14 14:24 [ ADDR : EDIT/ DEL : REPLY ]
    • malloc은 기본이고 sql과 thread 인가요.

      리눅스 프로그래밍은 저랑은 거리가 좀 멀어서 말이죠 ㅋ
      대개 리눅스 관련 정보가 올라오는 이유는 소장님이 물어 보셔서 찾아보고 올리는 거다 보니 제가 직접적으로 하는 일과는 조금 거리가 있답니다 ^^;

      2009.01.14 14:40 [ ADDR : EDIT/ DEL ]

Linux2008.12.26 16:18
find 라는 명령어는 -exec 라는 옵션을 사용하여 파이프라인을 통해 검색된 결과를 넘겨 줄 수 있다.

윈도우/리눅스를 혼합하여 사용할 경우 의미 없이 용량만 늘리는 Thumbs.db 라는 넘을 삭제 하고 싶은데
일일이 찾아 지우기는 귀찮으니 조금 더 귀차니즘을 발휘하여 find에게 떠밀어 보자

 find [start path] -name Thumbs.db -exec rm {} \;

{} 는 검색된 결과가 넘어 가는 것이고
\; 는 명령어의 끝을 나타낸다. {}는 붙여 써야 하고(치환자)
\;역시 붙여 써야 하되, {} \;는 띄워서 써야 한다.


[참고 : http://kin.naver.com/detail/detail.php?d1id=1&dir_id=10202&eid=uOUzGMEfvG/Z2+VmcTxiS3R/sb6P15T+&qb=ZmluZCBleGVj&pid=fSfZswoi5URssbZwiR4sss--173216&sid=SVSD7S1zVEkAACzVjnk]
Posted by 구차니
TAG exec, Find, RM

댓글을 달아 주세요

Linux2008.12.22 12:02
-rwxr-xr-x 1 root root   76400 Jul  5  2007 libresolv-2.5.so
lrwxrwxrwx 1 root root      16 Apr 11  2008 libresolv.so.2 -> libresolv-2.5.so
-rwxr-xr-x 1 root root   44060 Jul  5  2007 librt-2.5.so
lrwxrwxrwx 1 root root      12 Apr 11  2008 librt.so.1 -> librt-2.5.so

심볼릭 링크를 보는데 의구심이 생겼다.

1. 어떻게 심볼릭 링크는 저장이 되는지
2. libresolv-2.5.so면 16글자인데, 그럼 null 포함하면 17byte인데 왜 파일 사이즈가 16인가?

/usr/share/file/magic 파일을 보면
 9280 # lnk files windows symlinks
 9281 0       string  \114\000\000\000\001\024\002\000\000\000\000\000\300\000\000\000\000\000\000\106        MS Windows shortcut
 라는 내용이 있는데, file 하면 나오는

lrwxrwxrwx  1 morpheuz dev      7 Dec 22 11:47 tt -> err.log
[morpheuz@dev stbmw]$ file tt
tt: symbolic link to `err.log'

file 결과에서 나온 "symbolic link t"o 라는 메시지는 magic 파일에서 검색되지 않는다.

그리고 readlink() / readlink 라는 녀석도 존재 하는데
이녀석이 심볼릭 링크의 실제 내용을 읽어 주는 녀석이라고 한다.
READLINK(1)                      User Commands                     READLINK(1)

NAME
       readlink - display value of a symbolic link

SYNOPSIS
       readlink [OPTION]... FILE

DESCRIPTION
       Display value of a symbolic link on standard output.

       -f, --canonicalize
              canonicalize  by  following every symlink in every component of the given name recursively; all but the
              last component must exist

       -e, --canonicalize-existing
              canonicalize by following every symlink in every component of the given name  recursively,  all  compo-
              nents must exist

       -m, --canonicalize-missing
              canonicalize  by  following  every  symlink  in  every component of the given name recursively, without
              requirements on components existence

       -n, --no-newline
              do not output the trailing newline

       -q, --quiet,

       -s, --silent
              suppress most error messages

       -v, --verbose
              report error messages

       --help display this help and exit

       --version
              output version information and exit
근데.. 해보니 머.. ls -l 이랑 별 차이도 없는데 -ㅁ-!
Posted by 구차니

댓글을 달아 주세요

  1. 저런 사소한곳까지 관심을 가지시는군요 -_-;;;;

    저는 그냥... 아 심볼링 링크구나.. 하고 지나쳐버리는...

    2008.12.22 18:52 [ ADDR : EDIT/ DEL : REPLY ]
    • 그 멘트를 두번재 보는건가요 ㅎㅎ
      사소하면서도 어쩌면 참 중요한 내용일꺼 같아서 한번 파헤쳐 보고 있답니다. 솔찍히 학교에서도 아쉬웠던게 이렇게 속시원하게 파주지를 않더라구요 ㅎ

      2008.12.22 18:57 [ ADDR : EDIT/ DEL ]
  2. 학교는 말 그대로 학교더라구요. -_-;
    수박의 겉모양이 어떻게 생겼는지는 알려주는데,

    그 속이 빨갛고 그 안에 까만 씨가 있다는 것은 스스로 알아내야 하는....

    그래서 스스로 노력하지 않으면 수박이라는 열매는 그냥 초록색 과일이겠거니 하고 생각하고 말게되는..

    2008.12.23 10:07 [ ADDR : EDIT/ DEL : REPLY ]
    • 그래도 학교에서 한번쯤은 수박씨를 심어 키우고 쪼개서 먹는 과정까지는 해주면 좋겠다는 생각이 들더라구요. 공부가 아닌 학습/암기만 강요하는 현재 교육 시스템에 문제도 있긴하지만, "왜?" 라는 의문을 가지지 않고 쉽게 점수를 따기 위해(외우는게 쉬운건 아니지만) 학습을 하는 모습은 참 안타깝기만 하더군요. 머.. 학점이 안나와서 대충 살아 가는 제가 할말은 아니지만 말이죠 ^^;

      2008.12.23 10:25 [ ADDR : EDIT/ DEL ]

Linux2008.12.19 20:05
man find

       -type c
              File is of type c:

              b      block (buffered) special

              c      character (unbuffered) special

              d      directory

              p      named pipe (FIFO)

              f      regular file

              l      symbolic link; this is never true if the -L option or the -follow option is in effect,
                     unless  the symbolic link is broken.  If you want to search for symbolic links when -L
                     is in effect, use -xtype.

              s      socket

              D      door (Solaris)


'ls -l'을  실행하면
$ ll
total 1922
drwxr-xr-x   2 root root    4096 Nov 15 04:17 bin
drwxr-xr-x   4 root root    1024 Apr 11  2008 boot
drwxr-xr-x  12 root root    3900 Nov 14 13:07 dev
drwxr-xr-x 101 root root   12288 Dec 15 04:15 etc
drwxr-xr-x  10 root root    4096 Aug 19 13:59 home
drwxr-xr-x  14 root root    4096 Apr 11  2008 lib
drwx------   2 root root   16384 Apr 10  2008 lost+found
drwxr-xr-x   2 root root    4096 Nov 14 13:07 media
drwxr-xr-x   2 root root       0 Nov 14 13:07 misc
drwxr-xr-x   2 root root       0 Nov 14 13:07 mnt
drwxr-xr-x   2 root root       0 Nov 14 13:07 net
drwxr-xr-x   2 root root    4096 Jun 19  2008 nfsroot
drwxr-xr-x   3 root root    4096 May 29  2008 opt
dr-xr-xr-x 195 root root       0 Nov 14 13:06 proc
drwxr-x---  29 root root    4096 Dec 17 11:00 root
drwxr-xr-x   2 root root   12288 Apr 11  2008 sbin
drwxr-xr-x   2 root root    4096 Apr 10  2008 selinux
drwxr-xr-x   2 root root    4096 Oct 11  2006 srv
drwxr-xr-x  12 root root       0 Nov 14 13:06 sys
drwxr-xr-x   2 root root    4096 Dec 17 13:30 tftpboot
drwxrwxrwt  16 root dev    90112 Dec 19 20:01 tmp
drwxr-xr-x  15 root root    4096 May 30  2008 usr
drwxr-xr-x  24 root root    4096 Apr 10  2008 var

이런식으로 퍼미션과 파일의 종류가 출력이 된다.
아무튼 일반적으로 보이는 녀석들은

- 일반 파일
b Block device
c Character device
d Directory
l symbolic Link

인데 드물게 보이는 녀석들이 존재 한다.
prw------- 1 morpheuz dev        0 Jul 15 13:21 initctl
crw-rw---- 1 morpheuz dev  61,   0 May 30  2008 lirc
srwxr-xr-x 1 morpheuz dev        0 Oct 20 19:57 lircd
brw-rw---- 1 morpheuz dev   7,   0 May 30  2008 loop0

이 녀석들의 의미는 역설적이게도.. find에서 찾아 냈다.

p name Pipe
s Socket


Posted by 구차니

댓글을 달아 주세요

Linux2008.12.18 11:24
CALL source or . (dot operator) "include" another script

[출처 : http://tldp.org/LDP/abs/html/dosbatch.html]



In the last syntax ./ means current directory, But only . (dot) means execute given command file in current shell without starting the new copy of shell, The syntax for . (dot) command is as follows
Syntax:
. command-name
[출처 : http://www.freeos.com/guides/lsst/ch02sec01.html]




간단하게 환경변수를 쓰기 위해 만든 스크립트를 단순하게
실행하면, 별도의 쉘이 생성이 되어 실행되므로 현재 쉘에 적용이 되지 않는다.

그런 이유로 일반적으로 환경 변수로 사용하기 위한 스크립트를 실행 할때는 반드시
source [script.file] 로 실행을 한다.

source [script.file]와 동일하게
. [script.file] 을 실행해도 된다.
Posted by 구차니

댓글을 달아 주세요

Linux2008.12.16 17:35
굳이 파일이 존재 하는지 확인을 하려면

1. fopen()의 리턴값을 확인한다.
FILE *fopen(const char *path, const char *mode);
FILE 포인터로 리턴을 하는데 open 실패시 NULL을 리턴하며, errno에 에러를 기록함.

2. access()로 확인한다.
int access(const char *pathname, int mode);
리턴값을 바로 확인하면 됨.

3. fstat()의 리턴값을 확인한다
int fstat(int filedes, struct stat *buf);
리턴값을 바로 확인하면 됨.

구차니즘을 털고 2008.01.06일 테스트
#include <unistd.h>
#include <stdio.h>
#include <sys/stat.h>
#include <time.h>
int main()
{
        int ret = 0;
        clock_t before;
        clock_t after;
        double res;
        FILE *fp;
        struct stat st;

        before = clock();
        fp = fopen("test.txt","rb");
        after = clock();
        printf("%d - %d = %d tick\n",after, before,after - before);

        before = clock();
        ret = access("test2.txt",F_OK);
        after = clock();
        printf("%d - %d = %d tick\n",after, before,after - before);

        before = clock();
        ret = stat("test3.txt",&st);
        after = clock();
        printf("%d - %d = %d tick\n",after, before,after - before);

        return 0;
}

로 테스트 하는데, 전부 0 tick이 나온다 ㄱ-
결론은 어느걸 쓰던지 현존 시스템에서는 지장이 없다는 의미인데, 임베디드에서 쓰기 위해서는
조금 더 자세히 조사를 해봐야 할 듯 하다.

dmesg | grep CPU
CPU0: Intel(R) Pentium(R) 4 CPU 3.40GHz stepping 0a

$ time ./a.out
0 - 0 = 0 tick
0 - 0 = 0 tick
0 - 0 = 0 tick

real    0m0.001s
user    0m0.000s
sys     0m0.001s

이래저래 측정이 안되는건 마찬가지 ㄱ-




fopen(open) / access / fstat 에러 모음은 아래 클릭!

더보기


Posted by 구차니

댓글을 달아 주세요

  1. 새콤달콤

    한 10만번쯤 루프 돌리면 성능차이가 나지 않을까요?

    2012.08.29 11:32 [ ADDR : EDIT/ DEL : REPLY ]
    • 그렇게 많은 양의 파일을 열어 볼일은 거의 없을테고..
      그러면 IO에 영향을 받는지 함수자체가 무거운건지 분간이 안될것 같아요 ㅠ.ㅠ

      2012.08.30 15:02 신고 [ ADDR : EDIT/ DEL ]

Linux2008.12.08 16:20

#include <unistd.h>

int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg,  ..., char * const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);


The  functions  execlp()  and execvp() will duplicate the actions of the shell in searching for an executable file if
the specified filename does not contain a slash (/) character.  The search path is the path specified in the environ-
ment  by the PATH variable.  If this variable isn’t specified, the default path ‘‘:/bin:/usr/bin’’ is used.  In addi-
tion, certain errors are treated specially.

[출처 : man page]

execl의 경우에는 path가 들어 가는데 arg에서 문제가 생긴다.




execl은 잠시 잊고 잠시 C언어로 돌아가서 main()의 프로토 타입을 생각해보자
 int void(int argc, char **argv)
그리고 argv[0] argv[1]의 내용을 떠올려 보자
argv[0]은 실행한 파일의 이름이 argv[1] 부터 인자가 넘어 오지 않았던가!




다시 execl로 돌아와서
int execl(const char *path, const char *arg, ...);
path에서는 파일 이름이 포함 된 경로를 적어주고, arg[0]에는 파일 이름 arg[1] 부터는 인자를 넘겨 주면 된다.


간단한 예를 들자면
 execl("/bin/ls","ls","-al",0);
로 실행을 하면된다.

마지막의 0은 '\0' == NULL 이다.


[참고 : http://kldp.org/node/1548]
Posted by 구차니
TAG exec, Execl

댓글을 달아 주세요

Linux2008.12.08 15:56
리눅스에서 프로그램을 실행 시키는 방법은
fork() / exec() 로 하는 방법과 system() 으로 하는 방법이 있다고 한다.
(내가 직접해본게 아니니 발뺌하기 모드 -.-v)

아무튼 fork()의 경우 parent 의 메모리를 복사해서(COW - Copy On Write) 사용하므로 메모리의 낭비가 생기는데,
이런 이유로 메모리가 넉넉해 보임에도
"fork 시에 ENOMEM 을 뱉어 내고 실행을 못한다"면 fork 대신에 vfork를 사용하면 된다.


어플리케이션 서브프로세스를 생성할때 메모리 사용량 최대로 줄이기
Greg Nakhimovsky, 2006년 5월

Fork의 퍼포먼스
...
fork()exec() 에 뒤따라 바로 살행되는 fork/exec 모델의 단점을 다루기 위해 버클리 버젼의 유닉스(BDS)는 1980년대 초반에 vfork() 시스템 콜을 내놓았습니다. vfork(2)부모 프로세스를 자식 프로세스에 카피하지 않습니다. 두 프로세스가 모두 부모의 가상 주소 공간을 공유 합니다; 부모 프로세스는 자식 프로세스가 종료 되거나 exec() 를 호출할때 까지 정지 상태로 들어 갑니다.
...
오랜 시간이 지난후에 멀티쓰레딩(MT)이 가능해 지고 많이 사용되면서 vfork() 가 어플리케이션이 여러개의 쓰레드를 가지고 있을때 새로운 문제를 일으킬 수 있음이 밝혀 졌습니다: 데드락.

메모리 overcommit: 솔라리스 vs 다른 운영체제들

몇몇 운영체제 (리눅스, IBM AIX, HP-UX 같은) 들은 memory overcommit 이라는 기능을 가지고 있습니다.( lazy swap allocation 이라고도 불림) memory overcommit 모드에서 malloc()스왑스페이스를 예약하지 않고 시스템에 충분한 VM이 있든 없든 항상 NULL 이 아닌 포인터를 리턴 합니다.

...

리눅스 커널 버젼 2.6과 그후에 버젼에서는 이론적으로 커널의 동작을 수정할 수 있는 방법이 존재 합니다. 그러므로 overcommit memory 가 발생하지 않을 것입니다. 이것은 strict overcommit modesysctl을 통해 조정함으로써 가능합니다:

sysctl -w vm.overcommit_memory=2

혹은 동일한 의미를 가지고 있는 vm.overcommit_memory=2/etc/sysctl.conf 에 삽입합니다.



[출처 : http://kr.sun.com/developers/solaris/techdocs/subprocess.html]

 Memory overcommit is a Linux kernel feature that lets applications allocate more memory than is actually available. The idea behind this feature is that some applications allocate large amounts of memory "just in case", but never actually use it. Thus, memory overcommit allows you to run more applications than actually fit in your memory, provided the applications don't actually use the memory they've allocated. If they do, then the kernel terminates the application.

[출처 : http://www.gnu.org/software/gnusound/Documentation/ar01s05.html]



Posted by 구차니

댓글을 달아 주세요

  1. 몇년전에 코딩해놓은거 보니까, 저도 vfork로 도배질을 해놓은게 있네요 -,.-;
    왜그랬는지 이유를 몰랐는데....

    메모리때문에 그랬던건가 -_-? 아무튼 저는 데드락 걸린 적은 없어요. ㅎㅎ

    2008.12.09 09:32 [ ADDR : EDIT/ DEL : REPLY ]
    • 저야 아직 초급 개발자라서 저런 고급 레벨까지 파고들일이 없었지만, 개발중에 막힌 부분이라서 검색을 하다 보니 알게 되었어요 ㅎ
      일단 임베디드다 보니 메모리가 부족한 상황이 발생을 하지만, 일반 PC에서는 메모리가 부족한 상황이 극히 드물테니 fork로 해도 상관이 없겠다는 생각이 들더라구요

      2008.12.09 09:56 [ ADDR : EDIT/ DEL ]