Baeg-won
좋았다면 추억이고 나빴다면 경험이다.
Baeg-won
전체 방문자
오늘
어제
  • 분류 전체보기
    • 🍃 Spring, Spring Boot
      • 스프링 프레임워크 기초
      • 스프링 핵심 원리 - 기본편
      • 자바 ORM 표준 JPA 프로그래밍 - 기본편
      • 스프링 MVC
      • 실전! 스프링 부트와 JPA 활용1 - 웹 애플리..
    • 🥑 Web Technoloy
    • 🚗 Backend Toy Project
      • 스프링 부트 게시판
      • Photogram
      • Baeg-won Clothing Gallery
    • 🥇 Problem Solving
      • Breadth-First Search
      • Depth-First Search
      • Backtracking
      • Simulation
      • Two-pointer
      • Binary Search
      • Greedy
      • Dynamic Programming
      • Minimum Spanning Tree
      • Dijkstra
      • Floyd warshall
    • ☕ Java
      • 명품 자바 에센셜
      • Applications
    • 🍦 JavaScript
      • JavaScript 기초
    • 🐧 Linux
      • 이것이 리눅스다(CentOS 8)
    • 📟 Database
      • 혼자 공부하는 SQL
    • 🧬 Data Structure
    • 🎬 HTML
    • 🎤 Tech Interview
    • 📌 etc
      • Unity 2D Raising Jelly Game
      • C++
      • 영어 쉐도잉

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Baeg-won

좋았다면 추억이고 나빴다면 경험이다.

🐧 Linux/이것이 리눅스다(CentOS 8)

[이것이 리눅스다(CentOS 8)] 04장. 필수개념과 명령어(2)

2023. 3. 26. 14:42

📝 리눅스 기본 명령어

  • ls: Windows의 dir과 같은 역할로, 해당 디렉터리에 있는 파일 목록을 출력
    • ex) # ls /etc/sysconfig
  • cd: 디렉터리 이동
    • ex) # cd ../etc/sysconfig
    • . - 현재 디렉터리, .. - 현재의 상위 디렉터리
  • pwd: 현재 디렉터리의 전체 경로 출력
  • rm: 파일이나 디렉터리 삭제
    • ex) # rm -rf abc
  • cp: 파일이나 디렉터리 복사
    • ex) # cp abc.txt cba.txt
  • touch: 크기가 0인 새 파일을 생성, 이미 존재하는 경우 수정 시간을 변경
    • ex) # touch abc.txt
  • mv: 파일과 디렉터리의 이름을 변경하거나 위치 이동 시 사용
    • ex) # mv abc.txt www.txt
  • mkdir: 새로운 디렉터리 생성
    • ex) # mkdir abc
  • rmdir: 디렉터리 삭제(단, 해당 디렉터리가 비어있어야 함)
    • ex) # rmdir abc
  • cat: 텍스트로 작성된 파일을 화면에 출력
    • ex) # cat a.txt b.txt
  • head, tail: 텍스트로 작성된 파일의 앞 10행 또는 마지막 10행만 출력
    • ex) # head anaconda-ks.cfg
  • more: 텍스트로 작성된 파일을 화면에 페이지 단위로 출력
    • ex) # more anaconda-ks.cfg
  • less: more와 용도가 비슷하지만 기능이 더 확장된 명령어
    • ex) # less anaconda-ks.cfg
  • file: File이 어떤 종류이 파일인지 표시
    • ex) # file anaconda-ks.cfg
  • clear: 명령창을 깨끗하게 지워줌
    • ex) # clear

리눅스는 별도의 숨김 파일(Hidden File)이라는 속성이 존재하지 않는다. 파일명이나 디렉터리의 맨 앞 글자를 '.'으로 하면 자동으로 숨김 파일이 된다.


📝 사용자와 그룹

  • 리눅스는 서버용 운영체제이기 때문에 다중 사용자 시스템(Multi-User System)이다.
  • 기본적으로 root라는 이름을 가진 슈퍼 유저(Superuser)가 있으며, 해당 유저는 모든 작업을 할 수 있는 권한이 있다.
  • 모든 사용자는 하나 이상의 그룹에 소속되어 있다.
  • 사용자는 /etc/passwd 파일에 정의되어 있다.

# vi /etc/passwd

  • 각 행의 의미는 다음과 같다.
    • 사용자 이름:암호:사용자 ID:사용자가 소속된 그룹 ID:전체 이름:홈 디렉터리:기본 셸
    • 암호 부분이 x로 되어있는 것은 암호가 'x'라는 뜻이 아닌, 따로 관리한다는 의미
  • 사용자의 암호는 /etc/shadow 파일에서 관리됨

