출처: NHN 기술교육 - bash tutorial (조영일 이사님)
Unix Shell
- Kernel을 둘러싸고 있는 껍데기
- 사용자가 제어할 수 있는 명령행 해석기
- MS 윈도우즈로 치면 DOS 환경 또는 커맨드창
커서 이동
화면 제어
서버 접속 및 종료
- 접속
- ssh test.com
- rlogin -l 아이디 호스트명
- 종료
- 조회
기본 명령
- pwd
- id
- uname
- 현재 접속해있는 서버의 이름/ OS 정보를 확인하는 명령
- uname
- uname -a
- 비슷한 명령
- echo
- 문자열을 출력하는 명령
- echo -n “hello world”; echo “java coffee” // -n은 개행문자 제거
- ls
- 디렉토리와 파일의 목록을 출력하는 명령
- 윈도우즈 cmd의 dir
- ls -1
- ls -alFt // t는 시간의 역순으로 출력하는 옵션
Globbing & Wildcard
- Glob pattern
- 임의의 길이를 가지는 문자열 *
- 임의의 한 글자 ?
- 글자 집합 [abw-z]
파일 시스템
- File
- OS에서 데이터를 디스크와 같은 저장소에 저장해 둘 때의 단위 형태
- 넓은 의미에서는 일반 파일, 디렉토리와 각종 입출력 장치를 모두 파일로 간주
- Directory
- 파일을 담아두는 공간(폴더)
- 디렉토리 안에 디렉토리를 담을 수 있기 때문에 트리 구조
- 디렉토리 이동
- 사용자 홈 디렉토리
- 특정 사용자의 홈 디렉토리
History
- 조회
- 12번 명령 재실행
- 커맨드
- 바로 직전 명령 재실행
- 바로 직전 명령의 마지막 argument
- 직전 명령 편집
- echo “hello world”
- ^hello^java
파일 다루는 기본 명령
- touch
- 디렉토리 관련 명령
- cp
- cp test1.txt test2.txt
- cp -r mydir1 mydir2
- mv
- mv test1.txt test2.txt
- mv mydir1 mydir2
- rm
- rm -f test2.txt
- rm -rf mydir2
- file
- 파일의 종류를 판단하는 명령
- file 파일
- file /bin/gzip
변수
- 사용자 변수
- 보통 소문자로 명명
- x=”hello world”
- x=1
- 주의사항
- 값을 꺼내쓰기
- echo x
- echo $x
- echo ${x}
- echo “$x”
- Full Quotation
- single quote as literal
- echo ‘$x is noun’
- Partial Quotation
- double quote as variable substitution
- echo “$x is noun”
Evaluation
- 명령 실행 결과를 문자열 변수로 대입
- backquote(`) 또는 $()로 둘러싸기
- date_str=$(date +”%Y%m%d”)
- 명령 문자열을 실행하기
- eval 명령 문자열
- cmd=”ls -alF”
- eval $cmd
- Arithmetic
- a=13
- b=$((a % 3))
- i=$((2 ** 60))
- echo $RANDOM
Type (권장하지 않음)
- read-only
- integer
- declare -i n=3
- n=”hello”
- echo $n
- array
- declare -a arr=(one two three four five)
- arr=3
환경 변수
- 환경(environment)
- exporting
- sub-shell에서 상속받아 사용할 수 있도록 변수를 공개
- 사용자 변수를 환경 변수로 전환
- export나 declare -x로 지정
- 주요 환경 변수
- HOME
- PATH
- LANG
- LC_ALL
- TERM
- SHELL
- HOSTNAME
- LOGNAME / USER / USERNAME
- ID / UID
- EDITOR / VISUAL
- PS1 / PS2
- 개발자에게 유용한 환경 변수
- SHLVL
- PPID
- SECONDS
- FUNCNAME
- TMOUT
File Permisson
- vi test1.sh
- ls -al !$
- chmod 0644 !$
- ls -al !$
- chmod a+x test1.sh
- umask
- 파일에 부여되는 permission의 초기값에서 제외할 권한 지정
- umask 002
- touch test2.txt
- 소유자 변경하기
- chown 소유자아이디 파일 // root 계정만 실행 가능
제어문
- Boolean expression
-
-
| (( 0 && 1 )) && echo true |
|
echo false |
-
| (( 0 |
|
1 )) && echo true |
|
echo false |
- Comparison operator
- integer
- string
- < < = > > = == = != -z -n
- File Test
- -e
- -s
- -f / -d / -p / -L
- file, directory, pipe, symlink?
- -r / -w / -x / -u / -g / -k
- permission? (setuid, setgid, sticky)
- -nt / -ot
- if
- 주의사항
- -eq 연산자는 정수 연산자
- ==, = 연산자는 문자열 연산자
- 변수가 정의되지 않았거나 공백을 포함할 수 있으므로 quotation 필요
- x=”he llo”
- if [ “$x” == “he llo” ]; then echo $x; fi
- while
- 무한루프
- for
- switch-case
- break
- continue
입출력 리다이렉트
- 표준 입력(standard input) - 0번
- 표준 출력(standard output) - 1번
- 프로세스가 출력한 내용이 화면으로 나오는 통로
- 표준 에러(standard error) - 2번
- 프로세스에서 발생한 에러가 화면으로 나오는 통로
- input redirect
- output redirect
- ls /lkjflfjds > out.txt
- ls /lkjflfjds > out.txt 2> err.txt
- append
- ls /lasidfi > allresult.txt 2>&1
-
필터
- 프로세스의 출력을 다른 프로세스의 입력으로 전달
-
-
-
| cat test.txt |
sort |
uniq -c |
sort -n |
파일 내용 보기
- cat test.txt
- more test.txt
- 파일의 앞쪽 일부만 보기
- 파일의 뒤쪽 일부만 보기
- tail -5 test.txt
- tail -f /var/log/lastlog // 모니터링할 때 사용한다.
파일에서 문자열 찾기
- 찾기
- grep 문자열 파일
- grep “export” /etc/profile
- 잘라내서 쓰기
- cut -d 구분자 -f 필드번호 파일
-
| grep user /etc/passwd |
cut -d: -f1,3-4,7 |
Alias
- 별명
- alias
- alias grep=”egrep”
- alias diffs=”diff –ignore-all-space”
- alias l=”ssh test.com”
함수
- function과 subroutine을 구분하지 않음
- 변수는 기본적으로 전역
- 함수 내부에서만 사용하려면 local로 지정해야 함
- function test1() {
- local int_val=3
- str_val=”value of global variable”
- }
- test1
- echo $int_val
- echo $str_val
Script File
- shebang
- #!
- 어떤 인터프리터 프로그램을 사용할 것인가를 지정
- #!/bin/bash
- #!/usr/bin/env python
- #!/bin/awk -f
- 옵션을 붙여야 할 경우, env을 사용할 수 없음
- command-line arguments
- exit status
Job Control
- Foreground job
- 기본적으로는 프로그램은 foreground에서 실행됨
- 한 명령의 실행이 끝날 때까지 다음 명령은 기다려야 함
- Background job
- &을 붙여서 실행하면 background에서 실행됨
- 다음 명령을 바로 실행하거나 프롬포트가 뜸
사용자 설정
- Bourne shell
- BASH
- login shell
- non-login shell
자주 사용하는 명령
파일 경로 다루기
- 디렉토리 이름 구하기
- dirname /usr/local/share/doc/foo.txt
- 파일 이름 구하기
- basename /usr/local/share/doc/foo.txt
화면 청소하기
실행가능한 프로그램 확인
- which
- which lsof
- PATH 환경변수에 포함되어야 탐색 가능
로케일 관련 명령
- locale
- iconv
- iconv -f CP949 -t UTF-8 완성형파일 > UTF8파일
- iconv -l
정렬과 카운팅
- 정렬
- 인접한 행의 중복 제거
- 행 / 열 / 문자 수 세기
- 자주 쓰는 조합
-
| cut -d: -f7 /etc/passwd |
sort -u |
wc -l |
-
| sort |
uniq -c |
sort -n 조합은 많이 사용 |
파일 탐색
- find
- find 디렉토리 목록 -name 이름패턴 -type 파일 유형
- find /usr/lib64
입력을 개별 처리하기
- for 반복문은 공백이 포함된 입력을 처리하기 곤란함
- xargs를 이용하여 행 단위로 처리하기
- xargs 명령
- xargs -I % 명령 “%”
다른 사용자로 변경
- su
- 다른 사용자로 변경하기
- su user
- su -l usersu
- sudo
- rlogin -l usersu 호스트명
- sudo apps/httpd/bin/apachectl start
접속 패스워드 변경하기
원격 제어
파일 묶기
- 여러 파일을 하나로 묶거나 압축하기
- tar cvfz mypack.tar.gz src/
- bzip2 포맷은 z 대신 j 옵션 사용
프로세스 관련 명령
- 프로세스 목록 조회
- 프로세스 종료
- 프로세스 이름으로 프로세스ID 알아내기
시스템 관련 명령
- 시스템 자원 사원현황 조회
- 디렉토리의 크기 조회
- 디스크 전체 사용현황 조회
네트웍 관련 명령
- ifconfig => ip addr
- ping
- nslookup => getent hosts
매뉴얼 페이지
우리 회사용 특수 명령
- r
- search / searchall
- login / shell
- status
- ip
- copy / copyfrom / copyto
- alias
Leave a comment