Skip to content

kenzz55/linux-system-programming

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 

Repository files navigation

1. ssu_cleanup

ssu_cleanup 프로그램은 주어진 디렉토리 내 파일을 다양한 기준에 따라 정리하는 도구입니다. 주요 기능은 다음과 같습니다:

주요 기능

  • 디렉토리 구조 트리 출력 (tree)

    • 지정 경로의 디렉토리 및 파일을 트리 형태로 시각화
    • 옵션
      • -s : 각 파일 크기 출력
      • -p : 파일 및 디렉토리 권한 정보 출력
      • -sp: 크기와 권한 정보를 동시에 출력
    • 예외 처리
      • 경로 미존재 또는 디렉토리가 아닐 경우 오류 메시지 출력
      • 홈 디렉토리 밖 접근 시 보안 예외 처리- 홈 디렉토리 밖 접근 시 보안 예외 처리
  • 파일 정리 (arrange)

    • 확장자별로 분류하여 <원본경로>_arranged 또는 지정한 출력 디렉토리에 복사
    • 옵션
      • -d <output_path> : 결과 저장 디렉토리 지정
      • -t <seconds> : 지정 시간(초) 이전에 수정된 파일만 정리
      • -x <path,...> : 특정 하위 디렉토리 제외
      • -e <ext,...> : 특정 확장자만 선택 정리
    • 중복 파일 처리
      • 동일 이름·확장자 파일 발견 시 사용자에게 처리 방식 제시 (select, diff, vi, skip)

      • fork+execvp를 통한 외부 프로그램(diff, vi) 실행 지원

      • 사용 예시

$ make
$ ./ssu_cleanup

# 트리 출력
$ prompt> tree <DIR_PATH> [OPTION]

# 파일 정리
$ prompt> arrange <DIR_PATH> [OPTION]

2. ssu_cleanupd

ssu_cleanupd는 사용자가 지정한 디렉토리를 주기적으로 모니터링하여 새로 생성되거나 변경된 파일들을 자동으로 정리하는 리눅스 기반의 데몬 프로세스 프로그램입니다. 지정한 디렉토리 내의 파일들을 확장자별로 분류하여, 사용자 설정에 따라 최신 파일, 오래된 파일 또는 중복된 파일에 대해 각각 다른 방식(최신/오래된 선택 또는 무시)으로 정리 및 복사하며 별도의 정리된 폴더로 정리됩니다.


주요 기능

  • 데몬 프로세스 관리

    • 등록: add 명령어를 통해 모니터링할 디렉토리를 지정하고, 해당 디렉토리의 절대 경로와 데몬 프로세스의 PID를 링크드 리스트에 추가
    • 복원: 프로그램 시작 시 이전에 등록된 데몬들을 복원
    • 업데이트 및 삭제: 데몬 정보를 파일에 추가 및 삭제
  • 디렉토리 및 경로 검사

    • 디렉토리 검사: 주어진 경로가 실제 디렉토리인지 확인
    • 홈 디렉토리 검사: 작업이 사용자의 홈 디렉토리 내에서만 이루어지도록 보장
    • 상위/하위 디렉토리 판단: 중복 등록이나 경로 충돌을 방지
  • 파일 스캔 및 후보 선정

    • 파일 후보 리스트 구성: 디렉토리를 재귀적으로 탐색하여 정리할 파일 후보 리스트 구성
    • 중복 파일 처리: 중복된 파일에 대해 사용자 설정에 맞게 최신 파일을 선택하거나 중복 여부 표시
    • 파일 필터링: 설정 파일 및 로그 파일 제외, 사용자 지정 제외 경로 및 확장자 적용
  • 파일 정리 및 복사

    • 정리 및 복사: 후보 파일들을 정리하여 설정된 디렉토리로 복사, 변경된 파일만 복사하여 로그 기록
  • 로그 파일 및 설정 파일 관리

    • 로그 관리: 파일 정리 작업의 세부 사항을 로그 파일에 기록
    • 설정 파일 관리: 사용자 설정에 따라 설정 파일을 생성하고 업데이트

