[리눅스마스터 1급] 이기적 이론서 5회차 정리 - 파일 시스템 관리

🏁 이기적 이론서 학습 범위

  • PART 01 리눅스 시스템 관리
    • CHAPTER 01 일반 운영 관리 (SECTION 02 파일 시스템 관리)

파일 시스템 관리

☑️ 파일 및 디렉터리 관리

소유권과 허가권

  • 소유권과 허가권 확인하기
    • ls - l , ls -n

        $ ls -l loop.sh
        -rw-r--r-- 1 francis francis 68 Sep 2 21:22 loop.sh
              
        - rw -r-- r-- 1 francis francis 68 Sep 2 21:22 loop.sh
        1  2  3    4                 4
      
      • 파일유형: 일반 파일(1, -), 디렉터리(d) 등을 표시한다.
      • 허가권: 소유자 허가권(2, rw-), 그룹 허가권(3, r—), 다른 사용자 허가권(4, r—)으로 구분하여 설정한다.
        • 읽기, 쓰기, 실행 가능한 지 세분화하여 권한을 설정할 수 있다.
      • 소유권: 사용자 소유권(4, r—), 그룹 소유권을 표시
  • 파일 유형

    파일 유형설명
    -일반 파일
    d디렉터리
    l심볼릭 링크
    b블록 디바이스
    c캐릭터 디바이스
    pFIFO
    s소켓
  • 허가권

    허가권설명
    소유자 허가권파일이나 디렉터리를 소유한 사용자의 허가권
    그룹 허가권파일이나 디렉터리를 소유한 그룹의 허가권 (그룹에 속한 사용자에 대한 허가권)
    다른 사용자 허가권소유자나 그룹에 속하지 않은 사용자의 허가권
    • 읽기, 쓰기, 실행 권한 부여

      허가권파일디렉터리
      읽기 권한(r)파일 내용을 확인 및 복사디렉터리 내 포함된 파일과 디렉터리 확인
      쓰기 권한(w)파일 내용 수정디렉터리 내 파일 등을 수정, 생성, 삭제
      실행 권한(x)실행 가능한 파일을 실행디렉터리 안으로 접근 가능.
  • 소유권

    소유권설명
    사용자 소유권파일이나 디렉터리 소유자
    그룹 소유권파일이나 디렉터리를 소유한 그룹에 속한 사용자의 소유권
  • 허가권 변경하기
    • chmod : 기호나 8진수 숫자를 통해 허가권 변경
    • 기호(symboloic)
      • 읽기(r), 쓰기(w), 실행(x)
      • 권한 추가(+), 삭제(-), 지정(=)
      • 사용자 허가권(u), 그룹 허가권(g), 다른 사용자 허가권(o), 모든 사용자(a)
    • 8진수 숫자(octal number)
      • 읽기(4), 쓰기(2), 실행(1), 권한 부여 X(0)
      • 조합으로 표현 가능 (ex. 읽기 및 쓰기 권한 → 4 + 2 = 6)
      • 8진수 중 4번째 자리는 특수권한, 3번째 자리는 사용자 허가권, 2번째 자리는 그룹 허가권, 1번째 자리는 다른 사용자 허가권 (ex. 755 → 사용자 허가권은 모든 허가권을 갖고, 그룹과 다른 사용자 허가권은 읽기, 실행 권한만 가짐)
    • 형식

        chomod [option] mode file(s)
      
    • 옵션

      옵션의미
      -R, —recursive특정 디렉터리 내의 파일과 디렉터리에 대해 재귀적으로 허가권 변경
      -C, —changes변경된 파일이나 디렉터리에 대한 자세한 정보 출력
      -t, —silent, —quite대부분의 에러 메시지 출력 제한
      —reference모드 대신 파일에 지정한 모드 사용
    • 예제

        # myfile.txt의 사용자는 읽기, 쓰기 권한을 부여하고, 그룹과 다른 사용자는 읽기 권한만 부여
        $ chmod 644 myfile.txt 
              
        # myfiles 디렉터리 이하 모든 파일과 디렉터리에 대해 사용자는 모든 권한을 부여하고, 그룹과 다른 그룹 사용자는 읽기 및 실행 권한만 부여
        $ chmod -R 755 myfiles
              
        # myfile.txt에 대해 사용자에게 읽기 및 쓰기 권한 부여
        $ chmod u=rw myfile.txt
              
        # myscript.sh에 대해 사용자느 모든 권한을 부여하고 그룹과 다른 사용자는 읽기 및 실행 권한 부여
        $ chmod 755 myscript.sh
              
        # file.txt에 대해 모두에게 읽기, 쓰기 권한 부여
        $ chmod a=rw file.txt
      
  • 사용자 및 그룹 소유권 변경하기
    • chown : 오직 루트사용자만 파일이나 디렉터리의 사용자 및 그룹의 소유권 변경 가능

        chown [options] owner[:group] file(s)
      
    • 사용자 및 그룹 소유권은 이름, UID, GID를 의미하는 숫자로 지정 가능하다.
    • 예제

        $ sudo chown myuser myfile.txt # myfile.txt의 사용자 소유자를 myuser로 변경
              
        $ sudo chown myuser myfile1.txt myfile2.txt myfile3.txt # 세 파일의 소유자를 myuser로 변경
              
        # myfile.txt에 대해 사용자는 myuser, 그룹은 mygroup으로 소유자 변경
        $ sudo chown myuser:mygroup myfile.txt 
              
        # myfiles 디렉터리 이하의 모든 파일 및 디렉터리에 대해 사용자는 myuser, 그룹은 mygroup으로 소유자 변경
        $ sudo chown -R myuser:mygroup myfiles 
              
        $ sudo chown :mygroup myfile.txt # myfile.txt에 대해 그룹 소유자만 mygroup으로 변경
              
        # myfile.txt에 대해 사용자 UID가 2000으로 변경, 그룹 GID는 2001로 변경
        $ sudo chown 2000:2001 myfile.txt 
      
  • 그룹 소유권만 변경하기
    • chgrp : 본인이 소유한 파일에 대해 본인이 속한 그룹 내에서 소유권 변경 가능

        chgrp [options] roup file(s)
      
    • 예제

        $ chgrp colors blue.txt # blue.txt에 대해 그룹을 colors로 변경
              
        # color_files 디렉터리 이하 모든 파일과 디렉터리에 대해 그룹을 colors로 변경
        $ chgrp -R colors color_files 
      
  • 기본 허가권 변경하기
    • umask **: 파일이나 디렉터리 생성 시 기본 허가권을 지정

        umask [option] [mask]
      
    • 기본 허가권 값은 파일은 666(rw-rw-rw-), 디렉터리는 777(rwxrwxrwx)
      • ex. 022 → 파일 생성 시 644(rw-r-r—), 디렉터리는 755(rwxr-xr-x)
    • 옵션

      옵션의미
      -Sumask 값을 숫자 대신 문자로 표기
    • 예제

        $ umask # 시스템상의 현재 umask값 확인
              
        $ umask -S # 문자로 확인
              
        $ umask u=rwx,g=rw,o=rx # 문자를 사용하여 umask 설정
      