# vi /etc/shadow

  • 그룹은 /etc/group 파일에 정의되어 있음

# vi /etc/group

  • 각 행의 의미는 다음과 같음
    • 그룹명:비밀번호:그룹 ID:그룹에 속한 사용자명
  • 위에서 언급했듯, 리눅스 운영체제에서 모든 사용자는 하나 이상의 그룹에 소속되어 있어야하기 때문에 그룹을 따로 생성하여 할당해주지 않았다면 사용자의 생성과 동시에 그와 동일한 이름의 그룹을 시스템이 자동으로 생성하여 할당해줌

 

📜 사용자와 그룹 관련 명령어

  • useradd: 새로운 사용자 추가
    • ex) # useradd newuser
    • 사용자 생성 옵션(생략시 기본 값으로 생성)
      • -u: ID 지정
      • -g: 그룹 지정
      • -d: 홈 디렉터리 지정
      • -s: 셸 지정
  • passwd: 사용자의 비밀번호를 지정하거나 변경
    • ex) # passwd newuser
  • usermod: 사용자의 속성 변경
    • ex) # usermod -g root newuser
  • userdel: 사용자 삭제
    • ex) # userdel newuser
  • change: 사용자의 암호를 주기적으로 변경하도록 설정
    • ex) # change -m 2 newuser
  • groups: 현재 사용자가 속한 그룹을 보여줌
    • ex) # groups
  • groupadd: 새로운 그룹 생성
    • ex) # groupadd newgroup
  • groupmod: 그룹의 속성 변경
    • ex) # groupmod -n newgroup mygroup
  • groupdel: 그룹 삭제
    • ex) # groupdel newgroup
  • gpasswd: 그룹의 암호를 설정하거나, 그룹의 관리를 수행
    • ex) # gpasswd newgroup
  • 위에서 잠깐 언급했지만, 리눅스 운영체제는 사용자 생성 시에 그룹을 따로 할당해주지 않으면 자동으로 동일한 이름의 그룹을 생성하여 임의로 할당해준다고 했었다.
  • 다만 이는 올바르지 않은 방식으로, 우리는 이를 막기위해 사용자를 생성하기 전 먼저 해당 사용자가 소속될 그룹을 생성해주고 이후에 해당 그룹에 새롭게 생성된 사용자를 할당하는 방식을 사용할 것이다.
  • 이를 위해 우선 아래와 같이 새로운 그룹을 생성해준다.

  • 다음으로 사용자를 생성할 때 -g 옵션을 추가하여 해당 사용자가 소속될 그룹을 지정해준다.
  • 아래 예시는 총 두 명의 사용자(user1, user2)를 생성하고 'centosGroup'에 소속시킨 예이다.

  • 이후 사용자 정보를 확인해보면 아래와 같이 출력되는 것을 확인할 수 있다.

  • 사용자 정보 파일에 두 명의 사용자가 추가된 것을 확인할 수 있으며 그룹 ID는 centosGroup의 ID인 1001번이 지정된 것을 확인할 수 있다.
  • 추가로, 새로운 사용자를 생성할 때 해당 사용자의 홈 디렉터리를 따로 지정해주지 않으면 자동적으로 /home 디렉터리가 기본값으로 설정되게 된다.

지금까지 생성한 사용자들에 대한 폴더가 /home 디렉터리에 생성되어 있는 모습

  • 임의의 사용자 폴더에 들어가서 존재하는 파일을 살펴보면 다음과 같다.

-a는 숨김 파일까지 모두 출력하는 옵션

  • 해당 파일들은 /etc/skel 디렉터리에 있는 파일과 완전히 동일한 파일들로써, 새로운 사용자가 생성되면 홈 디렉터리에 해당 사용자의 이름으로 된 폴더를 생성하고, /etc/skel 디렉터리에서 위 파일들을 복사하여 가져오게 된다.
  • 즉, 우리는 이를 활용하여 이후 생성될 모든 사용자에게 포함시킬 파일을 임의로 생성하여 /etc/skel 디렉터리에 저장하면 새로운 사용자가 생성될 때 자동으로 해당 파일을 복사하여 사용자의 홈 디렉터리에 저장하게 될 것이다.

