[Linux] 생성과 기본

adam adam·2022년 9월 7일
0

생성

  • aws를 통한 Linux(aws linux2) 생성과 시작
  • Docker Desktop을 통한 Linux(CentOS7) Container 생성과 시작
  • wsl2를 통한 Linux(Ubuntu-20.04) 생성과 시작
  • VirtualBox를 통한 Linux 생성과 시작

AWS

우선 인스턴스 생성은 링크를 따라하면 되고, 최신 ui 에서는 기본값대로 설정한다면 클릭한번으로 리눅스 서버가 생성된다.

그리고 ssh 연결하기에 앞서서 aws console에서
현재 노트북 ip가 접근할 수 있게 방화벽을 열어야 한다. 언제든 문의가능

연결하기

표본

ssh -i [yourPEM] [yourID]@[yourDestinationIP]

or

ssh -i [yourPEM] [yourID]@[yourDestinationDNS]

= example =>

ssh -i myServerKey.pem ec2-user@3.37.89.32
ssh -i myServerKey.pem ec2-user@ec2-3-37-89-32.ap-northeast-2.compute.amazonaws.com

시작1 : 사용자 생성
ec2-user는 접근을 위한 계정으로 간주, 다른사람도 쓰기 위해선 추가 계정 필요

root 비밀번호 설정을 통한 활성화

[ec2-user@ip-172-31-41-52 ~]$ sudo passwd root
Changing password for user root.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

root 계정 호출

[ec2-user@ip-172-31-41-52 ~]$ su
Password:
[root@ip-172-31-41-52 ec2-user]#

=== root 계정 상태 ====
sudo 를 생략가능해서 이래저래 편함

user01 ; ayoon 생성하기

[root@ip-172-31-41-52 ec2-user]# adduser ayoon
[root@ip-172-31-41-52 ec2-user]# passwd ayoon
Changing password for user ayoon.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

filezilla 연결하기

scp를 통해서 내 윈도우 노트북에서 리눅스 서버로 폴더나 파일을 보낼 수 있다.

효과까지 생각하면 gui 형태로 전송과 삭제, 제어해주는 툴, filezilla를 우선하고 추후 scp 정리한다.

docker desktop

wsl2를 기반으로 하되, 도커를 기반으로 한다.

https://www.google.com/search?q=docker+desktop&oq=docker+des&aqs=chrome.0.0i433i512j69i57j0i512l8.2682j0j7&sourceid=chrome&ie=UTF-8

https://docs.docker.com/desktop/install/windows-install/

윈도우 서비스를 활성화할것
https://hello-bryan.tistory.com/159

도커란 리눅스 커널을 컨테이너라는 단위를 바탕으로 제공

도커와 리눅스 임베디드 ; 모랄까 초초초초경량화 리눅스인듯, 알파인인가

기존에 온프레미스에서 호스트 OS 로 인한 제약으로부터 자유 왜냐하면 새로운 초경량 OS

http://localhost/tutorial/

WSL2

WSL2 : Windows Subsystem for Linux

powershell 상에서

wsl --install
PS C:\Users\USER> wsl --install -d Ubuntu-20.04
시스템을 다시 부팅할 필요가 없습니다.

역시 곱게 되는 게 하나도 없음
시스템을 다시 부팅할 필요가 없습니다는 그냥 에러문구이고 아래와같은 것 연달아 기입하면됨, 다만 다기입하면 갑자기 재부팅될수도있음. 놀라지말길

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
wsl -d Ubuntu-20.04

우분투 버전확인

