2015. 10. 19. 15:17

lsattr : 파일에 설정되어 있는 속성을 확인하는 명령

charttr : 파일의 속성을 설정하고 제거할 수 있는 명령어


$ lsattr /etc/abc.conf

----i--------e- /etc/abc.conf



사용형식 : chartty [-RV] [-v 설정버전] [+-=설정모드] 대상파일명


[+-=설정모드]

+: 지정한 속성을 부여

-: 부여된 속성을 제거


만약 abc.conf가 있고, 해당conf에 +i속성이 걸려있어 수정할 수 없다면..!

아래 절차를 따라 변경할 수 있다.!

#i 속성을 삭제

charttr -i 파일명

# 파일 수정후...

#i 속성을 첨가

charttr +i 파일명


속성

이 속성이 지정되어 있다면 해당파일의 변경, 
삭제, 이름변경뿐 아니라 파일추가및 링크파일도 만들 수 없게 됩니다
변경추가가 거의 없는 부팅관련 파일들에 설정하면 부팅이 되지않는 문제로 인한 시스템장애를 줄일 수 있습니다
.


참고: https://www.linux.co.kr/home/lecture/?leccode=10664).

Posted by Triany
2015. 6. 4. 15:59

최근에 컴파일 중 발생한 이슈였다.


/user/bin/ld: warning: lA.so.0, needed by lA.so, not found (try using -rpath or -rpath-link)


collect2: ld returned 1 exit status

make: *** [test.out] 오류 1

컴파일러가 친절히 using -rpath or -rpath-link를 사용하라고 안내해 줬지만, 

궁금한 점이 있어 조금 더 찾아봤다.


우선 $LD_LIBRARY_PATH에 lA.so가 들어있는 path를 잡아줬더니 저 문구가 뜨지 않고 정상적으로 컴파일 되었다.


 export LD_LIBRARY_PATH={lA.so가들어있는디렉토리패스}:$LD_LIBRARY_PATH


그 이유를 살펴보니 다음과 같았다.


○ 링커들은 다음과 같은 검색경로들을 사용해서 공유 라이브러리들을 찾는다.

1. -rpath-link 옵션들에 의해 지정된 임의의 디렉터리들

2. -rpath 옵션들에 의해 지정된 임의의 디렉터리들.

3. ELF 시스템에서 -rpath와 -rpath-link 옵션들이 사용되지 않으면 LD_RUN_PATH환경변수를 참조한다.

4. 원시(native)링커의 경우 환경 변수 LD_LIBRARY_PATH의 내용을 참고한다.

5. 디폴트 디렉터리들, 일반적으로 '/lib'와 '/user/lib'.

>> 요구된 공유 라이브러리가 발견되지 않으면 링커는 경고를 발생하고 링크를 계속한다.





※ -rpath와 -rpath-link옵션의 차이

-rpath옵션들로 지정된 디렉터리들은 실행파일안에 포함되고 실행시 사용

-rpath-link 옵션은 단지 링크할 때만 영향을 미친다.


현재 개발하고 있는 프로그램의 경우, 동작시 LD_LIBRARY_PATH에 링크를 export해 사용하므로,

-rpath-link옵션을 추가해 사용해 주었다.



-Wl,-rpath-link,{lA.so가들어있는디렉토리패스}

단 사용할 때 -Wl,-rpath-link 로 사용해 주어야 하는데 그 이유는,

-Wl옵션은 gcc를 거치지 않고 바로 링커에 옵션을 전하려 할 때 사용한다.

 -Wl,option

   Pass option as an option to the linker.  If option contains commas, it is split into

  multiple options at the commas.  

  You can use this syntax to pass an argument to the option.

  For example, -Wl,-Map,output.map passes -Map output.map to the linker.  When using the GNU

  linker, you can also get the same effect with -Wl,-Map=output.map.

출처 : g++ man page




해당 옵션들에 대한 자세한 설명들은 아래와 같다.(참조)


-rpath dir