📝 파일과 디렉터리의 소유와 허가권

  • 파일 유형
    • 디렉터리일 경우에는 d, 일반적인 파일일 경우에는 하이픈(-)으로 표시
  • 파일 허가권(Permission)
    • rw-, r--, r-- 3개씩 끊어서 읽음(r은 read, w는 write, x는 excute의 약자)
    • 첫 번째 rw-는 소유자(User)의 파일 접근 권한을 의미
    • 두 번째 r--는 그룹(Group)의 파일 접근 권한을 의미
    • 세 번째 r--는 그 외의 사용자(Other)의 파일 접근 권한을 의미
    • chmod: 파일 허가권 변경 명령어
      • ex) # chmod 777 sample.txt
    • 숫자(8진수)로도 표시 가능

  • 파일 소유권(Ownership)
    • 파일을 소유한 사용자와 그룹을 의미
    • chown/chgrp: 파일의 소유권을 변경하는 명령어
      • ex) # chown centos.centos sample.txt 또는 # chown centos sample.txt 및 # chgrp centos sample.txt

📝 링크

  • 파일의 링크(Link)에는 하드 링크(Hard Link)와 심볼릭 링크(Symbolic Link 또는 Soft Link) 두 가지가 있음

  • 하드 링크를 생성하면 "하드 링크 파일"만 하나 생성되며 같은 inode1을 사용
    • ex) # ln [링크 대상 파일 이름] [링크 파일 이름]
  • 심볼릭 링크를 생성하면 새로운 inode2를 만들고, 데이터는 원본 파일을 연결하는 효과
    • ex) # ln -s [링크 대상 파일 이름] [링크 파일 이름]

심볼릭 링크는 Windows의 바로가기 아이콘과 비슷한 개념


📝 프로그램 설치를 위한 RPM

  • RPM(Redhat Package Manager)
    • 리눅스 운영체제 상의 프로그램 설치시 까다로웠던 설치 작업을 보완하기 위해 Windows의 'setup.exe'와 비슷하게 실행만으로 설치 작업이 자동으로 이루어지도록 한 설치 파일
    • 확장명은 *.rpm이며, 이를 패키지(Package)라고 부름

gzip은 압축용 패키지 중 하나

  • 파일의 의미는 다음과 같다.
    • 패키지 이름-버전-릴리즈 번호.CentOS 버전.아키텍처.rpm
      • 패키지 이름: gzip -> 패키지(프로그램)의 이름
      • 버전: 1.9 -> 대개 3자리 수로 구성(주버전, 부버전, 패치버전)
      • 릴리즈 번호: 4 -> 문제점을 개선할 때마다 붙여지는 번호
      • CentOS 버전: el8 -> CentOS에서 배포할 경우에 붙여짐
      • 아키텍처: x86_64 -> 64비트 CPU를 의미
        • x86_64: 64비트 CPU
        • i368~686: 32비트 CPU
        • src: 소스
        • noarch: 모든 CPU

 

📜 자주 사용하는 RPM 명령어 옵션

  • 설치: rpm -Uvh [패키지 파일 이름].rpm
    • U(대문자): 패키지가 설치/업그레이드
    • v: 설치 과정의 확인
    • h: 설치 진행 과정을 # 마크로 화면에 출력
  • 삭제: rpm -e [패키지 이름]
  • 이미 설치된 패키지 질의
    • rpm -qa [패키지 이름]: 패키지가 설치되었는지 확인
    • rpm -qf [파일의 절대경로]: 파일이 어느 패키지에 포함된 것인지 확인
  • 아직 설치되지 않은 rpm 파일에 대한 질의
    • rpm -qlp [패키지 파일 이름].rpm: 패키지 파일에 어떤 파일들이 포함되어있는지 확인
    • rpm -qip [패키지 파일 이름].rpm: 패키지 파일의 상세 정보

 

📜 RPM 단점

  • 의존성 문제
    • A 패키지가 설치되기 위해서 B 패키지가 필요한 경우, RPM으로는 해결하기가 까다로움
  • 이를 해결하기 위해 DNF(또는 YUM)가 등장함

때문에 RPM은 DNF 이전의 가장 기본적인 개념으로써 알아두도록 하고, DNF를 좀 더 중점적으로 사용하도록 하자


📝 편리한 패키지 설치, DNF

  • DNF(Dandified dnf)
    • rpm 명령의 패키지 의존성 문제를 완전하게 해결
    • 인터넷을 통하여 필요한 파일을 저장소(Repository)에서 자동으로 모두 다운로드해서 설치하는 방식
      • 저장소의 URL은 /etc/yum.repos.d/ 디렉터리
    • CentOS 7은 YUM, CentOS 8은 YUM에서 좀 더 개선된 DNF 명령을 사용

 

