1. rootdir1 라는 특정 폴더 아래 특정 파일들을 rootdir2라는 폴더 아래, 나머지 패스가 같은 형태로 카피하고 싶을 때,

find . -name "*.c" | xargs -t -i cp {} {}

-t: xargs를 통해 구성된 명령어를 표준 에러로 출력
-i: xargs에 전달된 라인 전체를 뒤에 나오는 명령어의 인자로 사용
디폴트로 라인 전체를 의미하는 기호는 {}



출처: http://blog.naver.com/siyang6?Redirect=Log&logNo=30047770322


2. xargs를 이용한 복수의 command를 처리하기(update)

find . -name "*.c" | xargs -I {} sh -c 'echo -n {} >> c_files.txt; stat -c %Y {} >> c_files.txt'

위와 같이 하면 하위 폴더 내에서 모든 C로 끝나는 파일들을 찾아, 파일이름과, 파일의 날짜를 c_files.txt파일에 저장한다.


Posted by code cat
리눅스2011. 4. 22. 09:11


가끔 Ubuntu에서 make menuconfig 할 일이 생긴다.
그때 ncurses 를 설치하라고 하는데, 설치해봐도 안된다고 불평한다.

그럴땐, sudo apt-get install libncurses5-dev 를 해보자.
make menuconfig가 잘 될 것이다. 

 


'리눅스' 카테고리의 다른 글

Linux: umask  (0) 2012.01.03
JBD error message "barrier-based sync failed"  (0) 2011.08.17
EXT4 파일 시스템 굽기  (0) 2011.08.02
VMWare virtual machine cannot resume c0000006 에러  (0) 2011.06.27
/opt, 리눅스 패키지 설치  (0) 2011.04.20
Posted by code cat
리눅스2011. 4. 20. 23:15

이 디렉토리는 기본적으로 인스톨 되는 것을 제외한 모든 소프트웨어 및 애드온 패키지를 위해서 준비된 디렉토리이다.  여기에 설치될 어떤 패키지 간에, /opt/'package' 혹은 /opt/'provider' 디렉토리에 따로 정적 파일들을 두어야 한다.(package는 소프트웨어 패키지 이름이고, provider는 제공자의 LANANA(Linux Assigned Names and Numbers Authority)에 등록된 이름이다)


보통의 배포버젼들은 /opt/bin, /opt/doc, /opt/include, /opt/info, /opt/lib, /opt/man을 안 만들지만, 로컬 시스템 관리자를 위해서 준비되어 있으며, 패키지들은 'front-end' 형식의 파일들로 이 디렉토리들에 놓여질 파일들을 제공한다.(만약 이러한 디렉토리들이 없다해도 작동하는데는 문제가 없어야 한다.)


유저에 의해 사용될 프로그램들은 /opt/package/bin에 위치한다.  만약 여기 있는 패키지가 UNIX manual pages를 가지고 있다면, /opt/package/man 에서 찾을 수 있다.  이 곳의 구조는 /usr/share/man 안의 서브구조와 같은 형태를 지녀야 한다.  variable한 패키지 파일들은 /var/opt에 설치 되어야 한다.


호스트 특정 설정 파일들은 /etc/opt에 설치된다.

어떤 사항에서도(파일 시스템의 특정 위치에 위치해야만 작동하는 특수 경우를 제외한 예) /var/lock /dev의 디바이스 락 파일 ) 다른 패키지 파일들은 /opt, /var/opt, 그리고 /etc/opt 외에 존재해서는 안된다.  배포판들은 /opt에 소프트웨어를 설치할 수도 있으나, 로컬 시스템 관리자에 의해 설치된 소프트웨어들을 지우거나 변형시키면 안된다.


/opt를 add-on 소프트웨어 형태로 사용하는 방법은 UNIX 커뮤니티에 이미 널리 알려진 방법이다.  The System V Interface 와 Intel Binary Compatibility Standard에 기반을 둔 The System V 애플리케이션 바이너리 인터페이스는 위에 서술된 형태와 매우 유사한 /opt를 제공한다.


일반적으로 말해서, 패키지를 지원할 모든 데이터들은 /opt/'package'에 위치해야 하며 이는 /etc/opt/'package'와 /var/opt/'package' 및 /opt에 예약 된 디렉터리에 카피되어질 파일들도 포함한다.  설치된 배포판과 설치된 소프트웨어간의 충돌을 피하기 위해 /opt를 이용한 배포판에 대한 약간의 제약 사항은  필요할 수 밖에 없다.  특히 이는 몇몇 바이너리 소프트웨어에서 볼 수 있는 고정된 path 이름에 큰 영향을 받는다.

/opt/'provider' 밑의 디렉터리의 구조는 소프트웨어 패키지에 달려 있으며, 패키지들은 /opt/'provider'/'package'에 설치되고 /opt/package 또한 유사한 구조를 따르는 걸 권장한다.  이 외에 방법 중 유효한 것은 /opt/'provider'/lib 혹은 /opt/'provider'/bin 에 설치 된 파일들을 가진 패키지 지원이 있겠다.


Posted by code cat
리눅스/커널2011. 4. 20. 08:53



다음은 커널 이미지를 만드는 과정이다.


부트로더와 부트스트랩은 다르다. 부트가 첫단계 스테이지라고 생각한다면 부트스트랩은 두번째단계로 리눅스커널 이미지를 올려준다.

'리눅스 > 커널' 카테고리의 다른 글

Linux 3.0 Kernel  (0) 2011.07.31
커널선점  (0) 2011.05.01
커널 스레드  (0) 2011.05.01
시스템콜 (미완성)  (0) 2011.04.18
asmlinkage 에 대한 설명  (0) 2011.04.15
Posted by code cat
리눅스/커널2011. 4. 18. 08:54
시스템콜(종종 시스콜이라 불림)

asmlinkage long sys_getpid (void)
{
return current->tgid
}




프로세스 컨텍스트 내에선 커널은 휴면이 가능하며 선점될 수 있다.

휴면이 가능하다는 것은 인터럽트에 비해 훨씬 편리한 커널 프로그래밍을 가능하게 한다.(인터럽트는 휴면이 불가능 하므로 프로세스 컨텍스트에서 도는 시스콜보다 제한이 많다). 
선점이 가능하다는 것은 지금 테스크 역시 선점 가능하다는 소리이므로 다른 테스크에서 같은 시스콜을 호출 할 수 있기에 시스콜이 재진입 여부를 체크해야 한다.(이것은 SMP에서 고려해야 하는 상황과 같다)

시스콜이 리턴하면 컨트롤은 system_call() 계속되며 결국 유저 프로세스로 돌아간다

시스콜 추가 하는법
1. 시스템콜 테이블 끝에 새로운 엔트리를 추가한다. 지원할려는 아키텍쳐마다 추가해야 하며, 테이블에서의 위치-1이 시스템콜 넘버이다. 
Entry.S

ENTRY(sys_call_table)
.long sys_open
.long sys_read 


....


2. 각 지원되는 아키텍쳐마다 시스콜 넘버를에 정의한다. 

#define __NR_restart_sys_call
#define __NR_exit




3. 시스콜을 커널이미지에 컴파일 한다.(kernel/ 에 관련된 파일에 시스콜을 추가한다. 예)sys.c)

asmlinkage sys_foo (void)
{
...
}



'리눅스 > 커널' 카테고리의 다른 글

Linux 3.0 Kernel  (0) 2011.07.31
커널선점  (0) 2011.05.01
커널 스레드  (0) 2011.05.01
커널 초기화  (0) 2011.04.20
asmlinkage 에 대한 설명  (0) 2011.04.15
Posted by code cat