[TIL] Linux 2(임시)

나의 개발 일지·2024년 2월 26일

BootCamp

목록 보기
6/13

2024.02.23 (22 -> 졸업식)

오늘 학습한 내용 : Linux 기본 개념 , Linux 명령어


1. Linux 기본 개념

a. root권한 vs 일반사용자 권한

  • root 권한은 시스템의 모든 측면을 제어할 수 있는 권한을 제공한다. 시스템의 설정 변경, 소프트웨어 설치, 사용자 관리 등과 같이 시스템 관리 작업을 수행할 수 있다. 반면에, 일반 사용자는 제한된 권한을 가지며, 시스템의 핵심 부분을 변경하거나 관리할 수 없다.
  • sudo su 명령어를 통해 root권한을 활성화 할 수 있다.
  • #프롬프트 : root / $프롬프트 : rocky

b. 종료 , 재부팅 , 로그아웃 명령어

  • 종료
      1. 수동> [오른쪽 위 전원] - [컴퓨터끄기]
      1. 터미널> "shutdown -Pnow", "halt -p", "init 0"
  • 재부팅
    • 터미널 > "shutdown -rnow", "reboot", "init 6"
  • 로그아웃
    • 터미널 > "logout", "exit"

c. 가상콘솔

  • '가상의 모니터'로 Rocky linux는 6개의 가상콘솔을 제공
  • ctrl + Alt + F1~6 (F2 : X win 모드)

d. 런 레벨(Runlevel)

  • "init" 명령어 뒤에 붙는 숫자
    • init2~4 는 텍스트모드 부팅을 의미하는데 init3만 주로 사용
    • init1 : root사용자 모드에서 문제 발생시 복구 모드
    • init6 : 재부팅 모드
    • init5 : Xwin 모드
  • 런레벨 모드 확인
    • /lib/systemd/sytem으로 디렉토리 이동 후 runlevel?.target파일을 확인하면 된다.
    • 실습> 현재 런레벨을 3로 바꾸기
      • ls -l/etc/systemd/system/default.target을 통해 현재 런레벨을 파악 --> 현재 graphical mode(runlevel5)
      • ln -sf /usr/lib/systemd/system/multi-user.target /etc/systemd/system/default.target으로 default.target을 multi-user.target으로 바꿈
      • Reboot 하면 텍스트 모드로 바뀐 것을 알 수 있다.

e. 자동완성과 히스토리

  • 자동완성

    • 파일명의 일부만 입력한 후 Tab키를 통해 나머지 파일명을 자동으로 완성하는 기능
    • 빠른 입력효과 + 파일명,디렉토리의 정확한 입력효과
    • ex
      • cd/etc/sysconfig/network-scripts/를 입력할 때 cd/et[Tab]sysco[Tab]network[Tab]/를 입력하면 됨
      • [Tab]을 눌렀음에도 자동완성이 안되는 경우는 여러가지 후보군 명령어가 존재하기 때문이고 이때 한번더 [Tab]을 누르면 후보군이 생성된다.
  • 도스키

    • 이전에 사용한 명령어를 화살표 위아래를 통해 찾아서 사용할 수 있음

