CS

[CS] Linux 고급 - 파일

gangmin 2024. 5. 1. 17:15

안녕하세요! 오랜만이네요. 지난번 리눅스 기본 사용법 이후에 더 고급 사용을 위해서 학습했습니다.

첫번째 시리즈로 파일 시스템에 대해서 이야기해보려고 합니다. 모든 OS는 각자의 파일 관리 시스템이 존재하며, 리눅스는 어떻게 구성되고 관리되는지 중점적으로 알아보려고 합니다.

파일이란?

파일의 정의를 찾아보면 관련된 정보들의 집합이라고 합니다. (사실 보면 감이 오지 않죠?) 파일에 대해서 좀 깊게 생각해보면, '인공지능을 위한 DataEngineering' 이라는 'hwp' 파일이 있다고 생각해봅시다. 내부의 내용은 모두 인공지능을 위해 필요한 DataEngineering에 대한 이야기를 하겠죠? 이것은 '인공지능', 'Data', 'Engineering' 과 관련된 정보들이 모여있는 곳이 되는 곳이죠?

파일 in Linux

리눅스에는 저희가 익히 알고 있는 일반 파일만 있는 것은 아닙니다. 디렉터리, 심볼릭 링크, 장치 파일과 같이 다양한 종류가 있습니다. 하나씩 천천히 알아봅시다.

일반 파일

일반 파일은 데이터를 저장하는 데 주로 사용합니다. 텍스트 파일, 실행 파일, 이미지 파일 등 Linux에서 사용하는 대부분의 파일이 포함됩니다. 실행 파일과 이미지 파일은 바이너리 형태로 데이터가 저장되며, 바이너리 파일이라고도 합니다. 텍스트 파일은 문서 편집기를 사용하여 내용을 보고, 수정할 수 있습니다. 하지만, 이미지 파일이나 실행 파일은 특정 응용 프로그램이 필요합니다.

디렉토리

디렉토리는 저희가 많이 알고 있고, 사용하고 있는 폴더입니다. Windows OS에서는 디렉토리는 단순히 폴더로 취급하지만, Linux에서는 디렉토리도 파일로 취급합니다. 디렉터리 파일에는 해당 디렉터리에 저장된 파일이나 하위 디렉터리에 대한 주소 정보를 가지고 있습니다.

링크 및 장치 파일

링크 파일은 원본 파일을 대신하여 다른 이름으로 파일명을 지정한 파일을 의미합니다. 장치 파일은 하드디스크 및 키보드 같은 장치를 나타냅니다. 특이하게 리눅스에서는 다양한 장치들을 파일로 취급하는 것입니다.

디렉터리 구조

리눅스에서는 파일을 효유적으로 관리하기 위해서 디렉터리를 계층 구조인 Tree를 활용합니다. 모든 디렉터리의 출발점은 root 디렉터리입니다. 상위 디렉터리는 .. 으로 표현하고, 루트 디렉터리를 제외하고 모든 디렉터리는 부모 디렉터리를 가지고 있습니다.

경로명

파일 시스템에서 디렉터리 계층 구조에 있는 특정 파일이나 디렉터리 위치를 표시합니다. 경로명에서 각 경로를 구분하는 구분자로 / 를 사용합니다. 경로명에서 가장 앞에 있는 / 는 루트 디렉터리를 의미합니다.

절대 경로

절대 경로는 일반적으로 사용하는 경로로 볼 수 있습니다. 즉, 루트에서부터 시작하여서 필요한 부분까지 표시하는 것을 말합니다. 반드시 / 로 시작하고, 특정 파일이나 특정 위치까지 이동하면서 이름을 추가합니다.

pwd
# /home/ubuntu/script

상대 경로

상대적인 경로를 의미하며, 현재 디렉터리를 기준으로 시작하게 됩니다. 현재 디렉터리를 기준으로 서브 디렉터리로 내려가면 단순히 이름을 작성하면 됩니다. 상위 디렉터리에서 시작하려면 .. 를 시작점에 추가하면 됩니다.

