* 파일, 디렉터리의 소유권과 허가권 - 파일 속성

* 파일 유형
- 파일이 어떤 종류인지 나타냄
- 디렉터리 : d
- 일반 파일 : -
- 블록 디바이스 : b
- 문자 디바이스 : c
- 링크 파일 : l
* 파일 허가권
- 파일에 대한 접근 권한을 의미하며, 읽기는 r, 쓰기는 w, 실행은 x로 표현
- 파일의 소유자, 그룹, 그 외 사용자로 접근권한을 부여함
* grep : 입력으로 전달된 파일의 내용에서 특정 문자열을 찾기
- 기본 형식 : grep <옵션><패턴><파일이름>
- 옵션) i : 대/소문자 무시
w : 단어 단위로 매칭
n : 검색 문자열의 라인 번호 출력
r : 하위 디렉토리를 포함해 검색
ex) grep -r "입력문자" *
* sed (Streaming Editor) : 원본 문서 파일을 원본을 유지하며 내용을 빠르게 편집하는 도구
- 기본 형식 : sed <옵션><명령><파일이름>
- 옵션) -n : 패턴 버퍼의 내용을 출력 안함
-e : 추가 명령어 입력
- 명령) p : 특정 행 출력
d : 특정 행 삭제
s : 단어 치환
r : 내용 추가

ex)
[root@localhost ~]# echo "sim 010-6666-6666" > add
[root@localhost ~]# cat add
sim 010-6666-6666
[root@localhost ~]# sed -n -e '/5555$/r add' -e '1,$p' sample
name phone
kim 010-1111-1111
lee 010-2222-2222
pak 010-3333-3333
hong 010-4444-4444
yoo 010-5555-5555
sim 010-6666-6666
// 변경한 내용을 sample1 파일을 생성하여 저장
[root@localhost ~]# sed -n -e '/5555$/r add' -e '1,$p' sample > sample1
[root@localhost ~]# cat sample1
name phone
kim 010-1111-1111
lee 010-2222-2222
pak 010-3333-3333
hong 010-4444-4444
yoo 010-5555-5555
sim 010-6666-6666
ex)
// 실습 위한 sedtest 파일 생성
[root@localhost ~]# cat sedtest
Bob M
Jane F
Tony m
Soo f
// M은 Male로, F는 Female로 한번에 치환 (i->대소문자구분x)
[root@localhost ~]# sed -n -e 's/M/Male/gi' -e 's/F/Female/gi' -e '1,$p' sedtest
Bob Male
Jane Female
Tony Male
Soo Female
// Bom 처럼 다른 문자에도 m이 있을 경우 필터링
[root@localhost ~]# sed -n -e 's/\bM/Male/gi' -e 's/\bF/Female/gi' -e '1,$p' sedtest
Bom Male
Jane Female
Tony Male
Soo Female
* awk : 텍스트 처리 프로그래밍.
파일 내 문자의 패턴을파악하고 분류, 조작, 연산 등을 수행하는 명령
- 기본 형식 : awk <옵션><awk 프로그램><파일이름>
- 옵션) -f : 파일의 awk 프로그램을 사용
-F : 필드의 구분 문자를 변경