f. 에디터 사용 (gedit, nano, vi)

  • gedit

    • gedit명령어를 치면 텍스트파일이 나오고 해당 파일에 내용을 작성할 수 있다. shift+space로 영/한을 바꿀 수 있다.
    • gedit은 Xwindow mode에서만 사용이 가능
    • gedit + [파일명]을 하면 해당 파일을 열 수 있다
  • nano

    • nano 명령어는 Xwindow mode + 일반 텍스트 mode(Server(B))에서 사용가능
    • nano -c 명령어를 하게 되면 nano창에서 자동으로 행을 볼 수 있다.
  • vi

    • 가장 중요한 에디터, 모든 unix 기반 가상서버의 공통 에디터
      vi + 파일명을 치면 에디터가 생긴다.
      'i' 또는 'a'를 눌러 'insert'모드로 변경한다. 이 과정을 해야 텍스트를 작성 가능
      'ESC'키를 통해 다시 명령모드로 돌아오기
      shift + ':' + {w(저장),q(종료),취소(i)}로 특정 기능 수행
      ex. shift + : + wq : 저장하고 vi 종료
      ex. shift + : + w 저장 할 이름.txt --> 해당 vi를 해당 이름으로 저장
      ex. shift + : + q! --> 변경 된 내용을 저장하지 않고 종료
      vi의 비정상 종료시 조치법 에디터를 비정상적으로 종료시 해당 파일을 열었을 때 위와 같이 나타난다. 에디터를 종료 후 ls -al을 통해 해당 경로에 저장되어 있는 파일 전부를 살펴보면 다음과 같다..test1.txt.swp는 test1.txt파일을 비정상 종료 했기에 발생한 파일이고 삭제 해주어야 한다.
      정상 작동한다.
      빈도 높은 vi 에디터 명령어
      gg : 제일 첫 행으로 이동
      G(shift+g) : 제일 끝 행으로 이동
      숫자G(숫자+shift+g) : 해당 숫자의 행으로 이동
      숫자+Enter : 해당 숫자의 행으로 이동
      dd : 현제 커서의 행 삭제
      숫자dd : 현재 커서부터 숫자만큼의 행 삭제
      yy : 현재 커서가 있는 행을 복사
      p : 복사한 내용을 현재 행 이후에 복사하기
      P : 복사한 내용을 현재 행 이전에 복사하기
      숫자 yy : 현재 커서부터 숫자만큼의 행을 복사
      /문자열+Enter : 해당 문자열 찾기
      n : 찾은 문자 중에서 다음 문자로 이동
      명령모드 - :set number : 행 번호가 생김
      * 명령모드 - :%s/기존 문자열/새 문자열 : 기존 문자열을 새 문자열로 치환
  • 도움말 사용법

    • man + 명령어를 하면 도움말 출력

2. Linux 명령어

  • pwd(print working directory) : 현재 작업 중인 디렉토리 출력
  • shutdown
    • shutdown -h +a : a분뒤에 shutdown 설정 / -h : 시간을 의미
    • shutdown -c : 설정한 shutdown을 취소 / -c : 취소를 의미(cancel)
    • shutdown -k : 실제로 shutdown은 안하고 shutdown 하겠다는 메세지 전달
  • ls
    • ls : 현재 디렉토리의 파일 목록
    • ls /etc/sysconfig : 해당 경로의 파일과 폴더의 목록
    • ls -a : 현재 디렉토리의 목록(숨김파일 포함 , -a : all)
    • ls -l : 현재 디렉토리의 목록을 자세히 보여줌
    • ls *.cfg : 확장자가 cfg인 목록 보여줌
    • ls -l /etc/sysconfig/a* :앞 글자가 a인 목록을 자세히 보여줌
  • cd
    • 디렉터리를 이동
    • cd + enter : 홈 디렉토리로 이동
    • cd + 경로 : 해당 경로로 이동
    • cd + .. : 현재 경로의 상위 경로로 이동

      절대 경로 :
      파일이나 디렉토리의 위치를 최상위 디렉토리부터 시작하여 전체 경로로 표시한 경로
      ex. /home/username/documents/example.txt

      상대 경로 : 현재 작업 디렉토리(current working directory)를 기준으로 파일이나 디렉토리의 위치를 나타낸 경로
      ex. /home/username/.. : /home/username/의 상위경로로 이동

  • rm
    • 파일 또는 디렉토리 삭제
    • rm 파일명
    • rm -i 파일명 : 삭제시 정말 삭제할지 확인 메시지 나옴
    • rm -f 파일명 : 삭제시 메세지 없이 바로 삭제 (f:force)
    • rm -r 디렉토리 : 디렉토리 삭제
    • rm -rf 디렉토리 : 해당 디렉토리와 하위 디렉토리 모두 강제 삭제 (주의요망)
  • cp
    • 파일이나 디렉토리 복사
    • cp 파일명1 파일명2 : 파일명1 파일을 파일명2라는 이름으로 복사
    • cp -r 디렉토리1 디렉토리2 : 디렉토리1을 디렉토리2라는 이름으로 복사
  • touch
    • 크기가 0인 새파일을 생성하거나, 기존의 파일은 최종 수정시간을 변경
  • mv
    • 파일이나 디렉토리의 이름을 변경하거나 다른 디렉토리로 옮김
    • mv 파일1 디렉토리1 : 파일1을 디렉토리1로 이동
    • mv aaa bbb ccc ddd : 파일 aaa, bbb, ccc를 /ddd경로로 이동
    • mv aaa.txt bbb.txt : 파일aaa.txt를 bbb.txt로 이름 변경
  • mkdir
    • 디렉토리를 생성
    • mkdir abc : 현재 디렉토리 아래에 /abc 디렉토리 생성
    • mkdir -p /def/fgh : /def/fgh를 생성하는데, 만약에 /fgh의 부모 디렉토리인 /def가 없다면 자동으로 생성해서 경로 생성
  • rmdir
    • 디렉토리 삭제 (단, 해당 디렉토리가 비어있어야 삭제 가능)
    • 파일이 있는 디렉토리의 경우 rm -r 또는 rm -rf를 사용
  • cat
    • 파일의 내용을 보여줌
    • 여러개의 파일을 나열하면 연결해서 보여줌
  • head,tail
    • 텍스트 파일의 앞 10행 뒤 10행만 보여줌
    • head,tail -숫자를 하면 앞뒤 '숫자'만큼의 행만 보여줌
  • more
    • 텍스트 형식으로 작성된 파일을 '페이지'단위로 보여줌
    • space bar를 누르면 다음 페이지로 이동
    • B를 누르면 앞페이지, q를 누르면 종료함
  • less
    • more의 확장용
    • more의 기능 + 화살표를 통해 page up and down 가능
  • file
    • 해당 파일이 어떤 파일인지 알려줌
    • ex. file anaconda-ks.cfg : ASCII로 나옴 즉, 아스키 파일임을 의미
  • clear
    • 터미널을 깨끗하게 지워줌

