Operation System/Linux

[Linux] 디렉토리 구조

검은 까마귀 2024. 2. 16. 15:15

 

2024.02.07 - [Operation System/Linux] - [Linux] wsl2 설치 및 Ubuntu 버전 및 자원확인 명령어

 

[Linux] wsl2 설치 및 Ubuntu 버전 및 자원확인 명령어

뭐 일단 Virtual Box를 설치해서 새로운 우분투를 설치하기 전에 wsl에 대해서 알아보겠다.(가상머신을 새로 올리기는게 이해하기는 쉬울수도 있다.) # WSL(Window Subsystem for Linux) wsl에도 1과 2가 있는데

blaj2938.tistory.com

 

먼저, wsl을 설치했다. 기본으로 설치되는 디렉토리 구조는 똑같다. 그 이유는 리눅스 재단에서 파일 시스템 계층 구조를 표준화 했기 때문이다. 이를 FHS라고 하며 풀어서는 Filesystem Hierachy Standard라고 한다. 리눅스 운영체제의 주 디렉토리들을 정의한다. 

 

해당 웹사이트에 들어가면 설명된 것을 볼 수있다.

https://refspecs.linuxfoundation.org/FHS_3.0/fhs/index.html

 

Filesystem Hierarchy Standard

Filesystem Hierarchy Standard LSB Workgroup, The Linux Foundation Copyright © 2015 The Linux Foundation Copyright © 1994-2004 Daniel Quinlan Copyright © 2001-2004 Paul 'Rusty' Russell Copyright © 2003-2004 Christopher Yeoh All trademarks and copyrights

refspecs.linuxfoundation.org

 

항상 공부할때는 오피셜한 문서로 공부를해야한다. 나 처럼 블로그를 쓰는 사람도 많지만, 가끔 틀린 경우도 있고 일단 대게 오피셜 문서들이 영어로 작성되었기 때문에 의역을 하다보면 조금씩 차이가 있기 때문이다.

# 디렉토리 구조 살펴보기

디렉토리 구조를 먼저 살펴보겠다. 디렉토리는 우리가 윈도우에서 말하는 폴더이다. 대게 디렉토리라는 말을 많이 쓰는데 윈도우 OS는 항상 그들만의 언어가 있다. (그냥 MS 자체가 그런거 같다. Azure도 그렇다.)

 

나는 tree 명령어를 활용해서 Root 디렉토리에 어떤 디렉토리가 있는지 살펴보았다.

$tree -L 1 

.
├── bin -> usr/bin
├── boot
├── dev
├── etc
├── home
├── init
├── lib -> usr/lib
├── lib32 -> usr/lib32
├── lib64 -> usr/lib64
├── libx32 -> usr/libx32
├── lost+found
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin -> usr/sbin
├── snap
├── srv
├── sys
├── tmp
├── usr
└── var

 

wsl기준이라서 표준 파일시스템보다 더 많은 디렉토리가 아마 추가가 되었을것이다. 이 중 자주 접근을 하게되는 디렉토리 먼저 살펴보자

 

  • bin
    • binary의 약자, 자주 사용하지는 않지만 리눅스의 기본 명령어들이 들어가있다. (apt, touch .. 등등)