디렉터리를 실시간 라이브러리 검색 경로에 추가한다. 이것은 ELF 실행 파일을 공유 오브젝트들과 링크할 때 사용된다. 모든 -rpath 매개변수들은 조합되어 실시간 링커에게 전달된다. 그러면 이것은 그들을 사용해서 실시간에 공유 오브젝트들을 찾는다. -rpath 옵션은 또한 링크에서 명시적으로 포함된 공유 오브젝트들에 의해서 필요한 공유 오브젝트들을 찾을 때도 사용된다; -rpath-link 옵션의 설명을 보자. -rpath가 ELF 실행파일을 링크할 때 사용되지 않으면 환경 변수 LD_RUN_PATH의 내용물이, 정의되었다면, 사용될 것이다. -rpath 옵션은 SunOS에서도 사용될 수 있다. 디폴트로 SunOS에서 링커는 주어진 -L 옵션들 중에서 실시간 검색 패치(patch)를 구성할 것이다. -rpath 옵션이 사용되면 실시간 검색 경로는 -rpath 옵션들을 명시적으로 사용하여 구성될 것이고 -L 옵션들을 무시할 것이다. 이것은 NFC 마운트된 파일시스템들로부터 가져온 것일 수 있는, 많은 -L 옵션들을 더하는 gcc를 사용할 때 유용할 수 있다. ELF 링커들과의 호환성을 위해서 파일 이름이 아니라, 디렉터리 이름 뒤에 따라 붙은 -R 옵션이 주어지면 이것은 -rpath 옵션으로 취급된다.

-rpath-link DIR

ELF 또는 SunOS를 사용할 때 한가지 공유 라이브러리는 다른 것을 요구할 수도 있다. 이것은 ld -shared 링크가 입력 파일들 중의 하나로써 공유 라이브러리를 포함할 때 일어난다. 링커가 비-공유, 비-재배치 링크를 수행할 때 그런 종속성을 만나면 자동으로 요구된 공유 라이브러리를 찾으려고 하고 명시적으로 포함되지 않았다면 그것을 링크에 포함시킨다. 그런 경우 -rpath-link 옵션은 검색할 첫번째 디렉터리들을 지정한다. -rpath-link 옵션은 콜론(:)으로 분리된 이름들 리스트를 지정함으로써 또는 여러번 나타남으로써 디렉터리 이름의 순서를 지정할 수도 있다. 

참고자료 : http://korea.gnu.org/manual/release/ld/ld-sjp/ld-ko_2.html




   -rpath=dir

           Add a directory to the runtime library search path.  This is used when linking an ELF

           executable with shared objects.  All -rpath arguments are concatenated and passed to the

           runtime linker, which uses them to locate shared objects at runtime.  The -rpath option is

           also used when locating shared objects which are needed by shared objects explicitly

           included in the link; see the description of the -rpath-link option.  If -rpath is not used

           when linking an ELF executable, the contents of the environment variable "LD_RUN_PATH" will

           be used if it is defined.


           The -rpath option may also be used on SunOS.  By default, on SunOS, the linker will form a

           runtime search patch out of all the -L options it is given.  If a -rpath option is used, the

           runtime search path will be formed exclusively using the -rpath options, ignoring the -L

           options.  This can be useful when using gcc, which adds many -L options which may be on NFS

           mounted file systems.


           For compatibility with other ELF linkers, if the -R option is followed by a directory name,

           rather than a file name, it is treated as the -rpath option.


       -rpath-link=dir

           When using ELF or SunOS, one shared library may require another.  This happens when an "ld

           -shared" link includes a shared library as one of the input files.


           When the linker encounters such a dependency when doing a non-shared, non-relocatable link,

           it will automatically try to locate the required shared library and include it in the link,

           if it is not included explicitly.  In such a case, the -rpath-link option specifies the

           first set of directories to search.  The -rpath-link option may specify a sequence of

           directory names either by specifying a list of names separated by colons, or by appearing

           multiple times.


           This option should be used with caution as it overrides the search path that may have been

           hard compiled into a shared library. In such a case it is possible to use unintentionally a

           different search path than the runtime linker would do.


           The linker uses the following search paths to locate required shared libraries:


           1.  Any directories specified by -rpath-link options.


           2.  Any directories specified by -rpath options.  The difference between -rpath and

               -rpath-link is that directories specified by -rpath options are included in the

               executable and used at runtime, whereas the -rpath-link option is only effective at link

               time. Searching -rpath in this way is only supported by native linkers and cross linkers

               which have been configured with the --with-sysroot option.


           3.  On an ELF system, for native linkers, if the -rpath and -rpath-link options were not

               used, search the contents of the environment variable "LD_RUN_PATH".


           4.  On SunOS, if the -rpath option was not used, search any directories specified using -L

               options.


           5.  For a native linker, the search the contents of the environment variable

               "LD_LIBRARY_PATH".


           6.  For a native ELF linker, the directories in "DT_RUNPATH" or "DT_RPATH" of a shared

               library are searched for shared libraries needed by it. The "DT_RPATH" entries are

               ignored if "DT_RUNPATH" entries exist.


           7.  The default directories, normally /lib and /usr/lib.


           8.  For a native linker on an ELF system, if the file /etc/ld.so.conf exists, the list of

               directories found in that file.


           If the required shared library is not found, the linker will issue a warning and continue

           with the link.

