입출력 재지정 I/O Redirection
- 입출력 대상으로 표준 입력/출력/에러를 사용하지 않고 다른 경로인 파일로 재지정하는 것
- 키보드 입력을 파일에서 받도록 대체하는 것이 입력 재지정
- 실행결과나 에러상황을 파일로 대체하는 것이 출력 재지정
* 모든 Process는 기본적으로 3개 표준 입력(0), 표준 출력(1), 표준 에러(2)를 가진다.
출력 재지정
ps > output.dat (= ps 1> output.dat *정수를 지정하지 않으면 자동으로 표준출력1 로 인식)
-> 프로세스를 보는 명령어 ps (전체 프로세스는 ps -ef)
-> 꺽쇠 > 로 파일에 출력을 재지정한다.
-> cat output.dat 파일을 읽어보면 출력이 저장된것 확인가능
-> id > output.dat 하면 새롭게 덮어씌워지고 이전 기록은 사라진다
-> id >> output.dat 하면, 기존파일 끝에 추가로 기록한다.
에러출력 재지정
ps dfdfsf 2> error.dat
-> 없는 명령어로 에러를 유발하고, 표준에러(2)를 꺽쇠에 붙여 재지정
응용
ps 1> output.dat 2> error.dat
-> 표준출력은 output.dat에, 에러는 error.dat에 저장
nohup ./batch.sh 1> /dev/null 2>&1
SIGHUP행업시그널(터미널이 끊어짐)이 발생해도 종료하지 않음
(/dev/null null device. 윈도우의 쓰레기통과 같음) (2>&1 표준에러를 표준출력으로 지정)
=> 즉 표준출력도, 표준에러도 다 재지정으로 null에 버림
실습확인
-> user1 계정으로 batch.sh 파일(내용은 대충 echo ~ sleep 1000; 이런거)을 실행
-> root 계정으로 ps -ef | grep batch.sh 하여 프로세스 실행 확인
-> user1 계정 터미널 종료
-> root 계정에서 프로세스 제거 확인
-> user1 계정 재접속하여 nohup ./batch.sh
-> user1 계정 터미널을 종료해도 root 계정에서 프로세스 실행중 확인됨
1. IPC(Inter-Process Communication) 프로세스간 통신 기법
Process는 가상메모리 기법 사용. 개별 프로세스가 가상주소Virtual Address Space를 가진다.
프로세스간 통신을 하려면 중재자가 있어야 함. 중재자 = 커널.
가장주소를 사용하는 이유 : 물리적으로 부족한 메모리를 확장하려는 의도 & OS의 안정성을 위함.
커널이 제공하는 통신 기법 중 하나가 바로 파이프Pipe이다.
- Pipe 파이프
2. System V 계열 유닉스에서 만든 IPC -> 모든 유닉스 시스템에 적용됨
- Shared Momory : 커널이 메모리 영역을 잡아줘서 프로세스간에 같이 쓸 수 있도록
- Message Queue : 메세지를 전달할 수 있는 Queue를 만듬
- Semaphore 세마포어 : 프로세스간 동기화를 하기 위함(접근순서 컨트롤)
파이프Pipe | 기호
둘 이상의 명령을 함께 묶어 선행프로세스 출력 결과를 후행프로세스 입력으로 전환
ex
A와 B프로세스가 통신을 하고 싶을때 커널에게 시스템 콜(시스템 함수)
-> Pipe (파일) 생성
-> A프로세스가 Pipe에 write하고, B프로세스가 Pipe를 read한다.
ex ps -ef | grep batch.sh
ps -ef의 결과를 파이프 오른쪽 grep batch.sh로 필터하여 출력해준다.
특수문자Metacharacter
~ 홈 디렉토리
. 현재 디렉토리
.. 상위 디렉토리
# 주석
$ 쉘 변수
& 백그라운드 작업
* 문자열 와일드카드
? 한문자 와일드카드 (임의의 한 문자)
; 쉘 명령 구분자
| 파이프
< 입력 재지정
> 출력 재지정
&& 더블엠퍼센트 : 앞 명령이 에러없이 실행종료되면 다음 명령을 순차 실행
|| 더블 버티칼바 : 앞 명령의 결과와 관계없이 각각 모든 명령을 실행
-- 2 End
파일시스템 개요
1) 물리적인 저장장치에 파일을 생성, 저장, 관리하기 위한 논리적인 자료구조
2) 논리적인 파티션으로 나누어지고, 파티션별로 파일시스템 생성 ex NTFS, EXT2, EXT3 ...
- 물리적인 디스크 (파티션 구분)
- 파일시스템 (Boot block, Super Block, i-node list, Data blocks)
과정
1. 물리적인 디스크
2. 파티션 구분
3. 파일시스템
4. 특정 파일을 파일시스템에 연결하는 과정. mount <-> umount (반대과정)
부트블럭Boot block
: 부트스트랩bootstrap 코드를 담음
슈퍼블럭Super Block
: 파일시스템을 관리하기 위한 정보를 담음
아이노드 리스트i-node list
: 파일에 대한 속성정보를 관리하기 위한 블럭
i-node 구조체 리스트로 이루어져 있다.
i-node에는 파일명이 없고, 파일명은 디렉토리(특수한 파일. 파일명과 i-node number 매핑정보를 갖는다)를 통해 관리된다.
[ 1) i-node number : 파일시스템 내에서 파일을 식별하는 고유 식별자
2) 파일타입 : 일반파일, 디렉터리, 장치파일 등.
3) 접근권한 : 파일에 대한
4) link count : 하드링크 카운트
5) 소유자 : 소유자 UID
6) 소유그룹 : 소유그룹 GID
7) 파일크기
8) MAC Time : 파일 무결성 체크를 위해 자주 출제됨
- last Modification Time 마지막 내용 수정시간 M TIME
- last Access Time 마지막 접근시간 A TIME
- last Change Time 마지막 속성(소유자, 접근권한 등) 변경 시간 C TIME
9) Block index : data blocks에 저장된 파일 인덱스 ]
ls 했을때, 디렉토리 파일의 i-node 매핑정보를 기반으로 데이터를 가져와 출력해주는 것.
침해사고가 발생하게 되면 파일에 대한 무결성 확인을 위해 타임라인 분석을 한다.
이 때 i-node 구조체의 MAC Time을 점검.
stat 명령을 통해 특정 파일의 i-node 정보 확인가능
예시
cat으로 조회 : Access 변경
vi로 내용 편집 : Access, Modify, Change 변경 (편집하기 위해 접근, 내용 수정, 파일크기 등이 바뀌어서 속성변경)
chmod 권한 수정 : Change 변경
touch : Modify 변경 (같은 이름의 파일이 존재할때)
링크파일Link File
-하드 링크 : 파일에만 링크 가능. 기존 파일과 동일한 i-node number를 가지는 또 다른 파일 생성.
-심볼릭 링크 : 파일 또는 디렉토리에 링크. 원본 파일이 삭제 혹은 이동되면 접근이 불가능하다. (심볼릭은 파일시스템 상관없이 링크 가능. 동일 파일시스템 내에서만 링크되는 하드링크의 단점 보완) 새로운 i-node number를 가지는 파일 생성.
ex
ln -s aa.txt bb.txt (-s 심볼릭 링크라는 뜻)
ln aa.txt bb.txt (하드링크)
ls시 -i 옵션을 사용하면 i-node number를 확인가능하다.
ls -l 하여 나오는 시간은 M Time을 의미한다
-- 3 end
디렉터리 관리
1. 일반파일 regular file
2. 디렉터리 directory
3.특수파일 special file
- 프로세스간 통신IPC 을위한 파이프pipe, 소켓socket 등
- 프린터 등 주변장치를 사용하기 위한 장치파일device file
* 모든 I/O의 대상체를 파일로 간주한다
I/O의 대상체는 다양한데, 유닉스에서는 파일로 간주함
즉 입출력장치의 종류에 관계없이 쓰는 I/O 함수가 동일
ls -l 출력 필드 결과
drwxr-xr-x. 2 root root 19 3월 8 16:41 aaa
-rw-------. 1 root root 143 2월 27 23:21 anaconda-ks.cfg
lrwxrwxrwx. 1 root root 5 3월 8 16:27 b.txt -> a.txt
-rwxrwxrwx. 2 root root 5 3월 8 16:19 hard_c.txt
1. 파일종류 및 접근권한(파일종류 4bit + 특수권한비트 3bit + user 권한 3bit + group 권한 3bit + others 권한 3bit 총 16bit)
* 파일종류 d디렉터리 b블록장치파일 c문자장치파일 l심볼릭링크 p네임드파이프 s유닉스도메인소켓 -일반파일
2. 하드링크수
3. 소유주
4. 소유 그룹
5. 크기
6. 최종 수정일
7. 최종 수정시간
8. 파일명
rmdir 빈 디렉터리 삭제 명령어
rm 일반 파일 삭제
rm- rf 디렉터리(그 안의 내용물까지)까지 전부 삭제
접근권한rwx
- user 소유자의 권한 3bit (8진수 0~7로 표현)
- group 소유그룹 권한 3bit
- others 기타 사용자 권한 3bit
파일에 대한 권한
r(4) : 파일 읽기 권한
w(2) : 파일 쓰기 권한
x(1) : 실행 권한
디렉터리에 대한 권한
r : 디렉터리의 내용을 볼 수 있다
w : 디렉터리내 파일 생성/삭제, 디렉터리 생성
x : 디렉터리 안으로 이동할 수 있다(cd 디렉터리)
그외 표기
- : 모든 권한이 없을 경우
일반파일의 경우 기본적으로 666(rw-rw-rw-) *r(4) + w(2) = 6
디렉터리의 경우 기본적으로 777(rwxrwxrwx) *r(4) + w(2) + x(1) = 7
chmod 접근권한 변경
1. 8진수
- 숫자 r(읽기)=4, w(쓰기)=2, x(실행)=1
ex chmod 777 filename : 모든 사용자에 대한 rwx 권한 설정
2. 문자
- 대상 : u(user), g(group), o(others), a(all)
- 연산자 : +(추가), -(제거), =(지정)
- 권한 : r(읽기), w(쓰기), x(실행)
ex chmod u=r filename : u권한에 읽기 권한 설정
chmod u+rw,o-x filename : u권한에 읽기 쓰기 권한 추가하고 others에 x권한 제거
혼자 실습해본 내용
root 권한으로 touch a.txt 생성
-> 처음 권한 : (0644/-rw-r--r--)
-> user1로 cat a.txt 읽기 시도 성공
-> root 권한으로 chmod u-r a.txt
-> user1로 cat a.txt 성공
-> root 권한으로 chmod g-r,o-r a.txt
-> user1로 cat a.txt 시도시 cat: a.txt: 허가 거부 뜨면서 조회불가
-> chmod g+r a.txt 하여 그룹 권한을 추가해도 조회가 안되는걸 보니 others 조회에 속하나보다.
chown 소유주 변경 가능 명령어
chgrp 소유그룹 변경 가능 명령어
=> chown, chgrp는 슈퍼 유저 root만 실행할 수 있음
chmod는 기존 파일에 대한 접근 권한을 변경 할 때 사용
umask는 앞으로 만들어질 파일에 영향을 미치는 명령으로 제거할 접근권한을 명시.
(기본 접근 권한 - umask = 최종접근권한)
보통 /etc/profile 파일에 umask 지정 (보통 group과 others의 쓰기권한에 제한을 두는 022를 많이 지정)
mask 연산
- 대상 비트열에서 특정 비트열을 추출하기 위한 연산 (비트 & 연산)
Netmask
- 네트워크 ID만을 추출하기 위한 mask값
ex IP 192.168.197.131 Netmask 255.255.255.0 & 연산 => mask값 192.168.197.0
umask
- 제거할 권한 비트를 추출.
ex umask 022 -> 비트NOT -> 줄 권한 비트를 추출
ex 파일권한 110 110 110
022의 비트NOT 111 101 101
=> & 연산하면 110 100 100 => 644
실습
umask 333
파일권한 110 110 110
333의 비트 NOT 011 011 011 => 100 100 100
=> & 연산하여 100 100 100 => 444 r--r--r--
umask 333
파일권한 110 110 100
333의 비트 NOT 011 011 011 => 100 100 100
=> & 연산하여 100 100 100 => 444 r--r--r--
-- 4 end
'(실기) 정보보안기사&산업기사' 카테고리의 다른 글
UNIX/Linux 기본 학습 10~15 (0) | 2024.03.12 |
---|---|
UNIX/Linux 기본 학습 5~9 (0) | 2024.03.11 |
UNIX/Linux 기본 학습 1 (0) | 2024.03.07 |
윈도우 기본학습1 (0) | 2024.03.07 |
지안패스 실기 영상 시작 (0) | 2024.03.07 |