Linux 기본명령어 - 명령어구조 - 도움말보기 : man - 파일시스템구조 - 명령 - 파일내용보기 - 프로세스관련명령 - vi 편집기 명령어구조 명령실행구조 명령행 (Command line) 에서명령어와옵션, 인자입력 $ ls la /usr/bin/a* prompt command options arguments 옵션 : 기호뒤에문자를붙인다. 하나씩써도되고, 한꺼번에여러문자를써도된다. 인자 : 주로 file 또는 directory 이름, 숫자등해당명령또는프로그램에서요구하는명령행입력 메타문자사용가능? : 1 개의임의의 character * : 0 개이상의임의의 character 셸이명령을해석하여해당프로그램을실행시킨다.
도움말보기 : man 특정명령이나표준 API 에대한매뉴얼출력명령 이름의종류이름과기능요약사용법 설명 도움말보기 : man man 페이지구성항목 항목 NAME SYNOPSIS DESCRIPTION FILES SEE ALSO DIAGNOSTICS 의미해당명령어에대한이름과사용목적을간단히설명해당명령어에대한일반적사용형식해당명령어에대한자세한설명해당명령어가사용하는파일해당명령어에대한보다더많은정보를얻기위해참조해야할부분예상할수있는에러에대한설명과명령어가실행했을때되돌려주는에러코드목록
도움말보기 : man 매뉴얼섹션 (BSD UNIX 와 Linux) Section 1 General commands 2 System calls 3 C library functions Description 4 Special files (devices) and drivers 5 File formats and conventions 6 Games and screensavers 7 Miscellanea 8 System administration commands and daemons 옵션 -a: 섹션별모든매뉴얼페이지출력 과제용명령어 : script 현재실행중인내용을그대로기록 script [-a] [filename] -a: 기존파일에덧붙임 filename: 이름이없으면 typescript 로만들어짐
- 파일시스템구조 - 파일의속성과유형 - 파일시스템명령 : ls, cd, mkdir, rm, cp, File System 파일시스템구조 파일시스템 사용자가볼수있는자료는모두하드디스크에있다. 하드디스크자료의논리적구조 파일시스템 UNIX/Linux 파일시스템 역트리구조 File: 보조저장매체에존재하는정보의논리적저장단위 Directory: 많은파일의논리적집합 사실은목록파일 : UNIX 에서는 directory 도하나의 file 로그인시위치 자신의 home directory 시스템관리자가계정을만들때정해진다.
파일시스템구조 역트리 (reverse tree) 구조 경로 (path) 절대경로 / 로부터의경로 상대경로 현재위치로부터경로 특별한경로이름. 현재디렉터리.. 부모디렉터리 ~ 홈디렉터리 예 ) 현재위치 : /home/juyoon diary 의절대경로 : /home/juyoon/ 문서 /diary diary 의상대경로 : 문서 /diary 파일시스템구조 UNIX/Linux 파일시스템구조의관습적표준 /boot 부팅에필요한모든파일 /bin 핵심적인사용자명령 (binary) 프로그램파일 /dev 장치파일 /etc 텍스트로된설정 (configuration) 파일. 실행파일은올수없다 /home 각사용자별저장공간. 로그인시시작위치 /lib 핵심적인공유라이브러리와커널모듈 /media 플로피, CD/DVD 드라이브등탈부착가능한장치파일 /mnt 임시로연결할파일시스템에대한마운트지점 /opt 추가로설치할응용소프트웨어패키지 /root 시스템관리자 (root) 의홈디렉터리 /sbin 시스템관리에사용되는프로그램 /usr 읽기전용의공유데이터저장
파일시스템구조 UNIX/Linux 파일시스템구조의관습적표준 /usr/bin 거의모든사용자명령프로그램 /usr/include C 프로그래밍에사용되는헤더파일 /usr/lib 프로그래밍을위한라이브러리및패키지 /usr/local 시스템관리자가별도로설치하는소프트웨어 /usr/src 리눅스커널의소스코드. 커널헤더파일도여기 /var 시간에따라변하는데이터 /proc 실행중인프로세스및시스템상태에대한실시간정보 파일의속성과유형 파일관리의기본 파일의메타정보 (metadata) 를관리해야한다. 이름, 소유자, 생성날짜, 크기, 접근권한, Directory 속성 일반파일속성
파일의속성과유형 일반파일 문자 (text) 로된파일을비롯하여응용프로그램에따라다양한형식의파일존재 이름이나확장자로구분하지않는다. 특수파일 시스템의다른자원을파일로취급 directory symbolic link named pipe socket device 여러파일의논리적집합단위. 계층구조형성다른파일에대한참조표시 ( 파일을찾아갈수있는경로정보저장 ) 실행중인프로세스간에정보를전달하는통로프로세스간정보교환을위한통로하드웨어장치. character형과 block형으로구분 파일의속성과유형 디렉터리 디렉터리에속하는파일들의고유번호와이름기록 총 월 일 월 일 월 일 월 일 월 일 901531. \0 2225129.. \0 901532 f i l e 1 \0 901533 f i l e 2 \0 957539 d i r 1 \0
파일의속성과유형 링크 (link) 하나의파일실체에대해여러개의접근경로가능 hard link: 새로운이름 ( 메타데이터 ) 과파일실체연결 soft(symbolic) link: 새로운파일을만들어경로정보저장 상이한요소하드링크심볼릭링크 디렉터리에대한링크만들수없다만들수있다다른파일시스템으로의링크만들수없다만들수있다 target 존재여부반드시존재해야한다존재하지않아도된다 파일삭제시동작 참조계수가 0 이될때까지는이름만삭제되고파일은보존 링크삭제시파일은삭제되지않으나파일삭제시링크무효화 파일의속성과유형 링크
파일의속성과유형 링크 파일삭제시하드링크와심볼릭링크 파일시스템구조를따라파일목록보고관련작업하기 GUI 위치메뉴 ( 파일탐색기 nautilus) 실행
명령어 : pwd 현재의작업디렉터리확인 (print working directory) 명령어 : ls (list) 현재디렉터리의목록보기 Subdirectory 와 file 들의목록이출력됨 주요옵션 -a : hidden file 도모두나열 ( 보통. 으로시작한다.) -F : 끝부분에항목의유형을표시 / Directory = Socket @ Symbolic link * Executable file -l : 상세정보를보여줌 파일모드 링크수 소유자, 그룹, 크기 (bytes), 최종수정일시
명령어 : ls 주요옵션 ( 계속 ) -R : subdirectory 의목록을 recursive 하게보여줌. -s : 파일의크기를 block 수로나타냄. (1 block = 512 bytes) 그외에도많음. 인자 : file 또는 directory 이름 생략 : 현재 directory file 이름 : 해당 file 의목록정보만나열 directory 이름 : 해당 directory 에수록된모든정보나열 파일의모드 (mode) 2 1 1 항목의유형 (type) d: directory c: 문자유형의특수파일 - : 일반파일 l: 심볼릭링크 b: 블록유형의특수파일 s: 소켓 2 파일접근권한
파일의모드 접근권한표시 owner, group, others 로구분 type owner group all drwxr-xr-x r: read w: write x: execute : no right 명령어 : cd Directory 의변경 (change directory) 인자 : directory 이름 절대경로, 상대경로, 특수경로이름모두사용 인자가생략되면? 자신의 home directory
명령어 : mkdir 새로운 directory 생성 (make directory) mkdir [options] directory directory 는절대경로명또는상대경로명모두가능 하나이상의 directory 를한꺼번에생성가능 옵션 -p : 지정된 directory 의중간 directory 도같이생성 -m mode : 접근권한을부여해서 directory 생성 명령어 : rmdir Directory 삭제 (remove directory) 빈 directory 만삭제할수있다. 옵션 -p: directory 삭제결과로현재 directory 가비게되면상위 directory 도함께삭제
명령어 : rm 파일삭제 (remove) 옵션 rm [options] file -i : 삭제전에사용자에게확인 (interactive) -r 또는 R : 순환적으로 directory 삭제 -f : 확인하지않고모든파일삭제. 쓰기금지된파일도삭제. 쓰기금지된 directory 및그하위파일은삭제하지않음. 명령어 : cp 파일복사 (copy files) cp [options] file1 file2 file1 을 file2 로복사 cp [options] file directory file 을 directory 내부로복사 ( 이름은보존됨 ) cp r R [options] directory1 directory2 directory1 의내용을모두 directory2 로복사 원본과복사본은별개의파일이다. 옵션 -i : 복사전에사용자에게확인 (interactive) -p : mode, 소유자, 그룹등속성을보존하며복사 (preserve)
명령어 : mv 파일이름바꾸기또는이동하기 (move files) mv [options] file1 file2 mv [options] directory1 directory2 mv [options] file directory 여러파일을하나의 directory 로이동하기가능 파일본체는동일하게존재하고이름과위치만바뀜 옵션 -i : 복사전에사용자에게확인 (interactive) -f : 이동할새이름의파일이이미존재해도무시하고 overwrite 명령어 : ln 링크 (link) 만들기 ln [options] target [link_name] link_name 이란새이름으로대상파일 target 에대한링크를생성 link_name 이생략되면 target 과같은이름사용 ( 절대경로가같으면안됨 ) link_name 이디렉터리고 target 이여러개일때각 target 에대한링크를 link_name 디렉터리내에생성 옵션 -s : 심볼릭링크를만든다. -i : link_name 과같은이름의파일이있으면덮어쓰기여부를물어본다.
명령어 : find 파일찾기 (find files) find [path ] [expression] 지정된 path 이하의모든 directory 를순환적으로검색 여러 path 를한꺼번에지정할수있다. path가없으면? 현재 directory ( 시스템마다다르다.) expression이없으면? 지정된 directory 내의모든파일 expression 로시작하는부분부터 Boolean expression으로취급 ( 또는! 등으로시작할수도있다. 파일을찾기위한조건을명시 여러조건이나열되면 AND 의의미 명령어 : find 대표적검색조건옵션의미 - name 파일명 - type 파일형 지정한파일명이찾은파일명과일치하면출력된다. 이때파일명으로메타문자 ([ ],?, *) 와함께사용할수있다. 지정한파일형이찾은파일명과일치하면출력된다. 이때사용되는파일형은다음과같다. b : 블록특수파일 c : 문자특수파일 d : 디렉토리 p : 파이프인 fifo 파일 f : 일반파일 e : 연결파일 - user 로그인명지정한사용자 ID가찾은사용자 ID와일치하면출력한다. 파일의크기를이용해서찾는다. 파일크기는블록단위 (1블록 = 512바이 - size 수트 ) 이다. 지정한파일크기보다작은파일을찾으려면파일크기앞에 - 기호를붙이고큰파일을찾으려면 + 기호를붙인다. - ls 파일의속성정보를함께출력한다. (ls 명령의 l 옵션과유사 ) - atime 수 24 시간중지정한시간에접근 (access) 된적이있는파일을찾는다. - mtime 수 24 시간중지정한시간에변경된파일을찾는다. (0 을지정하면지난 24 시간동안을의미한다.) - exec 명령어명령어를실행한다. 이명령어는 \ ; 으로끝을맺으며명령어인수 { } 는현재의경로명으로대체한다.
명령어 : find 명령어 : locate 빠른속도의검색프로그램 (locate files) 파일이름등의정보를데이터베이스로미리생성 검색조건이단순 locate [option] string 인자로주어진 string 과일치하는이름을가진파일을검색해위치출력 옵션 사용자가접근권한이없을때는출력하지않는다. string 에메타문자를써서표현할수있다. -i : 대소문자를구분하지않음 (ignore case) -n num : 결과출력을 num 개만한다.
GUI 파일검색도구 파일탐색기 (nautilus) 에연결된 찾기 트래커찾기도구 미리인덱싱해야함시스템 기본설정 찾기와인덱싱 GUI find 명령어 find, locate, grep 의시각화 GNOME/GTK kfind KDE find - cat - more/less - head/tail 파일내용보기
파일내용보기 기본적으로 text 파일내용을본다. UNIX 종류에따라 binary 파일이나 device 등특수파일을보기도한다. 명령어 : cat 파일의내용을보여주거나연결 (concatenate) 결과는표준출력으로내보냄 cat [options] [file ] 주요옵션 -n : 행번호를앞에붙인다. -v : tab, newline, form-feed 를제외하고출력할수없는문자를보여준다. -e : 각행의끝에 $ 를보여준다. (-v 와함께사용 ) 파일내용보기 명령어 : cat 사용예
파일내용보기 명령어 : more 한화면에맞추어한페이지씩출력된다. more [options] [+/pattern] file 주요옵션 -c : 스크롤하지않고화면을지운다음출력 -w : 출력이끝난후빠져나가지않고사용자입력을기다림. -lines# : 한번에 # 줄씩출력 +/pattern: pattern 에해당하는문자열을찾아거기서부터출력 파일내용보기 명령어 : more 이동명령 more 로출력중인파일내에서이동? : 이동명령에대한도움말 <space> : 다음페이지 #f, #b : # 개의다음또는이전페이지건너뛰기 (default 는 1) #<return> : 다음 # 개행의텍스트표시 (default는 1) = : 현재행번호표시 #s : 다음 n개행의텍스트건너뛰기 /pattern : 다음 pattern이있는곳으로점프 q : 마침 # 는임의의숫자
파일내용보기 명령어 : less more 보다옵션이풍부하고다양한형태의이동가능 전체파일을적재하지않고보여주므로속도가빠르다. 한페이지를보여준후의프롬프트 : 다양한이동 / 검색명령을입력할수있다. h : 도움말 자세한내용은매뉴얼을참조하자! (A4 15pages ^^) more, less -- 기본명령어가아닌 utility 시스템종류와버전에따라구현이다르다. man 명령어수행시보여주는방식이 more 또는 less ( 시스템에따라다르다.) 파일내용보기 명령어 : head, tail 파일의시작 (head) 부분 / 끝 (tail) 부분보기 head tail [options] [file ] 시작또는끝의 10줄을출력 주요옵션 -# 또는 n # : 시작 ( 끝 ) # 줄을출력 -c# : # 바이트만큼출력 file 이생략되면? 표준입력
- ps - background/foreground - kill - top Process 프로세스 프로세스에대해뭘알지? 프로세스 : 실행중인프로그램 프로그램 : 파일로저장된실행가능한코드 운영체제가프로세스를관리한다. CPU 상태저장, 메모리사용현황, 실행상태등 프로세스생명주기 (life cycle)
프로세스생성 사용자의프로세스생성 셸또는데스크톱에서프로그램실행 실행중인프로세스에서프로세스생성 프로그램내에프로세스를생성하는코드를넣는다. 알고보면? - 모든프로세스는프로세스에서생성한다. 셸도프로세스 그러면셸은누가? 운영체제가. 그러면운영체제는누가? 부팅시모든프로세스의시조인 0 번 (idle), 1 번 (init) 프로세스생성 프로세스보기 : ps 현재실행중인프로세스보기 주요옵션 -e: 실행중인모든프로세스 -a: 로그인중인터미널과관련된모든프로세스 -f: 프로세스에대한모든정보 -l: 프로세스에대한상세정보 -H: 프로세스트리구조 -t tty_no: 지정단말 tty_no에서실행중인프로세스 -p PID: 지정하는프로세스번호 (PID) 의정보 -u UID: 지정하는사용자번호 (UID) 의프로세스 -g GID: 지정하는그룹번호 (GID) 의프로세스
프로세스정보 프로세스보기 : ps F: 플래그또는옵션 S: 상태. S (Sleeping), R(Runnable), I (Idle), D(uninterruptable sleep), T(traced or stopped), Z(zombie) UID, PID, PPID: 사용자, 프로세스, 부모프로세스번호 C: 스케줄링을위한프로세스소모량 STIME: 프로세스가시작된시간, 분, 초 PRI: 프로세스우선순위. 값이작을수록우선순위가높다. NI: nice 값 ( 우선순위계산에사용 ) SZ: 프로세스의자료와스택크기 (kbytes) WCHAN: 프로세스가대상이되는주소 TIME: 프로세스실행에걸린시간 CMD: 프로세스를실행시킨명령어 프로세스보기 : ps 프로세스계통도 ps eh 프로세스관계 부모 생성 자식 PPID 를거슬러추적하면 시조 를만난다!
프로세스보기 : top 실시간으로프로세스실행상황모니터링 프로세스실행제어 프로세스실행제어 ( 셸내장명령 ) &: 실행시 background 로실행하도록명령 bg: 실행을일단중단후 background 로전환 표준입력은받을수없으며표준출력은가능 fg: background 프로세스를 foreground 로전환 한번에하나의프로세스만 foreground 에서실행 jobs: 셸내장명령으로서후면프로세스를보여준다. 별도의 job 번호를붙임 bg fg 선택시 job 번호로선택가능
프로세스제어명령 프로세스강제종료 : kill $ kill [options] %job_no 또는 PID 셸내장명령 kill 의경우작업번호로프로세스종료 리눅스명령어 kill 명시된 PID 를가진프로세스에게시그널 (signal) 을보낸다. 옵션 -l : 시그널의목록확인 -signal_number 또는 signal_name : 해당시그널을보낸다 $ kill KILL 4301 default 는 TERM (15): terminate pid 가 -1: 실행중인셸만제외하고모두종료 프로세스제어명령 정해진시간에프로세스실행 : at $ at time [date][+increment] 시간지정 HH:MM 같은날의시간지정. AM, PM 을붙일수있다. MM/DD/YY 또는 DD.MM.YY 날짜지정 + n {minutes, hours, days, weeks} now, today, tomorrow, midnight, noon 등의키워드 관련명령어 atq: 등록된작업목록보기 ( = at l) atrm: 등록된작업삭제 ( = at d) batch: 정해진시간이아니라시스템부하가낮을때등록된작업수행 기타명령 : sleep n n seconds 휴식
- 입력모드 - 명령모드 - 라인편집모드 텍스트편집기 : vi vi 편집기 텍스트편집 짧을때는 cat 명령을사용할수있다. 긴파일의편집은전문편집기필요 vi (Visual editor) vi 이전편집기 : ed, ex 와같은 line editor vi: 커서가사방으로돌아다니는 획기적 인편집기 확장키가없던환경에서만들어져기본자판만으로사용함. vim (vi improved) syntax-oriented 기능등개선, 리눅스의기본편집기 문서편집기는많다. CLI 환경의 emacs GUI 환경에서 OpenOffice 를사용하면 MS Office 보다강력한기능을활용한문서작성가능
vi 편집기 vi 는 modal editor 두가지모드에서행동이다르다. 입력모드 (insert mode): 문자를입력한다. 명령모드 (command mode): 편집기능수행. Escape 모드라고도한다. vi [options] [file ] ex 모드 지금문자를입력하고있습니다. 잘못된문자는 backspace 키를눌러지우세요. 줄바꿈은 Enter키입니다. :ex-commands :vi 이동및편집기능사방이동페이지전환삭제복사 문자입력 지금문자를입력하고있습니다. 잘못된문자는 Backspace 키를눌러지우세요. 줄바꿈은 Enter키입니다. vi 편집기 입력모드로들어가기 i : 현재커서위치부터입력 (insert) I : 현재행의가장앞에서부터입력 a : 커서다음위치부터입력 (append) A : 현재행의가장끝에서부터입력 o : 현재커서아래에새행을만들어입력 (open) O : 현재커서위에새행을만들어입력 R : 현재커서위치부터덮어쓰면서입력 (replace) s : 현재커서위치의한글자를다른문자열로대체 (substitute) S : 현재커서위치에서라인끝까지지우고새로운텍스트입력
vi 편집기 명령모드 커서이동 h( ), j( ), k( ), l( ) : 한칸씩이동 w, b, e : 한단어씩이동. 다음단어, 앞단어, 다음단어의끝 각명령앞에숫자를붙이면그만큼반복 ^, $ : 행의맨앞, 맨뒤 #G : # 번째행으로이동 G : 맨마지막행 : 이전에커서가있었던행 ^f, ^b : 다음페이지, 이전페이지 ^d, ^u : 다음반페이지, 이전반페이지 H, M, L : 화면의맨앞, 중간, 마지막 /string,?string : string 과일치하는다음 (/), 이전 (?) 문자열 vi 편집기 명령모드 삭제 #x : # 개의글자삭제 (default=1) #dd : # 개의행삭제 (default=1) #dw : # 개의단어삭제 (default=1) D : 현재커서위치부터그줄끝까지삭제 J : 줄바꿈문자삭제. 즉, 두행을연결함. 되돌리기 u : 마지막변경명령에대한되돌리기. vim 에서는다중되돌리기도가능 U : 커서가위치한행에대한변경되돌리기. #. : 마지막명령 # 번반복
vi 편집기 명령모드 대체 #r : 한문자대체 R : 현재위치부터 ESC 를누를때까지대체 s : 현재문자하나를대체하고입력모드로전환 복사 #yy : # 개의행을복사 (default=1) #p : 복사또는삭제한내용을현재커서위치에 # 번붙이기 기타 ZZ : 변경내용을저장하고셸로돌아가기 ^L : 화면 refresh vi 편집기 라인편집모드 명령모드에서 Q 또는 : 을입력하면라인편집모드로간다. ex 편집기명령들을사용할수있다. 필수명령명령 w[rite] [file] w! [file] 결과 지금까지변경한내용 ( 버퍼에저장되어있음 ) 을파일에저장한다. 파일이름이주어지지않으면 vi 시작시열었던파일에저장한다. 쓰기금지가되어있거나기타시스템의이유로파일에저장할수없을때강제로덮어쓰기한다. 다만해당파일에대하여쓰기권한을가진사용자여야한다. r[ead] [file] file을읽어현재커서가있는줄아래붙여넣기한다. e[dit] [file] 편집중인파일을빠져나와인자로준 file 편집을시작한다. q[uit] 편집기를마치고셸로나간다 (quit). 파일이변경되었는데저장을하지않은경우에러메시지를출력하고편집기에머문다. q! 저장하지않고셸로나간다. wq, x[it] 파일의변경사항을저장하고셸로나간다. 명령모드에서 ZZ와같은효과다. Enter, vi vi 명령모드로돌아간다. he[lp] 온라인매뉴얼을출력한다.!bash 하위셸을실행한다. 셸실행이끝난후 exit를입력하면 vi로되돌아온다. se[t] 여러가지환경설정을한다.
vi 편집기 라인편집모드 편집명령 vi 명령모드와유사한명령이모두존재 명령어양식 : [range] 명령 [ 인자 ] range : 주소, 주소 주소의미주소의미. 현재커서가위치한줄 $ 파일의마지막줄 num num 번째줄 +num 현재위치에서다음 num 번째줄 -num 현재위치에서이전 num 번째줄 % 파일전체 명령 : 매우많으나자주사용되는것은 d[elete], g[lobal]/pattern/[ 명령 ], v/pattern/[ 명령 ], s[ubstitute][/pattern/replace/][options][#] :1,$s/text/test/g 1 행에서끝행까지모든 text 를 test 로치환 (substitute) 연습, 연습, 저렇게많고복잡한명령들을어떻게외우나? 자주사용하면머리와손에 각인 된다! 매일매일사용하자! vs. 어느쪽이손 / 손가락 / 손목 / 팔꿈치에더나쁠까? 어느쪽이두뇌개발에더좋을까? vi 같은고전적편집기를아직도써야하나? 이거배워서어디다써먹나? 노력대비효과가너무낮은거아닌가?