00

cat z 를 입력하면 Z가 출력되게끔 만들어보자. 어떻게든!


그렇다면 먼저 cat 이 어떤 명령어인지를 알아야 한다. man cat 에 따르면,

The cat utility “reads” files sequentially, “writing” them to the standard output.

파일(들)을 순차적으로 읽고, 그것(들)을 표준 출력으로 프린트한다.

표준 출력은 뭔데?

Standard output, sometimes abbreviated stdout, refers to the standardized streams of data that are produced by command line programs (i.e., all-text mode programs) in Linux and other Unix-like operating systems.

stdout 이라고도 불리는 이 친구는 명령줄 프로그램에 의해 생성되는, 표준화된 데이터 스트림을 가리킨다. 리눅스 및 기타 유닉스 계열 운영 체제에서 사용할 수 있다.

그래! 명령줄에 출력되는 Z가 바로 표준 출력된 데이터 스트림이야!
cat [옵션] [파일명] 의 형태로 사용하니 cat z의 z는 파일 이름이므로
‘Z’ 라는 내용이 들어있는 ‘z’ 라는 이름의 파일을 만드는 것 이 00번의 목표이다.
어떻게든 만들라고 했으니 방법은 여러가지다.

  1. vi(vim) z 를 통해 z라는 파일을 만들고, 그 안에 Z를 입력 후 저장
  2. cat > z, Z 입력(표준 입력으로 입력된 내용을 표준 출력으로 출력), control+D
  3. echo Z > z

개행에 주의하자. 개행이 있어야 한다.
cat 명령어로 만들 경우, 개행 없이 저장된다.
echo 명령어는 개행이 기본적으로 포함되어 있기 때문에 상관 없다.


01

주어진 조건에 맞게 testshell00을 만들자.


그렇다면 먼저 ls -l 이 어떤 명령어인지를 알아야 한다. man ls 에 따르면,

list directory contents 디렉토리에 있는 것들을 나열한다.
-l (The lowercase letter “ell”.) List files in the long format ‘긴(자세한) 형태’로 파일을 나열한다. 긴 형태가 어떤 형태냐면…
file mode, number of links, owner name, group name, number of bytes in the file, abbreviated month, day-of-month file was last modified, hour file last modified, minute file last modified, and the pathname.
파일 모드(권한), 링크 수, 오너 이름, 그룹 이름, 바이트 수, 최근 수정된 월, 일, 시, 분, 그 친구 이름.

을 활용하여 차례차례 바꿔보자!
chmod, 바이트 수 추가, touch
압축을 잊지 말자… 기계가 채점할 때 정보가 갱신되므로 조건에 맞게 세팅해둔 대로 박제하자.


02

주어진 조건에 맞게 이것저것 만들어보자.


01번의 연장선이다.
파일의 종류, 링크 수, 바이트 수, 수정된 날짜, 심볼릭 링크에 주의하여 만들어보자.
링크 수가 다른 이유는 무엇일까?
일반 파일의 경우 최소 한 개의 링크(자기자신)을 갖고 있다.
디렉토리의 경우 본인+상위 디렉토리, 최소 두 개의 링크를 갖고 있다.
링크가 두 개인 일반파일은 권한도, 바이트 수도, 수정된 일시도 같다. 즉 하드링크로 연결되어 있다.
man ls 에 따르면, 심볼릭 링크의 경우 어디로 연결되어 있는지 -> 표시를 통해 알 수 있다.


03

켈베로스 티켓 발급받기


24시간이 지나면 유효기간이 지나버리기 때문에 제출 및 평가 때 유의하자.
man kerberos kinit klist
리스트 내용을 klist.txt 에 저장하자.


04

조건에 맞게 ls 옵션 사용하기


순서는 상관 없으니 시키는 것만 하자.

  1. 현재 디렉토리의 모든 파일과 모든 디렉토리를 표시하되,
  2. 숨김폴더는 빼고,
  3. 그들을 쉼표로 구분하고,
  4. 생성일 순으로 정렬하고,
  5. 디렉토리의 이름에는 슬래시가 붙어야 한다.

ls -mtUp

