- 리눅스는 공개 소프트웨어이며 무료로 사용할 수 있다.
- 유닉스와 완벽한 호환성을 유지한다.
- 서버용 운영체제로 많이 사용된다.
- 편리한 GUI 환경을 제공한다.
커널
: 커널은 리눅스의 핵심으로 프로세스 관리 , 메모리 관리 , 파일 시스템 관리, 장치 관리등 컴퓨터의 모든 자원을 초기화하고 제어하는 기능을 수행한다.
셸
: 리눅스의 사용자 인터페이스로서 사용자와 커널 사이의 중간자 역할을 담당하는 특별한 프로그램이다.
셸은사용자가 입력한 명령을 해석하여 커널에 넘겨준다. 그러면 커널이 명령의 수행 결과를 돌려주고
셸은 다시 사용자가 이해할 수 있는 형태로 바꿔 출력한다.
리눅스는 배시셸(Bash Shell)을 기본으로 사용한다.
응용프로그램
: 리눅스는 각종 프로그래밍 개발 도구, 문서 편집 도구, 네트워크 관련 도구 등 매우 다양한 응용 프로그램을 제공한다.
user1@myubuntu:~$
user1@myubuntu:~$ ^d -> ctrl + D
user1@myubuntu:~$ ls
-> 출력 : Applications aiXcoder
Desktop dev
Documents java_error_in_studio.hprof
Downloads package-lock.json
Library package.json
Movies scikit_learn_data
Music test.mv.db
Pictures test.trace.db
Public workspace
각자 컴퓨터의 저장 된 디렉토리가 다르므로 출력되는 디렉토리들이 다를 수 있다.
user1@myubuntu:~$ ls -a
user1@myubuntu:~$ ls /tmp
user1@myubuntu:~$ ls -a /tmp
리눅스의 기초 명령 사용법을 연습해보자.
user1@myubuntu:~$ date
2023년 6월 21일 수요일 20시 14분 33초 KST
user1@myubuntu:~$ clear
user1@myubuntu:~$ man
<참고>
user1@myubuntu:~$ man clear
user1@myubuntu:~$ passwd
리눅스에서 파일은 사용 목적에 따라 일반 파일, 디렉터리, 심볼릭 링크, 장치 파일로 구분할 수 있다.
user1@myubuntu:~$ file .profile
윈도에서 파일을 폴더로 구분하여 관리하는 것처럼 리눅스에서도 수많은 파일을 관리하기 위해 디렉터리를 사용한다. 리눅스에서는 파일을 호율적으로 관리하기 위해 디렉터리를 계층적으로 구성하는데 이를 트리 구조 라고 한다. 리눅스에서도 모든 디렉터리의 출발점은 루트(root) 디렉터리이다. 루트 디렉터리는 / 로 표시한다.
<그림>은 리눅스 디렉터리 계층 구조의 일부를 나타낸 것이다. 최상단에 루트 디렉터리 (/)가 잇고, 그 아래에 etc, usr, home, tmp 같은 디렉터리가 있다. 이 디렉터리들 아래에는 다시 디렉터리나 파일이 있다. 이렇게 디렉터리 아래에 있는 디렉터리를 하위 디렉터리 또는 서브 디렉터리 라고 부르는데 여기서는 서브 디렉터리라고 부를 것이다.
예를 들어서 <그림>에서 lib 디렉터리는 usr 디렉터리의 서브 디렉터리이고, usr 디렉터리는 루트 디렉터리의 서브 디렉터리다.
디렉터리 | 기능 |
---|---|
dev | 장치파일이 담긴 디렉터리이다. |
home | 사용자 홈 디렉터리가 생성되는 디렉터리이다. |
media | DVD/CD나 USB 같은 외부 장치를 연결(마운트라고 함)하는 디렉터리다. |
opt | 추가 패키지가 설치되는 디렉터리다. |
root | root 계정의 홈 디렉터리다. 루트(/) 디렉터리와 다른 것이므로 혼동하지 않도록 한다. |
sys | 리눅스 커널과 관련된 파일이 있는 디렉터리다. |
usr | 기본 실행 파일과 라이브러리 파일, 헤더 파일등 많은 파일이 있다. 참고로 usr는 'Unix System Resource'의 약자이다. |
boot | 부팅에 필요한 커널 파일을 가지고 있다. |
etc | 리눅스 설정을 위한 각종 파일을 가지고 있다. |
lost+found | 파일 시스템에 문제가 발생하여 복구할 경우 , 문제가 되는 파일이 저장되는 디렉터리로 보통은 비어있다. |
mnt | 파일 시스템을 임시로 마운트하는 디렉터리다. |
proc | 프로세스 정보등 커널 관련 정보가 저장되는 디렉터리다. |
run | 실행 중인 서비스와 관련된 파일이 저장 된다. |
srv | FTP나 Web 등 시스템에서 제공하는 서비스의 데이터가 저장된다. |
tmp | 시스템 사용 중에 발생하는 임시 데이터가 저장된다. 이 디렉터리에 있는 파일은 재시작 하면 모두 삭제된다. |
var | 시스템 운영 중에 발생하는 데이터나 로그등 내용이 자주 바뀌는 파일이 주로 저장된다. |
작업 디렉터리
리눅스에 로그인 하여 사용하다보면 디렉터리를 이동하게 된다. 이때 현재 사용 중인 디렉터리를 작업 디렉터리 또는 현재 디렉터리라고 한다. 이는 .(마침표)로 표시하며, 작업 디렉터리의 위치는 pwd 명령으로 확인할 수 있다.
user1@myubuntu:~$ pwd
/Users/user1
홈 디렉토리
홈 디렉터리는 각 사용자에게 할당된 디렉터리로 처음 사용자 계정을 만들 때 지정된다. 사용자는 자신의 홈 디렉터리 아래에 파일이나 서브 디렉터리를 생성하며 작업할 수 있다. 홈 디렉터리는 ~(물결표) 표시한다. ex) user1 계정의 홈 디렉터리를 나타내려면 '~user1'이라고 하면 된다.
리눅스 파일 시스템에서 디렉터리 계층 구조에 있는 특정 파일이나 디렉터리의 위치를 나타내는 것을 경로명(path name)이라고 한다.
경로명에서 각 경로를 구분하는 구분자로는 /를 사용한다.
경로명에서 가장 앞에 있는 /는 루트 디렉터리를 뜻하지만 경로명 중간에 있는 /는 구분자다.
ex) /usr/bin/ls에서 맨 앞의 /는 루트 디렉터리를 의미하고, 중간에 있는 / 두 개는 디렉터리명과 파일명을 구분하는 구분자다.
경로명에는 절대 경로명과 상대 경로명이 있다.
절대 경로명은 항상 루트 디렉터리부터 시작하고 상대 경로명은 현재 디렉터리를 기준으로 시작한다.
따라서 상대 경로명은 현재 어느 디렉터리에서 작업 중이냐에 따라 매번 달라질 수 있다.
절대 경로명
상대 경로명
Q. 다음 표의 디렉터리 계층 구조를 기준으로 다음 경로명을 알아보자 현재 디렉터리는 user1 이라고 가정한다.
디렉터리/파일 | 절대 경로명 | 상대 경로명 |
---|---|---|
/ | cd / | cd .. |
home | cd /home | cd ../home |
tmp | cd /tmp | cd ../tmp |
lib | cd /lib | cd ../lib |
ls | cat /usr/bin/ls | cat ../usr/bin/ls |
파일과 디렉터리 이름을 정하는 규칙과 예
규칙
ex)
user1@myubuntu:~$ pw
/home/user1
설명 : cd 명령과 함께 이동하고자 하는 목적지 디렉터리를 저장하면 해당 디렉터리로 이동한다.
이동할 디렉터리의 경로명은 절대 경로명이나 상대 경로명을 사용 가능하다.
다음의 예로는 /tmp 디렉터리로 이동한 것으로 절대 경로명을 사용했다.
이동한 뒤 현재 디렉터리가 바뀌었는지 pwd 명령으로 확인한다.
user1@myubuntu:~$ cd /tmp
user1@myubuntu:~/tmp$ pwd
/tmp
#### 옵션이나 디렉터리를 지정하지 않고 ls 명령을 사용하면 현재 디릭터리의 내용을 출력한다.
```
user1@myubuntu:~$ ls
공개 다운로드 문서 바탕화면 비디오 사진 음악 템플릿
```
- 리눅스에서는 파일명이나 디렉터리명이 .(마침표)로 시작하면 숨김 파일이 된다.
이 숨김 파일은 ls 명령ㅇ만 사용해서는 보이지 않는다.
숨김 파일을 확인하려면 -a(all) 옵션을 지정해야한다. user1 계정의 홈 디렉터리에 어떤 숨김 파일이 있는지 확인 해보도록 하자.
➜ ~ ls -a
. .m2 .zshrc.swm
.. .matplotlib .zshrc.swn
.CFUserTextEncoding .node_repl_history .zshrc.swo
. DS_Store .npm .zshrc.swp
.TranslationPlugin .oh-my-zsh Applications
.Trash .pyenv Desktop
.android .python_history Documents
.bash_profile .sonarlint Downloads
.bash_profile .txt .viminfo Library
.config .vscode Movies
.emulator_console_auth_token .vscode-cli Music
.gitconfig .zcompdump-Bin's MacBook Air-5.9 Pictures
.gradle .zcompdump-정우빈의 MacBook Air-5.8.1 Public
.h2.server.properties .zcompdump-정우빈의 MacBook Air-5.9 Virtual Machines.localized
.ideavimrc .zprofile.save aiXcoder
.ipython .zsh_history dev
.jenv .zsh_sessions test.mv.db
.keras .zshenv.swp workspace
.lesshst .zshrc
.local .zshrc.save
```
위의 예시를 보면 .bashrc를 비롯해 숨김 파일이 많다는 것을 알 수 있다.➜ ~ ls -f
. Desktop dev
.. Library .zshrc.swp
.TranslationPlugin .matplotlib .keras
.zshrc.save .lesshst .npm
.config .zcompdump-정우빈의 MacBook Air-5.8.1 Documents
Music .emulator_console_auth_token .pyenv
.bash_profile .txt test.mv.db .vscode
.zcompdump-정우빈의 MacBook Air-5.9 aiXcoder .m2
.DS_Store .node_repl_history .bash_profile
.zcompdump-Bin's MacBook Air-5.9 .android .oh-my-zsh
.CFUserTextEncoding Public .zshrc.swm
.vscode-cli .ideavimrc Downloads
.zshrc.swo Virtual Machines.localized .python_history
.zshrc .zshenv.swp .gitconfig
.local .sonarlint .zprofile.save
Pictures Movies .viminfo
workspace Applications .zsh_sessions
.zshrc.swn .jenv .h2.server.properties
.zsh_history .gradle
.ipython .Trash
옵션은 여러 개를 연결하여 사용할 수도 있다. 옵션을 연결할 때는 '-'뒤에 옵션만 나열하면 된다. 숨김 파일을 보여주는 -a 옵션과 파일의 종류를 보여주는 -F 옵션을 연결하여 사용하면 다음과 같이 숨김 파일의 종류도 알 수 있는데 .(마침표)와 ..(마침표 두 개)에도 /가 붙어 있다.
(방금 보여진 결과 화면은 본인의 MAC환경이다.)
➜ ~ ls -af
. Pictures Public .pyenv
.. workspace .ideavimrc .vscode
.TranslationPlugin .zshrc.swn Virtual Machines.localized .m2
.zshrc.save .zsh_history .zshenv.swp .bash_profile
.config .ipython .sonarlint .oh-my-zsh
Music Desktop Movies .zshrc.swm
.bash_profile .txt Library Applications Downloads
.zcompdump-정우빈의 MacBook Air-5.9 .matplotlib .jenv .python_history
.DS_Store .lesshst .gradle .gitconfig
.zcompdump-Bin's MacBook Air-5.9 .zcompdump-정우빈의 MacBook Air-5.8.1 .Trash .zprofile.save
.CFUserTextEncoding .emulator_console_auth_token dev .viminfo
.vscode-cli test.mv.db .zshrc.swp .zsh_sessions
.zshrc.swo aiXcoder .keras .h2.server.properties
.zshrc .node_repl_history .npm
.local .android Documents
➜ ~ ls /tmp
/tmp
➜ ~ ls /tmp
/tmp
출력되는 결과 값은 개인 환경에 따라 다를 수 있다.