사전 스터디 4주차에 진행된 멘토 경훈님의 Linux & Terminal 세션 후 배운 것들과 실습한 내용들을 정리하고자 한다.
운영체제(Operating System)는 컴퓨터 시스템의 자원들을 효율적으로 관리하며, 사용자가 컴퓨터를 편리하고, 효과적으로 사용할 수 있게 관리 해주는 소프트웨어 입니다.
운영체제는 응용 프로그램이나 사용자에게 컴퓨터의 자원을 사용할 수 있는 인터페이스를 제공하고 그 결과를 돌려줍니다. 그리고 응용 프로그램이나 사용자에게 모든 컴푸터의 자원을 숨기고 정해진 방법으로만 컴퓨터의 자원을 사용할 수 있도록 제한 합니다. 즉, 사용자는 운영체제가 제공하는 인터페이스를 통해서만 컴퓨터의 자원을 접근할 수 있고, 이를 통해 운영체제는 컴퓨터의 자원을 보호하고 효율적으로 관리할 수 있습니다.
즉, 사용자가 컴퓨터를 쉽게 다룰 수 있게 해주는 인터페이스로서, 하드웨어와 소프트웨어를 관리하는 스프트웨어 전체라고 할 수 있다. 또한, Kernel(커널)
이 포함된 패키지를 운영체제라고 할 수 있다.
운영체제의 대표적인 종류는 안드로이드(리눅스 계열), iOS(BSD 계열), 윈도우, macOS, 리눅스, 우분투, 레드햇 등이 있다.
응용 프로그램이 요청한 처리를 하드웨어에 나누어 처리를 요구하며, 시스템 호출 수행, 메모리 제어 등 운영체제에서는 없어서는 안되는 요소이다.
운영체제는 크게 핵심 기능들이 모여 있는 커널(Kernel)
과 사용자 프로그램에 인접하여 커널에 명령을 전달하고 실행 결과를 사용자 응용 프로그램에 돌려주는 인터페이스로 구성되어 있다.
커널이 주로 하는 일은 프로세스 관리, 메모리 관리, 파일 시스템 관리, 입출력 관리, 프로세스 간에 통신 관리등이 있다.
화면에 사용자가 볼 수 있는 요소. 사용자의 지시를 해석하여 커널에게 전달하여 주는 역할을 맡는다.
쉘(Shell)
은 사용자의 응용 프로그램과 커널 사이에 위치하여 응용프로그램의 명령어와 커널이 대화를 하도록 만들어주는 명령어 해석기이다.
사용자가 명령어를 입력하게 되면 컴퓨터 내부에서는 쉘이 이를 받아들이고 명령어를 해석하여 커널이 하드웨어를 조작하게 한다.
쉘은 크게 Windows와 같은 GUI(Graphical User Interface)와 Linux에서 사용되는 CLI(Command Line Interface)가 있다.
(출처: https://sciencerack.com/difference-between-gui-and-cli/)
Microsoft Windows는 explorer.exe가 셸 프로그램이며, macOS에선 Finder가 그 역할을 한다.
Linux는 1991년 Linus Torvals(라이너스 토발즈)가 개발한 운영체제로, 시스템을 운영하는데 가장 널리 사용되는 운영체제이다. Windows 시스템이나 application이 아닌 이상 일반적으로 시스템 서버는 리눅스 기반으로 운영되고 있다. 즉, 개발자는 시스템을 실행하고 관리하기 위해 리눅스에 대해 잘 알아야한다.
Linux의 파일 구조는 tree 형태로 되어있다. FHS
의 가장 위에는 /
디렉토리가 있고, 이를 Root directory라고 한다. directory는 윈도우의 폴더(folder)와 동일한 개념이다.
시작점인 root 디렉토리 안에 여러 하위 directory들이 있고, 각 하위 directory 안에 또 다른 하위 directory들이 있는 식으로 구성되어 있다. 각 directory들은 slash(/
)로 구분한다.
/
)/
기호로 접근~
)~
기호로 접근cat
, chmod
, chown
, cp
, date
, echo
, kill
, ln
, ls
, mkdir
, etx
와 같은 기초적인 프로그램들이 포함/
)부터 시작해서 목표 디렉토리까지 가는 경로를 전부 기술하는 방식이다./home/G/bin
.
: 현재 경로 (현재 자신이 있는 위치)..
: 상위 경로 (이전 디렉토리)환경 변수에서 환경은 현재 돌아가고 있는 shell을 의미하고 변수는 말 그대로 variable를 의미한다. 그럼으로 환경 변수란 shell의 어떠한 설정 값을 가지고 있는 변수를 의미합니다. 그리고 이러한 환경 변수들은 shell이 돌아가는 동안 계속 존재하며 사용됩니다. 환경 변수는
env
명령어를 통해 확인 할 수 있습니다.
env
명령어로 linux의 환경 변수 확인PATH
환경 변수PATH
환경 변수는 명령어들을 찾을 수 있는 경로들을 저장해놓은 환경 변수이다. 운영체제가 어떤 프로세스를 실행시킬 때, 그 경로를 찾는데 이용되는 변수라고 생각하면 된다.
사용자가 경로 없이도 명령어를 실행시킬 수 있는 이유는 바로 PATH
환경 변수 때문이다. 명령어를 사용할 때 만일 경로가 지정되지 않으면 shell이 PATH
환경 변수에 저장되어 있는 경로들을 하나하나 보면서 실행하고자 하는 프로그램이 위치해있는지 찾는다. 그리고 찾으면 해당 명령어를 실행시켜 준다.
PATH
에는 터미널에서 사용하는 명령어들의 경로가 저장되어 있다.:
로 구분한다..bashrc
, .zshrc
)~
) 디렉토리에 존재한다..
으로 시작하고, 해당 파일 및 디렉토리는 숨김 파일로 간주(dot file)한다.ls
에 a
옵션을(all) 주어야지만 볼 수 있다.cd
(change directory)
ls
(list segments)
pwd
(print working directory)
mkdir
(make directory)
rmdir
(remove directory)
rm
(remove)
cp
(copy)
mv
(move)
cp
와는 달리 디렉토리를 이동할 때도 별다른 옵션이 필요하지 않다.cat
(concatenate)
touch
(touch)
chmod
(change mode)
pwd
ls
cd Desktop
ls
(개인 파일들 다 가리다가 귀찮아서 덜 가린...)
readme.md
, move
디렉토리 생성mkdir wecode # 폴더 생성
ls # 폴더 생성 확인
cd wecode # 폴더 이동
touch readme.md # readme.md 생성
ls # 파일 생성 확인
mkdir move #폴더 생성
ls # 폴더 생성 확인
vi readme.md
i #insert -> 입력 모드 전환
내용 입력 후 ESC
:wq #저장 후 종료
cp readme.md readme2.md
ls
mv readme2.md ./move
cd move
ls
cp (원본 파일) (대상 파일)
mv (이동할 파일) (경로)
cd ..
rm -rf move
ls
rm -r : Recursively remove a directory and all its subdirectories
rm -rf : Forcibly remove a directory, without prompting for confirmation or showing error messages