3. 사용자 관리와 속성

  • 리눅스는 다중 사용자 시스템(Multi User System)

  • root라는 슈퍼유저는 모든 작업을 할 수 있는 권한 존재

  • 모든 '사용자'는 하나 이상의 '그룹'에 소속되어 있음

  • 사용자는 /etc/passwd 파일에 생성과 동시에 저장되어 있기에 사용자 목록을 보려면 해당 경로로 이동하면 됌

    • /etc/passwd 파일을 tail을 통해 살펴보면 다음과 같다.
    • 사용자이름 : 암호 : 사용자ID : 사용자가 소속된 그룹ID : 전체이름 : 홈 디렉토리 : 기본 셀
  • 사용자 및 그룹관련 명령어

    • useradd
      • 새로운 사용자 추가
      • useradd newuser : newuser라는 사용자 생성
      • useradd -g mygroup newuser : mygroup이라는 그룹에 포함되도록 newuser 생성
        * useradd -u 1111 newuser : 사용자ID가 1111이 되도록 newuser 생성
      • useradd -d /newhome newuser : 홈 디렉토리가 /newhome이 되도록 newuser 생성
    • passwd
      • 사용자의 비밀번호 설정 및 변경
      • passwd newuser
    • usermod
      • 사용자의 속성을 변경
      • usermod -g root newuser : newuser의 소속 그룹을 root 그룹으로 변경
    • userdel
      • 사용자 삭제
    • chage
      • 사용자의 암호를 주기적으로 변경하도록 설정 (change아니다)
      • 책 참고
    • groups
      • 사용자가 속한 그룹을 보여줌
      • groups newuser : newuser가 소속된 group을 보여줌
    • groupadd
      • 새로운 그룹 추가
    • gropumod
      • 그룹의 속성을 변경
      • groupmod -n mygroup newgroup : mygroup의 그룹 이름을 -n(n:name)을 통해 newgroup으로 변환
    • gpasswd
      • 그룹의 암호를 설정하거나 그룹 관리를 수행
  • 실습 > 사용자 및 그룹 관리 하는 법 익히기 (사용자 생성, 그룹 생성 등등)

  1. user1,user2 생성 및 확인
    • user1,user2의 사용자ID와 그룹ID가 각각 동일하다
    • 특정 그룹을 지정하지 않고 사용자를 생성시 자동으로 그룹이 사용자ID와 동일한 이름으로 생성되면서(1001,1002) 해당 그룹에 사용자가 속하게 된다. (사용자는 반드시 1개의 그룹에 속해야하기 때문)
  2. user1,user2를 삭제하고 특정 그룹에 속하도록 다시 생성 및 확인하기
    • user1,user2를 userdel을 통해 삭제
    • tail -5 /etc/passwd를 통해 삭제한 것 확인
    • tail -5 /etc/group을 통해 그룹 목록 확인
    • useradd -g rocky user1을 통해 rocky 그룹에 user1 생성 (user2도 동일)
    • 확인결과 user1,user2의 그룹ID가 rocky 그룹의 ID 1000가 동일한 것 확인
  3. user1,user2의 암호 지정
    • tail -5 /etc/shadow를 통해 user1,user2 확인, user1,user2의 앞에 !!은 암호 설정이 안되어 있다는 의미
    • passwd를 통해 비밀번호를 설정
  4. user와 etc/skel 디렉토리 비교
    • 두 디렉토리를 비교한 결과 동일한 결과가 나온 것을 알 수 있음
    • 그 이유는 user1,user2가 생성될 때 /etc/skel의 모든 내용이 user1,user2의 홈 디렉토리에 복사하는 작업이 발생했기 때문
    • 따라서, 생성하는 사용자에게 특정 파일을 배포하고 싶은 경우 /etc/skel에 파일을 넣어두면 자동 배포가 이루어진다.

