-OS의 매우 큰 부분을 차지함. 메모리의 역할 중 일부분을 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를 만드는 순서
1. Partitioning
command : fdisk, parted
File System
command : mkfs(make file system 또는 포맷), fsck 또는 xfs_*
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 제한
DOS partition의 종류
1. Primary partition(주 파티션)
한 disk당 4개의 partition 까지 만들 수 있음.
Extended partition(확장 파티션)
4개 이상의 파티션이 필요할 때 사용.
extended partition은 다시 여러개의 logical drive로 나눌 수 있음.
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레이블의 문제를 개선한 방식.
-용량 제한 없음.
Package system 종류
1. Redhat 계열
rpm(주로 사용) database
yum(주로 사용)
dnf
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
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
# 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
NextworkManager
-daemon으로 작동.
-network configuration와 network connection 관리를 수행한다.
-Dbus 기반으로 동적 상태를 감지할 수 있음. -> 다른 애플리케이션이나 daemon에 네트워크 정보를 제공, 권한을 줄 수 있다.
-systemd 기반의 다른 Linux distribution도 통일된 명령어를 사용한다.
-Ethernet, Wi-Fi, Mobile broadband 등 다양한 기능에 플랫폼을 제공 -> 네트워크 연결 관리가 쉬워진다.
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)
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
optional prefix
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 등으로 하드웨어가 인식된 상태인지 점검.
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
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인지 체크.
# iptables -nL
방화벽을 끄는 방법
상태 확인
# ufw statue
켜기
# ufw enable
끄기
# ufw disable
방화벽 추가
# ufw allow 22/tcp (22 == ssh)
# ufw allow http/tcp (80 == http)
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에 접속해서 명령어를 실행한 결과를 가져올 수 있음.
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
REGEX : 정규표현식
string pattern : 문자열의 조합되는 규칙.
meta character : 다른 의미를 수식하는 문자.
grep : 정규식을 평가할 수 있는 유틸리티. (egrep, fgrep 등도 존재)
sed : 스트림 에디터.
awk : 패턴식을 다룰 수 있는 언어툴.
REGEX의 종류
1. POSIX REGEX : UNIX 계열 표준 정규표현식. 국제 표준으로, 다른 REGEX의 기반이 됨.
2. PCRE : Perl 정규표현식 호환으로 확장된 기능을 가지고 있음.(python, JS 등 대부분의 정규표현식의 기반)
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 수 카운트
문자 지정
. (dot/period) : 임의의 문자 1개를 의미함.
a.c : abc, adc, aac, azc 등등..
a..d : abcd, abbd, axxd 등등..
Quantifier
-수량자. 선행문자패턴(atom)을 수식하는 기능.
-?, +, *, {m, n}
총 4가지.
*는 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로 사용.