문제풀이 2

문제를 풀어보면서 리눅스(Unix)의 개념을 학습해본다.

1. 수정된 지 100일이 지난 파일 목록을 출력하시오 (명령어: find)

$ find -mtime +100

find 명령을 이용해 각종 파일이나 디렉토리를 검색할 수 있다.
옵션은 아래와 같다.

$ find -name filename       # 파일 이름으로 검색
$ find -mtime +n            # n일 이전에 수정된 파일 검색
$ find -mtime -n            # n일 이내에 수정된 파일 검색
$ find -perm nnn            # 권한이 nnn인 파일을 검색
$ find -type x              # 타입이 x인 파일을 검색
$ find -exec cmd {} \;      # 찾은 파일에 대해 cmd를 수행한다.

2. (a)에서 (b)의 결과를 얻으시오 (명령어: ll)

(a) (b)

$ ll -rt

-r옵션은 역순출력, -t옵션은 시간순 출력이다. ll은 ls -l의 앨리어스이며 ls의 옵션은 아래와 같다.

$ ls -a         # 디렉토리 내의 모든 파일 출력
$ ls -s         # KB단위 파일 크기 출력
$ ls -F         # 파일의 형태와 함께 출력
$ ls -R         # 서브디렉토리의 내용을 포함하여 출력

3. 명령어가 저장되는 history파일의 경로는 어디인가?

bash 쉘의 history파일은 .bash_history는 자신의 홈디렉토리에 있다.

4. 저장된 히스토리를 파일명 history.log로 저장하시오

$ history > history.log

혹은

$ history -w history.log

5. 디렉토리의 소유자/그룹을 하위디렉토리까지 전부 nobody로 변경하시오 (명령어: chown)

