쉘(Shell)이란? 쉘은 운영체제 상에서 다양한 운영 체제 기능과 서비스를 구현하는 인터페이스를 제공하는 프로그램이다.(참고1) Shell은 껍데기를 뜻하는 영단어인데, 사용자와 운영체제의 내부(커널) 사이의 인터페이스를 감싸는 층이 쉘이기 때문에 그러한 이름이 붙게 되었다. 일반적으로 명령 줄 인터페이스(CLI) 방식과 그래픽 사용자 인터페이스(GUI) 두 가지 종류로 분류된다. 쉘은 사용자의 명령어를 읽어 해석하는 명령어 인터프리터(command interpreter)라고 할 수 있다. 터미널과 쉘의 차이 리눅스에서 터미널은 사용자로부터 명령 텍스트를 입력받고 결과를 출력하는 프로그램이다. 쉘은 터미널로부터 명령을 받아 컴퓨터에게 명령을 전달하는 프로그램이다. 터미널이 쉘을 감싸고 있는 Wrappe..
Makefile이란? make 프로그램이란? 리눅스에서 Makefile은 소스 파일들을 쉽게 빌드할 수 있도록 돕는 make 프로그램의 설정 파일이다. [그림 1]과 같이 여러 개의 헤더 파일과 소스 파일을 빌드한다고 하자. 각 파일의 내용은 아래와 같다. hello.h void hello(); hello.c #include void hello() { printf("hello "); } world.h void world(); world.c #include void world() { printf("world\n"); } main.c #include "hello.h" #include "world.h" int main() { hello(); world(); return 0; } 이 헤더 파일과 소스 파일들을 ..
vi 편집기(vi editor)란? vi 편집기는 리눅스에서 기본으로 제공하는 문서 편집기이다. 다양한 명령어와 단축키를 지원하기 때문에 제대로 익힌다면 문서 작업의 효율성을 높일 수 있다. vi 편집기를 업그레이드 한 vim(vi improved) 에디터가 있는데, 근래 리눅스에서는 기본으로 vim 에디터를 적용하고 있다. 따라서 vi 명령어를 실행하면 기본적으로 vim 에디터를 실행하므로 vi와 vim 편집기를 구분하지 않고 vi라고 부르겠다. vi 초기 설정하기 vi는 편리한 도구이지만 그대로 사용하기에는 불편한 부분이 많다. 따라서 초기설정을 해주는 게 좋다. vi의 설정은 홈디렉토리(~)에서 .vimrc 파일을 변경하여 진행할 수 있다. 하지만 처음에는 .vimrc 라는 파일이 없기 때문에 만들..
GCC란? GCC는 GNU 컴파일러 모음(GNU Compiler Collection)이다. GNU는 운영 체제의 하나이자 컴퓨터 소프트웨어의 모음집이다.(참고1) 현재 대부분 GNU와 LINUX를 결합하여 사용하기 때문에 이 조합을 짧게 "Linux"라고 부르는 경우가 많다. 즉, GCC는 리눅스에서 사용하는 컴파일러 모음이라고 생각해도 무방하겠다. GCC는 한때 C언어만을 지원했지만 현재는 C++, JAVA, 포트란 등 다양한 언어를 컴파일 할 수 있도록 지원한다. 컴파일러에 대해 잘 모른다면 다음을 참고하자. 참고) [프로그래밍 언어론] 컴파일러와 인터프리터의 차이점 컴파일러(Compiler)란? 컴파일러는 특정 프로그래밍 언어로 쓰여 있는 문서를 다른 프로그래밍 언어로 옮기는 언어 번역 프로그램을 ..
tar 명령어와 gz 파일 리눅스에서 tar 명령어를 사용하면 파일들을 아카이브(archive)로 압축할 수 있다. 하지만 정확히 말하면 압축(compress)하는 것이라기 보단 여러 파일을 하나의 파일(아카이브)로 묶는 것이다. 이렇게 tar 명령어로 파일들을 묶으면 기존 파일들의 속성, 심볼릭 링크, 디렉토리 구조 등이 변경되지 않고 유지된다. 따라서 파일의 크기도 줄어들지 않고 그대로 반영된다. 반면 gz파일은 파일들을 압축하기 때문에 파일의 용량이 줄어든다. gz 파일을 gzip 명령어를 이용해 압축할 수도 있고 tar 명령어에서 -z 옵션을 이용해 압축할 수도 있다. 리눅스를 사용하다보면 ~.tar.gz 와 같은 확장자의 파일을 볼 수 있다. 이것은 tar 명령어로 파일들을 묶고 gz 파일로 압..
touch 명령어 리눅스에서 touch 명령어를 사용하면 빈 파일을 생성하거나 파일의 여러 가지 시간을 수정할 수 있다. $ touch [옵션] [파일명] 위와 같이 사용할 수 있다. 만약 [파일명]이 존재하지 않는다면 용량이 0인 빈 파일을 생성한다. [파일명]이 존재한다면 파일의 시간을 수정한다. 이때 별도의 옵션을 설정하지 않으면 atime, mtime이 변경된다. 참고) 리눅스의 atime, ctime, mtime 설명 atime : 최종 접근 시간 (File Access Time)으로 파일에 마지막으로 접근한 시간을 뜻한다. ctime : 최종 변경 시간(File Change Time)으로 inode가 변경될 때(파일 권한 수정, 파일 소유자 변경, 하드 링크 생성 등 파일의 속성이 변할 때) ..
man 명령어 리눅스에서 man 명령어는 manual의 줄임말로 말 그대로 매뉴얼을 확인하는 명령어이다. 리눅스마스터 같은 리눅스 관련 자격증 시험을 볼 때 명령어의 자세한 사용법을 man 명령어로 확인할 수 있으니 미리 숙지해 두는 게 좋다. $ man [옵션] [섹션] [키워드] 기본적인 사용법은 위와 같다. 자주 사용하는 옵션 -k : apropos에 해당하는 매뉴얼의 내용을 출력. apropos란 완전히 일치하지 않아도 대략적으로 비슷한 단어를 뜻한다. 예를 들어 mount의 apropos는 amount, mounted, mounts 등이 있다. -f : 키워드와 완전히 일치하는 매뉴얼의 내용을 출력 -a : 매치되는 모든 매뉴얼 페이지를 출력 -s, -S : 특정 섹션 번호를 지정하여 출력 -w..
심볼릭 링크(symbolic link)란? 심볼릭 링크는 절대 경로 또는 상대 경로의 형태로 된 다른 파일이나 디렉터리에 대한 참조를 포함하고 있는 특별한 종류의 파일이다. -위키백과- 심볼릭 링크는 쉽게 말해 윈도우의 '바로가기'와 비슷한 역할을 한다고 볼 수 있다. 특정 파일 혹은 디렉토리를 가리키는 링크라고 봐도 무방하다. 즉 심볼릭 링크는 원본 파일을 가리키는 포인터와 같은 존재로, 심볼릭 링크로 파일을 수정해도 원본 파일이 수정되는 것을 확인할 수 있다. 심볼릭 링크 만들기 $ ln -s [원본 경로] [링크 경로] 심볼릭 링크는 위와 같이 만들 수 있다. hello.txt라는 파일의 심볼릭 링크로 link.txt라는 파일을 만들었다. 파일 목록을 보면 link.txt -> hello.txt의 ..
date 명령어 date 명령어를 사용하면 시스템 날짜 및 시간을 확인 할 수 있다. $ date [옵션] [+포맷] 기본적으로 위와 같이 사용할 수 있다. 옵션 없이 사용하면 기본적으로 locale을 기준으로 날짜가 출력된다. 예를 들어 locale이 한국이라면 한국 시간을 기준으로 출력된다. date 명령어는 포맷을 지정해 원하는 형식으로 날짜를 출력할 수 있다. 자주 사용하는 포맷을 정리하면 다음과 같다. %a : Sun, Mon와 같은 요일 약어 %A : Sunday와 같은 요일 전체 이름 %b : Jan, Feb 와 같은 달 약어 %B : January와 같은 달 전체 이름 %d : 일 %D: mm/dd/yy (달/일/년도) %F : yyyy-mm-dd %H : 시간(24시 기준) %l : 시간..
find 명령어 리눅스 find 명령어는 이름 그대로 무언가를 찾는 명령어이다. 주로 파일을 검색할 때 사용할 수 있다. $ find [경로] [옵션] [대상] 기본적으로 위와 같이 사용한다. 경로는 . 을 입력하면 현재 및 하위 디렉토리를 검색하며 / 을 입력하면 전체 폴더를 탐색한다. 자주 사용하는 옵션 -name [파일명] : [파일명]에 해당하는 파일을 찾는다. 정규 표현식을 사용가능하다. -user [유저명] : [유저명]이 소유하는 파일을 찾는다. -type [bcdfls] : 타입에 따라 파일을 찾는다. b : 블록파일 c : 문자 d : 디렉터리 f : 파일 l : 링크파일 s : 소켓 -size [+/-/ ]숫자[bckw] : 파일의 크기로 찾는다. + : 숫자보다 크다 - : 숫자보다 ..