특수 권한

  • Set-UID 권한 비트 (Set User ID bit)
    • 파일에 Set-UID 비트 설정 시 사용자가 파일을 실행했을 때 파일의 소유자 권한으로 실행된다.
    • 소유자 허가권(g)에 ‘s’를 추가하거나 문자, 숫자 방식으로 설정할 수 있다.
    • 예시

        # 실행 권한이 없는 파일에 Set-UID 비트 설정 시 'S'로 표기
        $ ls -l select.sh
        -rwSrw-r--. 1 francis francis 80 Sep 1 00:22 select.sh
              
        # Set-UID 비트 설정
        $ chmod u+s hello.sh # 소유권 허가권(g)에 's'를 추가
        $ chmod u=srwx.g=r.o=r hello.sh # 문자 방식으로 설정
        $ chmod 4744 hello.sh # 숫자 방식으로 설정 시 가장 앞에 '4'를 붙여준다.
      
  • Set-GID 권한 비트 (Set Group ID bit)
    • 파일에 Set-GID를 지정하면 해당 파일의 그룹으로 실행된다.
    • 디렉터리에 Set-GID를 지정하면 하나의 디렉터리를 여러 사용자가 공동작업할 수 있다.
    • 그룹 허가권(g)에 ‘s’를 추가하거나 문자 또는 숫자 방식으로 설정할 수 있다.
    • 실행 권한이 없는 파일이나 디렉터리에 Set-GID 설정 시 ‘S’로 표기된다.
    • 예시

        $ chmod g+s hello.sh # 그룹허가권(g)에 's'를 추가
              
        $ chmod u=rwx.g=sr.o=r hello.sh # 문자 방식으로 설정
              
        $ chmod 2744 hello.sh # 숫자 방식으로 설정 시 가장 앞에 '2'를 붙여준다.
      
  • 스티키 비트(sticky bit)
    • 디렉터리에만 적용 가능하다.
    • 스티키 비트를 디렉터리에 지정 시 누구나 그 안에 디렉터리나 파일을 생성할 수 있지만, 삭제는 오직 그 파일을 소유한 사용자만 가능하다.
    • 문자 방식인 경우 't'를 사용하여 스티키 비트를 추가하고, 숫자 방식인 경우 '1'을 사용하여 스티키 비트 추가한다.
    • 예시

        # 스티키 비트의 대표적 예시인 /tmp 폴더
        # 모두에게 모든 권한이 있지만 스티키 비트 't'가 설정되어 있다.
        $ ls -ld /tmp/
        drwxrwxrwt. 19 root root 4096 Oct 22 23:!4 /tmp/ 
              
        $ chmod o+t dir1 # 't'를 사용하여 스티키 비트를 추가
              
        $ chmod 1777 dir1 # '1'을 사용하여 스티키 비트 추가
      
  • 파일 링크
    • 리눅스에는 이미 존재하는 파일에 대한 포인터를 갖는 파일 링크 기능을 제공한다.
    • 파일링크에는 하드 링크(Hard link)와 심볼릭 링크(Symbolic link)가 있다.
  • 하드 링크(Hard Link)
    • 동일 파일 시스템 내에서만 하드 링크를 생성할 수 있다.
    • 디렉터리를 링크할 수 있다.
    • 대상 파일과 동일한 아이노드 번호와 허가권을 가진다.
    • 대상 파일의 허가권 변경 시, 하드 링크의 허가권도 변경된다.
    • 대상 파일과 동일한 아이노드를 갖기 때문에 대상 파일을 옮기거나 삭제하더라도 대상 파일을 참조 가능하다.
    • ln 로 하드 링크를 생성한다.

        $ ln source.file hardlink.file
        $ ls -lia *.file # ls -lia 를 사용하여 대상 파일과 하드링크의 아이노드 값을 확인한다.
      
  • 심볼릭 링크(Symbolic link)
    • 심볼릭 링크 생성 시 원본 파일과 대상 파일이 서로 다른 파일 시스템에 위치해도 된다.
    • 디렉터리에 대한 심볼릭 링크를 생성할 수 있다.
    • 심볼릭 링크와 대상 파일은 아이노드 번호와 파일 허가권이 다르다.
    • 대상 파일의 아이노드가 아닌 대상파일의 경로만 참조한다.
    • ln -s 로 심볼릭 링크를 생성한다.

