2023. 3. 23. 10:42ㆍAWS 기반 데이터분석 처리 고급 SW 클라우드 개발자 양성과정
Day-13
### git push WARNING message 제거
# git push
(gnome-ssh-askpass:3574): Gtk-WARNING **: 08:43:29.876: cannot open display:
error: unable to read askpass response from '/usr/libexec/openssh/gnome-ssh-askpass'
# vi ~/.bashrc
14 unset SSH_ASKPASS
# source ~/.bashrc
# git push
# vi /etc/sudoers (사용하고 있는 user를 전달)
100 root ALL=(ALL) ALL
101 centos ALL=(ALL) ALL
102 user1 ALL=/sbin/useradd, /sbin/usermod
103 user2 ALL=/sbin/userdel, /sbin/usermod
# su - user1
$ useradd -u 3000 -g users testuser1
useradd: Permission denied.
$ sudo useradd -u 3000 -g users testuser1
[sudo] user1의 암호: 1234
$ tail -3 /etc/passwd
user2:x:1002:100::/home/user2:/bin/bash
user3:x:1003:100::/home/user3:/bin/bash
testuser1:x:3000:100::/home/testuser1:/bin/bash
$ sudo useradd -u 3001 -g users testuser2
$ !t
tail -3 /etc/passwd
user3:x:1003:100::/home/user3:/bin/bash
testuser1:x:3000:100::/home/testuser1:/bin/bash
testuser2:x:3001:100::/home/testuser2:/bin/bash
$ sudo usermod -u 3002 testuser2
$ sudo usermod -u 3001 testuser1
$ !t
tail -3 /etc/passwd
user3:x:1003:100::/home/user3:/bin/bash
testuser1:x:3001:100::/home/testuser1:/bin/bash
testuser2:x:3002:100::/home/testuser2:/bin/bash
$ exit
logout
# su - user2
$ sudo userdel -r testuser2
[sudo] user2의 암호: 1234
$ tail -3 /etc/passwd
$ sudo userdel -r testuser1
$ tail -3 /etc/passwd
$ exit
logout
# su - centos
$ sudo useradd -u 3001 -g users test1
[sudo] centos의 암호: 1234
$ sudo useradd -u 3002 -g users test2
$ tail -4 /etc/passwd
$ cd /home
$ ll
$ sudo chown user3 user2
$ sudo chown user2:users user2
$ sudo chown root:root user2
$ ll
$ sudo chown user2:users user2
$ sudo userdel -r test2
$ sudo userdel -r test1
$ !t
tail -4 /etc/passwd
$ exit
# vi /etc/sudoers
:100
100 root ALL=(ALL) ALL
101
### 디스크 쿼터
# grep user /etc/passwd
# usermod -d /allnew/user1 user1 (usermod 변경)
# usermod -d /allnew/user2 user2
# usermod -d /allnew/user3 user3
# cd /home
# mv user? /allnew
# cd /allnew
# ls
# vi /etc/fstab
15 UUID=9b4c2d31-ecbf-4fb1-a8e4-65cef9a89046 /allnew xfs defaults,usrquota,grpquota 0 2
# mount | grep allnew
/dev/md0 on /allnew type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,sunit=1024,swidth=2048,noquota)
# mount -o remount /allnew (원래는 작동해야 하는데 안됐음, fdisk 추가하고 다시함)
# mount | grep allnew
/dev/md0 on /allnew type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,sunit=1024,swidth=2048,usrquota,grpquota)
# fdisk -l | grep sd
# fdisk /dev/sdf (디스크 파티션 생성)
n
<enter>
<enter>
<enter>
<enter>
p
w
# fdisk -l | grep sd
# mkfs.ext4 /dev/sdf1
# mkdir /work
# mount /dev/sdf1 /work
# mount | grep /work (no quater)
# cd /work
# ls
# usermod -d /work/user1 user1
# usermod -d /work/user2 user2
# usermod -d /work/user3 user3
# tail -4 /etc/passwd
# mv /allnew/user? .
# vi /etc/fstab
15 UUID=9b4c2d31-ecbf-4fb1-a8e4-65cef9a89046 /allnew xfs defaults,usrquota,grpquota 0 2
16 /dev/sdf1 /work ext4 defaults,usrquota,grpquota 0 2
# cd
# umount /allnew (allnew 마운트 해제)
# umount /work (work에 마운트)
# df
# mount /allnew
# mount /work
# mount -o remount /work
# mount | grep /work
# ls
# quotacheck -ugvm /work (두개의 파일이 만들어짐)
# ls
./ ../ aquota.group aquota.user
# quotaon -uv /work
/dev/sdf1 [/work]: user quotas turned on
# edquota -u user1 (vi가 실행되면서 사용자 쿼터를 설정할 수 있음)
4 /dev/sdf1 48 900M 1G 12 0 0
# edquota -u user1
# quota -u user1
# su - user1 (user1으로 들어감)
$ dd if=/dev/zero of=data1 bs=1M count=350
$ dd if=/dev/zero of=data2 bs=1M count=350
$ dd if=/dev/zero of=data3 bs=1M count=350 (하드까지 넘어가버림, 용량초과)
$ quota -u user1 (쿼터 확인)
$ touch test1
$ ls -l > test1
ls: 쓰기 오류: 디스크 할당량이 초과됨
$ exit
logout
# repquota /work
# quota -u user2
Disk quotas for user user2 (uid 1002): (쿼터가 설정이 ㅏㄴ됨)
Filesystem blocks quota limit grace files quota limit grace
/dev/sdf1 48 921600 1048576 12 0 0
# quota -u user3
Disk quotas for user user3 (uid 1003): none
# edquota -p user2 user3 (쿼터를 복사해줌)
# quota -u user3
# rm -rf /work/user1/data?
# df | grep work
# quotaoff -uv /work (quotaoff -uv 쿠터해제)
/dev/sdf1 [/work]: user quotas turned off
# quotaon -gv /work
/dev/sdf1 [/work]: group quotas turned on
# edquota -g users
4 /dev/sdf1 100 2G 3G 25 0 0
# quota -g users
# su - user1 (몰빵으로 전부자 실행할 수 있게)
$ dd if=/dev/zero of=data1 bs=1M count=1000 (1GB씩 할당)
$ dd if=/dev/zero of=data2 bs=1M count=1000
$ dd if=/dev/zero of=data3 bs=1M count=1000
$ quota -g users
# repquota -a
# rm -rf /work/user1/data?
# quotaoff -gv /work
/dev/sdf1 [/work]: group quotas turned off
# mv user? /home (사용자를 home으로 돌려보냄)
# usermod -d /home/user1 user1
# usermod -d /home/user2 user2
# usermod -d /home/user3 user3
# mount | grep /work
# mount -o remount /work
# mount | grep /work
# cd
# umount /work
# mount /work
# mount | grep /work
# tail -4 /etc/fstab
/dev/mapper/cs_centos-root / xfs defaults 0 0
UUID=2ad14556-9fbc-4b03-87fd-081c9083aabc /boot xfs defaults 0 0
/dev/mapper/cs_centos-swap none swap defaults 0 0
UUID=9b4c2d31-ecbf-4fb1-a8e4-65cef9a89046 /allnew xfs defaults 0 2
# shutdown -h now
시스템 종료 후 추가한 디스크 영구 삭제…
# mkdir /allnew/sed
# cd /allnew/sed
# vi myfile
1 life isn't meant to be easy, life is meant to be lived.
2 Try to learn & understand something new everyday in life.
3 Respect everyone & most important love everyone.
4 Don't hesitate to ask for love & don't hesitate to show love too.
5 Life is too short to by shy.
6 In life, experience will help you differentiating right from wrong.
### sed (stream editor) (가장 간편하게 편집 가능)
sed ’s/ old / new /flag’
# cp /etc/passwd .
# vi passwd
:%s/:/=/g (모든 : 을 = 로 바꿀 수 있음)
:%s/=/:/g
# who
root pts/0 2023-03-22 12:38 (192.168.1.2)
root seat0 2023-03-22 14:23 (login screen)
root tty2 2023-03-22 14:23 (tty2)
# who | sed 's/pts/terminal/'
root terminal/0 2023-03-22 12:38 (192.168.1.2)
root seat0 2023-03-22 14:23 (login screen)
root tty2 2023-03-22 14:23 (tty2)
# cat passwd | sed 's/:/=/g' (내용이 바뀌지 않음)
# cat passwd | sed 's/:/=/g' > passwd_new (내용이 바뀜)
# wc -l passwd
# sed '45,50 s/:/=/g' passwd (부분 적용 가능)
# head passwd
# sed -n '5,10p' passwd (p가 붙어있으면 부분 적용 가능)
# cat -n myfile
# sed -n '3,5p' myfile
# sed '3,5d' myfile (3,5 삭제 하고 나머지만 보여줌)
# sed -n -e '1,2p' -e '4,6p' myfile (1~2라인 4~6라인 따로 붙여줌)
# ls /allnew/shells/
# ls /allnew/shells/ | sed 's/*//g' (모든 열을 찾아서 공백으로)
### awk
# vi awk_testfile
1 name phone birth sex score
2 reakwon 010-1234-1234 1981-01-01 M 100
3 sim 010-4321-4321 1999-09-09 F 88
4 nara 010-1010-2020 1993-12-12 M 20
5 yut 010-2323-2323 1988-10-10 F 59
6 kim 010-1234-4321 1977-07-07 M 69
7 nam 010-4321-7890 1996-06-20 M 75
# who
# who | awk '{print $1 $5}'
# who | awk '{print "User " $1 " is on terminal " $5 " " $6}'
# who | awk '{print "User " $1 " is on connected " $5 " " $6}'
# awk '{print $1 $2}' awk_testfile
# awk '{print $1,$2}' awk_testfile
# awk -F: '{print $7}' passwd | sort | uniq -c (F는 구분자 -F : (콜론으로 구분해서 7번쨰 항목을 구분함)
# awk -F: '{print $7}' passwd | uniq -c (sort 안하면 나올때마다 count, 몇번씩 반복함)
# ls -lF (F는 type을 보여줌)
# ls -lF | awk '{print $5 "\t" $9}'
# ls -l | awk '{Total = Total + $5; print Total "\t" $9}'
# ls -l | awk '{Total += $5; print Total "\t" $9}'
# ls -lF
# ls -lF | awk '{print NF}' (NF 라인 필드의 넘버, number of field)
# ls -l | awk '{print NR ";" $0}' (NR을 그냥 활용하면 line수를 찾을 수 있음)
# ls -l | wc -l (Line 수 확인 가능)
# cat -n awk_testfile
# awk '/kwon/' awk_testfile (kwon 들어가있는 파일 찾기)
# awk '/si/' awk_testfile
# awk '{print ("Name : " $1", " "Phone : " $2)}' awk_testfile
# awk '{if ($5 >= 80) print ($0)}' awk_testfile
# awk '{if ($4 == "M") print ($1,$5)}' awk_testfile (성별이 남자 에서 1번항목과 5번 항목 추출)
# awk '{if ($4 == "M") print ($1"\t"$5)}' awk_testfile
# awk '{if ($4 == "M" && $5 >= 70) print ($0)}' awk_testfile (남자이고 70점이상인 사람의 전체 항목(field)출력)
# awk '{print("name length : " length($1), "substr(0,3) : " substr($1,0,3))}' awk_testfile (substring(c언어에 있는 함수)
# awk '
> BEGIN {
> sum=0
> cnt=-1
> } ###초기화
>
> {
> sum+=$5
> cnt++
> } ###실직적 함수 구현
>
> END {
> avg=sum/cnt
> print("Sum : " sum", Average : " avg)
> }' awk_testfile ### Return
Sum : 411, Average : 68.5
### 네트워크
# ping 192.168.1.xxx
hop (하나의 unit을 카운트 하는 것)
LAN(Local Area Network)
WAN(Wide Area Network)
MAN (Metropolitan Area Network)
SDN : Software Define Network (어떤 관점이 많은가? FDDI, ATM 같은 광대역 네트워크에 대한 정의를 S/W적으로)
NFV : Network Function Virtualization (hub를 제외한 나머지 Gateway,Switch, 브리치 등을 Virtualize하는 것, 물리적인 거리를 널려주는 것(Bridge))
###DataLink Layer(브릿지, Repeater)
브릿지는 동종의 망들을 서로 연결해서 늘린다, 크기를 키운다(hub로 lan1 lan2를 묶음)
Uni-cast : peer to peer
Multi-cast
Broad-cast (맨마지막과 맨처음 사용 못함, -2를 함, 255주소는 broadcast를 사용하기 위해 뺴고, 처음은 망을 사용하기 위해 뺌)
## IPv4(32bit) (클래스를 철저하게 지키기 위함)
A : 8.x.x.x, n -2^8 , h - 2^24
B : 8.8.x.x, n - 2^16, h - 2^16 = 65534
C : 8.8.8.x, n - 2^24, h -2^8 = 254 (보통 사용함)
D : Multi-cast
E : Reserved
IPv4 종류
- 공인 IP
- DHCP(Dynamic Host Configuration Protocol)
- 사설 IP(공유기 NAT-Network Address Translation)
- CIDR
- Super
127.0.0.1-loop back
10.x.x.x
172.x.x.x
192.x.x.x
# ifconfig -a
FF.FF.FF -> RGB
- CIDR(Classless Inter-Domain Routing)
11111111.11111111.11111111.0000000
255.255.255.0 -> 255
0000000.0000000.0000000.11111111
0.0.0.255
256 -2 = 254 (254개 망을 만들 수 있음)
10.0.2.0 -> Network address
10.0.2.255 -> broadcast address
슈퍼넷/서브넷
11111111.11111111.11111111.1000000
0000000.0000000.0000000.01111111
255.255.255.128 -> 128 -2 = 126
11111111.11111111.11111111.1100000
0000000.0000000.0000000.00111111
255.255.255.192 -> 64 -2 = 62
11111111.11111111.11111111.1110000
0000000.0000000.0000000.00011111
255.255.255.224 -> 32 -2 = 30
## IPv6(128bit)
- 대륙별, 국가별, 지역별, 회사별, prefix
- AutoConfiguration (자동할당이 됨)
- Security (훨씬 더 강한 보안)
- IP header 단순, 훨씬 빠른 라우팅이 가능
- 부가 기능 지원, QoS (Quality of Service, 비행기를 탔을때 echo, business 불평등한 방식, but 돈을 많이 낸 사람이 더 좋은 서비스를 쓰는 것 (guarantee))
fe80:~~:a00:27ff:fe97:2e62 (prefix를 넣고 구분 / fe80=우리나라 국가)
fe80:~~:a00:27ff:fe97:2e62/23 (128bit 중 23까지만 우리나라 것이다)
Uni-cast : peer to peer
Multi-cast
Any-case
# grep tftp /etc/services
# cat /etc/services
# uname -a
# cat /etc/hostname
centos
# cat /etc/hosts (host 정보)
# cat /etc/sysconfig/network-scripts/ifcfg-enp0s3 (echo레이터? decorator)
## 콘솔에서… (centos에서)
#systemctl status NetworkManager.service
(ssh : 서비스, ftp 서비스는 줄여도 되지만 telnet은 줄이면 안됨)
#nmcli gen
#nmcli net off
# ifconf -a
#nmcli net on
# ifconfig -a
# nmcli con show (connection)
NAME UUID TYPE DEVICE
enp0s3 c95c648a-1cf6-4e84-913a-cba930146604 ethernet enp0s3
# nmcli con down enp0s3
'enp0s3' 연결이 성공적으로 비활성화되었습니다 (D-Bus 활성 경로: /org/freedesktop/NetworkManager/ActiveConnection/3)
# nmcli con up enp0s3
연결이 성공적으로 활성화되었습니다 (D-버스 활성 경로: /org/freedesktop/NetworkManager/ActiveConnection/4)
# nmcli con show
NAME UUID TYPE DEVICE
enp0s3 c95c648a-1cf6-4e84-913a-cba930146604 ethernet enp0s3
# nmcli dev show ( 더 상세하게 보여줌)
IP4.ADDRESS[1]: 192.168.1.145/24 (C class)
128 중 64(prefix)
# ip addr
# ip route show
# route = # netstat -rn (같은 것을 추출함)
# ifconfig enp0s3 down
# ifconfig
# ifconfig enp0s3 up
# ifconfig
# ifconfig enp0s3 down
# ifconfig
# ifconfig enp0s3 192.168.1.134 netmask 255.255.255.0 broadcast 192.168.0.255
# ifconfig enp0s3 up
# ifconfig
# netstat -rn
# route
# route add default gw 192.168.1.1 dev enp0s3
# cat /etc/resolv.conf (dns정보)
# nslookup
> www.daum.net
> www.naver.com
> ^d
# ping www.google.com (메인주소를)
# traceroute www.naver.com
# traceroute www.google.com
# yum -y install whois
# whois 142.250.207.36 (ip를 반대로)
# netstat -rn
# netstat -ntlp
# netstat -an | grep LISTEN
# netstat -p | more
# netstat -i
# netstat -s
# arp 192.168.0.1 (address
# tcpdump -i enp0s3 (tcp 데이터를 교차하는 것, 해킹명령어 위험함)
# tcpdump -c 5 ( -c 로 횟수를 정할 수 있음)
# tcpdump -c 10 -w dump.out
# file dump.out
# cat dump.out
# tcpdump -r dump.out
# tcpdump -Xqr dump.out (hexa처럼 보기)
### telnet (원래 없는 서버임, 우분투에는 있는데 centos에는 없음)
# yum -y install telnet-server
# systemctl start telnet.socket
# systemctl status telnet.socket
# yum -y install telnet
# telnet 0 (0을 쓴 이유는 local host이기 때문)
Trying 0.0.0.0...
# firewall-cmd --add-service=telnet (telnet 추가)
success
# firewall-cmd --list-service (list-service 확인)
cockpit dhcpv6-client ssh telnet
# telnet
telnet> open localhost
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Kernel 4.18.0-448.el8.x86_64 on an x86_64
centos login: centos
Password:
Last login: Wed Mar 22 10:42:51 on pts/0
[centos@centos ~]$
$ exit
## 서비스 데몬 구동 방식
stand alone vs xinetd(슈퍼 데몬)
### ftp
# rpm -qa | grep ftp
# yum -y install vsftpd (ftp를 vsftpd로 설치함)
# yum -y install xinetd
## xinetd 로 구동
# cd /etc/xinetd.d
# cp /usr/share/doc/vsftpd/vsftpd.xinetd ./vsftpd
# ls
# vi vsftpd
12 disable = yes
# vi /etc/vsftpd/vsftpd.conf
123 #listen_ipv6=YES
# systemctl restart xinetd
# systemctl status xinetd
# firewall-cmd --add-service=ftp
success
# firewall-cmd --list-service
cockpit dhcpv6-client ftp ssh telnet
# telnet 0 21
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
220 (vsFTPd 3.0.3)
quit
## vsftpd stand-alone 으로 구동
# vi vsftpd
12 disable = yes
# vi /etc/vsftpd/vsftpd.conf
114 listen=YES
# systemctl restart xinetd
# systemctl status xinetd
# systemctl start vsftpd
# systemctl status vsftpd
# telnet 0 21
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
220 (vsFTPd 3.0.3)
quit