(ld man page)


Posted by Triany
2014. 6. 18. 11:44
v로 블럭지정해서 '>'로 하면 됨.

여러 탭을 들여쓰기 하려면 '(숫자), >'

Posted by Triany
2014. 6. 13. 15:39

[Linux Programming] 스레드만 종료 / pthread_cleanup_push, pthread_cleanup_pop으로 마무리 처리부 등록하기


* 프로세스에서 스레드만 종료시키고자 하는 경우

  1. 스레드 함수에서 return

  2. 스레드에서 pthread_exit 호출

  3.  다른 스레드에서 pthread_cancel 호출



* pthread_cancel

한 스레드가 같은 프로세스에 속한 다른 스레드의 취소를 요청할 수 있다.


#include <pthread.h>

int pthread_cancel(pthread_t tid);   

>> 인자

첫번째 : 스레드 ID

반환값 : 성공시 0, 실패시 오류번호





* 스레드 종료시 특정 함수들이 호출되도록 설정

  - 스레드 마무리 처리부, 

    스레드 마무리 처리부들은 한 스택에 등록되는데, 

    이는 마무리 처리부들이 등록된 순서의 역순을 호출된다는 의미(선입후출)


#include <pthrad.h>

void pthread_cleanup_push(void(*rtn)(void *), void *arg);

첫번째 인수 : rtn으로 지정된 마무리 함수를 스택에 등록

두번째 인수 : 마무리 처리부 함수의 인수


void pthread_cleanup_pop(int execute);

첫번째 인수 : 0이 아닌 값을 호출하면 마무리처리부에서 pop을 수행한다.



마무리 처리부가 호출되는 상황

* 스레드가 pthread_exit를 호출했다.

* 스레드가 취소 요청에 반응했다. (다른 스레드에서 pthread_cancel을 호출한 경우)

* 스레드가 execute인수에 0이 아닌 값을 넣어서 pthread_cleanup_pop 함수를 호출했다.



* 이 두 함수에 제약

** 이들은 매크로로 구현 될 수 있기 때문에 둘의 호출은 반드시 한 스레드의 같은 범위 안에서 짝을 이루어야 한다.) 

** pthread_cleanup_push, pthread_cleanup_pop은 셋트로 써야 한다.

**** 안그러면 컴파일 시 에러가 난다.

**** 짝을 맞춰주기 위해 pop(0) 방식으로 쓰기도 함

void *thr_fn1(void *arg)

{

pthread_cleanup_push( cleanup, NULL);

pthread_cleanup_pop(0);

       pthread_exit((void*)2);

}




예제 프로그램

#include "apue.h"

#include <pthread.h>


void cleanup(void *arg)

