SeSac (2021-08 ~ 2021-12)/Linux

리눅스 기초 1강

배워도끝이없네 2021. 8. 4. 20:17

Linux란

 

1991년 핀란드인 Linux Tovalds에 의해서 만들어졌다

 

리눅스의 배포버전은 계열이 있다.

- Devian 계열: Devian(mac도 포함한다), Ubuntu, KNOPPIX(CD Linux)

- Red Hat 계열: Fedora, RedHat Enterprise(큰회사들은 아직도 많이씀), CentOS, Vine Linux(Jp)

- Slackware 계열: openSUSE(Novell), SUSE Linux Enterprise 

 

리눅스는 Kernel이라는것이 있다.

역활: Management the Memory, File System, CPU, Device, etc.을 관리한다

약간 펌웨어의 느낌이다 (하드웨어를 제어하는 소프트웨어의 느낌)

 

infra위에 OS가 있다 (OS는 kernel 위에 command가 있다)

따라서 제일 인프라와 가까이 있는것은 kernel이다. ->>이것들을 리눅스라고 한다.

 

kernel의 버전에 따라 성능도 달라지고 명령어도 달라진다.

 

[Linux Shell]

- 리눅스 커널을 좀더 쉽게 만들 수 있게 하나의 껍질을 싸놓았다(shell) 

- 쉘에서 리눅스를 컨트롤 하는것이다.

- 커널을 조작할 수 있는 명령어들의 집단이다.

 

리눅스 쉘의 종류

- sh(Bourne shell) : By Unix Shell, Super shell. // 가장 근본이 되는 수퍼쉘, 최상위부모, 유닉스에서 가장 기본이 되는 쉘(bourne shell), 본쉘은 어디에서든 허용이 된다.

- bash(Bourne-agin shell) : Super shell in Linux // 리눅스의 가장 슈퍼쉘이다. 

- csh(C shell) : C like syntax

- tcsh(Enhanced-C shell): C를 좀더 쓰기 편하게 만든 쉘

- ksh(korn shell) : by David korn, Powerful Script Language
- zsh(Z shell) : Unix/GNU shell script, Powerful Script Language // 

 

리눅스 디렉토리

/bin : 기본명령어

/boot : 리눅스 구동될때 필요한 파일들

/dev : 디바이스관련 디렉토리

/etc : config, passwd등등 기타 정보들

/home : 실제 유저들이 있는 홈이다. (하지만 루트는 아니다)

/lib : 공유되는 라이브러리들, 설치파일 등..

/media : 자기가 마운트해서 쓰는것(ssd나 외장하드 등..)

/opt : 어플리케이션

/proc : process info 

/root : 실제 루트

/sbin : 관리자용 bin(ipconfig 등..)

/srv : system data

/tmp : temporary dir

/usr : source of programs 

/usr/local(mysql같은것들은 보통 이런곳에 많이 설치한다.)

/var : logs, ftp, spool, mail (로그파일같은 큰 파일들은 이곳에 많이 넣는다. 계속증가하고 양이많아지는것)

/lost + found : 사용이 많이 안되는 휴지통같은 개념

cf.inode : 리눅스는 어느디렉토리에 뭐가있다는것을 트리형태로 메모리에 올려놓았다가 찾을때 빨리 찾을수 있는데 그 개념을 아이노드라고 한다.

 

리눅스 포트 (IANA라는 기관에서 규격에 맞춰 통일한 것이다) --굵은글씨만 외우자

20 FTP (data)

21 FTP (Controll)

22 SSH
23 Telnet //보안상 취약하기 때문에 SSH를 쓴다.

25 SMTP (메일 관련된 것)

53 DNS

80 HTTP

443 HTTPS

110 POP3

123 NTP(Network Time Protocol) 세계표준시로 항상 서버 시간이 틀리지 않게 해준다.

 

리눅스명령어

!글자 : 히스토리에서 글자로 시작하는것을 찾아서 반환한다.

!! : 히스토리 가장 마지막 쓴 명령어를 호출한다.

ctrl + a : 지금 입력한 입력창에서 커서를 가장 왼쪽으로 이동

ctrl + e : 지금 입력한 입력창에서 커서를 가장 오른쪽으로 이동

adduser : 사용자계정과 기본적인 폴더들을 만들어줌

