문제풀이 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)
$ 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>는 에러 리다이렉션
18. test.txt
파일에 link_test
이름으로 심볼릭 링크를 생성하시오
$ 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가 포함되는 단어의 개수를 출력하라.
- jbw1010
- woogil70
- nianelo4
- yuneert12
- asfsddd2
- 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