2024.02.23 (22 -> 졸업식)
오늘 학습한 내용 : Linux 기본 개념 , Linux 명령어
1. Linux 기본 개념
a. root권한 vs 일반사용자 권한
- root 권한은 시스템의 모든 측면을 제어할 수 있는 권한을 제공한다. 시스템의 설정 변경, 소프트웨어 설치, 사용자 관리 등과 같이 시스템 관리 작업을 수행할 수 있다. 반면에, 일반 사용자는 제한된 권한을 가지며, 시스템의 핵심 부분을 변경하거나 관리할 수 없다.
- sudo su 명령어를 통해 root권한을 활성화 할 수 있다.
- #프롬프트 : root / $프롬프트 : rocky
b. 종료 , 재부팅 , 로그아웃 명령어
- 종료
- 수동> [오른쪽 위 전원] - [컴퓨터끄기]
- 터미널> "shutdown -Pnow", "halt -p", "init 0"
- 재부팅
- 터미널 > "shutdown -rnow", "reboot", "init 6"
- 로그아웃
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)
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
-
실습 > 사용자 및 그룹 관리 하는 법 익히기 (사용자 생성, 그룹 생성 등등)
- user1,user2 생성 및 확인

- user1,user2의 사용자ID와 그룹ID가 각각 동일하다
- 특정 그룹을 지정하지 않고 사용자를 생성시 자동으로 그룹이 사용자ID와 동일한 이름으로 생성되면서(1001,1002) 해당 그룹에 사용자가 속하게 된다. (사용자는 반드시 1개의 그룹에 속해야하기 때문)
- 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가 동일한 것 확인
- user1,user2의 암호 지정

- tail -5 /etc/shadow를 통해 user1,user2 확인, user1,user2의 앞에 !!은 암호 설정이 안되어 있다는 의미
- passwd를 통해 비밀번호를 설정
- user와 etc/skel 디렉토리 비교

- 두 디렉토리를 비교한 결과 동일한 결과가 나온 것을 알 수 있음
- 그 이유는 user1,user2가 생성될 때 /etc/skel의 모든 내용이 user1,user2의 홈 디렉토리에 복사하는 작업이 발생했기 때문
- 따라서, 생성하는 사용자에게 특정 파일을 배포하고 싶은 경우 /etc/skel에 파일을 넣어두면 자동 배포가 이루어진다.
4. 파일과 디렉터리의 소유권과 허가권
[출처 : 한빛미디어 '이것이 리눅스다']
1. 파일 유형
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. 실습 > 파일의 허가권 및 소유권 이해
-
- vi test를 통해 다음과 같이 내용을 작성

-
- 파일 실행 및 허가권 변경

-
- 파일의 소유권 변경


- 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%정도 차지
하드 링크(Hard Link)
- 원본파일과 동일한 내용을 가지고 있음
- 하드 링크를 생성할 때는 원본 파일의 inode를 가리키는 새로운 디렉토리 엔트리(하드 링크 파일)가 생김
- 동일한 파일 시스템 내에서만 작동하며, 디렉토리는 생성할 수 없다
- 원본 파일을 수정하면 하드 링크를 통해 수정된 내용이 모두 반영
- 하드 링크의 목적
- 파일 시스템내에서 하나의 파일에 대한 다중 참조를 가능하게 하여 파일을 효율적으로 조직 및 관리 가능
- 파일의 백업이나 복제를 쉽게 만들 수 있음
ln 원본파일명 생성할하드링크파일명
ex. ln basefile hardlinkfile
심볼릭 링크(Symbolic Link)
- 원본 파일이나 디렉토리를 가리키는 특별한 종류의 파일
- 원본 파일의 경로를 저장하고 있는 파일이며 원본 파일을 가리킴
- 심볼릭 링크를 생성하면 원본 파일의 경로를 갖는 새로운 파일 생성
- 심볼릭 링크는 원본 파일의 변경을 추적하며, 원본 파일이나 디렉토리를 가리키는 포인터 역할
- 심볼릭 링크의 목적
유연성을 제공하여 원본파일의 위치를 변경하거나 다른 파일 시스템으로 이동할 때 유용
동적으로 파일이나 디렉토리를 참조하는 것이 가능
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 -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 고급 사용법
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 주소를 통해 인터넷에서 해당 파일을 다운로드 해오는 것.