[주의!] 문서의 이전 버전(에 수정)을 보고 있습니다. 최신 버전으로 이동
이 문서는 분류가 되어 있지 않습니다. 분류:분류에서 적절한 분류를 찾아 문서를 분류해주세요!
1. 개요 [편집]
시스템 엔지니어링 1차 과제 중 Linux Script 작성 실습과 관련된 문서이다.
2. 제 0과제 [편집]
scp 명령어 이용해 과제 수행에 필요한 파일들을 받아오는 과제이다.
scp 사용법은 아래와 같다.
scp 사용법은 아래와 같다.
# scp 원격ID172.16.48.201:"/home/test/{test1[20250109].txt,test2.sh,test[3].log,testfile,}" /home/test_user
위 예시 명령어 확인 시 파일을 한번에 받아오기 위해 중괄호를 추가했고 파일명 중 대괄호가 포함되어 있어 쌍따옴표를 넣어줬다.
3. 제 1과제 [편집]
2개의 파일 리스트를 비교해 같은 내용이 있는 라인을 출력하는 과제이다.
diff 명령어를 사용해 중복된 라인을 출력 후 파일에 넣도록 스크립트 를 작성했다.
diff 명령어를 사용해 중복된 라인을 출력 후 파일에 넣도록 스크립트 를 작성했다.
diff "$FILE1" "$FILE2" | grep '^<' | sed 's/^< //' >> "$OUTPUT_FILE"
명령어 확인 시 스크립트 파일에서 특수기호 "^<" 사용을 위해 따옴표를 넣어줬다.
4. 제 2과제 [편집]
대용량 파일을 비교해 공통으로 존재 하는것과 하지 않는 라인을 각각 다른 파일에 저장하는 과제이다.
diff 명령어를 사용해 각각 다른 파일에 저장하도록 스크립트를 작성했다.
diff 명령어를 사용해 각각 다른 파일에 저장하도록 스크립트를 작성했다.
diff "$FILE1" "$FILE2" | grep '^>' | sed 's/^> //' | awk '{print $1}' | grep -v 'filename' >> "$EXIST_FILE"
diff "$FILE1" "$FILE2" | grep '^<' | sed 's/^< //' | awk -F '[,t ]+' '{print $1}' >> "$NOT_EXIST_FILE"
5. 제 3과제 [편집]
파일에 기록된 시간을 보기 편하게 변환해 별도 파일에 저장하는 과제이다.
cat "$FILE1" | grep -v history | awk -F ',' '{print $1 "," strftime("%Y-%m-%d %H:%M:%S", $2)}' >> $EXIST_FILE
strftime 함수를 이용해 파일 내 쉼표 2번째의 있는 텍스트(날짜)를 보기편하게(yyyy-mm-dd hh-mm-ss) 변환한다.
AS-IS | TO-BE |
1721693207 | 2024-07-09 09:16:44 |
6. 제 4과제 [편집]
파일내 bitrate 값의 따라 각각 다른 파일의 저장하는 과제이다.
if문을 통해 6Mbps인 경우 4~6Mbps인 경우 그 외 데이터를 각각 저장 할 수 있도록 작성했다.
다른 값들도 구문과 같이 각각 분리해 준다.
다른 값들도 구문과 같이 총파일 개수와 평균 bitrate를 출력한다.
if문을 통해 6Mbps인 경우 4~6Mbps인 경우 그 외 데이터를 각각 저장 할 수 있도록 작성했다.
if (bitrate >= 6000000) {
print out >> "HD.txt";
hd_cnt++; hd_sum += bitrate;
} bitrate 값 마다 분리 해주는 구문이다.다른 값들도 구문과 같이 각각 분리해 준다.
if (hd_cnt > 0) {
res = sprintf("total : %d, bitrate avg : %.0f", hd_cnt, hd_sum / hd_cnt);
print res >> "HD.txt";
} 파일 마지막 줄에 나눈 파일 마다의 총 파일의 개수와 평균 bitrate를 계산한 값을 출력하도록했다.다른 값들도 구문과 같이 총파일 개수와 평균 bitrate를 출력한다.
7. 제 5과제 [편집]
입력한 용량 값 만큼의 컨텐츠 크기인 파일만 출력하는 과제이다.
grep "^H" hitcount.txt
H로 시작하는 컨텐츠 파일만 조회 하기 위해 grep에 ^를 추가해 준다.
current_gb = $4/1024/1024/1024;
리스트 파일에 있는 컨텐츠 별 용량을 구해 GB로 변환 해준다.
if (current_gb < limit) {
printf "%s, %s, %s, %.2f GB, %s\n", $1, $2, $3, current_gb, $5
} if문을 통해 입력한 GB 값과 파일리스트의 GB변환값을 비교해 미만인 파일들을 출력해준다.8. 제 6과제 [편집]
파일이 복사된 서버의 IP 리스트의 개수와 파일이 복사된 개수를 비교해 두 값이 다른걸 출력하는 과제이다.
split($5, ips, " ");
ip_cnt = length(ips);
copy_cnt = $6;
split 함수를 이용해 IP 리스트 개수를 출력,
복사된 개수는 이미 Count되어 있어 값을 가져 올 수 있다.
복사된 개수는 이미 Count되어 있어 값을 가져 올 수 있다.
if (ip_cnt != copy_cnt) {
printf "불일치: %s (실제:%d, 기록:%d)\n", $1, ip_cnt, copy_cnt
} if문을 통해 불일치 값을 출력해 남겨준다.9. 제 7과제 [편집]
EventLog에서 SeesionID로 조회해 관련로그를 출력 및 관련 컨텐츠 파일을 다른 파일에서도 조회해 출력하는 과제이다.
grep "$sid" EventLog[20241118].log
SessionID를 입력받아 관련 로그를 조회한다.
grep "$sid" EventLog[20241118].log | grep ".mpg" | sed -E 's/.*[[,/ ]([^,/[ ]+.mpg).*/1/' | sort -u
mpg 파일을 다른 파일에서도 조회 하기 위해 mpg 목록들을 출력한다.
10. 제 8과제 [편집]
EventLog에서 SeesionID로 조회해 관련로그를 출력 및 관련 컨텐츠 파일을 다른 파일에서도 조회해 출력하는 과제이다.
grep "$sid" EventLog[20241118].log
SessionID를 입력받아 관련 로그를 조회한다.
grep "$sid" EventLog[20241118].log | grep ".mpg" | sed -E 's/.*[[,/ ]([^,/[ ]+.mpg).*/1/' | sort -u
mpg 파일을 다른 파일에서도 조회 하기 위해 mpg 목록들을 출력한다.
start_ts=$(date -d "$LOG_DATE $start_input" +%s)
Ex) inout = 10
변환 후 --> 10:30:00
입력받은 시간을 변환을 하기 위한 구문이다.
awk -F',' -v s="$start_ts" -v e="$end_ts" '$3 >= s && $3 <= e' "$FILE"
입력한 시작 시간보다 큰 값과 입력한 종료 시간보다 작거나 같은 값을 출력한다.
[1] diff "$FILE1" "$FILE2" | grep '^<' | sed 's/^< //' >> "$OUTPUT_FILE"