파일과 디렉토리
파일 시스템 탐색
파일 시스템
- 운영체제가 디스크(파티션)상에 파일을 구성하는 방식
 
- 파일과 디렉토리의 집합을 구조적으로 관리하는 체계
 
- 다양한 형식의 파일 시스템이 존재
 
- 리눅스는 전체 파일 시스템을 개의 트리구조로 관리
 
ls
- 파일과 서브 디렉토리 목록을 나열.
- 파일(또는 디렉토리)가 가지는 속성까지 확인할 수 있음.
 
 
ls [options] [names]
ls directory
- 디렉토리에 존재하는 파일과 서브 디렉토리의 정보 출력.
 
 
ls file
 
 
  ➜  UNIX git:(master) ✗ ls
  Lecture                        중간과제
  ➜  UNIX git:(master) ✗ ls -l
  total 0
  drwxr-xr-x   7 jeahasorrowkissed  staff  224 Oct 19 22:06 Lecture
  drwxr-xr-x  11 jeahasorrowkissed  staff  352 Oct 15 17:46 중간과제
  ➜  UNIX git:(master) ✗ ls -l Lecture
  total 80
  -rw-r--r--  1 jeahasorrowkissed  staff   9161 Oct 16 16:47 01_LINUX.md
  -rw-r--r--  1 jeahasorrowkissed  staff   5615 Oct 16 18:06 02_Install_Linux.md
  -rw-r--r--  1 jeahasorrowkissed  staff  14176 Oct 16 19:53 03_Use_Shell.md
  -rw-r--r--  1 jeahasorrowkissed  staff   1473 Oct 19 22:13 04_File_And_Directory.md
  ➜  UNIX git:(master) ✗ ls -l ./Lecture/01_LINUX.md
  -rw-r--r--  1 jeahasorrowkissed  staff  9161 Oct 16 16:47 ./Lecture/01_LINUX.md
옵션
| 짧은 옵션 | 
긴 옵션 | 
설명 | 
| -a | 
--all | 
모든 파일을 보여줌 점(.)으로 시작하는 숨김 파일도 보여줌 | 
| -d | 
--directory | 
디렉토리 자체에 대한 정보를 보여줌 | 
| -F | 
--classify | 
우측에 파일의 종류를 알려주는 문자를 붙임. 실행파일은 *, 디렉토리는 /, 심볼릭 링크는 @ | 
| -l | 
--format=long | 
긴 포맥으로 결과를 보여줌 | 
| -R | 
--recursive | 
재귀적으로 수행되는데 서브 디렉토리의 내용도 나열함 | 
| -S | 
--sort=size | 
파일의 크기 순서로 결과를 보여줌 | 
| -t | 
--sort=time | 
최종 수정 시간 순으로 보여줌 | 
파일의 종류
- 정규 파일
- 데이터를 저장하는 데 주로 사용
 
- 각종 텍스트 파일, 실행 파일, 이미지 파일 등 리눅스에서 사용하는 대부분의 파일
 
- 실행 파일이나 이미지 파일의 경우 바이너리 형태로 저장되어 바이너리 파일이라고 함
 
 
- 디렉토리
- 리눅스에서 디렉토리도 파일로 취급
 
- 해당 디렉토리에 저장된 파일이나 하위 디렉토리에 대한 정보가 저장
 
 
- 심볼릭 링크
- '소프트 링크'라고도 함
 
- 원본 파일에 대한 링크로서 다른 이름으로 파일명을 지정한 것
 
 
- 장치 파일
- 리눅스에서 프린터, CD-ROM, HDD, 키보드 등과 같은 각종 장치를 파일로 취급 함
 
- 블록 디바이스 파일과 문자 디바이스 파일로 구분 됨
 
 
file
파일의 종류를 알려주는 명령
  ➜  UNIX git:(master) ✗ file ./Lecture/01_LINUX.md
  ./Lecture/01_LINUX.md: UTF-8 Unicode text
