iNode 구조

Linux 2014. 10. 28. 17:34

Linux 및 unix에서는 파일이

 

[File: inode번지] 로 관리가 된다.  (ls i 하면 inode 조회 가능하다) 

 

여기서 inode번지는

è   <inode table 구조>    를 참조하게 된다: (ls –l하면 나오는 정보들이라고 보면 된다)
1File Type
2Permission
3Hard Link Count
(inode 번지 복사) 하드링크시 사용. ( 용법:  ln f1 f2 이며 그 후에 :  rm f1 해도 됨. ) 
                
, 파티션이 다르면 번지중복으로 사용 불가
4Owner
5Group
6Size
7Time
8Point 
à data block저장소를 가르킴
              
symbolic link의 경우 point에 원본위치 있음 (ln -s f1 f2 로 지정)

 Symbolic link
장점: 1. 디렉토리도 된다
                            2.
파티션 달라도 된다.


 

solaris에서는 하드링크를 주로 사용하고

linux에서는 심볼릭 링크(소프트 링크)를 주로 사용하게 된다.

 

 

Posted by yongary
,

Linux Run_Level

Linux 2014. 10. 28. 17:31

 

LINUX RUN LEVEL

<부팅 순서>

1. POST    (파워스위치?)
2. Kernel   
3. init  ( PID 0) => /etc/inittab 참고 함

 

Run-level

0  linux:halt   solaris: PROM모드

1  Single모드

2  Multi user 모드 (약간 제외 – NFS, samba제외)

3  Multi user 모드 모든서비스 가동

4  X

5. GUI까지 구동( linux에만 존재)

 

 

/etc/init.d/ 원본script가 있는데
/etc/
rc1.d/kxxx sxxxx   로 링크 함.
    (
rc1=runLevel  K=stop,  S=Start 프로세서 )
    rc2, rc3….
여러 링크 폴더 존재
    
run_level 스테이징 순서대로 구동 됨.

Posted by yongary
,

remount

Linux 2014. 10. 21. 11:51


linux 커널을 빌드해서 설치하다 보니

/etc가 read-Only인 경우가 발생했다. 

=> (원인은 cloud다 보니, XenServer 에서 발생.. /var/log/messages에 blkfront: barrier: empty write xvdb op failed )


확인:  

$ cat /proc/mounts  해보면  

 /dev/xvda3 / ext3 ro,relatime,errors=continue,user_xattr,acl,barrier=1,data=ordered 0 0

이렇게 ro가 보인다. 


$cat /etc/fstab 해보면 부팅시 mount되는 type /위치를 알 수 있다. 


이 때 remount를 하면 되는데

$ mount -o rw,remount -t ext3 /dev/xvda3 / 

   =>  mount: cannot remount block device /dev/xvda3 read-write, is write-protected 

또 에러가 난다.



제대로 된 remount를 하려면

/etc/fstab 에다가 옵션이 defaults일 경우 ext3 rw,relatime,errors=continue,user_xattr,acl,barrier=1,data=ordered 라고 가정하고

 옵션을 defaults ==>  ext3 rw,relatime,errors=continue,user_xattr,acl,barrier=0,data=ordered 으로 수정해서 한번 해본다. 


Posted by yongary
,

ubuntu 14.04 chkconfig

Linux 2014. 10. 17. 13:51

기존에는 chkconfig이란 명령어로 init.d 데몬들을 관리했지만


ubuntu 14.04부터는

update-rc.d 명령어로 하게 되었다.


만약 tomcat7을 startup시에 실행하고 싶지 않다면


$ update-rc.d   -f  tomcat7  remove


로 하면된다.

Posted by yongary
,

Linux 커널 빌드

Linux 2014. 10. 14. 11:47

Linux 커널 빌드



소스를 받은 후에


1) $ uname -r 해서 현재 linux 커널 버전 확인

   2.6.32-281-blabla.


2) 필요시에만.. 즉 재빌드 하는 경우 등에 이전 빌드 clean해 놓기

  $make clean && make mrproper    


3) 현재 config을 .config로 복사 

cp /boot/config-2.6.32-281-blabla ./.config

4)

$make menuconfig 해서 GUI화면이 뜨게 되면 그냥 exit하면서 save=Yes 로 답하면 됨.


5)

$make all   (혹은 make -j4 all :   4 core cpu일 경우 4배 빨리 build)



6)혹은 rpm으로 build하기 위해서는 rpm-build 툴이 깔려있어야 한다. 그 후에 (   예)yum install rpm-build ) 

