2023.10.30 TIL
user1@myubuntu:$ ls -l /etc/hosts
-rw-r--r-- root root 223 November 8 23:13 /etc/hosts
-
: 일반 파일d
: 디렉토리리눅스에서 모든 파일은 소유자가 있다.
ls -l
명령에서 출력되는 그룹명은 파일이 속한 그룹groups
groups [username]
권한 | 파일 | 디렉토리 |
---|---|---|
read (r ) | 파일을 읽거나 복사 가능 | ls 명령으로 디렉토리 목록 보기 가능(옵션은 execute 권한이 있어야함) |
write (w ) | 파일을 수정, 이동, 삭제 가능 (디렉터리에 write 권한이 있어야함) | 파일 생성, 삭제 가능 |
execute(x ) | 파일 실행 가능 | cd 명령 사용 가능 |
-rw-r--r--
의 의미
-
→ 파일의 속성 -
→ 일반 파일d
→ 디렉토리rw-
→ 소유자, read 가능, write 가능, execute 불가r--
→ 그룹, read 가능, write 불가, execute 불가r--
→ 기타 사용자, read 가능, write 불가, execute 불가chmod [권한표기] test.txt
-R
옵션 → 하위 디렉토리까지 모두 변경
사용자 카테고리
u
→ 파일 소유자g
→ 소유자가 속한 그룹o
→ 기타 사용자a
→ 전체 사용자연산자 기호
+
→ 권한 부여(추가)-
→ 권한 제거=
→ 권한 설정접근 권한 문자
r
→ 읽기 권한w
→ 쓰기 권한x
→ 실행 권한u+w
→ 소유자에게 write 권한 부여
u-x
→ 소유자의 execute권한 제가
g+w
→ 그룹에 write권한 부여
o-r
→ 기타 사용자의 read권한 제거
g+wx
→ 그룹에 write, execute 권한 부여
+wx
→ 모든 사용자에게 umask에 따라 권한 부여
a+rwx
→ 모든 사용자에게 read, write, execute 권한 부여
u=rwx
→ 소유자에게 read, write, execute 권한 설정
go+w
→ 그룹과 기타사용자에게 write 권한 부여
u+x, go+w
→ 소유자에게 execute권한 부여하고 그룹과 기타사용자에게 write 권한 부여
chmod 644 a.txt
→ a.txt에 대해 rw-r--r--
로 권한 설정
777
== 111111111 → rwxrwxrwx
755
== 111101101 → rwxr-xr-x
666
== 110110110 → rw-rw-rw-
555
== 101101101 → r-xr-xr-x
644
== 110100100 → rw-r--r--
700
== 111000000 → rwx------
640
== 110100000 → rw-r-----
400
== 100000000 → r--------
7
== 111 → rwx
6
== 110 → rw-
5
== 101 → r-x
4
== 100 → r--
3
== 011 → -wx
2
== 010 → -w-
1
== 001 → --x
0
== 000 → ---
파일이나 디렉토리가 생성될 때 자동으로 설정되는 기본 접근 권한이다.
644
, rw-r--r--
755
, rwxr-xr-x
umask
→ 기본 접근 권한을 출력
umask [마스크 값]
→ 파일이나 디렉터리 생성 시 부여하지 않을 권한 지정
umask 022
→ ----w--w-
, 그룹과 기타사용자에게 w 권한 부여하지 않음
umask 077
→ 000111111
, 그룹과 기타사용자에게 rwx 권한 모두 부여하지 않음
rw-rw-rw-
rwxrwxrwx
110 110 110
111 111 111
000 000 010
000 000 010
110 110 100
111 111 101
664
775
022
→ 그룹, 기타사용자는 read만 가능077
→ 그룹, 기타사용자는 접근권한 모두 제거027
→ 그룹은 read만 가능, 기타사용자는 접근권한 모두 제거접근 권한은 원래 4자리 → 생략된 맨 앞자리는 특수 접근 권한이다.
0
→ 일반적인 접근 권한1
→ Sticky bit2
→ SetGID4
→ SetUID해당 파일이 실행되는 동안에는 파일을 실행한 user의 권한이 아니라 파일 소유자의 권한으로 실행된다.
• 설정 : chmod 4755 set.exe
설정된 후 : -rw**s**r-xr-x
→ 소유자의 실행 권한에 ‘s
'가 표시
passwd
명령은 SetUID가 설정되어 있기 때문에 소유자인 root 권한으로 실행되어 암호변경이 가능하다.
해당 파일이 실행되는 동안에는 파일 소유 그룹의 권한으로 실행된다
• 설정 : chmod 2755 set.exe
이 비트가 디렉토리에 설정되어 있으면 그 디렉토리에는 누구나 파일 생성이 가능하다
파일을 생성한 계정이 소유자로 설정되고,
다른 사용자가 생성한 파일은 설정 불가하다.
/tmp
디렉토리가 대표적
•설정 : chmod 1755 set.exe
접근 권한에서 1을 설정
설정된 후 : drwxrwxrw**t**
→ 소유자의 실행 권한에 ‘t
'가 표시
순서가 있는 Instruction set + Data 값
Hardware, CPU
PID라는 것을 별도로 가지고, 운영체제가 이를 이용해 프로세스를 구분힌다.
Parent-Child 관계로, 하나의 process는 다른 하나의 process를 생성할 수 있다.
$ ./99.exe
→ Bash(Parent Process) 가 99.exe(Child Process) 생성
Calling a system call
fork()
fork()
를 하는것System initialization
init
processinit
의 child로 만들어진다Parent process는 모든 resource와 권한을 child에게 물려준다.
Parent process는 child가 끝날때까지 기다리거나, parallel하게 실행된다.
Child가 parent의 address space를 복제한다.
fork()
system call각 PCB는 하나의 process를 대표한다.
Process의 모든 정보를 담고있다.
task_struct
→ PCB 정보 관리
CPU를 하나의 process에서 다른 process로 전환하는것
Administrative overhead
Context switch overhead는 Hardware support에 dependent
100s or 1000s of switches/s typically
cat /proc/stat
→ process 정보들 볼수있음
OS는 queue들의 collection을 가지고 있다 → system의 모든 process를 나타낸다
각 PCB는 현재 state에 따라 state queue에 들어가게 되고,
Process state가 바뀌면 해당 PCB는 queue들 사이를 왔다갔다하게 된다
fork()
exec()
int exec(char *prog, char *argv[])
prog
를 process의 address space에 loadexec()
은 새로운 process를 생성하는 것이 아닌, 현재 process를 다른 process로 변신시키는 것int main()
{
while(1) {
char *cmd = read_command();
int pid;
if ((pid = fork()) == 0) {
/* pope, redirection 등을 위한 stdin/stdout/stderr 처리*/
exec(cmd);
panic("exec failed");
} else {
wait (pid);
}
}
}
ps
→ 현재 실행중인 프로세스 목록 출력
🐚 UNIX (SVR4)
-e
→ 실행중인 모든 process의 정보 출력
-f
→ PPID, 터미널 번호, 시작 시간 등 process의 자세한 정보 출력
-u [uid]
→ 특정 사용자에 대한 모든 process의 정보 출력
-p [pid]
→ pid로 지정한 특정 process의 정보 출력
🐚 BSD
a
→ 터미널에서 실행한 process의 정보 출력
u
→ process 소유자 이름, CPU 사용량, memory 사용량 등 상세정보 출력
x
→ 시스템에서 실행중인 모든 process의 정보 출력
🐚 GNU
--pid [PID]
→ 목록으로 지정한 특정 PID의 정보 출력
TTY 값이 ?
→ Daemon으로 시스템이 실행한 process
보통 그냥 ps -ef
나 ps aux
나 같이 ps -ef aux
라고 쓴다
ps -ef | grep bash
→ bash에 대한 process 정보 출력
pgrep -x bash
→ 딱 bash인 process의 PID 출력
-x
→ 패턴과 정확히 일치하는 process의 정보 출력
-n
→ 패턴을 포함하고 있는 가장 최근 process의 정보 출력
-u [사용자명]
→ 특정 사용자에 대한 모든 process 출력
-l
→ PID와 process 이름 출력
-t term
→ 특정 단말기와 관련된 process의 정보 출력
ps -fp $(pgrep -x bash)
→ process의 상세 정보, 그중에서 bash의 정보만 출력
Process에 무언가 발생했음을 알리는 간단한 메세지
kill -l
→ 리눅스에서 지원하는 signal의 목록 출력
kill -9 1001
→ PID 1001번을 SIGKILL, 즉 강제로 종료한다
pkill man
→ PID를 몰라도, process의 명령 이름으로 process를 찾아 종료
top
→ 현재 실행중인 process에 대한 정보를 주기적으로 출력
htop
이 더 사용하기에 편라히고 좋음. 별도 설치 필요
Enter
, Space Bar
→ 화면을 즉시 다시 출력
h
, ?
→ 도움말 화면 출력
k
→ process 종료, 종료할 process의 PID를 물어봄
n
→ 출력하는 process의 개수를 바꿈
p
→ CPU 사용량에 따라 정렬하여 출력
q
→ top 명령 종료
M
→ 사용하는 메모리 크기에 따라 정렬하여 출력
u
→ 사용자에 따라 정렬하여 출력