Post

[LINUX] 파일과 디렉터리

파일 시스템

  • 운영체제가 디스크(파티션) 상에 파일들을 구성하는 방식
  • 파일과 디렉터리의 집합을 구조적으로 관리하는 체계
  • 트리 형태 안에 다수의 디렉터리가 존재하는 계층적 디렉터리 구조
    • 가장 상위의 디렉터리는 루트(/) 디렉터리
  • 리눅스는 전체 파일 시스템을 1개의 트리 구조로 관리
    • 루트 디렉터리가 1개만 있음

파일의 종류

  • 정규 파일
    • 데이터를 저장하는 데 주로 사용
    • 텍스트 파일, 이미지 파일, 실행 파일 등 리눅스에서 사용하는 대부분의 파일
    • 실행 파일이나 이미지 파일의 경우 바이너리 형태로 저장되어 바이너리 파일이라고 함
  • 디렉터리
    • 해당 디렉터리에 저장된 파일이나 하위 디렉터리에 대한 정보가 저장
    • 리눅스에서는 디렉터리도 파일로 취급
  • 심볼릭 링크
    • 절대경로 또는 상대경로를 사용하여 원본 파일을 가리키는 파일
    • ‘소프트 링크’라고도 함
    • 윈도우의 ‘바로가기’와 비슷
  • 장치파일
    • 리눅스에서는 프린터, CD-ROM, 하드디스크, 키보드 등의 각종 장치를 파일로 취급
    • 블록 디바이스와 문자 디바이스 파일로 구분됨

파일 시스템 탐색

ls 명령

  • 파일과 서브 디렉터리 목록을 나열(list)하는 명령
  • ls [options] [names]
    • ls directory: 디렉터리에 존재하는 파일과 서브 디렉터리의 정보를 출력
    • ls file: 해당 파일의 정보를 출력

ls 명령의 옵션

짧은 옵션긴 옵션설명
-a–all모든 파일을 리스트한다. 점(.)으로 시작하는 숨김 파일도 보여준다.
-d–directory디렉터리 자체에 대한 정보를 보여준다.
-F–classify오른쪽에 파일의 종류를 알려주는 문자를 붙여 보여준다.
예를 들어 실행 파일은 *, 디렉터리는 /, 심벌릭 링크는 @를 붙여 보여준다.
-h–human-readable긴 포멧의 출력에서 파일의 크기를 바이트가 아닌 human-readable 포맷으로 출력한다.
-i–inode왼쪽에 inode 번호를 보여준다.
-l–format = long긴 포맷으로 결과를 보여준다.
-r–reverse역순으로 결과를 보여준다.
-R–recursive재귀적으로 수행되는데, 서브디렉터리의 내용도 나열한다.
-S–sort = size파일의 크기 순서로 결과를 보여준다.
-t–sort = time최종 수정시간 순서로 결과를 보여준다.

file 명령

  • 파일의 종류를 알려주는 명령
  • ex) file /dev/sda1

pwd 명령

  • 절대 경로 방식으로 현재 작업 디렉터리를 알려주는 명령
  • print working directory의 약자

cd 명령

  • 작업 디렉터리를 이동하는 명령
  • cd [directory]
  • 디렉터리를 지정하지 않으면 사용자의 홈 디렉터리로 이동함
  • 디렉터리를 지정하는 방법은 절대경로와 상대경로가 있음

디렉터리 표시에 사용되는 특수 기호와 환경변수

기호/환경변수설명
~홈 디렉터리를 의미하는 기호
틸드(~) 다음에 사용자 계정을 붙이면 해당 사용자의 홈 디렉터리를 의미한다.
예를 들어 ~jjpark은 /home/jjpark이 될 것이다.
.현재 작업 디렉터리를 의미하는 기호
..현재 작업 디렉터리의 부모 디렉터리를 의미하는 기호
$HOME홈 디렉터리의 이름을 저장한 환경변수
$PWD현재 작업 디렉터리를 저장한 환경변수
$OLDPWD현재 작업 디렉터리의 이전 작업 디렉터리를 저장한 환경변수

파일과 디렉터리 관리

mkdir 명령

  • 디렉터리를 만드는 명령
  • mkdir [options] directories
    • ex) mkdir dir1 dir2 dir3
  • 현재 디렉터리의 쓰기 권한이 있어야 실행 가능

mkdir 명령의 옵션