$make rpm



해당 rpm을 설치시에는

$rpm -ivh kernel-x.x.xxblabla.rpm 하면 됨.



<개인적인 firmware conflict발생 및 conflict해결>

$yum list kernel kernel-firmware

$yum remove kernel kernel-firmware.noarch  까지 해서 해결.

 


<설치 완료후 grub설정 을 하려는데..> 

1. initramfs파일이 /boot에 없어서

  $dracut initramfs-2.6.39.4.img 2.6.39.4


2. /boot/grub/grub.conf 수정.

- 0번자리(즉 윗자리)에 4줄 복사해서 추가하고   vmlnuz-버전과  initramfs 버전 수정. 

Posted by yongary
,

netstat 명령어 활용

Linux 2014. 10. 8. 14:35

Linux에서 네트웍 진단이나 통계시에

netstat 커맨드가 매우 유용하게 쓰인다.



netstat에는 여러가지 옵션이 존재하는데, 이 중에서 비교적 많이 쓰게 되는 옵션은 다음과 같다.


  -   netstat -nap  (n:숫자로 표시,  a:all,  p:프로세스 ID)  : 즉 프로세서별로 통계

  -   netstat -ntl  (tcp 리스닝),  -nul (udp 리스닝)  : tcp/udp 리스닝 상태

  -   netstat -su (s:통계, u=udp)   : udp통계  



  그 외에 nmap이라는 유틸리티를 설치할 경우 특정 IP에 대한 상대방 진단이 가능한데

 사용법은 

   -   nmap -sU -p 100-2000 +상대ip   (s:스캔,  U=UDP  -p: 포트대역)

Posted by yongary
,

TCP UDP 버퍼 길이 확인

Linux 2014. 10. 8. 10:29

특정 기능을 개발하다 보면,

TCP나 UDP의 버퍼길이까지 튜닝하여야 하는 경우가 발생한다.  (예: heartbeat 데몬 등)


이 때 TCP/UDP의 버퍼길이 조정을 하는 api는 주로 setsockopt를 통해 하게 되는데

min이나 max가 제한되어 있으므로 이를 미리 확인하는게 좋다.


Linux에서


/sbin/sysctl -a   | grep net.core 와

/sbin/sysctl -a   | grep net.ipv4 로 확인이 가능하다.



//아래 예제에서 wmem:sendBuf,  rmem: receive Buf

net.core.wmem_max = 5242880   

net.core.rmem_max = 5242880

net.core.wmem_default = 2097152

net.core.rmem_default = 2097152


net.ipv4.tcp_mem = 196608       262144  393216

net.ipv4.tcp_wmem = 16384       122880  204800

net.ipv4.tcp_rmem = 16384       122880  204800


net.ipv4.udp_mem = 761952       1015936 1523904

net.ipv4.udp_rmem_min = 2097152

net.ipv4.udp_wmem_min = 2097152




아직 테스트 중이라 확실치 않은 부분이 있긴한데

setsockopt 함수를 사용하면 sendbuf는 2048, receiveBuf는 256까지 min으로 설정이 되는 것으로 보인다.

 (설정값 *2 로 세팅이 되므로 함수 호출시에는 그 반으로 해야함) 

Posted by yongary
,

Linux 버전 확인

Linux 2014. 9. 26. 16:50

Linux kernel 버전 확인:  uname -a    
                                 or  lsb_release -a


OS 버전 확인:

redhat계열:  cat /etc/redhad-release

ubuntu 계열:  cat /etc/issue

Mac: sw_vers

 

32 / 64 bit 확인 :

$ getconf LONG_BIT 

 


 


 

Posted by yongary
,

vim 탭설정

Linux 2014. 9. 25. 10:43

vim 에디터가 요즘 대세인데. 탭 기능이 다소 불편할 수 있다.


Vim에서는 Ctrl+Tab단축키(혹은 linux에서 Ctrl+Shift+Tab단축키)가  기본적으로는 분할된 (:sp 명령어로) 화면간 전환에 쓰이기 때문인데..



개인적으로 애용하는 방법은

.vimrc 파일에  아래와 같이 3줄 추가하는 것이다.


map  <C-l> :tabn<CR>

map  <C-h> :tabp<CR>

map  <C-n> :tabnew<CR>



Windows의 경우에는 

C:\Program Files\Vim\_vimrc 파일에 추가.

 

 

기타 특수명령어

 Shift + j   :  라인구분(엔터키)가 하나씩 없어진다

