서론
ELITE HACKER Bootcamp 3rd 1주차 수업 공부 내용
aws 우분투 서버 하나 파서 연습
심볼릭링크 개념, 생성, 삭제
심볼릭 링크(Symbolic Link)란?
2024.11.04 - [KnockOn] - [KnockOn] Linux/Ubuntu 운영체제 명령어 -1
이전 글에서도 한 번 언급되었었지만, 심볼릭 링크는 일종의 바로가기 서비스와 비슷한 개념이다.
모든 파일마다 inode라고, 파일들을 구분하기 위한 번호들이 존재하는데, 하드링크 같은 경우에는 inode를 공유하는 똑같은 파일을 하나 생성하는 느낌이었고, 심볼릭 링크 같은 경우에는 바로가기로써, 실제 파일이나 디렉터리의 위치를 가리키고, 이를 통해 원본 파일에 접근할 수 있다.
정리하자면, 파일이나 디렉터리에 대한 참조 포인터 역할을 하는 특별한 파일
원본 글을 참조하기 때문에, 원본 글이 사라진다면? 링크가 끊어져서 더이상 존재의 의미가 없어진다. 그렇기에 심볼릭 링크는 원본 글을 가지고 있다기 보다는, 원본 글의 주소를 가지고 있다. 파일뿐만 아니라 디렉터리도 심볼릭 링크를 만들 수가 있다.
심볼릭 링크 사용법
ln -s [원본] [생성할 곳]
을 이용한다. 이때, 주의해야할 점은, -s 속성을 제거해버리면 하드링크가 생성된다는 것이다.
a.txt라는 파일 만들고나서 심볼릭 링크로 b.txt를 만들고, 하드링크로 c.txt를 만들었다. 그러고 나서
ls -li
로 inode 번호까지 확인해보자.
a.txt의 inodode는 258329번, 그리고 하드링크로 생성한 c.txt의 inode도 똑같이 258392로 일치한다.
근데 심볼릭 링크로 생성한 b.txt의 경우에는 258330으로 inode번호가 다르고 , 뒤쪽에 b.txt -> a.txt 이렇게 a의 하드링크라는 것을 표현하고 있다.
그리고 맨 앞에 기존에는 d만 보았었는데, 심볼릭 링크는 l로 시작하는 것을 알수있다. lrwxrwxrwx
여기서 a.txt를 삭제해보자.
rm a.txt
일단 b.txt이게 빨간색으로 바꼈다. 링크가 끊어졌다는 의미. 그리고 c.txt의 -rw-rw-r-- 뒤에 숫자도 2에서 1로 바뀌었다. 저건 하드 링크수를 의미하는데, a, c는 같은 inode이므로 기존에 2였는데, a가 삭제되면서 1로 줄어든 것이다.
심볼릭 링크를 제거하려면
rm 을 이용해서 심볼릭 링크 파일을 지우는 방법도 있지만, unlink라는 명령어로 지울 수도 있다.
잘 지워진다.
다시, 이번엔 a의 심볼릭 링크인 b를 생성한 후에, a 파일의 위치를 변경시키면
b의 연결은 깨진다.
저 심볼릭 링크 깨진 거 다 지울려면
find ~/ -xtype l -delete
~/는 내 작업디렉터리 경로, -xtype 으로 l (심볼릭링크) 파일들을 찾아서 전부지워라
하면
정확히 깨진 b만 삭제된 것을 알 수 있다.
-xtype l**은 심볼릭 링크를 찾는 데 사용되며, 정상적인 심볼릭 링크와 깨진 심볼릭 링크를 모두 식별할 수 있다.
도전
1. cat을 입력하면 ls가 실행되게 하기
기본적으로 alias를 쓰면 간단하게 해결되긴하겠지만...지금까지 심볼릭 링크를 배웠으니까 그것을 써보자.
ls같은 애들은 저번 글에서 /bin에 위치한다고 하였고, 여기서 cat이라는 파일을 하드링크 생성하여 cat2라는 임의 파일로 만들어 놓은 후에 원본 cat은 삭제시킨다(또는 이름 변경)
그 후에 심볼릭 링크로 ls를 cat이라는 이름으로 만들어놓으면 될 것이다.
cd /bin
sudo ln cat cat2
sudo ln -s ls cat
cat
다시 원상태로 복구시켜야하니까, 복구 시킬때는
sudo unlink cat
sudo ln cat2 cat
rm -rf cat2
로 복구 시켰다.
2. readfile을 입력하면 cat이 실행되게 하기
이번에도 심볼릭 링크 이용하면
readfile #우선 readfile 명령어가 먼저 있는지 확인
sudo ln -s cat readfile
readfile
로 진행하였다.
잘 작동한다.
복구는...굳이 시켜야하나..? 싶긴 하지만 readfile 실행파일만 지워주면 된다.
sudo unlink readfile
3. alias 를 썼다면....?
alias cat='ls'
alias readfile='cat'
unalias cat
unalias readfile
이러면 끝나더라....
'KnockOn' 카테고리의 다른 글
[KnockOn] Linux/Ubuntu 리눅스 권한, 유저, 그룹 (3) | 2024.11.07 |
---|---|
[KnockOn] Linux/Ubuntu 운영체제의 패키지 (0) | 2024.11.07 |
[KnockOn] Linux/Ubuntu 리눅스 디렉터리 구조 (1) | 2024.11.06 |
[KnockOn] Linux/Ubuntu 파일기술자, Redirect (2) | 2024.11.06 |
[KnockOn] Linux/Ubuntu 운영체제 명령어 -2 (0) | 2024.11.05 |