1. Shell?
Shell์ด๋ ์ฌ์ฉ์๊ฐ ์ด์์ฒด์ ์ ์ ๊ทผํ ์ ์๋๋ก ๋ง๋ค์ด์ค ์ธํฐํ์ด์ค์ ๋๋ค.
๋ฆฌ๋ ์ค ์ปค๋์ ์ ์ ๊ฐ ์ ์ ํ๋ก๊ทธ๋จ๊ณผ ์ธํฐํ์ด์ฑ ํ๊ธฐ ์ํด์ system call์ด๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋๋ฐ, ์ด system call์ functional level์์์ ์ธํฐํ์ด์ค์ด๊ธฐ ๋๋ฌธ์ ์ ์ ๊ฐ ์ด๋ฅผ ์กฐ๊ธ ๋ ์ฝ๊ฒ ๋ช ๋ น์ด ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ์ ๊ณตํ ๊ฒ์ด ๋ฐ๋ก shell์ ๋๋ค.
shell์ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ command line์ผ๋ก ์คํ์์ผ์ค ์ ์์
- ์ด์์ฒด์ ์์ ์๋ file, process๋ค์ ๊ด๋ฆฌ
2. Commonly Used shells
๋ฆฌ๋ ์ค๋ฅผ ์ค์นํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ๋ฌ ๊ฐ์ง shell ํ๋ก๊ทธ๋จ์ด ์ค์น๋์ด ์์ต๋๋ค.
System utility๋ค์ bin ๋๋ ํฐ๋ฆฌ ์๋์ ์ค์น๋์ด ์๋๋ฐ, shell ๊ด๋ จํ utility๋ค์ ์๋์ ๊ฐ์ ๊ฒ๋ค์ด ์์ต๋๋ค.
- /bin/sh : The Bourne Shell / POSIX shell
- /bin/csh : C shell
- /bin/tcsh : Enhanced C Shell
- /bin/ksh : Korn shell
- /bin/bash : Free ksh clone
shell๋ ํ๋์ ํ๋ก๊ทธ๋จ์ด๊ธฐ ๋๋ฌธ์ shell์ ์์ฑํ๋ ํ๋ก๊ทธ๋จ์ ๋ฐ๋ผ์ ํ ์ ์๋ ๋์์ด ๋ฌ๋ผ์ง๋๋ค.
๋ฆฌ๋ ์ค์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ๋ shell์ bash์ ๋๋ค.
shell์ด ๊ธฐ๋ณธ์ ์ผ๋ก ๋์ํ๋ ๋ฐฉ์์ ํ๋ก๊ทธ๋จ์ ๊ณ์ํด์ ์คํ์ํค๋ ๊ฒ์ ๋๋ค. ์ด๋ ์ฌ์ฉ์๊ฐ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๊ฒ ๋๋ฉด ์ ๋ ฅ๋ฐ์ command๋ฅผ ํ์ฑ ํด์(๋ถ์ํด์) ๋ช ๋ น์ด๋ฅผ ์์๋ธ ํ์ ์ด๋ฅผ ์คํํด์ ์ปค๋์ ์ ๋ฌํฉ๋๋ค.
while(read command line from user) {
parse the command line
execute the command
}
3. Shell Interective Use
๋ฆฌ๋ ์ค์ ๋ก๊ทธ์ธ์ ํ๊ฒ ๋๋ฉด, shell ํ๋ก๊ทธ๋จ์ ๋ถํ ๊ณผ ๋์์ ์คํ์ด ๋๊ธฐ ๋๋ฌธ์ ํด๋น ํฐ๋ฏธ๋์ ์ฌ์ฉํด์๋ shell๋ก ๊ณ์(interectively)ํด์ ์์ ํ ์ ์์ต๋๋ค.
- ์ฌ์ฉํ ๋ช ๋ น์ด์ history ํ์ธ ๊ฐ๋ฅ
- command line editing
- ํน์ ๋๋ ํฐ๋ฆฌ์ file๋ค์ ๋ณผ ์ ์์ (tab completion support)
- command expansion (๋จ์ด ํ๋๋ง ์น๊ณ tab ๋๋ฅด๋ฉด ํด๋น ๋จ์ด๋ก ์์ํ๋ ๋ช ๋ น์ฌ ํ์ธ ๊ฐ๋ฅ)
- key bindings
- spelling correction
- job control
4. simple commands
shell์์ ์คํํ ์ ์๋ ๊ธฐ๋ณธ์ ์ธ ๋จ์๋ 'command(๋ช ๋ น์ด)'์ ๋๋ค. ๋ช ๋ น์ด๋ ํ ๋จ์ด๋ก ์ธ ์๋ ์๊ณ , ์ฌ๋ฌ ๊ฐ์ ๊ตฌ๋ฌธ์ผ๋ก ๋๋์ด ํ๋์ ๋ฌธ์ฅ์ฒ๋ผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
์ด๋ ์ฒซ ๋ฒ์งธ argument๋ ์คํํ๋ ๋ช ๋ น์ด์ ์ด๋ฆ์ด๊ณ , ๋๋จธ์ง๋ ์ด ๋ช ๋ น์ด๋ฅผ ์คํํ๋๋ฐ ๋ท๋ฐ์นจํด์ฃผ๋ ์ธ์๋ค์ ๋๋ค.
argument๋ค์ command๋ฅผ ์คํํ๋๋ฐ ๊ฐ์ด ์ ๋ฌ๋์ด ๊ตฌ์ฒด์ ์ธ command์ ์์ฑ์ ์๋ ค์ค๋๋ค. ์ด option๋ค์ file์ด๋ฆ, ๊ฒฝ๋ก, ๋๋ ํฐ๋ฆฌ ๋ฑ์ด ๋ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์์ ๊ฐ์ด ์ ๋ ฅํ๊ฒ ๋๋ฉด ls๋ command๊ฐ ๋๊ณ -l๊ณผ /bin์ ์ด command์ ๋ํ argument๊ฐ ๋ฉ๋๋ค.
ls๋ ํ์ฌ ๋๋ ํฐ๋ฆฌ์ file list๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ช ๋ น์ด์ ๋๋ค. ๋ค์ ์ค๋ -l ์ต์ ์ file์ ์์ฑ์ ๊ตฌ์ฒด์ ์ผ๋ก ๊ธฐ์ ํ๋ ๊ฒ์ด๊ณ , /bin์ ํด๋น ๋๋ ํฐ๋ฆฌ์ ์๋ file๋ค์ ๋ณด์ฌ์ฃผ๋ผ๋ ๊ฒ์ ๋๋ค.
๋ ๋ค๋ฅธ ์๋ก tar๋ช ๋ น์ด๋ฅผ ๋ค์ด๋ณด๋ฉด, command์ธ tar๋ ์์ถ์ ํ๋ ๋ฆฌ๋ ์ค ๋ช ๋ น์ด์ ๋๋ค.
์์ ๊ฐ์ด ๊ธฐ์ ํ๋ค๋ฉด -c๋ creat, -v๋ ์คํ๋๋ sequence๋ฅผ ์ถ๋ ฅ, -f๋ file์ด๋ผ๋ ์ต์ ์ ๋๋ค. ๋ฐ๋ผ์ c์ f๊ฐ ํฉ์ณ์ ธ ์์ถ๋ ํ์ผ์ ์์ฑํ๋ผ๋ ์๋ฏธ๊ฐ ๋ฉ๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ์์ ๋ช ๋ น์ ์ํํ๋ฉด main.c์ main.h๋ฅผ ์์ถํด์ archive.tar๋ผ๋ ํ๋์ ์์ถํ์ผ์ ๋ง๋ค๊ฒ ๋ฉ๋๋ค.
5. Frequently Used Commands
- pwd : ํ์ฌ ์์ ์ ๋๋ ํฐ๋ฆฌ path๋ฅผ ๋ณด์ฌ์ค
- cd : change directory
- cat : text file์ ๋ํ ๋ด์ฉ์ ์ฝ์ด์ ๋ฐ๋ก display(standard output, ์ฆ ํฐ๋ฏธ๋์ ๋ฐ๋ก ์ถ๋ ฅ)
- chmod : file์ ๋ํ ์์ฑ(access permission)์ ๋ฐ๊ฟ
- vi : vi text editor์ ์คํ
- ls : ํ์ฌ ๋๋ ํฐ๋ฆฌ์ ํ์ผ๋ค์ ๋์ด
- rm : remove
- mv : move ( +2๊ฐ์ option์ด ํ์)
- cp : copy (option - source file, destination file)
- touch : empty file์ ์์ฑ
- mkdir : make directory
- rmdir : remove directory
- more : ํฐ๋ฏธ๋ ์ฐฝ์์ ๋์ด๋๋ ์ ๋ณด๋ค์ด ์ฐฝ์ ๋์ด๊ฐ ๊ฒฝ์ฐ, ์ ๋ณด๋ฅผ ํฐ๋ฏธ๋ ์ฐฝ์ ๋ง๋๋ก ๋์ด์ ์ถ๋ ฅ
- od : binary file ์ถ๋ ฅ
- ln : ํ์ผ์ ๋ํ link๋ฅผ ๋ง๋ฆ (symbolic or hard link)
- file : ํด๋น file์ ๋ํ ์์ฑ์ ์ถ๋ ฅ
- passwd : password ๋ณ๊ฒฝ
- split : file์ ๋ค๋ฅธ file๋ก ๋ถํ
6. Linux manual sections
shell command์ ๋ํ ์์ฑ/์ฌ์ฉ๋ฐฉ๋ฒ์ ๋ํด ๋ ์์ธํ ์๊ณ ์ถ์ ๊ฒฝ์ฐ man์ด๋ผ๋ keyword๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
man [section number][keyword]
e.g. $ man 3 printf // printf์ ์ ๋ณด๋ฅผ ๋ณผ ์ ์์
Manual Section numbers
1 : Executable programs or shell commands
2 : System calls
3 : Library calls
4 : Special files
5 : File formats and conventions
6 : Games
7 : Miscellaneous
8 : System administration commands (usually only for root)
7. Linux File System
๋ฆฌ๋ ์ค ํ์ผ ์์คํ ์ ๋ฃจํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ๊ณ์ธต์ ํธ๋ฆฌ๊ตฌ์กฐ์ ๋๋ค. directory๋ windows์ ํด๋์ ์ ์ฌํ ๊ฐ๋ ์ผ๋ก ํ์ผ์ ๋ด์ ์ ์๋ ๊ณต๊ฐ์ ๋๋ค.
๊ฐ์ฅ ์์ ๋ฃจํธ(/)๊ฐ ์กด์ฌํ๊ณ , ์๋์ ๋๋ ํฐ๋ฆฌ๋ค์ด ์กด์ฌํ๋ฉฐ ๊ทธ ๋๋ ํฐ๋ฆฌ ์๋์๋ ๋๋ ํฐ๋ฆฌ๊ฐ ์์ ์๋ ์๊ณ ํ์ผ์ด ์์ ์๋ ์์ต๋๋ค.
bin ๋๋ ํฐ๋ฆฌ์๋ system์ binary file์ด ์๊ณ , boot๋ booting๊ณผ ๊ด๋ จ๋ file๋ค์ ๊ฐ์ง๊ณ ์์ต๋๋ค. etc๋ ๋ฆฌ๋ ์ค์ ํ๊ฒฝ์ค์ ๊ณผ ๊ด๋ จ๋ ํ์ผ๋ค์ ๊ฐ์ง๊ณ ์์ต๋๋ค. home ๋๋ ํฐ๋ฆฌ๋ ์ด ๋ฆฌ๋ ์ค๋ฅผ ์ฌ์ฉํ๋ ์ฌ์ฉ์ ๊ณ์ ๋ง๋ค ๋ณ๋์ ๋๋ ํ ๋ฆฌ ๊ณต๊ฐ์ ํ ๋นํด ์ฃผ๊ณ ๊ฐ์์ ๋๋ ํ ๋ฆฌ ์๋์์ ๊ฐ์์ ๊ณ์ ์ ์ฌ์ฉํ ์ ์๋๋ก ๊ด๋ฆฌํด์ค๋๋ค. usr์์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ํค๋ ํ์ผ๋ค์ ํฌํจํ๊ณ ์์ต๋๋ค.
๐ฉ๐ซํด์ฆ Where is the home for a user 'mtk' in the above system?
mtk๋ผ๋ ์ ์ ์ home directory๋
/home/mtk (root - home - mtk)
8. File/Directory Path
๋ฆฌ๋ ์ค ํ์ผ ์์คํ ์ ์๋ ๋ชจ๋ ํ์ผ๋ค์ ๋ฃจํธ๋ก๋ถํฐ ์์ํ๋ ๊ฒฝ๋ก๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
e.g. /home/avr/java/Go.java
- Absolute path ์ ๋ ๊ฒฝ๋ก
- ํด๋น ์ฌ์ฉ์ shell์ ํ์ฌ position์ ์๊ด์์ด ๋ชจ๋ ํ์ผ๋ค์ ๋ฃจํธ๋ก๋ถํฐ ์ง์ ํ ๊ฒฝ๋ก
- Relative path ์๋ ๊ฒฝ๋ก
- ํ์ฌ ์ฌ์ฉ์ position์ผ๋ก๋ถํฐ์ ๊ฒฝ๋ก
- '.(single dot)'์ ์ด์ฉํด ํ์ฌ ๋๋ ํฐ๋ฆฌ ์ง์
- '..(double dot)'์ ์ด์ฉํด ์์(๋ถ๋ชจ) ์์น ์ง์
e.g. ํ์ฌ ๋๋ ํฐ๋ฆฌ๊ฐ /home/avr์ผ ๊ฒฝ์ฐ,
./java -> ํ์ฌ ์์น(/home/arv)์์ java ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ (/home/avr/java)
../include -> ํ์ฌ ์์น์ ์์ ๋๋ ํฐ๋ฆฌ์์ include๋ก ์ด๋
๋ง์ฝ ์ด๋ค ์์น์ ์๋์ง user์ home directory๋ก ์ด๋ํ๊ณ ์ถ๋ค๋ฉด '~(tild)'๋ฅผ ์ฌ์ฉํฉ๋๋ค.
e.g. cd ~avr -> go to the home of user avr
e.g. cd ~ -> go to my home
9. File Permission
๋ฆฌ๋ ์ค์ ์กด์ฌํ๋ ๋ชจ๋ ํ์ผ๋ค์ ๊ฐ๋ณ์ ์ผ๋ก ๊ทธ ํ์ผ์ ๋ํ ์ ๊ทผ๊ถํ์ ๋ถ์ฌํ ์ ์์ต๋๋ค.
์ ๊ทผ๊ถํ์ ๋ถ์ฌํ๋ level์ ๊ทธ ํ์ผ์ ๊ฐ์ง๊ณ ์๋ ์์ ์(owner), ๊ทธ ์์ ์๊ฐ ์ํ ๊ทธ๋ฃน(group), ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ์ ์ธํ ๋ค๋ฅธ ์ฌ๋๋ค(other)๋ก ๋๋ฉ๋๋ค.
ls -l ๋ช ๋ น์ด๋ฅผ ์คํ ํด๋ณด๋ฉด ํด๋น file์ ๋ํ ์์ธํ ์์ฑ์ ์ถ๋ ฅํ ์ ์๋๋ฐ, ์ถ๋ ฅ๋ ์ ๋ณด์์ ๊ฐ์ฅ ์ฒ์์ผ๋ก ๋์์๋ ์ ๋ณด๊ฐ owner, group, others์ ๋ํ ์ ๊ทผ๊ถํ์ ๋ํ๋ ๋๋ค.
์ด๋ฅผ ํด์ ํด๋ณด๋ฉด, owner์ read(์ฝ๊ธฐ), write(์ฐ๊ธฐ), execute(์คํ)๊ฐ ๊ฐ๋ฅํ๊ณ , group์ ๋ํด์๋ execute, read๊ฐ๋ฅ, ๊ทธ๋ฆฌ๊ณ others์ ๋ํด์๋ execute๋ง ๊ฐ๋ฅํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ root๊ฐ ์ฌ์ฉ์์ด๊ณ group์ sys์ธ ๊ฒ ๋ํ ์ ์ ์์ต๋๋ค.
์ ๊ทผ๊ถํ์ ๋ณ๊ฒฝ์ํค๋ ๋ช ๋ น์ด๋ chmod [permission][filename] ์ ๋๋ค.
permission์ binary code๋ก ๋ํ๋ด๋๋ฐ,
ํด๋น ๋นํธ๊ฐ 1์ด๋ฉด ๊ถํ๋ถ์ฌ, 0์ด๋ฉด ์ ๊ทผ ๋ถ๊ฐ๋ฅผ ์๋ฏธํฉ๋๋ค.
์๋ฅผ ๋ค์ด 'myFile.txt'๋ผ๋ ํ์ผ์์ owner์ grouop์๋ ๋ชจ๋ ๊ถํ์ ์ฃผ๊ณ , others์ ๋ํด์๋ read๊ถํ๋ง ๋ถ์ฌํ๊ณ ์ถ๋ค๋ฉด, permission์ 111111100(2)๋ก ๋ํ๋ผ ์ ์์ต๋๋ค. ์ด๋ฅผ ๋ค์ 8์ง์๋ก ๋ํ๋ด๋ฉด 774๋ก ํํํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์, ์ ๊ทผ๊ถํ์ ์์ ๊ฐ์ด ๋ณ๊ฒฝ์ํค๋ ค๋ฉด $ chmod 774 myFile.txt ์ ๊ฐ์ด ๋ํ๋ ๋๋ค.
10. Linux Programming Process
11. gcc Compiler
gcc๋ gnuํ๊ฒฝ์์ ์ปดํ์ผ ํ ์ ์๋ C์ปดํ์ผ๋ฌ ์ ๋๋ค. ๋ฆฌ๋ ์ค๋ฅผ ์ค์นํ๋ฉด default๋ก ์ค์น๋ฉ๋๋ค.
gcc๋ผ๋ shell command๋ฅผ ์ด์ฉํด ์ปดํ์ผ ๊ฐ๋ฅํฉ๋๋ค.
e.g.
gcc sample.c -> sample.c์ ๋ฌธ๋ฒ์ ์ค๋ฅ๊ฐ ์์ ๊ฒฝ์ฐ a.out(by default)๋ผ๋ binary ์คํํ์ผ์ด ์์ฑ๋จ
./a.out -> ์์ฑ๋ ์คํํ์ผ์ ์คํ (./์ ํตํด ํด๋น ๋๋ ํ ๋ฆฌ๋ฅผ ์ง์ ํด์ฃผ๋ ๊ฒ์ด ๊ผญ ํ์!)
gcc sample.c -o sample -> sample์ด๋ผ๋ ์ด๋ฆ์ binary ์คํํ์ผ์ ์์ฑ
2๊ฐ ์ด์์ ํ์ผ์ ์ปดํ์ผ ํ ๊ฒฝ์ฐ ํ์ผ ์ด๋ฆ์ ์ฐ์ํด์ ์ ์ด์ฃผ๋ฉด ๋ฉ๋๋ค.
e.g.
gcc file1.c file2.c -o fileout -> file1.c์ file2.c๋ฅผ ์ปดํ์ผ ํ ํ ๋ ํ์ผ์ linkํ์ฌ ํ๋์ ์คํํ์ผ(fileout)์ ๋ง๋ฌ
gcc -c file1.c file2.c -> compile only and generates the object files
gcc -o fileout file1.o file2.o -> link the file1.o file2.o, then generates the fileout
'๐SUBJECT > ๐์์คํ ํ๋ก๊ทธ๋๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์์คํ ํ๋ก๊ทธ๋๋ฐ/Linux] 10. Signal Timer(1) (0) | 2020.05.23 |
---|---|
[์์คํ ํ๋ก๊ทธ๋๋ฐ/Linux] 10. POSIX-semaphore (0) | 2020.05.23 |
[์์คํ ํ๋ก๊ทธ๋๋ฐ/Linux] 2. File I/O(1) (0) | 2020.05.06 |
[์์คํ ํ๋ก๊ทธ๋๋ฐ/Linux] 1. Introduction (2) | 2020.04.24 |
๋๊ธ