CAB TA 4기 11일차의 기록

Urban Jungle·2025년 3월 26일

CAB TA 4기

목록 보기
11/28
post-thumbnail

파일과 디렉토리 관리 실습 2

  • 현재위치: pwd -> /root/

1. /etc/sysconfig 복사해서 /root/dirtest/에 넣으세요.

mkdir /root/dirtest
cp -r /etc/sysconfig /root/dirtest/

  • -r 옵션으로 디렉토리 전체 복사
  • /root/dirtest/sysconfig/라는 구조가 만들어짐

2. /root/dirtest/sysconfig/network-scripts/를 이동시켜 /root/dirtest1/에 넣으세요.

mkdir /root/dirtest1
mv /root/dirtest/sysconfig/network-scripts /root/dirtest1/

  • mv는 디렉토리 이동
  • 이동 후 /root/dirtest1/network-scripts가 됨

3. /root/dirtest1/network-scripts 디렉토리에 파일 이름이 testfile을 만드시오.

touch /root/dirtest1/network-scripts/testfile

  • touch는 빈 파일 생성
  • testfile이 해당 디렉토리 안에 생김

4. /root/dirtest1/network-scripts/testfile을 복사해서 /root/testfile1을 만드시오.

cp /root/dirtest1/network-scripts/testfile /root/testfile1

  • 이름을 바꾸며 위치를 바꿔서 복사

5. /root/testfile1 파일을 /tmp/testfile로 이름을 바꾸시오.

mv /root/testfile1 /tmp/testfile

  • mv는 이동 또는 이름 변경

  • 여기선 경로와 이름을 바꾸는 작업

6. /root/b/bb/bbb/bbbb를 명령어 한줄로 만드시오.

mkdir -p /root/b/bb/bbb/bbbb

  • -p 옵션으로 중간 디렉토리도 자동 생성
  • 디렉토리 트리 구조 만들 때 매우 유용

7. /root/dirtest/의 시간 정보를 현재 시작으로 바꾸시오.

touch /root/dirtest

  • touch는 시간 정보(Access time, Modify time)를 현재 시간으로 갱신
  • 디렉토리에도 적용 가능

8. rmdir 명령어로 /root/b/디렉토리를 삭제하시오.

rmdir -p /root/b/bb/bbb/bbbb

  • -p 옵션으로 하위에서 상위까지 빈 디렉토리만 순차 삭제
  • 안에 파일이 있으면 실패함 → 비워야 함!

링크 파일 실습 2

  • 현재위치: pwd -> /root/
nano file1
1
2
3
nano file2
a
b
c

1. file1에 대한 하드링크(hfile) & 소프트링크(sfile1) 생성

ln file1 hfile # 하드링크
ln -s file1 sfile1 # 심볼릭 링크 (상대경로)

  • hfilefile1과 같은 inode → 동일한 실제 파일
  • sfile1file1이라는 이름을 문자열로 참조

2. 파일 이름 변경

mv file1 file3 # file1 → file3
mv file2 file1 # file2 → file1 (이름 재사용)

3. hfile, sfile1 내용 확인

cat hfile # 출력: 1 2 3
cat sfile1 # 출력: a b c

  • hfileinode 공유 → 여전히 원래의 file1 내용 (1 2 3)
  • sfile1은 문자열 링크 → 새로 이름 붙인 file1 (a b c)을 참조

4. 현재 file1에 대해 절대경로로 심볼릭 링크 생성 → sfile2

ln -s /root/file1 sfile2

  • 절대경로를 사용했기 때문에, 위치가 이동해도 항상 /root/file1 참조

5. file3/tmp/file1로 이동하면서 이름 변경

mv file3 /tmp/file1

  • file3/tmp/file1이 됨
  • 하드링크(hfile)는 inode 공유이므로 여전히 1 2 3 유지

6. sfile1sfile2/tmp로 이동

mv sfile1 sfile2 /tmp/

