Download presentation
Presentation is loading. Please wait.
1
Command line tools 한국어 정보의 전산 처리
2
command line tool을 사용하기 위한 환경
Unix 및 이를 PC에서 구현한 운영체제인 Linux는 command line/터미 널이 기본적인 사용자 인터페이스(UI)임. MS-DOS는 이를 조악하게 모방한 것. Unix/Linux와 DOS의 차이 줄바꿈 문자: LF 대 CR-LF 경로 구분자(path separator): 슬래시(/) 대 역슬래시(\: 폰트에 따라 \로 보임) 아이콘, 메뉴를 마우스로 클릭하는 방식의 GUI를 Apple社의 Macintosh 에서 처음으로 구현. 이 방식이 MS-Windows, Linux의 X-Windows에도 채용됨. MS-Windows 운영체제에서 제공하는 기본적인 command line 인터페 이스: 명령 프롬프트(cmd) (DOS를 계승한 것), powershell MS-Windows에서 Unix/Linux의 command line을 흉내낸(emulate) 것: Cygwin
3
Cygwin이란? Windows 운영체제에서 Linux 비슷한 command line 환경을 제공하 고 Linux의 기본 command line tool들을 사용할 수 있게 해 주는 emulator Linux의 기본 command line tool들은 GNU 프로젝트에서 관리해 왔 는데 Cygnus라는 회사에서 이것을 Windows용으로 porting하여 제공했음. 그래서 Cygwin이라는 이름이 붙었음. Cygnus社는 Redhat Linux에 합병되었으나, Cygwin은 계속 유지, 관리 되고 업데이트되고 있음. Cygwin과 비슷한 대안: UnxUtils, DJGPP, MKS Toolkit, AT&T UWIN 등
4
command line tool의 철학 (Unix 철학)
Do one thing well 한 가지 일만 잘 하는 소프트웨어는 디자인/유지/관리하기가 쉬움. 복잡한 일을 처리하려면 복수의 tool을 pipe로 연결해서 쓰면 됨. Process lines of text, not binary 텍스트 파일은 보편적이고 다루기 쉬움. Use regular expressions 텍스트 처리의 강력한 도구인 정규표현을 적극 활용함. Default to standard I/O 표준 입력과 표준 출력을 default로 사용. 파일 입출력을 원하면 명시. Don’t be chatty “start processing”, “~% processed”, “finished” 같은 메시지를 출력하지 않음. 그런 메시지는, 여러 tool들을 pipe로 연결해서 쓸 때 오히려 장애요인이 됨. Generate the same output format accepted as input
5
Cygwin 설치 절차(Ubuntu 사용자는 불필요)
32비트용: setup-x86.exe 64비트용: setup-x86_64.exe Cygwin에는 방대한 tool들이 포함되어 있기 때문에, 설치 과정에서 설 치를 원하는 tool들을 선택할 수 있음. Cygwin을 이미 설치한 뒤에도, setup 파일을 다시 실행하여 tool들을 추가로 설 치하거나, 이미 설치된 tool들을 업데이트할 수 있음. setup 파일을 실행하여 ‘Select Packages’ 단계에서 Category별로 tool 들의 목록을 보고 원하는 것을 선택함. Base 범주에 있는 것은 사용자가 일부러 선택하지 않아도 default로 설치됨. Interpreters 범주에서 python, python3, ruby를 선택. Math 범주에서 bc, R을 선택. Net 범주에서 curl을 선택. Text 범주에서 jq, pcre, pcre2를 선택. Utils 범주에서 diffutils를 선택. Web 범주에서 wget을 선택. Devel 범주에서 git를 선택.
6
Cygwin 설치 후의 관리(Ubuntu 사용자는 불필요)
(64비트용을 설치했다면) c:/cygwin64/bin에 실행파일(~.exe)과 DLL들 이 들어 있음. Cygwin의 환경설정에서 이 디렉토리가 지정되어 있기 때문에, 이 디렉토리에 있는 실행파일은 어느 디렉토리에서든 접근가능함. 다른 실행파일도 이 디렉토리에 복사해 넣으면 같은 효과를 가짐. Cygwin 터미널을 실행했을 때의 초기 디렉토리는 c:/cygwin64/home/username (이탤릭체 부분은 가변적)임. Ubuntu에서 터미널을 실행했을 때의 초기 디렉토리는 /usr/home/username (이탤릭체 부분은 가변적)임. Ubuntu에서는 GUI의 디렉토리 탐색기에서 특정 디렉토리로 가서 터미 널을 열 수도 있음.
7
터미널 사용을 위한 초기 세팅 Ubuntu에서 소프트웨어나 라이브러리 설치시에는 passwor를 입력하 는 사용자 절차를 필요로 함. 설치 명령 앞에 sudo를 추가함. python으로 제작된 tool이나 library를 설치할 때 pip이라는 tool을 흔 히 사용함. sudo apt-get install python-pip (pip이 설치되어 있지 않으면 설치함) Cygwin 명령: python -m ensurepip sudo pip install -U pip (pip을 최신 버전으로 업그레이드함) Cygwin 명령: python –m pip install –U pip sudo pip install ~~ (~~라는 python tool/library를 설치함. 예: csvkit) 중요한 약호의 의미 . current directory one-level higher directory
8
디렉토리 이동 : cd cd : 디렉토리 이동 DOS 명령어 cd도 거의 비슷하나 약간 차이 있음.
cd abc 현재 디렉토리로부터 그 안에 있는 abc 디렉토리로 이동 cd ../../../abc 세 단계 상위 디렉토리 안에 있는 abc 디렉토리로 이동 주로 relative path 사용. absolute path도 사용가능: cd /usr/home/username/abc cd /media/username/외장하드레이블 외장하드의 최상위 디렉토리로 이동 DOS 명령어 cd도 거의 비슷하나 약간 차이 있음. cd.. 띄어 쓰지 않아도 됨. cd\ 현재 드라이브의 최상위 디렉토리로 이동 d: d 드라이브로 이동 해당 드라이브로 처음 이동하는 것이라면 최상위 디렉토리로 이동. 그 드라이브의 특정 디렉토리에 있다가 드라이브를 변경했다면 그 디렉토리로 이동. 상위 디렉토리와 하위 디렉토리를 구분하는 기호(path separator)가 / 대신 \임.
9
파일 및 디렉토리 관리 ls : 현재 디렉토리에 들어 있는 디렉토리 및 파일 목록을 출력함.
ls -l : 각 디렉토리/파일의 상세 정보까지 함께 출력함. 유사한 DOS 명령어: dir mkdir ~~: 현재 디렉토리에 ~~라는 하위 디렉토리를 만듦. 유사한 DOS 명령어: md rmdir ~~: 현재 디렉토리에 존재하는 ~~라는 하위 디렉토리를 삭제함. 유사한 DOS 명령어: rd cp source target : source 파일을 target 디렉토리에 복사함. cp xyz abc 현재 디렉토리에 있는 파일 xyz가 abc 디렉토리 안에 복사됨. cp ../abc/def /abc 디렉토리에 있는 파일 def가 현재 디렉토리에 복사됨. target이라는 디렉토리가 없으면, target이라는 파일을 만듦. 이 파일의 내용은 source와 동일함. target은 “디렉토리/파일”일 수도 있음. 유사한 DOS 명령어: copy (여러 파일을 통합할 때도 쓸 수 있음. 후술) mv source target : source 파일을 target 디렉토리로 이동함. target이라는 디렉토리가 없으면, 파일명을 source에서 target으로 바꿈. rm ~~: 현재 디렉토리에 존재하는 ~~라는 이름의 파일을 삭제함. 유사한 DOS 명령어: del
10
아무개문자(wild card) 특정 문자가 아니라 임의의 문자를 지칭할 수 있는 특수문자 ? 1개의 임의의 문자
* 임의의 개수의 임의의 문자 명령어 뒤에 써 주는 문자열을 command line argument라고 함. 명령어 뒤에 하이픈과 함께 써 주는 것은 실행 옵션을 지정하는 switch임. command line argument는 완전히 확정된 특정 문자열일 수도 있고 rm abc : abc라는 이름의 파일 1개만 삭제함. 아무개문자를 포함한 문자열일 수도 있음. rm ab? : ab~라는 이름의 모든 파일을 삭제함. rm ab* : ab로 시작되는 이름의 모든 파일을 삭제함. rm *.jpg : 확장자가 jpg인(즉 이름이 .jpg로 끝나는) 모든 파일을 삭제함. ls *.txt : 현재 디렉토리에 있는, 확장자가 txt인 파일들의 목록을 출력함. 아무개문자는 이렇게 특수 목적에 사용되기 때문에, 파일 이름에 사 용할 수 없음.
11
파일, 변수 내용 출력 cat abc : abc 파일의 내용 전체를 화면에 출력함.
head abc : abc 파일의 첫 10줄을 화면에 출력함. head -(n )숫자 abc : abc 파일의 첫 ‘숫자’ 줄을 화면에 출력함. tail abc : abc 파일의 끝 10줄을 화면에 출력함. tail –(n )숫자 abc: abc 파일의 끝 ‘숫자’ 줄을 화면에 출력함. echo : command line argument(의 내용)을 화면에 출력함. myvar=xyz123abc echo $myvar (화면에 xyz123abc를 출력함. 변수 이름 앞에 $를 붙임) printf : formatted printing/output 포맷 지정 방법: %c 문자, %d 정수, %f 실수 %04d 정수를 네 자리로 출력. 네 자리 미만이면 앞에 0을 붙여서 네 자리로 맞춤 %.4f 실수의 소수점 이하를 네 자리로 출력. 네 자리를 초과할 경우 반올림하여 맞춤 myvar= printf “my variable is %.4f” $myvar (my variable is 을 출력함) printf “my variable is %.2f” $myvar (my variable is 을 출력함) 대개의 프로그래밍 언어(C, perl, python, ruby 등)에서 printf 함수를 제공함.
12
redirection : 입출력 방향 바꾸기
command line tool의 default 입력 장치는 키보드(standard input)이고, default 출력 장치는 콘솔(터미널) 화면(standard output)임. 입력 장치를 파일로 바꾸고자 할 때: <input_file 출력 장치를 파일로 바꾸고자 할 때 >output_file (output_file이라는 이름의 파일이 이미 존재하면 overwrite) >>output_file (output_file이라는 이름의 파일이 이미 존재하면 append) 입력 장치가 파일일 때, 입력 파일을 지정하는 방법 cat input_file (대개의 명령어는 <를 쓰지 않아도 첫째 command line argument 를 입력 파일로 인식함) cat <input_file (<를 써 주면 입력 장치가 파일임이 더 명확함. tr은 <를 써야 함) <input_file cat (<입력 파일을 명령어 앞에 써도 됨. 이 때는 <가 필수적.) pipe로 복수의 명령어를 연결해서 쓸 때는 이 방식이 더 직관적임. <input sort | uniq 대 sort input | uniq : 후자보다 전자가 더 직관에 부합됨.
13
파일 통합, 분리 cat file1 file2 file3 : command line argument에 제시된 파일들을 통합함.
통합 결과는 default로 화면에 출력됨. redirection으로 출력 파일을 지정하면 파일로 저장됨. cat f1 f2 >output 아무개문자 사용 가능: cat *.txt >output (현재 디텍토리에 있는 확장자가 txt인 모든 파일을 통합하여 output이라는 이름으로 저장) cat 명령어는 파일 내용 출력, 파일 통합이라는 2개의 과제를 수행하므로 “Do one thing well”이라는 Unix 철학에 위배되는 예라고 할 수도 있겠으나 기본 기능은 파일 내용 출력이고 그 입력이 파일 1개일 수도 있고 여러 개일 수도 있다고 보면 Unix 철학 위반이 아님. DOS 명령어 copy로도 파일 통합을 할 수 있음. (Unix 철학 위반) copy *.txt output split input : input 파일을 일정한 크기(라인 수)의 파일들로 쪼갬. default 라인 수는 split -(l )숫자 : 숫자만큼의 라인 수로 쪼갬. output 파일들은 xaa, xab, xac, ..., xaz, xbb, xba, ..., xzz 식으로 이름이 붙여짐.
14
line 번호 붙이기 nl input : input 파일의 각 라인에 순차적으로 라인 번호를 붙임.
라인번호와 본래의 라인 사이에는 default로 탭을 넣음. 스위치 –s로 지정 가능. 비어 있는 라인에는 번호를 붙이지 않음. 이러한 default 행동을 스위치 -l로 조 정 가능. 주의: 줄바꿈 문자가 CR-LF로 되어 있으면, CR 때문에 빈 줄로 인식하지 않음. 줄바꿈 문자 가 LF로 되어 있어야 빈 줄이 빈 줄로 인식됨. cat -n input : nl과 동일하나, 비어 있는 라인에도 번호를 붙임. cat이 파일 내용 출력과 라인 번호 붙이기라는 2개의 기능을 하므로, Unix 철학 위반이라고 볼 수도 있음. 기본 기능은 파일 내용 출력인데, 라인 번호 붙이기라는 부가 기능을 추가로 수 행할 수도 있는 것으로 보면, 위반이 아니라고 할 수도 있음. EmEditor 32비트용 Plug-in 중에 비슷한 기능을 하는 것이 있음. 행두 삽입, 행말 삽입 등 가능. 라인번호 앞이나 뒤에 특정 문자 추가 가능. 텍스트 에디터의 설정에서 라인 번호가 보이게 할 수 있음.
15
sort 입력 파일의 각 라인을 일정한 기준에 따라 순서를 배열/정렬해 줌.
default는 문자열(string)의 사전순 비교(lexicographic comparison)에 의한 오름차순(ascending order) 정렬 -f : 대소문자 구별 안 함. 소문자를 대문자로 간주하여 정렬. -g 또는 -n : 문자열 대신 숫자 값(numeric value)에 의한 정렬. -g : general numeric, -n : numeric -r : (reverse) 내림차순(descending order) 정렬 -u : (unique) 정렬한 결과 동일한 라인이 연속해서 나오면 중복 라인을 삭제하여 각 라인을 unique하게 만듦. -k 숫자 : 숫자번째 필드를 기준으로 정렬함. -t ~ : 필드 구분자를 ~로 함. 복수의 스위치를 결합해서 사용할 수 있음.
16
통계 정보 추출 wc : (word count) 파일의 크기에 대한 수치 정보 출력
default로 라인 수, 단어 수, 바이트 수 출력 wc -l 라인 수, wc -w 단어 수, wc -c 바이트 수, wc -m 문자 수 아스키 문자만 들어 있으면 wc -c의 결과와 wc -m의 결과가 일치하나 아스키 이외의 문자(2바이트 이상의 문자)가 있으면 결과가 다름. uniq : 동일한 라인이 연속해서 나오면 중복 라인을 삭제하여 각 라인을 unique하게 만듦. sort -u는 sort | uniq와 동일한 기능을 함. 그러나 uniq는 sorting된 결과뿐 아니라 unsorted input에도 적용 가능. 그러므로 기능이 완전히 같다고 할 수 없음. 스위치 -c : (count) 연속해서 나온 동일한 라인의 수를 함께 출력함. 스위치 -i : 대소문자 구분 안 함.
17
문자 바꾸기: tr (translate) tr 집합1 집합2 : 집합1에 나열된 문자들 각각을 집합2에 나열된 문자로 바꿈.
<input tr “abc” “xyz” : a를 x로, b를 y로, c를 z로 바꿈 집합2에 나열된 문자의 개수가 모자라면, 마지막 문자를 반복해서 개수를 채움. 주의: tr은 모든 문자가 1바이트 문자라고 전제함. 2바이트 이상의 문자가 문자집합에 제 시되면 이를 1바이트 문자들의 연쇄로 인식. tr -d 집합 : (delete) 집합에 나열된 문자들을 삭제함. <input tr -d “abc” : a, b, c를 삭제함. tr -s 집합 (squeeze) 집합에 나열된 문자가, 같은 것이 연속해서 나올 때 중복된 것을 삭제하여 unique하게 만들어 줌. <input tr -s “abc” : aa나 aaa 등을 a로, bb 등을 b로, cc 등을 c로 만듦. uniq가 라인 차원에서 하는 일을 문자 차원에서 하는 셈. 스위치 -c : (complement) 문자집합에 제시되지 않은 문자들이 대치 대상이 됨. 문자집합의 특수한 지정 방법 문자1-문자2 : 문자1부터 문자2까지라는 의미. [:space:] 모든 (수평 및 수직) 공백 문자 [:blank:] 모든 수평 공백 문자 [:punct:] 모든 문장부호 [:digit:] 모든 숫자 [:alpha:] 모든 알파벳 문자
18
pipe 두 명령을 pipe로 연결하면, 앞 명령의 출력이 뒤 명령의 입력이 되는 식으로 순차적으로 명령이 실행됨.
<input tr “[:blank:][:punct:]“ “\n” | sort | uniq -c | sort -gr tr “ -“ “\n”: input 파일의 공백, 문장부호를 모두 줄바꿈 문자로 바꾼다. 이렇 게 하면 하나의 단어가 하나의 라인을 구성하게 됨. (빈줄도 생김) sort: 소팅함. 같은 단어들이 한데 모여 연속해서 나오게 됨. uniq -c: 같은 단어(라인)가 연속해서 나오면 중복 삭제하고 개수를 count함. 그 러면 모든 단어에 대해 [빈도, 단어] 형식으로 출력됨. 사전순 배열. sort -gr: 빈도가 큰 것부터 내림차순으로 정렬됨. 대명률직해 이두문에서 이두 목록 및 빈도 추출 <daminglu.txt grep "{#“ | tr -d “{#}()[:digit:]” | tr “[:blank:]" "\n" | grep "/" | gawk 'BEGIN{FS="/"}{print $2}' | sort | uniq –c {#를 포함한 라인 추출, {#}()숫자 삭제, 공백을 줄바꿈으로 대치 / 포함한 라인 추출, / 뒤 부분만 추출, 소팅, 중복 삭제하면서 count
19
파일 비교 diff file1 file2 comm file1 file2 : 차집합, 교집합 출력
두 파일의 내용을 라인 단위로 비교하여, 차이 나는 부분을 출력함. file1에만 있는 라인은 ‘<’ 기호 뒤에 표시하고 file2에만 있는 라인은 ‘>’ 기호 뒤에 표시함. 인터넷으로 파일을 공동 관리할 때(예: 위키백과, open source software) 파일 내용 수정 내역을 기록/관리하기 위한 용도로 주로 사용됨. comm file1 file2 : 차집합, 교집합 출력 두 파일을 라인 단위로 비교하여 f1-f2, f2-f1, f1∩f2를 3개의 필드로 나누어 출력 두 입력 파일이 sort되어 있을 것을 전제로 함. comm -숫자 : 숫자번째 필드를 출력 안 함. comm -숫자1숫자2 : 숫자1번째 필드와 숫자2번째 필드를 출력 안 함. comm -12 : 두 파일의 교집합만 출력 comm -23 : f1-f2, 즉 f1에만 있고 f2에는 없는 라인만 출력. 목록(특히 단어 목록)끼리 비교하여 차집합, 교집합을 추출할 때 유용함.
20
네트워크로부터 파일 다운로드 wget url curl url 두 소프트웨어의 기능이 거의 동일하나, 약간의 장단점이 있음.
원본 파일 이름과 같은 이름으로 현재 디렉토리에 저장함. url에 파일 이름에 금지된 문자가 들어 있으면, 그 문자를 대치하거나 삭제함. 파일 크기, 다운로드 진척 상황 등을 화면에 보여줌. 스위치 -r : (recursive) url의 모든 하위 디렉토리를 recursive하게 뒤져서 모든 파일을 다 운로드함. (주의: 다운로드 용량 및 시간이 엄청날 수 있음) curl url 그 내용을 화면에 출력함. 파일로 저장하려면 리다이렉션 지정. 리다이렉션을 지정하더라도, 파일 크기, 다운로드 진척 상황 등을 화면에 보여줌. 두 소프트웨어의 기능이 거의 동일하나, 약간의 장단점이 있음. wget의 단점: 파일 이름을 지정할 수 없으므로, 다운로드 후 파일 이름 바꾸기 단계를 거쳐야 하는 경우가 많음. wget의 장점: 다운로드하다가 중단된 경우, 자동으로 다운로드를 다시 시도함. 두 tool 모두 단독으로 사용하기보다, shell script를 작성하여 많은 수의 파일 을 대상으로 처리할 때 power를 발휘함. (휴식 시간 지정도 가능)
Similar presentations