Codesigner

[Linux] 리눅스(Linux) 파일 시스템 구조 및 명령어 본문

Linux

[Linux] 리눅스(Linux) 파일 시스템 구조 및 명령어

eunsukimme 2019. 6. 16. 17:30

WindowsOS를 사용하다 보면, 어느 파일이 어디에 있는지 예측할 수 있다. 가령, 인터넷에서 다운로드한 파일들은 다운로드 폴더에, 설치 프로그램을 실행하여 어떤 프로그램을 설치하게 된다면 이는 C드라이브 안의 Program Files폴더 안에 설치될 것이란 걸 알 수 있다. 리눅스(Linux)에서도 이와 유사한 파일 시스템이 존재한다. 리눅스에서는 제일 최상위 디렉터리를 루트(root)라고 하고, 그 밑에 usr, etc, home 등의 여러 가지 목적을 가진 디렉터리들이 존재한다. 이번 포스팅에서는 이러한 디렉터리들이 어떠한 목적으로 사용되고, 이런 파일 시스템 안에서 우리가 활용할 수 있는 리눅스 커맨드들은 어떤 것들이 있는지 알아보도록 하자

 

 

 

파일과 디렉토리

리눅스의 파일 시스템을 간단하게 나타낸 그림은 아래와 같다

<그림 1> 간소히 나타낸 리눅스 파일시스템

 

앞에서 말했다시피 제일 위에 최상위 디렉터리로 루트 디렉토리가 존재하며, 이는 '/' 로 표시한다. 루트 디렉토리를 시작으로 하여 다른 디렉토리들을 절대 경로로 나타낼 수 있다(e.g. /home/cam/book/aaiw). 또한 사용자가 현재 위치하고 있는 디렉토리를 알고있다면, 상대경로로 이를 나타낼 수도 있다

 

위 그림에서 home 디렉터리 밑으로 많은 파일과 폴더들이 존재하는 것을 볼 수 있다. 홈 디렉토리는 리눅스 사용자 각각에게 할당된 디렉토리로, Debian 또는 Ubuntu 등에서는 /home/username 으로 구분되어 제공된다. 사용자 자신의 홈 디렉토리로 이동하는 명령어는 cd 이다. 매개변수가 없는 cd 명령은 자신의 홈 디렉토리로 이동한다. 또한 HOME 환경 변수는 자신의 홈 디렉토리 이름을 값으로 가진다. 그리고 디렉토리 명이 들어갈 자리에 있는 ~ 은 자신의 홈 디렉토리 명으로 대체된다

 

<그림 2> HOME환경변수와 ~ 모두 사용자의 홈 디렉토리 명을 값으로 가진다

 

홈 디렉터리 외에도 여러 목적을 가진 디렉토리들이 존재한다. 이러한 디렉토리 들에는 어떠한 것이 있고, 해당 디렉토리의 목적에 대한 간단한 설명을 나타내면 다음과 같다

 

<그림 3> 리눅스 파일시스템

  • /(루트)

    • 최상위 디렉터리

    • 리눅스의 모든 디렉터리들의 시작점이며, 절대경로로 표기할 때 이 디렉토리를 먼저 표시해야 한다

  • /bin

    • 기본 명령어들이 저장된 디렉토리

    • 루트 사용자와 일반 사용자가 함께 사용할 수 있는 명령어가 존재하며, mv, cp, rm 등이 여기에 속한다

    • 부팅 시스템이 필요로 하는 프로그램들 또한 여기에 속한다

  • /boot

    • 부트로더(Boot Loader)가 존재하는 디렉터리

  • /dev

    • 시스템 디바이스(device) 파일을 저장하고 있는 디렉터리

    • 디스크파일 /dev/sda 등이 존재하는 디렉터리이다

  • /etc

    • 시스템 설정 파일이 존재하는 디렉토리

  • /home

    • 사용자의 홈 디렉토리

    • 새로운 사용자를 추가하면 사용자 이름과 동일한 이름의 디렉터리가 생성된다

  • /lib

    • 커널이 필요로 하는 라이브러리 프로그램이 존재하는 디렉토리

  • /media

    • USB와 같은 탈부착 형태의 장치들이 마운팅 하는 마운트 포인트 디렉터리

  • /sbin

    • 시스템 관리자용 명령어들과 부트 시스템이 필요로 하는 저수준(low-level) 프로그램이 존재하는 디렉터리

  • /tmp

    • 임시 디렉터리

    • 시스템을 사용하는 모든 사용자들이 공동으로 사용하는 디렉터리이다

  • /usr

    • 일반 사용자들이 사용하는 프로그램과 데이터가 존재하는 디렉터리

  • /usr/bin

    • 일반 사용자들이 사용하는 프로그램과 명령어들이 존재하는 디렉터리

  • /usr/lib

    • 일반 사용자들이 사용하는 라이브러리가 존재하는 디렉터리

  • /usr/local

    • MySQL, Apache, PHP(일명 APM) 등의 애플리케이션을 설치할 때 사용되는 디렉터리

 

