ctags 추가 사용 옵션

Linux 2013. 5. 8. 09:28

안드로이드 소스를 볼 때, 빌드 전 인덱싱이 안되어있을 경우 out 디렉토리와 심볼릭링크를 제외할 때는 아래처럼...

ctags -R --exclude=out --links=no

--exclude뒤에는 pattern을 사용할 수 있으므로, 목적에 맞게 사용하면 될 듯 하고, 심볼릭링크를 tagging에 포함시킬지 아닐지는 --links에 [yes | no] 를 선택해주면 된다.

Posted by 강군님
TAG ctags

댓글을 달아 주세요

Memory 관리에 대해서 이것저것 살펴보다가 OOM Killer에 대해 알게 되었고, 그에 대한 내용을 정리해보았다.  주로 인터넷에서 긁은 거지만...

마찬가지로 회사 기밀은 전혀 없음... ㅋㅋ

 

oom killer.pdf

Posted by 강군님
TAG LMK, OOM

댓글을 달아 주세요

UBIFS overview

Linux 2013. 3. 4. 10:43

회사 2013/2/25 진행했던 UBI/UBIFS overview 세미나.  다음 세미나에서는 Garbage collection에 대한 조사가 더 필요하다.  회사의 중요한 내용은 전혀 없음 -.-

UBIFS.pdf

Posted by 강군님
TAG UBI, UBIFS

댓글을 달아 주세요

회사 인트라넷을 쓰려면 싫어도 windows를 써야 한다.  그러다보니, 개발을 할 때는 server를 쓰거나 Virtualbox 등을 사용하여야 하는데, 출장이 워낙 잦은지라 Virtualbox를 사용한다.

Virtualbox를 사용하면서 SecureCRT같은 프로그램으로 SSH 접속을 하여서 사용하는데, 이전까지 흑백(...) color를 사용할 때는 몰랐는데, 총천연(...) color를 사용하면서 ls에서 나타나는 blue color 때문에 눈이 너무 아프다... 뿐만 아니라 prompt에 현재 디렉토리를 표시하는 blue color도... (눈이 아프다기 보다는 잘 안보인다?)

어쨌거나.  구글링을 해보니 dircolors라는 유틸이 존재한다.  Man pages를 보니 -p 옵션으로 pattern을 보기 쉽게 뽑아내고 쉘 타입에 따라 -b나 -c로 해당 쉘에 맞는 형태로 변경시켜준다는 것을 알았다.

$ dircolors -p > ./dir.color; vi ./dir.color

DIR은 01;34 라고 되어있는데, 세미콜론 앞쪽은 Attribute, 뒤쪽은 color를 나타낸다.  주석을 참고하면, 현재 DIR은 진한 blue로 되어있는 것이다.  이게 색깔이 너무 눈이 아프니까, 여러개 바꿔보다가 cyan이 가장 쓸만한 것 같다.  Cyan의 code는 36이지만, symbolic link가 01:36을 사용하고 있으므로, 진하지 않은 cyan으로 00:36으로 변경하고

$ dircolors -b ./dir.color > ~/.profile; source ~/.profile

$ dircolors -b ./dir.color >> ~/.profile; source ~/.profile

좋아.  눈이 안아파... ㅋㅋ 하지만 prompt의 현재 디렉토리 표시란도 색깔을 바꾸고 싶다.