pwd
절대 경로 방식으로 현재 작업 디렉토리를 알려줌
➜  UNIX git:(master) ✗ pwd
/Users/Jeaha/git/KNOU/3-2/UNIX
cd
작업 디렉토리를 이동
- 디렉토리를 지정하지 않으면 사용자의 홈 디렉토리로 이동함
 
cd [directory] 
➜  UNIX git:(master) ✗ cd Lecture
➜  Lecture git:(master) ✗
파일과 디렉토리 관리
mkdir
- 디렉토리를 만드는 명령
 
mkdir [options] directories 
- 옵션
-p 필요한 경우 상위 디렉토리를 만듦 
-m 디렉토리를 만들면서 접근 권한을 설정 
 
rmdir
- 디렉토리 삭제 명령
- 비어있는 디렉토리만 삭제할 수 있음
 
- 조건없이 디렉토리를 삭제하려면(모든 파일과 하위 폴더를 포함) 
rm -r dir 또는 rm -rf dir을 사용해야 함(위험하다.) 
 
- 옵션
-p 비어있는 디렉토리를 삭제하면서 부모 디렉토리가 비게 되는 경우 사용 
 
cp
- 파일이나 디렉토리를 복사
 
cp [options] file1 file2
cp -i file1 file2 
- 대상 파일이 존재 한다면 덮어쓰기 함.
 
 
cp [options] files directory
- 마지막 인자가 디렉토리인 경우
 
- 여러 파일을 지정된 디렉토리에 같은 이름으로 복사
 
cp file1 file2 dir1 
 
cp -r [options] dir3 dir2
- 디렉토리응 재귀적으로 복사할 때 
-r 옵션 사용 
- 대상 디렉토리가 존재하는 경우, 그 곳에 디렉토리 자체가 복사됨
 
 
mv
- 파일의 이름을 변경하는 명령
 
- 또는 다른 디렉토리로 이동하는 명령
 
mv [options] source target
mv file2 file2 
- 대상 파일이 존재한다면 덮어쓰기가 수행됨
 
mv dir1 dir2 
- 디렉토리의 이름을 변경함
- 대상 디렉토리가 존재한다면 서브디렉토리로 이동됨.
 
 
 
mv [options] files directory
- 마지막 인자가 존재하는 디렉토리인 경우
 
- 여러 파일을 지정된 디렉토리로 이동함
 
mv file1 file2 dir1 
 
rm
- 파일을 삭제
 
rm [options] files
- 파일을 삭제할 때 조심해야 함
 
alias rm='rm -i'를 해두는 것도 좋은 방법임 
 
- 옵션
-r 디렉토리와 하위 를 모두 함께 
-i 삭제 전에 물어봄 
-f 물어보지 않고 무조건 삭제 
 
파일의 접근 권한
- 권한이 없는 사용자의 접근을 막기 위해 접근권한을 설정함
- 사용자 부류에 따라 읽기/쓰기/실행 권한을 각각 설정함
 
 
- 사용자 부류
 
- 권한
- r 읽기
 
- w 쓰기/수정/삭제/이름바꾸기
 
- x 실행
 
 
디렉토리의 접근 권한
- 권한
- r : 디렉토리가 가진 파일과 서브 디렉토리의 목록 보기
 
- w : 파일과 디렉토리를 만들거나 삭제
 
- x : 디렉토리로 이동하거나 디렉토리에서 프로그램 실행 또는 파일의 메타데이터 보기
 
 
- 디렉토리를 자유롭게 사용하려면 읽기/쓰기/실행 권한을 모두 가져야 함
- 적어도 읽기/실행 권한을 가지고 있어야 해당 디렉토리로 이동하거나 해당 디렉토리에서 
ls -l을 실행할 수 있음. 
 
➜  UNIX git:(master) ✗ ls -ld /home ~root
lrwxr-xr-x  1 root  wheel   25 Oct 22 11:07 /home -> /System/Volumes/Data/home
drwxr-x---  7 root  wheel  224 Apr 19  2020 /var/root
chmod
파일의 소유자가 파일의 접근 권한을 변경하는 명령
chmod [options] mode files
-R 옵션을 디렉토리에 적용하면 모든 파일과 서브 디렉토리까지 권한을 변경 
 
