셸?
여기서 알아야 될 것은 커널과 셸이다. 커널은 시스템 속에서 제어하는 역할을 하는 것이라고 생각하면 되는데 이것에 직접 접근하기는 어렵다. 따라서 셸이라는 것을 통해 사용자가 입력한 것을 커널로 전달할 수도 있고 커널의 결과를 사용자에게 전달할 수 도 있다. 즉 커널과 사용자 중간에서 통신매체로 생각하면 된다.
우분투의 server모드나 X윈도의 터미널 처럼 명령어를 입력하는 것이라고 보면 된다.
우분투에서 기본적으로 사용하는 셸은 bash(Bourne Again Shell)이다. Korn Shell(ksh)과 C Shell(csh)의 장점을 모은 것이라고 생각해도 된다,
bash는 다음과 같은 특징을 가진다.
alias: 단축키 기능 예) alias c=clear 하면 c만 눌러도 화면이 청소된다.
History 기능 : ↑ or ↓
연산기능
Job Control 기능 :터미널에서 한 번에 하나의 명령만 실행시킬 수 있는 것이 아니라 &같은 메타문자를 이용해 background job을 생성함으로 인해 멀티태스킹 가능하게 하는 것
자동 이름 완성 기능
프롬프트 제어기능
명령 편집 기능
셸 스크립트
리눅스의 셸 스크립트는 C언어와 유사한데 그 이유는 리눅스의 대부분은 C언어로 작성되었기 때문이다. 또한 일반프로그램과 마찬가지로 변수, 반복문, 제어문 등을 사용할 수 있다.
vi편집기, gedit, nano를 사용한다.
셸 스크립트의 작성방법은 다음과 같다.
nano bab.sh
nano창에 들어가서 수정을 해준다.
첫 줄은 bash셀을 시작하겠다는 뜻이고 두 번째, 세 번째 줄은 아래의 환경변수를 출력하겠다는 의미입니다.
exit 0은 성공을 반환하겠다는 의미다.
키고 나면 한 번에 실행할 수 있다. sh bab.sh로 말이다.
두 번째 방법은./bab.sh 이런 방식으로 사용하는 것이다.
ls 명령어로 확인하여 보면 rw 읽고 쓰는 권한은 있는데 x실행권한이 없다. 따라서 실행을 바로 하면 권한이 없다고 나온다. 따라서 chmod +x bab.sh 혹은 chmod 700 bab.sh라고 명령해야 된다. 둘은 같은 의미이다.
그리고 나면 위의 sh로 명령한 명령문과 동일하게 출력되는 것을 알 수 있다.
이 명령어는 root권한으로 설정되어 있는데 보안상의 이유이다. 다른 곳에서도 사용하고 싶다면 아래와 같이 하면 된다.
root@server:~# cp bab.sh /usr/local/bin
#/usr/local/bin에 bab.sh를 복사해준다.
root@server:~# su - ubuntu
ubuntu@server:~$ bab.sh
-bash: /usr/local/bin/bab.sh: 허가 거부
ubuntu@server:~$ chmod 755 /usr/local/bin/bab.sh
chmod: '/usr/local/bin/bab.sh'의 권한 설정 중: 명령을 허용하지 않음
ubuntu@server:~$ exit
로그아웃
#우분투로 들어가서 실행했지만 권한이 허용이 안된다. 그 이유는 권한이 root에게 있기 때문이다.
#root로 돌아가서 다시 권한을 바꿔주고 다시 실행한다.
root@server:~# chmod 755 /usr/local/bin/bab.sh
root@server:~# su - ubuntu
ubuntu@server:~$ bab.sh
사용자의 언어: ko_KR.UTF-8
사용자의 작업디렉터리: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
환경변수
환경변수 | 설명 | 환경변수 | 설명 |
HOME | 현자 사용자의 홈 디렉터리 | PATH | 실행파일을 찾는 디렉터리 경로 |
LANG | 기본지원언어 | PWD | 사용자의 작업 디렉터리 |
TERM | 로그인 터미널 타입 | SHELL | 로그인해서 사용하는 셸 |
USER | 현재 사용자 이름 | DISPLAY | X디스플레이 이름 |
PS1 | 1차 명령 프롬프트 변수 | LINES | 현재 터미널 라인 수 |
BASH | bash 셸의 경로 | PS2 | 2차 명령 프롬프트(보통'>' |
HISTFILE | 히스토리 파일의 경로 | BASH_VERSION | bash버전 |
HOSTNAME | 호스트이름 | HISTSIZE | 히스토리 파일에 저장되는 개수 |
LOGNAME | 로그인이름 | USERNAME | 현재 사용자이름 |
메일을 보관하는 경로 | LS_COLORS | ls 명령의 확장자 색상 옵션 | |
COLUMN | 현재 터미널의 컬럼 수 | OS_TYPE | 운영체제 타입 |
다음표의 환경변수는 echo $환경변수 이름의 형식으로 확인할 수 있다.
echo를 했을 때 현재 디렉터리가 /root임을 알 수 있다. 이와 같은 형식으로 작성하면 된다.
이외에는 export 환경변수=값, printenv명령어를 사용하면 출력된다.
'Engineer > virtual machine' 카테고리의 다른 글
[리눅스] 우분투 ubuntu 조건문, 반복문 if, case, while, for (0) | 2023.07.30 |
---|---|
[리눅스] 우분투 ubuntu 셸 스크립트 - 변수 (0) | 2023.07.30 |
[리눅스]우분투 ubuntu 사용자별 공간 할당하기-쿼터 (0) | 2023.07.29 |
[리눅스]우분투 ubuntu LVM 실습하기 (0) | 2023.07.29 |
[리눅스]우분투 ubuntu server RAID 1+6 구현하기 (0) | 2023.07.29 |