안녕하세요.
Hynn 입니다.
이번 포스팅에서는 Linux 기본 사용 및 명령에 대해서 설명드리기 위해 작성하였습니다.
기초적인 부분만 작성되는 것이니만큼, 이후에 작성될 포스팅에서도 세부적인 사항을 다루어보도록 하겠습니다.
==========
1. Linux 란 무엇인가요?
2. Linux 기본 작동/Directory
3. 기본 명령어 사용
==========
1. Linux 란 무엇인가요?
Linux 는 리누즈 토발즈(Linus Benedict Torvalds) 가 1991년 개발한 OS 입니다.
이 OS는 세계에서 가장 많은 참여자가 관여하고 있는 Open Source 프로젝트이기도 합니다. Linux 를 모르는 사용자들 조차도, 이 Linux 기반으로 동작하는 많은 OS를 알 수 있습니다.
대표적으로 웹서버, 클라우딩, 스마트폰, 임베디드 , 슈퍼컴퓨터 시장의 압도적 점유율은 Linux 입니다.
만약 개발자로서, 이러한 분야에 진출하고자 한다면, Linux 를 모르는 것은 말이 되지 않습니다. 또한 세계적으로 가장 거대한 IT기업들 역시, Linux 참여자로서 이름을 올리고 있습니다. 대표적으로, 인텔, IBM, 구글, 삼성전자, AMD, 오라클 ,ARM, 네이버 클라우드 같은 대기업들 역시 Linux 에서 적극적인 참여를 하고 있습니다.
2. Linux 기본 작동/Directory
Linux 의 기본 작동은 CLi ( Command Line Interface) 형태로 이루어져있습니다.
물론 최근에는 GUI (Graphic User Interface) 라고 하는, 우리가 잘 알고 있는 Window,macOS 같은 그래픽화 되어 있는 Linux 도 있지만, 기초적으로는 CLi 형태를 띄고 있습니다.
이유인즉슨, Linux 의 특성상, 일반 사용자가 사용하는 빈도수가 매우 적습니다.
대부분이 개발자로서 구성이 되어 있다보니, 어느정도의 교육수준이 있어, 진입장벽이 높지 않습니다.
또한 GUI 에 비해서 당연히 단순명료한 인터페이스로서, 자원을 적게먹고, 그에비해 안정적일 뿐 아니라, 빠릅니다. 당연하게도 자원을 적게 사용하기 때문에, 네트워크 측면에서도 안정적이기도 합니다. 당연하게도 웹서버같이 원격으로 작업이 필요한 분야에서는 더욱 더 효율이 높다고 할 수 있습니다.
그래서 이전 포스팅에서 iTerm2 를 설치한 이유도 CLi 환경에서 보다 편리하게 이용하기 위한 목적이기도 합니다.
기본적인 구성은 아래와 같습니다.
먼저 응용프로그램에서 "실행"을 명령하면, Shell 이라는 영역으로 전달이 되고, Shell 은 명령을 해석하여, Kernel 로 전달합니다.
이제 이 Kernel 에서 Hardware 로 전달하는 과정을 거치게 됩니다.
GUI 환경에서는 여기서 몇가지 단계를 더 거치게 되므로, 당연히 작동의 효율성에서 CLi 가 더 압도적인 효율을 나타낼 수 밖에 없습니다.
따라서 본 블로그에서는 Linux 에 관련된 포스팅은 모두 CLi 기반으로의 사용만 다룰 예정입니다.
macOS 유저라면 아래의 그림과 유사한 Directory 구조를 보신 적이 있을 것입니다.
Linux 의 기본 Directory 구조는 아래와 같이 구성되어 있습니다.
macOS 에서도 'root' 라는 개념이 존재합니다.
이는 아무래도, macOS 의 뿌리 역시, Linux 와 마찬가지로 Unix 에서 출발한 것에 기인이 되지 않았을까 합니다. 여기서 몇가지 차이가 존재하지만, macOS 에서의 root-user 처럼, Linux 에서도 가장 상위의 개념으로 인지하시면 될 것입니다. 여기서의 약어는 '/' 을 사용합니다.
이런특징으로 Linux 에서는 "슈퍼유저", "일반유저" 와 같은, 사용자 그룹을 나누고, 그를 기반으로 파일 관리가 이루어지고 있어, 타 OS에 비해서 보안측면에서 안전한 환경을 구축하고 있습니다. 또한, Linux 사용자가 일반 유저가 거의 없으니만큼, 타겟으로 덜 설정되기도 하지만 말입니다.
물론 Linux 에서도 이 Root 사용자 관리를 잘못할 경우, 치명적인 보안 허점이 발생될 수 있으니 주의가 필요할 테지만 말입니다.
3. 기본 명령어 사용
여기서 사용하는 명령어는 가장 기초적인 명령어 몇가지만 다루고자 합니다.
명령어 | 설명 | 작성예시 |
cd | Change Directory 의 약자입니다. 자신이 현재 위치한 디렉토리에서 이동하는 것을 뜻합니다. | cd ~/desktop |
ls | List 의 줄임말입니다. 현재 위치한 Directory 에 저장된 파일/폴더의 리스트를 출력합니다. | ls |
Vi | Visual display Editor 의 줄임말입니다. Linux 에서의 파일을 편집하는데 사용됩니다. | vi ~/desktop/Hello.txt |
mkdir | Make Directory 의 줄임말입니다. Directory 를 생성하는 명령어입니다. | mkdir ~/desktop/test |
mv | Move 의 줄임말입니다. 특정 파일의 Directory 위치를 이동할 때 쓰입니다. | mv ~/desktop/hello.txt ~/desktop/test/hello.txt |
cp | Copy 의 줄임말입니다. 특정 파일을 다른 위치의 Directory 에 복사할 때 사용됩니다. | cp ~/desktop/hello.txt ~/desktop/test/hello.txt |
rm | Remove 의 약자입니다. 파일을 삭제할 때 사용됩니다. | rm hello.txt |
cat | Concatenate 의 줄임말입니다. 파일의 내용을 출력하거나, 하나로 합쳐주는 기능으로 사용됩니다. | cat hello.txt |
who | 시스템에 로그인된 사용자들의 정보를 출력합니다. | who |
whoami | 현재 접속하고 있는 사용자의 정보를 출력합니다. | whoami |
env | Environment 의 줄임말입니다. 환경변수를 출력하는데 사용됩니다. | env |
| (PipeLine) | Process/Program 의 결과를 다른 Program/Process 로 넘겨줄 때 사용합니다. | ps -ef | grep node |
ps | 현재 실행중인 Process 의 목록과 상태를 출력합니다. | ps -e, ps -f, ps-ef |
grep | Global / Regular expression / Printprint 에서 각각의 머리글을 따서 만든 줄임말입니다. 문자열을 검색할 때 사용됩니다. | grep [검색단어] |
kill | Process 를 종료할 때 사용합니다. | kill -9 [Process ID(PID)] |
3-1. cd, ls, vi, mkdir, cp, rm
특징별로 묶어서 간략하게 예시를 보여드리면서 작성해보려고 합니다.
먼저 위 묶음들은, 주로 파일의 생성,이동 및 편집에 관한 명령어입니다.
먼저 파일을 생성하거나, 위치를 확인하기 위해서 "CD" 를 사용합니다.
먼저 위에서 사용된 ~/ 은 "Home" Directory 를 뜻합니다. 여기서의 Home Directory 는 macOS/Window 에서 사용자명으로 생성된 폴더를 기억하시면 보다 쉽게 이해가 가능합니다. 즉, 위에서 "cd" 를 사용해 Home Directory 의 "Desktop" , Window 로 친다면, 바탕화면이 되겠습니다.
이제 여기서 ls 를 이용하여 출력하면, 현재 "Desktop" 이라는 Directory 의 파일/폴더 목록을 나타냅니다.
표시되는 목록에서도 몇가지 규칙이 존재합니다.
먼저 푸른색으로 표시된 두개의 항목은 "폴더" 입니다.
당연히 나머지 파일은 "파일" 입니다. 하지만 JavaScript 나, HTML,CSS 처럼 속성을 부여하여 보다 세부적으로 목록을 출력할 수도 있습니다.
ls 이후에 -a, -l 이라는 옵션을 부여하면, 보다 세부적으로 파일이 나타나게 됩니다.
이는 각각 아래의 특징을 부여합니다. CLi 의 특징 상, GUI 처럼 그래픽화 할 수 없기 때문에, 텍스트만으로 모든 내용을 구분해야 하기 때문에, 이를 잘 기억하도록 합시다.
- -a : 숨김파일을 표시합니다.
- -l : 파일의 세부정보를 표시합니다.
- -al : 숨김파일을 표시하고, 파일의 세부정보를 표시합니다.
이제 파일을 보는 방법을 알았으니, Mkdir, cp, rm, vi 를 이용해보도록 하겠습니다.
먼저 파일/Directory 를 생성해야 합니다. 그러기 위해서는 먼저 Mkdir 을 사용해보도록 합시다.
TestDiv 라는 폴더를 생성했고, 생성된 결과물을 볼 수 있습니다. 물론 띄어쓰기 적용도 가능하지만, 띄어쓰기 사용의 경우, "" 으로 표기를 해야 합니다. 바로 테스트하여 결과물을 보도록 하겠습니다.
이 띄어쓰기 사용은 이후에도 Linux 에서 기본적으로 적용되오니, 반드시 기억해두도록 합시다.
이제 이 경로 내에 텍스트 파일을 하나 생성하여 테스트 해보도록 하겠습니다.
vi ~/desktop/TestDiv/Hello.txt
위의 명령을 실행하여 파일을 생성하고, 아래의 vi 명령을 사용하면, 위와 같은 화면이 나타날 것입니다.
이를 "명령 모드" 라고 합니다. 이것이 vi 의 기본 상태이기도 합니다.
Vi 의 모드에는 2가지의 모드가 존재합니다.
- 명령 모드(Command Mode) : 종료, 저장, 강제종료등의 기능을 사용하며, 파일의 편집이 아닌, 실행/종료 기능에 초점됨
- 입력모드 (Insert Mode) : 실행한 파일의 편집을 위한 모드
기본적으로 vi 를 실행할 경우, "명령 모드"로 실행되며, 명령 모드에서 입력모드로 전환하기 위해서는 "i" 를 누르면 되고, 다시 명령모드로 전환하기 위해서는 "esc" 를 눌러 전환이 가능합니다.
파일의 텍스트를 간단하게 입력하고, 저장하기 위해서는 명령모드로 돌아가서 특정 명령을 입력해야 합니다.
명령어의 기본 단위는 " : " 입니다.
- :q - 저장하지 않고 종료합니다.
- :q! - 저장하지 않고 강제종료합니다.
- :w - 저장합니다.
- :w! - 강제저장합니다.
역시 위의 명령은, 조합해서도 사용이 가능합니다. 만약 이를 저장하고 강제로 종료하기 위해서는 " :wq! " 을 입력할 수 있습니다.
위와 같이 입력하면, 명령모드에서 저장 후 강제종료 명령이 전달됩니다.
그러고 나면 다시 iTerm 의 메인화면으로 돌아가는 것을 알 수 있습니다.
이제 이 파일을 iTerm 에서 복사하고, 이동하는 기능을 사용해보겠습니다.
mv ~/desktop/TestDiv/hello.txt ~/desktop/"Test Active"/hello.txt
cp ~/desktop/"Test Active"/hello.txt ~/desktop/TestDiv/hello.txt
각각의 명령어는, 이동과 복사를 뜻합니다.
여기서의 기본 명령 구조는 "cp(mv) 현재위치/파일명 이동(복사)경로/파일명 으로 구성됩니다.
즉 각각의 명령어에서 가장 끝에 위치하는 .txt 파일명 이전은 위치를 뜻하며, 위의 mv, cp 에 따라 복사가 될지, 이동이 될지를 결정하는 것이라고 생각하시면 편합니다.
이를 명령으로 실행한 뒤, 정상적으로 파일이 이동/복사가 되었는지는 각각의 경로에서 ls 를 사용해
파일목록을 출력하면 결과를 확인할 수도 있습니다. 정상적으로 입력된 iTerm 에서는 바로 다음 줄 명령이 나타날 것입니다.
마지막으로 파일을 삭제하는 "rm " 이라는 명령어 입니다.
이는 역시 간단하게 사용이 가능합니다.
rm ~/desktop/TestDiv/hello.txt
역시나 파일의 위치 및 파일명이 뒤로 이동하게 되고, rm 이라는 첫번째 명령의 차이만 존재합니다. 역시 ls 로 확인시, 빈 폴더이므로, 목록이 표시되지 않을 것입니다.
3-2. who, whoami ,cat, env , ps , grep, kill , | (Pipe Line)
위 명령어들은 파일의 생성/편집/삭제 보다는 Process 에 관련된 명령어로 이해하시면 좋을 것입니다.
먼저 Who, Whoami 의 경우, 로그인된 사용자 계정을 뜻합니다.
macOS 에서의 사용자 계정을 관리하는 페이지는 이처럼 표기가 됩니다.
macOS 역시도 관리자, 표준 사용자, 공유만 가능, 네트워크 계정 등의 종류가 존재합니다. Linux 에서도 그와 같이 위에서 언급한 슈퍼 사용자 , 표준사용자 등의 그룹이 존재하기 때문에, 현재 접속한 사용자가 어떠한 사용자인지를 먼저 알아야 할 것입니다.
먼저 Who 는 현재 접속(사용)중인 모든 "사용자"를 출력합니다. 반면 Whoami 는 자신이 사용하고 있는 사용자명을 출력합니다.
cat 의 경우, 자세한 사항을 별도의 포스팅으로 다룰 예정입니다만,
간단한 기능을 소개해드리자면, 파일의 내용을 그대로 출력하는 기능입니다. 이후에 이 cat 를 이용하여 파일을 합치거나, 출력하는 형태의 특정 텍스트를 출력하는 기능도 소개해드릴 예정입니다.
기본적인 명령어는 아래와 같이 작성합니다.
아래의 파일명은 하나만 입력할 경우, 하나의 파일만 출력, 두개 이상 입력시 순서대로 출력하는 기능입니다.
cat filename filename filename..
Env 역시 이후에 자세히 다루게 될 예정입니다만, 이는 현재 사용중인 Linux 에서 환경변수를 출력할 때 사용하는 명령어 입니다.
환경 변수를 이해하기 위해서는 보다 많이 Linux 에 접근한 뒤에 별도 포스팅으로 다룰 예정입니다.
PS, Grep, Kill 모두 위와 동일하게 자세한 설명이 필요한 명령어 입니다.
이는 예시로 작성하기 보다는 이후에 별도의 포스팅으로 다루는 것이 맞다고 생각되어, 본 포스팅에서느 다루지 않을 예정입니다.
이후에 작성될 포스팅을 참고해주시기를 바랍니다.
Linux, 어떻게 생각한다면 단순한 OS 라고 생각될 수도 있기 때문에, 흥미를 가지고 접근한다면 쉽게 친해질 수 있는 OS입니다.
다음 포스팅에서 뵙겠습니다.
감사합니다.
'개발공부일지 > Linux' 카테고리의 다른 글
Linux - Git 사용 준비하기 (0) | 2022.11.23 |
---|---|
Linux기초 - Multi-User 및 File/Directory 권한 부여 및 확인하기 (2) | 2022.11.22 |
Linux 기초 - Linux 사용 전 준비하기 ( iTerm, Plug-in) (0) | 2022.11.21 |
댓글