[์ด์์ฒด์ ] Unix์ Linux๋? + (Shell Script๋?)
Unix๋
Unix๋ 1960๋ ๋ ํ๋ฐ AT&T Bell Labs์์ Ken Thompson๊ณผ Dennis Ritchie๊ฐ ๋ง๋ ์ด์์ฒด์ ๋ก ์๋ฒ์ ์ฃผ๋ก ํ์ฉ๋ฉ๋๋ค.
- Dennis Ritchie: C์ธ์ด๋ฅผ ๊ฐ๋ฐ
- Ken Thompson: Go์ธ์ด์ UTF-8 ๋ฌธ์ ์ธ์ฝ๋ฉ์ ๊ฐ๋ฐ
๋ ์ฌ๋์ ์ฒ์์ ์ด์ ๋ธ๋ฆฌ์ด๋ก ๊ฐ๋ฐ์ ์์ํ์์ง๋ง 1973๋ ์ C์ธ์ด ๊ธฐ๋ฐ Unix๋ฅผ ์์ฑ์์ผ ์ต์ด์ ๊ณ ๊ธ ์ธ์ด๋ก ์์ฑ๋ ์ด์์ฒด์ ๋ฅผ ๊ฐ๋ฐํ์์ต๋๋ค.
์ ๋์ค๋ ์ค๋ ๊ธฐ๊ฐ ๋์ ์ฌ์ฉ๋๋ฉฐ ์์ ์ฑ์ด ๋งค์ฐ ๋์์ก๊ณ , ๋ค์ํ ํ๋์จ์ด์์ ํธํ์ด ๋๊ธฐ ๋๋ฌธ์ ์์ง๊น์ง๋ ๋๋ฆฌ ์ฌ์ฉ๋๊ณ ์์ต๋๋ค.
Unix์ ํน์ง
- ๋ํ์ ์ด์์ฒด์
- ์๋ถํ ์์คํ (Time Sharing System)์ ์ํด ์ค๊ณ๋ ๋ํ์ ์ด์์ฒด์
- ๋ํ์ ์ธ ๋ช ๋ น์ด ๊ธฐ๋ฐ ์ฌ์ฉ์ ์ธํฐํ์ด์ค
- ์ฌ์ฉ์๊ฐ ๋ช ๋ น์ ์ ๋ ฅํ๋ฉด ์ ๋์ค๋ ๋ช ๋ น์ ์ฒ๋ฆฌ๊ฒฐ๊ณผ๋ฅผ ํ๋ฉด์ ์ถ๋ ฅ
- Multi-User(๋ค์ค ์ฌ์ฉ์)
- ์ฌ๋ฌ ์ฌ๋์ด ๊ฐ์ ์ปดํจํฐ์ ๋์์ ์ ์ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ
- Mulit-Taking(๋ค์ค ์์
๊ธฐ๋ฅ)
- ํ๋์ ์ปดํจํฐ์ ์ฌ๋ฌ ์์ ์ ๋์ ์ํ
- ๊ณ์ธต์ ํ์ผ ์์คํ
- ํ์ผ ๊ด๋ฆฌ๋ฅผ ์ํด ํธ๋ฆฌ๊ตฌ์กฐ์ ํ์ผ ์์คํ ์ ๊ฐ์ง
- ์ต์์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ๋ถํฐ ํ์ ๋๋ ํ ๋ฆฌ๊ฐ ๊ณ์ธต์ ๊ตฌ์ฑ
- ๋์ ์ด์์ฑ๊ณผ ํธํ์ฑ
- ๋๋ถ๋ถ C์ธ์ด๋ก ์์ฑ๋์ด ์๊ณ ๊ฐ ๊ธฐ๋ฅ์ด ๋ชจ๋๋ก ๋๋์ด ์์ด ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ์ ํ์ํ ๋ชจ๋๋ง ์ถ๊ฐ ๊ฐ๋ฅ
- ์ฅ์น, ํ๋ก์ธ์ค๊ฐ์ ํธํ์ฑ์ด ๋์
- ํฌ๊ธฐ๊ฐ ์๊ณ ์ดํดํ๊ธฐ ์ฌ์
- ์ ๋ฌธ์ ์ธ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ์ ์ฉ์ดํจ
- ๋ค์ํ ์ ํธ๋ฆฌํฐ ํ๋ก๊ทธ๋จ๋ค์ด ์กด์ฌํจ
Unix์ ํ์ผ์์คํ ๊ตฌ์กฐ
๋ํฌ์ค๋ฅผ ๋ธ๋ก์ผ๋ก ๋ถ๋ฅํ์ฌ ๋ฐฐ์นํ ๊ตฌ์กฐ๋ฅผ ์๋ฏธํ๋๋ฐ ๋ถํธ๋ธ๋ก, ์ํผ๋ธ๋ก, I-node๋ธ๋ก, ๋ฐ์ดํฐ๋ธ๋ก์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- ๋ถํธ๋ธ๋ก: ๋ถํ ์ ํ์ํ ์ฝ๋๋ฅผ ์ ์ฅ
- ์ํผ๋ธ๋ก: ์ ์ฒด ํ์ผ ์์คํ ์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅ
- I-node ๋ธ๋ก: ๊ฐ ํ์ผ์ด๋ ๋๋ ํ ๋ฆฌ์ ๋ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ์ ์ฅ
- ๋ฐ์ดํฐ ๋ธ๋ก: ๋๋ ํ ๋ฆฌ ๋ณ๋ก ๋๋ ํฐ๋ฆฌ ์ํธ๋ฆฌ์ ์ค์ ํ์ผ์ ๋ํ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ
Linux๋
๋ฆฌ๋์ฆ ํ ๋ฐ์ฆ(Linus Torvalds)์ ์ํด ๋ง๋ค์ด์ง ์ปดํจํฐ ์ด์์ฒด์ ๋ก, ๋ํ์ ์ธ ์์ ์ํํธ์จ์ด์ *์คํ์์ค์ ๋๋ค.
๋ฆฌ๋ ์ค๋ ์ ๋์ค๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ด๋ ์์ ์ฑ๊ณผ ๋ณด์์ฑ, ๋์ ์ ๋ขฐ์ฑ์ด ํน์ง์ ๋๋ค.
*์คํ์์ค: ๋๊ตฌ๋ ๊ฐ๋ฐ์ ์ฐธ์ฌํ๊ณ ์ฝ๋๋ฅผ ๋ณผ ์ ์์
Linux์ ํน์ง
- ๊ณต๊ฐํ ์คํ์์ค
- ๋๋ถ๋ถ์ ๋ฆฌ๋ ์ค๋ CLI์ GUI๋ฅผ ๋ชจ๋ ์ง์
- ์ ๋์ค์ ์๋ฒฝ ํธํ
- Multi-User(๋ค์ค ์ฌ์ฉ์)
- ์ฌ๋ฌ ์ฌ๋์ด ๊ฐ์ ์ปดํจํฐ์ ๋์์ ์ ์ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ
- Mulit-Taking(๋ค์ค ์์
๊ธฐ๋ฅ)
- ํ๋์ ์ปดํจํฐ์ ์ฌ๋ฌ ์์ ์ ๋์ ์ํ
- ์คํ์์ค ํ๋ก์ ํธ์ด๊ธฐ ๋๋ฌธ์ ์ปค๋ ์์ค์ฝ๋ ๋ฐ ๋ชจ๋ ๊ด๋ จ ์๋ฃ๊ฐ ๊ณต๊ฐ๋์ด ๋น ๋ฅด๊ฒ ๋ฐ์ ํจ
- ๋ค์ํ ๋ฐฐํฌํ์ด ์กด์ฌํ๊ณ ํ๋ถํ ์์ฉํ๋ก๊ทธ๋จ์ ์ ๊ณต
๋ฆฌ๋ ์ค์ ์ข ๋ฅ
Unix์ Linux์ ๊ตฌ์กฐ
- ์ปค๋(Kernel)
- Unix์ ๊ฐ์ฅ ํต์ฌ์ ์ธ ๋ถ๋ถ์ผ๋ก, ์ปดํจํฐ๊ฐ ๋ถํ ๋ ๋ ์ฃผ๊ธฐ์ต์ฅ์น์ ์ ์ฌ๋ ํ ์์ฃผ๋๋ฉด์ ์คํ
- ํ๋์จ์ด๋ฅผ ๋ณดํธํ๊ณ ํ๋ก๊ทธ๋จ๊ณผ ํ๋์จ์ด ๊ฐ์ ์ธํฐํ์ด์ค ์ญํ ์ ๋ด๋น
- ํ๋ก์ธ์ค ๊ด๋ฆฌ, ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ, ํ์ผ ์์คํ ๊ด๋ฆฌ, ์ฅ์น ๊ด๋ฆฌ๋ฑ ๋ชจ๋ ์์์ ์ด๊ธฐํํ๊ณ ์ ์ดํ๋ ๊ธฐ๋ฅ ์ํ
- ์(Shell)
- ์ฌ์ฉ์์ ์ปค๋ ์ฌ์ด ์ค๊ฐ์ ์ญํ์ ํ๋ ํ๋ก๊ทธ๋จ
- ์ฃผ๊ธฐ์ต์ฅ์น์ ์์ฃผํ์ง ์๊ณ , ๋ช ๋ น์ด๊ฐ ํฌํจ๋ ํ์ผ ํํ๋ก ์กด๋ฐฐํ๋ฉฐ ๋ณด์กฐ๊ธฐ์ต์ฅ์น์์ ๊ต์ฒด์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅ
- ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋ช ๋ น์ ํด์ํ์ฌ ์ปค๋์ ๋๊ฒจ์ฃผ๋ ๋ช ๋ น์ด ํด์๊ธฐ
- ํ์ดํ๋ผ์ธ ๊ธฐ๋ฅ์ ์ง์ํ๊ณ ์ ์ถ๋ ฅ ์ฌ์ง์ ์ ํตํด ์ถ๋ ฅ๊ณผ ์ ๋ ฅ ๋ฐฉํฅ ๋ณ๊ฒฝ ๊ฐ๋ฅ
- ๋ณธ ์(sh), C ์(csh), ์ฝ ์(ksh), ๋ฐฐ์ ์(bash) ๋ฑ (์์ ์ด ๋ง๋ Shell์ ์ฌ์ฉํ ์๋ ์์)
- ์ ํธ๋ฆฌํฐ ํ๋ก๊ทธ๋จ(Utility Program)
- ์ผ๋ฐ ์ฌ์ฉ์๊ฐ ์์ฑํ ์์ฉํ๋ก๊ทธ๋จ์ ์ฒ๋ฆฌํ๋๋ฐ ์ฌ์ฉ
- ๊ฐ์ข ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ฐ ๋๊ตฌ, ๋คํธ์ํฌ ๊ด๋ จ ๋๊ตฌ ๋ฑ ๋ค์ํ ์ ํธ๋ฆฌํฐ ํ๋ก๊ทธ๋จ ์ ๊ณต
- ํ์ผ์ ์ฒด๊ณ์ ๊ด๋ฆฌ๋ฅผ ์ํด ๊ณ์ธต์ ๊ตฌ์ฑ๋ ํ์ผ ์์คํ ์ฒด๊ณ๋ฅผ ์ฌ์ฉ
- Dos์์์ ์ธ๋ถ ๋ช ๋ น์ด์ ํด๋นํ๋ฉฐ ์ ํธ๋ฆฌํฐ ํ๋ก๊ทธ๋จ์๋ ์๋ํฐ, ์ปดํ์ผ๋ฌ, ์ธํฐํ๋ฆฌํฐ, ๋๋ฒ๊ฑฐ ๋ฑ์ด ์์
Shell Script๋?
์ *์คํฌ๋ฆฝํธ๋ ์์์ ์ฌ์ฉํ ์ ์๋ ๋ช ๋ น์ด๋ค์ ์กฐํฉ์ ๋ชจ์์ ๋ง๋ ๋ฐฐ์นํ์ผ์ ๋๋ค. ์ด๋ฅผ ํ์ฉํ์ฌ ๋ฌถ์ด์ง ๋ช ๋ น์ด ์กฐํฉ์ ์ํํ๊ฑฐ๋ ๋ฐ๋ณต์ ์ธ ๋ช ๋ น์ด๋ฅผ ๋จ์ผ ๋ช ๋ น์ผ๋ก ์ฝ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
*์คํฌ๋ฆฝํธ: ์ผ๋ฐ์ ์ผ๋ก ์ธํฐํ๋ฆฌํธ ๋ฐฉ์์ผ๋ก ๋์ํ๋ ์ปดํ์ผ๋์ง ์์ ํ๋ก๊ทธ๋จ. ์ฆ, Shell Script๋ ์ด์์ฒด์ ์ Shell์ ์ด์ฉํ์ฌ ํ์ค์ฉ ์์ฐจ์ ์ผ๋ก ์ฝ์ผ๋ฉด์ ๋ช ๋ น์ด๋ค์ ์คํ์์ผ์ฃผ๋ ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ ํ๋ก๊ทธ๋จ.
#1. ์ถ๋ ฅ
echo "Echo command" #์๋๊ฐํ
printf "printf command\n" #\n์ ์ด์ฉํ
#2. ๋ณ์
#๋ณ์ ์ ์ธ, ๋์๋ฌธ์ ๊ตฌ๋ถ ๋ฐ =์ฌ์ด์ ๊ณต๋ฐฑ X
num=100
str="hello"
# $์ ์ด์ฉํ ๋ณ์ ํธ์ถ
echo "$num"
echo "$str"
#๋๋
echo "${num}"
echo "${str}"
#3. ๋ฐฐ์ด
#๋ฐฐ์ด์ ์ธ
arr=("ab" "de" "ef")
echo "${arr[0]}" #์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉ
echo "${arr[@]}" #์ ์ฒด ์์๋ฅผ ์๋ฏธ
#์์์ถ๊ฐ
arr+=("gh")
#4. if๋ฌธ
num=5
#if[์กฐ๊ฑด]; then ... elif[์กฐ๊ฑด]; then ... else ... fi ๋ฌธ
if [ "${num}" -eq 2 ]; then
echo "num is 2"
elif [ "${test_num}" -eq 3 ]; then
echo "num is 3"
else
echo "num is not 2 or 3"
fi
#if((์ฐ์ ์ฐ์ฐ)); then ... elif((์ฐ์ ์ฐ์ฐ)); then else ... fi๋ฌธ
if (( ${num} > 3 )); then
echo "number is greater than 3"
else
echo "number is not greater than 3"
fi
#5. ๋ฐ๋ณต๋ฌธ
#while๋ฌธ
num=0
while (( "${num}" < 5 )); do
echo "${num}"
(( num = "${num}" + 1 ))
done
#for๋ฌธ
arr=(1 2 3 4 5 6 7)
for i in ${arr[@]}; do
echo "$i"
done
for (( i = 0; i < 10; i++)); do
echo "$i"
done
Unix vs Linux
์ ๋์ค์ ๋ฆฌ๋ ์ค์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ๋ฆฌ๋ ์ค๋ ๋ฌด๋ฃ ์คํ ์์ค๋ก ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ๊ฐ ํ์ฑํ๋์ด ์๋ค๋ ๊ฒ์ ๋๋ค.
์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ์คํ ์์ค ํ๋ก์ ํธ์ ๊ธฐ์ฌํจ์ผ๋ก์ ์ ์ ๋ ๋ณด์๋ ๋ฆฌ๋ ์ค ์์คํ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
[์ฐธ๊ณ ]
https://projin.tistory.com/m/274
https://psklovejyh.tistory.com/m/11
https://coding-factory.tistory.com/m/315
https://velog.io/@soryeongk/LinuxBasic
https://minkwon4.tistory.com/159