상세 컨텐츠

본문 제목

La piscine 1일차 - 쉘프로그래밍

카테고리 없음

by 2020. 7. 27. 17:14

본문

 1. Introduction 

 

 2. cd et file system 

 

man man   :  man 관한 manual 보기

man -f man : man 제목에 들어간 모든 메뉴얼들 보기

 

ls -p : 파일 형식까지보기

ls -l : 자세히 보기 (rights, owner, group, creation date, file name)

ls -a : 숨김파일도 보기

 

폴더를 생성하면 안에 숨김파일 2개가 자동으로 생김

하나는 . : 폴더에 관한 파일

하나는 .. : 상위폴더에 관한 파일

—> 그래서 cd .. 하면 상위폴더로 이동되는거임!

 

 

Ctrl + L : 터미널 clear!

 

mkdir. : 디렉토리 생성

rmdir  : 디렉토리 삭제

 

3. chmod 

 

user, group, others 의 권한을 정해줄 수 있다.

u : user
g : group
o : other

 

read, write, execute 의 권한을 줄 수 있다.

rwx (read write execute)
421

 

읽는방법

터미널에 ls -l 이라고 쳐보자.

자세한 파일들의 정보가 나오는데 앞에 rwx로 이루어진 9개의 문자열이 있을것이다.

읽어보자~

 

- rwxr-x—x : 앞에서부터 차례대로 uuugggooo의 권한! 순서는 rwxrwxrwx! 권한있으면 알파벳으로 쓰고 없으면 - 로 표기!

 

 

chmod문 예시

 

chmod u+r text.txt : text.txt 파일에 대해 user에게 읽기 권한을 주세요.

chmod a-x text.txt : text.txt 파일에 대해 모두(all)에게 실행권한을 뺏으세요.

 

 

 

8진법으로 표현하는 멋있는 방법(정보처리기사 실기 2회 출제)

 

ex) chmod 751 text.txt

 

text.txt 파일에 대해 user에게는 r(4)+w(2)+x(1) = 7

                               group에게는 r(4)+x(1) = 5

                               other에게는 x(1) = 1 의 권한을 줄 거라는 뜻

 

 

4. echo, cat, ls et touch

 

 

cat : 파일 내용을 display 시켜줌(concatenate)

cat -e. : additional information such as non printable characters and hard returns.

 

touch : 리눅스에서 파일을 생성하거나 갱신하는 명령어입니다. 새로운 파일을 만들 때는 존재하지 않는 파일 명을 지정하면 지정된 파일명으로 파일이 생성되며 이미 존재하는 파일을 지정하면 파일의 수정시간이 업데이트 됩니다.

touch -t yyyymmddttmm : 원하는 시간으로 마지막수정날짜를 바꿔줌

 

5. $, env, et export

 

sh: 쉘프로그래밍을 시작하겠다는 뜻

 

변수를 지정해보자.

salut = hello

그 터미널에서 echo $salut를 치면 hello로 나오지만 다른 터미널이나 sh를 치고 echo $salut를 치면 값이 없다고 나온다.

그것은 바로 env에 salut이라는 변수가 들어있지 않기때문!

 

env : 프로그램 실행 환경

 

 

export시켜주기

export [변수명] : env로 변수를 export시켜줌!

 

6. Wildcard, tilde et guilemets

 

와일드카드 : 컴퓨터에서 특정 명령어로 명령을 내릴 , 여러 파일을 한꺼번에 지정할 목적으로 사용하는 문자 

 

 

wc

word count. 파일 내 글자, 라인 수 등을 세어주는 unix command.
(나중에 정리하는 부분 또 나옵니다.)

-c : byte 수
-m : character 수
-ㅣ : new line(\n) 수
-w : 단어 수 카운트

 

 

 

‘*’ : 0 이상의 모든 문자열

? : 글자 하나

 

Echo t???.txt

> test.txt

 

 

~ : 상위 디렉토리

Echo ~

Ls ~/shell/

Cd ~/toto

 

 

 

echo *    를 하면 ls와 동일한 동작 수행

 

 

근데와일드카드 문자들을 그냥 문자로 쓰고싶을때는?

 

Echo ‘*’

Echo “*”

Echo \*

 

 

Echo $truc

>bidule

 

쌍따옴표는 * 제한됨

Echo “$truc”

>bidule

Echo “$truc *”

>Bidule *

 

따옴표는 모든 와일드카드가 제한됨

Echo ‘$truc *’

$truc *

 

7. more, tail, head at grep

more

일종의 viewer/ display a file and paginate(페이지를 매기다) its content

 

wc -l test.rtf : test.rtf 가 몇줄로 되어있는 파일인지 나옴

7 test.rtf

 

more test.rtf : cat test.rtf 와는 다르게 man 을 볼 때처럼 arrows, pgUP, pgDown, spacebar , slash를 이용한 탐색 사용 가능

 

 

head

head -n 2 test.txt : text.txt의 처음 두줄만 보여줘라.

head -c 2 test.txt : text.txt의 처음 두 글자만 보여줘라.

> tail 도 사용법 같음

 

 

grep : 검색하는 명령어

grep simple test.txt  : test.txt 에서 simple이라는 단어가 들어간 라인 검색

