1. ls -al vs ls -alh — 파일 목록 자세히 보기
- ls -al을 입력하면 파일 목록이 상세하게 나오고, ls -alh는 여기에 용량을 사람이 읽기 쉬운 단위(K, M, G 등)로 변환해서 더 상세하게 보여준다는 차이가 있음.
- ls -al 결과에서 각 항목이 의미하는 것 (왼쪽부터):
- 퍼미션 — 누가 읽고 쓰고 실행할 수 있는지
- 소유자 — 운영체제의 모든 파일에는 소유자가 있으며, 만든 사람이 곧 소유자가 됨
- 크기 — 파일이 물리적으로 차지하는 용량
- 생성/수정 시간
- 파일 이름
2. (곁가지) 트럭 적재량 비유 — 유닉스의 "블록(Block)" 단위 이해
- 나라별로 "1톤 트럭"이 실제로 실을 수 있는 무게가 다르다는 예시(일본 약 1.7~8톤, 미국 약 1.5톤, 한국 최대 2.5톤)를 들며, 정해진 규격 단위로만 움직인다는 개념을 설명함.
- 유닉스도 이와 비슷하게 블록(Block) 단위로 데이터를 이동시키며, 최소 I/O 단위가 미리 정해져 있음.
- 비유하자면, 물건은 1개씩 저장할 수 있어도 옮길 때는 컨테이너처럼 정해진 단위(예: 4개들이 컨테이너)로 묶어서 이동시키는 것과 같은 원리.
- 이런 I/O 단위 조정은 유닉스 엔지니어나 하드웨어에 조예가 깊은 전문가가 다루는 영역.
곁들인 조언: 직무 영역 구분
- 분야마다 관점이 다르므로, 예를 들어 애플리케이션 개발자가 데이터베이스 모델링을 함부로 하면 안 됨. 각자의 전문 영역을 존중하고 자기 분야를 깊게 아는 것이 중요하다는 조언.
3. 퍼미션(Permission)과 임의적 접근제어방식
- 파일마다 소유자와 퍼미션이 있고, 이렇게 운영되는 체계를 **임의적 접근제어방식(DAC, Discretionary Access Control)**이라고 함.
- 퍼미션은 항상 세 부류로 나뉘어 표시됨:
- **소유자(Owner)**의 접근 권한
- **그룹(같은 리눅스 그룹 유저)**의 접근 권한
- **그 외 모든 유저(Others)**의 접근 권한
- 권한의 종류는 읽기(r), 쓰기(w), 실행(x)이며, 실행 권한이 있어도 실제 프로그램 파일이 없으면 실행할 수 없음.
예시: .bash_history 파일
Code
-rw-------. 1 root root 924 6월 25 17:49 .bash_history
- 이 표시는 소유자(root)만 읽고 쓸 수 있고, 그룹과 기타 사용자는 아무 권한이 없음을 의미함.
소유자 파일에 대한 명령 실행 — "지시"와 "수행"의 구분
- 예: 사용자 A가 만든 파일의 소유자는 A. 이 파일을 옮기는 명령을 root와 A 둘 다 내릴 수 있지만, 실제로 파일을 옮기는 동작을 수행하는 주체는 **명령을 실행한 계정(A)**임.
- 비유: **root는 "지시"를 하고, A가 직접 "수행"**하는 것 — 마치 사장이 직원 A에게 "B에게 인수인계하라"고 지시했을 때, 실제 인수인계 작업은 A가 직접 해야 하는 것과 같은 구조.
4. 시스템 변경 작업과 문서화 — 라이브러리언(Librarian)의 역할
- 시스템 관리자는 문서(작업 근거)가 없으면 변경 작업을 하지 않는 것이 원칙. 문서 없이 임의로 작업하면 모든 책임이 작업자 본인에게 돌아감.
- **라이브러리언(Librarian)**이라는 직책은 "사서"라기보다는, 정보·데이터가 이전될 때 그 과정의 책임을 지는 사람을 의미하며, 보안상 중요한 역할.
- 국내에는 아직 이런 직책을 법적으로 명시한 사례가 드물지만, 유럽 등에서는 정보보안 부서 내 최고 책임자 하부 조직으로 존재하는 경우가 있음.
- 문서 이전, 데이터 전송 등의 작업은 이런 라이브러리언 체계에 맞춰 진행되는 것이 이상적.
- 참고: 규정이 엄격한 조직(오라클 등 설치 시)에서는 계정을 세분화해서 여러 개 만드는 것이 일반적이나, 이는 임의적 접근제어(DAC) 환경보다는 강제적 접근제어(MAC) 환경에서 더 중요하게 작용하는 개념.
5. 링크 파일 — 하드링크 vs 소프트링크
개념
- **소프트링크(심볼릭 링크)**는 쉽게 말해 윈도우의 **"바로가기(아이콘)"**와 같은 개념 — 원본을 가리키기만 할 뿐, 원본이 사라지면 무용지물이 됨.
- 하드링크는 실제 데이터(inode)를 공유하는 링크로, 실무에서 직접 만들어 쓸 일은 거의 없음.
- 소프트링크는 파일뿐 아니라 디렉토리에 대해서도 만들 수 있음.
명령어
- ln 원본 링크이름 → 하드링크 생성
- ln -s 원본 링크이름 → 소프트링크(심볼릭 링크) 생성
inode란?
- inode는 파일의 실제 물리적인 저장 위치를 나타내는 값.
- 하드링크로 연결된 파일들은 같은 inode 값을 공유함 (즉, 실제로 같은 데이터를 가리킴).
- 소프트링크는 원본과 다른 inode를 가지며, 원본의 경로만 기억하는 포인터 역할.
실습 예시로 이해하기
- 1.txt라는 파일을 만들고 내용으로 "aa"를 입력함. (cat 1.txt → "aa" 출력)
- ln 1.txt 2.txt 실행 → 2.txt는 1.txt의 하드링크로 연결됨 (같은 실제 데이터를 공유)
- ln -s 1.txt 3.txt 실행 → 3.txt는 1.txt의 소프트링크로 연결됨 (경로만 기억)
- rm 1.txt로 원본을 삭제하면:
- 2.txt는 여전히 "aa"를 출력함 (하드링크는 실제 데이터를 함께 소유하고 있으므로 원본 삭제와 무관하게 살아있음)
- 3.txt는 더 이상 "aa"를 출력하지 못함 (소프트링크는 원본 경로를 가리키기만 했는데, 그 원본이 사라졌으므로 깨진 링크가 됨)
- 만약 1.txt를 다시 살리면 3.txt는 다시 정상적으로 연결되어 "aa"를 출력하지만, 다시 1.txt를 지우면 3.txt는 다시 깨짐 — 이 과정을 통해 소프트링크는 원본 존재 여부에 완전히 의존한다는 것을 확인할 수 있음.
ls -al 결과로 구분하는 법
- 맨 앞자리가 -(일반 파일, 하드링크 포함)인지 l(소프트링크, symbolic link)인지로 구분 가능.
- 소프트링크는 터미널에서 보통 색깔이 다르게(강조되어) 표시됨.
- 소프트링크가 가리키는 원본이 사라지면 해당 링크 파일은 사실상 쓰레기(더미) 파일이 되어버릴 수 있음.
- 남아있는 파일을 지울 때도 일반(레귤러) 파일과 심볼릭 파일 사이에 차이가 있으므로 구분해서 다뤄야 함.
6. more / less — 화면 단위로 출력 제어
- more(또는 less)는 긴 출력 결과를 화면 단위로 잘라서 보여주는 명령어.
- 단독으로 쓰이는 경우는 적고, cat이 더 다양한 기능을 제공하기 때문에 cat을 더 자주 사용하는 편.
- 대신 파이프(|)와 함께 자주 쓰임.
7. 파이프(|) — 명령어를 연결하는 배관
- |(파이프)는 수도관·배관을 연결하듯, 앞에서 실행한 명령의 결과를 뒤 명령으로 이어서 넘겨주는 역할.
- 예: ls -al을 실행하면 화면에 결과가 주르륵 쏟아지는데, 이를 ls -al | more로 실행하면 한 화면씩 끊어서 보여줌.
8. grep — 정말 중요한 필터링 명령어
- grep은 원하는 글자(문자열)가 포함된 줄만 걸러서 보여주는 명령어.
- 사용법: command | grep [찾을 문자열]
- 예: ls -al | grep conf → 목록 중 "conf"라는 문자열이 포함된 줄만 출력됨.
- 예: env | grep [단어] → 환경설정 전체 목록 중 원하는 단어가 있는 줄만 골라서 볼 수 있음.
- 예: ls -al | grep 176 → "176"이라는 문자가 포함된 줄(2줄)만 출력되는 것을 확인 가능.
- 즉, 명령 결과가 많을 때 원하는 정보만 골라서 확인하고 싶을 때 매우 유용하게 쓰이는 필터.
- 참고: ls -al 자체는 파일 상세 정보와 숨김 파일까지 모두 보여달라는 뜻의 두 개의 단일 옵션(-a, -l)이 합쳐진 명령어임.
9. head, tail — 파일의 일부분만 출력
- head는 파일의 앞부분 10줄을, tail은 파일의 뒷부분 10줄을 출력.