- 8진수 모드
- 읽기(r)은 4, 쓰기(w)는 2, 실행(x)는 1
 
- 예: rwxr-xr-x -> 111101101 -> 755
 
chmod -R 755 dir1 
 
- 기호 모드
- 형식은 
[ugoa][+-=][rwx] 
- ugoa는 각각 user, group, other, all을 의미. 생략 하면 all
 
- +-=는 각각 권한의 추가, 제거, 지정을 의미함.
 
chmod u+x file1 
chmod u=rwx,g=rx,o=x file2 
 
umask
- 접근권한의 기본값을 출력하거나 설정하는 명령
 
umask [-S][mask]
- 단순히 umask 또는 umask -S 명령을 실행하면 현재 기본값을 알 수 있음
 
- -S 옵션은 기호모드로 결과를 보여줌
 
umask 002 마스크 값이 라는 것은 -------w-, 즉 기타 사용자에게 쓰기 권한을 부여하지 않겠다는 것. 
- 결국 마스크 값이 002 라는 것은 접근 권한을 주는것.
 
- 파일의 경우 실행 권한은 부여되지 않으며 접근 권한은 664가 됨.
 
 
- 참고로 
touch file 명령을 파일의 접근/수정 시간을 현재 시간으로 변경하며 파일이 존재하지 않으면 파일을 생성함. 
chown
root 사용자가 파일이나 디렉토리 소유자를 변경하는 명령
- 파일 또는 디렉토리는 그것을 생성한 사용자 계정과 그룹이 곧 소유자와 소유 그웁으로 설정됨.
 
chown [options] newowner files 
- newowner에 소유자만 주어지면 소유자를 변경하는것.
소유자:그룹 또는 소유자.그룹 의 형태로 지정할 수 있음.
- 소유자가 생량디면 
:그룹 변경이 없어지는 것이며, 그룹이 생략되면 소유자: 소유자와 같은 그룹으로 정해짐 
 
- -R 옵션을 사용하여 디렉토리에 재귀적으로 적용할 수 있음
 
 
ln
- 파일에 다른 이름으로 연결(link)하는 명령
 
ln [options] 원본파일명 [대상파일명] 
- 기본적으로 하드 링크를 만들며, -s 옵션을 사용하면 심벌릭 링크가 만들어짐
 
- 하드 링크(hard link)
- 하나의 파일에 다른 이름을 부여하는 것
 
- 원본 파일의 링크 카운트가 증가함
 
- 다른 파일 시스템에는 링크할 수 없음
 
 
- 심벌릭 링크
- 윈도우 '바로가기'와 같은 역할의 독립적 파일
 
- 다른 파일 시스템에 링크를 만들 수 있음
 
- 원본을 삭제하면 심벌릭 링크는 의미가 없어짐
 
- 디렉토리의 경우, 심벌릭 링크만 만들 수 있음
 
 
- 하드 링크와 심벌릭 링크의 차이
 
➜  Lecture git:(master) ✗ ll
total 96
-rw-r--r--  1 jeahasorrowkissed  staff   8.9K Oct 16 16:47 01_LINUX.md
-rw-r--r--  1 jeahasorrowkissed  staff   5.5K Oct 16 18:06 02_Install_Linux.md
-rw-r--r--  1 jeahasorrowkissed  staff    14K Oct 16 19:53 03_Use_Shell.md
-rw-r--r--  1 jeahasorrowkissed  staff   9.9K Oct 22 11:41 04_File_And_Directory.md
➜  Lecture git:(master) ✗ ls -l 04_File_And_Directory.md
-rw-r--r--  1 jeahasorrowkissed  staff  10115 Oct 22 11:41 04_File_And_Directory.md
➜  Lecture git:(master) ✗ ln 04_File_And_Directory.md 04.hl
➜  Lecture git:(master) ✗ ln -s 04_File_And_Directory.md 04.sl
➜  Lecture git:(master) ✗ ls -li 04*
37003925 -rw-r--r--  2 jeahasorrowkissed  staff  10115 Oct 22 11:41 04.hl
37110394 lrwxr-xr-x  1 jeahasorrowkissed  staff     24 Oct 22 11:45 04.sl -> 04_File_And_Directory.md
37003925 -rw-r--r--  2 jeahasorrowkissed  staff  10115 Oct 22 11:41 04_File_And_Directory.md
37003925 -rw-r--r-- 2 jeahasorrowkissed staff 10115 Oct 22 11:41 04_File_And_Directory.md
의 2는 링크의 갯수를 의미함.
37110394 lrwxr-xr-x 1 jeahasorrowkissed staff 24 Oct 22 11:45 04.sl -> 04_File_And_Directory.md
의 ->는 대상 파일의 심볼릭 링크임을 의미함.
파일의 내용 확인
more
- 파일의 내용을 한 화면 단위로 출력하는 명령
 
