디렉토리와 파일 사용하기

WooBuntu·2020년 7월 25일
0

리눅스 파일의 종류와 특징

  • 리눅스도 유닉스처럼 시스템과 관련된 정보와 하드웨어 같은 장치를 모두 파일로 관리한다.

  • 파일

    관련 있는 정보들의 집합

  • 파일 시스템

    디렉토리와 파일로 구성된 전체 집합

파일의 종류

일반 파일

  • 데이터를 저장하는데 주로 사용

  • 실행 파일이나 이미지 파일의 경우 데이터가 바이너리 형태로 저장되어 파이너리 파일이라고 한다.

  • 바이너리 파일은 해당 파일의 내용을 확인할 수 있는 특정 응용 프로그램이 있어야 파일의 내용을 확인할 수 있다

  • 반면 텍스트 파일은 파일 내용을 확인하는 명령으로 내용 확인이 가능하며, 문서 편집기를 이용하여 내용을 보거나 편집할 수 있다.

디렉토리

  • 리눅스에서는 디렉토리도 파일로 취급한다.

  • 디렉토리 파일에는 해당 디렉토리에 저장된 파일이나 하위 디렉토리에 대한 정보가 저장된다.

심볼릭 링크

  • 원본 파일을 대신하도록 원본 파일을 다른 파일명으로 지정한 것

  • 윈도우의 바로가기 파일과 유사하다

장치 파일

  • 리눅스에서는 하드디스크나 키보드 같은 각종 장치도 파일로 취급한다.

  • 장치 파일은 리눅스 시스템에 부착된 장치를 관리하기 위한 특수 파일이다.

  • 각종 장치를 관리하기 위해 시스템 관리자는 해당 장치 파일에 접근한다.

  • 대부분의 장치 파일은 /dev 디렉토리 아래에 위치한다.

  • file 파일명

    파일의 종류를 확인하는 명령어

디렉토리 계층 구조

  • 트리 구조

    • 리눅스에서는 파일을 효율적으로 관리하기 위해 데이터를 계층적으로 구성한다.

    • 모든 디렉토리의 출발점은 root 디렉토리(/)이다.

작업 디렉토리(현재 디렉토리)

  • 마침표로 표시한다.
  • pwd 명령어로 위치를 확인할 수 있다.

홈 디렉토리

  • 각 사용자에게 할당된 디렉토리로 처음 사용자 계정을 만들 때 지정된다.
  • ~로 표시한다.
    ex: ~woobuntu

절대 경로명과 상대 경로명

  • 경로명

    • 디렉토리 계층 구조에 있는 특정 파일이나 디렉토리의 위치를 나타내는 것

    • 각 경로를 구분하는 구분자로는 /을 사용

절대 경로명

  • 항상 루트 디렉토리부터 시작
  • 루트 디렉토리부터 시작하여 특정 파일이나 디렉토리의 위치까지 이동하면서 거치게 되는 모든 중간 디렉토리의 이름을 표시
  • 특정 위치를 가리키는 절대 경로명은 항상 동일

상대 경로명

  • 현재 디렉토리를 기준으로 시작
  • / 이외의 문자로 시작

파일과 디렉토리 이름의 규칙

  • 파일과 디렉토리의 이름에는 /를 사용할 수 없다.

  • 알파벳, 숫자, - , _ , 마침표 만 사용한다.

  • 영문은 대문자와 소문자를 구별한다.

  • 마침표로 시작하면 숨김 파일로 간주한다.

디렉토리 사용 명령

현재 디렉토리 확인하기

  • pwd(print working directory)

  • 현재 디렉토리의 절대 경로명을 출력한다.

디렉토리 이동하기

  • 리눅스에서는 다른 사용자의 접근을 막아놓은 디렉토리를 제외하고는 어느 디렉토리든 이동할 수 있다.

  • 파일이나 서브 디렉토리를 생성하는 것은 홈 디렉토리나 권한이 부여된 디렉토리에서만 가능하다.

  • 현재 디렉토리에서 다른 디렉토리로 이동할 때는 cd(change directory)를 이용한다.

  • 목적지 경로명은 절대 경로명이나 상대 경로명 모두 사용 가능하다.

  • 홈 디렉토리로 이동하기 위해서는 다음의 두 가지 방법이 있다.

    • cd ~

    • cd

디렉토리 내용 보기

ls(list)

숨김 파일 확인하기 -a(all) 옵션

파일의 종류 표시하기 -F 옵션

  • / : 디렉토리
  • @ : 심볼릭 링크
  • 별표(*) : 실행파일
  • 아무 표시 없음 : 일반 파일
  • 옵션을 여러 개 연결할 때는 -뒤에 옵션을 나열하면 된다.