cat /etc/*release

추가 : ubutn-20.04 gui 설치

$ sudo apt update
$ sudo apt install tasksel

VirtualBox

virtualbox and centos 7

돌아보고 나니까 느끼는 건데, 무료라서 그냥 쉽게 쓰고 있는 것들이 뜯어볼수록 정성어린 터치가 느껴짐, 감사감사

Linux for developer

by technical architect who designs infra

Utilization

WEB
apache, nginx / iplanet , webtoB ; 유료는 a/s가 된다, 유료가 효과적일수도

was
tomcat / weblogic, jeus, websphere

db
postgreSQL, oracle, db2

application
tmax, hadoop, tuxedo, mq, kubernetes

자가체크

level 0 linux를 접해본적이 없다
level 1 linux 명령어를 Google에서 검색, 단편 적용
level 2 알아서 조합
level 3 유닉스 스크립트

나는 1.1 줄래

Linux

기본 구성

kernel, shell, File system
kernel
메모리에 상주하면서 시스템을 관리하는 운영체제 핵심
응용프로그램 지원
프로세스, 메모리, 입출력, 파일 관리

shell
사용자가 입력한 리눅스 명령어를 해석해서 커널에 전달
자체 프로글매이 기능
시스템 및 사용자 환경 설정 기능

파일 시스템
directory, subdirectory, file 들의 계층적 구조
저널링 기능; 정전이나 시스템 충실 시 신속하게 복구, 노트북 닫아도 직전 꺼 기억하는 것쯤인가
파일 시스템이 마운트, 활성화되어 있는 동안 확장가능 ; 써본적이 없네, 개발자는 용량좀 늘려달라고 관리자에게 요청하는 것

aix
https://namu.wiki/w/IBM%20AIX

커널

겁나 복잡하다, cloud 감사

bash shell

작동시켜보기

!! 리눅스는 대소문자를 구분하므로, 있는그대로 칠것 !!
SHELL , HOME, PATH , USER, LOGNAME , HOSTNAME, TMOUT , LANG

!! TMOUT 설정해두면, 지정 시간, 대체로 30분, 지나면 자동 로그인 !!
내꺼는 오래된 버전이라 아에 공백인듯

참고로 LANG은 우선 현재 ssh 접속한 계정의 세션에 한정된다.

세션이란 건 렌탈 시간과 같은 개념으로 일단 마무리

작동방식

입력대기

사용자가 명령어 기입

쉘의 내부 명령인지 아닌지 판단, ls 같은 게 쉘의 내부 명령어로 커널에 전달하는 건 아닐ㄷ스

커널명령어라면 프로세스 생성하고 커널에 던지면

커널은 권한등을 체크하여 작동함

이외 종류

bourne shell, c shell, korn shell, bash shell

여기서 입력(란)을 prompt라고 부르는듯?
$, %, $, $

매번 그렇듯이, 초반에는 컴퓨터에 맞춰서 만들어졌지만, 오른쪽으로 갈수록 사용자가 편리한 쉘이고,

또 매번 그렇듯이, 쉘 자체만으로 무게가 커지고 버그들이 생기고, 기존껏들에서 장점만 합칠려고 노력해서

현재는

bash shell이 리눅스이 기본 쉘

학교 운영체제 시간에 실습한 건 C shell 이후로 C 언어로 프로그래밍했으니, bash shell 쯤인가

파일 시스템 구조

/
/usr ; unix system resource , 명령어들과 유틸리티 포함
/var ; 시스템 로그 , 어플리케이션 로그는 별도로 취급해야
/etc ; 시스템 관리에 필요한 정보, 윈도우는 시스템32, 드라이버, blabla, 그 ip 제어할때는 쓰는 host 파일
/dev ; 장치 파일
/tmp ; 임시 디렉토리 , 개발자들에게 기본적으로 제공된 디렉토리고, 리눅스는 설정 주기로 다 지움 , 유닉스는 껏다켜지기 전에는 저장, 흔치는 않지만 개발자들끼리 자료 공유할 수 있는 공간이기도

이러한 공유디렉토리에 무대책으로 파일들이 쌓이면, 성능을 급격히 저하하게되는 이슈이다.

/home ; 사용자 홈디렉토리

파일시스템 종류

ext1~4 ; EXTended file system , with redhat OS
xfs ; Extents file system for journeling , with redhat OS
btrfs ; b-tree file system, with SUSE
nfs ; 통신적인 관점이 중심인듯, 내가 호스트에 접근해서 무언가 작업할때 파일을 전달받고 전송할 때 이런 느낌일듯, with Unix/Linux network

centos 7점대에서는 ext4 +xfs
8점대에서는 xfs

파일 시스템의 업그레이드 방향성은 대체로 대용량 파일 다루기 위한 과정으로도 이해가능

요즘은 게임용량 따라잡기

프로세스

pid , env(ownership, permission, 등등) crontab 쓸떄 주로 쓴다함, i/o

i/o 0,1,2 ; stdin, stdout, stderr

입출력 재지정

<

>

2>
; find의 기본 값, 아직 많이 안써봐서 잘 모르것네

>>
<<

| , pipeline

` , back quotation

tail -f javadata +%Y%m%d.log

다른 명령와의 조합시 유용

프로세스 로딩 ; ls 명령어 실행 시

`

기본 설정과 명령어

yum -y를 통해서 중간에 yes 자동 설정,
net-tools ; netstat 등의 네트워크 명령어 유틸리티 패키지

명령어 passwd

현재 사용자의 확인 후

su ; switch user

alias

df

https://sunow.tistory.com/entry/Linux-df-du%EB%9E%80

일단 시스템로그와 어플리케이션 로그가 /root 와 분리된 곳에 관리되는지 확인

du

du -sk *

로그파일이 비정상적으로 쌓여서 용량이 큰 디렉토리 찾을 때 쓸수있을듯

prompt 커스텀

https://webdir.tistory.com/105

ls 와 metacharacters

정규표현식 과 유사한 개념인듯

ls 201503[1-9]

ls 2015??01

file

file로 파일의 세부정보 ; 인코딩 등 세부정보를 받는다.

yum -y install file

file 명령어가 없을 경우 위와같인 다운로드

파일권한!

read write eXecute

4 2 1 ; 이진수로 표현하다보니까 2의 제곱꼴

r w x

조회(내용), 조회(목록) 수정과 파일추가 실행과 탐색

이걸 전송받을 때나 해줄 때 우선적으로 고려해야 하고

chmod 777은 rm 만큼이나 마지막 수단으로 생각

adder는 마지막

우선 합의된 사용자와 그룹으로 제어

umask

027이 제일 평균적 ; 나는 다되고, 친구는 수정안되고, 모르는 사람은 암것도 못함

파일이나 디렉토리 생성시 권한 기본값을 결정하는 값들, 높을수록 7에서 빼는 값이 많아져서 작동않하는 게 많음

chmod

chmod a+r ; all
chmod g+r ; group
chmod o+r ; other

chmod g+rwx [파일 또는 디렉토리]
= chmod 770 [파일 또는 디렉토리]

date

export TZ=Asia/Seoul

touch , 우클릭 새로만들기 정도

touch -m -t 12312359 text.txt

modification
time
of text.txt

쉘 만들기

mkdir

mkdir dir1
mkdir dir1 dir2

mkdir -p mydir3/subdir1/subsubdir1

이때 중요한건 내가 접근가능한 디렉토리에서 이러한 생성이가능하고,
일반 유저 기준 자신의 홈디렉토리와 tmp 2가지 가 기본임

cp

기본적으로 r가 된다면,
cp와 권한, cp하는 사람의 권한으로 새로 생성된다.

cp 대신 tar 백업하고 바로 푸는 방식도 가능한데

이는 cp와 달리 파일의 권한과 사용자를 그대로 유지할수있다.

그러나 crontab 등만해도 파일의 생성시각이 중요 이런 부분을

cp -p 옵션으로 해결

cp /dev/null [targetdir]

null 이란 일종의 쓰레기통 https://hongddo.tistory.com/138

ln

https://webdir.tistory.com/148

ln -s [target] [shortcut]

로그파일을 root가 아닌 다른장소에 모을때 요긴, 해보면 더 좋을듯

hard link는 쌍둥이 만드는 느낌,

which

환경변수인 PATH 의 경로순으로 검색

yum

remote yum repository에서 목록 조회

필요한 jdk 설치
yum -y install java-11-openjdk.x86_64

find

주요 명령어 10개 중 1개, 활용법 이 매우 다양

core 라는 디렉토리가 앱 죽었을때 남기는 로그 디렉토리일때, 이걸 삭제하거나 조회할때, find 자주쓴다.

find /log -name "core" -print

find /log -type f -name "core" -print

find . -type f -mtime +7 -print

find . -type f -size +2000000 -print ; 1 giga 이상

!! 특정 시각을 기준으로 탐색하고 싶을 때

touch -t 0401000 timestamp
find . -type f -newer timestamp -print

!! 찾고 명령수행

find /was -type -f -exec grep -l {} \;

-l을 통해서 ERROR라는 문자열이 있는 리스트를 돌려달라

find /was -type -f -name "core" -exec rm {} \;

find /log -type -f -mtime +7 -exec rm {} \;

이때 7일이라는 기일은 관리자와 개발자가 합의한 기일이다. 7일 이전꺼는 보지 않겠다. 보지말자
그러나 예외는 언제나 발생, 그러면 날짜를 변경하거나 압축파일로 변경

find /log -type f -size +20000000 -mtime exec gzip {} \;

find ./ type f -exec convmv --notest -f cp949 -t utf-8 {}\;

find 명령어가 작동안한다면 아래와같이 타이핑해보자

find . -type f -exec grep -l Document "{}" \;

find . -type f -exec grep -l Document {} \

tar

현재 디렉토리 아래에 모든 파일과 디렉토리를 백업하기
tar -cvf mybackup.tar .

. 대신 *로하면 숨김된 설정파일은 제외되는 거 유의

현재 디렉토리 아래에 숨김 파일

https://moonuibee.tistory.com/4

요령 상 tmp로 압축파일을 저장해야 현재 파일시스템이 아닌 다른 파일 시스템에 저장된다.

tar는 사실 압축이 아니란 모음이고, 여기에 z옵션을 주면 압축까지 해준다. 거기서 또 구체적으로 tar.gz로 하고자 하면 저장 파일명을 tar.gz로

이런 특성과 관련하여 -r 옵션을 덧붙이면 기존.tar에 추가로 덧붙일수있다.

그리고 해당 파일의 사용자정보(이하 server1_user01)도 있는그대로 저장해버리고, 다른 서버로 백업파일을 보내서 조회할때, 이 server_user01이 없다면 소유자가 1001 뜬다. 그리고 조회 권한이 없기 좋다.

보낼때 미리 권한을 설정해서 보내야 관리자에게 따로 요청하지 않아도 된다.

!! tar -t를 기본적으로 해봐야할 이유

tar 버전에 따라서 압축해제할때 /가 경로에 들어가서 절대경로로 해제가 되고,

현재 디렉토리가 아닌 그 절대경로에 파일이 압축해제된다.

재수좋으면 그냥 드래곤볼모으기하면 되지만, 안좋으면 기존파일이 뒤덮히면서 유실된다.

gzip

gzip myfile
gizip *log

(tar -cvf mybackup.tar .
gzip mybackup.tar)
= tar -zcvf mybackup.tar .

gunzip mybackup.tar.gz

cat

윈도우의 type

cat file1 file2 > myfile
cat file* > myfile

more

로그파일 내용 읽을 때, error 찾기

/[target_string]

n

로 찾는 것

vi로도 가능하나, 용량이 클때는 more이 적합하고, 무엇보다 실수로 건드릴수도 있고, vi 실행 시 ram을 잡아먹기 때문에, 2기가짜리 로그파일을 vi하면 램에 2기가 새로 잡히고, 부하가 클뿐더라,

vi를 끄지 않으면, 계속 용량이 잡힌다. 이런 식으로 하면따로 pid 킬하기전에는 부하가 계속 추가된다.

한편, head를 통해서 맨위 10줄만 볼수도있다, tail로는 마지막 10줄을 볼수있다.

tail /etc/profile 등으로, 그리고 로그파일이 추가되는지를

tail -f [target_logfile] 로 확인 , f 는 follow

nohup &

nohup &

시스템에서 어떤 프로세스를 계속 돌리고 싶으면 위와같이 해야한다.

로그인한 계정으로 단순히 백그라운드 명령을 던지면, 로그아웃 후 꺼지기 좋다.

nohup blabla > history.log & blabla

위와같은 방식으로 구체적인 로그를 남길 수 있다.

grep , awk, sed

대소문자 구분없이 로그를 분석할때 -i를 기입
grep -i document /etc/

grep 과 주석 처리

grep -v ^# [target file]

awk

grep에 비해서 주로 추출을 중심

awk '{ print $2 }' /etc/passwd
awk -F: '{ print $2 }' /etc/passwd
awk '/root/' /etc/passwd
awk -F: '/root/ {print
awk '/root/{getline:print}'
awk '/root/ {print NR }' /etc/passwd

sed

찾은 걸 바꾸는 것

sed "s/kimds/dskim/g" myfile

sed "s/kimds/dskim/g" myfile > myfile2

sed -n "/root/p" /etc/passwd

sed -n "10,20 p" /etc/passwd

wc

파일 라인 수 , 단어수, 바이트 수
wc /etc/hosts

현재 디렉토리의 파일 수 도출
ls | wc -l

java 라는 프로세스의 수 확인하기 !!

어느날 3개 이던 게 2개만 뜬다? java application 1개가 죽은거고, 미리 조치 가능

ps -ef | grep java | grep -v grep | wc -l

od

파일 내용을 8진수로 출력
od myfile.txt

특수 문자를 표시하여 출력
echo "Hello unix" | od -c

cat 등으로 출력 시 보이지 않은 개행문자, \0, \n, \r, 등을 확인가능하다.

서버 간 자료 전송 시 개행문자 차이가 발생하면 이를 확인해야한다.

0개의 댓글