옵션설명
-p필요한 경우 생성을 원하는 디렉터리의 상위 디렉터리를 만든다.
-m디렉터리를 만들면서 접근권한을 설정한다.

rmdir 명령

  • 디렉터리를 삭제하는 명령어
  • rmdir [options] directories
  • 비어있는 디렉터리만 삭제할 수 있음
    • 비어있지 않은 디렉터리를 무조건 삭제하려면 rm -r 또는 rm -rf 사용

rmdir 명령의 옵션

옵션설명
-p디렉터리를 삭제하면서 부모 디렉터리가 비게 되는 경우 부모 디렉터리까지 삭제

cp 명령

  • 파일이나 디렉터리를 복사하는 명령
  • cp [options] file1 file2
    • 대상 파일이 존재한다면 덮어쓰기가 수행됨
  • cp [options] files directory
    • 마지막 인자가 존재하는 디렉터리인 경우 파일들을 지정된 디렉터리에 같은 이름으로 복사한다.
  • cp -r [options] directory1 directory2
    • 디렉터리를 재귀적으로 복사할 때 -r 옵션 필요
    • 대상 디렉터리가 존재하는 경우 그 곳에 디렉터리 자체가 복사됨

cp 명령의 옵션

옵션설명
-a소유자, 접근권한, 시간 정보 등 파일의 모든 속성을 그대로 유지하면서 복사
-i대상 파일이 이미 존재하는 경우 덮어쓰기 전에 물어본다. 이 옵션이 사용되지 않으면 무조건 덮어쓰기가 이루어진다.
-r디렉터리를 복사할 때 모든 내용을 재귀적으로 복사한다. 디렉터리를 복사할 때 이 옵션(또는 -a)이 필요하다.
-u대상 파일이 이미 존재하는 경우, 원본 파일이 더 최근 것이어야 복사가 이루어진다.

