[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
- ex)
- 현재 디렉터리의 쓰기 권한이 있어야 실행 가능
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를 누르면 종료
옵션 | 설명 |
---|---|
-num | num개의 행을 단위로 보여준다. |
+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.