지정한 디렉토리의 내용 출력하기

ex: ls -F /tmp

이 경우 해당 디렉토리로 이동하지 않고도 디렉토리의 내용을 확인할 수 있으며, 옵션도 사용 가능하다.

상세한 정보 출력하기 -l(long) 옵션

디렉토리 자체의 정보 확인하기 -d 옵션

  • 현재 위치한 디렉토리 자체의 정보를 확인하려면, 우선 상위 디렉토리로 가서 ls -l로 확인하는 방법이 있다.
  • 그러나 이와 같은 방법으로는 최상위 디렉토리인 루트 디렉토리의 정보는 확인할 수 없다.

파일이 있는지 확인하기

  • ls 명령의 인자로 파일명을 지정하면, 해당 파일의 정보를 출력한다.
  • 파일이 없는 경우 파일이 없다는 메시지를 출력한다.

dir, vdir 명령

도스 명령에 익숙한 사용자를 위해 제공하는 ls와 유사한 명령어

디렉토리 만들기

디렉토리 한 개 만들기

mkdir 경로명

동시에 디렉토리 여러 개 만들기

mkdir 복수의 경로명

중간 디렉토리 자동으로 만들기 -p 옵션

  • mkdir -p 경로명

  • 인자로 지정한 경로명의 중간 단계에 해당하는 디렉토리가 없다면, 중간 단계의 디렉토리까지 포함해서 만들어준다.

디렉토리 삭제하기

  • rmdir

  • rmdir 명령으로 디렉토리를 삭제할 때에는 해당 디렉토리가 비어 있어야 한다.

  • -p옵션을 줄 경우 해당 디렉토리의 부모 디렉토리가 빈 디렉토리일 경우 부모 디렉토리도 삭제한다.

파일 사용 명령

파일 내용 연속 출력하기

  • 파일 내용을 출력하는 명령은 기본적으로 텍스트 파일의 내용을 출력한다

  • 실행 파일과 같은 바이너리 파일의 경우 일반적인 명령으로 내용을 확인할 수 없다.

  • cat 명령은 텍스트 파일의 내용을 화면에 연속적으로 출력한다.

  • -n옵션을 주면 행 번호가 붙어서 출력된다.

화면 단위로 파일 내용 출력하기

  • more 파일명

  • 내용이 많은 파일은 cat 명령어로 출력하면 자동으로 아래로 스크롤되어 내용 확인이 어렵다

  • more 명령어로 확인했을 때 화면을 넘어가는 내용이 있으면 화면 하단에 '--More--(현재 위치/전체 분량)'의 형태로 알려준다.

  • 스페이스바를 누르면 화면이 넘어간다

  • 엔터를 누르면 한 줄씩 스크롤된다.

  • /문자열 을 누르면 해당 문자열을 찾아 이동한다.

    • n키를 누르면 해당 문자열이 또 있는지 찾는다.
  • q로 종료한다.

개선된 화면 단위 파일 내용 출력하기

  • more 명령어는 이미 스크롤되어 지나간 내용을 볼 수 없다.

  • less 명령어는 파일 내용을 위아래로 스크롤할 수 있다.

  • j : 한 줄 아래로

  • k : 한 줄 위로

  • 스페이스바 / ctrl + f(front) : 다음 화면으로

  • ctrl + b(back) : 이전 화면으로

파일 뒷부분 출력하기

  • tail [옵션] 파일명

  • 옵션

    • +행번호

      지정한 행부터 끝까지 출력

    • -숫자

      화면에 출력할 행의 수를 지정(기본값은 10)

    • -f

      • 파일 출력을 종료하지 않고 주기적으로 계속 출력한다.

      • ctrl + c로 빠져나온다

      • 엔진엑스 로그 등의 변화를 관찰하기 좋다

파일 복사하기

  • cp [옵션] (원본 파일/디렉토리) (목적지 파일/디렉토리)

두 인자가 모두 파일인 경우

  • 파일을 다른 파일로 복사

  • 두 번째 인자로 지정한 파일이 존재하지 않는 경우 원본 파일을 복사하여 새로 만든다.

  • 두 번째 인자로 지정한 파일이 존재하는 파일이라면 원본 파일의 내용으로 덮어쓰고 원래 내용은 없어진다.

두 번째 인자가 디렉토리인 경우

  • 첫 번째 인자로 지정한 파일을 두 번째 인자로 지정한 디렉토리 안에 복사한다.

  • 디렉토리는 미리 만들어져 있어야 한다.
    (밑에서 살펴볼 디렉토리의 복사에서는 또 다르다)

  • 파일을 복사하면서 파일명을 원본 파일과 다르게 지정하면 새로운 파일명으로 복사된다.
    (ex : cp file1 directory/file2)

  • 파일을 다른 디렉토리에 복사할 때는 해당 디렉토리에 대해 쓰기 권한이 있어야 한다.
    (없으면 오류 발생)

