목차
1) 쉘이란?
: 쉘이란? / 쉘의 종류
2) 쉘 메타문자 사용
: 경로 이름 대체문자 / 파일 이름 대체 문자 / 인용부호 메타 문자 / 방향재지정 메타문자
3) 사용자 초기화 파일
: 사용자 초기화 파일의 종류 / 환경 변수
4) 따라學IT
: 다른 종류의 쉘 사용해보기 / 쉘 메타문자 사용해보기 / 사용자 초기화파일 설정해보기
사용자가 입력한 명령어를 커널에게 번역해주는 Shell
명령어 히스토리(history) : 이전에 쳤던 명령어를 기억해둠
자동완성 : Tab 키
명령행 편집 : 왼쪽 화살표로 이동해서 수정 못함
c쉘: 명령어 + C언어를 같이
ksh 콘쉘: 예전 유닉스
bash : 2014 bash쉘의 취약점 발견
echo $SHELL
: $ + 문자 -> 뒤에 있는 문자를 변수로 인식하여라.
ex) SHELL=/bin/bash
특정한 경로를 지정해둔 경로 이름 메타문자
~
: 현재 로그인 한 사용자의 홈 디렉토리
(사용자 정보를 저장하고 있는 /etc/passwd 파일의 6번째에 설정된 디렉토리)
ex) ~bsj : 사용자의 홈디렉토리로 이동
-
: 이전 작업 디렉토리 (윈도우에선 뒤로가기 느낌)
(CentOS의 Bash 쉘 기준 바로 이 전의 디렉토리만 기억)
ex) cd - , cd - 왔다갔다만 되는 것
ex) /etc/sysconfig/network-scripts/에서 /home/test_user 바로 가고 싶으면 cd -
*
: 하나 이상의 문자를 대체하는 문자, 일반적으로 전체를 의미rm -rf ./*
<- 모든 파일이나 디렉토리. 모든 파일의 이름을 다 인식할 수 있게 됨rm -rf test*
2) ?
: 하나의 문자만 대체
ex) roota , rootb, rootc, rootab, rootac 이 중 한 글자만 달려있는 것들만 지우고 싶다고 할 때 등
- `` ▷ (키보드 1 왼쪽에 있는 기호) 안에 있는 문자를 명령어로 인식하여 실행되게 한다.
''
: 작은 따옴표 안에 있는 메타문자를 일반 문자로 취급한다.- " " : 큰 따옴표 안에 있는
$
, `, \ 문자를 제외한 나머지 문자만 일반문자로 취급
- tip:
$
는 리눅스 쉘에서 변수를 사용할 때 사용하는 문자.
test abc 띄어쓰기 파일 있는데, 이런걸로 묶어줘야 한다는 것.
\*
: * 기능 동작. \*
기능 안하고 싶을 때는 이렇게.
역슬래시를 화면에 출력하고 싶으면? $는 기능 동작, \는 일반 문자로 인식하게 하고 싶으면?
\\
: 쉘 프로그래밍 할 때 많이 쓰임
- 방향 재지정 메타문자(<,>,|)
입력하는 것을 리눅스는 0으로 인식, 표준 출력(정상) : 1, 에러 메시지(권한x, 파일 없음 등) : 2번으로 인식한다. 각각의 애들을 원하는 다른 곳으로 보내줄 수 있다.
기본적으로 터미널 창에서 쉘 명령어를 입력하는데(표준 입력), 표준 출력/표준 에러 로 나타내는데
이것을 방향 재지정 메타문자를 사용해 다른 곳으로 보내줄 수 있다는 것이다.
<
: 표준 입력 재지정(잘 안쓴다)
>
: 표준 출력 및 표준 에러를 재지정, 일반적으로 명령어의 출력을 파일로 저장 또는 네트워크로 전송
파일에 저장할 때 : echo "test" > ./file
- 만약 file이라는 게 있었다라고 하면, 덮어씀, >> 으로 쓰면 이어서 쓰게 됨
- 이러한 파일로 다른 곳으로 보내라. test라는 내용이 저장되는 것일뿐.
정상적인 결과만 출력할 때 : find / -perm -4000 2 > /dev/null
- dev : device , null : 윈도우의 쓰레기통 같은 거라고 생각하면 된다.
에러 결과만 출력할 때 : find / -perm -4000 1 > /dev/null
정상적인 결과는 파일에 저장, 에러는 출력 X
: find / -perm -4000 1> ./setuid_file 2 > /dev/null
※ tip : >
을 한 번만 사용하면 파일의 내용을 덮어씀, >>
을 사용하면 기존의 파일 내용에 이어서 씀
★★★
3. | : 파이프 문자, [명령어1] | [명령어2] 처럼 사용하며, 명령어1의 결과를 명령어2의 입력으로 사용
echo ls -l : 문자 그대로 출력
echo ls -l
: 명령문 실행
ex) ls /etc | grep rc ls
명령어의 결과에서 특정 문자를 포함한 라인만 뽑아 볼 때
ls /etc
결과 중에서 yum이 포함된 내용만 출력할 때 ls /etc | grep yum
ls /etc
결과가 너무 길어서 화면에 다 안나와 끌어서 보고 싶을 때 ls /etc | more
grep root /etc/passwd
와cat /etc/passwd | grep root
가 같은 내용. 후자가 더 편하다.
- 앞 명령어를 화면에 결과로 나타나는데, 그 중에서 root만 뽑아서 봄.
이를 입력으로 재지정 시켜버림.
ls -al -> /etc 디렉토리 파일이 워낙 많아서 결과가 한 번에 쭉 나올 것임.
ls -al /etc | more
한 페이지씩 끊어서 볼 수 있다.
head -8 /etc/passwd | tail -1 : 마지막 하나만 뽑아서 8번째 줄만 나옴.
☆ 명령어와 명령어의 조합
적용되는 범위가 다른 사용자 초기화 파일
- 기본적으로 설정이 되어 있는 곳이 사용자 초기화 파일, 한 개만 있는 게 아님
- 가장 기본적인 것들만, 대표적인 것만.
/etc/profile
~/.profile
~/.bashrc
-2, 3번은 특정 사용자한테만 적용되는 설정 파일.
- 환경 변수, 쉘 프롬프트 모양(명령어 앞에 붙는 내용, 이것도 사실 환경변수임), 별명 기능(alias) , 쉘 옵션 정의 등 설정 가능 ,
- umask도 이 파일 안에 적용되어 있음
시스템 환경에 대한 정보를 저장하는 환경 변수
- 변수란? 변하는 값. 무언가의 저장 공간에 저장할 수 있다는 것.
환경 변수
란? 시스템 환경에 대한 설정을 저장하고 있는 변수
- 시스템의 환경을 저장해두는 값. 단순히 1, 2가 아니라 시스템의 환경.
HOME : 사용자의 홈 디렉토리
PATH
: 실행파일을 찾는 경로
- ex) Tomcat 서버 설치
LANG : 프로그램 사용 시 기본 지원되는 언어
SHELL : 로그인해서 사용하는 쉘
EDITOR : 기본 편집기의 이름
PS1
: 명령프롬프트 변수
- 프롬프트 모양을 나타내는 것. 모양을 바꿀 수 있음 [user@localhost ~]$
./파일명
<- 현재 디렉토리 (이 파일이 있는 곳에서)
명령어를 절대경로로 실행하지 않음. 이름으로 침.
ls, cd, mkdir 실행을 해야 하는데,
경로들을 일일이 외울 수 없으니, 환경변수에 등록된 경로에서 실행 파일들의 위치를 찾게 되는 것이다.
$, `, \ 세가지는 특수 문자로 인식하게 한다.
test 파일은 들어있지 않다. 큰 따옴표일 때 특수문자로 인식하여, ls 명령어가 실행이 되었다.
- 쉘 프로그래밍 할 때 유용하게 쓰인다. 윈도우에서는 배치 프로그래밍이라고 부른다.
<
: 표준 입력 재지정(잘 안나옴)
>
: 표준 출력 및 표준 에러를 재지정, 일반적으로 명령어의 출력 결과를 파일로 저장하거나, 네트워크로 전송 하여 파일에 저장할 때 : echo "test" > ./file
- 정상적인 결과만 출력할 때 : find / -perm -4000 2> /dev/null
- 에러 결과만 출력할 때 : find / -perm -4000 1> /dev/null
- 정상적인 결과는 파일에 저장하고 에러는 출력하지 않을 때 : find / -perm -4000 1> .setuid_file 2>
|
: 파이프문자, [명령어1] | [명령어2] 처럼 사용하며, 명령어1의 결과를 명령어 2의 입력으로 사용
ex) ls /etc/ | grep rc : ls 명령어의 결과에서 특정 문자를 포함한 라인만 뽑아볼 때
- ls /etc 결과 중에서 yum 이 포함된 내용만 출력할 때 : ls /etc | grep yum
- ls /etc 결과가 너무 길어서 화면에 다 안나와 끌어서 보고 싶을 때 ls /etc | more
cut -d":" -f1(몇 번째) passwd
: 열로 자름