[week1-5]리눅스의 기초

haeryong·2022년 11월 4일
0

File System

File System

-OS의 매우 큰 부분을 차지함. 메모리의 역할 중 일부분을 FS가 담당.
-데이터베이스의 일종이라고도 할 수 있음. 파일을 저장.

FS의 종류

Linux
ext4 : 리눅스 고유 파일 시스템.
ext3, ext2 : ext4의 이전 버전

xfs : 실리콘 그래픽스의 저널링 파일 시스템(RHEL7부터 기본 파일 시스템)
zfs : 솔라리스의 기본 파일 시스템, CoW 지원
Btrfs : zfs와 비슷한 컨셉으로 개발됨.

Windows
ntfs : 윈도우즈 NT 계열에서 사용하는 파일 시스템
fat32 : FAT 32비트 버전
exfat : FAT 32비트 확장 버전
fat16(vfat) : windows 9x 계열

새로운 FS를 만드는 방법

새로운 FS를 만드는 순서
1. Partitioning
command : fdisk, parted

  1. File System
    command : mkfs(make file system 또는 포맷), fsck 또는 xfs_*

  2. Mount
    command : mount / umount
    마운트 설정 파일 : /etc/fstab

Partition

Physical partition과 logical partition이 존재함.
최근의 modern OS에는 logical partition을 선호함.

logical partition을 이용해 여러 디스크를 묶어서 큰 용량의 파티션을 만들 수 있음.

physical disk의 disklabel type
1. DOS 방식 (=msdos 방식) : 고전적인 방식
-2TB 제한

  • fdisk를 사용.

DOS partition의 종류
1. Primary partition(주 파티션)
한 disk당 4개의 partition 까지 만들 수 있음.

  1. Extended partition(확장 파티션)
    4개 이상의 파티션이 필요할 때 사용.
    extended partition은 다시 여러개의 logical drive로 나눌 수 있음.

  2. Logical drive(논리 드라이브)

fdisk
# fdisk -l : 현재 FS리스트 출력.(legacy)
# lsblk : fdisk -l보다 이걸 더 많이 사용함.

block device : 저장장치를 이르는 용어.(입출력장치는 character device)

/dev/sd[abcd..] : SCSI disk 혹은 Serial type(SATA, USB)
/dev/hd[abcd] : IDE disk
/dev/nvme.. : nvme

fdisk commands
a : 부트 활성 플래그를 지정.
d : 파티션 삭제
l : 알려진 파티션 ID(파티션 타입)
n : 새 파티션 생성
p : 현재 파티션 상태를 출력
t : 파티션 ID(타입)을 변경
q : 변경된 상태를 저장하지 않고 종료.
w : 저장하고 종료.

2. GPT 방식 : dos레이블의 문제를 개선한 방식.
-용량 제한 없음.

  • parted / gparted or gdisk를 사용. 최근버전부터는 fdisk도 GPT 지원.

Linux Admin

Package manager

Package system 종류
1. Redhat 계열
rpm(주로 사용) database
yum(주로 사용)
dnf

  1. Debian 계열
    dpkg, dselect
    apt-get(주로 사용), apt-cache
    aptitude
    apt(가장 많이 사용)

Package
시스템을 구성하는 파일의 묶음.
패키지 관리자 또는 설치 프로그램에 의해서 읽혀지는 pre-build 파일들.(미리 컴파일 완료됨)
관리하기에 편리하다.

리눅스 패키지 방식
Redhat 계열 : RPM / Debian 계열 : Deb

dpkg file 구조

예시

[package_name]_[version_release]_[arch].deb
strace_4.5.20_2.3_amd64.deb

amd64 == x86 64bit == x86_64

dpkg는 초기 debian에서 유래.
dependency 해결에 문제, 네트워크 설치를 제대로 지원하지 않음.
-> APT가 등장.

dpkg -l : 패키지 리스트 확인

dpkg -s <package_pattern..> : 패키지 상태 확인(status)

dpkg -S <pattern ...> : 해당 파일이 어느 패키지에 속하는 지 확인.