📜 DNF 기본 사용법

  • 기본 설치: dnf install [패키지 이름]
    • 주로 dnf -y install [패키지 이름]으로 사용
    • -y는 사용자의 확인을 모두 'yes'로 간주하고 설치를 진행한다는 옵션
  • RPM 파일 설치: dnf install [rpm 파일 이름].rpm
  • 업데이트 가능한 목록 보기: dnf check-update
  • 업데이트: dnf update [패키지 이름]
  • 삭제: dnf remove [패키지 이름]
  • 정보 확인: dnf info [패키지 이름]

 

📜 DNF 고급 사용법

  • 패키지 그룹 설치: dnf groupinstall [패키지 그룹 이름]
  • 패키지 리스트 확인: dnf list [패키지 이름]
  • 특정 파일이 속한 패키지 이름 확인: dnf provides [파일 이름]
  • GPG 키 검사 생략
    • dnf install --nogpgcheck [rpm 파일 이름].rpm
    • CentOS 8에서 인증되지 않은 패키지를 강제로 설치할 때 사용
  • 기존 저장소 목록 지우기: dnf clean all

 

📜 DNF 작동 방식 설정 파일

'dnf install [패키지 이름]' 명령이 동작하는 방식

  • /etc/yum.conf 파일: 특별히 변경할 필요 없음
  • /etc/yum.repos.d/ 디렉터리
    • dnf 명령을 입력했을 때 검색하게 되는 네트워크 주소가 들어있는 여러 개의 파일이 저장된 디렉터리
  • /etc/yum.repos.d/ 디렉터리의 *.repo 파일
    • 실습에 문제가 없도록 하기 위해 CentOS 8의 1905버전만 설치되도록 기존 /etc/yum.repos.d/ 폴더의 내용을 모두 삭제하고 This.repo 파일을 새로 생성하여 남겨두었음. 또한 This.repo 파일에 BaseOS, AppStream 등의 저장소를 별도로 적어놓았음

# vi This.repo

 

📜 네트워크와 DVD를 동시에 사용하는 방법

  • 네트워크 망이 잘 형성되어 있다면 위와 같이 네트워크만을 사용하여 패키지를 설치해도 큰 문제는 없다.
  • 다만 네트워크 속도가 좋지 않거나 네트워크 사용료가 비싸다면 이를 DNF 명령어를 쓰되, DVD를 통해 설치하는 방법을 사용하여 효율적으로 설치가 가능하다.
  • 이를 실습해보기 위해 우선 CD/DVD 장치를 연결한 뒤 복잡한 경로에 자동으로 마운트되어 있는 부분을 /media/cdrom/ 경로로 마운트하도록 수정하였다.

  • 이제 사용자가 DNF 명령을 입력하면 해당 경로에 설치되도록 해야하는데, 이를 위해서는 위에서 잠깐 언급했던 repo 파일을 수정해주어야 한다.
  • 따라서 우선 /etc/yum.repos.d/ 폴더로 이동하여 해당 파일을 backup 파일로 옮겨주어 해당 파일을 인식하지 못하도록 해주었다.

  • 위 상태에서는 해당 디렉터리에 패키지 설치를 위한 아무런 정보도 담겨있지 않기 때문에 당연히 패키지 설치가 정상적으로 수행되지 않을 것이다.
  • 따라서 에디터를 이용하여 아래와 같이 정보 파일을 직접 만들어주었다.

# vi dvd.repo

  • baseurl 구문을 보면 주소를 네트워크 주소가 아닌 우리가 위에서 마운트한 디렉터리의 경로로 지정해준 것을 확인할 수 있다.
  • 해당 경로에는 아래와 같이 여러 폴더들이 존재하며 그 중 BaseOS 폴더에는 BaseOS와 관련된 패키지들이 들어있다.

  • 즉, 앞으로 DNF 명령을 입력하면 해당 폴더에서 패키지를 찾아 설치한다는 의미이다.
  • 마찬가지로 AppStream과 관련된 패키지도 위 디렉터리의 AppStream 폴더를 경로로 지정하여 해당 폴더에서 패키지를 찾아 설치할 것이다.
  • 명백히 말하자면 패키지를 다운로드 하는 것이 아닌 DVD에서 패키지를 찾아 복사하는 개념으로 볼 수 있다.
  • 이후, 네트워크가 연결되지 않은 상태에서 패키지 설치가 잘 수행되는지 확인하기 위해 네트워크를 잠시 끊어주었다.

# ifdown ens160

  • 설치를 수행해보면 정상적으로 설치가 진행되는 것을 확인할 수 있으며, 출력된 결과를 확인해보면 리포지토리 열에 'DVD-AppStream'과 같이 위에서 지정한 경로에서 패키지를 가져온다는 것을 확인할 수 있다.

