Linux 3 . stat, link 명령어

2024. 1. 25. 18:34Linux/CentOS7

1. stat

파일이나 디렉토리의 상세정보를 표시해주는 명령어

a.txt 의 상세 정보가 표시된다.

위 사진을 보면 크게

Access

Modify

Change

세가지가 있는데

 

이것을 합쳐 MAC Time이라고 부른다.

M : Modify 내용을 수정한 시간
A : Access 읽기, 수정변경한 시간
C : Change 권한을 변경한 시간

 

 

 

먼저 vi 편집기를 이용해 1.txt를 만들어줬다.

vi 편집기를 이용해 생성하면

엑세스한 시간

파일을 수정한 시간

속성을 변경한 시간

MAC 시간이 모두 똑같이 생성된다.

 

그런데 cat으로 생성한 파일은

엑세스한 시간과

나머지 시간이 다르게 쓰여있다.

 

cat을 열었을때 >access 시간

수정하고 닫았을때 > modify,change 시간

 

이런 방식으로 시간이 변경 된 것이고

stat 명령어를 통해 자세하게 확인할 수 있다.

 

 

 

 

 

 

 

 

 

 

그런데 

ls 명령어에서 표시되는 시간 정보는 어떤 시간이 표시 되는걸까?

stat 명령어를 통해 알아보자

이 시간정보는 MAC중 어떤 정보를 표시하고 있는걸까?

 

cat 명령어로 1.txt를 열람하여 Access 시간이 변경 됐으나

ls -l 로 나타나는 시간정보엔 변함이 없다.

Access는 아닌 것이다.

 

 

 

아직 배운 명령어는 아니지만 권한 변경 명령어를 미리 사용해보겠다.

권한을 변경했음에도 1.txt 의 시간정보는 변하지 않았다.

change도 아닌것이다.

 

 

 

마지막으로 파일의 내용을 변경해보겠다.

vi 편집기로 29분에 접속해 시간차를 두고

31분에 수정을 완료해 보았다.

 

ls 의 시간 정보가 변해있다.

Modify 값인 것이다.

 

이로서 ls 에서 나오던 시간 정보는

파일이 마지막으로 수정된 시간을 나타내고 있는 걸 알 수 있다.

 

 

 

 

 

2. link

link는 링크 파일을 만드는 명령어이다.

링크에는 크게 두가지가 존재한다.

1. Hardlink

2. Symbolic link (softlink) 

 

 

 

Hardlink

완벽하게 동일한 파일을 생성하고, (inode 번호 공유)

 

사용법 : ln (원본) (사본)   < 위치 변경도 가능

 

하드링크엔 단점이 두가지 존재하는데

1. 파티션이 다른 경우엔 설정 불가

2. 볼륨이 다른 경우도 설정 불가

위 단점을 보안한 것이 심볼릭링크이다.

 

 

 

a.txt 파일을 링크로 aaa.txt로 만들었다.

ls -li 로 본 정보에선

inode 번호

생성시간

완전히 같은 파일이 생성되어있다.

 

 

하지만 실제로 완전히 똑같은 데이터가 복사된 것은 아니다. 

이는 inode 번호만 공유 하는것이다.

 

 

이해가 어렵다면 

리눅스 파일 시스템 구조를 알아보자

하드링크로 생성된 aaa.txt는 실제로는 같은 inode 값을

가르켜 a 의 데이터를 가져 오는 것이다.

실제로 같은 폴더를 보고있는 것이다.

 

 

a.txt 의 내용만 수정하고

aaa.txt를 열어보면 똑같이 수정 되어있다.

또한 둘의 시간정보도 같이 바뀌어있다.

 

그런데 a.txt 파일이 삭제되면 어떻게 될까?

 

aaa.txt 를 읽어오는덴 지장이 없다.

또한 inode 번호도 그대로이다.

 

aaa.txt를 하드링크로 a.txt를 만들었다.

다시 똑같은 파일이 만들어졌다.

 

모든 링크 파일이 삭제 되지 않으면

데이터는 그대로 보존 되는 것을 볼 수 있다.

 

 

 

Symbolic link (softlink) 

 

윈도우의 바로가기와 비슷한 원리이다.

파일의 데이터 영역에 데이터가 있는 것이 아니라

참조하는 파일이름의 포인터를 가지고있다.

 

사용법 :  ln -s (원본) (사본)

심볼릭링크로 aaaa.txt를 a.txt의 사본으로 만들었는데

특이하게 aaaa.txt는 자신의 원본을 알려주고있다.

 

 

 

aaa.txt를 수정해도 aaaa.txt에 똑같이 반영된다.

 

 

a.txt를 삭제하면 어떻게 될까?

 

aaaa.txt의 상태가 변하고 a.txt 부분이 깜빡이고 있다.

 

더이상 aaaa.txt는 읽어올 수 없으나 

하드링크된 aaa.txt는 이상없다.

 

이 상태에서 하드링크로 aaa.txt 를 a.txt로 만들어주면

이상없이 다시 동작한다.

 

처음에 심볼릭링크는 이름 포인터를 가지고 있다고 설명했다.

만약 a.txt 파일이 이름만 가지고

다른 inode와 내용을 가진 파일로 변경되면 어떻게 될까?

 

 

cat 명령어로 새로운 파일을 만들어도 제대로 동작한다.

 

 

심볼릭링크는 위의 과정을 거치는 것이다.

 

 

 

심볼릭링크로 파일을 생성할때 조심해야 할 때가 있는데

ln -s (원본) (사본) 

내가 있지 않은 위치에 링크파일을 생성하고 상대경로를 사용할 때이다.

 

현재 디렉토리에 내가 3 에 위치할때

a.txt 를 /1 에 b.txt로 상대경로만을 사용해서

심볼릭링크 파일로 만들어보겠다.

 

현재 위치를 기준으로 

ln -s 4/5/a.txt ../../b.txt 를 입력해보았다.

그런데 b.txt 가 잘못되었다고 출력된다.

 

눈썰미가 좋다면 알았겠지만 현재 b.txt가 가르키는 위치가

현재 자신의 위치 /1/b.txt 에서

상대경로 4/5/a.txt 를 가르키고 있다는 것이다.

 

/1 디렉토리에 4는 존재하지 않기 때문에 오류가 난것이다.

 

올바른 입력방법은

 

ln -s (원본) (사본) 에서

원본 영역을

사본파일의 위치에서 원본파일의 경로를 생각하는 것이다.

 

 

ln -s  (생성될 사본에서의 원본경로 ) (현재 위치에서 사본경로)

위와 같이 생성하면 문제없이 생성된다.

이 같은 경우만 조심하면 된다!!