Linux는 오픈소스 운영체제(OS)이며 리눅스 커널(Linux kernel)
을 기반으로 한 운영체제를 뜻한다. 누구나 소스 코드를 이용하고 결과물을 재배포할 수 있다.
리눅스라는 이름은 1991년 리누스 토발즈(Linux Tovalds)가 만든 리눅스 커널
에서 비롯됐으며 커널을 제외한 부분은 GNU 프로젝트에서 유틸리티와 라이브러리를 가져왔다고 한다. 그래서 GNU/Linux라고 부른다.
GNU는 자유 소프트웨어 재단에서 개발해 복사, 수정과 배포가 가능하게 내놓은 리눅스 운영체제 호환 프로그램을 뜻한다.
유닉스와 완벽하게 호환되는 소프트웨어 시스템을 만들자! 라는 목표를 갖고 리처드 스톨만은 GNU 프로젝트를 시작했다. 자유 소프트웨어 재단(FSF)을 설립했으며 GNU 공개 라이선스(GNU GPL) 규약을 만든다.
운영체제에 필요한 많은 프로그램이 만들어진다. ex) 라이브러리, 컴파일러, 유닉스 쉘...
But, 장치 드라이버, 데몬, 커널 등은 완성되지 않았고 리눅스 토발즈가 리눅스 커널
을 만들면서 비로소 리눅스의 탄생으로 이어졌다.
리눅스는 유닉스에서 파생된 운영체제이다. 그 만큼 서로 닮은 운영체제이지만 유닉스의 장점을 포함하면서도 새로운 여러 기능들이 개발되어 강력하고 뛰어난 운영체제로 자리잡았다.
UNIX / Linux 시스템은 대략 세 가지 수준으로 추상화 할 수 있다. 맨 아래 계층은 시스템 커널 (Kernel) 인 UNIX / Linux 운영 체제이고, 중간 계층은 명령 해석 계층 인 셸 계층이고, 상위 계층은 애플리케이션 계층이다.
코어 레이어
커널 계층은 UNIX / Linux 시스템의 핵심이자 기반으로, 하드웨어 플랫폼에 직접 연결되어 시스템의 다양한 리소스 (하드웨어 리소스 및 소프트웨어 리소스)를 제어 및 관리하고 프로세스의 운영을 효과적으로 구성하고 하드웨어의 기능을 확장한다. 리소스 활용 효율성을 개선하고 사용자에게 편리하고 효율적이며 안전하고 안정적인 애플리케이션 환경을 제공한다.
쉘 레이어
Shell 계층은 사용자와 직접 상호 작용하기위한 인터페이스이다. 사용자는 프롬프트에서 명령 줄을 입력 할 수 있으며 Shell은 이것을 해석하고 실행하여 해당 결과 또는 관련 정보를 출력한다. 따라서 Shell을 명령 인터프리터 라고도 한다. 시스템에서 제공하는 풍부한 명령을 사용하여 많은 작업을 빠르고 쉽게 수행 할 수 있다.
응용 계층
응용 프로그램 계층은 X Window 프로토콜을 기반으로하는 그래픽 환경을 제공한다. X Window 프로토콜은 시스템이 가져야하는 기능을 정의하지만 시스템이 프로토콜을 충족하고 X Association의 다른 사양을 충족 할 수 있으므로 X라고 할 수 있습니다.
리눅스와 유닉스는 공통점도 많지만 차이점도 존재한다.
터미널에 입력한 명령을 해석하고 관리하는 프로그램을 셸(shell) 이라고 한다.
출처: 버물리의 IT공부
whoami
- 로그인한 사용자 ID를 알려준다.
# whoami
root
passwd
- 로그인한 사용자 ID의 암호 변경한다.
pwd
, cd
, ls
, cat
head/tail
- head는 파일 시작부분, tail은 끝 부분을 보여준다.
# head test.txt
# tail test.txt
more
- 파일 보기 (화면이 넘어갈 경우, 화면이 넘어가기 전까지 보여준다.)
rm
- 파일 및 폴더 삭제
리다이렉션(redirection)
스트림의 흐름을 바꿔주는 것으로
>
또는<
을 사용한다.
Example
1. ls > files.txt
- fils.txt에 ls로 출력되는 결과가 저장된다.
2. head < files.txt
- files.txt의 앞 10 라인이 출력된다.
3. 기존 파일에 추가하는 방법은 >> 또는 << 를 사용한다.
- ls >> files.txt
- files.txt 파일 끝에 ls 출력 결과가 저장된다.
파이프(pipe)
두 프로세스 사이에서 한 프로세스의 출력 스트림이 또 다른 프로세스의 입력 스트림으로 사용될 때 쓰인다.
|
ls | grep files.txt
- ls 명령을 통한 출력 내용이 grep 명령ㅇ의 입력 스트림으로 들어간다.
- ls 명령으로 해당 디렉토리/파일 중에 files.txt가 있는지 출력
grep [-option] [pattern] [file name]
<option>
-i : 영문의 대소문자를 구별하지 않는다.
-v : pattern을 포함하지 않는 라인을 출력한다.
-n : 검색 결과의 각 행의 선두에 행 번호를 넣는다.
-l : 파일명만 출력한다.
-c : 패턴과 일치하는 라인의 개수만 출력한다.
-r : 하위 디렉토리까지 검색한다.
forground process
- 셸에서 해당 프로세스 실행을 명령한 후, 프로세스 수행 종료까지 사용자가 다른 입력을 하지 못한다.
background process
- 맨 뒤에 &
를 붙여줌으로서 사용자의 입력과 상관없이 프로세스 종료 시까지 실행된다.
kill
- 프로세스 중지 명령어
# kill -[option] pid
# kill -9 325
ps
- 프로세스 상태 확인
sudo
- root 계정으로 로그인 하지 않은 상태에서 root 권한이 필요한 명령을 실행할 수 있도록 한다.
셸 스크립트는 셸 커맨드가 들어 있는 실행 가능한 텍스트 파일이다. 다른 변수나 함수 혹은 반복문과 같이 프로그래밍에서 사용되는 컴포넌트들을 사용할 수 있고 순차적으로 실행된다.
가장 큰 장점은 자동화이다. 반복되는 작업을 자동화하기 위해 스크립트 형태로 미리 만들어 놓고 실행만 하도록 한다. 이렇게 하면 스케줄링을 돌려서 파일만 실행하도록 할수도 있고 스크립트의 내용을 몰라도 누구나 실행할 수 있다. 단순 반복 작업을 더욱 단순하게 하거나 자동화해 시스템 관리자의 수고를 덜 수 있다.