dpkg 사용 중 에러 발생 시 dpkg --audit 사용.

APT

apt
debian의 dpkg를 랩핑한 front-end tool
-네트워크 설치 지원
-dependency 탐색 및 설치 가능

binary(명령어)
apt-get : install, remove, upgrade..
apt-cache : query

binary-extensions
apt-file

등등.. 너무 복잡함.

통일성을 위해 하나로 합쳐진 새로운 binary
apt

source list
apt가 package를 가져오는 곳.
CD-ROM, Disk 등의 로컬 주소 또는 URL을 의미함.

/etc/apt/sources.list에서 직접 수정하거나
주로 apt edit-sources 명령어로 편집.

sources.list format : debian
1. deb-src cdrom:[Debian GNU/Linux 7.5.0 _Wheezy_ ...]/ wheezy main 2. deb cdrom:[Debian GNU/Linux 7.5.0 Wheezy ...]/ wheezy main```

deb http://security.debian.org/ wheezy/updates main
deb-src http://security.debian.org/ wheezy/updates main

sources.list를 추가하려면..
/etc/apt/sources.list.d/kr.list 파일을 만들어서 추가.

sources.list format : ubuntu
1. deb [option1=value1 option2=value2] uri suite [component1] [component2][...] 2. deb-src [option1=value1 option2=value2] uri suite [component1][component2] [...]```

deb http://kr.archive.ubuntu.com/ubuntu/ bionic main restricted

uri : DEB 패키지를 제공하는 사이트의 URI
suite : distribution codename 디렉터리 이름.(xenial, bionic 등등..)
component : suite의 구성 요소 및 라이선스 종류별 분류(최소 1개를 지정해야함.)

component의 종류
main : 우분투에서 공식적으로 관리함. free license
restricted : 제한적으로 free license
universe : 커뮤니티에서 관리. 비공식적.

multiverse : non-free
security : Important security updates
updates : recommended updates
proposed : proposed updates
backports : unsupported

sources.list에 추가하려면..
kakao mirror의 경우 아래의 명령어를 통해 /etc/apt/sources.list.d/kakao.list 파일을 생성해 추가해야함.

$ sudo apt edit-sources kakao.list

# kakao mirror : ubuntu 18.04 LTS
deb http://mirror.kakao.com/ubuntu/ bionic main restricted universe
deb http://mirror.kakao.com/ubuntu/ bionic-updates main restricted universe
deb http://mirror.kakao.com/ubuntu/ bionic-security main restricted universe

apt list
패키지 목록 출력
apt list [options] [package pattern]
options
1. --installed : 설치된 패키지
2. --upgradable : 업그레이드 가능한 패키지
3. --all-versions : 모든 버전의 패키지(default는 최신 버전만 출력됨.)

apt search
apt search [-n] <_regex>
패키지를 키워드로 검색.
options
1. -n : 검색 대상을 name 필드로 한정.

name에 bash가 있는 경우에 검색
apt search -n bash

name의 시작 부분에 bash가 있는 경우에 검색
apt search -n '^bash'

출력으로 패키지 이름만 보고싶은 경우.

# apt search -n '^pcp*'
대신
# apt-cache pkgnames pcp
를 사용하면 된다.

apt show
apt show <_package_name>[=version]

apt remove, purge, autoremove

  1. remove : 패키지만 삭제(config 파일은 남음.)
  2. purge : 패키지 삭제(config도 삭제. 완전삭제)
  3. autoremove : 의존성이 깨지거나 버전 관리로 쓰이지 않는 패키지를 자동 제거.

# apt purge htop

unmet dependency
패키지 설치 중 의존성 에러가 발생하였을 때.
1. sources.list 설정에서 universe를 빼먹었을 경우 추가해본다.
2. 에러가 난 패키지의 버전을 downgrade 해본다.
downgrade 예시

# apt install curl
이 의존성 에러가 발생하는 경우.

# apt list --all-versions libcurl3-gnutls
설치 가능한 버전 체크 후 설치.
# apt install curl libcurl3-gnutls=7.47.0-1ubuntu2

