2011년 6월 6일 월요일

.bash_profile vs. .bashrc

.bash_profile과 .bashrc의 차이점은...

.bash_profile은 login시 적용되고, .bashrc는 non-login시 적용된다.

로그인 상태에서 새로운 터미널을 오픈할때가 대표적인 non-login의 예이다.

이를 구분하는 이유는 로그인시마다 시스템의 상태를 검사하는 루틴을 실행하고자 할 경우, .bash_profile과 .bashrc파일이 분리되어 있지않다면 터미널이 오픈될때마다 매번 시스템 상태를 점검하는 루틴이 실행될 것이다.

2011년 6월 5일 일요일

Linux Kernel Analysis

iamroot.org의 ARM 6차 분석 자료 링크

Kernel Version: 2.6.30.4

arm_lksas_6th_documentation_v.0.6.pdf

Virtualization

* kvm으로 vm 만들기

  - sudo apt-get install qemu kvm
  - sudo apt-get install libvirt-bin
  - qemu-img create machine_name.img -f raw 1G
  - kvm -m 512 -cdrom /home/user/ubuntu-10.10-server-amd64.iso -boot d machine_name.img
 
 
* Network
 
/etc/network/interface 
---------------------------------------------------------------------------------- 
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
        address 192.168.0.10
        network 192.168.0.0
        netmask 255.255.255.0
        broadcast 192.168.0.255
        gateway 192.168.0.1
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0
        bridge_maxwait 0
---------------------------------------------------------------------------------- 
 
* 실행하기
 
- sudo /usr/sbin/brctl addbr br0 
   - sudo qemu-system-x86_64 -hda /path/to/hda.img -net nic,macaddr=$macaddress -net tap
    (or kvm -no-acpi -m 512 machine_name.img) 
    :$macaddress = 임의의 MAC 주소
 
* Redirecting
- qemu-systems-x86_64 –m 400 –hda fedora.img –redir tcp:2222::22 
 
 
* Bridge STP (Spanning Tree Protocol) Enabling
- brctl show
- brctl stp <bridge-name> on
 
rsyoung@descartes:~$ brctl show
bridge name bridge id  STP enabled interfaces
br0  8000.2226c7f7ac47 yes  tap1
virbr0  8000.000000000000 yes  
virbr1  8000.000000000000 yes  
rsyoung@descartes:~$   
 
 
* tap 생성 
- check  /dev/net
- $ mknod /dev/net/tun c 10 200
   - setup the tap0 interface with an ip address (e.g. 192.168.0.1)
- tap0 interface creation
* $ sudo tunctl
   - ip assign
* $ sudo ifconfig tap0 192.168.100.1 up

2011년 1월 24일 월요일

유용한 리눅스 명령어...(업데이트중..)

* sticky bit
   “Sticky” means that even if multiple users have write permission on a directory, 
     only the  owner of a file can delete the file within a sticky directory.
 
* list up partitions

   $ cat /proc/partitions  

* partition editor
   $ gparted

* mpeg4 --> mp3 conversion


   $ ffmpeg -i <mpeg4 file> -b 192k <mp3-filename.mp3>

* NFS Client version & Stat

   [rsyoung@ui01 ]$ /usr/sbin/nfsstat
    Client rpc stats:
    calls      retrans    authrefrsh
    25530      0          0


    Client nfs v3:
    null         getattr      setattr      lookup       access       readlink
    0            0% 6864     26% 25        0% 832       3% 2054      8% 1         0%
    read         write        create       mkdir        symlink      mknod
    15272    59% 43        0% 9         0% 0         0% 0         0% 0         0%
    remove       rmdir        rename       link         readdir      readdirplus
    12        0% 0         0% 1         0% 4         0% 2         0% 105       0%
    fsstat       fsinfo       pathconf     commit
    278       1% 26        0% 0         0% 0         0%



* Remote NFS version check

   [rsyoung@ui01 CDF]$ /usr/sbin/rpcinfo -u 192.168.123.251 nfs
   program 100003 version 2 ready and waiting
   program 100003 version 3 ready and waiting
   [rsyoung@ui01 CDF]$ whereis nfs


* Filesystem Block Size

   [root@wn1038 ~]# dumpe2fs /dev/sda2 | grep "Block size"
    dumpe2fs 1.39 (29-May-2006)
    Block size:               4096
   [root@wn1038 ~]#