7. /tmp/sfile1, /tmp/sfile2 내용 확인

cat /tmp/sfile1 # 출력: 1 2 3
cat /tmp/sfile2 # 출력: a b c

  • sfile1은 상대경로 → 현재 dir 기준 file1/root/file1 → 내용 OK
  • sfile2는 절대경로 /root/file1 가리킴 → 문제 없음

권한 및 소유권 실습

디렉토리 및 파일 생성

mkdir /tmp/p
cd /tmp/p
touch f1 f2 f3 f4
  • /tmp/p 디렉토리 내에 f1 ~ f4까지 빈 파일 생성

1. 모든 파일에 rwx 권한을 전체 사용자에게 부여 (심볼릭 모드)

chmod a=rwx f1 f2 f3 f4

  • a → all (user, group, others)
  • =는 기존 권한을 초기화 후 지정
  • 결과: rwxrwxrwx (777)

2. f1 에서 소유자는 쓰기 권한을 빼고, 소유그룹은 실행권한을 빼고,
기타 사용자는 모든 권한 뺄 것 (심볼릭모드)

chmod u-w,g-x,o-rwx f1

  • 소유자: w 제거 → r-x
  • 그룹: x 제거 → rw-
  • 기타 사용자: 모든 권한 제거 → ---

3. f2 소유자와 소유그룹을 r-x로 셋팅할 것(심볼릭 모드)

chmod ug=rx f2

  • u=rx → 소유자: 읽기 + 실행
  • g=rx → 그룹: 읽기 + 실행
  • 기타 사용자는 기존 권한 유지됨

4. f3 소유자는 읽기,쓰기,실행. 소유그룹은 읽기,실행.
기타사용자는 읽기. 권한을 줄 것(8진수 모드)

chmod 754 f3

5. /tmp/p의 모든 파일의 소유자와 소유그룹을 vagrant로 변경할 것

chown -R vagrant:vagrant /tmp/p

  • -R은 재귀적 적용 → 디렉토리 내부 파일에도 적용
  • vagrant:vagrant는 소유자와 그룹 모두 지정

6. f4 소유자 읽기. 소유그룹 쓰기. 기타사용자 실행. 권한 뺄 것

chmod u-r,g-w,o-x f4

  • 현재 f4rwxrwxrwx라면 → 제거 후 권한: -w-r-xr--

7. 파일이 생성될때 기타사용자에 대해서만 쓰기, 실행 권한이 빠지도록 기본권한을 설정하시오.(명령어로)

umask 003

  • 파일 기본 권한(666) - umask(003)rw-rw-r--
  • 디렉토리 기본 권한(777) - umask(003)rwxrwxr-x
  • others(기타 사용자)는 wx 권한 없음

Shell Metacharacter 실습

  • root로 접속


1. /etc/로 이동 후 ~(틸드) 사용해 홈 디렉토리로 이동

cd /etc/
cd                 # 또는
cd ~               # 또는
cd $HOME           # (같은 효과)
  • ~는 현재 사용자의 홈 디렉토리를 의미 (/root 또는 /home/사용자명)
  • 쉘에서 자주 쓰이는 메타문자 중 하나

2. - 문자로 이전 디렉토리로 복귀

cd /etc/sysconfig/network-scripts/
cd ~               # 홈으로 이동
cd -               # 바로 직전 디렉토리로 다시 이동
  • cd -는 마지막 위치로 돌아가는 기능
  • 실제 이동 경로가 출력됨 (예: /etc/sysconfig/network-scripts)

3. 홈 dir에서 /etc/sysconfig/network-scripts dir 내용을 확인 (~- 사용)

cd ~/
ls ~-/             # or ls ~-/network-scripts
  • ~-는 이전 디렉토리 경로를 의미함
  • ~는 홈, ~-cd 전에 있었던 디렉토리

4. superman-season 디렉토리와 파일 생성 + 이동 (메타문자 실전)