useradd : 계정만 만들고 폴더는 안만들어줌

ll(소문자 엘) :  사용자의 유저계정들을 확인한다.(디렉토리)

- drwxr-xr-x 에서 첫글자 d는 directory, 그다음3글자는 r:read w:write x: excute, 그 다음도 마찬가지로 3글자씩 끊어 읽는다.

(파일유형/나의권한/그룹의권한/타인의권한)

ps -ef : 작업관리자( 프로세스가 몇개 떠 있는지 확인 가능하다)

passwd <account-name> : 패스워드를 수정한다.

deluser <account-name> : 유저계정을 삭제한다. (ll해도 디렉토리는 사라지지 않는데 이유는 계정과 데이터는 다르기 때문이다.)

vi /etc/passwd : 어떤 유저들이 있는지 확인할 수 있다.

rmdir <디렉토리명> : 디렉토리 삭제

rm -rf <디렉토리명> : 디렉토리가 비워있지 않아도 삭제가 가능하다 -r : 디렉토리란 뜻, -f : 묻지말고 실행

pwd(present work directory) : 현재 위치

su - <계정명> : 계정으로 로그인하며 계정의 홈 디렉토리로 이동한다. (root계정에서 접속할 user shell을 만들어주는것이다.)

cat <파일명> : 파일의 내용을 보는것

- ubuntu환경에서는 홈디렉토리의 .profile파일에서 계정의 정보를 볼 수 있다( CentOS에서는 .bash_profile)

echo $HOME : echo는 파이썬의 print와 같다. (환경변수 홈을 출력)

ls -al : 모든것을 다 보여줘라 -a : all  -l : line // 모든것을 라인으로 보여줘라 == ll

ls -cf : 내가 숨기지 않은 파일들만 보여줘 == l

sudo apt-get : apt라는 서버에서 무언가를 가져올것이라는 명령어 (사용전에 apt-get update를 해줘야 최신버전으로 가능하다)

 

 

기본명령어 1

 

ls / touch / cat

head -10 <파일명> : 파일상단에서 10줄만 출력 

tail -10 <파일명> : 파일 하단에서 10줄만 출력

pwd(present work directory) : 현재 디렉토리 출력

which : 어플리케이션의 경로를 출력

clear : 화면지우기

echo : echo "내용" > <파일명>은 파일에 내용쓰기, echo "내용" >> <파일명> 은 파일내용에 붙여 쓰기

cd : 이동

cd - : history back (뒤로가기)

mkdir / rmdir

cp / mv / rm

find

whoami

passwd

cat <파일명> | grap <글자> : 글자에 해당하는 애들만 보여주기

 

 

 

기본명령어 2

 

df: 마운트 되어있는 디스크들이 나온다 (df -m은 메가바이트 단위)

du: 디스크가 사용하고있는 용량을 보여준다

free -m : 메모리 사용량을 보여준다.

top : 

vmstat : 현재 상테를 한번에 보여준다 (중요하게 보는것은 cpu의 id(idle)이다.

ps : 어떤 프로세스가 있는지

ps -ef | grep <파일명> : grep은 필터이다.

 

기본명령어 3

 

chmod (change mode) : 권한을 주는것이다. d-rwx-rwx-rwx 권한 구조에서 디렉토리를 뗀 3개의 rwx를 2진수로 바꾸어 111 111 111로 만든 다음 다시 각각 10진수로 읽으면 777로 읽을 수 있다. 이 파일의 권한정보는 777인 것.  

쉽게하려면 r:4 w:2 x:1 로 나눠서 외우면 된다.

chmod +x tt.sh : 모든 권한에 실행권한을 주는것이다.

chown(change owner) : 소유주를 바꾸는것, (chown 유저명:그룹명 파일이름) 의 형태로 바꿀수 있다.

mv <파일명> <경로명> : 파일을 경로로 이동시킨다. <경로명/바꿀파일명> 으로 적으면 경로를 이동시키면서 파일의 이름을 바꾼다.

ln(링크) : ( ln -s <경로명> 링크로정할이름) 형태로 적으면 바로가기를 생성한다 

 

 

exit로 나가다보면 $가 보이게 될텐데 #은 쉘 상태고 $는 커맨드상태이다.