디렉터리 관리

  • pwd
    • 현재 파일 시스템상 어떤 디렉터리에 있는 지 출력한다.
    • type : 현재 사용하고 있는 pwd가 무엇인지 출력한다.

        $ type pwd
        $ type /bin/pwd
      
    • 현재 작업 디렉터리를 확인하려면 옵션 없이 사용한다.

        $ pwd
      
  • cd
    • 작업 디렉터리를 변경한다.
    • / : 루트 디렉터리로 절대 경로라고 부른다.
      • 절대 경로를 통해 디렉터리 변경이 가능하다.
        $ cd /home/francis/Documents
      
    • / 로 시작하지 않으면 현재 디렉터리를 기점으로 경로를 생성한다. (상대경로)
      • 상대 경로를 통해 디렉터리 변경이 가능하다.
        $ cd francis/Documents
      
    • .. : 부모 디렉터리

        $ cd .. 
      
    • . : 현재 디렉터리
      • 명령을 수행해도 현재 디렉터리에서 현재 디렉터리로의 이동이므로 변화가 없다.
        $ cd .
      
    • - : 이전 디렉터리

        $ cd -
      
  • mkdir
    • 파일 시스템상 디렉터리를 생성하는 명령어
    • 형식

        mkdir [option] directory
      
    • 옵션

      옵션설명
      -m, —mode디렉터리 생성 시 설정할 허가권을 지정한다.
      -p, —parents디렉터리 생성 시 상위 디렉터리도 필요하다면 생성한다.
    • 예제

        $ mkdir photos # photos 디렉터리 생성
              
        $ mkdir photos ./albums/photos # albums 디렉터리가 존재하지 않으면 photos 디렉터리와 함께 생성
              
        # photos 디렉터리 생성 시 파일 허가권을 777로 지정
        $ mkdir -m 777 photos 
        OR
        $ mkdir -m u=rwx.g=rwx.o=rwx photos
      
  • rmdir
    • 파일 시스템상 비어있는 디렉터리를 삭제한다.
    • 비어있지 않다면 삭제되지 않고, 디렉터리 내의 다른 빈 디렉터리만 삭제된다.
    • 비어있지 않은 디렉터리를 삭제하려면 rm -r 을 사용한다.
    • 형식

        mkdir [option] directory ...
      
    • 옵션

      옵션설명
      -p- 지정 경로 중 가장 아래 디렉터리부터 상위로 거슬러 올라가며 삭제한다.
      - 디렉터리가 비어있으면 삭제하고 비어있지 않으면 삭제하지 않고 멈춘다.
    • 예제

        $ rmdir mydir1 # mydir1 디렉터리 삭제
              
        $ rmdir mydir1 mydir2 # mydir1, mydir2 둘 다 삭제
              
        $ rmdir -p mydir1/mydir2/mydir3 # 3->2->1 순서대로 디렉터리 제거
      