* condor queue에 있는 모든 job을 강제로 종료하기

   $ condor_q | while read f; do g=`echo $f | 
                awk 'print $1}'`; condor_rm -forcex $g;done



* worker node retrieving using "seq"

   # for sv in $(seq -f wn10%02g.rsyoung.org 10 15) \
      $(seq -f wn20%02g.rsyoung.org 01 12) ; \  
      do echo "[ $sv ]";   ssh $sv 'df -h /tmp' ; done



* onevm list에 나오는 uniq한 사용자 축출 

   $ onevm list | grep -e '[:space:]*[:digit:]' | 
           awk -F " " '{print $2}' | sort | uniq | wc -l
 

* History Command

   $ Ctrl+R for searching
   $ !4         <-- 4번째 명령실행



* Ubuntu Firewall Enable/ Disable

   $ sudo ufw <enable | disable>
      : ufw = uncomplicated firewall 


* Ubuntu에서 nologin Account 생성하기


    $ sudo useradd -s /usr/sbin/nologin <account_name>


* 큰파일 여러조각으로 만들고 복원하기

    $ split --bytes = 1m /path/to/large/file      
                         /path/to/output/file/prefix
    $ cat prefix* > xyz


* ip 주소만 축출하기

 ifconfig  | grep 'inet addr:' | grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'


* 특정시간이 이전에 수정된 파일 찾아 지우기

  find . -ctime +0 -exec rm -f {} \;


* 특정 파일보다 이후에 생성된 파일 찾기

  touch -t 201103010000 <filename>
  find . -type f -newer ../20110301 -exec ls -l {} \;
   
   - 찾은 후 파일크기 총합 구하기
     cat files.txt | awk -F " " '{sum += $5} END {print sum}' 


* ip 주소 삭제하기

   ip address del 192.168.0.100 dev eth0




* pdf 파일 잘라내기



  pdftk A=one.pdf B=two.pdf cat A1-7 B1-5 A8 output combined.pdf


* modprobe blacklist



vim /etc/modprobe.d/blacklist.conf

2011년 1월 3일 월요일

ARM에서 clean, flush, invalidate

Kernel Study중 나왔던 질문에 대해 정리한 내용입니다. 

  • ARM Developer's Guide에 나온 설명을 기반으로 말씀드리면, Cache에 쓰이는 용어가 flush/ invalidate/ clean이라고 보면되고, Write Buffer에 사용하는 용어가 Drain이라고 일단 구분하면 되겠습니다. Cache에서 Flush란 Cache Line의 Dirty Bit를 0으로 reset 시키는 것입니다.  메모리에 반영은 없습니다. 반면 Clean은 Dirty Bit가 1로 Set된 것을 모두 메모리에 반영시키는 것입니다. 반영시킨다는 것은 Write Buffer가 존재하면 WB에 쓰기가 수행될 것입니다.  그럼 Cache Line에서 Clean을 통해 메모리에 반영하기 위해 WB에 썼다면 WB의 내용을 모두 메모리에 반영해야 할 것입니다. 이를 Drain이라고 정리하면 될 것 같습니다. (여기서 주의할 사항은 ARM Cache에 쓰이는 Flush라는 용어가 우리가 흔히 사용하는 Flush와는 다른 것이고 오히려 Clean과 의미가 유사합니다.)

  • 한가지 주의 깊게 보아야 할 용어가 Invalidate입니다. 커널 소스와 책을 통해서 느낀 점은 Invalidate가 두가지 의미로 사용된 다는 점입니다. 첫번째는 Cache Flush와 같은 의미로 사용될 때가 있습니다. 즉 Dirty Bit를 무효화 (Invalidate) 시킨다는 의미로 사용될 때가 있고, Cache Line에서 Valid Bit를 무효화 (Invalidate) 시킨다는 의미로 사용될 때가 있습니다. 후자의 경우는 Cache Line 전체를 활성화 비활성화 시킨다는 점에서 Flush와는 완전 다른 개념입니다. 따라서, 이 부분들을 잘 고려하고 문맥을 파악해서 Invalidate이 어떤 의미로 사용되었는지 파악하면 될것 같습니다. 책의 설명을 빌리자면 "메모리를 설정할 때 변경된 것을 지원할 경우, 캐시의 모든 영역이나 일부 영역을 플러시할 필요가 생길 수 있다. "Invalidate"란 용어가 "flush"라는 용어 대신 사용된다."