/bin$ tree -L 1
.
├── NF -> col1
├── [
├── aa-enabled
├── aa-exec
├── aa-features-abi
├── add-apt-repository
├── addpart
├── addr2line -> x86_64-linux-gnu-addr2line
├── apport-bug
├── apport-cli
├── apport-collect -> apport-bug
├── apport-unpack
├── apropos -> whatis
├── apt
...
  • etc
    • 시스템 환견설정 파일이 있는 디렉토리
    • 사용자 정보, 암호, 파일시스템 정보, 네트워크 관련 파일들을 저장
    • ufw(방화벽), vim(텍스트 에디터) 등등
  • var
    • 각종 로그 파일들이 저장
    • 시스템의 로그를 확인하고 어떤 명령어를 사용했는지 확인 할 수있음
    • cat /var/log/apt/history.log ➡️apt로 어떤 패키지를 다운로드 했는지 확인 가능 
Start-Date: 2024-02-15  14:49:38
Commandline: apt install g++
Requested-By: black9769 (1000)
Install: g++-11:amd64 (11.4.0-1ubuntu1~22.04, automatic), g++:amd64 (4:11.2.0-1ubuntu1), libstdc++-11-dev:amd64 (11.4.0-1ubuntu1~22.04, automatic)
End-Date: 2024-02-15  14:49:40

Start-Date: 2024-02-16  14:35:12
Commandline: apt install tree
Requested-By: black9769 (1000)
Install: tree:amd64 (2.0.2-1)
End-Date: 2024-02-16  14:35:13

 

사실 여기까지만 알고 있으면 충분히 정보들에 대해서 찾을 수 있다.

 

그리고 뭐 기본적인 명령어로 사용자가 바라보고있는 현재 디렉토리를 pwd로 확인 할 수 있으며 루트 디렉토리, 사용자 홈디렉토리로 바로 갈 수 있는 명령어도 있다.

$ pwd
사용자가 바라보는 디렉토리

$ cd ~
홈디렉토리 바로 이동

$ cd /
루트 디렉토리

$ cd ..
이전 디렉토리

 

뭐 어렵지 않다. 여기 까지 리눅스의 기본 파일 디렉토리 구조와 사용자가 디렉토리를 어떻게 이동하는지에 대해서 살펴 보았다.

그렇다면 디렉토리및 파일 이동, 삭제, 추가는 어떻게 해야할까?

# 디렉토리 & 파일 이동(수정),삭제,추가

먼저 홈에 디렉토리를 먼저 만들어보겠다. 이름은 편하게 before, after로 하겠다.

$ mkdir before after

 

이렇게 공백을 주고 작성을 하면 두개가 한번에 생긴다. 어러개를 만들고 싶을땐 공백을 주면 된다.

 

이제 만들었으니 before 디렉토리 안에다가 파일을 하나 만들어준다.

$ pwd
/home/사용자 명

$ touch ~/before/hello.txt

$ ls ~/before/
hello.txt

 

나는 이렇게 다른 폴더를 바라보고 있어도 경로 설정을 통해서 before 폴더에 hello.txt를 생성할 수 있다.

 

이제 그러면 after로 옮겨보겠다.

$ mv ~/before/hello.txt ~/after/

$ ls ~/before/

$ ls ~/after/
hello.txt

 

mv 키워드를 활용해  before ➡️ after 디렉토리로 파일을 옮겼다. 

 

자 그러면 파일 이름을 수정해보겠다.

$ mv hello.txt hello_word.txt

$ ls -l 
Feb 16 14:57 hello_word.txt

mv 키워드를 활용해 파일 이름을 수정할 수 있었다.

 

여기까지는 하나도 안어렵다.똑같다. 디렉토리나, 파일이나 수정하는 방법은 하지만 생성은 조금 다르다.

 

디렉토리 ➡️ mkdir

파일 ➡️ touch, vim, vi 등등

 

그리고 이제 다 만들었으니 삭제를 해보겠다.

$ find before/
before/

$ rm -d before/
$ find before/
find: ‘before/’: No such file or directory

 

rm이라는 키워드로 옵션에 -d를 주고 디렉토리를 삭제했다. 꽤나 직관적이다.

hello_world.txt를 삭제해보겠다. 옵션  -d를 제외하고 삭제해주면된다.

$ rm after/hello_word.txt

 

여기서 위에 작성한 경로랑 내가 작성한 경로랑 다른 점이 있다. 위쪽에서 ~(홈디렉토리)부터 풀로 경로를 따왔다면, 현재는 before after만 따왔다. 그 이유는 내가 지금 ~(홈디렉토리)를 바라보고 있기 때문이다.


 

뭐 그렇게 어려운 내용도 아니었고 키워드들이 mv(move) -d(디렉토리) rm(remove) 등등 꽤나 직관적인 명령어들이 많아서 사용하는데 큰 어려움은 없었다.

 

결국 시간이 지나면 shell script를 잘 작성해야하기 때문에 이런 기본기가 필요하다고 생각한다. 리눅스의 가장 쉬운부분부터 알아보았으니 리눅스의 가장 기본인 사용자 관리에 대해서 다음에 포스팅을 진행하겠다.

 

 

 

반응형