mkdir /media/superman-season{1,2,3}
touch superman-season{1,2,3}-drama{01..10}.avi
mv *n1* /media/s*1
mv *n2* /media/s*2
mv *n3* /media/s*3
  • n1 파일명 중에 n1이 포함된 것 = season1
  • s*1 디렉토리 중에 s...1로 끝나는 것 = season1

리디렉션 및 파이프 실습

사용자 전환

su - vagrant

  • - 옵션은 로그인 셸을 포함하여 완전히 전환됨
  • 환경 변수까지 모두 vagrant 사용자 기준으로 바뀜

1. ls -lR /의 표준 출력 & 에러 출력 분리 저장

ls -lR / 1> ~/r01 2> ~/r02

  • 1>: 표준 출력(stdout) → ~/r01
  • 2>: 에러 출력(stderr) → ~/r02
  • 보통 루트 전체 탐색은 권한 없는 디렉토리 에러가 많이 나옴

2. 모든 출력(표준 + 에러)을 한 파일로 저장

ls -lR / &> ~/r03
또는
ls -lR / > ~/r03 2>&1

  • &>: stdout + stderr를 한 파일로 리디렉션 (bash 전용)
  • > 파일 2>&1: 표준 출력 → 파일, 그리고 에러도 같은 곳(1)으로 보냄
  • 결과적으로 ~/r03에 전체 결과가 담김

root 사용자로 전환

exit

  • vagrant 세션 종료 후 이전 사용자(root)로 복귀

3. ps -ef를 한 화면씩 출력

ps -ef | less
또는
ps -ef | more

  • ps -ef: 모든 프로세스 목록 출력
  • less는 탐색, 검색 가능 (/로 검색, q로 종료)
  • more는 순차적으로만 보기 가능 (Space → 다음 페이지)

4. yum list의 마지막 5줄 출력

yum list | tail -5

  • tail -5: 출력의 마지막 5줄만 보여줌

  • yum list는 설치/가능한 패키지 목록을 쭉 출력함
    → 긴 출력의 일부 확인에 유용


grep 실습 1

grep [옵션] '패턴' 파일

주요 옵션

정규 표현식

1. root 포함 줄 검색

grep 'root' /etc/passwd

2. nologin으로 끝나는 줄 검색

grep 'nologin$' /etc/passwd

3. n으로 시작해서 y로 끝나는 6글자 단어 포함된 줄 (정확한 단어 검색)

grep -w 'n....y' /etc/passwd

  • .은 아무 문자 한 개 / 총 6글자: n + 4글자 + y

4. 줄의 시작이 n인 줄

grep '^n' /etc/passwd

5. home이 포함된 줄 위로 5줄 출력

grep -B 5 'home' /etc/passwd

6. n으로 시작하고 y로 끝나는 모든 패턴

grep 'n.*y' /etc/passwd

  • .*: 아무 문자 0개 이상

7. bash가 포함되지 않은 줄 출력

grep -v 'bash' /etc/passwd

8. 전화번호 패턴 검색 정규식

  • 패턴: 010-0000-0000

grep '010-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]' 파일명

  • 정확히 숫자 4자리씩 하이픈으로 구분

9. /var/log/messages 복사

cp /var/log/messages ~/

10. 03월 26일 08:00 ~ 20:59 시간대 검색

egrep '^Mar 26 (0[89]|1[0-9]|20)' ~/messages
또는
grep -e '^Mar 26 0[89]' -e '^Mar 26 1[0-9]' -e '^Mar 26 20' ~/messages

  • ^Mar 26 0[89] → 08, 09
  • ^Mar 26 1[0-9] → 10~19
  • ^Mar 26 20 → 20시 시간대
  • 00~07, 21~29는 제외됨

grep 실습 2

데이터 파일 생성