$ chown -R nobody:nobody ./*

-R 옵션을 주면 하위디렉토리의 권한도 모두 변경된다.

6. temp 디렉토리의 파일 중 하루가 지난 파일을 삭제하시오 (명령어: find)

$ find ~/temp -ctime +1 -type f -exec rm -f {} \;

find의 type옵션의 인수는 다음과 같다.

d: 디렉토리
f: 일반파일
l: 심볼릭 링크
p: 파이프
s: 소켓

7. screen 명령어를 사용하여, 서버와의 연결이 비정상종료되더라도, 세션은 유지한 채 작업을 할 수 있다. 이때 단축키를 사용하여 screen에서 빠져나오시오.

CTRL + a + d

8. 자신이 사용하고있는 tty를 출력하시오.

$ tty
/dev/pts/0

9. 다음과 같이 단계적인 디렉토리를 한번에 생성하시오.

1/
└── 2
    └── 3
        └── 4

mkdir의 -p(parent) 옵션을 사용하면 부모 디렉토리까지 한번에 생성할 수 있다.

$ mkdir -p ./1/2/3/4

10. grep 명령어의 위치를 출력하시오.

$ which grep
/bin/grep

$ whereis grep
grep: /bin/grep /usr/share/man/man1/grep.1.gz

11. 상위디렉토리로 이동하는 cd ..을 ‘pd’로 정의하시오. (alias)

$ alias pd='cd ..'

12. 이전에 친 ‘vi mytest’명령어를 다시 출력하는 방법은 무엇인가?

$ vi mytest
$ !!

13. ll의 출력 결과를 현재 경로 내의 result.txt 파일로 저장하시오

$ ll > result.txt

14. 5개의 백그라운드 작업 중 3번 작업을 포그라운드로 가져오시오

$ jobs
[1] ~~
[2] ~~
[3] ~~
[4] ~~
[5] ~~

$ fg %3

15. 이름 vi의 프로세스를 찾아 종료시키시오.(vi프로세스 id는 9140으로 가정)

$ ps -ef |grep vi

$ kill 9140

16. ll명령어에서 디렉토리만 출력하시오

$ ll -d

17. text.txt파일에서 상단 10줄을 읽어 오류만 error.txt에 저장하시오

$ head text.txt 2> error.txt

head는 기본적으로 앞에서부터 10줄만 읽어오는 명령어

$ head -n 20 test      # 앞에서부터 20줄 출력
$ head -n 200 test     # 앞에서부터 200줄 출력

2>는 에러 리다이렉션

$ ln -s test.txt link_test

19. du명령어를 이용해 폴더 내 모든 파일의 용량을 단위로 나타내시오

$ du -ah
4.0K    ./cfile
4.0K    ./afile
4.0K    ./bfile
4.0K    ./dfile
24K .

20. 현재 디렉토리의 모든 파일에서 mail이라는 패턴이 들어간 파일의 이름을 출력하시오(명령어: grep)

$ grep -l mail ./*

grep의 옵션은 아래와 같다.

-c: 패턴이 일치하는 행의 수를 출력
-i: 비교시 대소문자를 구별안함
-v: 지정한 패턴과 일치하지 않는 행만 출력
-n: 행의 번호를 함께 출력
-l: 패턴이 포함된 파일의 이름을 출력
-w: 패턴이 전체 단어와 일치하는 행만 출력

21. ‘m’으로 시작하는 모든 파일에서 ‘hamster’를 포함하는 모든 행을 찾으시오(명령어: grep)

$ grep -n hamster ./m*

22. 현재 디렉토리 내의 test.txt파일에서 :구분자를 이용하여 3번째 필드를 출력하라(명령어: awk)

$ awk -F: '{print $3}' ./test.txt

23. 현재 디렉토리 내의 test.txt파일에서 1행에서 3행까지 출력하라. (명령어: sed)

$ sed -n '1,3p' ./test.txt

sed에서 -n은 조용히 처리한다는 옵션이고, p는 조건에 맞는 것을 출력한다는 옵션이다.

24. vi 에디터의 탭 간격을 4로 설정하시오

:set sts=4

탭 사이즈와 관련된 vim 변수는 ts, sw, sts가 있다.

  • ts(tap stop): 문서에 있는 ‘\t’문자를 몇 칸으로 보여줄지 결정하는 변수
  • sw(shift width): » 또는 « 키로 탭 사이즈를 조절할때나 인덴트에서 자동 줄맞추기를 할 때 사용되는 화면 표시 크기
  • sts(soft tab stop): Tap키를 툴렀을 때 표시되는 간격을 지정해주는 변수

위 변수를 명령보드에서 다음과 같이 입력하여 설정해줄 수 있다.

:set ts=4
:set sw=4
:set sts=4

25. vi에서 ‘if’를 ‘testif’로 한번에 변경하시오.

:%s/if/testif/g

vi에서 문자를 일괄변환 하는 명령어는 :%s이다.

:%s/변경전문자/변경후문자/g       # 문서 전체에서 변경
:1,10s/변경전문자/변경후문자/g    # 1~10번줄에서 변경

26. 실행중인 터미널의 사이즈를 구하시오

$ stty size
24 142

27. 로그인하고 있는 모든 사용자를 출력하시오.

$ who
root     pts/0        2017-01-04 15:34 (192.168.10.196)
root     pts/3        2017-01-04 17:21 (192:S.0)

28. 현재 서버의 메모리와 캐시 사용량을 mb단위로 출력하시오.

$ free -m

29. 현재 디렉토리에 linux.txt라는 파일을 만드는 alias를 작성하시오(alias명: linux)

$ alias linux='touch linux.txt'

30. 포그라운드에서 실행중인 프로세스를 일시정지 하는 단축키는 무엇인가?

$ sleep 100
Ctrl + z
[1]+  정지됨               sleep 100

31. 아래 리스트에서 6자리 단어이자 대소문자 구분없이 y가 포함되는 단어의 개수를 출력하라.

  1. jbw1010
  2. woogil70
  3. nianelo4
  4. yuneert12
  5. asfsddd2
  6. 12312dfd
$ more list | grep -w '......' | -ic 'y'

-w옵션은 패턴과 일치하는 단어만 출력해주는것이고, -i옵션은 대소문자를 무시할 수 있다. -c옵션은 일치하는 라인의 숫자륿 반환한다.

32. diff -u b a명령어를 이용하여 아래와 같은 결과를 도출하였다. 결과값을 가지고 a파일을 만드시오.

$ diff -u b a
~~~
$ diff -u b a > a

33. 당일 오후 1시로 알람을 지정한 뒤, 프로세스를 죽이시오 (PID는 9140으로 가정한다.)

$ kill -14 9140 | at 13:00

SIGALRM(14)은 알람을 발생시키고 프로세스를 종료한다.
at은 리눅스 터미널에서 간편하게 예약작업을 가능하게 해준다.

34. 10G의 더미 파일을 만드시오

$ dd if=/dev/zero of=파일명 bs=1GB count=10

dd는 파일을 변환하고 복사하는 명령어이다.

$ dd if=입력 of=출력 bs=바이트 count=반복

ibs = bytes     #한번에 bytes 바이트씩 읽는다.
obs = bytes     #한번에 bytes 바이트씩 쓴다.
skip = n        #n*ibs 바이트만큼 무시하고 읽는다.
seek = n        #n*obs 바이트만큼 무시하고 쓴다.

35. 시그널 이름 중 ‘SIGQUIT’은 몇 번에 해당하는가?

자주 사용되는 시그널은 다음과 같다.

SIGINT(2) 프로세스 인터럽트 (Ctrl + C)
SIGQUIT(3) 프로세스 중단
SIGKILL(9) 프로세스 강제종료
SIGALRM(14) 알림 발생
SIGTERM(15) 프로세스 종료
SIGCONT(18) 프로세를 재시작하라
SIGSTOP(19) 프로세스를 일시정지
SIGTSTP(20) 프로세스 일시정지 (Ctrl + Z)

36. csh에서 로그아웃 할 때 백그라운드 프로세스를 자동으로 죽이려면 어떤 파일을 참조하면 되는가?

C쉘은로그아웃할 때 홈디렉토리의 ‘.logout’파일을 읽는다.

37. grep을 사용하여 마침표로 시작되는 줄을 찾으시오.

$ grep '^\.' file

38. 디렉토리 내에서 가장 새로운 파일의 이름을 출력하는 방법은 무엇인가?(명령어: ls)

$ ls -t1 | head -1

39. 연결되지 않은 심볼릭 링크를 찾아내는 방법은 무엇인가?(명령어: find)

$ find -L . -type l

40. rm 명령어 사용시 바로 삭제시키지 않고 한번 더 물어본 후 삭제시키고자 할 때 사용하는 옵션은?

$ rm -i file

41. cat명령어 옵션 중 tab과 행바꿈 문자를 제외한 제어 문자를 ^형태로 출력해주는 옵션은?

$ cat -v file

42. 0.0.0.0에서 999.999.999.999까지 표현할 수 있는 정규식을 작성하시오.

\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}

43. egrep 명령어를 이용하여 testfile 내 숫자3이 한번 이상 등장하는 행을 출력하시오.

$ egrep '3+' testfile

egrep은 grep의 확장판으로서 grep이 하나의 문자열을 찾는 것 과는 달리, 여러 개의 문자열을 동시에 찾을 수 있고, grep에서 활용할 수 있는 메타문자 이외에 추가 정규 표현식 메타문자를 지원한다.

  • +: +앞의 정규표현식이 1회 이상 나타남
  • ?: ?앞의 정규표현식이 0회 또는 1회 나타남
  • |: 문자열간의 OR연산자
  • (): 정규표현식을 둘러쌈

44. 같은 디렉토리에 있는 a.py를 vi로 연 뒤 b.py로 전환하시오

$ vi a.py

:e b.py

45. 파일의 제일 앞부분에 있는 100개의 문자를 삭제하시오(명령어: dd)

$ dd if=file of=file ibs=1 skip=100 conv=notnrunc

한번에 1바이트씩 총 100번 즉 100개의 문자를 삭제하고 읽어와 쓴다.

46. test.log 파일을 정렬하여, 동일 디렉토리 내 result.log에 작성하시오.

$ sort -o result.log test.log

47. 백그라운드로 실행중인 프로세스나 현재 중지된 프로세스 목록을 PID와 같이 출력하라

$ jobs -l

48. 현재 crontab에 등록된 작업을 출력하시오.

$ crontab -l

49. 아래 crontab에 대해 맞는 설명은?

30 4,12 * * * rm /home/*.log

매일 4시 30분 12시 30분에 홈디렉토리의 모든 *.log파일을 삭제해라

50. vi편집기 내에서 문서 최상단으로 커서를 위치시키는 명령어는?

1G

through.kim's profile image

through.kim

2017-01-04 16:19

Read more posts by this author