파일 관리

  • ls
    • 지정한 경로에 존재하는 파일과 디렉터리 리스트를 출력한다.
    • 파일의 크기, 소유자, 수정 시간 등 다양한 정보도 함께 보여준다.
    • 옵션 없이 사용하면 현재 디렉터리에 존재하는 파일 및 디렉터리를 알파벳 순으로 리스트를 출력한다.
    • 형식

        ls [option] file ...
      
    • 예시

        $ ls -l # 현재 경로의 파일과 디렉터리 모두 출력
              
        # 숨겨진 파일을 포함한 모든 파일 출력, 파일 유형을 뜻하는 문자를 붙여준다.
        # 파일 유형인 경우 '*', 디렉터리인 경우'/'로 표시
        $ ls -alF 
              
        $ ls -ld Videos # Videos 디렉터리 자체 정보(내부 파일과 항목)를 보여준다. 
              
        $ ls -ldi Videos # -i 옵션 사용 시 Videos의 아이노드 번호를 추가로 출력한다.
      
  • cp
    • 지정한 파일이나 디렉터리를 복사한다.
    • 파일 복사가 성공한 경우 아무 출력이 없고, 출력 결과는 -v **를 사용해 확인한다.
    • 파일이 이미 존재하는 경우 복사 시 기본적으로 덮어쓰기가 된다.
      • 덮어쓰기를 원하지 않으면 -i 를 사용한다.
    • 형식

        cp [option] source ... destination
      
    • 예제

        # 현재 작업 경로의 resume.doc를 같은 경로에 myresume.doc로 복사
        # 동일 파일이 존재하면 사용자 확인 없이 덮어쓴다.
        $ cp resume.doc myresume.doc
              
        $ cp ~/resume.doc /tmp # 홈 디렉터리의 resume.doc를 /tmp 경로로 복사
              
        # 홈 디렉터리의 Documents 디렉터리의 모든 docx 파일과 scores.xls, readme.txt를 홈 디렉터리의 SendTo 경로로 복사
        $ cp ~Documents/*.docx ~/Documents/scores.xls ~/DOcuments/readme.txt ~/SendTo
              
        # 홈 디렉터리의 Documents의 모든 파일, 디렉터리, 하위 디렉터리까지 모두 복사
        $ cd -R ~/Documents ~/DocumentsBackup
              
        # library-10.so에 대한 심볼릭 링크를 library.so 파일명으로 생성
        $ cp -s library-10.so library.so 
              
        # /home/francis의 모든 파일과 디렉터리의 모든 속성을 유지하면서 /backup 디렉터리에 복사
        $ cp -a /home/francis/* /backup/
      
  • rm
    • 지정한 파일을 삭제한다.
    • -r, -R 명령어 사용시 디렉터리를 삭제한다.
      • 옵션을 사용하지 않으면 디렉터리를 지우지 않는다.
    • 파일 시스템상에서 파일 이름과 실제 데이터와의 링크를 제거하며, 데이터 자체를 지우지 않는다.
    • 형식

        rm [option] file ...
      
    • 옵션

      옵션설명
      -i삭제 전 사용자의 확인을 받는다.
      -f, —force파일이 존재하지 않더라도 무시한다.
      -r, -R, —recursive디렉터리와 그 이하의 파일 및 디렉터리를 모두 삭제한다.
    • 예제

        # 파일에 '-'를 포함하면 파일 이름이 아닌 옵션으로 잘못 해석할 수 있다.
        $ rm -- -dashfile.txt # -- 를 파일 이름 전에 기입하여 삭제
        OR
        $ rm ./-dashfile.txt # '.'을 통해 경로를 지정하거나 절대경로를 사용하여 삭제한다.
              
        $ rm photo.jpg # photo.jpg를 삭제한다.
              
        $ rm -f photo.jpg # photo.jpg가 쓰기 보호된 상태여도 사용자 알림 없이 삭제한다.
              
        $ rm -i * # 현재 경로의 모든 파일을 삭제 시도하며, 사용자 확인을 받는다.
              
        # 홈 디렉터리의 photos 디렉터리의 모든 파일 및 디렉터리, 디렉터리의 모든 내용까지 삭제한다. 쓰기 보호 파일이 있어도 사용자에게 묻지 않고 모두 삭제한다.
        $ rm -rf ~/photos 
      
    • shred
      • rm 은 파일 시스템상 실제 데이터를 지우지는 않는다.
      • 데이터까지 지우고 싶으면 shred 를 사용한다.
      • 추후 데이터를 재생할 수 없도록 다른 데이터로 덮어쓴다.
        $ shred -u file.txt # file.txt를 삭제 후, 데이터를 여러 번 덮음
      
  • mv
    • 지정한 파일이나 디렉터리를 지정한 경로로 이동하거나 이름을 변경한다.
    • 형식

        mv [option] source ... destination
      
    • 옵션

      옵션설명
      -i, —interactive파일의 허가권과 관계없이 존재하는 파일을 덮어쓰기 전에 사용자에게 확인을 받는다.
      -f, —force사용자 확인 없이 해당 파일이 이미 존재해도 덮었느다.
      -b대상 파일이 이미 존재하는 경우 덮어쓰기 전에 백업파일을 만든다. 백업파일의 파일명은 원본 파일명 뒤에 ‘~’가 붙는다.
      -u, —update대상 파일이 최신인 경우 덮어쓰지 않는다.
      -t, —target-directory모든 원본 파일을 지정한 경로로 이동한다.
    • 예제

        # musicbox가 디렉터리라면 music.mp3를 musicbox 안에 복사하고, 파일이라면 music.mp3를 musicbox로 이름을 변경하여 덮었느다. 존재하지 않는 파일이면 이름을 변경한다.
        $ mv music.mp3 musicbox 
              
        # 지정한 3개의 파일을 musicbox 디렉토리로 이동한다.
        $ mv music.mp3 spring.mp3 fall.mp3 musicbox
              
        # -t를 사용해 이동할 대상 디렉터리를 지정한다. 
        # 3개의 파일을 musicbox 디렉터리로 이동한다.
        $ mv -t musicbox music.mp3 spring.mp3 fall.mp3
              
        # 현재 경로의 musicbox 디렉터리를 musics 디렉터리로 이름을 변경한다. 
        $ mv musicbox/ musics/
      
  • touch
    • 파일의 마지막 접근 시간(access time), 수정 시간(modification time), 변경 시간(change time)과 같은 파일스탬프 정보를 수정한다.
    • 파일이 없으면 빈 파일을 생성한다.
    • 형식

        touch [option] filename
      
    • 옵션

      옵션설명
      -aatime만 변경한다.
      -mmtime만 변경한다.
      -t- 현재 시간 대신 지정한 타임스태프를 설정한다.
      - 타임스태프 형식은 [[CC]YY]MMDDhhmm[.ss]이다.
      - 타임스태프를 미래나 과거로 변경하려면 쓰기 권한이 필요하고, 파일 소유자여야 한다.
      -r, —reference- 현재 시간이 아닌 지정한 파일의 타임스태프로 변경한다.
      - 옵션으로 지정한 파일에 대한 쓰기 권한 및 소유자여야 한다.
      -c, —no-create파일을 생성하지 않는다.
    • 예제

        # 파일이 존재하면 atime, mtime, ctime을 현재 시스템 시간으로 변경한다.
        # 파일이 존재하지 않으면 빈 파일을 생성한다.
        $ touch file.txt
              
        # 파일이 존재하는 경우 파일스탬프를 현재 시스템 시간으로 변경한다.
        # 존재하지 않으면 빈 파일을 생성하지 않는다.
        $ touch -c file.txt
              
        # file.txt의 atime만 변경한다.
        $ touch -a file.txt
              
        # file1.txt의 atime 및 mtime으로 file2.txt의 타임스태프 정보를 변경한다.
        $ touch -r file1.txt file2.txt
              
        # file.txt의 mtime을 2021.10.25 17:00으로 변경한다.
        $ touch -m -t 2021101251700 file.txt
      
    • 리눅스에서 관리하는 타임스탬프

      유형설명축약어
      접근시간파일을 읽은 마지막 시간atime
      수정시간파일의 내용이 변경되었던 마지막 시간mtime
      변경시간- 파일 허가권과 같은 상태가 변경되었던 시간
      - atime과 mtime도 파일의 상태가 포함되므로 이들이 변경되면 ctime도 변경됨
      ctime
  • file
    • 파일 유형을 확인한다.
    • 형식

        file [option] filename
      
    • 옵션

      옵션설명
      -b, —brief파일명은 출력하지 않고 파일 유형만 출력한다.
    • 예제

        $ file a.txt
              
        $ file -b a.txt # -b 옵션을 사용하면 파일명이 나오지 안흔ㄴ다. 
      
  • find
    • 파일이나 디렉터리 이름, 생성날짜, 수정날짜, 소유자, 허가권 등 사용자가 지정한 조건에 부합하는 파일 시스템에 존재하는 파일과 디렉터리를 찾는다.
    • 옵션은 너무 많아 생략..
    • 예제

        # 옵션을 사용하지 않거나, 현재경로 '.'를 지정하면 현재 경로의 파일 및 디렉터리, 이하의 모든 파일과 디렉터리를 출력
        $ find
              
        # 현재경로와 /home/francis, /home/chris의 모든 파일과 디렉터리 이하의 모든 내용을 출력
        $ find ./home/francis /home/chris
              
        # 현재 경로에서 확장자가 zip인 모든 파일을 찾는다.
        # -iname 사용 시 대소문자를 구분하지 않는다.
        $ find . -name '*.zip'
              
        # 파일 유형이 파일이고, 파일 이름이 'apple'인 파일을 찾는다.
        $ find . -name 'apple' -type f
              
        # 그룹이 데몬이 파일과 디렉터리를 현재 경로에서 찾는다.
        $ find . -group daemon
              
        # 사용자 소유권이 francis인 파일을 찾는다.
        $ find . -user francis
              
        # 파일 접근 시간이 5일 이상된 파일과 디렉터리를 찾는다.
        # -5로 설정한다면 5일 이내의 파일과 디렉터리를 찾는다.
        $ find . -atime +5
              
        # 현재 경로에서 허가권이 rwxr-xr--인 파일을 찾는다.
        $ find . -perm u=rwx.g=rx.o=r
        OR
        $ find . -perm 754 # 허가권을 숫자로 설정할 수 있다.
              
        # 파일 크기가 5GB 이내의 파일을 찾는다.
        $ find . -size -5G
              
        # 파일 크기가 1GB 이상인 파일을 찾으면 홈 디렉터리의 bigfiles 경로로 이동한다.
        $ find . -size + 1G - exec mv '{}' ~/bigfiles ₩;
              
        # 파일 이름이 '.log'로 끝나는 파일을 찾아 삭제한다.
        $ find . -name '*.log' -print0 | xargs -0 rm -f
              
        # 정규식 표현으로 패턴을 지정한다.
        # 파일 이름이 a, b, c로 시작하는 파일을 찾는다.
        $ find . -name '[abc]*'
              
        # 마지막 변경 시간이 하루에서 이틀사이인 파일을 찾는다.
        $ find . -ctime +1 -ctime -2
      

© 2021. All rights reserved.

yaejinkong의 블로그