set list  / set unlist  :  특수키를 다 구경할 수 있다.

Posted by yongary
,

vi에디터 한글세팅

Linux 2014. 9. 16. 17:12

한글인코딩을 euc-kr로 할지, utf-8로 할지 고민이 되는 경우,

한국에서만 쓸 것이라면 둘 다 상관이 없고 euc-kr이 좀 더 나을 수도 있을 것 같고

혹시 외국에서도 쓸지 모른다는 생각이 든다면 utf-8이 좋을 것 같다.


대세는 utf-8이라고 보고.. utf-8로 세팅하는 방법을 보면 다음과 같다.


$> env  혹은 locale 을 해보면  os의 LANG을 알 수 있다.

대부분 xx_xx.utf-8 로 되어있다면 문제가 없다.


1. vi 에디터에서 파일변환

:set fileencodings=utf-8  후에 :w 하고 다시 시작.



2. 프롬프트 상에서 파일변환은

iconv  -f euc-kr -t utf-8   euc-kr.html > utf8.html



혹시 

3. vi에디터에서 안보이면

:set enc=utf-8 




참고:   http://www.technet.co.kr/bbs/board.php?bo_table=tip&wr_id=263&page=3 

인코딩 설명:  http://helloworld.naver.com/helloworld/19187 

Posted by yongary
,

< 함수의 실행시간을 milisecond단위로 측정하는 방법. > 



struct timeval을 이용하여 함수의 실행시간을 측정하는 방법인데,


 struct timeval은 초와 micro초로 이루어져 있으므로,

- 초에는 *1000을 

 - micro초에는 /1000 을 해야 milisecond가 된다.


struct timeval { long tv_sec; // 초 long tv_usec; // micro }



=======사용예제================================================

#include <sys/time.h>


struct timeval before,after;  //선언


//사용 
    gettimeofday(&before,NULL);
    run_my_function( );
    gettimeofday(&after,NULL);

    printf("function running time[ms] : %ld\n",
         1000*(after.tv_sec-before.tv_sec) +   
         (after.tv_usec-before.tv_usec)/1000);





Posted by yongary
,


Linux에서 c언어 개발 중,


make는 완료 했으나

실행 중에 .so(공유 library)를 못 찾는 경우 다음과 같이 해결하면 된다.

(이 때, 에러메시지:  cannot open shared object file - no such file or directory)



(UBUNTU)

1. /etc/ld.so.conf.d/  밑에  myApp.conf 파일 추가

2. myApp.conf 파일 첫 줄에

  /usr/lib/myApp/lib  과 같이 특정한 위치 지정    

3. sudo ldconfig (Reload임)



(Debian)

1. /etc/ld.so.conf 편집

2. 마지막 줄에 /usr/lib/myApp/lib 과 같은 특정한 위치 추가

3. ldconfig (Reload임)    (조회는 ldconfig -v)



참조: http://blog.andrewbeacock.com/2007/10/how-to-add-shared-libraries-to-linuxs.html 



또다른 간단한 방법으로는

run 쉘스크립트를 하나 만드는 것이다.


#!/bin/bash

LD_LIBRARY_PATH=/home/myid/common/lib:$LD_LIBRARY_PATH

export LD_LIBRARY_PATH

./test_program

Posted by yongary
,

우분투 14.04 LTS를 설치하고 나서 눈에 띄는 불편함 및 해결 포인트는 


1. 터미널은 어떻게 실행하지?

   CTRL+ALT+T 로 실행.

   ->  한 번 실행만 하면, 사이드 바에 뜨므로 이 때 사이드 바의 아이콘에 우측마우스를 클릭해서 고정이 가능하다.



2.  한글입력이 안된다. (혹은 한영 전환이 안된다)

   - 상단 status바에 한글(태극기 마크 아이콘)을 우측클릭한다.

   - "텍스트 입력창 설정..." 메뉴를 선택한다.

   -  좌측 사용할 입력 소스:  에다가 영어(혹은 English)를 추가한다.

      => 우측 소스 전환시 키를 바꿀 수 있다.  (보통 Shift + 스페이스  선호.)



3. 화면밝기 조절이 안된다. 

   - Intel 그래픽 카드로 설정이 안되서 그런 경우..    아래 파일 추가.

    $> vi  /usr/share/X11/xorg.conf.d/20-intel.conf

  Section "Device"

Identifier "card0" Driver "intel" Option "Backlight" "intel_backlight" BusID "PCI:0:2:0" EndSection