{

    printf("cleanup : %s\n", (char *)arg);

}


void * thr_fn1(void *arg)

{

    printf("thread 1 start\n");

    pthread_cleanup_push(cleanup, "thread 1 first handler");

    pthread_cleanup_push(cleanup, "thread 1 second handler");

    printf("thread 1 push complete\n");

    if (arg)

    {

        return ((void *)1);

    }

    pthread_cleanup_pop(0);

    pthread_cleanup_pop(0);

    return ((void *)1);

}


void * thr_fn2(void *arg)

{

    printf("thread 2 start \n");

    pthread_cleanup_push(cleanup, "thread 2 first handler");

    pthread_cleanup_push(cleanup, "thread 2 second handler");

    printf("thread 2 push complete\n");

    if (arg)

    {

        pthread_exit((void *)2);

    }

    pthread_cleanup_pop(0);

    pthread_cleanup_pop(0);

    pthread_exit((void *)2);

}


int main(void)

{

    int err;

    pthread_t tid1, tid2;

    void *tret;


    err = pthread_create(&tid1, NULL, thr_fn1, (void *)1);


    if (err != 0 )

        err_quit("can't create thread 1: %s\n", strerror(err));


    err = pthread_create(&tid2, NULL, thr_fn2, (void *)1);


    if (err != 0 )

        err_quit("cna't create thread 2: %s\n", strerror(err));


    err = pthread_join(tid1, &tret);

    if (err != 0)

        err_quit("can't join with thread 1: %s \n", strerror(err));

    printf("thread 1 exit code %d \n", (int)tret);

    err = pthread_join(tid2, &tret);


    if(err != 0)

        err_quit("can't join with thread 2: %s \n", strerror(err));

    printf("thread 2 exit code %d\n", (int)tret);

    exit(0);


}


$ ./11-5

thread 2 start

thread 1 start

thread 1 push complete

thread 2 push complete

thread 1 exit code 1

cleanup : thread 2 second handler

cleanup : thread 2 first handler

thread 2 exit code 2


return으로 종료된 경우는 스레드 마무리 처리부를 처리하지 않았다.

pthread_exit 로 종료한 경우에 스레드 마무리 처리부를 호출하였다.


출처 : 유닉스고급프로그램 11-5


Posted by Triany
2014. 6. 10. 18:17

pthread.h를 include했는데도 undefined reference to `pthread_create' 에러날때는

-lpthread 를 gcc 옵션에 주어 컴파일 하면 okay!

 

gcc -o 11-2 11-2.c -lpthread

 

Posted by Triany
2014. 6. 9. 18:51

가장 크기가 큰 디렉토리

du -S | sort -n

 

 

Posted by Triany
2014. 5. 27. 21:19

OpenSSL을 이용한 암호화 / 복호화 방법

1.  Encryption(암호화 방법)

$openssl des3 -salt -in 원본파일명 -out 암호화된파일명

ex)

$ head -10 loveisyou.txt

What's your definition of it?

Hows it make you feel?

Tell me what you say that truly makes it real

Kings and Queens, Philosophers have tried so hard to find

Tell me what it means to you dear, nevermind



Love is kind when the world is cold

Love stays strong when the fight gets old

Love's a shoulder to lean on



$ openssl des3 -salt -in loveisyou.txt -out loveisyou.txt.enc

enter des-ede3-cbc encryption password:

Verifying - enter des-ede3-cbc encryption password:


$ head -10 loveisyou.txt.enc

i▒▒%a▒\^▒8▒z.▒▒k▒w▒▒▒gQ~ ▒"▒▒sPr▒r▒w▒-▒my▒:YvxQʝa▒

         ▒$DK▒▒M}z▒▒H{▒s▒▒9Z▒▒▒yB &▒▒M#Tu▒I?=▒-m▒d▒߸=▒q▒▒u7A▒bӘ▒▒▒▒Ba▒NC▒f~▒\uX▒>T4;#▒`_믃'@4▒j%q5▒/540▒▒f▒▒▒M▒ >͹ךyUNSIm▒▒)▒▒xKB!*(A▒`\R▒Lr▒▒g%J;▒▒q▒▒▒*e*▒@▒(▒MR▒▒<֜|l;cJd▒y▒▒▒oM▒▒}▒▒.▒$▒▒?p▒▒▒aK&Bi▒         )Xk▒`▒4▒:U▒▒▒▒_▒Eh▒cl▒J▒3mXT▒▒wII▒▒K▒op^:F)Q~%▒Tv▒▒3+!▒ЀH▒4,>a찚!j#t▒ɩ▒

