1. 현재 자기자신의 pc(linux 기준)의 cpu 모델명, OS 종류 및 버전, kernel 버전을 출력하시오.
#!bin/bash
echo 'cpu model name'
echo `cat /proc/cpuinfo | grep model*` # cpu 모델명 출력
echo 'os version'
echo `cat /etc/issue` # OS 종류 및 version
echo 'kernel version'
echo `cat /proc/version` # kernel version
2. 매주 일요일, 새벽 4시 30분과 낮 12시 30분에, 현재디렉토리에 test.txt 파일을 생성하는 crontab을 작성하시오.
#!bin/bash
echo 'crontable (touch) register'
echo `crontab -l | grep touch || echo "no result (touch command)"`
cat <(crontab -l) <(echo "30 4,12 * * 7 touch ./test.txt") | crontab - # 새로운 내용을 하단에 추가
echo `crontab -l | grep touch`
기존 테이블에 존재하는 내용을 표준 입력으로 불러온 후 새로운 예약을 append 하는 방식으로 구성하였습니다.
등록 여부를 확인하기 위해 명령어 전 후로 확인 작업을 추가적으로 진행하였습니다. ( ||를 이용해 검색한 내용이 없을시 예외 메시지 출력 )
3. 정수인자 2개를 받아 인자 개수 검증 후 4칙연산별 함수를 구현하여 결과값을 모두 출력하시오.
#!/bin/bash
num1=$1
num2=$2
add=`expr $num1 + $num2`
echo -n '덧셈 : '
echo "$num1+$num2=$add"
sub=`expr $num1 - $num2`
echo -n '뺄셈 : '
echo "$num1-$num2=$sub"
mul=`expr $num1 \* $num2`
echo -n '곱셈 : '
echo "$num1*$num2=$mul"
div=`expr $num1 / $num2`
echo -n '나눗셈 : '
echo "$num1/$num2=$div"
4. 2초마다 현재시간을 출력하는 스크립트를 작성하시오.
#!/bin/bash
while true
do
echo `date`
sleep 2s
done
5. 한번도 로그인한 적 없는 사용자를 삭제하는 명령어를 문자열로 출력하시오.
#!/bin/bash
command=`grep 'Never logged' lastlog | awk '{print $1}'`
for user in $command
do
echo "userdel -r $user"
done
6. 로그인한 적 없는 사용자를 제외하고 년 월 일 시간 사용자계정 순서로 출력하시오.
#!/bin/bash
awk '!/Never/ {print $9, $5, $6, $7, $1}' lastlog
7. ntp와 firenwo user 라인사이에 'end of system user' 라인을 삽입하시오.
#!/bin/bash
sed '/ntp/a end of system user' lastlog
8. 09:59:57부터 10:21:45까지의 라인만 출력하시오.
#!/bin/bash
awk '$3 >= "09:59:57" && $3 <= "10:21:45" {print $line}' checkpassword
9. 121.156.xxx.xxx를 pop3.xxx.co.kr 로, 14.36.xxx.xxx는 office.ip.xxx.kr로 치환하여 출력하시오.
#!/bin/bash
sed -e 's/121.156.xxx.xxx/pop3.xxx.co.kr/g' -e 's/14.36.xxx.xxx/office.xxx.kr/g' checkpassword
10. root@test.xxx.co.kr에서 수신된 메일의 수를 출력하시오.
#!/bin/bash
grep "root@test.xxx.co.kr" maillog | wc -l
11. 시간별 총 용량을 구해서 출력하시오. (bytes)
#!/bin/bash
grep bytes maillog | awk '{print $3, $11}' | sed 's/:[0-5][0-9]:[0-5][0-9]//g' | awk '{x[$1]+=$2} END {for (i in x) print i"시 ", x[i]}' | sort
# bytes 열만 필터 -> 시간과 용량 필터 -> sed를 이용해 시간만 두고 분초는 제거 -> 시간별 합계를 구함 -> 정렬
12. ;로된 주석라인과 공백라인을 제외한 라인 출력하시오.
#!/bin/bash
egrep -v '^[[:space:]]*(;.*)?$' conf
# 다른 방법
#grep -v '^[[:space:]]' conf | grep -v '^;'
13. ps 명령어를 이용하여 pid 값이 낮은순에서 높은순으로 정렬하여 출력하시오.
#!/bin/bash
ps -ef --sort=+pid
14. 접근을 한 국가별 카운트와 국가명을 출력하시오.
#!/bin/bash
ip=`awk '{print $6}' nginx`
touch country
for i in $ip
do
geoiplookup $i >> country # geoiplookup 을 이용하여 국가를 알아낸 후 파일에 쓰기
done
cat country | sort | uniq -c # 중복을 제거, 카운트 후 결과값 출력
rm country # 데이터가 누적되는 것 방지
15. 3번 이상 접근한 국가별 카운트와 국가명을 출력하시오.
#!/bin/bash
ip=`awk '{print $6}' nginx`
touch country
for i in $ip
do
geoiplookup $i >> country # geoiplookup 을 이용하여 국가를 알아낸 후 파일에 쓰기
done
cat country | sort | uniq -c | awk '{if ($1>=3) print $0 }' # 중복을 제거, 카운트 후 결과값 출력
rm country
16. 1M의 용량을 가진 파일부터 10M 까지의 총 10개 파일을 생성하시오. (1M씩 증가함)
#!/bin/bash
for var in {1..10} # 1~10 반복문
do
dd if=/dev/zero of=dummy_$var bs=1M count=$var # dd 명령어로 더미파일 생성.
done
17. 16번에서 생성한 파일 중 5M 이상의 파일의 생성시간을 2017년 12월 31일로 변경하시오.
#!/bin/bash
find dummy_* -size +5M -exec touch -t 201712310000 {} \;
18. 17번에서 만든 파일 중 2017년 12월 31일 이후에 만들어진 파일을 찾아 해당파일명.new로 변경하시오.
#!/bin/bash
touch -t 201712310000 ./no_18 # touch 명령어로 필터날짜 파일 생성
list=`find ./dummy_* -newer no_18` # 필터용 파일과 -newer 옵션을 이용
echo $list # 해당하는 파일명들 출력
for i in $list
do
mv $i $i.new # 확장자명 변경
done
19. test.c 파일을 작성 후 컴파일하여 result.exe 파일을 생성하고, 출력값을 test.txt로 저장하시오.
gcc test.c -o result.exe # gcc로 컴파일
./result.exe > test.txt # 실행 후 결과값을 test.txt에 저장
20. 121.156.xxx.xxx 서번의 오픈된 포트를 확인 후 해당 포트로 통신이 가능한지 모니터링하는 스크립트를 작성하시오.
#!/bin/bash
port=`nmap -sT 121.156.xxx.xxx | grep /tcp |awk -F '/' '{print $1}'` # nmap 과 awk 명령어를 이용한 결과를 변수에 저장한다.
# -sT : connect() 함수를 사용해 모든 포트에대해 스캔하는 방식.
for i in $port
do
nc -zv 121.156.xxx.xxx $i # 해당 아이피에 포트번호를 값으로하여 통신이 가능한지 확인한다.
# -z : conneciton을 위한 최소한의 데이터만 전달
# -v : 더 많은 정보를 얻을 수 있다.
done
'🌅 리눅스 > 명령어 모음' 카테고리의 다른 글
chown과 chmod를 하위 폴더와 하위 파일들에 적용하기 (0) | 2021.11.25 |
---|---|
rm 명령어 (0) | 2021.10.18 |
set number [vi 라인번호 표시] (0) | 2021.08.14 |
실무에서 바로 사용하는 리눅스 명령어(2) (0) | 2021.08.09 |
실무에서 바로 사용하는 리눅스 명령어(1) (0) | 2021.08.09 |