### 기본 셸 변경하기
chsh -l # /etc/shells 파일에 지정된 셸을 출력한다. (list)
chsh -s /bin/sh user1 # 바꾸려는 셸의 절대 경로를 지정해 로그인 셸을 바꾼다. (shell)
### 출력 명령
echo $SHELL # current shell 확인
printf $SHELL # current shell 확인
### 특수 문자 *,?,[]
ls -l h*d # h 로 시작하고 d 로 끝나는 모든 파일의 상세 정보 출력
ls dir? # dir뒤에 한 문자가 붙은 이름을 가진 디렉토리의 파일 목록 확인
ls [a-f]* # a-f 중 하나
### 특수 문자 ~ 와 -
cp *.txt ~/ch3 # .txt 로 끝나는 모든 파일을 홈 디렉토리 아래ch3 디렉토리로 복사
cd - # 이전 디렉토리 이동
### 특수문자 ; 과 |
date; cal; ls # 연속 실행
ls -l /etc | more # (파이프) 왼쪽 명령의 실행결과를 오른쪽 명령의 입력으로 전달
### 특수문자 ' ' ," ",``, \
echo $SHELL # 변수 내용 출력 (문자열을 묶지 않으면 “”에 묶인 것과 동일하게 작동)
echo '$SHELL' # 그대로 출력 (echo \$SHELL 와 동일한 결과)
echo "$SHELL" # 변수 내용 출력
echo "\$SHELL" # $ 무력화
echo `date` # date명령 수행(` `안에는 명령어가 들어가야함)
### 특수문자 >, <, >>
ls -al > test # > 명령 실행결과를 test 파일에 저장(기존내용 없앰)
ls -al >> test # >> 명령 실행결과를 test 파일 끝에 덧붙임
ls -al 2> test # 2> 오류 메세지를 test파일에 저장
ls hi 2>> test # 2>> 오류 메세지를 test파일의 끝에 덧붙임.
# 2>/dev/null(표준에러를 /dev/null로 redirection 한다 (에러메시지를 null로) 을 사용하면 원하지 않는
# 오류 메세지를 생략시킬수 있다.
cat test # cat 명령이 파일을 읽어서 출력하는 기능은 <를 생략한 것
cat < test # < 파일로부터 입력받음
# 출력 리다이렉션은 1> 기호로도 사용 가능하다.( 여기서 1은 출력을 담당하는 파일의 file descriptor )
# 입력 리다이렉션은 0< 기호로도 사용 가능하다.( 여기서 0은 입력을 담당하는 파일의 file descriptor )
# <, >, >>의 좌측 값을 설정하지 않으면 기본값이 사용된다.
# <의 좌측 기본값은 0, >와 >>의 좌측 기본값은 1이다.
# File descriptor : 쉽게 말하자면, 유닉스 기반 시스템에서 모든 것은 파일이다. 유닉스 기반 시스템에서 프로세스가 특정 파일에
# 접근할때 File descriptor 라는 개념을 사용한다.
## Wildcard: 파일/디렉토리를 선택할 때 이름의 패턴을 지정할 때 쓰임
?: 임의의 한 문자.
# ex) a?c: aac, abc, adc, …
*: 임의의 여러 문자(0개도 가능)
# ex) a*c: ac, aac, abbbbc, abdec, …
[ ]: 안의 문자 중 아무거나 하나 일치. -로 범위 설정이 가능하다. 주의: 쉼표로 구분하지 않는다. 쉼표가 들어가면 쉼표 문자를 매치한다
# ex1) a[123]b: a1b, a2b, a3b
# ex2) a[1,2]b: a1b, a2b, a,b, … (a,b라는 이름의 파일이 매치됨)
# ex3) a[0-3]b: a0b, a1b, a2b, a3b
# ex4) a[가-힣]b: a가b, a눅b, a릻b, …
# ex5) a[a-z0-9]b: aab, abb, acb, a0b, a1b, a2b, …
{ }: 안의 문자열 중 아무거나 하나 일치. 쉼표로 구분한다.
# ex) a{12,13}b: a12b, a13b
[! ]: [ ]의 반대. 안에 든 문자들은 매치하지 않는다.
# ex1) a[!a-z]b: a0b, a1b, …
# ex2) a[!a-z0-9]b: a가b, a,b, a.b, …
### 셸 변수와 환경 변수
set # shell 변수, 환경변수 확인
env # 환경 변수만 확인
AVAR=test; export AVAR # shell 변수를 환경변수로 지정
export AVAR
export AVAR=test
export -n AVAR # 환경변수를 shell 변수로 바꾸기
# SHELL 변수와 환경 변수는 입력값을 default로 문자열로 받아들임.
echo $AVAR # 변수 출력 (printf ”%s\n” $AVAR)
unset $AVAR # 변수 삭제
### 앨리어스
alias # 현재 alias로 지정되어 있는 것들을 보여줌
alias A명령어=‘B명령어’ # 별칭 지정 명령어 - ‘B명령어’ 를 A명령어로 호출가능함.
alias ls=’ls -iF’ # ’ls -iF’를 ls로 명령어를 교체
alias -p # 현재 설정된 alias 목록 출력
unalias ls # 교체한 명령어 ls 해제
alias home=’cd;pwd;ls’ # ’cd;pwd;ls’를 home로 명령어를 교체
alias home
unalias home # 교체한 명령어 home 해제
### 히스토리
history # 입력한 명령어 history가 모두 출력
history -w # 명령어 버퍼의 내용을 ~/.bash_history에 저장
history -c # 명령어 버퍼의 내용을 삭제
history -r # ~/.bash_history의 내용을 명령어 버퍼로 복사
!! # 마지막 명령 반복
!3 # 3번째 명령 실행(history 내역에서)
!-3 # 현재 명령에서 뒤로 3번째 명령 수행
!ech # ech로 시작하는 명령어 중 가장 최근 명령어 실행
gcc -o aa main.c # main.c의 목적 파일을 aa라는 이름으로 생성
^aa^bb # 마지막 명령의 aa를 bb로 대체하여 다시 실행
set -o vi # 명령어 편집기로 vi 사용 설정
- [ESC] + v # 명령어를 vi editor로 수정할 수있음.
# :wq 로 저장 후 vi editor를 벗어 날 때 vi로 편집한 명령어가 수행됨.
# 명령어가 매우 길때 방향 키를 이용하여 수정하기 힘들때 vi의 편집기능으로 명령어를 수정하는 것이 매우 효율적이다.
# 만약 매번 터미널에서 set -o vi 명령을 입력하는 것이 귀찮다면,
# .bash_profile에 set -o vi 를 입력 후 source 명령으로 실행한다.
### 프롬프트
echo $PS1 # PS1(프롬프트의 값)을 출력
PS1=’Unix ] ‘ # 프롬프트를 Unix]로 대체
PS1=“[$LOGNAME] “ # 프롬프트를 [사용자]로 바꿈
PS1=“$PWD [\!] “
PS1=“`uname –n` \! $ “
\u # 현재 사용자 이름 ($LOGNAME 과 동일)
\h # 호스트 이름 (`uname –n` 명령과 동일)
\w # 현재 작업 디렉토리 full path 표시 (홈디렉토리는 ~로 표시)
\W # 현재 작업 디렉토리만 표시
\t # 24시간 형식으로 나타낸 시각(HH:MM:SS)
\A # 24시간 형식으로 나타낸 시각(HH:MM)
\e # ASCII 이스케이프 문자. 터미널 창에 고급 옵션을 전달
\[ # 출력하지 않을 문자열의 시작 표시, 컬러표시
\] # 출력하지 않을 문자열의 끝 표시, 컬러표시
\! # 히스토리 번호
export PS1='\[\e[35;2m\][\u@\h \W]\$ \[\e[0;0m\]'
$ chsh –s dash user1
정답 : 4
정답 : 1
정답 : ls -la [0-9]*
정답 : /etc/passwd
$ ls /tmp >> a.txt
정답 : 4
정답 : ls -la > ls.out 2> ls.err
정답 : env | grep SHELL
정답 : !cp
정답 : alias s='ls -la'