0▒;P▒▒v▒▒4A⟥(?▒▒f▒5/\_i'▒▒▒(b▒Yxo>▒p▒k(\▒zS͔▒▒9zfr}`2"▒▒


                                                       ▒▒8▒▒▒

                                                             ▒`粉▒▒63▒۔▒:





2. 복호화 방법

$openssl des3 -d -salt -in 암호화된파일명 -out 복호화된출력파일명


$ head -10 loveisyou.txt.enc

i▒▒%a▒\^▒8▒z.▒▒k▒w▒▒▒gQ~ ▒"▒▒sPr▒r▒w▒-▒my▒:YvxQʝa▒

         ▒$DK▒▒M}z▒▒H{▒s▒▒9Z▒▒▒yB &▒▒M#Tu▒I?=▒-m▒d▒߸=▒q▒▒u7A▒bӘ▒▒▒▒Ba▒NC▒f~▒\uX▒>T4;#▒`_믃'@4▒j%q5▒/540▒▒f▒▒▒M▒ >͹ךyUNSIm▒▒)▒▒xKB!*(A▒`\R▒Lr▒▒g%J;▒▒q▒▒▒*e*▒@▒(▒MR▒▒<֜|l;cJd▒y▒▒▒oM▒▒}▒▒.▒$▒▒?p▒▒▒aK&Bi▒         )Xk▒`▒4▒:U▒▒▒▒_▒Eh▒cl▒J▒3mXT▒▒wII▒▒K▒op^:F)Q~%▒Tv▒▒3+!▒ЀH▒4,>a찚!j#t▒ɩ▒

0▒;P▒▒v▒▒4A⟥(?▒▒f▒5/\_i'▒▒▒(b▒Yxo>▒p▒k(\▒zS͔▒▒9zfr}`2"▒▒


                                                       ▒▒8▒▒▒

                                                             ▒`粉▒▒63▒۔▒:



$ openssl des3 -d -salt -in loveisyou.txt.enc -out loveisyou.txt.out
enter des-ede3-cbc decryption password:
$ head -10 loveisyou.txt.out
What's your definition of it?
Hows it make you feel?
Tell me what you say that truly makes it real
Kings and Queens, Philosophers have tried so hard to find
Tell me what it means to you dear, nevermind


Love is kind when the world is cold
Love stays strong when the fight gets old
Love's a shoulder to lean on



Posted by Triany
2014. 5. 27. 16:41

grep 검색할 단어명 -A 앞에서몇줄 -B 뒤에서몇줄

ex ) grep baby -A 3 -B 3

최근에 안 grep명령어의 좋은 기능인데,

 옵션으로 -A 검색할단어명 앞으로 지정라인, -B 검색할단어명 뒤에서 지정라인

이렇게 출력할 수 있는 것이다.



최근 열심히 듣고 있는 Chrisette Michele 의 Love is You 가사로 예제를 들어보았다.

$ cat loveisyou.txt

What's your definition of it?

Hows it make you feel?

Tell me what you say that truly makes it real

Kings and Queens, Philosophers have tried so hard to find

Tell me what it means to you dear, nevermind


Love is kind when the world is cold

Love stays strong when the fight gets old

Love's a shoulder to lean on

Love is you

Love's like the water when the well runs dry

Quench my thirst, keep me alive

*Just need one sip baby*

Love is you

Love is you, Love is you,

Love is you, Love is you


Is it possible, there is a kiss that's so divine

Or am I just a fool, is it all in my mind?

Is there something chemical

A scientist might say

Well love must be a drug

To make me feel this way


Cause Love's my permission to be who I am

No *inhibitions* cause you understand

Freedom to breathe oh baby

Love is you

Love's like a kiss when the sun goes down

Holds me tight when no one's around

Love's what I want to hold on to

Love is you


Love is you,

Love is you, Love is you,

Love is you, Love is you,

Love is you, Love is you,


Love is kind, it makes me stronger

I don't have to look no longer

You're the one I cling to

Love is you

When the chips are down

Love will stick around

I'm so glad I found

Love is you


Much as I've tried to clarify

Love's quite simple, he's just my guy

A perfect definition

Love is you

Love is you, Love is you

Love is you... is you...


검색어 날려보기 ! 두둥

$ grep baby loveisyou.txt -A 3 -B 3

Love is you

Love's like the water when the well runs dry

Quench my thirst, keep me alive

*Just need one sip baby*

Love is you

Love is you, Love is you,

Love is you, Love is you

--


Cause Love's my permission to be who I am

No *inhibitions* cause you understand

Freedom to breathe oh baby

Love is you

Love's like a kiss when the sun goes down

Holds me tight when no one's around


grep baby loveisyou.txt -A 3 -B 3


명령어를 날릴 때 색깔을 표시해 두고 싶다면,

grep baby --color=auto loveisyou.txt -A 3 -B 3

이렇게 검색하면 더 편하게 결과를 볼 수 있다.!(굿굿!)


Posted by Triany
2014. 5. 27. 11:24

:%s/^M$//g

얼마전 스마트폰 메신저 txt파일을 백업받아 vi에서 열어보았더니 ^M이라는 이상한 기호를 발견했다.

웹에서 찾아보니, 개행문자 즉 줄바꿈 문자가 깨진 흔적이라고 한다.! 

주로 같은 파일안에 유닉스개행문자 / 도스 개행문자가 섞여 있을때 발생하는 현상이라고!


위에 결론부터 이야기 해 놓았지만,

vi 환경에서 지우는 방법은  :%s/^M$//g로 치환시키는 것이다.!


이때 주의 할 점은 ^M 이렇게 문자를 입력하는 것이 아니라

^ = Ctrl+V

M = Ctrl + M 이렇게 해서 입력하는 것!! 

이 치환 명령어를 이용하면 ^M 기호를 삭제할 수 있다.



비슷한 현상을 겪는 사람들도 있을 것 같고,

정리해 두면 다음에 보기 편할것 같아서 포스팅 해 둔다.


=> python이나 쉘 스크립트로 ^M을 지우는 방법은 없을까? 찾아봐야겠다.

    => 찾아보았다. 아래 참조!

python 파이썬에서 ^M지우기, 행끝의 캐럿 M지우기


Posted by Triany
2014. 5. 21. 16:58
  • ps -ef : 시스템에서 실행중인 전체 프로세스 확인
  • top : 아무 옵션이 없다면 CPU사용률에 따라 정렬됨
  • top -s : 실행 후 추가 명령어 가능
    • M : 메모리 사용률에 따라 정렬
    • P : CPU사용률에 따라 정렬
    • N : 최근 pid순 정렬
    • T : 누적시간(CTIME) 순 정렬
    • l : load average, uptime 사용정보 on/off
    • m : 메모리 사용량 정보 on/off
    • t : CPU 사용률 정보 on/off
    • c : 사용명령어 / 사용명령어 full on/off --명령어 추적시 용이
  • top -d 2 : 2초간격으로 정보 갱신



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

grep의 좋은 기능, 검색어 앞 뒤 출력!  (0) 2014.05.27
vi에서 ^M 지우기, 행끝의 캐럿 M기호 지우기  (0) 2014.05.27
crontab 설정형식  (0) 2014.05.21
리눅스 압축풀기(tar.gz)  (1) 2014.05.20
쉘스크립트1  (0) 2013.12.03
Posted by Triany