Ubuntu Linux (2) - 서버 구축(운영) 시 필요한 필수 개념 & 명령어
2024-09-12(THU)
01. 전일 내용 - Ubuntu 24.04 - Partition 작업
01-1. 디스크 파티션(Disk Partition)
(1) 하드 드라이브나 SSD와 같은 저장 장치를 여러 개의 독립적인 논리적 구역으로 나뉜 공간을 의미한다.
(2) 리눅스 운영체제에서 파티션은 각 독립적으로 관리되고 다양한 용도로 사용될 수 있다.
01-2. 리눅스 파일 시스템 : ext4
(1) 파일 시스템이란, 데이터를 저장하고 조직화하는 방법을 정의한 구조를 의미한다.
(2) 파티션 작업 수행 시 파일 시스템은 ext4(Fourth Extended File System)로써, 리눅스에서 일반적으로 사용되는 파일 시스템 중 하나다.
(3) ext4는 안정성과 성능이 뛰어난 파일 시스템으로 다양한 개선 사항 덕분에 대용량 디스크와 복잡한 파일 시스템 구조를 효율적으로 처리할 수 있다.
01-3. 리눅스 주요 파티션 종류
(1) 루트 파티션(/)
- 리눅스 운영 체제의 기본 파일 시스템이 위치하는 파티션 영역
(2) 스왑 파티션
- 메모리 부족시 디스크 공간을 임시로 메모리 공간으로 활용하기 위한 파티션 영역
(3) 부트 파티션
- 커널과 부팅 관련 파일이 저장되는 파티션 영역
(4) 데이터 파티션
- 사용자 데이터나 애플리케이션 데이터를 저장하는 데 사용되는 파티션 영역
01-4. 주요 명령어
(1) ls -l /dev/sd *
- /dev 디렉터리 하위에 존재하는 sd*로 시작하는 모든 파일 및 디바이스를 자세히 나열한다.
(2) df -k, dh -h
- df(disk free) 커맨드로 파일 시스템의 디스크 공간 사용량, 여유 공간을 표시
- df -k : 디스크 사용량을 킬로바이트 단위로 표시
- df -h(human-readable) :디스크 사용량을 MB, GB 단위로 출력
02. 전일 내용 - Ubuntu 24.04 : root 계정으로 접속, 초기 설정 진행
(1) sudo su - root
- Ubuntu 사용자 암호 입력 후 접속
(2) passwd 커맨드로 루트 계정의 초기 비밀번호 활성화 가능
02-1. 처음 부팅 시, root사용자로 자동 로그인
(1) 해당 설정을 적용하려면 아래와 같은 파일을 nano editor로 수정했다.
- 단 보안상의 이유로 실무에서는 위와 같은 설정을 지양하도록 한다.
(2) nano /etc/gdm3/custom.conf 수정
[daemon]
- AutomaticLoginEnable=true
- AutomaticLogin=root
...
[security]
- AllowRoot=True
(3) nano /etc/pam.d/gdm-password
- 3번 라인에서 auth required 영역을 주석 처리한다.
(4) nano /etc/pam.d/gdm-autologin
- 마찬가지로 3번 라인에서 auth required 영역을 주석 처리한다.
02-2. Ubuntu 자동 업데이트 확인 해제
(1) 새로운 버전의 우분투 업데이트에 대한 알림 및 업데이트 해제
02-3. 기존 소프트웨어 설치의 설정 파일 이름을 변경
cd /etc/apt
mv sources.list sources.list.bak
ls
(1) /etc/apt 경로에서 pgm update 진행 시 사이트 목록을 저장한다.
(2) mv sources.list → sources.list.bak
(3) 리눅스 버전이 업데이트됨에 따라 이전 커맨드가 수행되지 않는 상황이라 wget으로 새 목록을 다운로드할 수 없었다.
(4) 추가 pgm update를 진행하기 위해 apt update 커맨드를 수행한다.
02-4. IP 주소 설정 / 네트워크 인터페이스 확인
(1) IP 관련 네트워크 인터페이스를 GUI 환경에서 작업 : nmtui
(2) 네트워크 인터페이스 확인 커맨드 : ifconfig, ip addr
- ifconfig 커맨드가 수행되지 않는 경우 sudo apt install net-tools 커맨드로 관련 라이브러리를 설치하고 진행한다.
02-5. 화면 보호기 비활성화
(1) 작업을 일정 시간 이상 수행하지 않을 시 화면이 잠기게 되는데 이 부분을 비활성화시켰다.
- 비활성화 경로 : 설정 → 전원
02-6. 언어 설정
(1) 설정 → 시스템 → 지역 및 언어 → 언어 관리 부분에서 한국어가 설치되어 있지 않다면 설치 후 적용한다.
(2) 또한 입력 데이터를 관리하기 위해 키보드 메뉴에서 키보드 입력기 부분에 한글을 추가한다.
(3) 추가적으로 관련 작업 사항을 반영하기 위해 시스템 reboot를 진행한다.
02-7. Snapshot
(1) 각 VMs에 대해 작업한 내용을 저장하기 위해 ESXi 클라이언트에서 스냅샷을 생성해 둔다.
(1) 리눅스 운영체제의 시작과 종료 방법, 가상 콘솔, 런레벨
(2) vi Editor 사용법
(3) CD/DVD/USB 마운트 및 사용법
(4) 필수 기본 커맨드
(5) 사용자 및 그룹 관리
(6) 파일 및 디렉터리 / 소유권 / 허가권
(7) 리눅스용 프로그램 설치를 위한 커맨드 : dpkg, apt-get
(8) 네트워크 설정
(9) GRUB 부트로더 이해, 커널 컴파일 실습
1. 서버(Linux) 구축 시 알아야 할 개념 : 시작 & 종료
1-1. 터미널 환경에서의 시스템 종료
(1) poweroff
(2) shutdown -p now
(3) halt -p
(4) init 0
(5) shutdown -p +10
- 10분 후 시스템을 종료한다.
1-2. 리눅스는 대소문자를 구분
(1) 윈도우와 달리 유닉스/리눅스 시스템은 대문자와 소문자를 명확히 구분하는 운영체제다.
(2) #은 루트 권한을 가진 사용자, $은 일반 사용자다.
1-3. 시스템 재부팅
(1) reboot
(2) shuitdown -r now
(3) init 6
(4) shutdown -r 22:00
- 오후 10시에 재부팅이 진행된다.
1-4. 가상 콘솔
(1) 가상 콘솔은 가상의 모니터라고 생각하면 쉽다.
1-5. LAB : shutdown
(1) 루트 계정으로 접속한다.
(2) shutdown -h + 5 커맨드로 시스템을 5분 뒤 종료한다는 메시지가 확인된다.
(3) shutdown -c로 앞서 실행한 shutdown 명령을 해제한다.
1-6. 런레벨(Run-Level) & 시스템에 설정된 런레벨 변경(LAB) & history 명령 활용
(1) 런레벨은 init 명령 뒤에 붙는 숫자를 런레벨이라고 한다.
런 레벨 | 영문 모드 | 설명 | 비고 |
0 | power off | 종료 모드 | |
1 | rescue | 시스템 복구 모드 | |
2 | multi-user | 사용하지 않음 | |
3 | multi-user | 텍스트 모드의 다중 사용자 모드 | |
4 | multi-user | 사용하지 않음 | |
5 | graphical | 그래픽 모드의 다중 사용자 모드 | |
6 | reboot |
(2) 리눅스는 시스템이 가동되는 방법을 위와 같이 7가지 런레벨로 구분하고 있다.
(3) 런레벨 모드를 확인하려면 위의 경로로 접속해서 해당 디렉터리의 runlevel?.target 파일을 확인한다.
(4) 7개의 runlevel?.target 파일은 링크 파일로써 각 링크 파일은 실제 파일과 연결되어 있다. 예를 들어 runlevel0.target 파일은 poweroff.target 파일과 연결되어 있는 개념이다.
(5) 앞서 설명한 init ? 커맨드는 지금 즉시 런레벨 ?으로 시스템을 전환하라는 의미를 갖게 된다.
(6) 시스템에 설정된 런레벨을 변경해 볼 수 있는데 위의 명령으로 default.target에 연결된 파일을 확인하면 graphical.target이다. 해당 파일은 시스템을 처음 부팅 시 GUI 환경으로 부팅하도록 설정되어 있다.
(7) 부팅 시 CLI 모드로 부팅되도록 런레벨을 변경하고자 한다.
(8) ln -sf 링크 파일 변경 커맨드를 통해서 default.target 파일의 링크 파일이 multi-user.target으로 변경되도록 한다.
(9) 위와 같이 재부팅 진행 시 CLI 모드로 부팅된다.
(10) startx 커맨드를 수행한다.
- startx 명령어는 X Window를 실행하는 커맨드다.
(11) 그럼 이전과 다른 GUI 환경이 보이게 된다.
(12) 현재 상태에서 편집기를 열고 history 명령으로 이전에 작업한 커맨드를 살펴본다.
(13) 이전 GUI 환경으로 재부팅이 필요한 상황이므로 ln -sf 커맨드로 default.target 파일에 대해 graphical.target 파일로 링크 파일을 다시 생성해 주고 reboot 시킨다.
(14) 그럼 이전과 동일한 환경으로 재부팅했으며 마찬가지로 history를 통해 이전 작업 내역을 확인한다.
(15) history 명령의 경우 !${number} 커맨드를 통해 히스토리상에 적혀있던 커맨드와 히스토리의 인덱스 넘버와 매칭시켜서 실행시켜 주면 관련된 커맨드가 위와 같이 수행될 수 있다.
(16) history > 파일 이름
- 해당 명령으로 히스토리 내역을 파일 형태로 저장할 수도 있으며 cat으로 저장된 aaa.txt 파일의 내역을 한 번에 확인한 내용이다.
(17) history -c
- 히스토리 내역을 모두 삭제한다.
2. 서버(Linux) 구축 시 알아야 할 개념 : vi Editor 활용
2-1. 에디터 사용
(1) 윈도우의 메모장처럼 X Window에서 제공하는 편리한 에디터 편집기인 gedit이 있다.
(2) 전통적으로 vi 에디터가 있지만 초심자 입장에서는 조금 어려울 수 있다.
(3) 하지만 더 일반적으로 자주 사용되는 vi 에디터를 본격적으로 실습해 보고자 한다.
- 위의 흐름만 익숙하다면 크게 어렵지 않다.
2-2. LAB : vi 에디터 사용 : 일반적인 파일 작성 방법 / 저장, 비정상 종료 시 해결 방법
(1) 위의 경로에서 작업한다.
(2) set number : 라인 수를 지정
(3) vi text.txt로 새로운 편집기를 연다. 아무 내용도 입력하지 않고 빠져 나오려면 :q를 입력하고 엔터를 누른다. 아무것도 저장되지 않았다면 파일을 생성되지 않는다.
(4) 이번엔 다시 편집기로 들어가서 i를 누르고 위와 같이 내용을 입력한 뒤 ESC를 누르면 다시 명령을 기다리는 상태가 된다 해당 상태에서 :wq를 입력해서 파일을 저장하고 에디터를 빠져나온다.
(5) 파일을 수정하려면 위의 방법처럼 에디터를 열고 내용을 수정한 뒤 :wq 명령으로 저장 후 빠져나온다.
(6) 만약 내을 잘못 수정해서 저장이 필요하지 않다면 :q! 옵션으로 내용을 저장하지 않고 강제로 빠져나올 수 있다.
(7) 만약 작업이 비정상 종료되어 다시 터미널을 접속해야 한다면? 비정상 종료된 상태에서 터미널을 열고 작업 경로에서 vi 커맨드로 다시 파일을 열려고 시도해 보자.
(8) 작업 중 비정상 종료된 경우 다시 파일 재실행 시 위와 같은 문구가 확인된다.
(9) 비정상 종료 발생 시 작업이 완전히 수행된 것이 아니므로 시스템이 이미 스왑 파일을 만들어 두었다.
- 작업 경로에서 ls -l로 스왑 파일 존재 여부를 확인해 본다.
(10) 이 상태에서는 스왑 파일 때문에 내용을 수정해도 내용이 정상 저장되지 않는 상태다.
(11) ls -l으로 .test1.txt.swp 파일이 보인다. .swp 확장자로 끝나는 파일이 에디터 편집기의 비정상 종료에 의한 스왑 파일이다. 해당 파일을 rm -rf .test1.txt.swp 명령으로 삭제한다.
(12) 이후부터는 경고가 뜨지 않고 파일을 다시 수정할 수 있게 되었다.
3. 서버(Linux) 구축 시 알아야 할 개념 : CD, DVD, USB Mount
3-1. 마운트 개요
(1) 윈도우에서는 마운트라는 개념이 별로 사용되지 않아서 다소 생소할 수 있다. 리눅스에서는 하드 디스크의 파티션, CD, DVD, USB 메모리 등을 사용하기 위해서는 지정한 위치에 연결해 줘야 하는 작업이 필요하다.
(2) 물리적인 장치를 특정한 위치에 연결시키는 과정을 마운트라고 한다.
3-2. CD/DVD Mount
(1) 우선 Server를 초기 스냅샷 상태로 되돌린다.
(2) 위와 같이 mount 커맨드로 마운트된 파티션을 확인할 수 있다.
(3) 가상 머신 설정에서 우분투를 설치할 당시 설정해 놓은 CD/DVD 드라이브가 활성화되어 있는지 체크한다.
(4) ESXi 설정에 의해 위와 같은 마운트 파일이 확인된다.
(5) 현재 마운트된 경로는 /media다. 현재 루트 사용자가 작업했으므로 마운트된 경로는 /media/root/Ubuntu. 24.04 LTS amd64/가 된다.
(6) 현재 마운트된 경로로 이동한다.
(7) caspter 디렉터리 내부에 filesystem.squash. 파일이 우분투 전체가 들어 있는 파일이다. 즉 우분투를 설치하면 해당 파일들의 압축 해제가 진행되면서 전체 시스템이 구성된다.
(8) CD/DVD를 사용하지 않는다면 마운트를 해제하면 되는데 마운트된 경로가 아닌 더 상위 디렉터리로 진입해서 해제해야 하며 umount /dev/cdrom 명령으로 마운트를 해제한다.
4. 서버(Linux) 구축 시 알아야 할 개념 : 기본 명령어
4-1. ls
(1) List의 약자로 윈도우에서 dir 커맨드와 동일한 역할을 수행하며. 해당 디렉터리에 있는 파일과 하위 디렉터리 목록을 나열한다.
(2) ls /etc/sytstemd
- /etc/systemd 디렉터리의 목록 표시
(3) ls -a
- 현재 디렉터리의 목록 표시(숨김 파일 포함)
(4) ls -l
- 현재 디렉터리의 목록을 보다 상세하게 표시
(5) ls *.conf
- 확장자가 .conf 파일인 파일을 표시
(6) ls -l /etc/systemd/b*
/etc/systemd 디렉터리 내부에서 앞 글자가 b인 목록을 상세하게 표시
4-2. 숨김 파일과 현재 디렉터리
(1) 리눅스에서 숨김 파일이라는 속성이 별도로 없기 때문에 파일 이름이나 디렉터리 제일 앞 글자를 "."으로 하면 자동으로 숨김 파일로 처리된다.
(2) 현재 디렉터리라는 개념은 Windows에서도 잘 사용되지 않는 개념으로 본인이 작업하고 있는 경로를 확인하기 위해서 pwd 커맨드로 잘 확인하는 게 좋다.
4-3. cd
(1) 디렉터리를 이동하는 커맨드다. (Change Directory)
(2) cd ~ubuntu
- ubuntu 사용자의 홈 디렉터리로 이동한다.
(3) cd ../
- 현재 디렉터리 기준으로 상위 디렉터리로 이동한다.
(4) cd /etc/systemd
- 절대 경로를 통해 /etc/systemd 경로로 이동한다.
(5) cd ../etc.systemd
- 상대 경로를 통해 이동한다. 현재 디렉터리의 상위로 이동한 후 /etc/systemd로 이동한다.
4-4. 절대 경로(Absolute Path)와 상대 경로(Relative Path)
(1) 절대 경로는 파일 시스템의 루트 디렉터리부터 시작하여 특정 파일이나 디렉터리까지의 전체 경로를 포함하는 개념이다.
* 파일 시스템(File System) - 리눅스에서 데이터의 저장 및 관리 방법을 정의하는 구조와 규칙
(2) 상대 경로는 현재 디렉토리를 기준으로 파일이나 디렉토리의 위치를 지정하는 경로를 말한다.
4-5. pwd
(1) 현재 작업 중인 경로를 표시한다. (Print Working Directory)
4-6. rm(Remove)
(1) 파일이나 디렉터리를 삭제하는 커맨드다.
(2) rm abc.txt
- 해당 파일을 삭제한다. (rm -f)
(3) rm -i abc.txt
- 삭제 시 해당 파일을 삭제하는지 다시 한 번 확인하는 메시지가 출력된다.
(4) rm -f abc.txt
- 삭제 시 삭제 여부를 묻지 않고 바로 삭제한다.
(5) rm -rf abc
- abc 디렉터리와 그 하위에 있는 디렉터리까지 모두 강제로 삭제한다.
- 편리하지만 해당 커맨드를 사용할 때는 주의가 필요하다. (--Recursive --Force)
4-7. cp
(1) 파일이나 디렉터리를 복사한다. 복사한 파일은 복사한 사용자의 소유가 된다. 그러므로 명령을 실행하는 사용자는 해당 파일의 읽기 권한이 필요하다.
(2) cp abc.txt cba txt
- abc.txt를 cba.txt라는 이름으로 바꿔서 복사한다.
(3) cp -r abc cba
- 디렉터리 복사, abc 디렉터리를 복사하여 새로운 cba 디렉터리를 만들어 복사한다. (Recursive)
4-8. touch
(1) 크기가 0인 새 파일을 생성하거나 이미 파일이 존재한다면 파일의 최종 시간을 현재 시간으로 수정한다.
(2) touch abc.txt
- 현재 디렉터리에 해당 파일이 없다면 abc.txt라는 빈 파일을 생성하고 만약 존재할 경우 파일의 최종 시각을 현재 시각으로 변경한다.
4-9. mv
(1) 파일이나 디렉터리의 이름을 변경하거나 다른 디렉터리로 옮길 때 사용한다. (Move)
(2) mv abc.txt /etc/systemd
- abc.txt를 /etc/systemd/ 디렉터리로 이동한다.
(3) mv aaa bbb ccc ddd
- aaa, bbb, ccc 파일을 /ddd 디렉터리로 이동한다.
(4) mv abc.txt www.txt
- abc.txt, www.txt가 서로 동일한 디렉터리에 존재한다면 abc.txt의 파일 이름을 www.txt로 변경한다.
- 기존 abc.txt 파일은 삭제되고 www.txt라는 새로운 파일이 생기는 것
(5) mv abc.txt /path/childpath www.txt
- abc.txt 파일을 /path/childpath 디렉터리로 이동한 뒤 파일 이름을 www.txt로 변경한다.
4-10. mkdir
(1) 새로운 디렉터리를 생성한다. 생성된 디렉터리는 명령을 실행한 사용자의 소유가 된다. (Make Directory)
(2) mkdir abc
- 현재 디렉터리 하위 디렉터리로 /abc라는 디렉터리를 생성한다.
(3) mkdir -p /def/fgh
(1) /def/fgh를 생성하는데 만약 부모 디렉터리인 /def가 존재하지 않는다면 자동으로 생성한다. (Parent)
(2) test 디렉터리에서 abc 디렉터리는 생성했지만 존재하지 않는 디렉터리를 기준으로 하위 디렉터리까지 만들려고 한다면 작업이 진행되지 않는다.
(3) tree 명령어로 디렉터리의 계층적 구조를 확인할 수 있다.
4-11. rmdir
(1) 디렉터리를 삭제한다. 파일이 들어 있는 디렉터리 삭제 시 rm-r 커맨드를 준다. (Remove Directory)
(2) test 디렉터리에서 abc 디렉터리를 삭제시킨다.
4-12. cat
(1) cat은 파일의 내용을 화면의 보여주는 명령어다. (concatenate)
(2) /etc/passwd의 경우 유닉스 및 리눅스 계열 운영체제에서 사용자 계정 정보를 저장하는 주요 파일이다.
(3) 해당 파일은 시스템의 모든 사용자에 대한 기본적인 정보를 포함하고 있다.
4-13. head, tail
(1) 텍스트 형식으로 작성된 파일의 앞 10행 또는 마지막 10행만 화면에 출력한다.
4-14. more
(1) 텍스트 형식으로 작성된 파일을 페이지 단위로 화면에 출력한다. 스페이스 바를 눌러서 다음 페이지로 이동할 수 있으며 B를 누르면 앞 페이지로 이동하고 Q를 누르면 종료한다.
4-15. less
(1) more와 용도가 비슷하지만 기능이 더 확장되어 있다. more 명령으로 사용하는 키도 사용할 수 있으며 추가로 화살표 키나 page up, page down도 사용 가능하다.
4-16. file
(1) 해당 파일이 어떤 종류의 파일인지 표시해준다.
4-17. clear
(1) 현재 작업 중인 터미널 화면을 지운다.
5. 서버(Linux) 구축 시 알아야 할 개념 : 사용자와 그룹
5-1. 사용자와 그룹
(1) 리눅스는 기본적으로 다중 사용자 시스템으로 하나의 리눅스에 사용자 여러 명이 동시에 접속해서 사용할 수 있는 시스템이다.
(2) 리눅스를 한 번 설치하면 루트 유저가 생성되는데 루트 유저는 모든 권한을 갖고 있는 슈퍼 유저다.
(3) 또한 사용자는 혼자 존재하는 것이 아닌 하나 이상의 그룹에 소속되어 있어야 한다.
(4) cat /etc/passwd로 볼 수 있는 해당 파일의 구조는 아래와 같다.
- 사용자 이름 : 암호 : 사용자 ID : 사용자가 속한 그룹 ID : 추가 정보 : 홈 디렉터리 : /기본 Shell
(5) cat /etc/group 파일 확인
- 사용자 이름 : 암호 : 사용자가 속한 그룹 ID : 그룹에 속한 사용자 이름
5-2. adduser
(1) 새로운 사용자를 추가한다. 해당 명령 실행 시 /etc/passwd, /etc/shadow, /etc/group, /etc/gshadow 파일에 새로운 행이 추가된다.
(2) adduser --uid 1111 newuser2
- newuser2 사용자를 생성하면서 사용자 ID를 1111로 지정한다.
(3) adduser --home /newhome newuser4
- newuser4 사용자를 생성하면서 홈 디렉터리를 /newhome으로 지정한다.
(4) adduser --shell /bin/csh newuser5
- newuser5 사용자를 생성하면서 기본 Shell을 /bin/csh로 지정한다.
파일 업데이트 경로 | 의미 |
/etc/passwd | - 사용자 계정 정보를 저장한다 - 사용자 이름, 암호 자리 표시자(일반적으로 'x'), 사용자 ID (UID), 그룹 ID (GID), 사용자 설명, 홈 디렉토리, 로그인 셸 |
/etc/shadow | - 사용자 암호 및 암호와 관련된 설정 정보를 저장한다. - 사용자 이름, 암호 해시, 암호 만료 정보(마지막 변경일, 만료일, 경고 기간 등) |
/etc/group | - 그룹 정보를 저장한다. - 그룹 이름, 그룹 암호 자리 표시자(일반적으로 'x'), GID, 그룹 구성원 목록 |
/etc/gshadow | - 그룹의 암호 및 그룹 관련 정보(보안 관련)를 저장한다. - 그룹 이름, 그룹 암호 자리 표시자, 그룹 관리자 목록, 그룹 구성원 목록 |
(6) tail 커맨드로 파일의 하단 기준 5행 라인까지만 사용자의 계정 정보를 표시해 준다.
(7) 그룹에 대한 정보를 출력한다.
(8) 그룹의 패스워드 및 그룹 관련 정보를 출력한다.
(9) 사용자의 암호, 암호와 관련된 정보들을 출력한다.
(10) 신규 사용자 newuser1를 생성하는 과정이다.
(11) /etc/passwd로 확인 시 방금 생성한 newuser1 정보가 확인된다.
(12) /etc/shadow로 확인 시 방금 생성한 newuser1의 패스워드 정보가 확인된다.
(13) newuser1 사용자에 대한 그룹 정보를 확인할 수 있다.
(14) newuser1이 속한 그룹의 그룹 패스워드 및 관련 정보를 확인한다.
(15) 사용자 ID가 1111인 newuser2 사용자를 생성한다.
(16) /etc/passwd를 통해 newuser2의 정보가 확인된다.
(17) 해당 커맨드는 newuser3 사용자를 새로 추가하면서, 생성된 사용자의 그룹을 지정하는 옵션을 부여했다.
- 1000은 그룹의 GID를 의미하며 생성된 사용자에게 그룹 ID가 1000인 그룹을 기본 그룹으로 지정하도록 한다.
(18) /etc/passwd/, /etc/shadow 커맨드로 생성된 newuser3의 정보, 패스워드 정보가 확인된다.
(19) cat /etc/group | grep newuser3
- |은 리눅스 커맨드에서 Pipe Operator로써 두 명령어의 파이프 라인을 형성함으로써 초기 커맨드의 값을 이후 커맨드의 수행 시 전달해 주는 역할을 수행한다.
- grep newuser3은 앞에서 넘겨받은 결과값을 기준으로 newuser3라는 문자열을 검색해서 나온 결과값만 보여주게 된다.
(20) newuser3까지 생성하다 보면 users 그룹에 대한 사용자가 많아지다 보니 단건으로 조회되지 않고 묶음으로 조회되는 것을 확인할 수 있다. 따라서 위의 grep 명령을 추가했다.
(21) adduser --home /newhome --shell /bin/csh newuser4
- newuser4를 생성하면서 홈 디렉터리를 /newhome으로 지정하고 로그인 쉘을 /bin/csh으로 설정한다.
(22) newuser4에 대한 정보가 확인된다.
5-3. passwd
(1) 사용자의 비밀번호를 수정한다.
(2) passwd newuser1
5-4. usermod
(1) 사용자와 관련된 속성을 수정하는 커맨드
(2) usermod --home /home/newuser4 --shell /bin/bash newuser4
- 현재 해당 커맨드는 사용자 계정의 홈 디렉터리, 로그인 Shell을 변경하는 데 사용되는 커맨드다.
- 홈 디렉터리를 /home/newuser4, 로그인 쉘을 /bin/bash로 변경한다.
5-5. userdel
(1) 사용자를 삭제하는 커맨드
- 추가적으로 사용자의 홈 디렉터리를 삭제하려면 userdel [사용자명]이지만 홈 디렉터리까지 완전히 삭제하려면 userdel -r [사용자명] 커맨드를 사용한다.
(2) userdel newuser4
(3) userdel -r newuser2
- 사용자는 물론, 사용자와 관련된 홈 디렉터리까지 지우도록 커맨드를 준다.
(4) 홈 디렉터리까지 지웠으므로 ls -l /home 수행 시 홈 디렉터리가 보이지 않는다.
5-6. chage
(1) 사용자가 암호를 주기적으로 변경하도록 설정한다. (Change Age의 약자)
(2) chage -l newuser1
- newuser1 사용자에 대해 설정된 사항 확인
(3) chage -m 2 newuser1
- newuser1 사용자에 대해 설정한 암호를 사용해야 하는 최소 일자를 지정한다. (변경 후 최소 2일은 사용해야 함)
(4) chage -M 30 newuser1
- newuser1 사용자에 대해 설정한 암호를 사용해야 하는 최대 일자를 지정한다. (변경 후 최대 30일까지 사용 가능하다.)
(5) chage -E 2026/12/29 newuser1
- newuser1 사용자에 대해 설정한 암호가 만료되는 날짜를 지정한다. (Expiration Date)
(5) chage -W 10 newuser1
- newuser1 사용자에 대해 설정한 암호가 만료되기 전에 경고하는 기간. 지정하지 않을 경우 Default는 7일이다.
(Warning Period - 위와 같이 설정하면 암호가 만료되기 10일 전부터 경고 메시지를 사용자에게 출력해 준다.)
5-7. groups
(1) 사용자가 소속된 그룹을 표시한다.
5-8. groupadd
(1) 새로운 그룹을 생성한다.
5-9. groupmod
(1) 그룹의 속성을 변경한다.
5-10. groupdel
(1) 그룹을 삭제한다.
5-11. gpasswd
(1) 그룹의 암호를 설정하거나 관리를 수행한다.
5-12. ls -a 명령으로 user1 사용자의 홈 디렉터리인 /home/user1과 /etc/skel 디렉터리 비교
(1) 두 디렉터리를 비교해보면 동일한 파일이 저장되어 있다. 새로운 사용자를 생성하면 해당 사용자의 홈 디렉터리 기본 설정은 '/home/사용자 이름'으로 지정되며 /etc/skel 디렉터리의 모든 내용을 사용자의 홈 디렉터리로 복사하는 작업이 수행된다. 앞으로 생성되는 사용자에게 특정한 파일 등을 배포하고 싶다면 /etc/skel 디렉터리에 따로 보관해둔다.
6. 서버(Linux) 구축 시 알아야 할 개념 : File, Directory의 Ownership & Permissions
6-1. 개요
(1) 리눅스는 각 파일과 디렉터리마다 소유권(Ownership)과 허가권(Permissions)이라는 속성이 존재한다.
(2) 작업 경로에서 텍스트 파일을 하나 만들고 ls -l을 수행한다.
6-2. 파일 허가권(File Permissions)
(1) 파일 허가권(Permissions)은 파일에 대한 접근 권한을 제어하는 설정으로 읽기, 쓰기, 실행에 대한 접근 권한을 제어한다.
(2) r : Read, w : Write, x : Execute
(3) 세 개의 영역으로 허가권을 나타내며 첫 번째 영역은 소유자(User)의 접근 권한, 두 번째는 그룹(Group)에 대한 접근 권한, 세 번째는 그 외 사용자(Other)에 대한 접근 권한을 나타내고 있다.
User | Group | Other | ||||||
r | w | x | r | w | x | r | w | x |
4 | 2 | 0 | 4 | 2 | 0 | 4 | 2 | 0 |
7 | 7 | 7 | ||||||
- | - | - | - | - | - | - | - | - |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 |
(4) 또한 허가권은 위와 같이 숫자 형태로도 나타낼 수 있다.
6-3. 파일 소유권(File Ownership)
(1) 파일 소유권의 경우 파일을 소유한 사용자와 그룹을 의미한다. 파일의 소유권을 변경하는 명령은 chown이다.
(2) 사용법 chown [새로운 사용자 이름](.새로운 그룹 이름)
6-4. 파일 허가권 & 소유권 실습 : 파일 속성 변경(허가권 변경)
(1) 현재 테스트 파일을 생성했지만 허가권이 644이기 때문에 실행할 수 없는 상태다.
(2) 따라서 실행을 위해 허가권을 755로 변경해 준다.
6-5. 파일 허가권 & 소유권 실습 :파일 소유권 변경
(1) chmod ubuntu test 커맨드를 주게 되면 소유권을 가진 사용자가 ubuntu로 변경된다.
(2) 만약 현재 상태에서 그룹을 바꾸고 싶다면 chown ubuntu.ubuntu test로 수정한다.
6-6. 링크(Link)
(1) 파일의 링크는 하드 링크(Hard Link)와 심볼릭 링크(Symbolic Link)로 구분된다.
(2) 원본 파일에 심볼릭 링크를 생성 시 새로운 inode2를 생성하고 데이터는 원본 파일과 연결되는 기능을 갖게 된다.
(3) 일반적으로 사용자들이 주로 사용하는 링크는 심볼릭 링크이며 윈도우의 바로 가기 아이콘이 심볼릭 링크에 해당된다.
(4) 심볼릭 링크 생성 : ln -s [링크 대상 파일 이름] [링크 파일 이름]
(5) 하드 링크(Hard Link)
- 하드 링크는 원본 파일과 동일한 inode를 직접적으로 가리킨다. 원본 파일이 소실되더라도 데이터만 살아 있다면 원본 파일에 접근 가능하다. (일반적으로 변수의 복사 개념)
(6) 심볼릭 링크(Symbolic Link)
- 심볼릭 링크는 하드 링크의 단점을 보완하기 위해 설계되었으며, 또 다른 inode를 생성하여 해당 inode를 가리키게 된다. 복사 생성된 inode는 포인터를 가리키고 포인터는 다시 원본 파일을 가리키는 링크 개념이다. (참조 변수 복사 개념)
(7) inode
- 유닉스 계통의 파일 시스템에서 사용하는 자료 구조로써 모든 디렉터리와 파일들은 한 개의 inode를 갖고 있다. inode에는 파일의 허가권, 소유권, 파일의 실제 위치 등 주요 정보들이 들어 있다. 즉 파일 내부에 데이터가 존재한다고 생각하는 개념은, inode가 데이터를 담고 있는 메모리 영역을 가리키는 주소값이고 해당 파일이 inode에 연결되어 있는 형태이다.
6-7. 하드 링크와 심볼릭 링크 생성 & 생성 후 확인
(2) ln basefile hardlink
- 해당 명령어를 기준으로 하드 링크를 생성한다.
- ls -l 으로 확인해 보면 새로운 하드 링크가 생성된 것을 확인할 수 있다.
(3) ln -s basefile softlink
- 해당 명령어를 기준으로 대상 파일에 대한 심볼릭 링크를 생성한다.
(4) 링크들이 만들어준 포인터 개념으로 각 링크 파일들이 파일을 가르키고 있기 때문에 cat 명령을 수행해도 동일한 데이터가 표시된다.
7. 서버(Linux) 구축 시 알아야 할 개념 : 패키지 매니저 : apt, dpkg
7-1. dpkg 개요
(1) 우분투에서 패키지(프로그램)을 설치할 때 가장 많이 사용되는 커맨드는 dpkg, apt(apt-get)이다.
(2) apt가 존재하기 전에는 주로 dpkg(Debian Package)가 사용되었으나 apt는 dpkg의 개념과 기능을 포함하므로 최신 우분투에선 apt를 많이 사용한다.
(3) 초창기 리눅스는 새로운 프로그램 설치가 꽤나 까다로웠다. 이러한 부분을 개선하기 위해 데비안 리눅스에서 Windows의 setup.exe와 비슷하게 프로그램을 설치한 후 바로 실행시킬 수 있는 설치 파일을 제작했는데 설치 파일의 확장자는 .deb이며 패키지(Package)라고 부르게 됐다.
7-2. 파일의 의미
(1) 우분투 사이트의 저장소에는 많은 .deb 파일이 존재한다.
(2) .deb 파일의 형식은 일반적으로 아래와 같다.
- 패키지 이름_버전-개정 번호_아키텍처.deb
7-3. 자주 사용되는 dpkg 커맨드 옵션
(1) 설치 : dpkg -i 패키지 이름.deb
-i 또는 --install 옵션을 준다.
(2) 삭제 : dpkg -r(--remove) 패키지 이름 또는 dpkg -P(--purge) 패키지 이름
(3) 패키지 조회 : dpkg -l 패키지 이름, dpkg -L 패키지 이름
7-4 dpkg 단점 정리
(1) dpkg 패키지 관리자의 가장 큰 단점으로는 패키지 설치에 필요한 다른 패키지를 끌어오지 못하는 의존성 문제가 가장 크다. 이러한 단점 때문에 dpkg 패키지 매니저를 현재는 거의 사용하지 않는다.
7-5. 패키지를 편리하게 관리하는 apt
(1) apt 명령어는 dpkg 명령어의 패키지 의존성 문제를 완전히 해결하는 패키지 매니저다.
(2) 패키지를 설치할 때 관련 의존성이 붙어 있는 연관 패키지를 먼저 설치해 주는 기능을 갖고 있다.
(3) apt는 우분투가 제공하는 파일 저장소에서 설치할 .deb 파일을 인터넷을 통해 다운로드한 후 자동으로 설치해 주기 때문에 사용자는 더 이상 프로그램 설치 시 의존성 문제를 고민하지 않아도 된다. 인터넷 환경을 요구하기 때문에 네트워크에 연결되어 있어야 apt 패키지 매니저를 사용할 수 있다.
7-6. apt 패키지 관리자 주요 명령어
(1) 설치
- apt -y install [패키지 이름]
- apt install [패키지 이름]
(2) 패키지 목록 업데이트
- apt update
- /etc/apt/sources.list 파일의 내용이 수정되면 해당 명령으로 다운로드 받은 패키지 목록을 업데이트해야 한다.
(3) 삭제
- apt remove 패키지 이름 : 기존 설치된 패키지를 제거한다.
- apt purge 패키지 이름 : 기존 설치된 패키지를 관련 설정 파일을 포함해 완전히 제거한다.
(4) 다운로드 받은 파일 제거
- apt clean 또는 apt autoclean
- 설치할 때 다운로드 받은 파일 및 히스토리 파일(과거 파일)들을 모두 삭제한다.
7-7. apt-cache
(1) apt-cache 패키지를 설치하기 전에 패키지에 대한 정보나 의존성 문제를 미리 확인해 볼 수 있는 커맨드이다.
(2) 패키지 정보 확인 : apt-cache show [패키지 이름]
- 패키지의 정보를 화면에 출력한다.
(3) 패키지 의존성 확인 : apt-cache depends [패키지 이름]
- 패키지와 연관된 의존성 정보를 출력한다.
(4) 패키지 역의존성 확인 : apt-cache rdepends [패키지 이름]
- 해당 패키지에 의존하는 다른 패키지의 목록을 출력한다.
7-8. apt 작동 방식과 설정 파일
(1) apt 명령어와 관련된 설정 파일은 /etc/apt 디렉터리 내부에 존재한다.
(2) sources.list 파일이 핵심이며 apt 명령을 입력했을 때 인터넷에서 해당 패키지 파일을 검색하는 네트워크 주소가 들어 있다.
(3) 위의 그림은 apt install [패키지 이름] 커맨드를 주게 될 때 작동하는 순서다.
(4) apt install gcalculator 명령을 주면 /etc/apt/sources.list 파일을 확인해서 관련 패키지가 존재하는 인터넷 주소를 확인한다.
(5) 이후 설치 패키지 관련 목록을 요청하고 인터넷으로부터 다운로드 받는다.
- 우분투 패키지 저장소에서 main, universe, multiverse, restricted 4가지의 저장소 타입을 지원하는데 의미는 다음과 같다.
저장소 유형 | 의미 |
main | 우분투에서 공식적으로 지원하는 무료 소프트웨어 |
universe | 우분투에서 지원하지 않는 무료 소프트웨어 |
multiverse | 우분투에서 지원하지 않는 유료 소프트웨어 |
restricted | 우분투에서 공식적으로 지원하는 유료 소프트웨어 |
7-9. 의존성 문제가 존재하는 패키지를 apt 커맨드로 설치
(1) apt-cache depends galculator 커맨드로 galculator를 설치하기 위해 필요한 의존성을 확인할 수 있다.]
(2) apt install gcalulator로 해당 프로그램을 설치한다.
(3) 이후에 해당 프로그램을 실행시킬 수 있다.
7-10. apt 명령의 추가된 기능에 대한 실습
(1) gedit /etc/apt/sources.list 커맨드로 geditor를 열면 우선 내용이 공백인 것을 확인할 수 있다.
(2) apt update로 설정한 내용을 반영한다.
(3) geditor를 열고 위와 같은 내용을 입력한 뒤 저장한다. 이후 apt update로 내용을 반영한다.
(4) 이후 apt -y install gaclulator 커맨드로 다시 재설치한다.
(5) 이미 최신 버전이 설치되어 있기 때문에 apt install gcalulator 커맨드가 수행되지만 설치는 되지 않는다.
(6) geditor를 열어서 각 행을 복사한 enl focal-updates로 수정한 후 저장한 뒤 에디터를 빠져나온다.
(7) apt update 명령으로 수정 사항을 반영한다.
(8) 이번에 apt를 통해 firefox를 업데이트한다.
- apt -y install firefox
- 이미 최신 버전이기 때문에 별도의 업데이트가 수행되지 않는다.
8. 서버(Linux) 구축 시 알아야 할 개념 : 파일 압축(File Compression)
8-1. 파일 압축하기
(1) 리눅스에서 가장 많이 사용하는 압축 파일의 확장명은 xz, bz2, gz, zip, Z 등이 있다. 예전에는 주로 gz를 사용했으나 최근에는 압축률이 더 좋은 xz나 bz2를 더 많이 사용하는 추세다. 이러한 파일들을 관리하는 명령어들은 아래와 같다.
8-2. xz
(1) 파일을 확장자 xz로 압축하거나 압축을 푼다. 비교적 최신 압축 커맨드다
(2) xz [파일 이름]
- 해당 파일을 압축 파일인 파일 이름.xz로 생성한다.
(3) xz -d [파일 이름].xz
- 해당 파일의 압축을 해제한다. 압축을 해제해서 순수 파일인 [파일 이름]으로 생성한다. (Decompress)
(4) xz -l [파일 이름].xz
- 해당 파일을 압축 파일에 포함된 파일 목록과 압축률 등 목록을 출력한다. (List)
(5) xz -k [파일 이름]
- 압축 후 기존 파일을 삭제하지 않고 그대로 둔다. (Keep)
8-3. bzip2
(1) 확장자 bzip2로 압축하거나 압축을 푼다.
(2) bzip2 [파일 이름]
- 해당 파일을 압축 파일인 파일 이름.bz로 생성한다.
(3) bzip2 -d [파일 이름].bz2 또는 bunzip2 [파일 이름].bz2
- 압축을 해제한다. 압축을 풀어서 [파일 이름] 순수 파일로 생성한다.
(4) bzip2 -k [파일 이름]
- 압축 후 기존 파일을 삭제하지 않고 그대로 둔다. (Keep)
8-4. gzip
(1) 확장명 gz로 압축하거나 압축을 해제한다.
(2) gzip [파일 이름]
- 해당 파일을 압축 파일인 파일 이름.gz로 생성한다.
(3) gzip -d [파일 이름].gz 또는 gunzip [파일 이름].gz
- 해당 압축파일의 압축을 해제한다.
9. Reference
(1) https://www.hanbit.co.kr/store/books/look.php?p_code=B3658372395
※ 해당 포스팅을 기준으로 내용 추가가 필요하다고 생각되면 기존 내용에 다른 내용이 추가될 수 있습니다.
개인적으로 공부하며 정리한 내용이기에 오타나 틀린 부분이 있을 수 있으며, 이에 대해 댓글로 알려주시면 감사하겠습니다!