[멋쟁이사자처럼부트캠프] 아.

[멋쟁이사자처럼부트캠프] 아.

파일 생성

1) 개념 및 특징

  • touch: 지정한 파일이 존재하지 않으면 크기가 0인 빈 파일을 생성하고, 이미 존재하는 경우 파일의 최종 수정 시간(타임스탬프)을 현재 시간으로 갱신합니다.
  • vi: 텍스트 편집기를 실행하여 파일을 생성하고 내용을 수정합니다.
  • 리눅스의 특징: 리눅스 시스템은 윈도우와 달리 파일 확장자(ex. .txt, .log)가 파일의 종류를 결정하지 않으며, 확장자가 없어도 정상적으로 파일을 생성하고 처리할 수 있습니다.

2) 문법

touch [파일명]
vi [파일명]

3) 실습 예제

# 확장자가 있는 파일과 없는 파일 생성
touch report.txt
touch logs

# 파일의 통계 정보 및 타임스탬프 확인
stat report.txt

# 기존에 존재하는 파일의 타임스탬프 갱신
touch report.txt

디렉터리 생성

1) 개념 및 문법

새로운 디렉터리(폴더)를 생성하는 명령어입니다. 한 번에 여러 디렉터리를 동시에 생성할 수 있습니다.

mkdir [옵션] [디렉터리명1] [디렉터리명2] ...

2) 주요 옵션

옵션 설명
-p 하위 디렉터리까지 계층적으로 한 번에 생성합니다. (Parent)
-v 디렉터리 생성 과정을 상세하게 출력합니다. (Verbose)

3) 실습 예제

# 1. 일반적인 디렉터리 생성 (동시 생성)
mkdir main sub

# 2. 기존에 동일한 이름의 파일(logs)이 존재할 경우 충돌 오류 발생
mkdir logs
# 출력: mkdir: cannot create directory ‘logs’: File exists

# 3. -v 옵션을 사용한 디렉터리 생성 과정 확인
mkdir -v logs2
# 출력: mkdir: created directory 'logs2'

# 4. -p 옵션을 이용한 계층적 디렉터리 생성 및 구조 확인
mkdir -p first/second/third
tree first

파일 및 디렉터리 복사

1) 개념 및 문법

파일 또는 디렉터리를 지정한 경로로 복사합니다. 원본 대상을 여러 개 지정하여 하나의 디렉터리로 한 번에 복사할 수도 있습니다.

cp [옵션] [원본] [대상_타겟]
cp [옵션] [원본파일1] [원본파일2] ... [목적지_디렉터리]

2) 주요 옵션

옵션 설명
-i 대상 파일이 이미 존재할 경우, 덮어쓸지 여부를 사용자에게 확인합니다. (Interactive)
-p 원본 파일의 속성(권한, 소유자, 그룹, 타임스탬프 등)을 그대로 유지하며 복사합니다. (Preserve)
-r 디렉터리를 복사할 때 하위 디렉터리와 파일을 포함하여 재귀적으로 복사합니다. (Recursive)

3) 실습 예제 (기본 복사)

# 파일을 현재 디렉터리에 다른 이름으로 복사
cp /etc/passwd ./users.txt

# 파일을 특정 디렉터리 내부로 복사
cp /etc/passwd ./logs2/users.txt

# 덮어쓰기 전 경고 메시지 확인
cp -i /etc/passwd ./users.txt

# 여러 파일을 특정 디렉터리로 복사
cp hello.txt users.txt first/

# 디렉터리를 복사하는 경우 (-r 옵션 필수)
cp -r logs2 first/

4) 실습 예제 (-p 옵션의 유효성 검증)

# 1. 일반 권한으로 복사 시 소유자 변경 확인
sudo cp users.txt u.txt
ls -l u.txt       # 소유자가 root로 변경됨

# 2. -p 옵션을 사용하여 원본 소유자 속성 유지
sudo cp -p users.txt u2.txt
ls -l u2.txt      # 원본 소유자(user1)가 그대로 유지됨

파일 및 디렉터리 이동 및 이름 변경

1) 개념 및 문법

파일이나 디렉터리의 위치를 이동하거나 이름을 변경할 때 사용합니다. 복사(cp)와 달리 원본이 보존되지 않습니다.

mv [옵션] [원본] [대상_타겟]

2) 주요 옵션

옵션 설명
-i 이동할 위치에 동일한 이름의 파일이 있으면 덮어쓸지 여부를 확인합니다.
-v 이동되는 파일의 과정을 상세히 출력합니다.
-n 대상 위치에 동일한 이름의 파일이 존재할 경우 덮어쓰지 않고 작업을 취소합니다. (No overwrite)
-u 원본 파일이 대상 파일보다 최신 버전(타임스탬프 기준)일 때만 이동을 실행합니다. (Update)