Debian Network Manager

NextworkManager
-daemon으로 작동.
-network configuration와 network connection 관리를 수행한다.
-Dbus 기반으로 동적 상태를 감지할 수 있음. -> 다른 애플리케이션이나 daemon에 네트워크 정보를 제공, 권한을 줄 수 있다.
-systemd 기반의 다른 Linux distribution도 통일된 명령어를 사용한다.
-Ethernet, Wi-Fi, Mobile broadband 등 다양한 기능에 플랫폼을 제공 -> 네트워크 연결 관리가 쉬워진다.

NetworkManager 설정

UNIX standard command (POSIX)
(legacy)
ifconfig
route

Non-standard command(리눅스에서만)
ip : net. commands on EL6
nmcli : new commands on EL7
ethertools, pifconfig & pethtool(python-ethool)

nmcli

Network Manager CLI tool
네트워크 관련된 대부분의 기능을 포함함.
조회 및 설정 가능.

general
# nmcli g

nmcli networking
networking 상태 조회

# nmcli n
disabled인 경우

# nmcli n on
을 통해 켜준다.

# nmcli n connectivity
full

nmcli dev

# nmcli d
DEVICE  TYPE      STATE        CONNECTION 
wlp5s0  wifi      connected    haeryong   
enp3s0  ethernet  unavailable  --         
lo      loopback  unmanaged    --      

network device naming
eth#[:n] : eth0, eth1 ... (EL6 이전에 주로 쓰이던 방식으로 어느것이 어떤 HW인지 구분이 힘든 문제로 인해 새로운 naming이 등장함.)

Consistent Network Device Naming(2009)
e.g. enp5s0, eno1 ...

prefix
en : ethernet
wl : wireless
ww : wireless wan

following device name
o : on-board device index number
s : hotplug slot index number
p : PCI geographical location 또는 USB port number chain

e.g. enp3s0 : 이더넷 / PCI bus 3번 / 슬롯 0번

nmcli radio
무선 관련 설정.

nmcli connection
연결된 network들.

nmcli connection show
# nmcli c s

  1. 소문자 : 설정된 값(offline에서도 보임.)
    ipv4.method
    -> auto | manual (auto = dhcp, manual = static ip)
    manual으로 직접 ip를 입력하는 경우
    ipv4.addr
    -> IPv4 address CIDR 표기법으로 작성(= 192.168.110.50/24)

optional prefix

  • : 기존의 설정에 또다른 설정을 추가.
  • : 해당 설정을 뺌.
    none : 모든 값을 없앰.
  1. 대문자 : 할당된 값(online일때만 보임.)

CONNECTION id 바꾸기
# nmcli con modify "원래 id" connection.id "바꿀 id"

IP 주소 변경

# nmcli c s

# nmcli c s ens#

IP4.ADDRESS, IP4.GATEWAY 부분의 IP주소를 기억해두자.

# nmcli c modify ens# ipv4.methon manual \
ipv4.addresses 192.168.xxx.110/24(앞에서 확인했던 IP4.ADDRESS 값을 xxx에 넣음) \
ipv.gateway 192.168.xxx.2(앞에서 확인했던 IP4.GATEWAY 값을 xxx에 넣음.) \
+ipv4.dns 8.8.8.8

# nmcli c s ens#
으로 확인하면 소문자 부분(ipv4)가 변해있다.

바뀐 값을 갱신하려면 연결을 끊고 다시 연결해야함.
# nmcli c down ens# && nmcli c up ens#

virtual IP 추가/ 삭제

추가
# nmcli c mod ens# +ipv4.addr 192.168.xxx.101/24
# nmcli c mod ens# +ipv4.addr 192.168.xxx.102/24

삭제
# nmcli c mod enx# -ipv.4addr 192.168.xxx.101/24
# nmcli c mod enx# -ipv.4addr 192.168.xxx.102/24

기존의 설정을 삭제/재생성

# nmcli c del ens#

# nmcli c add con-name ens# ifname <device_name> type ethernet \
ip4 192.168.xxx.101/24