4. 파일과 디렉터리의 소유권과 허가권

[출처 : 한빛미디어 '이것이 리눅스다']

1. 파일 유형

  • 디렉터리 : d , 일반 파일 : -

2. 파일 허가권

  • 'rw-','r--','r--' 3개씩 끊어서 읽음 (r: read, w: write, x: execute)
  • 첫 번째 'rw-' : 소유자(user)의 파일접근 권한 의미
  • 두 번째 'r--' : 그룹(Group)의 파일접근 권한 의미
  • 세 번째 'r--' : 그 외의 사용자의 파일접근 권한 의미
  • 의미해석
    • rw- : read,write는 가능하지만 execute, 실행은 불가능함을 의미
    • 10진수 -> 2진수로 표현이 가능
      • ex. 소유자의 파일접근 권한 : 6이라면 6 = 110(2)이므로 r,w는 활성화 되고 x는 활성화가 안되어 있음을 의미한다.
  • 명령어
    • chmod
      • 파일의 허가권을 변경하는 명령어
      • root사용자(슈퍼유저) 또는 해당 파일의 소유지만 실행이 가능
        ex. chmod 777 sample.txt -> sample.txt파일은 모든 사용자가 read,write,execute가능

3. 파일 소유권

  • 파일 소유권은 파일을 소유한 사용자와 그룹을 의미
  • ex. sample.txt 파일은 root가 소유자이며, root 그룹에 속해있다
  • 명령어
    • chown
      • 파일의 소유권을 변경하는 명령어
      • chown 새로운사용자이름(.새로운 그룹이름) 파일이름
        ex. chown rocky.rocky sample.txt : sample.txt 파일의 소유권과 그룹을 root에서 rocky로 변환

4. 실습 > 파일의 허가권 및 소유권 이해

    1. vi test를 통해 다음과 같이 내용을 작성
    1. 파일 실행 및 허가권 변경
    1. 파일의 소유권 변경
    • chown rocky test : test파일의 소유권을 root -> rocky로 바꿈
    • chgrp rocky test : test파일의 그룹을 root -> rocky로 바꿈
    • chown rocky.rocky test : 한번에 소유권 그룹 모두 rocky로 바꿀 수 있음
    • chown : change owner, chgrp : change group을 의미
    • su - rocky : rocky 사용자로 접속
    • ls -l /root/test를 했더니 접근거부 -> 외부사용자는 r,w,x 모든 권한이 없음을 확인
    • 다시 root사용자로 접속 후 mv test ~rocky를 통해 text를 rocky 홈디렉터리로 이동시킴