cd ../
pwd
# /home/ubuntu

파일의 속성

파일 링크는 기존에 있는 파일에 새로운 파일명을 붙이는 것입니다. 이런 링크에는 하드 링크와 심벌릭 링크가 존재합니다. 하드 링크는 기존 파일에 새로운 파일명을 추가하여서 생성하는 것을 말합니다. 심벌릭 링크는 원본 파일을 가르키는 새로운 파일을 생성하는 것입니다.

하드 링크

  • 원본 파일과 동일한 inode를 가지며 원본 파일이 삭제되더라도 링크 파일은 여전히 사용할 수 있다.
  • 위치 정보를 가지고 있는 이름을 여러개 생성하는 개념이다.
  • 한 파일이 지워져도 하드에서 해당 위치를 찾아갈 수 있다.
ln test test1

rm test
vi test1

# 원본 파일을 삭제하더라도 링크로 생성된 파일을 사용할 수 있다.

심볼릭 링크

  • 원본 파일 이름을 가리키는 링크로 원본 파일이 삭제되면 사용할 수 없다.
  • 전혀 다른 파일이라도 가리키는 원본 파일 이름이 같으면 계속 사용이 가능하다.
  • 위치 정보를 갖고 있는 파일명을 또 다른 이름으로 가리키는 포인터의 개념이다.
touch test_syb
ln -s test_syb test_syb_cp

vi test_syb_cp

# 원본 파일이 삭제되면 사용할 수 없게된다.

쉘 변수

리눅스를 사용하다 보면 $ 이 붙은 경로들을 종종 확인할 수 있다. 이는 쉘 스크립트 변수이다. 가장 쉬운 예시로 환경 변수와 같인 path를 등록하기 위해서 주로 사용하게 되는 $PATH 와 같은 것들이 있다.

echo $PATH
# /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

접근 권한

파일에 무단으로 접근하는 것을 방지하기 위해서 보호 기능을 제공합니다. 사용자는 자신의 파일과 디렉터리 중에서 다른 사용자가 접근해도 되는 것과 그렇지 않은 것을 구분하여 접근 권한을 제한할 수 있습니다. 접근 제한에는 읽기, 쓰기, 실행이 있습니다. 각각 r, w, x로 표시하며, 숫자로도 표현할 수 있습니다. 편하게 사용할 수 있는 것은 숫자라고 생각합니다. 8비트로 구성되어 있습니다.

각 파일에 권한을 확인하기 위해서는 ls -l 을 통해서 확인할 수 있습니다. drwxrwxr-x 이런 형식으로 출력되게 됩니다. 하나씩 뜯어보면, 첫번째 글자는 파일의 구분입니다. 그 뒤는 3글자씩 끊어서 소유자, 그룹, 기타 사용자에 대한 권한을 표시하게 됩니다. rwx 는 읽기, 쓰기, 실행이 가능하다는 의미로 해석할 수 있습니다. --- 는 어떤 권한도 없다는 것을 의미하게 됩니다.

ls -l

# drwxrwxr-x 3 ubuntu ubuntu  4096 May  1 10:53 LABs
# -rw-rw-r-- 1 ubuntu ubuntu 42266 Apr 30 15:24 hr_info.sql
# drwxrwxr-x 2 ubuntu ubuntu  4096 May  1 10:53 script
# -rw-rw-r-- 1 ubuntu ubuntu     0 May  1 16:56 test1
# -rw-rw-r-- 1 ubuntu ubuntu     8 May  1 17:00 tests
# lrwxrwxrwx 1 ubuntu ubuntu     5 May  1 16:58 tests_ln -> tests

오늘은 리눅스에서 파일을 구성하는 방법과 파일을 관리하는 방법에 대해서 알아보았습니다. 다음 시리즈는 리눅스 프로세스에 대해서 알아보려고 합니다.

'CS' 카테고리의 다른 글

[CS] Linux란?  (0) 2024.04.22
[CS] HTTP는 어떻게 동작할까?  (0) 2023.10.26
[CS] Concurrent Programming  (2) 2023.10.11