3) 실습 예제

# 실습을 위한 초기 환경 구축
mkdir -p dir1/dir2
touch dir1/a.txt dir1/dir2/b.txt c.txt

# 1. 파일 이동 (b.txt를 dir1 디렉터리로 이동)
mv dir1/dir2/b.txt dir1/

# 2. 와일드카드(*)를 이용한 다중 파일 이동
mv dir1/*.txt dir1/dir2/

# 3. 디렉터리 이동 (dir3 디렉터리 자체를 dir1 하위로 이동)
mkdir -p dir1/dir2/dir3
mv dir1/dir2/dir3 dir1/

# 4. 이름 변경 (동일 경로 내에서 파일명 변경)
mv dir1/dir3/a.txt dir1/dir3/aaa.txt

4) 옵션별 상세 실습 (-n 및 -u)

# 중복 파일이 있을 때 -n (덮어쓰기 금지) 작동 확인
touch dir1/dir2/a.txt dir1/dir3/a.txt
mv -n dir1/dir2/a.txt dir1/dir3/a.txt

# -u 옵션 설정을 위한 환경 구성
mkdir -p dir1/dir2 dir1/dir4
touch dir1/dir2/a.txt dir1/dir2/b.txt
touch dir1/dir4/a.txt dir1/dir4/b.txt

# [사례 1] 원본 파일(dir2/a.txt)을 최신 상태로 변경 후 이동 -> 이동 성공
touch dir1/dir2/a.txt
mv -u dir1/dir2/a.txt dir1/dir4/

# [사례 2] 대상 파일(dir4/b.txt)을 최신 상태로 변경 후 이동 -> 이동 차단(수행 안 됨)
touch dir1/dir4/b.txt
mv -u dir1/dir2/b.txt dir1/dir4/

파일 및 디렉터리 삭제

1) 개념 및 문법

파일 또는 디렉터리를 시스템에서 삭제합니다. 리눅스에서는 삭제된 파일을 휴지통을 거치지 않고 완전히 제거하므로 사용에 주의해야 합니다.

rm [옵션] [경로/파일명1] [경로/파일명2] ...

2) 주요 옵션

옵션 설명
-i 삭제하기 전에 매번 삭제 여부를 사용자에게 묻습니다.
-f 경고 메시지를 표시하지 않고 강제로 삭제합니다. (Force)
-r 디렉터리를 삭제할 때 내부 하위 디렉터리와 파일을 모두 재귀적으로 삭제합니다. (Recursive)

3) 실습 예제

# 일반 파일 삭제
rm dir1/dir3/aaa.txt

# 대화형 삭제 (삭제 여부 확인)
rm -i dir1/dir4/a.txt

# 디렉터리 삭제 시도 (옵션 미지정 시 에러 발생)
rm dir1/dir2 dir1/dir4/b.txt
# 출력: rm: cannot remove 'dir1/dir2': Is a directory

# 하위 요소를 포함한 디렉터리 완전 강제 삭제 (-rf)
rm -rf dir1/

파일 및 디렉터리 검색

1) 개념 및 문법

지정한 경로에서 조건에 맞는 파일이나 디렉터리를 검색합니다. 검색 후 추가적인 명령어를 연계하여 실행할 수 있습니다.

find [검색경로] [옵션] [타겟/조건]

2) 주요 옵션

옵션 설명
-name 파일 이름으로 검색합니다. (대소문자 구분)
-iname 파일 이름으로 검색하되, 대소문자를 구분하지 않습니다.
-type f 파일 유형만 검색합니다.
-type d 디렉터리 유형만 검색합니다.
-size 지정한 파일 크기를 기준으로 검색합니다.
-user 특정 소유자의 파일만 검색합니다.
-maxdepth n 검색할 하위 디렉터리의 깊이를 제한합니다. (최상위 배치 필수)
-delete 검색된 대상을 즉시 삭제합니다.
-ls 검색된 대상의 상세 내역을 ls -l 형태로 출력합니다.
-exec [명령어] \; 검색된 파일들을 대상으로 후속 명령어를 실행합니다. {} 항목이 검색 결과 파일로 치환됩니다.

3) 실습 예제

# 실습 환경 구축
mkdir projects
touch projects/report.txt projects/todo.txt projects/todo2.txt projects/error.log projects/alert.log
echo "todo" >> projects/todo.txt
echo "error" >> projects/error.log
echo "alert" >> projects/alert.log

# 1. 이름 기반 검색 (대소문자 구별 및 무시)
find projects -name todo.txt
find projects -iname TODO.txt

# 2. 와일드카드를 이용한 패턴 검색
find projects -name "to*.txt"

# 3. 검색 후 즉시 삭제
find projects -name todo2.txt -delete

# 4. 상세 정보 출력 (-ls) 및 권한 제한 검색
sudo find /etc -name passwd -ls

# 5. 파일 유형별 독립 검색
find /etc -type d
find /etc -type f

# 6. -exec 옵션을 활용한 연계 작업 (검색 내용 출력 및 삭제)
find projects -name "*.log" -exec cat {} \;
find projects -name "*.log" -exec rm {} \;

# 7. -maxdepth 옵션을 통한 검색 깊이 제한 비교
sudo find /etc -name passwd -ls              # 하위 디렉터리 전체 검색 (결과 다수)
sudo find /etc -maxdepth 1 -name passwd -ls   # /etc 직하위만 검색 (결과 1개)

파일 내용 검색

1) 개념 및 문법

파일 내부의 텍스트 내용 중 특정 패턴이나 문자열을 검색하여 해당 줄을 출력합니다.

grep [옵션] [검색패턴] [파일명]

2) 주요 옵션

옵션 설명
-n 검색 결과가 위치한 줄 번호(Line Number)를 함께 표시합니다.
-c 패턴과 일치하는 줄의 개수(Count)만 출력합니다.
-r 디렉터리 내부의 모든 파일을 재귀적으로 탐색하여 검색합니다. (Recursive)
-v 패턴을 포함하지 않는 줄만 반전하여 출력합니다. (Inverse)
-i 검색어의 대소문자를 구분하지 않습니다. (Ignore case)
-E 확장 정규 표현식(Extended Regex)을 사용하여 다중 검색어(OR 연산) 등을 지정합니다.

3) 실습 예제 (텍스트 입력 및 기본 검색)

# 다량의 텍스트 입력을 위한 Here Document 방식 파일 생성
cat << EOF > app.log
INFO: server started
INFO: user login
ERROR: database connection failed
WARN: memory usage high
INFO: request completed
ERROR: timeout occurred
DEBUG: internal value
INFO: user logout
EOF

# 기본 대소문자 구분 및 무시 검색
grep "ERROR" app.log
grep -i "error" app.log

# 줄 번호 출력 및 매칭 개수 확인
grep -n "ERROR" app.log
grep -c "ERROR" app.log

# 특정 문자열을 제외한 나머지 줄 출력
grep -v -n "ERROR" app.log

4) 실습 예제 (디렉터리 탐색 및 확장 검색)

# 디렉터리 대상 검색 시 오류와 해결 (-r)
grep "todo" ./projects     # 오류 발생 (디렉터리 직접 지정 불가)
grep -r "todo" ./projects  # 내부 파일까지 재귀 검색 수행

# 확장 정규식을 이용한 다중 키워드(OR) 검색
grep -E "ERROR|INFO" app.log

1) 개념 및 특징

  • 개념: 원본 파일과 동일한 인덱스 노드(inode) 주소값을 가리키는 별칭 파일을 생성합니다.
  • inode: 리눅스 파일 시스템에서 파일, 디렉터리 등 모든 객체의 실제 데이터 저장 위치를 식별하는 고유 주소값입니다.
  • 특징:
    • 디렉터리는 구조적 한계로 인해 하드 링크를 생성할 수 없습니다.
    • 동일한 inode를 공유하므로 한쪽 내용이 수정되면 다른 쪽도 실시간으로 공유됩니다.
    • 원본 파일을 삭제하더라도 링크 수가 감소할 뿐, 하드 링크 파일과 실제 데이터는 그대로 보존됩니다.
  • 목적: 데이터 유실을 방지하기 위한 안전한 백업이나 보안 목적의 파일명 은닉에 활용됩니다.

2) 문법 및 실습

ln [원본파일] [대상파일]
# 원본 파일 생성 및 하드 링크 연결
echo "hello" > m.txt
ln m.txt m_copy.txt

# -i 옵션으로 두 파일의 inode 번호가 동일함을 확인
ls -il
# 출력 예시: 1060500 ... m_copy.txt / 1060500 ... m.txt

# 원본 수정 후 동기화 여부 확인
echo "world" >> m.txt
cat m_copy.txt  # 데이터가 추가되어 있음을 확인

# 원본 파일 삭제 후 링크 카운트 및 데이터 보존 상태 확인
rm m.txt
ls -il m_copy.txt  # 링크 숫자가 2에서 1로 감소하며 데이터는 온전히 유지됨

1) 개념 및 특징

  • 개념: 윈도우 운영체제의 '바로가기 아이콘'과 유사한 개념으로, 원본 파일의 경로를 가리키는 포인터 파일입니다.
  • 특징:
    • 파일뿐만 아니라 디렉터리에도 설정이 가능합니다.
    • 원본 파일과 별개의 고유한 inode를 가집니다.
    • 원본 파일이 삭제되면 연결이 끊어져 깨진 링크가 되며, 접근 시 에러가 발생합니다.
  • 목적: 복잡하고 긴 절대 경로를 단축하여 접근 편의성을 높이기 위해 사용됩니다.

2) 문법 및 실습

ln -s [원본] [대상]
# 원본 파일 생성 및 소프트 링크 연결
echo "hello" > m2.txt
ln -s m2.txt m2_copy.txt

# inode가 서로 다름과 링크 파일의 포인터 화살표(->) 확인
ls -il
# 출력 예시: 1060644 lrwxrwxrwx ... m2_copy.txt -> m2.txt
#           1060643 -rw-rw-r-- ... m2.txt

# 원본 파일 삭제 시 소프트 링크의 고립 상태 확인
rm m2.txt
ls -il         # 깨진 링크 상태로 표시됨 (터미널에서 주로 빨간색으로 점멸)
rm m2_copy.txt # 무효화된 소프트 링크 파일 최종 정리

# 디렉터리를 대상으로 하는 소프트 링크 테스트
mkdir temp
touch temp/test.txt
ln -s temp temp2
ls -al temp2   # temp2를 통해 temp 내부 데이터 접근 허용 확인

파일 묶음 및 압축

1) 용어의 차이점

  • 파일 묶음 (Archiving): 여러 개의 파일과 디렉터리를 하나의 파일로 결합하는 행위이며, 용량 압축은 수행되지 않습니다. (tar)
  • 압축 (Compression): 단일 파일의 데이터 크기를 줄이는 행위입니다. (gzip)

2) 작업별 명령어 및 옵션 구조

작업 구분 명령 문법 주요 옵션 설명
파일 묶기 tar -cvf [묶음.tar] [대상들] -c: 새 아카이브 생성 (Create)



-x: 아카이브 해제 (Extract)



-v: 진행 과정 표시 (Verbose)



-f: 아카이브 파일명 지정 (File)
묶음 해제 tar -xvf [묶음.tar]
단일 압축 gzip [파일명] 실행 후 기존 원본은 사라지고 .gz 파일 생성
압축 해제 gzip -d [파일명.gz] -d: 압축 해제 (Decompress)
결합 (묶음+압축) tar -czvf [파일명.tar.gz] [폴더] -z: gzip 압축 알고리즘을 동시 적용
결합 해제 tar -xzvf [파일명.tar.gz] -C [경로]: 지정한 목적지 디렉터리에 압축 해제

3) 실습 예제

# 1. projects 디렉터리를 묶음과 동시에 압축 진행
tar -czvf projects.tar.gz projects/

# 원본 디렉터리 삭제를 통한 복구 테스트 환경 준비
rm -rf projects

# 2. 현재 디렉터리에 압축 및 묶음 해제
tar -xzvf projects.tar.gz

# 3. 특정 목적지 디렉터리(-C)를 지정하여 해제
tar -xzvf projects.tar.gz -C temp

22. 파이프 (Pipes)

1) 개념 및 문법

앞 명령어의 표준 출력(Output) 결과를 뒤 명령어의 표준 입력(Input)으로 직접 연결하여 연속적인 데이터 처리를 가능하게 하는 기능입니다.

[명령어1] | [명령어2]

2) 연계 유틸리티: wc (Word Count)

파이프라인 내부에서 데이터의 수량을 측정할 때 주로 연계하여 사용합니다.

  • wc -l: 행(Line) 수 출력
  • wc -w: 단어(Word) 수 출력
  • wc -m: 문자(Character) 수 출력
  • wc -c: 바이트(Byte) 수 출력

3) 실습 예제

# 1. 실행 중인 프로세스 목록에서 특정 프로세스(java) 검색
ps -ef | grep java

# 2. 디렉터리 목록 조회 결과 중 상위 20줄만 제한하여 보기
ls -lhs /etc | head -n 20

# 3. 바이너리 형태의 로그 파일에서 텍스트 처리(-a)를 통해 특정 오류 로그 필터링
cat -n /var/log/auth.log | grep -a "authentication failure"

# 4. 필터링된 특정 오류 로그의 발생 빈도(총 라인 수) 계산
cat -n /var/log/auth.log | grep -a "authentication failure" | wc -l

# 5. 특정 설정 파일의 전체 행 수 측정
wc -l /etc/passwd