$ vi ~/.profile

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00;36m\] \w \$\[\033[00m\] '

$ source ~/.profile

아.. 이제 눈이 안아파...

----------------------- 2013년 3월 5일 수정 -----------------------------------

dircolors의 결과를 .profile에다가 바로 때려버리면 기존의 data가 날라갈 수도 있으므로... attach를 하도록 하자... -.- 2번째 항목 수정함!

Posted by 강군님
TAG dircolor

댓글을 달아 주세요

간혹, 접근권한이 없는 디렉토리에 접근을 해야 할 때 애용하는 것이 sudo 명령어이다.

보통의 경우 문제가 생기지 않지만, 특정 machine에서 shell의 redirection 기능을 사용하려고 한다면 문제가 발생한다.  특정 machine이라고 한 것은, fedora의 경우 문제가 발생하고 있지 않기 때문이다.  (아마도 fedora에서의 permission 설정은, sudoers에 등록되어있으면 sudo 명령어가 없이도 접근 권한을 획득할 수 있어서가 아닌 것으로 생각된다).

예를 들어, root로만 접근 가능한 /root/test 라는 디렉토리에 echo와 redirection을 이용하여 파일을 만들어야 된다고 가정해보자.

# echo test > /root/test/temp.txt

이것은 당연히 permission fail이 발생하고, 이것을 해결해보고자 아래와 같이 하더라도 마찬가지 결과가 발생한다.

# sudo echo test > /root/test/temp.txt

쉘에서의 redirection이라는 것은 child process를 생성하고 file을 open하는 것인데, sudo는 parent process에서 실행된 것이므로 child process와는 무관한 내용이 되기 때문이다.  따라서, 문제를 해결하기 위해서는 3개의 명령 (sudo, echo와 redirection으로 인한 file open)이 하나의 process에서 실행되든가, 그게 아니면 실제로 접근제한이 걸린 디렉토리에 write를 할 때만이라도 sudo command가 들어가는 것이다.

첫번째 방법은 다음과 같이 실행할 수 있다.

# sudo bash -c 'echo test > /root/test/temp.txt'

두번째 방법은 다음과 같이 표현할 수 있다.

# echo test | sudo tee /root/test/temp.txt

Posted by 강군님

댓글을 달아 주세요

vsftpd on fedora8

Linux 2012. 8. 17. 16:46

개인적으로 Fedora 시리즈를 좋아하지 않는다.  왜냐고 묻는 사람에겐 할말은 없다.  ㅋㅋ 싫은게 이유가 있고 좋은게 이유가 있나요... 그냥 싫고 좋은거지.. ㅋㅋ 

영원히 끝장나지 않는 종교전쟁이나 하자고 100년만에 블로그에 글을 올리는 것은 아니니, 본론으로 들어가자.

회사에서 사용하는 빌드 서버에는 Fedora 8이 설치되어있다.  설치한 분이 퇴사하면서 아무도 관리하지 않는 무법지대가 된지 오래...

어렵사리 받은 영화 파일야동을 팀에 공유하기 위해 팀 빌드 서버의 FTP를 사용하려고 했건만... FTP 접속이 안된다.  뭐지? FTP도 설치 안한거야?

Ubuntu를 알기전엔 나도 Fedora를 썼다고.. ㅋㅋ yum으로 설치하는 것은 어렵지 않지.

# sudo su - (이게 그냥 되다니... Ubuntu의 버릇인가..)

# yum install vsftpd

# service vsftpd start

자.. 이제 올려볼까? 하고 FileZilla를 띄우고 접속을 시도하지만 접속이 되지 않는다.  뭘까? 하고 VMWare에 설치되어있는 Ubuntu를 사용하여 console로 접속하니 속도가 좀 느리긴 하지만 접속이 된다.  FTP prompt에서 ls 명령도 먹는다!! 하지만 사내 네트워크인데 이렇게 느릴리가? 하는 의구심이 들기 시작한다.  뭔가 이상하다.  Process와 port 확인해본다.

# ps -ef | grep ftp

# netstat -a | grep ftp

tcp 0 0 *:ftp *:* LISTEN

Process는 돌고 있지 않은데 port만 열렸다.  닫지 않고 그냥 process가 죽어버려서 열려있나? vsftpd의 상태는 과연 무엇인가?

# /etc/init.d/vsftpd condrestart

vsftpd dead but subsys locked

예상대로 socket을 닫지 못하고 죽어버린 것 같다. (근데 어떻게 FTP client는 동작하는거지???) VSFTPD 소스코드를 후벼파고 싶으나 몰래 영화야동를 올리는 주제에 그것까지는 좀 안될것 같은 느낌이 든다.  subsys는 뭘까? 대부분의 배포판 Linux system에서 대부분의 lock 파일은 /var/lock에서 관리된다.  가보니 subsys라는 디렉토리가 있군.  이 디렉토리에 대해서 fcntl() 로 file lock을 건 것으로 보인다.  그럼, /var/lock/subsys/ 디렉토리에 있는 파일을 살펴볼까.

-rw-r--r-- 1 root root 0 2012-07-31 07:50 acpid
-rw-r--r-- 1 root root 0 2012-07-31 07:51 atd
-rw-r--r-- 1 root root 0 2012-07-31 07:50 auditd
-rw-r--r-- 1 root root 0 2012-07-31 07:50 autofs
-rw-r--r-- 1 root root 0 2012-07-31 07:51 avahi-daemon
-rw-r--r-- 1 root root 0 2012-07-31 07:50 bluetooth
-rw-r--r-- 1 root root 0 2012-07-31 07:51 ConsoleKit
-rw-r--r-- 1 root root 0 2012-07-31 07:51 crond
-rw-r--r-- 1 root root 0 2012-07-31 07:51 cups
-rw-r--r-- 1 root root 0 2012-07-31 07:51 haldaemon
-rw-r--r-- 1 root root 0 2012-07-31 07:50 hcid
-rw-r--r-- 1 root root 0 2012-07-31 07:50 iscsi
-rw-r--r-- 1 root root 0 2012-07-31 07:50 iscsid
-rw-r--r-- 1 root root 0 2012-07-31 07:50 kudzu
-rw-r--r-- 1 root root 0 2012-07-31 07:51 libvirtd
-rw-r--r-- 1 root root 0 2012-07-31 07:51 local
-rw-r--r-- 1 root root 0 2012-07-31 07:50 messagebus
-rw-r--r-- 1 root root 0 2012-07-31 07:50 microcode_ctl
-rw-r--r-- 1 root root 0 2012-07-31 07:51 nasd
-rw-r--r-- 1 root root 0 2012-07-31 07:50 netfs
-rw-r--r-- 1 root root 0 2012-07-31 07:50 network
-rw-r--r-- 1 root root 0 2012-08-13 09:54 nfs
-rw-r--r-- 1 root root 0 2012-07-31 07:50 nfslock
-rw------- 1 root root 0 2012-07-31 07:50 pcscd
-rw-r--r-- 1 root root 0 2012-07-31 07:50 rpcbind
-rw-r--r-- 1 root root 0 2012-07-31 07:50 rpcidmapd
-rw------- 1 root root 0 2012-07-31 07:50 rsyslog
-rw-r--r-- 1 root root 0 2012-07-31 07:51 sendmail
-rw-r--r-- 1 root root 0 2012-07-31 07:51 smb
-rw-r--r-- 1 root root 0 2012-07-31 07:51 sm-client
-rw-r--r-- 1 root root 0 2012-07-31 07:51 sshd
-rw-r--r-- 1 root root 0 2012-08-17 15:04 xinetd
-rw-r--r-- 1 root root 0 2012-07-31 07:51 yum-updates

졸라 많네.  어쨌든 VSFPTD는 이곳에 자기의 파일을 만들기 위해서 fcntl로 get lock을 try한 것으로 보이고, 어떤놈이 잡고 있어서 실패했을 것이라고 추측한다.  어떤놈이 잡고 있는거냐? fcntl로 잡았다면 open을 했을 것이고, close를 하지 않았겠지? 하고 검색해보지만 내 예측은 빗나간다.

# find /proc -name fd -exec ls -al {} \; grep subsys

저기있는 수많은 daemon을 stop해보는 건 무리라고 판단, 제일 눈에 익은 xinted부터 시도해봤는데.  운이 좋은건지 한방에 잡은 놈을 찾았군... ㅋㅋ

# serivce xinetd stop;service vsftpd start;service xinetd start

# ps -ef | grep ftp

root 24160 1 0 15:03 ? 00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.con

오... 접속 된다... FTP 띄우기가 이렇게 힘들다니... 제기랄... Linux를 하도 안썼더니 감을 잃었군...

2012/09/04에 추가한 내용 - xinted에서 ftp service로 proftp란 놈을 사용하면서 발생한 문제였던 것 같다....... 제길슨..

service ftp
{
      socket_type = stream
      wait = no
      user = root
      server = /usr/sbin/in.proftpd
      log_on_success += DURATION USERID
      log_on_failure += USERID
      nice = 10
      disable = no
}

disable을 yes로 바꾸고 xinetd 를 restart시키고 vsftp를 start시키니 제대로 돈다.  셋!

TODO : subsys 고 는 을 을 수 는 법 

2012/10/15에 추가한 내용 -

지난번 TODO로 subsys를 잡고 있는 놈을 찾을 수 있는 방법을 강구하는 것이 목표였는데 이건 컨셉을 잘못 잡았다.  Source code를 받아서 확인한 결과, port 번호 21번에 대해 이미 proftpd가 동작하고 있었으므로, 해당 port에 bind가 실패하면서 subsys/vsftpd가 미처 지워지지 않고 종료된 것이 "vsftpd dead but subsys locked" 의 원인이다.  해당 메세지가 발생하는 것은 vsftpd의 source code가 아닌,  /etc/init.d/functions에서 발생시키는 것으로, 이미 파일이 존재하고 있다면 해당 메세지를 출력하게끔 되어있다.

        if [ -f /var/lock/subsys/${base} ]; then
                echo $"${base} dead but subsys locked"
                return 2
        fi

결국 subsys/vsftpd를 잡고 있다는 것은 fcntl(3)의 lock이나 기타 기능들이 아닌, 그냥 파일이 존재하는지에 대한 여부를 말하는 것이었다.  음..... 역시 source code를 봐야 되는건가?

Posted by 강군님

댓글을 달아 주세요