Shell script Programming

Shell

CentOS bash Shell
명령어를 해석해서 Kernel에 전달!

사용법
명령어 [옵션] [인자]

vi로 작성 가능
확장명 => *.sh

항상 맨 위에 써줌!!
#! /bin/sh
shell프로그램 이용해서 실행하겠다!

실행방법
sh [*.sh]

또는

chmod ugo+x [*.sh]
./*.sh



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
testval=Hello
echo $testval
 
testval='Yes Sir'
echo $testval
 
#################################
#!/bin/sh
if ["woo" != "woo"]
then
    echo "참"
else
    echo "거짓"
fi
 
 
if [100 -eq 200]
then 
    echo "같다"
else
    echo "다르다"
fi
 
#################################
for i in 1 2 3 4 5 6
do
    hap='expr $hap + $i'
done
echo $hap
 
for((i=1;i<=10;i++))
do
 
done
 
#################################
while [1]
do
 
done
cs
Share:

Pipe / Filter / Process / Daemon

Pipe

뭔가를 연결해준다!

예제 보는게 이해 쉬움!!


/etc에서 ls 치면 너무 많다…


image

조금더 가시성 있게 보자!

ls –al | more

‘|’ 가 Pipe 앞의 Output을 뒤에 Input으로 전달

image



Filterling(grep 명령어)


ps –ef | grep aiden

ps -ef의 Output 중에서 aiden이 들어가는 내용을 Filtering


ls –al | more


image




Redirection


ls –l 내용을 list.txt파일에 저장

ls –l > list.txt


>>는 Append하면서 저장

ls –l >> list.txt




Process

저장장치에 저장된 실행 코드를 메모리로 로딩하여 활성화 된 것!


Foreground Process

실행화면에 나타나는 Process


Background Process

실제로 실행은 되고 있으나 실행화면에 나타나지 않음

ex) 알약, V3, Server Daemon(service)


pstree

process tree 구조 확인


ps –ef | grep [찾고싶은 이름]

현재 프로세스 상태 확인


kill –9 [프로세스 번호]

프로세스 강제 종료



bg %1

background로 보내기 / 작업번호 1


fg %1

foreground로 보내기 / 작업번호 1



Service

System과 독자적으로 구동되어 제공되는 프로세스

ex) 웹 서버, DB서버, FTP 서버


systemctl 명령어로 관리!



Socket

외부에서 특정 서비스를 요청할 경우 가동

systemd가 구동시킴!




ls –al | more

















Share:

RPM, YUM

RPM(Redhat Package Manager)

초창기 Linux는 설치가 굉장히 어려웠음!
초보자는 설치가 너무 어려웠음 ㅠㅠ

Linux도 Windows처럼 간편하게 설치할 수 있게 해보자!
RPM 등장!!
*.rpm
패키지이름-버전-릴리즈번호.CentOS버전.아키텍처.rpm
x86_64 : 64bit
i386-68 : 32bit
noarch : 모든 CPU

el7 : Enterprise Linux 7


RPM 명령

설치
rpm –Uvh [패키지파일이름.rpm]
U => (대문자) Install, Upgrade
v => 설치 과정 확인
h => 설치 진행과정을 “#”으로 출력

설치 여부 확인
rpm –qa [패키지 이름]

삭제
rpm –e [패키지 이름]

RPM으로 설치할 때 한 RPM이 다른 RPM을 필요로 할 수가 있음.
즉, Dependency 문제 발생!
구글링 잘하면 해결 할 수 있지만 …

그래서 나온게 바로 YUM



YUM(Yellowdog Updater Modified)
인터넷을 통해 필요한 파일을 저장소(Repository)에서 자동으로 모두 다운로드하여 설치!
요청하면 알아서 Dependency있는 것들을 다운로드 해서 설치해줌!

yum install [패키지 이름]

yum remove [패키지 이름]



rpm 파일 설치하고 싶을 때
yum localinstall [rpm파일이름.rpm]


*패키지 그룹
yum groupinstall [패키지 그룹 이름]
ex) JAVA 개발 환경 설치하고 싶을 때
jdk, jre, eclipse를 한방에 깔고 싶을 때!!
=> Group으로 한방에 설치!


yum clean all
=> 가끔 yum 문제 있을 때 저장소 Caching된 데이터 삭제




YUM 작동 방식
image

1. Repository의 repo 파일 열어서 URL 확인
Centos-base.repo가 핵심!
centos-base.repo를 열어보자!
/etc/yum.repos.d/
image
CentOS 패키지 저장소의 원본, 업데이트, 추가 패키지 URL 정보!

설치할 패키지가 엄청 많을때!!(DVD)
Remote 서버의 파일들을 내부 저장소에 저장해두고 빠르게 설치도 가능!




2. 목록 다운로드

3. Dependency 파악하여 설치할 패키지 목록 보여줌

4. ‘y’누르고 입력하는 순간 CentOS 7 패키지 저장소에서 다운로드해서 설치!

*목록을 먼저 받는 이유?
Dependency보고 설치 안하겠다고 하면 쓸데없이 패키지 전부 이미 다운로드 …

Share:

파일 소유권(chown, chmod)/ Link

File, Directory에 접근할 수 있는 권한
소유권에 대한 명령어

chown
chmod

image


File type
- : file
d : directory
l : link


Permission
r : read
w : write
x : execute
image


chown ,chgrp, chmod
1
2
3
4
5
6
7
#change owner to aiden 
chown aiden sample.txt
#change groupt
chgrp aiden sample.txt
cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#file permission
chmod 755 sample.txt
ls -l
#file permission
chmod 776 sample.txt
ls -l
#file permission by symbolic
#other remove permission to execute
# u , g , o
# + , -
# r , w,  x
chmod o-x sample.txt
chmod ugo+r sample.txt
cs/


Link



하드링크파일은 원본 파일과 같은 INode를 포인팅 하기 때문에 
원본 파일을 지우더라도 접근 가능!!
ln [링크대상파일] [링크파일이름]


But, Symbolic Link는 원본 파일 자체를 포인팅 하기 때문에 
원본파일이 지워지거나 해당 위치에 없다면 오류 발생!!
ln -s [링크대상파일][링크파일이름]

ls -il로 iNode 번호 확인 가능!!


Share:

vi Edtor

vi란?

Text 기반의 편집기
image
image



지극히 내가 유용하다고 생각되는 것만 정리하였음!


VI 종료
q는 변경 내용 없을 때 종료
q!는 강제 종료

image

기본 편집 명령
image
image


image
image



Line Mode에서(:)
image

Line Mode

:set number => line number 표시
:set nu => line number 표시
:set nonu => line number 제거

Share:

[이것이 리눅스다]

이 글은 Inflearn에 무료로 공개되어있는 “이것이 리눅스다” 강의를 보고 정리한 글입니다.

CentOS 리눅스 소개

Linux == Free Unix
1991년 ‘리누스 토발즈’가 핵심(Kernel)을 개발

자동차를 예로 들면 ‘리누스 토발즈’는 엔진만 개발

Kernal(엔진)을 가져다가 많은 개발자들이 완성된 자동차를 만듬

이것이 바로!! 배포판!!



image

1984년 리차드 스톨만이 GNU Project 시작.

GNU Project란?
모두가 공유할 수 있는 SW를 만들자!!
자기가 만든걸 공개하고 공유하면 더 좋아진다!!
GNU는 GPL에 속함

GPL???
이 SW 아무나 가져도되고, 배포해도됨
수정? 맘대로해라!!
가져다 판매해도 ?? 된다!!
But, 코드를 공개해야한다!



Linux도 GNU Project에 속함



레드햇 과 CentOS

Redhat  :  상용으로 판매
But, GPL이니까 코드 공개!!

Redhat 공개된 Code를 가져다 똑같이 만든게
바로바로 CentOS~~

차이점
기술지원!!

image











Share:

CentOS 7 FTP 서버 설치, 설정

Static IP 설정




1
2
3
4
5
6
7
8
9
10
11
12
13
14
cd /etc/sysconfig/network-scripts
#Set confi
sudo vi ifcfg-eth0
#Insert below script into /etc/sysconfig/network-scripts/ifcfg-eth0
BOOTPROTO=static
IPADDR=125.131.73.28
NETMASK=255.255.255.0 
#NETMASK는 다음과 같이 대체  PREFIX=24 랑 같음
DNS1=
DNS2=
GATEWAY=
cs



FTP 서버 설치
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
yum -y update
yum -y install vsftpd
sudo vim /etc/vsftpd/vsftpd.conf
#Modify below script
#Disallow anonymous, unidentified users to access files via FTP; change the anonymous_enable setting to NO:
anonymous_enable=NO
#Allow local uses to login by changing the local_enable setting to YES:
local_enable=YES
#If you want local user to be able to write to a directory, then change the write_enable setting to YES:
write_enable=YES
#Local users will be ‘chroot jailed’ and they will be denied access to any other part of the server; change the chroot_local_user setting to YES:
chroot_local_user=YES
#exit
systemctl restart vsftpd
systemctl enable vsftpd
firewall-cmd --permanent --add-port=21/tcp
firewall-cmd --reload
cs



학교, 기관에서 내부망을 사용하고 있다면 지금 설정한 Server의 Port만 Open한다고 외부에서 접속할 수 있는 것은 아니다.

해당 기관의 정보관리팀(IP,보안관리)에 할당 받은 IP의 Port Open을 요청해야한다.

Share: