현대 오토에버 SW 스쿨 - 클라우드/리눅스
[리눅스] - shell
yongyongMom
2024. 9. 3. 17:33
SMALL
- shell :: 사용자가 입력한 명령을 해석해 커널로 전달 || 커널의 처리 결과를 사용자에게 전달하는 역할을 수행하는 구성 요소입니다.
- Server의 텍스트 모드 나 GNOME 의 터미널을 이용해서 명령어를 입력하고 결과를 화면에 출력합니다.
shell 의 기능
- 명령어 해석기
- 프로그래밍
- 사용자 환경설정
종류
더보기
>> 본쉘 : 초창기의 shell로 현재는 사용되지 않습니다.
>> c shell
>> korn shell
>> bash : c shell 과 korn shell 의 장점을 혼합한 형태로 현재 리눅스의 기본 shell 입니다.
:: 외에도 tsch, dash, zsh 등이 있습니다.
bash shell
- alias 기능, history 기능, 명령어 자동완성 기능, 연산 기능, job control 제공
- bash 와 dash 쉘은 변경하더라도 비슷해서 알아보기 힘듦
- 리눅스 초창기에는 shell 이 bin 에 설치
-> 요즈음은 usr 의 bin 에 설치 - ---> 예전 사용자가 명령어를 사용할 때 문제가 발생하여 소프트링크 (바로가기) 를 만들어 내부적으로 저장 위치를 변경해줍니다.
따라서 whereis, which 명령어를 사용하는 경우 usr 의 bin 위치 정보(최신 저장 위치)가 나옵니다. - bash shell 은 프롬프트가 $ 이고 bash shell 은 유저이름과 호스트 이름이 같이 출력됩니다.
echo
- 변수나 문자열을 출력하는 명령어
- 형식 :: echo [-n] 문자열 또는 변수
- -n :: 출력하고 마자막에 줄 바꿈을 하지 않음
- shell 에서 변수는 앞에 $ 가 붙음
:: 네트워크에서 말하는 ping 의 echo 와 다른 개념
prinf
- c언어의 printf 와 동일하지만 % 로 시작하는 형식화된 서식을 사용하는것이 가능합니다.
:: 해당 명령을 내장하고 있는 쉘도 있고 없는 쉘도 있습니다. - 특수문자
>> 쉘에서는 사용자가 편리하게 명령을 입력하고 실행할 수 있도록 특수문자를 제공합니다.
>> 거의 모든 쉘에서 특수문자의 기능은 동일합니다.
>> 쉘은 명령을 확인해서 특수문자 있는지 확인 --> 특수문자를 해독하여 적절한 형태로 변경한 후 명령을 실행합니다.
:: * : 임의의 문자열을 의미하며 글자 수와 상관없이 매핑됩니다.
:: ? : 한글자를 의미
:: ls * : 현재 디렉토리의 내용을 출력하고 서브 디렉토리의 내용까지 모두 출력됩니다.
:: cp * 다른 디렉토리 : 현재 디렉토리의 모든 파일을 다른 디렉토리에 복사
:: [] : 여러 개 중 한 글자 선택할 때 사용하며 -를 이용해서 범위 설정이 가능합니다.
>> 숫자 0 -> 48 || 숫자 9 -> 57 :: 0-9 : 숫자
>> 대문자 A -> 65 || 대문자 Z -> 90 :: A-Z : 대문자
>> 소문자 a -> 97 || 소문자 z -> 122 :: a-z : 소문자
>> 가-힣 : 한글
>> a-zA-Z : 영문자
tpdms@tpdms:~$ mkdir sample -- sample 디렉토리 생성
tpdms@tpdms:~$ cd sample -- sample 디렉토리로 이동
tpdms@tpdms:~/sample$ ls
tpdms@tpdms:~/sample$ touch a.txt -- a.txt 파일 생성
tpdms@tpdms:~/sample$ touch b.txt -- b.txt 파일 생성
tpdms@tpdms:~/sample$ ls
tpdms@tpdms:~/sample$ cp * /tmp -- sample 디렉토리 내용을 tmp 디렉토리에 복사
tpdms@tpdms:~/sample$ cd ./
tpdms@tpdms:~/sample$ ls /tmp
tpdms@tpdms:~/sample$ touch aa.txt -- aa.txt 파일 생성
tpdms@tpdms:~/sample$ touch aaa.txt -- aaa.txt 파일 생성
tpdms@tpdms:~/sample$ touch aaaa.txt -- aaaa.txt 파일 생성
tpdms@tpdms:~/sample$ cp a?.txt /tmp -- aa.txt 파일만 복사됨
- ~ : 사용자의 홈 디렉토리
- - : 현재 디렉토리로 이동하기 전의 디렉토리
- `` : (백틱) : 문자열에서 백틱으로 명령을 묶으면 명령을 수행해서 문자열 안에 포함시켜 명령의 결과를 다른 것들과 같이 출력을 원하는 경우 사용합니다.
ex) echo "Today is `data`" - ; : 여러 개의 명령을 사용할 때 순서대로 실행하고자 하는 경우 사용합니다.
- | : 앞 명령의 결과를 뒤 명령에 전달해서 수행합니다.
- more : 루트 디렉토리의 모든 내용을 출력해서 페이지 단위로 확인하고 페이지 단위로 텍스트를 출력하는 명령입니다.
- ls -al | more :: | 앞 쪽의 명령의 실행 결과를 뒤에 전달
- \ : 특수문자의 기능을 무력화시킵니다. 제목을 설정하거나 특수문자가 들어간 이름의 파일을 찾는 경우 사용됩니다.
- ''(작은 따옴표) : 특수문자를 포함하는 데이터를 묶으면 모든 특수문자의 기능이 무시됩니다.
하지만 ""(큰 따옴표) 는 $,₩,${}, {} 를 제외한 특수문자의 기능이 무시됩니다.
입출력 리다이렉션
- 표준 입력 : 일반적으로 키보드 입력
- 표준 출력 : 일반적으로 모니터를 의미
- 표준 입출력 장치를 검사해서 과거에는 키보드가 없으면 부팅되지 않았습니다.
- 리다이렉션 : 입출력의 방향을 변경하는 것으로 일반적으로는 파일로 변경하는 것을 의미합니다.
- > : 출력을 뒤에 있는 장치로 변경하는 것을 의미하는데 리눅스는 하드웨어도 파일로 간주합니다.
출력하는 장치를 매번 새로 만들어냅니다. - >> : > 와 동일하지만 출력하는 장치 뒤에 추가를 하는 점이 다릅니다.
- 대부분의 경우 출력의 결과를 특정 파일에 기록하기 위해 사용합니다.
- 에러 출력 리다이렉션 : 명령 2 출력 리다이렉션을 이용하면 표준 오류 메시지를 파일에 저장합니다.
- 입력 리다이렉션 : 명령어에 파일의 내용을 추가하고자 할 떄 사용 가능 & 자주 사용하는 옵션이나 인자가 있을 때 활용 가능
사용법은 < 파일경로 입니다.
쉘 변수
종류
- 지역 변수 : 현재 쉘에만 사용 가능한 변수
- 환경 변수 : 시스템 전체에서 사용 가능한 변수
변수 확인
- set : 모든 변수와 함수를 조회
- env : 환경 변수만 조회
- echo $변수 : 변수의 값을 조회
변수 생성 및 수정
- 변수명 = 값
:: 있으면 수정하고 없으면 생성됩니다. - 지역변수 -> 환경변수 : export 변수명 = 값
- 환경변수 -> 지역변수 : export -n 변수명
- unset 변수 명 :: 변수 삭제
- 변수명=$변수명:내용 :: 변수 내용 추가
- 환경변수 전역에 등록 : 사용자의 홈 디렉토리의 .bashrc 파일에 환경 변수를 등록
- -> 재부팅 시 리눅스에서는 (패키지 관리자를 이용하지 않고) 프로그램을 설치하는데
-> 압축된 파일로 제공되는 프로그램의 경우 sh 파일을 찾아서 실행
-> /a/b/... 를 찾아서 실행해야하므로 해당 경로를 찾아서 PATH 로 설정하고 프로그램 이름만 입력하여 실행합니다. - 사용자 홈 디렉토리의 .bashrc :: 사용자가 로그인 할 때 읽어서 -> 설정 하는 파일
alias 나 export 를 이용해서 환경변수를 만들면 로그인할 때마다 적용됩니다.
vi ~/.bashrc
export NAME=adam
로그아웃
로그인
- 일반 환경변수를 만들면 다른 곳에서 사용할 수 있도록 만들어지지만 재부팅을 하면 내용이 소멸
-> 유지시키기 위해.bashrc 파일에 등록을 해야합니다.
쉘변수 사용
- 내장 명령어는 쉘 변수를 사용할 수 있지만 외부 명령어는 쉘 변수를 사용할 수 없습니다.
- typd 명령어 를 입력하여 내장/외부 명령어를 확인할수 있습니다.
- 리눅스 버전에 따라 외부 명령어에서 쉘 변수를 사용가능하도록 해주는 경우도 있습니다.
- 제공하는 환경변수
:: PATH : 실행 파일 (명령어)를 찾는 위치
:: PWD : 현재 작업 디렉토리의 절대 경로로 환경변수이면서 명령어이기도 합니다.
환경 설정 - 시스템 환경 설정 파일
- /etc 디렉토리에 존재하는 파일
:: /etc/profile : 모든 쉘에 공통적으로 적용되는 환경 설정 파일
:: /etc/bahs.bashrc : 공통으로 적용되는 bashrc 파일
:: /etc/profile.d/*.sh : 언어나 명령별로 각각 필요한 환경을 설정
- 유저별 환경 설정 파일
:: 유저의 홈디렉토리에 존재(~, /home/계정)
:: ~/.profile : .bashrc 가 있는 경우에만 수행되는데 사용자가 정의한 환경 설정 파일
:: ~/.bashrc : 히스토리 크기나 환경변수 또는 별명이나 함수를 작성
:: ~/.bash_logout : 로그아웃 할 때 수행할 내용
:: ~/.bash_aliases : 별명 설정
- 파일을 읽는 순서
:: 시스템이 부팅될 때 시스템 환경 설정 파일 -> 사용자 로그인 -> 사용자의 환경 설정 파일 -> 수정
:: 로그인 후 환경 설정을 변경하면 변경된 환경설정이 반영됩니다.
>> 적용
:: 시스템 재부팅 or 로그인을 다시진행
:: source 환경설정파일경로
:: exit 후 다시 로그인
vi ~/.bash_aliases
alias h=history
alias c=clear
esc + :wq
source ~/.bash_aliases
- set -o noclobber : 기존의 파일이 존재하는 경우 덮어쓰지 않도록 설정
- set +o noclobber : 덮어쓰기 해제
반응형
LIST