DNS 추가

# nmcli c mod ens# +ipv4.dns 8.8.8.8

# nmcli c s ens# | egrep '(ipv.addr|ipv4.gateway|ipv4.dns)'

device가 disconnected 되어있는 경우
# nmcli dev connect ens#
connect가 실패하는 경우.
1. # nmcli networking 출력이 disabled인 경우 # nmcli networking on으로 켜 준다.
2. lshw, lspci, lsusb, dmesg 등으로 하드웨어가 인식된 상태인지 점검.

Network tools

ssh server

ssh
secure shell : 통신 구간을 암호화하는 서비스.
-기존의 telnet을 대체함.
-telnet의 프로토콜 테스트 기능은 nc, curl로 대체.
기본적으로 리눅스 서버에 ssh 서비스가 탑재되어 있음.(리눅스는 openssh 사용)

sshd : ssh daemon. ssh server를 의미함.
ssh : ssh client. 터미널에서 ssh CLI 명령어로 실햄. (MS 윈도 계열은 putty 등의 툴 이용.)

sshd 서버 준비 작업
1. 설치 여부 확인.
Deb : apt list openssh*에서 openssh-server 확인
RH : rpm -qa openssh-server

  1. 서비스가 실행 중인지 확인

sytemd 기반 : systemctl status sshd에서 active(running) 체크.
정지된 경우 systemctl start sshd
부팅할 때 실행되도록 설정하려면 systemctl enable sshd

init 기반(구형 리눅스) : service sshd status.
정지된 경우 service sshd start

ss -nlt 또는 ss -nltp에서 port(22/tcp)의 state가 LISTEN인지 체크.

  1. ssh port(22/tcp)가 방화벽 허용 확인.
    # iptables -nL

방화벽을 끄는 방법

상태 확인
# ufw statue

켜기
# ufw enable

끄기
# ufw disable

방화벽 추가
# ufw allow 22/tcp (22 == ssh)

# ufw allow http/tcp (80 == http)

ssh client

ssh [-p port] [username@] <host address>
ssh 192.168.xxx.110 (22번 포트, 현재 로그인한 username 자동 입력)
ssh haeryong@192.168.xxx.110 (22번 포트)
ssh -p 20022 192.168.xxx.110 (포트 지정)

putty, mobaXterm
-putty 설정에서 IP address, Port, SSH체크 후 Open
-key를 받고 접속.

ssh-keygen
key 생성
$ ssh-keygen -N password

암호 변경
-p

키 제거
-R host
pubkey 기반 연결

$ ssh-keygen -N ""

$ ssh-copy-id haeryong@192.168.xxx.101 (접속할 상대)
암호 입력 필요.

$ ssh haeryong@192.168.xxx.101
암호 입력 없이 접속 가능.



---

$ ssh -t haeryong@192.168.xxx.101 명령어
위 server에 접속해서 명령어를 실행한 결과를 가져올 수 있음.

HTTP, utils

curl
URL을 기반으로 통신하는 기능 제공.
HTTP, HTTPS 등등..
libcurl 라이브러리를 제공해 다양한 프로그래밍 언어로 프로그래밍 가능.

curl [options] <URL>

options
-O : 파일 저장.
-o : 원하는 파일명으로 저장

curl -C - -O <URL> : Download 중 연결이 끊어져도 이어서 다운로드 받을 수 있음.

wget
curl과 비슷하나 파일 다운로드에 특화된 기능이 존재.
$ wget <URL>

nc (netcat)
network 기능이 가능한 cat
server, client 양쪽 기능이 가능.
바이너리 통신 가능.

terminal 1
$ nc -k -l 5000

terminal 2
$ echo Hello | nc 127.0.0.1 5000
또는
$ nc 127.0.0.1 5000
...interactive mode

bash 기초

REGEX(Regular Expression)

REGEX : 정규표현식
string pattern : 문자열의 조합되는 규칙.
meta character : 다른 의미를 수식하는 문자.
grep : 정규식을 평가할 수 있는 유틸리티. (egrep, fgrep 등도 존재)
sed : 스트림 에디터.
awk : 패턴식을 다룰 수 있는 언어툴.