grep -v simple test.txt : test.txt에서 simple이라는 단어가 들어가지 않은 라인 검색

grep -i SiMpLe test.txt : test.txt에서 대소문자 구분없이 simple이라는 단어가 들어간 라인 검색

 

 

 

 

 

8. stdout, stderr  et stdin

 

stdin, stdout, stderr

 

 

stdin : YOUR KEYBOARD!

 

 

redirected된 조금 더 복잡한 형태

 

'ㅣ'를 사용한 redirecting

 

'>'를 사용한 redirecting

 

 

우와.... ls의 stdout을 없는 파일인 result.txt로 넘겨주니까 ls의 값들이 모두 result.txt 파일에 텍스트로 저장되었다...굿!

작동원리 : shell이 ls를 실행하기 전에 result.txt파일을 만든다...!!! 그리고 ls program을 이 파일과 연결한다.

 

 

 

 

ls bonjour를 하면 에러가 뜬다.

그리고 나서 ls bonjour > res.txt를 하면.....!

에러가 뜨지만 res.txt라는 빈 텍스트 파일이 생성된다. shell 이 ls를 실행하기전에 먼저 res.txt를 만들기 때문...!크.....

ls > res.txt에서도 redirect 시켜주는데 std.out 이 없어서 그냥 빈파일로 뜨는것....!

오직 standard output만 연결이 된다...1

 

그리고 still 에러메시지도 보여줌...!

 

 

 

 

그치만...! 나는 에러메시지도 redirect 하고 싶다!!! 하면 다음과 같이 2를 추가하고 error.log라고 적어주세요.

 

 

 

그리고 error.log를 cat시켜보면

짜잔

ls bonjour를 쳤을 때의 에러 문구가 error.log파일에 그대로 들어갑니다....!

꼭 확장자를 log라고 저장해야하는건아니고... txt파일로 해도 잘됨...!

중요한 건 그냥 앞에 2를 쓰는것!

 

 

> : redirect to file

| : redirect to program

 

 

 

ls는 차례대로 명령어를 수행하기 때문에 bonjour test*라고 쓰면 오류메시지가 하나뜨고 정상적으로 수행한 문장이 하나 뜬다.

즉, stderr와 stdout이 하나씩 뜬다.

두 개를 한 번에 처리할 수 있음!

 

 

'|' 의 쓰임

 

 

편리함!!

 

 

 

반대방향?

 

'< ' 이 방향으로 하면!!!! 반대로 적용이 됩니다.

 

 

두번 쓰기?

 

 

>> 이렇게 두번 쓰면 원래 있는 파일에 덧붙여서 텍스트를 추가할 수 있다.

> 한번만 쓰면 원래있던 파일에 새로 쓰여짐...!

 

<< 쓰는 방법!  FIN이 아니라 END로 해도 되고 상관없다.

 

 

 

 

 

 

ls bonjour *.txt 라고 치면

첫번째 명령어는 stderr로 출력됨  --->  ls: bonjour: No such file or directory

두번째 명령어는 stdout으로 출력됨 ---> .txt로 끝나는 파일들 나열

 

이때, stderr는 2로 / stdout은 1로 인식되는 것 같다.

 

그래서 ls bonjour *.txt > resultat.txt 를 했을 때 1인 stdout의 결과들이 resultat.txt로 들어가는거고

그 뒤에 2>&1 을 붙이니까

약간 C언어의 포인터개념을 생각해보면 2인 stderr 오류메시지를 &1 즉, 1이 들어있는 주소에 넣는다..는 것 같다!

 

그래서 마지막에 resultat.txt 를 출력해보면 stderr과 stdout이 둘다 들어가있다.

 

 

9. find, wc et bc 

find

let us search in file tree

 

first parameter : the directory where we want to start our process

 

find . : .으로 시작하는 파일을 다 찾아줌.

안에 파일트리까지 다 보여줌. complete path!

 

 

find . -name joker.txt : 현재 파일 위치에서부터 파일 이름이 joker.txt인 모든 파일을 찾아라.

find . -type d : 현재 파일 위치에서부터 directory를 모두 찾아라.

 

 

 

maxdepth 찾는 파일의 최대 깊이 지정!!

find . -maxdepth 1 : 현재 파일 위치로부터 깊이가 1인 파일들 중에 검색

ex)  find .  -maxdepth 0

결과 출력 -->    . (자기자신을 보여줌)

 

 

 

wc(word count) 총정리

 

 

 

 

bc는 계산기

 

좋아좋아..

 

 

 

10. shellctrl, ctrl c et ctrl

 

 

cat을 치고 바로 엔터를 누르면 컴퓨터가 사용자의 입력을 계속 기다리는 상태가 됨.

그럼 이상태에서 어떻게 끝내는가?????!

 

ctrl+d 키를 누르면 이제 사용자의 입력이 끝났다고 알릴 수 있다.

그렇게 끝내면 됨!

 

아니면

 

ctrl+c 누르면 그냥 종료됨! 빠져나올 수 있음

 

man 같은 프로그램에서는 q를 눌러야 빠져나올 수 있음

 

 

ctrl + \ : ctrl + c 보다 더 넓은 범위에서 많은 프로그램들 종료 가능 (man도 이걸로 종료됨!)