ex)
[root@localhost ~]# awk '{ print }' awksample
A 10 11 12
B 20 21 22
C 30 31 32
D 40 41 42
// 특정 필드만 출력
[root@localhost ~]# awk '{ print $2 }' awksample
10
20
30
40
// 문자열 추가
[root@localhost ~]# awk '{ print "Name:"$1, "Num:"$2 }' awksample
Name:A Num:10
Name:B Num:20
Name:C Num:30
Name:D Num:40
// 모든 레코드 중 두번째 필드값이 10인 레코드를 출력
[root@localhost ~]# awk '$2 == 10 { print $0 }' awksample
A 10 11 12
// 두번째 필드의 값이 20보다 큰 레코드를 출력
[root@localhost ~]# awk '$2 > 20 { print $0 }' awksample
C 30 31 32
D 40 41 42
// 세번째 필드의 값을 모두 더한 결과를 "SUM:" 메시지와 함께 출력
[root@localhost ~]# awk '{sum += $3} END { print "SUM : "sum}' awksample
SUM : 104
// 레코드 단위로 합과 평균을 출력 cf) 행마다 처리하고 싶을 때는 END 사용x
[root@localhost ~]# awk '{sum=0} {sum+=($2+$3+$4)} { print $0,sum,sum/3 }' awksample
A 10 11 12 33 11
B 20 21 22 63 21
C 30 31 32 93 31
D 40 41 42 123 41
// 파일에 저장된 awk 프로그램을 실행 cf) NF(내장변수) : 현재 처리중인 레코드의 필드 개수
[root@localhost ~]# touch awkp.script
[root@localhost ~]# vi awkp.script
[root@localhost ~]# cat awkp.script
{
for (i=0; i<=NF; i++)
total += $i
}
END {
print "TOTAL : "total
}
[root@localhost ~]# awk -f awkp.script awksample
[root@localhost ~]# awk -f awkp.script awksample
TOTAL : 312

// sample 파일 생성
[root@localhost ~]# cat bmisample
A 170 73
B 165 73
C 180 70
D 150 60
// 비만도 계산
[root@localhost ~]# awk '{ printf "%s %d %d %.4f\n", $1, $2, $3, $3/((($2)/100)*($2/100)) }' bmisample
A 170 73 25.2595
B 165 73 26.8136
C 180 70 21.6049
D 150 60 26.6667
// 비만도 판정
* 리눅스 패키지 관리
* 리눅스 패키지 매니저(PM, Package Manager)
- 리눅스 시스템에 프로그램을 설치하고, 업그레이드, 환경설정 등을 수행하는 프로그램
* apt : 패키지 관리 명령어
- 데비안(.deb) 설치, 제거, 목록 업데이트 명령
apt update : 패키지 목록을 업데이트
apt install : 패키지 설치
apt remove : 기존에 설치된 패키지 제거
apt purge : 기존에 설치된 패키지 및 설정파일 제거
apt autoremove : 사용하지 않는 패키지를 모두 제거
apt clean : 설치할 때 내려받기한 파일 제거
* 패키지를 설치하기 전 패키지에 대한 정보나 의존성을 확인하는 명령
기본 형식 ) apt-cache <명령><패키지이름>
명령 ) show : 패키지의 정보를 화면에 출력
depends : 패키지에 대한 의존성 정보를 출력
rdepends : 이 패키지에 의존하는 다른 패키지 목록 출력
cf) centOS -> yum info [패키지이름]
* tar : 파일 묶기와 압축
- tar로 archive 파일 생성하기
기본 형식 ) tar <옵션><파일|디렉토리>
옵션 ) -f file : 새롭게 만들 아카이브 파일의 이름을 지정할 때 사용함. (기본 옵션)
-c : create. 새로운 아카이브를 생성함. 기존 아카이브 덮어쓰기. (파일 묶을 때 사용)
-t : list. 아카이브 파일에 포함된 내용 출력
-v : verbose. 처리되는 과정(파일 정보)을 자세하게 나열
-x : extract. 아카이브 압축 해제
-z : -f 옵션을 함께 사용하여 gzip으로 압축된 archive 파일 해제

// archive 디렉토리 생성 후 테스트 파일 100개 생성
[root@localhost ~]# mkdir archive
[root@localhost ~]# cd archive
[root@localhost archive]# touch tarTest{00..99}
[root@localhost archive]# ls
tarTest00 tarTest01 tarTest02 tarTest03
...
tarTest97 tarTest98 tarTest99
// archive.tar 파일 생성
[root@localhost ~]# tar -cvf archive.tar archive
[root@localhost ~]# ls
archive.tar archive
// archive.tar 파일 크기 확인
[root@localhost ~]# ls -l archive.tar // ls -lh -> 60K
-rw-r--r--. 1 root root 61440 2월 28 14:50 archive.tar
// backup 폴더에 풀기
[root@localhost ~]# tar -xf backup/archive.tar
[root@localhost ~]# cd backup/
[root@localhost backup]# ls
archive archive.tar
[root@localhost backup]# cd archive/
[root@localhost archive]# ls
tarTest00 tarTest01 tarTest02 tarTest03
...
tarTest97 tarTest98 tarTest99
* gzip, bzip2, xz : 리눅스 압축 유틸리티
- file 단위로만 압축
- 압축을 하면 원본 파일은 삭제되고 압축 파일만 남음