nano data 후
hong 28 011-222-2222 seoul
park 34 017-333-3333 kyunggi.
im 23 019-444-4444 chungnam
son 49 016-555-5555 us
gil 19 018-666-6666 korea.
jang 21 011-7777-7777 japan
lee 16 016-8888-8888 china
sa 45 017-9999-9999 canada.
hwang 32 015-555-5555 kwangju

1. 전화번호 중간이 4자리인 줄과 라인번호 출력

grep -n '01[0-9]-....-....' data

  • -n : 라인 번호 출력

  • '01[0-9]-....-....' : 010~019 앞자리 + 4자리 중간 + 4자리 끝

2. seoul이 포함된 라인 개수 출력

grep 'seoul' data | wc -l

  • grep으로 seoul 포함 라인 필터 → wc -l로 개수 출력

3. h로 시작해서 u로 끝나는 패턴 검색

grep 'h.*u' data

  • h.*uh로 시작하고 u로 끝나는 중간 문자열

4. s 또는 l로 시작하는 줄 검색

grep '^[sl]' data

  • ^ : 줄의 시작
  • [sl] : s 또는 l로 시작하는 줄

5. 줄 끝에 마침표 .가 있는 줄 검색

grep '\.$' data

  • \. : 마침표를 문자로 인식
  • $ : 줄의 끝

6. 전화번호 앞자리가 010~015인 패턴 검색

grep '01[0-5]-' data

  • 01[0-5] : 010~015
  • - : 번호 형식 유지

7. 지역이 china 또는 canada인 줄 검색

grep -e 'china' -e 'canada' data
또는
egrep '(china$|canada$)' data

  • egrep| (OR 연산자)를 인식
  • $는 줄 끝 고정

8. n2가 모두 포함된 줄

grep 'n' data | grep '2'

  • 첫 번째 grep으로 n이 포함된 줄 추출
  • 두 번째 grep으로 그 중 2도 포함된 줄만 필터링

9. n이나 2가 포함되지 않은 줄 출력

grep -v 'n' data | grep -v '2'

  • grep -v 'n'n 없는 줄
  • 그 결과 중 2도 없는 줄 필터링

find 실습

기본 환경 설정

mkdir /down
touch /down/test{1,2}
cp /down/test1 /tmp/test3
cp /down/test2 /tmp/test4/
mkdir /down/test
mv /down/test /tmp

1. /tmp 디렉토리 내에서 test*로 시작하는 파일을 찾아 삭제

find /tmp -name "test*" -exec rm -r {} \;

  • "test*" : 파일명 앞에 test가 포함된 모든 항목
  • -exec ... \; : 찾은 항목에 대해 rm -r 명령 실행
  • {}find가 찾은 파일을 넣는 자리
  • -r은 디렉토리 삭제도 포함되므로 파일/디렉토리 모두 제거 가능

2. /etc/ 아래에서 group 파일을 찾아 /root/로 복사

find /etc/ -name 'group' -exec cp -r {} /root/ \;

  • -name 'group' : 정확히 group 이름을 가진 파일만 검색
  • cp -r : 일반적으로 group은 파일이므로 -r 생략 해도, 안해도 문제 없음

3. /root/group 파일을 대화형으로 삭제

find /root/ -name 'group' -ok rm -r {} \;

  • -ok-exec와 같지만 작업 전에 [y/n]으로 확인
  • 안전하게 삭제할 때 사용

4. / 루트 디렉토리 전체에서 소유자가 vagrant인 파일을 찾고 상세 출력

find / -user vagrant -ls

  • -user vagrant : 소유자가 vagrant인 파일
  • -ls : ls -l처럼 권한/크기/소유자/경로 등 상세 정보 출력

5. /tmp 안에서 소유자가 vagrant인 파일을 삭제

find /tmp -user vagrant -exec rm -r {} \;

  • 위 명령은 /tmp 내에서만 vagrant 소유자 파일 삭제
  • 주로 임시 파일 자동 정리할 때 쓰는 패턴

profile
똑똑해지고 싶은 공학도

0개의 댓글