5. 링크

하드링크와 심볼릭링크

[출처 : 한빛미디어 '이것이 리눅스다']

Inode

  • 리눅스 시스템에서 사용하는 일종의 자료구조
  • 모든 파일이나 디렉토리는 각자 1개씩 inode 존재
  • 해당 파일의 소유권, 허가권, 파일 종류, 해당 파일의 실제 데이터 위치등 '정보'가 존재
  • 즉 Inode를 통해 실제 데이터로 접근 , Inode는 실제 데이터를 가리키는 포인터 역할
  • 전체 디스크 공간의 1%정도 차지
  • 원본파일과 동일한 내용을 가지고 있음
  • 하드 링크를 생성할 때는 원본 파일의 inode를 가리키는 새로운 디렉토리 엔트리(하드 링크 파일)가 생김
  • 동일한 파일 시스템 내에서만 작동하며, 디렉토리는 생성할 수 없다
  • 원본 파일을 수정하면 하드 링크를 통해 수정된 내용이 모두 반영
  • 하드 링크의 목적
    • 파일 시스템내에서 하나의 파일에 대한 다중 참조를 가능하게 하여 파일을 효율적으로 조직 및 관리 가능
    • 파일의 백업이나 복제를 쉽게 만들 수 있음

    ln 원본파일명 생성할하드링크파일명
    ex. ln basefile hardlinkfile

  • 원본 파일이나 디렉토리를 가리키는 특별한 종류의 파일
  • 원본 파일의 경로를 저장하고 있는 파일이며 원본 파일을 가리킴
  • 심볼릭 링크를 생성하면 원본 파일의 경로를 갖는 새로운 파일 생성
  • 심볼릭 링크는 원본 파일의 변경을 추적하며, 원본 파일이나 디렉토리를 가리키는 포인터 역할
  • 심볼릭 링크의 목적
    유연성을 제공하여 원본파일의 위치를 변경하거나 다른 파일 시스템으로 이동할 때 유용
    동적으로 파일이나 디렉토리를 참조하는 것이 가능

    ln -s 원본파일명 생성할하드링크파일명
    ex. ln -s basefile hardlinkfile

  • vi 에디터로 현재 디렉토리에 basefile 생성 및 cat basefile을 통해 내용 확인
  • ln basefile hardlink, ln -s basefile symboliclink를 통해 하드링크와 심볼링링크 생성
  • ls -il은 현재 디렉토리의 'inode' 목록을 전부 나타내는 명령어
  • basefile, hardlink의 inode번호가 34132052로 동일함을 알 수 있음
  • mv basefile ../ : basefile을 상위디렉토리로 이동시키고 다시 진행
  • symboliclink가 basefile을 가리키지 못하고 있음을 알 수 있음
  • cat symboliclink를 해봐도 내용이 확인되지 않는 것으로 보아 basefile을 가리키지 못함을 알 수 있음

6. 리눅스 관리자를 위한 명령어

1. RPM(Redhet Package Manager)

  • 리눅스 기반 시스템에서 사용되는 소프트웨어 패키지 관리 시스템
  • windows의 'setup.exe'와 비슷한 설치파일
  • 확장명은 .rpm이며, 패키지라고 부름
  • ex. gzip-1.10-9.el9_0.x86_64.rpm (패키지이름 - 버전 - 릴리즈번호.Rocky리눅스버전.아키텍쳐.rpm)
  • RPM 명령어
    • 설치
      • rpm-Uvh 패키지파일이름.rpm
        • U : 패키지가 설치/업그레이드
        • v : 설치과정의 확인
        • h : 설치진행과정을 #마크로 화면에 출력
    • 삭제
      • rpm -e 패키지파일이름.rpm
    • 이미 설치된 패키지에 대한 질의
      • rpm -qa 패키지이름 : 패키지가 설치되었는지 확인
      • rpm -qf 파일의 절대경로 : 파일이 어느 패키지에 포함된 것인지 확인
    • 아직 설치되지 않은 rpm파일에 대한 질의
      • rpm -qlp 패키지파일이름.rpm : 패키지파일에 어떤 파일이 포함되어있는지
      • rpm -qip 패키지파이이름.rpm : 패키지 파일의 상세정보
  • RPM 단점
    • 의존성 문제 : A패키지가 설치되기 위해 B패키지가 필요한 경우, RPM으로 해결하기 매우 까다로움
    • DNF or YUM의 등장