     ( http://itsfoss.com/fix-brightness-ubuntu-1310/  참고)




4. 밝기 조절은 되지만, 껐다 켜면 reset이 되는 경우.  
   ( xbacklight 를 설치하고,   .profile에 값 설정.)


    - sudo apt-get install xbacklight

- 홈 디렉토리의 .profile에 xbacklight -set 40 이라고 삽입. (값은 0~100 백분률임)



5. ipv6관련 오류가 한번씩 뜨는 게 감지되어서 ipv6 disable. (이것으로 인해 대기모드나 절전모드로 자동으로 한번씩 빠졌음) 


$> vi /etc/sysctl.conf

해서 아래 3~4줄 추가.    

#disable ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

   시스템 rebooting 후

   $>  cat /proc/sys/net/ipv6/conf/all/disable_ipv6  해보고,

       1  

    이라고 나오면 정상적으로 ipv6기능이 disable된 것임.



==>(한달 후)  추가적으로 특정 wifi에 접속시 avahi데몬 오류가 나는 경우도 발생되어

/etc/avahi/avahi-daemon.conf  에서 use_ipv6=no 로 수정.



Posted by yongary
,

Ubuntu설치 완료 후, windows를 설치하고 싶어졌다.

windows 노트북이 따로 있긴 하지만, 휴대성이 불편해서 간혹 필요할지도 모르는 windows를 설치하게되었다.



1. Windows용 NTFS 파티션 확보 필요.


  - 우분투의 /home 폴더를 분할해서 NTFS파티션 확보 필요

  - 우분투에 Gparted를 설치해서 파티션을 분할하면 되지만, Gparted에서 /home영역은 마운트 해제가 되지 않는다.

        => 왜냐하면, 로그인한 유저가 /home을 사용하고 있기 때문이다.


  - 그래서, 부랴부랴 새로운 유저를 /tmphome이라는 폴더를 home 사용하도록 만듦.

     $> adduser tmpuser -d /tmphome      참고) http://mintnlatte.tistory.com/256 


  - 그 후 tmpuser로 로그인해서, Gparted에서 마운트해제 후  파티션을 재조정 함.    (Windows NTFS용으로 주 파티션 24G 확보)



2. WIndows USB를 만들어서, Windows 설치.

   

   - 자세한 사항은 고수분들 사이트 참조:       http://deviantcj.tistory.com/469      http://jjorae.com/posts/394  




3. WIndows 설치가 완료되면 항상 Window로 부팅이 됨. boot-repair를 설치하여  GRUB 수정 필요 

  

     boot-repair설치 명령이 14.04에서 좀 바뀜. ( http://askubuntu.com/questions/449428/unable-to-locate-package-boot-repair-in-14-04 )

   - sudo add-apt-repository ppa:yannubuntu/boot-repair

- sudo sh -c "sed -i 's/trusty/saucy/g' /etc/apt/sources.list.d/yannubuntu-boot-repair-trusty.list"

- sudo apt-get update sudo apt-get install -y boot-repair && boot-repair



4. 완료. 

Posted by yongary
,

오랜시간 개발환경을 windows PC에서만 유지하다가,

redis등을 테스트하면서 windows에 한계를 느껴 (redis 최신버전에 windows는 미지원)

Linux로 개발환경을 구축하기로 결정하였다.


1. 노트북 결정

 - 화면이 작은 노트북을 선호하는 관계로 Lenovo S210 i3 모델로 결정. 

 - 128G SSD 장착. (ideaPad S210이 좀 작은 SSD로 볼 수 있는 m-SATA를 지원하는 줄 알았다가 약간 실망)

 


2. Linux 결정 

 - Linux 서버로는 Redhat계열인 CentOS도 많이 쓰이지만, Desktop버전은 ubuntu가 대세로 판단.

 - 최신 버전인 Ubuntu14.04 LTS( Long Term Support : 즉 안정화된 버전으로서 오랫동안 지속 유지된다는 의미) 로 결정.



3. Ubuntu설치용 USB만들어 설치.

- http://www.pendrivelinux.com/universal-usb-installer-easy-as-1-2-3/    Universal USB Install 1.9.5.5 이용해서 우분투 USB생성. 

 - 고수분들의 웹 사이트를 참조해서 설치.  http://deviantcj.tistory.com/473


  파티션은 다음과 같이 결정

   - ROOT / 20G

   - SWAP영역 8G (향후 8G RAM을 꽂을 것을 대비)

   - 나머지 /home  (약 95G ?) 



Posted by yongary
,