명령어

  • add <DIR_PATH> [OPTION]...
    (옵션 없이 실행 시) 지정된 <DIR_PATH> 디렉토리 모니터링 데몬 프로세스 등록

    • -d <OUTPUT_PATH>
      : 정리된 파일이 저장될 출력 디렉토리 <OUTPUT_PATH> 지정
    • -i <TIME_INTERVAL>
      : 데몬 프로세스의 모니터링 간격(초) 설정
    • -l <MAX_LOG_LINES>
      : 데몬 프로세스가 기록할 로그의 최대 라인 수 설정
    • -x <EXCLUDE_PATH1,EXCLUDE_PATH2,...>
      : 지정된 디렉토리 내 모든 하위 파일/디렉토리 제외
    • -e <EXTENSION1,EXTENSION2,...>
      : 정리할 파일 확장자 리스트 지정
    • -m <M>
      : <M> 옵션에 대한 값 지정
  • modify <DIR_PATH> [OPTION]...
    (옵션 없이 실행 시) 등록된 <DIR_PATH> 디렉토리 모니터링 설정 수정

    • -d <OUTPUT_PATH>
      : 출력 디렉토리 변경
    • -i <TIME_INTERVAL>
      : 모니터링 간격 변경
    • -l <MAX_LOG_LINES>
      : 로그 최대 라인 수 변경
    • -x <EXCLUDE_PATH1,EXCLUDE_PATH2,...>
      : 제외할 하위 경로 변경
    • -e <EXTENSION1,EXTENSION2,...>
      : 정리할 확장자 목록 변경
    • -m <M>
      : <M> 옵션의 값 변경
  • remove <DIR_PATH>
    (옵션 없이 실행 시) 등록된 <DIR_PATH> 디렉토리 모니터링 해제

  • show
    (옵션 없이 실행 시) 현재 등록된 데몬 프로세스 목록 및 정보 조회

  • help
    도움말 출력

  • exit
    프로그램 종료

사용 예시

$ make
$ ./ssu_cleanupd
# 디렉토리 등록
$ prompt> add <DIR_PATH> [OPTION]...

# 설정 변경
$ prompt> modify <DIR_PATH> [OPTION]...

# 디렉토리 해제
$ prompt> remove <DIR_PATH>

# 등록된 데몬 목록 보기
$ prompt> show

# 결과 예시
 prompt > show
Current working daemon process list

0. exit
1. ../test1/A
2. ../test1/B
3. ../test1/C

Select one to see process info : 1 #리스트 번호 입력

1. config detail
monitioring_path : ../test1/A
pid : 14467
start_time : 2025-04-01 14:23:20
output_path : ../test1/A_arranged
time_interval : 10
max_log_lines : none
exclude_path : none
extension : all
mode : 1

2. log detail
[14:23:30] [14467] [../test1/A/1.c][../test1/A_arranged/c/1.c]
..

prompt >

3. ssu_ext2

ssu_ext2 프로그램은 리눅스 ext2 파일 시스템 이미지를 C 언어로 직접 파싱하여, 사용자에게 tree, print, help, exit 같은 쉘 형태의 명령어 인터페이스를 제공하는 프로그램입니다. open, pread, lseek 등의 시스템 콜을 활용해 슈퍼블록, 그룹 디스크립터, 아이노드 테이블, 디렉토리 엔트리를 읽고, 동적 메모리로 파일 및 디렉토리 링크드 리스트 기반 트리를 구성하여 계층 구조를 재귀 출력하거나 크기와 권한을 표시하며, 필요 시 파일 내용 일부를 출력하는 기능을 지원합니다.


주요 기능

  • EXT2 이미지 로드 및 파싱

    • 사용자 지정 .img 파일을 open(), pread()로 읽어들여 슈퍼블록과 그룹 디스크립터를 파싱
    • 아이노드 기반 디렉토리 트리 구성
  • 명령어 지원

    • tree : 디렉토리 구조를 시각적으로 출력하며, -r로 하위 디렉토리까지 재귀 출력, -s로 각 항목 크기(바이트) 표시, -p로 POSIX 권한 문자열 표시
    • print : 파일 내용 출력, -n 옵션으로 상위 N줄만 출력
    • help : 모든 지원 커맨드 요약 출력, 또는 특정 커맨드 사용법 설명
    • exit : 메모리 할당 해제 후 프로그램 종료
  • 에러 처리 및 유효성 검증

    • 이미지 파일 존재 및 수정 검사
    • 잘못된 경로 및 옵션 입력 시 오류 메시지 또는 도움말 출력

명령어

  • tree: 디렉토리 구조 출력
    • -r: 하위 디렉토리까지 재귀 출력
    • -s: 각 항목 크기 출력
    • -p: POSIX 권한 문자열 표시
  • print: 파일 내용 출력
    • -n <LINE>: 상위 N줄만 출력 (음수·0이면 출력 없이 프롬프트 복귀)
  • help: 모든 지원 커맨드 요약 출력 또는 커맨드 사용법 출력
  • exit: 메모리 해제 후 프로그램 종료

사용 예시

$ make
$ ./ssu_ext2 ~/ext2disk.img

# 디렉토리 구조 출력
$ prompt> tree <DIR_PATH> [OPTION] ...

# 파일 내용 출력
$ prompt> print <DIR_PATH> [OPTION] ... 

# 도움말 출력
$ prompt> help

# 프로그램 종료
$ prompt> exit

About

Linux System Programming

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published