본문으로 바로가기

ln - make links between files

category 자기 개발/리눅스 2018. 2. 23. 10:32

ln - make links between files

파일들 사이에 링크를 생성하는 명령어 

옵션이 대분소 소문자를 구분한다 혼동하지 말자. 

-T, --no-target-directory

treat LINK_NAME as a normal file : LINK_NAME 항목을 일반적인 파일로 취급한다. 

-f, --force

remove existing destination files : 기존 목적 파일들을 삭제한다. 

-s, --symbolic

make symbolic links instead of hard links : 하드링크 대신에 심볼릭 링크를 만든다



2018-02-23 사용 상황

모드 버스 라이브러리를 받아서 ARM 용으로 크로스 컴파일 했다. 

라이브러리 테스트 겸 간단한 애플리케이션을 하나 만들어서 시험을 했다. 

시험 중, 어라?? 라이브러리 파일(.so)을 타겟에 넣어 주지도 않았는데 잘 돌아간다. 

찾아 보니 타겟의 파일 시스템에 이미 ARM용 라이브러리가 포함되어 있었다. 

그런데 파일명을 보니 버전이 좀 다르다. 

원래 있던 라이브러리는 5.0.4

새로 크로스 컴파일 한 라이브러리는 5.0.5

추가로 라이브러리 파일명에 붙어 있는 버전의 의미를 잘 모르겠다. 

다운로드 할때는 분명히 3.0.6으로 표기가 되어 있었는데..

라이브러리는 왜 5.0.5냐? 나중에 한번 찾아보자. 

아무튼 새로 컴파일한 5.0.5를 타겟으로 다운로드 했다. 

그러나 아직  libmodbus.so 파일이 5.0.4 파일에 링크되어 있다. 

이 링크를 5.0.5 파일로 바꿔 줘야 한다. 

검색 해 보니 링크 수정시 "ln -Tfs" 옵션을 사용하면 된단다. 

아래와 같이 변경 했다. 

무슨 옵션인지는 알고 넘어가야 하니 위에다가 정리하자. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@localhost lib]# ls -al | grep modbus
lrwxrwxrwx  1 root root      18 Nov 30 17:01 libmodbus.so -> libmodbus.so.5.0.4*
lrwxrwxrwx  1 root root      18 Nov 30 17:01 libmodbus.so.5 -> libmodbus.so.5.0.4*
-rwxr-xr-x  1 root root   27548 Nov 30 17:46 libmodbus.so.5.0.4*
-rw-r--r--  1 root root  102313 Jan 29 05:30 libmodbus.so.5.0.5
[root@localhost lib]#
[root@localhost lib]# ln -Tfs libmodbus.so.5.0.5 libmodbus.so
[root@localhost lib]# ls -al | grep modbus
lrwxrwxrwx  1 root root      18 Jan 29 05:34 libmodbus.so -> libmodbus.so.5.0.5
lrwxrwxrwx  1 root root      18 Nov 30 17:01 libmodbus.so.5 -> libmodbus.so.5.0.4*
-rwxr-xr-x  1 root root   27548 Nov 30 17:46 libmodbus.so.5.0.4*
-rw-r--r--  1 root root  102313 Jan 29 05:30 libmodbus.so.5.0.5
[root@localhost lib]# ln -Tfs libmodbus.so.5.0.5 libmodbus.so.5
[root@localhost lib]# ls -al | grep modbus
lrwxrwxrwx  1 root root      18 Jan 29 05:34 libmodbus.so -> libmodbus.so.5.0.5
lrwxrwxrwx  1 root root      18 Jan 29 05:35 libmodbus.so.5 -> libmodbus.so.5.0.5
-rwxr-xr-x  1 root root   27548 Nov 30 17:46 libmodbus.so.5.0.4*
-rw-r--r--  1 root root  102313 Jan 29 05:30 libmodbus.so.5.0.5
cs

추가로 변경 전 5.0.4 파일에는 마지막에 *이 붙어 있는데 

새로 생성한 5.0.5에는 *이 없다. 

실행 권한이 있는 파일에 *표시가 붙는단다. 

1
2
3
4
+ A slash (/) if the file is a directory or a symbolic link to a directory.
+ An asterisk (*) if the file is executable;
+ An at-sign (@) if the file is a symbolic link to a file;
+ A vertical bar (|) if the file is a fifo.
cs

파일에 권한을 기존 5.0.4와 동일하게 755로 주고 나니 *이 붙었다. 

1
2
3
4
5
6
[root@localhost lib]# chmod libmodbus.so.5.0.5 755
[root@localhost lib]# ls -al | grep modbus
lrwxrwxrwx  1 root root      18 Jan 29 05:34 libmodbus.so -> libmodbus.so.5.0.5*
lrwxrwxrwx  1 root root      18 Jan 29 05:35 libmodbus.so.5 -> libmodbus.so.5.0.5*
-rwxr-xr-x  1 root root   27548 Nov 30 17:46 libmodbus.so.5.0.4*
-rwxr-xr-x  1 root root  102313 Jan 29 05:30 libmodbus.so.5.0.5*
cs








'자기 개발 > 리눅스' 카테고리의 다른 글

linux manual page section  (0) 2018.02.23
Message Queue를 이용한 Thread 간 메시지 전달  (0) 2018.02.21
Message Queue  (0) 2018.02.21
Thread (스레드)  (0) 2018.02.21