
우분투 파일 시스템은 파일과 디렉터리의 계층형 구조(Tree)로 구성
최상위에 루트 디렉터리(/)를 하나 두고 그 아래에 디렉터리나 파일을 배치
작업 디렉터리: 사용자가 우분투에 접속하여 현재 사용하고 있는 디렉터리를 의미하는 것으로 현재 작업 중인 디렉터리는 점(.)으로 표시되고 현재 작업 중인 디렉터리의 위치를 상세하게 확인하기 위해서는 pwd 명령을 사용
상위 디렉터리: 자신을 포함하고 있는 디렉터리로 .. 으로 표시
홈 디렉터리: 각 사용자에게 할당되는 디렉터리로 사용자 계정을 처음 만들 때 지정해 주는 것으로 각각의 사용자 별로 홈 디렉터리를 지정하는데 ~ 로 표시
기본적으로 제공되는 디렉터리
ls -F // 는 해당 파일이 디렉터리임을 @ 는 심볼릭 링크임을 의미/ 로 끝나는 것은 디렉토리
루트 계정에 제공되는 디렉터리
/dev: 디바이스 파일이 배치되어 있는 디렉터리/home/media: DVD/CD 나 USB 와 같은 외부 장치를 연결하는 디렉터리/etc: 리눅스 설정 파일이 위치하는 디렉터리/opt: 추가 패키지가 설치되는 디렉터리/root: root 계정의 홈 디렉터리/sys: 리눅스 커널과 관련있는 파일이 저장된 디렉터리/usr: 기본 실행 파일 과 라이브러리 파일, 헤더 파일 등이 저장되는 디렉터리/boot: 부팅에 필요한 커널 파일이 저장된 디렉터리/lost+found: 파일 시스템에 문제가 발생하여 복구할 경우 문제가 되는 파일이 저장되는 디렉터리/mnt: 파일 시스템을 임시로 마운트하는 디렉터리/proc: 프로세스 정보 등 커널 관련 정보가 저장되는 디렉터리/run: 실행 중인 서비스와 관련된 파일이 저장되는 디렉터리/srv: FTP나 Web 등 시스템에서 제공하는 서비스의 데이터가 저장되는 디렉터리/tmp: 시스템 사용 중에 발생하는 임시 데이터가 저장되는 디렉터리로 이 디렉터리에 있는 파일은 재시작하면 모두 삭제됨/var: 시스템 운영 중에 발생하는 데이터나 로그 등 내용이 자주 바뀌는 파일이 저장되는 디렉터리/) 위치부터 시작하는 경로/ 로 시작/ 이외의 문자로 시작..
리눅스에서 모든 처리 과정은 파일 단위로 이루어짐
파일
파일 이름
I-node
Index Node 라고 불림. 파일을 기술하는 디스크 상에서의 데이터 구조를 의미
파일의 데이터 블록이 디스크 상의 어느 주소에 위치하고 있는가에 대한 정보를 기록하기 위해 사용
파일을 생성 → I-node의 link가 0인 위치에 I-node를 생성하고 정보를 저장한 다음 link의 값이 1의 위치로 이동
I-node에 저장된 정보
- 파일의 종류
- 파일의 소유권 - 사용자(소유자)와 그룹
- 파일의 액세스 모드
- 파일의 타임스탬프(파일 갱신일)
우분투에서 파일을 생성하기 위해서는 파일의 데이터를 저장하기 위한 디스크 내의 공간을 먼저 확보해야 하는데 이때 파일이 저장될 주소에 대한 정보를 기록하기 위해 I-node는 각각의 파티션마다 0 부터 시작하는 정수의 형태로 고유의 식별 번호를 가짐
데이터 블록