예시

  • cp file1 file2
    • file1을 file2로 복사한다. file2가 새로 만들어지는데, 만약 file2가 이미 존재하면 덮어쓰기가 발생한다.
  • cp -i file1 file2
    • 위와 같으나 file2가 이미 존재하는 경우 덮어쓰기를 할 것인지 물어본다.
  • cp file1 file2 dir1
    • file1과 file2를 디렉터리 dir1에 복사한다. dir1은 이미 존재해야 한다.
  • cp -r dir1 dir2
    • 디렉터리 dir1과 그것의 모든 내용을 디렉터리 dir2에 복사한다.
    • 만약 dir2가 존재하지 않는다면 생성한 후 dir1과 같은 내용을 포함하도록 만든다.
  • cp dir1/* dir2
    • 디렉터리 dir1에 있는 모든 파일이 디렉터리 dir2로 복사한다. dir2는 이미 존재해야 한다.

mv 명령

  • 파일이나 디렉터리의 이름을 변경하거나 다른 디렉터리로 이동하는 명령
  • mv [options] source target
    • mv file1 file2: 파일의 이름을 변경. 대상 파일이 존재한다면 덮어쓰기가 수행됨
    • mv dir1 dir2: 디렉터리의 이름을 변경. 대상 디렉터리가 존재하면 서브 디렉터리로 이동됨
  • my [options] files directory
    • mv file1 file2 dir1: 마지막 인자가 존재하는 디렉터리인 경우 파일들을 지정된 디렉터리로 이동함

mv 명령의 옵션

옵션설명
-i대상 파일이 이미 존재하는 경우 덮어쓰기 전에 물어본다. 이 옵션이 사용되지 않으면 무조건 덮어쓰기가 이루어진다.
-u대상 파일이 이미 존재하는 경우, 원본 파일이 더 최근 것이어야 이동이 이루어진다.
-v이동이 이루어지면서 알림 메시지를 출력한다.

예시

  • mv file1 file2
    • file1을 file2로 변경한다. 만약 file2가 이미 존재하면 덮어쓰기가 발생한다.
    • 명령 실행 후에 file1은 존재하지 않는다.
  • mv -i file1 file2
    • 위와 같으나 file2가 이미 존재하는 경우 덮어쓰기를 할 것인지 물어본다.
  • mv file1 file2 dir1
    • file1과 file2를 디렉터리 dir1로 이동한다. dir1은 이미 존재해야 한다.
  • mv -r dir1 dir2
    • 디렉터리 dir1과 그것의 모든 내용을 디렉터리 dir2로 이동한다. 즉 dir1은 dir2의 서브 디렉터리가 된다.
    • 만약 dir2가 존재하지 않는다면 dir1의 이름을 dir2로 변경한다.

rm 명령

  • 파일을 삭제하는 명령
    • -r 옵션으로 디렉터리도 재귀적으로 삭제할 수 있다.
  • rm [options] files
  • 리눅스에서 파일을 삭제한 후 복구하는 명령이 없으므로 조심해야 함
  • 삭제하기 전에 확인할 수 있도록 alias rm='rm -i'를 수행하여 에일리어스 설정을 하는 것도 좋은 방법임

mv 명령의 옵션

옵션설명
-i삭제되는 파일마다 삭제하기 전에 물어본다.
-r디렉터리를 재귀적으로 삭제한다. 디렉터리가 가지는 서브 디렉터리까지 모두 삭제한다.
-f물어보지 않고 무조건 삭제한다. 존재하지 않는 파일을 삭제하는 경우에는 무시한다. -i 옵션보다 우선한다.
-v삭제를 수행하면서 알림 메시지를 출력한다.

접근권한

  • 권한이 없는 사용자의 접근을 막기 위해 접근권한을 설정함
  • 사용자 부류: 소유자(u), 그룹(g), 기타(o)
  • 권한: 읽기(r), 쓰기(w), 실행(x)
  • 디렉터리를 자유롭게 사용하려면 읽기/쓰기/실행 권한을 모두 가져야 함
    • 적어도 읽기와 실행 권한을 가지고 있어야, 해당 디렉터리로 이동하거나 ls -l 명령을 수행할 수 있음
접근권한파일디렉터리
읽기(r)파일의 내용 보기디렉터리가 가진 파일과 서브 디렉터리의 목록 보기
쓰기(w)파일의 내용 수정과 삭제 또는 파일 이름 바꾸기파일과 디렉터리를 만들거나 삭제하기
실행(x)파일을 실행하기디렉터리로 이동하거나 디렉터리에서 프로그램을 실행하기 또는 파일의 메타 정보 보기

예시

  • -rw-rw-r--는 접근 권한을 나타낸다.
  • 맨 앞의 -는 정규 파일임을 의미하며 그 뒤의 문자는 3개씩 각각 소유자, 그룹, 그 외 기타에 대한 권한을 나타낸다.
  • rw-는 읽기, 쓰기는 가능하지만 실행 권한이 없음을 의미한다.
  • r--는 읽기는 가능하지만 쓰기와 실행 권한이 없음을 의미한다.

  • 디렉터리의 접근권한을 보려면 -ld 옵션을 사용한다.
  • drwxr-xr-x는 /home 디렉터리의 접근 권한을 나타낸다.
    • 소유자는 읽기, 쓰기, 실행 권한이 있고, 그룹이나 기타 사용자는 읽기, 실행 권한이 있다.
  • drwx------는 /home/jjpark 디렉터리의 접근 권한을 나타낸다.
    • 소유자에게만 읽기, 쓰기, 실행 권한이 있고 그룹이나 기타 사용자는 권한이 없다.

chmod 명령

  • 파일 소유자가 파일의 접근권한을 변경하는 명령
  • chmod [options] mode files
    • -R 옵션을 적용하면 모든 파일과 서브 디렉터리까지 권한을 변경

8진수 모드

  • mode를 8진수로 지정한다.
  • 읽기(r)는 4, 쓰기(w)는 2, 실행(x)는 1로 하여 사용자 부류별로 지정
  • ex) chmod 755 file
    • 7=r+w+x이고 5=r+x이므로 접근권한을 rwxr-xr-x로 변경시키는 것이다.

기호 모드

  • [ugoa][+-=][rwx] 형식
    • ugoa는 각각 user, group, other, all을 의미하며, 생략하면 all
    • +-=는 각각 권한의 추가, 제거, 지정을 의미
  • ex) chmod u+x file
    • file에 대한 현재 소유자의 접근권한에 실행권한을 추가한다.
  • ex) chmod u=rwx,g=rx=,o=x file2
    • chmod 751 file과 같은 의미이다.

umask 명령

  • 파일이나 디렉터리 접근권한의 기본값을 출력하거나 설정하는 명령
  • 보통 /etc/bashrc에 설정되어 있음
  • umask [-S] [mask]
    • -S 옵션을 사용하면 접근권한을 기호로 표시
  • 파일의 경우는 666에서 umask의 값을 빼고, 디렉터리의 경우는 777에서 umask의 값을 빼면 된다.
  • ex) umask 002
    • 파일의 접근권한은 666-002=664(rw-rw-r–), 디렉터리의 접근권한은 777-002=775(rwxrwxr-x)

chown 명령

  • root 사용자가 파일이나 디렉터리의 소유자 또는 소유 그룹을 변경하는 명령
  • 소유자는 파일이나 디렉터리를 생성한 사용자, 소유 그룹은 그 사용자가 속한 그룹으로 기본 설정됨
  • chown [options] newowner files
    • newowner에 소유자만 주어지면 소유자만 변경
    • 소유자:그룹 또는 소유자.그룹 형태로 지정
    • 소유자가 생략되면(:그룹) 소유자는 변경되지 않고 그룹만 변경되며, 그룹이 생략되면(소유자:) 소유자와 같은 그룹으로 정해짐
    • -R 옵션을 사용하여 디렉터리에 적용하면 재귀적으로 적용할 수 있음

ln 명령

  • 파일을 다른 이름으로 연결(link)하는 명령
  • ln [options] 원본파일명 [대상파일명]
    • 기본적으로 하드 링크를 만들며, -s 옵션을 사용하면 심벌릭 링크가 만들어짐
  • 하드 링크
    • 하나의 파일에 다른 이름을 부여하여 하나의 파일을 다른 이름으로도 다룰 수 있게 함
    • 하드 링크를 만들면 원본 파일의 링크 카운트가 증가함
    • 하드 링크를 삭제하면 링크 카운드가 감소한다.
    • 다른 파일 시스템에는 링크할 수 없음
  • 심벌릭 링크
    • 윈도우의 ‘바로가기’와 같은 역할의 독립적 파일
    • 다른 파일 시스템에 심벌링 링크를 만들 수 있음
    • 심벌릭 링크를 삭제하는 것은 링크만 삭제하는 것이다.
    • 원본을 삭제하거나 다른 디렉터리로 이동시키면 심벌링 링크는 의미가 없어짐
  • 디렉터리의 경우는 하드 링크를 만들 수 없고 심벌릭 링크만 만들 수 있다.

파일의 내용 확인

more 명령

  • 파일의 내용을 화면 단위로 출력하는 명령
  • more [options] files
  • 스페이스바를 누르면 다음 화면으로 이동, q를 누르면 종료
옵션설명
-numnum개의 행을 단위로 보여준다.
+num시작할 때 num 행부터 보여준다.

less 명령

  • more 명령의 개선된 버전
  • 이미 스크롤되어 지나간 내용을 거슬러 올라가 확인이 가능
  • 다양한 내부 명령이 있음

head 명령

  • 파일의 맨 앞 부분을 출력하는 명령(기본은 10 라인)
  • head [options] [files]
    • -n 숫자 또는 -숫자를 사용하면 보고 싶은 라인 수를 변경할 수 있음

tail 명령

  • 파일의 마지막 부분을 출력하는 명령(기본은 10 라인)
  • tail [options] [files]
    • -n 숫자 또는 -숫자 옵션을 사용하면 보고 싶은 라인 수를 변경할 수 있음
    • -n +숫자 옵션을 사용하면 해당 라인부터 끝까지 출력함
    • -f 옵션을 사용하면 변화하는 파일의 내용을 계속 감시할 수 있음

cat 명령

  • 하나의 파일 또는 여러 파일을 연결시켜 화면에 출력하는 명령
  • cat [options] [files]
    • -n 옵션을 사용하면 출력 결과에 라인 번호를 붙일 수 있음
  • 여러 파일을 합쳐 하나의 새로운 파일을 만들려면 > 기호를 사용 (리다이렉션 활용)
  • 파일을 지정하지 않으면 표준입력으로부터 읽음
  • ex) cat cat1.txt cat2.txt
    • cat1.txt와 cat2.txt 파일의 내용을 출력한다.
  • ex) cat cat*.txt > total.txt
    • cat으로 시작하는 파일들의 내용을 합쳐 total.txt라는 새로운 파일을 만든다.
  • ex) cat > cat1.txt
    • 파일을 지정하지 않았으므로 입력상태로 변한다. 내용을 입력한 후 엔터키를 누르고 Ctrl+D 키를 누르면 원래 상태로 돌아온다.
    • cat1.txt 파일이 새롭게 만들어지고, 파일이 이미 존재했다면 그 내용은 삭제되므로 주의해야 한다.
This post is licensed under CC BY 4.0 by the author.