more [options] file
- 한 화면에 모두 보여줄 수 없을 때 
--More--(69%)와 같은 메세지가 나옴 
- space bar를 누르면 다음 화면으로 이동
 
- enter를 누르면 한라인씩 이동
 
- q를 누르면 종료
 
more -20 +10 /etc/services
 
- 한방향으로만 스크롤 가능.
 
 
less
- more 명령의 개선된 버전 양방향 스크롤 가능
 
- 위 또는 아래로 스트롤 가능
- page up, page down, up, down등
 
 
- 그외 내부 명령이 있음
- 라인/화면 단위 이동, 라인/퍼센트로 위치 지정, 검색 등
 
 
head
파일의 맨 앞 부분을 10라인(기본 값) 출력하는 명령
head [options][files]
- 옵션 
-n 숫자 또는 -숫자 를 사용하면 보고싶은 라인 수를 변경할 수 있음 
head -n 5 /etc/passwd 
head -3 /etc/*.conf 
 
tail
파일의 마지막 부분을 10라인(기본값) 출력하는 명령
tail [options] [files]
- head 명령과 같은 옵션을 사용할 수 있으며,
옵션 -n + 숫자를 사용하면 해당 라인부터 출력함 
-f 옵션을 사용하면 변화하는 파일의 내용을 계속 감시함.
tail -f /log/catalina.out 
 
 
cat
하나 또는 여러 파일을 연결(concatenate) 시켜 화면에 출력
cat [options] [files]
- 파일을 지정하지 않으면 표준 입력으로부터 읽음
 
cat > file을 수행하여 텍스트 파일로 만들 수 있음 
- 여러 파일의 내용을 연결시킬 때 사용할 수 있음 (리다이렉션 활용)
 
- 옵션 -n을 사용하면 라인 번호를 붙일 수 있음
 
 
➜  Lecture git:(master) ✗ cat > cat1.txt
asdf
1234
➜  Lecture git:(master) ✗ cat > cat2.txt
cat2 22222
eee222^C
➜  Lecture git:(master) ✗ cat cat2.txt
cat2 22222
➜  Lecture git:(master) ✗ cat cat*.txt > total.txt
➜  Lecture git:(master) ✗ cat total.txt
asdf
1234
cat2 22222
➜  Lecture git:(master) ✗ ll
total 144
-rw-r--r--  1 jeahasorrowkissed  staff   8.9K Oct 16 16:47 01_LINUX.md
-rw-r--r--  1 jeahasorrowkissed  staff   5.5K Oct 16 18:06 02_Install_Linux.md
-rw-r--r--  1 jeahasorrowkissed  staff    14K Oct 16 19:53 03_Use_Shell.md
-rw-r--r--  2 jeahasorrowkissed  staff    13K Oct 22 12:08 04.hl
lrwxr-xr-x  1 jeahasorrowkissed  staff    24B Oct 22 11:45 04.sl -> 04_File_And_Directory.md
-rw-r--r--  2 jeahasorrowkissed  staff    13K Oct 22 12:08 04_File_And_Directory.md
-rw-r--r--  1 jeahasorrowkissed  staff    10B Oct 22 12:09 cat1.txt