리눅스 파일 시스템에서는 이외에도 다양한(아주 많은..) 디렉터리들이 존재한다. 처음부터 그러한 디렉터리를 다 외울 필요는 없다. 리눅스를 사용하면서 차근차근 알아갈 수 있으니 위 정도의 기본적인 디렉터리만 알아도 리눅스를 처음 진입하는 데에 수월할 것이다

 

 

 

파일 시스템 명령어

이번 섹션에서는 리눅스 파일 시스템을 다루는 기본적인 명령어들에 대해서 알아보자. 기본적인 명령어들을 표로 나타낸 것은 아래와 같다

 

<그림 4> 리눅스 명령어 1
<그림 5> 리눅스 명령어2

  • ls

    • 현재 디렉터리의 파일 목록을 나열한다

  • cd dir

    • 현재 디렉터리를 "dir" 로 변경한다

  • pwd

    • 현재 디렉터리 경로를 출력한다

  • cp source_file target_file

    • source_file을 target_file로 복사한다

  • cp file1 file2 ... fileN dir

    • 여러 개의 파일을 동시에 dir로 복사한다

  • cp [-r] source_dir target_dir

    • 디렉터리와 그 내용을 한 번에 복사한다

  • mv old_name new_name

    • 파일이나 디렉터리의 이름을 변경한다

  • rm file1 file2 ...

    • 파일들을 삭제한다

  • rm [-i] file

    • 파일을 삭제할 때 사용자에게 확인을 요청한다

  • rm [-r] dir1 dir2 ...

    • 주어진 디렉터리와 그 하부 디렉토리 및 파일을 연속적으로(recursive) 삭제한다

  • mkdir dir

    • 디렉터리를 생성한다

  • rmdir dir

    • 비어있는 디렉터리를 삭제한다

    • 비어있지 않은 경우 rm -r dir을 이용

  • cat file

    • 주어진 파일을 표준 출력으로 출력한다

  • more file

    • 주어진 파일을 페이지 단위로 출력한다

    • 키보드 입력 시 다음 페이지로 이동한다

    • 검색 기능을 제공한다(/ command)

  • less file

    • more과 비슷한 기능을 하는데, 역 방향 이동이 가능하다(? command)

  • head [n] file

    • 파일의 처음 n 라인을 출력한다

  • tail [n] file

    • 파일의 마지막 n 라인을 출력한다

    • tail f file 명령은 처음 10 라인을 보여주고, 새로운 라인이 추가되면 계속 출력한다. 로그를 볼 때 편리하다

  • grep pattern file

    • 주어진 파일에서 주어진 패턴을 포함하는 라인들을 찾아서 출력한다

    • e.g. grep error *.log

  • grep [i] pattern file

    • 대소문자를 구분하지 않는 옵션

  • grep [ri] pattern dir

    • 현재 디렉터리와 그 하위 디렉터리의 모든 파일에 대해서 recursive 하게 검색한다

  • touch file

    • 주어진 이름의 (빈) 파일을 생성한다

 

 

 

단축키

리눅스는 커맨드 창에서 단축키를 활용할 수 있다. 기본적인 커맨드 단축키들은 다음과 같다

 

<그림 6> 리눅스 커맨드 단축키

 

커맨드 창에서 위를 향하는 화살표 방향키 버튼을 누르면 이전에 입력했던 명령을 다시 가져올 수 있다. 탭 키를 누르면 파일 및 디렉터리 이름을 자동완성시켜준다. 같은 이름의 파일들이 2개 이상인 경우 해당 파일들을 나열한다. Ctrl+C 버튼을 누르면 현재 실행 중인 프로세스를 강제로 종료한다. 다른 여러 단축키들에 대한 설명은 표에 잘 나와있으므로 생략하도록 하겠다

 

 

 

Review

지금까지 리눅스에서의 파일 시스템이 어떤 구조를 갖추고 있고, 각 디렉터리에는 어떠한 것들이 있는지 살펴보았다. 또한 리눅스 파일 시스템을 다루는 기본적인 명령어들을 살펴보았고, 터미널에서 사용할 수 있는 몇 가지 단축키들을 살펴보았다. 이번 포스팅에서 많은 것들을 다루었는데 이 명령어들을 직접 실습함으로써 익혀볼 수 있는 시간을 가졌으면 좋겠다. 다음 포스팅에서는 파일 접근 권한을 관리하고 기타 쉘 기능들에 대해서 알아보도록 하자

 

 

Comments