인자를 여러 개 지정하는 경우

  • cp 명령에서 인자를 3개 이상 지정할 수 있다.

  • 이 경우에 마지막 인자는 반드시 디렉토리여야 한다.

  • 마지막에 지정한 디렉토리 안에 앞서 지정한 인자들이 모두 복사된다.

-i 옵션

  • -i옵션을 사용하면 두 번째 인자로 지정한 파일이 이미 있는 파일인 경우 덮어씌울 것인지 물어본다.

  • y로 대답하면 덮어씌우고, n라고 대답하면 복사하지 않는다.

디렉토리 복사하기

  • 디렉토리를 복사하려면 첫 번째 인자와 두 번째 인자에 모두 디렉토리를 지정하고 -r옵션을 사용하면 된다.
    (앞서 본 것처럼 디렉토리의 복사도 인자를 여러 개 지정할 수 있다)

  • 두 번째 인자로 지정한 목적지 디렉토리가 존재하지 않으면 두 번째 인자의 이름으로 새 디렉토리가 생성되며 안에 첫 번째 인자로 전달한 디렉토리의 모든 내용이 복사된다.
    (앞에서 살펴본 파일 복사의 경우와 다르다. 대체 왜?)

  • 두 번째 인자로 지정한 목적지 디렉토리가 존재하면, 첫 번째 인자로 전달한 디렉토리가 목적지 디렉토리 안에 복사된다.
    (한 계층 내려간다)

파일 이동하고 파일명 바꾸기

  • 파일을 다른 디렉토리로 이동하거나 파일명을 바꿀 때는 mv(move) 명령을 사용한다.

  • 디렉토리를 이동하거나 디렉토리명을 바꿀 때도 mv 명령을 사용한다.

파일명 바꾸기

  • 두 번째 인자로 지정한 파일이 이미 존재하는 파일이면 원본 파일의 내용으로 덮어쓰고 기존의 내용이 삭제된다.

  • 두 번째 인자로 지정한 파일이 존재하지 않는 파일이라면 새 파일이 생성된다.

파일을 다른 디렉토리로 이동하기

  • 두 번째 인자로 디렉토리를 지정하는 경우 원본 파일을 지정한 디렉토리로 이동한다.

  • 파일을 이동하면서 파일 이름을 바꾸려고 할 경우 아래와 같이 할 수 있다.
    (ex : mv file1 directory/새로운 파일 이름)

  • 역시 쓰기 권한이 없는 디렉토리에는 명령이 먹히지 않는다.

여러 파일을 디렉토리로 이동하기

  • cp와 마찬가지이다.

-i옵션

  • 두 번째 인자로 지정한 파일이 이미 있는 파일인 경우 덮어씌울 것인지 물어본다.

디렉토리명 바꾸기

  • 첫 번째 인자와 두 번째 인자 모두 디렉토리로 지정하면 디렉토리가 이동된다.

  • 두 번째 인자가 존재하지 않는 디렉토리라면 디렉토리 이름이 변경된다.

파일 삭제하기

  • rm(remove)

-i 옵션

  • 정말 삭제할 것인지 확인한다.

디렉토리 삭제하기(-r 옵션)

  • rmdir과는 다르게 삭제할 디렉토리가 비어 있지 않아도 삭제할 수 있다.

  • -i옵션과 함께 사용할 수 있다.

    • 이 경우 디렉토리의 하위 내용물 하나 하나에 대해서 삭제할 것인지 묻는다

    • 만약 디렉토리의 하위 내용물을 전부 삭제하지 않았다면 디렉토리 자체는 삭제할 수 없다

파일 링크

  • 하드 링크

    기존 파일에 새로운 파일명을 추가로 생성하는 것

  • 심볼릭 링크

    원본 파일을 가리키는 새로운 파일을 만드는 것(윈도우의 바로가기)

리눅스 파일의 구성

  • 리눅스에서는 파일이 '파일명 + inode + 데이터 블록'으로 구성된다.

  • 파일명

    사용자가 파일에 접근할 때 사용하는 파일의 이름

  • inode

    • 파일에 대한 정보를 가지고 있는 특별한 구조체

    • 외부적으로는 번호로 표시

    • 내부적으로는 파일 상세 정보와 데이터 블록 주소 저장

    • ls -l로 출력되는 정보가 바로 inode에 저장된 파일 상세 정보

    • 파일의 inode 번호는 ls -i 명령으로 확인 가능

    • 파일명이 달라도 inode가 같다면 같은 파일이다.

