Remark : shell 의 종류 및 추가

쉽게 표현하면 윈도의 command.com(시작-실행-cmd)이 하는 역할처럼 login 이후부터 사용자가 입력하는 명령어를 기계어로 변역하여
커널에 전달하는 역할을 하는 명령어 해석기를 말한다. Shell이란 한마디로 사용자와 운영체제 사이를 Interface시키는 하나의 유틸리티
프로그램이다. 또한 쉘은 사용자가 입력한 명령 라인을 읽어들여 해석하고 리눅스 시스템을 통해서 명령 라인이 실행되게 하는 Command
Interpreter이다. Kernel 과 직접적으로 연결되어 있으며 해석한 결과를 커널로 보낸다. 다시 말해 사용자와 커널과의 대화라고도 할 수
있으며 다른 프로그램으로 넘겨주도록 하고 커널로 보내기도 한다.
Shell의 종류
bash ( Bourne-Again Shell )
프롬프트 : #
실행파일은 /bin/bash
Bourne again shell은 최초로 개발된 쉘인 Bourne shell의 변종이라 할 수 있습니다.
리눅스에서 가장 많이 사용되는 IEEE POSIX 호환이며 Borune shell과 호환되는 쉘로서
GNU 프로젝트에 의해 만들어지고 배포되고 있습니다. 명령행 편집 기능을 제공합니다
리눅스 Bash에는 매우 다양한 명령어가 있습니다. 각 명령어는 특정 작업이나 목적을 위해 설계되었으며, 아래와 같이 여러 범주로 나눌 수 있습니다.
1. 파일 및 디렉터리 관리
- ls: 파일 및 디렉터리 목록 보기
- cd: 디렉터리 이동
- cp, mv, rm: 파일 복사, 이동, 삭제
- mkdir, rmdir: 디렉터리 생성 및 삭제
2. 텍스트 처리 및 편집
- cat, less, more: 파일 내용 확인
- grep: 특정 문자열 검색
- sed, awk: 텍스트 스트림 편집 및 데이터 처리
3. 시스템 모니터링 및 관리
- ps, top, htop: 프로세스 확인 및 관리
- df, du: 디스크 공간 확인
- free: 메모리 사용량 확인
4. 네트워크 관련 명령어
- ping, traceroute: 네트워크 연결 및 경로 확인
- ifconfig, ip: 네트워크 인터페이스 설정 및 확인
- curl, wget: 데이터 다운로드 및 웹 요청
5. 파일 압축 및 압축 해제
- tar, gzip, bzip2: 파일 압축 및 압축 해제
6. 사용자 및 권한 관리
- chmod, chown: 파일 및 디렉터리 권한 및 소유자 변경
- passwd: 사용자 비밀번호 변경
7. 기타 유용한 명령어
- man: 명령어 매뉴얼 확인
- history: 사용한 명령어 이력 확인
- alias: 명령어 별칭 설정
- export: 환경 변수 설정
sh ( Bourne Shell )
프롬프트 : $
본 쉘 보다는 개발된 C쉘이나 콘 쉘과 기능적인 면을 비교해 보면 본 쉘에 미흡한 점이 있다. 그 중 가장 큰 단점은 상호 대화형(Interactive)
방식을 취하고 있지 않다는 점이다. 이러한 상호 대화형 방식을 사용하고자 한다면 쉘을 바꿔서 작업하는 것이 좋을 것이다.
– Steven Bourne의 Bourne Shell, sh
– 쉘 명령 대본을 작성하는데 이용되는 쉘
– 강력한 명령 프로그래밍 언어 기능을 갖는 쉘
– 가장 오래 동안 모든 유닉스 시스템의 표준 구성 요소
h 명령어는 주로 전통적인 Bourne shell을 의미하며, Unix 계열 운영체제에서 기본적으로 제공되는 쉘입니다. 주요 특징은 다음과 같습니다.
- 역사와 기원:
sh는 1970년대 초에 개발된 초기 셸로, 이후 다양한 셸(Bash, Ksh 등)의 기반이 되었습니다. - 기능:
쉘 스크립트를 실행하거나 단순 명령어들을 해석하여 실행하는 역할을 합니다. 많은 시스템에서 /bin/sh는 기본 쉘 스크립트 실행 환경으로 사용됩니다. - 호환성:
현대의 리눅스 시스템에서는 /bin/sh가 Bash나 Dash와 같은 다른 셸에 대한 심볼릭 링크로 설정되어 있을 수 있습니다. 이는 시스템의 효율성과 호환성을 위해 결정되는 경우가 많습니다.
따라서, sh 명령어는 기본적인 쉘 인터프리터로서, 스크립트 작성과 간단한 명령어 실행에 널리 활용됩니다.
csh ( C 프로그램 스타일의 Shell )
프롬프트 : %
버클리 캘리포니아 대학에서 개발된 프로그래머들에게 적합한 shell입니다. ( csh는 C쉘이며 sh는 본 쉘이다 )
대화형 사용법에서는 Bourne shell과 대부분 호환되지만 전혀 다른 프로그래밍 인터페이스를 가지고 있고, 히스토리 대체라는 복잡한
기능으로 대신하고 있지만 명령행 편집 기능은 제공하지 않습니다.
– Bill Joy의 C Shell, csh
– C언어와 유사한 언어를 사용
– 상호 대화형 방식으로 구성
csh는 C Shell의 약자로, Unix 계열 운영체제에서 사용되는 쉘 중 하나입니다. C 언어와 유사한 문법을 채택하여, C 언어에 익숙한 사용자에게 친숙한 구문을 제공합니다.
주요 특징:
- C 스타일 문법:
조건문, 반복문 등에서 C 언어와 유사한 구문을 사용하여 스크립트를 작성할 수 있습니다. - 인터랙티브 기능:
명령어 히스토리(history), 별칭(alias) 등의 기능을 제공하여, 명령어 입력 시 편리함을 더합니다. - 스크립팅 지원:
csh 역시 스크립트를 작성하여 반복적인 작업을 자동화할 수 있으나, 최근에는 Bash나 Zsh와 같은 쉘이 더 널리 사용되고 있습니다.
이처럼 csh는 특정 상황이나 환경에서 여전히 유용할 수 있지만, 현대 리눅스 시스템에서는 주로 Bash나 다른 쉘들이 선호되고 있습니다.
ksh ( Korn Shell )
프롬프트 : $
일반적으로 유닉스에서 가장 많이 사용되고 있는 shell이며 Bourne shell에 처음으로 현대적
인 shell 기능(C shell로부터 차용한 것이다.)을 도입한 shell 입니다. Bourne shell과 호환
되고, 명령행 편집 기능을 제공합니다.
zsh
프롬프트 : %
Korn Shell과 매우 유사한 셸이지만 Korn Shell보다 더 많고 유용한 기능 등을 추가하여 개선시킨 것이다.
tc Shell
프롬프트 : >
코넬 대학에서 C Shell 수정본에 Korn Shell의 기능을 포함하여 개발된 셸이다. 95%의 C Shell과 5%의 새로운 기능이 추가되어 만들어졌다.
출처: https://unabated.tistory.com/entry/LinuxUnix쉘-Shell-의-정의와-종류?category=269885 [랄라라]
cat /etc/shells —- shells 보기
1 2 3 4 5 6 7 8 |
# cat /etc/shells /bin/sh – 본쉘 /bin/bash – Bourne Again shell /bin/tcsh – TC쉘 /bin/csh – C쉘 /bin/ksh – 콘쉘 |
1. nologin의 절대경로를 which 명령어로 찾는다.
1 2 3 4 5 |
# which nologin /usr/sbin/nologin |
2. chsh 명령어로 FTP만 접속을 허용할 계정의 쉘을 아래와 같이 /usr/sbin/nologin으로 변경을 한다.
1 2 3 |
sudo chsh -s /usr/sbin/nologin userID |
3. vi 명령어로 /etc/shells 파일을 열어 제일 아래 줄에 /usr/sbin/nologin을 추가한다.
1 2 3 4 5 6 7 8 9 10 11 12 |
# vi /etc/shells # /etc/shells: valid login shells /bin/sh /bin/dash /bin/bash /bin/rbash /usr/bin/rc /usr/sbin/nologin |
4. 설정이 완료되었으면 SSH와 FTP에 접속하여 FTP만 접속이 되는지 확인해 본다.
CentOS 등에서는 사용자에게 FTP등의 접속권한만 주고
ssh접속등 쉘의 권한은 주고 싶지 않을때 사용자의 쉘을 /usr/sbin/nologin 으로 고쳐주기만 하면 되었다.
1 2 3 4 5 6 7 8 9 |
sudo chsh -s /bin/false hsc02 // 잘못세팅 sudo chsh -s /usr/sbin/nologin hsc02 //맞는세팅 useradd -d /path/to/your/dir -s /usr/sbin/nologin ftpuser passwd ftpuser sudo chown -R ftpuser /var/www/helloworld sudo chmod -R 777 /var/www/helloworld |
쉘스크립트:
#!/bin/bash 스크립트에서 명령어 해석기가 bash 쉘 임을 미리 알려주는 것