file [옵션] [파일 및 디렉토리 경로]-C: 매직 파일의 포맷을 검사하는 옵션-f 목록파일: 많은 파일들을 한번에 확인하기 위하여 파일 리스트인 목록 파일을 만들어서 그 안에 입력된 모든 파일을 한꺼번에 확인하는 옵션m 매직파일 : 지정된 매직 파일로 대상 파일을 확인cd [디렉터리]cd 명령만 사용하거나 cd ~./../탭 키를 이용한 자동 완성 가능ls [옵션] [디렉터리(파일)]-a: 숨김 파일을 포함하여 모든 파일의 목록을 출력-d: 디렉터리 자체의 정보를 출력-i: 첫 번째 행에 I-node 번호를 출력-l: 파일의 상세 정보를 출력-A: . 와 .. 를 제외한 모든 파일 목록을 출력-F: 파일의 종류를 표시(*: 실행 파일, /: 디렉터리, @: 심볼릭 링크)-L: 심볼릭 링크 파일의 경우 원본 파일의 정보를 출력-R: 하위 디렉터리의 목록까지 출력
하드 링크 수는 연결된 디렉터리의 개수로 파일은 무조건 1이고, 디렉터리는 기본적으로 2
하위 디렉터리는 연결된 상위 디렉터리의 개수 만큼 링크 수 증가
유사한 명령
dirvdirmkdir [옵션] [디렉터리]-prmdir [옵션] [디렉터리]-p중단은 qj, 방향키(아래): 한 행 씩 다음 행으로 스크롤k, 방향키(위): 한 행 씩 이전 행으로 스크롤Space Bar, CTRL + f: 다음 화면으로 이동CTRL + b: 이전 화면으로 이동q: 종료명령 [옵션] [파일]-f 옵션을 이용하면 실시간으로 변경되는 내용을 출력할 수 있음-숫자 옵션을 이용하면 숫자 만큼의 행을 출력하는데 숫자 옵션을 생략하면 10개의 행을 출력tail -f 로그파일경로 를 사용cp [옵션] [파일이나 디렉토리 경로 1] [파일이나 디렉토리 경로 2]
앞의 파일이나 디렉토리를 뒤의 경로에 복사
옵션
-i-r옵션 없이 복사할 때 이미 존재하는 파일이나 디렉토리라면 덮어씌움
여러 개의 파일을 한꺼번에 복사할 수 있는데, 이 경우 마지막 경로에 복사가 되는데 반드시 디렉토리 경로 이어야 함
cp /etc/hosts text1 - /etc/hosts 파일을 현재 디렉터리의 text1 이라는 파일로 복사

mv [옵션] [파일1 (디렉터리 1)] [파일2 (디렉터리 2)]
-imv text1 data1
rm [옵션] [파일 또는 디렉토리]
-i-rln [옵션] <링크할 파일> <링크 이름>ln data1 dat1.ln-s 옵션을 추가touch 파일 경로텍스트에서 특정 문자열을 검색할 때 사용하는 명령.
정규 표현식을 이용하여 복잡한 검색도 가능
grep [옵션] [패턴] [파일]
-i : 대소문자 모두 검색-l : 지정한 패턴이 포함된 파일명을 출력-n : 행 번호를 출력-v : 패턴이 포함되지 않은 행을 출력-r : 하위 디렉토리까지 검사-w : 일치하는 단어가 있을 때만 조회-c : 개수확장
# 현재 실행 중인 포트 확인
netstat -an | grep "LISTEN"
# 실시간으로 수정되는 로그파일에서 특정 단어 강조
tail -f access.log | grep --color "404"
# 컨텍스트 매핑
# log.txt에서 Error를 찾아서 그 뒤(A)/앞(B)/앞뒤(C)의 3줄 출력
grep -A / -B / -C 3 "Error" log.txt
grep "^Start" file.txt
grep "End$" file.txt
grep "[0-9]" file.txt
find [경로] [검색 조건] [동작]-name filename: 파일명으로 검색-type 파일 종류: 파일 종류로 검색-user loginlD: 지정한 사용자가 소유한 모든 파일을 검색-group 그룹이름: 그룹을 기준으로 검색-perm 접근 권한: 지정한 사용 권한과 일치하는 파일을 검색-size: 크기로 검색-newer: 수정 시간을 기준으로 특정 파일보다 더 최근에 수정된 파일을 검색-exec 명령 {} \; :검색된 파일에 명령을 실행-ok 명령 {} \; : 사용자의 확인을 받아서 명령을 실행-print : 검색된 파일의 절대 경로명을 화면에 출력 – 기본 동작-ls : 검색 결과를 긴 목록 형식으로 출력-type : 타입으로 찾기(파일 형식)-newer : 참조 파일보다 더 최근에 수정된 파일 검색-newermt : 특정 날짜 이후에 수정된 파일 검색-neweraa : 파일 접근 시간 기준으로 검색find . -newer reference1.txt ! -newer reference2.txt# 파일을 찾아서 삭제
find /tmp -user user1 -exec rm {} \;
# 예: 홈 디렉토리에서 확장자가 swp인 모든 파일을 삭제
find ~ -name "*.swp" -exec rm {} \;
# -------
find /tmp -user user1 -ok rm {} \;

