파일 특징
변수와 파일의 차이
<참고>
영구적: 전원이 없어도 지워지지 않는다.
파일 시스템
리눅스는 트리 형태의 계층 구조를 가지고 있음
생소한 파일 종류들은 다시 나올 때 다시 보기
디렉터리
현재 작업 디렉터리(CWD: Current Working Directory)
-> 확인하고 싶으면 $ pwd
홈 디렉터리(home directory)
-> 예: /home/joohyeong/
상대 경로: 쉘이 지금 어디에서 실행하고 있는지(현재 작업 디렉터리가 어디인지)에 따라 달라짐
-> 예: ../cde
-> ..
: 부모 디렉터리
-> .
: 현재 디렉터리
절대 경로: 현재 디렉터리에 상관 없이 절대적인 경로
-> 예: /xyz/abc
디렉터리 | 설명 |
---|---|
/ | 루트 디렉터리, 모든 디렉터리의 최상위 부모 |
/bin | 모든 사용자가 사용할 수 있는 여러가지 실행 파일 위치 사용자에 따라 /usr/bin 위치 가능 |
/sbin | 시스템 관리자 권한으로 실행해야 하는 여러가지 실행 파일 위치 사용자에 따라 /usr/sbin 위치 가능 |
/etc | 여러 가지 설정 파일이 들어가며 주의가 필요 sudo 명렁을 이용하면 수정 가능 |
/lib | 공유 라이브러리 디렉터리 사용자에 따라 /usr/lib 위치 가능 |
/home | 사용자들의 홈 디렉터리 |
/mnt | 일시적으로 파일 시스템에 마운트하는 경우 사용 |
/proc /sys | 시스템 정보를 설정/조회할 수 있는 채널을 만들어 주는 디렉터리 리눅스 개발자는 만질 일이 좀 있음 |
/tmp | 임시 디렉터리 |
/usr | 사용자가 추가한 실행 파일, 라이브러리 등의 소프트웨어 저장 |
/dev | 디바이스 드라이버가 사용하는 디바이스 파일 디렉터리 |
아이노드(inode): 하나의 파일의 메타데이터들이 저장되어 있는 공간
소프트링크(=심볼릭링크, =심링크)
하드링크
https://miro.medium.com/max/628/1*ojVZedoItdtM1OEpl9YatQ.png
이미지로 쉽게 이해하기
$ ls -al
-a
: .으로 시작하는 (숨기고 싶은) 파일도 모두 출력-l
: 좀 더 많은 정보를 출력
빈 파일 만들기
$ touch filename
파일 삭제
$ rm filename
윈도우에서는 파일을 삭제하면 휴지통으로 이동하지만, 리눅스에서 rm 명령어를 하면 완전 삭제해버림
$ mv
는 파일의 파일명(혹은 디렉터리)를 변경함
-> 파일명은 사실 디렉터리까지 내포하고 있음
예시
$ mv test apple
$ mv test /tmp/apple
$ mv test /tmp/
부모 디렉터리 ..
, 현재 디렉터리 .
을 사용하여 상대 경로를 활용할 수도 있음!
현재 디렉터리가 /dir1/dir2
이고, apple 이라는 파일이 있을 때, 이 파일을 /dir1/dir3
로 이동하고 파일명은 pineapple로 변경하기
$ mv apple ../dir3/pineapple
$ rmdir
: 디렉터리 삭제, 삭제하려는 디렉터리 내에 파일이 존재하면 삭제가 불가능함
$ rm -r
: 디렉터리를 삭제하고, 그 안에 있는 파일까지 모두 삭제하기
$ rm -f
: 경고 없이 강제로 삭제하기
일반적으로 $ rm -rf
로 많이 사용 (주의해서 사용하기)
디렉터리명 변경도 $ mv
쓰면 됨
$ ls -i
를 하면 각 파일의 아이노드 번호까지 출력이 가능함
$ ln
: 하드링크 만들기
pinapple 파일에 대한 하드링크로 hello를 만들어보자
$ ls -ali
를 해보면 다음과 같이 나옴
두 파일의 아이노드 번호가 같은 것을 볼 수 있음!
두 파일을 모두 출력해보자
모두 같은 내용이 들어가있는 것을 확인
hello 파일의 내용을 nano 에디터로 수정한 후에 다시 확인해보자
두 파일 모두 수정이 됨!
하드링크의 개념과 연결해서 생각해보기
<참고>
$ stat filename
: 파일 속성 조회, 아이노드 번호와 하드링크 개수 확인 가능
소프트링크(심링크)를 만들 때는 $ ln -s
를 사용하면 됨
하드링크 만들 때에서 -s
만 추가해주면 되는 것
이렇게 표시가 됨
파일 내용을 출력해보면 하드링크처럼 동일하게 나옴
원본 파일인 pineapple을 수정하고 다시 출력하면 둘다 수정되어서 나옴
만약에 원본 파일인 pineapple을 제거하고 $ ls
를 보면 이렇게 빨갛게 나옴
여기서 hello(심링크 파일)를 출력해보면 없는 파일로 나옴
이 상태에서 pineapple을 다시 생성하고 출력하면 다시 연결이 되는 것을 볼 수 있음
<참고>
파일명을 따로 지정하지 않고 경로만 넣으면 동일한 파일명으로 생성하고 연결함
아래 예시 참고
위처럼 절대경로로 지정했으면 심링크 파일을 이동해도 계속 연결되어 있음
상대경로로 지정도 가능한 것 참고!