// hosts를 gzip으로 압축
[root@localhost etc]# gzip hosts
[root@localhost etc]# ls hosts.gz
hosts.gz
// 원본 파일은 삭제됨
[root@localhost etc]# ls hosts
ls: cannot access hosts: 그런 파일이나 디렉터리가 없습니다
* zip, unzip
- 원본을 보존하면서 압축파일 생성
- 디렉토리 압축 가능
기본 형식 ) zip filename.zip filename
unzip filename.zip
옵션 ) -r : 디렉토리 압축
-d : 지정한 디렉토리에 압축 해제
-l : 압축을 해제하지 않고, 압축 파일 내의 목록만 출력
실습 ) 압축(gzip, bzip2,xz, zip) 활용

// 5~10메가바이트 사이즈 파일 찾기
[root@localhost ~]# find /usr/lib -type f -size +5M -size -10M -exec ls -lh {} \;
-rw-r--r--. 1 root root 6.4M 2월 15 00:06 /usr/lib/firmware/netronome/flower/nic_AMDA0058.nffw
-rw-r--r--. 1 root root 5.4M 2월 15 00:06 /usr/lib/firmware/qcom/sdm845/modem.mbn
[root@localhost ~]# find /usr/lib -type f -size +5M -size -10M -exec cp {} - \;
// ziptest 디렉토리에 해당 파일들을 복사
[root@localhost ~]# mkdir ziptest
[root@localhost ~]# cp /usr/lib/firmware/qcom/sdm845/modem.mbn /home/ziptest
// 파일들을 묶어서 각각 gzip,bzip2,xz,zip로 압축하기
[root@localhost ~]# zip ziptest.zip ziptest
[root@localhost ~]# tar -czf ziptest.tar.gz ziptest
[root@localhost ~]# tar -cjf ziptest.tar.bz2 ziptest
[root@localhost ~]# tar -cJf ziptest.tar.xz ziptest
// 어떤 압축 명령어의 압축 효율이 제일 높은지 알아보기
[root@localhost ~]# ls -lh ziptest.tar.gz ziptest.tar.bz2 ziptest.tar.xz ziptest.zip
-rw-r--r--. 1 root root 2.9M 2월 28 15:53 ziptest.tar.bz2
-rw-r--r--. 1 root root 4.7M 2월 28 15:53 ziptest.tar.gz
-rw-r--r--. 1 root root 1.8M 2월 28 15:54 ziptest.tar.xz
-rw-r--r--. 1 root root 166 2월 28 15:49 ziptest.zip
두번째방법!!!
// tar파일 4개 만들고 각각 유형별로 압축하기
[root@localhost ~]# cp archive1.tar archive4.tar
gzip archive1.tar
bzip2 archive2.tar
xz archive3.tar
zip archive4.tar.zip zrchive4.tar
[root@localhost ~]# ls -lh archive*
'SECURITY :: > Security Academy' 카테고리의 다른 글
| 7일차 - 침해사고 대응(A Data-Centric Approach) 02 (0) | 2024.03.10 |
|---|---|
| 6일차 - 리눅스 기초실습 04 (0) | 2024.03.10 |
| 4일차 - 리눅스 기초실습 02 (0) | 2024.02.28 |
| 3일차 - 리눅스 기초실습 01 (0) | 2024.02.28 |
| 2일차 - 침해사고 대응(A Data-Centric Approach) 01 (0) | 2024.02.28 |
댓글