-m: Stream output format; list files across the page, separated by commas.
-t: Sort by descending time modified (most recently modified first).
-U: Use time when file was created for ‘sorting or printing’.
-c, -u, -U 옵션은 제일 늦게 쓰인 옵션으로 override 된다. 즉, 셋 중 하나만 쓰일 수 있는, 같은 부류의 옵션이다.
-u: Use time of last access, instead of time of last modification of the file for sorting (-t) or long printing (-l).
-c: Use time when file status was last changed for sorting or printing.
-p: Write a slash (‘/’) after each filename if that file is a directory.


05

본인 깃 리포지토리 내 최근 5개의 커밋 id만 보이도록 명령어 설정하기


git-scm에 따르면,

By default, with no arguments, ‘git log’ lists the commits made in that repository in reverse chronological order;
시간 역순이 기본값이다. 따라서 특별히 옵션을 주지 않아도 최근 순서대로 보여준다.

git log 로 지금까지의 커밋을 볼 수 있다.
하지만 우리는 최근 5개의 커밋 id, 즉 해시값만 필요하다.

man git-log 의 Commit Formatting, Commit Limiting 챕터를 보면, 로그를 주어진 형태로 출력하는 방법을 알 수 있다.
형태만 다른, 같은 의미의 옵션이 있어 답이 다양하게 나올 수 있다.
다만, 맨 마지막 줄 끝에도 개행문자($)가 꼭 필요하니 이 점을 유의할 것.


06

조건을 만족하는 쉘 스크립트 작성하기 근데 이제 git을 곁들인


git 과 관련된 파일을 보여줘야 한다. man git 을 참고해서 git ls-files 명령어를 사용해야 한다는 것을 알 수 있다.
man git-ls-files 를 통해 어떤 옵션이 추가로 필요한지 확인하면 금방 풀 수 있다.

  1. 현재 깃 저장소에 존재하는 파일 중
  2. 무시하는(=추적하지 않는) 파일들을 보여줘야 한다. 무시하는 파일을 보여주는 옵션을 쓸 때, 반드시 추가로 써야하는 옵션이 있으니 주의할 것.


07

명령어 patch 와 diff 이해하고 활용하기


파일 a에는 스타워즈 4에 대한 내용이 들어 있다.
diff 를 이용해 파일 sw.diff을 만들었더니 그 안엔 스타워즈 4의 내용과 5의 내용이 섞여 있다.
man diff 에 따르면,

diff - compare files line by line
한 줄씩 파일을 비교한다

이를 통해, 파일 b에는 스타워즈 5 얘기가 들어 있었음을 유추할 수 있다!

patch 를 통해 스타워즈 5 내용만 뽑아낼 수 있을 것 같은데…
man patch 로 patch 명령어를 어떻게 쓰는지 알아보자.


08

magicfile 만들기


magicfile이 무엇인지부터 알아야 한다.
힌트로 주어진 man file 을 보면 magic 이라는 키워드를 찾을 수 있다.
man magic 에 따르면,

This manual page documents the format of the magic file as used by the file(1) command, version 5.04.
The file(1) command identifies the type of a file using, among other tests, a test for whether the file contains certain ‘magic patterns’.
이 매뉴얼 페이지는 file(1) 명령 버전 5.04에서 사용되는 매직 파일의 형식을 설명한다.
file(1) 명령어는 파일에 특정 ‘매직 패턴’이 포함되어 있는지 여부를 테스트하여 파일의 유형을 식별한다.

이 파일이 어떤 파일인지 구분 할 수 있게 해 주는,
즉, 특정 파일이 갖추어야 할 조건과 기준을 적어 둔 파일이 바로 magicfile 이다.
좀 더 아래로 내려가 magicfile 이 어떻게 구성되어있는지를 살펴보자.

The line consists of the following fields: offset …(중략) type …(중략) test …(중략) message …

필드가 offset type test message 로 이루어져 있으니 조건에 맞게 magicfile을 만들어보자!
몇 번째 글자부터 검사하는데?
검사하는 키워드의 타입은?(숫자? 문자열?)
검사할 키워드는 어떤 건데?
조건을 만족한다면 그 파일의 타입 이름을 뭐라고 출력할 건데?
각 필드는 하나 이상의 공백문자로 구분된다. 즉, 스페이스도, 탭도 가능하다!