1. 파일 속성
파일 접근 권한 변경
- 파일은 읽기, 쓰기, 실행에 대한 파일 접근 권한을 부여
- 파일 파일 소유자, 파일 소유자 그룹, 기타 사용자에 대해 각각의 파일 접근 권한 부여
파일 접근권한 표기 방법
문자 표기 방법
- 권한 부여시에는 권한 문자 표시 -> r w x
- 권한 미부여시에는 - 표시
- 주로 이 방법 사용
예시) rwxr-xr-x
- 소유자: 읽기/쓰기/실행 권한
- 그룹: 읽기/실행 권한
- 기타 사용자: 읽기/실행 권한
숫자 표기 방법
- 파일 접근 권한은 r w x 순서로 부여 => 고정순서
- 권한 부여 문자는 3자리로 구성 (단축해서 표기할 때 사용)
- 2진수 3자리는 8진수 1자리로 표현 가능 (하단 이미지 참조)
- ex) 755 : 소유자 읽기/쓰기/실행 권한, 그룹 읽기/실행 권한, 기타 사용자: 읽기/실행 권한
통상 Linux shell에서 파일 생성 시 기본 접근 권한
텍스트 파일
rw-rw-r-- 또는 664 : 소유자 읽기/쓰기 권한, 그룹 읽기/쓰기 권한, 기타 읽기 권한
디렉토리 파일
rwxr-xr-x 또는 755 : 소유자 읽기/쓰기/실행 권한, 그룹 읽기/실행 권한, 기타 읽기/실행 권한
파일 접근 권한은 파일 생성시 Linux shell에서 정해놓은 접근 권한에 의해 설정되지만, 필요시 원하는 접근 권한으로 변경 가능
chmod
파일 접근 권한 변경; chmod [옵션] <파일 접근 권한> <파일명>
- -R : 하위 디렉토리까지 모두 접근 권한 변경
파일 접근 권한 표기 방법
기호 모드 (문자 형태)
<카테고리 문자> <연산자 기호> <접근 권한 문자>
- 카테고리 문자 : u (user 사용자) , g (group 사용자 그룹) , o (other 기타 사용자) , a (all 모두)
- 연산자 문자 : + (권한 부여) , - (권한 미부여)
- 권한 문자 : r (읽기) , w (쓰기) , x (실행)
실습 : sample.txt에 적용시켜 보기 (r--r--r--로 기본 설정)
- 기타 사용자에게 실행 권한 부여 : chmod o+x sample.txt
- 그룹, 기타 사용자에게 실행 권한 제거 : chmod go-x sample.txt
- 모두에게 실행 권한 부여 : chmod a+x sample.txt
- 소유자에게 쓰기 부여, 그룹에게 쓰기 권한 제거 : chmod u+w,g-w sample.txt
- 소유자 권한만 남기고 나머지 권한 모두 제거 : chmod go-rwx sample.txt
숫자 모드 (8진수로 표현)
파일 소유자/소유자 그룹/기타 사용자에 대한 권한을 8진수 3자리로 표현, 주로 사용하는 방식
- 777 : 소유자/그룹/기타 사용자 모든 권한 부여
- 666 : 소유자/그룹/기타 사용자 모두 읽기 및 쓰기 권한 부여
- 755 : 소유자는 모든 권한, 그룹/기타 사용자는 읽기 및 실행 권한 부여
- 644 : 소유자는 읽기와 쓰기, 그룹/기타 사용자는 읽기 권한 부여
- 640 : 소유자 읽기 및 쓰기, 그룹 읽기 권한 부여, 기타 사용자는 모든 권한 미부여
파일 기본 권한 제한
- Linux shell 상에서 생성되는 파일에 대해 기본 권한이 설정되어 생성
- 필요시 파일에 부여되는 기본 권한을 제한해서 생성할 수 있도록 설정할 때가 있기도 함
- Linux shell 파일 기본 접근 권한
일반 파일 : 소유자 읽기/쓰기, 그룹 및 기타 사용자 읽기 권한
디렉토리 파일 : 소유자 모든 권한, 그룹 및 기타 사용자 읽기/실행 권한
- touch 명령어로 생성한 파일은 일반 파일에 텍스트 파일 생성, 기본적으로 실행 권한 부재
- umask : 파일 생성시 기본 권한 제한 설정; umask [옵션][<mask 값>]
-s 옵션 : mask 값 문자 출력
umask 또는 umask -s 입력시 현재 설정된 mask 값 출력
mask 값 : 파일 생성시 제한하고 싶은 권한을 표시한 값
"umask 숫자 값 입력 후 umask -s를 추가로 입력해야 설정값이 적용된다"
umask 값 예시 )
특수 접근 권한
- 접근 권한은 원래 4자리의 8진수 사용
- 가장 처음 자리수가 특수 접근 권한 의미
- 특수 접근 권한에는 1, 2, 4 부여 가능
- sticky bit : 맨 앞자리가 1
- SetGID : 맨 앞자리가 2
- SetUID : 맨 앞자리가 4
SetUID
해당 파일이 실행되는 동안에는 실행한 사용자의 권한이 아닌 파일 소유자 권한으로 생성
- SetUID 부여 방법 : chmod 4<숫자모드 3자리> <파일명> ex) chmod 4755 sample
소유자의 실행권한이 s로 변경 ex) -rwsr-xr-x
SetGID
해당 파일이 실행되는 동안 파일 소유 그룹의 권한으로 실행
- SetGID 부여 방법 : chmod 2<숫자모드 3자리> <파일명> ex) chmod 2755 sample2
그룹 실행권한이 s로 변경 ex) -rwxr-sr-x
Sticky bit
디렉토리 부여
- 디렉토리에 sticky bit가 설정되면 이 디렉토리에는 누구나 파일 생성 가능
- 파일을 생성한 계정으로 파일 소유자 설정, 他 사용자가 생성한 파일은 삭제 불가
- 디렉토리에 대한 권한
r : 디렉토리 내용 읽기 가능
w : 디렉토리에 파일 생성 가능
x : 디렉토리에 이동 가능
- 부여 방법 : chmod 1<숫자모드 3자리> <디렉토리명> ex) chmod 1777 temp
기타 실행권한이 t로 변경 ex) drwxrwxrwt
- sticky bit가 설정된 대표적 디렉토리: /tmp
2. shell 특수문자
shell 환경에서 사용자가 명령 입력시 편리한 입력을 도와주는 특수문자 제공
특수문자별 기능
wildcard 문자
- (곱하기 때 쓰는 별표) : 임의의 문자열, 모든 문자 집합 ex) ls -l sample*
삭제 명령에 적용 시 주의해서 사용
- ? : 임의의 문자, 한 문자 ex) ls -l sample?, 두 글자 이상 하려면 그 개수만큼 ? 추가
삭제 명령에 적용 시 주의해서 사용
- 정규 표현식 (Regular Expression) : 문자에 대한 표현 방법, 기호를 이용해서 문자 표현 -> 문자 추출
;
명령을 연결해서 실행, 여러개의 명령어를 연속해서 실행시 사용, 명령 연결
&&
&& 왼쪽 명령어의 실행이 정상적으로 실행 (error가 없는 경우) 되었을 때 오른쪽 명령어 실행,
명령 실행 결과에 따라 다른 명령 수행 (조건에 대한 동작)
- error : 명령이 정상적으로 수행 불가능한 경우 더이상 명령 실행 X, error 메세지 출력 후 종료
redirection
출력 or 입력 방향을 변경하는 목적으로 사용, 방향 전환
표준 입출력 장치
특별한 장치 지정 없이 바로 사용 가능한 기본 장치
- 표준 입력 장치 : stdin (standard input), 기본 입력 장치, 키보드가 해당, 정수 0으로 식별
- 표준 출력 장치 : stdout (standard output), 기본 출력 장치, 모니터가 해당, 정수 1로 식별
- 표준 에러 표시 장치 : stderr (standard error), 기본 에러 메시지 표시 장치, 모니터가 해당, 정수 2로 식별
Linux shell은 표준 입력 장치 (stdin, 0)로부터 입력받고 표준 출력 장치 (stdout, 1)로 출력, error 발생 시 표준 에러 표시 장치 (stderr, 2)에 error 메세지 출력
>
- 왼쪽 명령의결과를 > 오른쪽 방향의 장치나 파일로 출력방향 변경
- ' > ' 오른쪽에 파일명을 지정하면 항상 해당 파일을 새로 생성 (create)
>>
- 왼쪽 명령의 결과를 >> 오른쪽 방향의 장치나 파일로 출력 방향 변경
- 만약 같은 이름의 파일이 있다면 기존 파일에 내용 추가 (append)
장치번호>
해당 장치로 출력될 내용에 대한 방향 전환
- 명령 1> 파일 : 표준 출력 장치를 사용하는 출력 결과에 대한 방향 전환, 일반 명령 > 파일과 유사
예) cat /etc/hosts 1> result : /etc/hosts 출력 결과 (표준출력장치)를 result로 방향 전환,
cat /etc/hosts > result와 같은 표현
- 명령 2> 파일 : 표준 에러 표시 장치를 사용하는 출력 결과 (error message)에 대한 방향 전환
예) cat sample 2> result : cat 명령에 대한 정상 출력은 표준출력장치에 출력, error 발생 시 error message는 result 파일로 방향 전환
장치번호 응용
ls > ls.out 2> ls.err 또는 ls 1> ls.out 2> ls.err
ls 명령에 대하여 정상 작동결과는 ls.out , 에러 발생시 결과는 ls.err에 저장
ls > ls.out 2> /dev/null
/dev/null : null 장치 의미, 이 장치로 전달하면 그 내용은 그냥 소멸 (쓰레기통 같은 역할)
cat /etc/hosts > result 2>&1
- 여기서의 & (and)는 결과 구분 없이 다 담으려는 의미
- 명령 전체 출력 결과 (정상적인 결과, 에러 결과 모두)를 result에 저장
cat > 파일
- 표준 입력 장치로부터 입력받은 결과를 파일에 저장
- 간단하게 파일 생성 (새로운 파일 생성) 하는 방법
- 입력 종류는 Ctrl + D
- 이 방법은 기존 파일에 대한 수정은 불가능, 오로지 입력된 내용으로만 파일 생성
- 내용 편집은 불가능
<
< 오른쪽 내용을 < 왼쪽으로 방향 전환
pipe ( | 수직 바, 키보드 enter 위의 키 )
프로그램 실행 결과를 전달 받는 목적 = 프로세스 통신
- 특정 명령에 대한 수행결과를 기반으로 2차 가공 동작을 수행할 때 많이 사용
- 명령 1|명령 2 : 명령 1의 실행결과 (출력)를 | (pipe)를 통해 명령 2에 입력
예시)
- cat /etc/services | more => /etc/services 파일 내용을 | (pipe)를 통해 more 명령에 전달하여 동작
- cat /etc/hosts | wc (word count) => /etc/hosts 파일 내용을 pipe( | )를 통해 wc 명령에 전달시켜 해당 파일 내용 글자 수 세기
3. 프로세스 관리
프로그램 실행
- 실행할 프로그램 파일 (binary 파일)을 메모리에 load; IO device -> Memory
- 로드된 프로그램 코드 중 프로그램 시작점을 찾아서 동작; Memory -> CPU
- 프로그램 동작; CPU <-> Memory 간 지속적 읽기/쓰기
3.1 프로그램 코드 : 동작 절차 / 데이터 : 동작 절차상 필요한 값, 처리 결과
- 프로그램 종료점을 만나면 프로그램 종료; Memory에 있던 프로그램 코드는 삭제 (사용 x)
프로그램과 프로세스
- Linux shell 명령 입력 = 프로그램 실행
- Linux는 여러 프로그램을 동시 실행 가능 => Multi Tasking (Multiprocessing)
- Linux에서는 실행중인 프로그램을 프로세스로 지칭, Kernel의 작업관리자에 의해 관리됨
프로그램 (Program) : 보조기억장치에 저장된 실행가능한 파일
프로세스 (Process) : 메모리 상에서 동작중인 프로그램
ls -lF /usr/bin/ls의 결과에 나오는 /usr/bin/ls*가 그냥 프로그램이면
/usr/bin/ls -lF 명령어 입력으로 나오는 결과물은 이제 프로세스가 되는 셈
4. TIF
어제까지는 그럭저럭 따라갈만 했는데, 오늘부터, 그중에서도 특히 redirection에서 갑자기 너무 정신이 없어졌다. 그래도 이해 자체가 완전히 불가능한 것은 아니었고, 어찌저찌 겨우 받아들이긴 했지만 여전히 혼란스럽긴 하다. 아마 현업에서 널리 쓰이는 개념일까? 내 것으로 완전히 만들려면 시간이 많이 필요해 보인다.