하드 링크 만들기 : ln 명령

  • 리눅스에서는 파일에 여러 개의 이름을 붙일 수 있는데, 이때 붙이는 파일명을 하드 링크라고 한다.

  • 하드 링크는 같은 파일에 이름만 다르게 붙이는 것이고, 복사는 완전히 독립적인 파일을 만드는 것이다.

  • 사실 rm명령은 정확하게는 하드 링크 값을 하나씩 줄이는 것이다.
    (하드링크의 개수가 0이 되면, inode와 데이터 블록의 데이터가 삭제되는 것)

심볼릭 링크 만들기 : -s 옵션

  • 심볼릭 링크의 inode번호는 원본 파일의 inode번호와 다르다.

  • ls -l로 확인해보면 파일의 종류가 l로 표시되고 파일명도 ->를 사용하여 원본 파일을 가리킨다.

  • 심볼릭 링크와 하드 링크의 차이점

    • 파일의 종류가 l로 표시된다.

    • 하드 링크의 개수가 증가하지 않는다.
      (원본 파일에 이름을 추가하는 것이 아니다)

    • 파일명 뒤에 원본 파일명이 표시된다.

    • inode 번호가 원본 파일과 다르다.
      (원본 파일과 심볼릭 링크 파일은 별개의 파일이다)

    • 하드 링크는 같은 파일 시스템에 있는 파일에만 생성할 수 있는 반면, 심볼릭 링크는 다른 파일 시스템에 있는 파일에도 생성할 수 있다.

    • 하드 링크는 데릭토레이는 생성할 수 없는 반면, 심볼릭 링크는 디렉토리에도 생성할 수 있다.

  • 심볼릭 링크 파일의 크기는 바로 원본 파일 경로의 길이이다.

    • 즉, 심볼릭 링크의 파일 내용은 원본 파일의 경로이다.

    • 하지만, 심볼릭 링크 파일 내용을 출력하면 원본 파일의 경로가 출력되는 것이 아니라 원본 파일의 내용이 출력된다.

  • 심볼릭 링크를 열고 수정하면 원본 파일이 수정된다.

  • 당연하지만, 심볼릭 링크 생성 후 원본 파일을 삭제하면 심볼릭 링크로 원본 파일에 접근할 수 없다.

파일과 관련된 유용한 명령

빈 파일 만들기, 수정 시간 변경하기 : touch

  • 인자로 지정한 파일이 존재하지 않으면 내용이 없는 빈 파일을 생성하고, 파일이 존재하면 현재 시간 또는 옵션에 지정한 시간으로 파일의 관련 시간을 변경한다.

  • 이미 있는 파일에 대해 touch 명령을 옵션 없이 사용하면 파일의 수정 시간이 현재 시간으로 바뀐다.

  • -t옵션을 사용하면 변경할 시간을 지정할 수 있다.
    (다 나열하기 귀찮...)

파일 내용 검색하기 : grep

  • grep은 파일 내에서 특정 문자열을 검색할 때 사용

  • 정규 표현식을 이용하여 복잡한 검색도 가능하다

  • grep [찾고자 하는 문자열] 파일명

  • -n옵션을 이용하면 검색된 행의 번호도 함께 출력된다.

파일 검색하기 : find

  • 리눅스의 디렉토리 계층 구조에서 특정 파일이 어느 디렉토리에 있는지 찾는다.

  • 파일의 생성 일자와 이름, 소유자 등 다양한 조건에 맞는 파일을 찾는다

  • 옵션 너무 많다...

명령의 위치 찾기 : whereis, which

  • whereis나 which 명령은 특정 명령이 있는 위치를 찾아서 절대 경로를 출력한다.

  • whereis

    • 지정한 명령을 고정된 특정 경로에서 검색

    • 환경 변수 $PATH와 $MANPATH에 지정된 디렉토리를 검색하여 파일의 위치를 찾는다.

  • which

    • 에일리어스나 PATH 환경 변수로 지정된 경로에서 파일을 찾는다.

    • 사용자 초기화 파일에 지정된 에일리어스를 먼저 찾아보기 때문에 에일리어스가 지정된 명령의 경우에는 해당 에일리어스가 출력된다.

    • 에일리어스가 없으면 PATH 환경 변수에 지정된 경로를 순서대로 찾아가며 명령어 파일이 있는지 검색한다.

    • 파일을 찾으면 절대 경로를 출력하고 바로 종료한다.
      (최대 하나의 경로만을 출력하며, 이 경로는 우리가 명령을 입력할 때 실행되는 파일이다)

명령어 조합

  • 홈 디렉토리에서 파일명이 data1.cp인 파일을 찾아 temp 디렉토리로 이동한다.

  • find ~ -name data1.cp -exec mv {} temp \;

0개의 댓글