# dnf -y install mariadb

  • 이렇게 네트워크를 사용하지 않고도 패키지를 설치하는 방법에 대해 알아보았다.
  • 다만 DVD에 존재하는 패키지의 종류에는 한계가 있으며, 때문에 DVD만으로는 설치할 수 없는 패키지가 있다.
  • 주로 사용하는 패키지는 DVD에 존재하지만 그 외의 기타 패키지들은 존재하지 않는 것이다.
  • 이를 해결하기 위해 우리는 만약 설치하고자 하는 패키지가 DVD에 존재한다면 DVD를 이용하여 설치하고, 그렇지 않다면 네트워크를 통해 CentOS에서 제공하는 패키지 저장소를 이용하여 설치하는 방법을 사용할 수 있다.
  • 즉, 필요한 경우에만 네트워크를 사용하여 설치하는 매우 효율적인 설치를 수행할 수 있다는 것이다.
  • 아래는 DVD에 해당 패키지가 존재하지 않아 패키지 설치에 실패한 예이다.

# dnf -y install help2man

  • 이를 해결하기 위해 다시 dvd.repo 파일을 열어 아래와 같이 수정해주었다.

# vi dvd.repo

  • 새롭게 추가된 부분을 보면 baseurl 부분을 네트워크 주소로 지정하여 준 것을 확인할 수 있다.
  • 이렇게 하면 BaseOS와 AppStream과 관련된 패키지는 DVD를 통해 설치되고, PowerTools와 관련된 패키지는 그 아래 네트워크 주소에 의해 설치된다.

위와 같이 repo 파일의 내용을 수정했다면 'dnf clean all' 명령어를 수행해주도록 하자
안해도 크게 상관 없지만 위 명령을 수행하면 DNF 정보가 모두 지워지기 때문에 DNF 파일을 처음부터 다시 읽어들여 확실하게 인식하도록 할 수 있다.

  • 이후 네트워크를 다시 연결(# ifup ens160)하고 두 가지 패키지를 동시에 설치해보았다.

# dnf install mc help2man

  • mc 패키지의 경우 DVD에서 설치가 가능한 패키지이고, help2man 패키지는 기타 패키지이기 때문에 네트워크를 통해서 설치해야하는 패키지이다.
  • 따라서 위처럼 각각의 패키지 설치에 사용된 Repository가 다른 것을 확인할 수 있다.

 

📜 패키지 그룹 설치

  • 추가로 패키지 그룹을 설치함으로써 해당 그룹에 속해있는 모든 패키지를 한 번에 설치하는 방법 또한 제공되고 있는데 그 방법은 다음과 같다.
  • 우선 # dnf group list hidden 명령어를 통해 아래와 같이 패키지 그룹 목록을 출력해보았다.
    • hidden을 붙이게 되면 숨겨진 그룹 목록까지 모두 보여줌

# dnf group list hidden

  • 목록을 살펴보면 '설치된 그룹' 외에 '사용 가능한 그룹'에 나와있는 목록들을 확인할 수 있다. 즉, 사용 가능하지만 아직 설치가 되지 않은 패키지 그룹이라는 뜻이다.
  • 패키지 그룹을 다운로드 하기 위해서는 # dnf -y groupinstall "[패키지 이름]"과 같이 명령어를 입력해야 한다(끈따옴표 주의).

저작자표시

'🐧 Linux > 이것이 리눅스다(CentOS 8)' 카테고리의 다른 글

[이것이 리눅스다(CentOS 8)] 04장. 필수개념과 명령어(4)  (0) 2023.03.28
[이것이 리눅스다(CentOS 8)] 04장. 필수개념과 명령어(3)  (0) 2023.03.27
[이것이 리눅스다(CentOS 8)] 04장. 필수개념과 명령어(1)  (0) 2023.03.25
[이것이 리눅스다(CentOS 8)] 03장. CentOS 리눅스 설치  (0) 2023.03.24
[이것이 리눅스다 (CentOS 8)] 01장. 실습 환경 구축  (0) 2023.03.23
    '🐧 Linux/이것이 리눅스다(CentOS 8)' 카테고리의 다른 글
    • [이것이 리눅스다(CentOS 8)] 04장. 필수개념과 명령어(4)
    • [이것이 리눅스다(CentOS 8)] 04장. 필수개념과 명령어(3)
    • [이것이 리눅스다(CentOS 8)] 04장. 필수개념과 명령어(1)
    • [이것이 리눅스다(CentOS 8)] 03장. CentOS 리눅스 설치
    Baeg-won
    Baeg-won

    티스토리툴바