wc [옵션] [파일 경로]-l : 라인 수-w : 단어 수-c : 바이트 수-m : 문자 수-L : 가장 긴 줄의 길이sort [옵션] [파일 경로]-r: 내림차순으로 정렬(reverse)-n: 숫자 크기 순으로 정렬(numeric sort)-k: 특정 필드를 기준으로 정렬(key)-u: 중복된 행을 제거(unique)-t: 필드 구분자를 지정(field separator)-M: 월 이름을 기준으로 정렬(month sort)-b: 공백을 무시하고 정렬(ignore leading spaces)awk 옵션 'pattern {action}' file-F 구분자sed [옵션] 스크립트 [파일]-n: 기본 출력을 억제-i: 파일을 직접 수정-r: 확장된 정규 표현식을 활성화-e: 여러 sed 명령을 순차적으로 실행-f FILE: 스크립트를 파일에서 읽어오기ls -lgroups [사용자명]rwxchmod [옵션] 권한 [파일 또는 디렉터리 경로]
-R
사용자 카테고리 문자
연산자 기호
접근 권한 문자
8진수 3자리로 설정
첫번째 자리 4가 읽기
두번째 자리 2가 쓰기
세번째 자리 1이 실행
모든 권한은 7
읽기와 쓰기 권한은 6
숫자 환산


# 모든 사용자에게 읽기 권한만 부여
chmod 444 test.txt
# 그룹 사용자에게는 모든 권한을 부여
chmod 474 test.txt
touch adam.txt
mkdir temp
# >> -rw-rw-r-- (생략) adma.txtrw-rw-rrwxrwxr-xumask [옵션] [마스크 값]
옵션
-Smask → 777에서 접근권한을 뺀 값
적용 과정


📌 기본 보안 필터(
mask)의 역할
- 파일이나 디렉터리가 생성될 때마다 권한을 직접 입력하지 않음.
- 이때 시스템이 ‘최대 권한에서 이정도는 빼고 생성’ 을 정해둔 필터가 mask
- 최대 권한: 파일은 666, 디렉토리는 777
- 비교
chmod: 이미 만들어진 파일의 수술umask: 태어날 때부터 갖게 되는 기본 설정
설정
umask 077여러 가지 마스크 값

umask 는 4자리 수!!
- 특수 접근 권한 / 소유자 권한 / 그룹 권한 / 기타 사용자 권한
SetUID: 4x 자리가 s로 나타나게 됨SetGID: 2sticky bit: 1x가 t로 표기가 됨/tmpsystemd 와 kthreadd 이다.systemd (PID 1)kthreadd (PID 2)init vs systemd
systemd or init)가 고아 프로세스의 새로운 부모 프로세스가 되어 고아 프로세스가 작업을 마치고 종료될 수 있게 함프로세스 테이블 목록에 남아있는 경우가 있는데 이러한 자식 프로세스가 좀비 프로세스SIGCHLD 시그널을 부모 프로세스에 보내어 부모 프로세스가 자식 프로세스를 정리하도록 하거나 부모 프로세스 자체를 종료해야만 함좀비 프로세스는 고아 프로세스가 되고 새로운 부모인 1번 프로세스(systemd)는 주기적으로 자식 프로세스의 종료 정보를 확인하여 정리ps [옵션]
유닉스 옵션 - 묶어서 사용할 수 있고, - 로 시작
-e: 시스템에서 실행 중인 모든 프로세스의 정보를 출력-f: 프로세스에 대한 자세한 정보를 출력-u uid: 특정 사용자에 대한 모든 프로세스의 정보를 출력-p pid: pid로 지정한 특정 프로세스의 정보를 출력BSD 옵션 - 묶어서 사용할 수 있고, - 로 시작하지 않음
a: 터미널에서 실행시킨 프로세스의 정보를 출력u: 프로세스 소유자 이름, CPU 사용량, 메모리 사용량 등 상세 정보를 출력x: 시스템에서 실행 중인 모든 프로세스의 정보를 출력GNU 옵션 - —- 로 시작
--pid PID 목록 : 목록으로 지정한 특정 PID 정보를 출력터미널에서 실행한 프로세스 상세 정보 출력

pgrep [옵션] [패턴]
-x: 패턴과 정확히 일치하는 프로세스의 정보를 출력-n: 패턴을 포함하고 있는 가장 최근 프로세스의 정보를 출력-u 사용자 이름: 특정 사용자에 대한 모든 프로세스를 출력-l: PID와 프로세스 이름을 출력-t term: 특정 단말기와 관련된 프로세스의 정보를 출력프로세스에 무언가 발생했음을 알리는 간단한 메시지
리눅스에서 지원하는 시그널 확인 → kill -l

kill [-signal] PID
2915📌
sudo(Substituted User do)vssu -
su -
- 사용자 전환
- 누가 했는지 추적이 어려움(사용자가 활동한 로그와 구별이 안 됨)
sudo
- 권한 대행
- 추적 용이(권한을 빌린 사용자별로 로그가 수집이 됨)

& 를 붙여주면 됨백그라운드 작업을 모두 보여주는데 특정 작업 번호를 지정하면 해당 작업의 정보만 출력하는 bash의 내부 명령
jobs [%작업 번호]
%번호: 해당 번호의 작업 정보를 출력%+ 또는 %%: 작업 순서가 +인 작업 정보를 출력%-: 작업 순서가 -인 작업 정보를 출력출력 정보