실습 > rpm을 이용한 패키지 설치 및 삭제 + 의존성 문제

  • rpm을 이용한 패키지 설치 및 삭제

    • rpm -qi mc 를 통해 'mc'파일이 설치되어 있는지 확인
  • 설치해야할 패키지 파일이 있는 디렉토리 경로로 이동 및 패키지 확인

  • 패키지 설치, 패키지 정보 확인
    rpm -Uvh mc-~를 통해 mc 패키지 설치
    rpm -qi 를 통해 패키지 정보 확인

  • mc 패키지 제거

  • 의존성 문제

    • rpm -Uvh mysql~ 를 통해 mysql관련 패키지를 설치하려고 했으나 해당 패키지를 설치하기 위해선 mysql-common파일의 설치가 필요하기에 의존성 문제가 발생한 것을 알 수 있다.

2. DNF(Dandified yum)

  • DNF는 RPF의 '의존성 문제'를 해결하기 위한 패키지 도구
  • 인터넷을 통하여 필요한 파일을 저장소(Repository)에서 자동으로 모두 다운로드해서 설치하는 방식
  • RHEL 7 : 'YUM', RHEL 8 부터는 YUM이 개선된 DNF명령을 사용
  • 저장소의 URL : /etc/yum.repos.d/ (바뀔 수 있음)

DNF 기본적인 사용법

  • 기본 설치

    dnf install 패키지이름
    dnf -y install 패키지이름 (-y: 사용자의 확인을 모두 yes로 간주하고 설치)

  • rpm 파일 설치

    dnf install rpm파일이름.rpm

  • 업데이트 가능한 목록 보기

    dnf check-update

  • 업데이트

    dnf update 패키지이름

  • 삭제

    dnf remove 패키지이름

  • 정보확인

    dnf info 패키지이름

  • 실습1> 의존성 문제가 있는 rpm파일을 dnf로 설치하기

    • dnf는 인터넷을 통하여 다운로드를 진행하기에 CD/DVD가 필요가 없기에 해제한다.
    • dnf info를 통해 설치대상의 정보를 미리 확인 가능
    • dnf -y install을 통해 의존성 문제가 있던 파일을 바로 설치 가능

DNF 고급 사용법

  • 패키지 그룹은 여러개의 패키지가 모여 있는 그룹을 의미.
    예를들어, java관련 패키지가 여러개 있다고 하면 하나하나 설치하는 것은 번거러움. 따라서 패키지 그룹을 설치가능

  • 패키지 그룹 설치

    dnf groupinstall 패키지그룹이름

  • 패키지 리스트 확인

    dnf list 패키지이름

  • 특정 파일이 속한 패키지 이름 확인

    dnf provides 파일이름

  • GPG 키 검사 생략

    Rocky 리눅스에서 인증되지 않은 패키지를 강제로 설치할 때 사용
    dnf install --nogpgcheck rpm파일이름.rpm

  • 기존 저장소 목록 지우기

    dnf clean all

DNF 작동방식과 설정파일

  • dnf 명령어와 관련된 설정 파일은 /etc/yum.conf 와 /etc/yum.repos.d/가 있다.
  • /etc/yum.repos.d/에는 여러개의 파일이 존재하는데, 각 파일에는 dnf 명령을 실행했을 때 인터넷에서 해당 패키지 파일을 검색하는 네트워크 주소가 들어 있다.
    [출처 : 한빛미디어 '이것이 리눅스다']
  • /etc/yum.repos.d/의 .repo 파일이 중요하다.
  • This.repo 파일
    • baseos, appstream, extras는 자주 사용한다. 즉, 특정 파일을 dnf로 설치한다면 This.repo 안에 있는 대상의 URL 주소를 통해 인터넷에서 해당 파일을 다운로드 해오는 것.
  • DNF 작동방식 실습 다시 정리하기

0개의 댓글