나의 IT일지
링크와 쉘 본문
링크
리눅스에선 파일과 디렉토리는 inode를 통해 관리된다. inode란 현재 사용중인 파일 정보를 유지하는 구조체로, 파일이나 디렉토리에 접근하는 경우, 해당 파일/디렉토리의 inode를 바탕으로 파일을 참조한다.
- inode 구성
- ls -il [디렉토리 경로] : 해당 디렉토리에 있는 파일 /디렉토리의 inode number를 포함한 inode를 출력
- [inode number] [유형] [허가권] [링크 수] [UID] [GID] [용량] [생성 날짜] [생성 시간] [파일/디렉토리명]
- inode number : 파일 / 디렉토리 고유번호
- 유형 : 해당 데이터의 타입 ( - : 파일, d : 디렉토리, l : 심볼릭 링크 파일, b : 장치파일)
- 허가권 : 해당 파일 / 디렉토리에 적용시킬 수 있는 권한 (r : 읽기, w : 쓰기, x : 실행(파일) / 접근(디렉토리))
- 링크 수 : 해당 inode를 사용하는 파일의 수
- UID, GID : 해당 파일 / 디렉토리를 가지고 있는 계정, 그룹
데이터에는 고유번호인 inode Number가 부여되며, inode Number를 통해 파일과 디렉토리가 관리된다. 그리고 inode Number를 통해 파일 링크를 할 수 있는데, 원본 파일를 지정하는 포인터를 생성하는 심볼릭 링크와 같은 inode Number를 지정하는 파일을 생성하는 하드 링크가 있다.
- 하드링크
- 같은 inode를 공유하는 링크 방식
- ln [원본 파일경로 ] [링크 파일 경로] : 원본 파일과 하드링크된 링크파일 생성
- 파일만 링크가 가능하며, 원본 파일 삭제를 하더라도 해당 하드 링크 파일의 데이터는 보존된다.
- 원본 파일과 링크 파일의 inode가 동일해기에, 링크 파일 권한 변경시 원본 파일 권한과 링크 파일 권한이 변경된다.
- 같은 inode를 사용하기에 링크 수가 1 추가된다.
- 같은 inode를 공유하는 링크 방식
- 심볼릭 링크
- 서로 다른 inode를 사용하는 링크 방식
- ln -s [원본 파일경로 ] [링크 파일 경로] : 원본 파일과 심볼릭 링크된 링크파일 생성
- 파일 / 디렉토리 링크가 가능하며, 원본파일이 삭제되는 경우 심볼릭 링크 파일의 데이터는 삭제된다.
- 원본 파일과 링크파일의 inode가 다르며, 링크 파일 권한 변경시 원본 파일 권한이 변경된다.
- 심볼릭 링크 파일이기에 유형을 " l "이 되며, 권한은 777이 된다.
- 서로 다른 inode를 사용하는 링크 방식
쉘
쉘이란 사용자가 kernel과 의사소통할 수 있도록 연결해 주는 명령어 도구로, 사용자의 명령어를 OS가 인지 할 수 있도록 번역한다. 그래서 OS에 진입할 때에는 쉘을 통해 로그인 정보를 kernel에게 전달하게 되고 해당 kernel에서 로그인 정보를 비교해서 로그인의 유무를 판단한다. 이때, 사용자마다 사용하는 쉘은 /etc/passwd 파일을 통해 확인 할 수 있다.
- 쉘 목록 (/etc/shells 파일과 chsh -l 명령어를 통해 확인이 가능)
- /bin/sh : 복구쉘(커널쉘) 본 쉘 → 가장 기본적인 기능만 있는 쉘
- /bin/ksh : unix 기본 쉘
- /bin/bash : linux : 전용 응용 쉘 ( ksh+sh ) → 리차드스톨만 발명
- /bin/dash : 데비안전용 쉘
- /bin/csh : c프로그램 전용 쉘 → 개발자들이 주로 사용하며, 컴파일에서 오류가 적음
- /bin/tcsh : csh확장 쉘
- /sbin/nologin : 시스템 쉘 → 시스템 계정이 로그인 되지 않게 하기 위함
- /bin/zsh : 칼리 쉘 (bash+ksh+tcsh)
이때, 쉘 이름을 통해서도 쉘을 변경이 가능하며, 이전 사용했던 쉘의 설정 내용중 전역설정을 제외한 설정내용을 변경한 쉘에서 사용할 수 없다. 추가적으로, chsh 명령어을 통해 영구적으로 변경이 가능하다.
쉘 구동 순서
- csh의 구동순서
- /etc/csh.cshrc : 모든 csh을 대상으로 실행하는 전체 설정 환경 파일
- /etc/csh.login : 로그인을 할때만 실행하는 csh 설정 환경 파일
- home/sevas/.cshrc : 해당 계정에만 적용되는 csh 설정 환경 파일
- bash의 구동 순서
- /etc/profile : 쉘을 시작할 때 모든 쉘을 대상으로 실행하는 전체 설정 환경 파일
- ~[계정 명]/.bash_profile : 쉘이 시작할 때 계정의 bash 쉘을 대상으로 설정하는 개인 설정 환경파일
- ~[계정 명]/.bashrc : 쉘을 적용할 때 계정의 bash 쉘을 대상으로 설정하는 개인 설정 환경파일
- /etc/bashrc : 쉘을 적용할 때, 모든 bash 쉘을 대상으로 실행하는 전체 설정 환경 파일
시스템 환경 변수
- echo : 변수 내용 출력
- echo "변수" : 변수에 저장되어 있는 값 출력
- echo '변수' : 변수를 출력
- env : 시스템 환경 변수 확인
- $ : 변수 호출 (대문자로만 설정 가능)
- USER : 해당 계정 변수 호출
- HOME : 해당 계정 홈디렉토리 변수 호출
- SHELL : 해당 계정 쉘 변수 호출
- PWD : 해당 계정이 위치한 디렉토리 호출
- PATH : 명령어를 실행하기 위한 base경로 → 단축 경로 설정
- PS1 : 1차 명령 프롬프트(쉘이 사용자의 명령을 수령할 수 있다는 표시) 형식 변수
- PS2 : 2차 프롬프트 변수
- DISPLAY : GUI에서 프로그램 실행 시 출력되는 창
- LOGNAME : 로그인 이름
- HISTFILE : 히스토리 파일의 절대 경로
- HOSTNAME : 시스템의 호스트명
- hostname : 시스템의 호스트 명 확인 명령어
- hostname [변경할 호스트 이름] : 호스트 이름 변경 → 일시적 설정
- hostnamectl set-hostname [변경할 호스트 이름] : 호스트 이름 변경 → 영구적 설정
- hostname : 시스템의 호스트 명 확인 명령어
- LANG : 해당 계정에서 지원되는 언어
- MAIL : 도착한 메일이 저장되는 경로
- 지역변수 : 쉘간 변수 공유 불가능
- 생성 : 변수 = "값"
- 확인 : set | grep [변수]
- 삭제 : unset 변수
- 전역 변수 : 쉘간 변수 공유 가능
- 생성 : export 변수 = "값"
- 확인 : set | grep [변수], export | grep [변수]
- 삭제 : unset 변수
- 변수 치환 : 원래 변수를 유지하면서 추가적으로 변수를 설정하는 것
- 기존 환경 변수 = "값" : 기존 환경 변수에 해당 값으로 변경
- ex) PATH=$PATH:[경로] → 단축경로에 경로 추가
- ex) PS1=[내용] : 1차 프롬프트 내용 바꾸기 ( [\u@\h \W]\$ → 프롬프트 기본 내용)
- ex) PS2=[내용] : 2차 프롬프트 내용 바꾸기
- 기존 환경 변수 = "값" : 기존 환경 변수에 해당 값으로 변경
형식 | 설명 | 형식 | 설명 |
\u | 현재 사용자명 표시 | \$ | 현재 사용자의 권한 표시 (root(#),사용자($)) |
\h | 호스트명 표시 | \H | 도메인명 표시 |
\w | 프롬프트 현위치 절대경로로 표시 | \W | 프롬프트 현위치 상대경로 표시 |
\t | 24시간 형태로 표시 | \T | 12시간 형태로 표시 |
\d | '요일 월 일' 형태로 날짜 표시 | \@ | 12시간 형태의 시간에 오전/오후를 추가해서 표시 |
\s | 쉘이름 표시 | \\ | \를 표시 |
bash의 기능
- history
- bash에서 입력 후 실행했던 모든 명령어들을 "/root/.bash_history"에 저장
- history : 입력한 명령어 출력
- !! : 가장 최근 명령어 실행
- history +[숫자] (==history [숫자]) : 최근 명령어중 숫자의 갯수만큼 출력
- ![번호] : 번호열 명령 실행
- ![명령어] : 특정문자가 들어간 가장 최근 명령 실행
- history -c : history 내용 삭제
- ^[문자열1]^[문자열2] : 문자열1을 문자열2로 치환
- !-n : 최근명령어에서 n값을 뺀 번호 명령어
!?[문자열] : 문자열이 가르키는 최근 명령어
- bash에서 입력 후 실행했던 모든 명령어들을 "/root/.bash_history"에 저장
'정보보안' 카테고리의 다른 글
디스크와 파일 시스템 (0) | 2023.06.22 |
---|---|
NCS)관리적 보안 구축 (0) | 2023.06.21 |
특수 권한과 권한 제어 (0) | 2023.06.19 |
권한 적용 (0) | 2023.06.16 |
리눅스 계정과 권한 (0) | 2023.06.15 |
Comments