POSIX REGEX

REGEX의 종류
1. POSIX REGEX : UNIX 계열 표준 정규표현식. 국제 표준으로, 다른 REGEX의 기반이 됨.
2. PCRE : Perl 정규표현식 호환으로 확장된 기능을 가지고 있음.(python, JS 등 대부분의 정규표현식의 기반)

BRE, ERE

POSIX REGEX는 BRE(Basic RE)와 ERE(Extended RE)로 나뉨.
둘은 기능적으로 동일.

BRE
-grep이 작동되는 기본값.

ERE
-좀 더 많은 표현식과 편의성 제공.

PCRE
-Perl에서 제공되던 REGEX 기능을 다른 언어에서도 제공하기 위해 만들어진 기능.
-C언어 기반
-POSIX REGEX에 비해 성능이 조금 더 좋음.
-현재는 PCRE2 버전 사용.

EBNF(Extended Backus-Naur Form) 문법
-*, +, ?, [...] 등등..
-XML 같은 마크업 언어 및 대부분의 설정 포맷의 기준.
-sudoers 등등..

grep(global regular expression print) : 유닉스의 가장 기본적인 REGEX 평가 유틸리티

sed : stream editor로 REGEX 기능을 일부 탑재함.

awk : 문자열 관련 방대한 기능을 가진 프로그래밍 언어.

grep : matcher
matcher를 고를 수 있음.
-G : BRE를 사용.(기본값)
-E : ERE를 사용.
-P : PCRE를 사용.
-F : 고정길이 문자열 탐색 모드( ~ fgrep)

grep options
--color : 매치된 부분에 color를 칠해줌.
-o : 매치된 부분만 출력해줌.
-e PATTERN : 여러 패턴을 검색할 때 사용.

-v, --invert-match : invert 기능. 매치되지 않은 line들만 출력.
-c : 매치된 line 수 카운트

REGEX syntax

문자 지정
. (dot/period) : 임의의 문자 1개를 의미함.
a.c : abc, adc, aac, azc 등등..
a..d : abcd, abbd, axxd 등등..

Quantifier
-수량자. 선행문자패턴(atom)을 수식하는 기능.
-?, +, *, {m, n} 총 4가지.

  1. ? : ? 앞의 atom이 0개 혹은 1개가 존재한다.
  2. *(The Kleene Star) : atom이 0개 이상 존재한다.
  3. +(The Kleene Plus) : atom이 1개 이상 존재한다.
  4. {m, n} (interval expression) : atom이 m개에서 n개 사이만큼 존재한다.
    1개만 있을 경우 e.g. {n} (정확히 n개를 의미함.)
    ,가 있고 1개가 생략된 경우 e.g. {,m} (0개~m개를 의미함.)

*는 BRE로 작동하고, +, ?, {}는 ERE에서 작동한다. BRE에서 이들을 사용하기 위해서는 앞에 백슬래쉬를 붙여줘야 한다.

Anchor
^, $ : 패턴의 위치를 지정하는 패턴.
^abc : "abc"로 시작하는 행
^$ : 비어있는 행
<BR>$ : <BR>로 끝나는 경우.

Character sets
[], [^] : character class

[abcd] : a,b,c,d 중 하나
[0-9] : 0~9 중 하나
[a-zA-Z0-9] : 대소문자 알파벳 + 숫자
[^0-9] : 0~9를 제외한 나머지.

grep line control options
-A #, --after-context=# : 매치된 라인을 포함해 그 아래의 #개의 라인을 함께 출력.
-B #, --before-context=# : 매치된 라인을 포함해 그 위의 #개의 라인을 함께 출력.
-C #, -#, --context=# : #개만큼의 before + after 라인을 모두 출력.

--group-separator=SEP : SEP으로 group separator를 지정.(--가 기본값)
--no-group-separator : 빈 문자열을 group separator로 사용.

0개의 댓글