Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- Constraint Layout
- 다단계 큐
- Data Binding
- 운영체제
- design pattern
- 더티비트
- OS
- JUnit
- SOLID
- 마크다운
- spring
- github
- kotlin
- Di
- Compose
- Spring Boot
- readme
- 리드미
- Android
- JetPack
- android study jam
- markdown
- coroutine flow
- git
- Class.class
- LiveData
- test
- 깃허브
- 데드락
- O.S
Archives
- Today
- Total
차지
Linux 본문
리눅스는 서버 환경에 원격으로 접속해서 원하는 작업을 할 수 있는 운영체제입니다.
GUI 환경 보다는 CLI 환경을 주로 사용하며 명령어에 익숙해진다면 보다 능률좋은 작업을 진행할 수 있습니다.
다중 사용자가 원격으로 접속해 사용하는 멀티유저 환경을 지향하는 이 운영체제는 어떻게 쓰이는지 보겠습니다.
1. 설치
리눅스가 어떻게 쓰이는지 직접 확인해보기 위해 리눅스를 설치합니다.
가상머신 Virtual Box, Parallels Desktop, Vmware 등 중 하나를 골라 먼저 설치합니다.
저는 맥 환경인데 유료는 페러렐즈, 무료는 vmware가 사용하기 괜찮았습니다.
ubuntu 공식 홈페이지에 가면 확장자가 iso인 disk image를 설치할 수 있습니다.
가상머신에 해당 파일을 설치해줍니다.
2. SSH
- 리눅스는 멀티유저 작업에 특화되어 있습니다. 그에 걸맞게 원격으로 접속할 수 있어야 합니다.
- 가상환경에서 SSH를 설치해 접근할 수 있게 합니다.
- 로컬환경 터미널에서 IP주소와 리눅스계정의 name & password를 안다면 바로 접근할 수 있습니다.
3. 쉘 스크립트
- 힘들게 접속한 리눅스에서는 어떤 작업을 할까요?
- 백엔드 개발을 진행할 때에는 오류를 돌이켜볼 수 있게 항상 log를 주시해야 합니다.
- 하지만 log가 쌓이고 쌓여 넘친다면 압축을 해줄 필요가 있습니다.
- 압축 작업을 쉘 스크립트로 작성한다면 정말 편리할 것입니다.
4. crontab 자동화
- 쉘 스크립트를 작성했다면 자동화까지 할 때 더욱 편리할 것입니다.
- 리눅스는 cron이라는 자동화 기능이 존재합니다.
* * * * * CMD
# m h dom mon dow command 다섯가지 키워드로
# 일정한 시간마다, 일정한 시각에 특정 명령을 수행할 수 있습니다.
- crontab에는 여러 옵션이 존재합니다.
crontab -e # 자동화 명령을 작성할 편집기를 호출합니다.
crontab -l # 작성한 자동화 명령을 들여다봅니다.
crontab -r # 자동화 명령을 초기화시킵니다.
- sudo crontab -e 를 사용하면 일반 crontab과는 별개의 crontab이 활성화되며 관리자 권한으로 실행할 수 있게 됩니다.
- crontab에 있는 명령은 상대경로를 인식하지 못하며 일반 sh파일이 작동되더라도 crontab에서는 작동되지 않는 문제를 겪을 수 있습니다.
5. 백업 복사 스크립트
sudo scp -r 가상환경이름@ip:/가상환경path 로컬path
- 위 명령을 통해 가상환경에 SSH 접속하여 path에 있는 파일을 로컬path로 가져올 수 있습니다.
6. 권한 부여
- 파일의 권한은 다양한 옵션으로 부여할 수 있습니다.
- 명령어 앞에 sudo를 붙이면 관리자 권한으로 무엇이든 명령할 수 있지만
다중 사용자 OS이기에 일반 사용자에게 권한을 얼마나 부여할지도 설정해줘야 합니다.
허가가 적용되는 범위
- u(ser)
- g(roup)
읽고 쓰는 모드
- r(ead)
- w(rite)
- 위 옵션들을 조합하여 권한을 부여합니다.
- 그리고 부여한 권한은 ls -l 명령어에서 확인할 수 있습니다.
$chmod a-rwx sample
$ls -l sample
---------- 2 unixguy unixguy 96 Dec ~~~~
- ls -l 명령어를 출력할 때 앞에 붙는 drw-rw——와 같은 문구도 다음과 같이 해석할 수 있습니다.
- d: directory?
- d를 제외한 9자리를 세 개씩 묶어 8진법으로 나타낼 수 있습니다.
ex)
$chmod 764 sample
$ls -l sample - ```bash
- rwx rw- r--
- rwx = 7, rw- = 6, r— = 4 처럼 8진수로 명령할 수도 있습니다.
- 출처: https://ko.wikipedia.org/wiki/Chmod
1. 리눅스와 유닉스
- 두 운영체제 모두 다중 사용자 방식의 운영체제입니다.
- 회사와 같은 단체에서 서버로써 주로 사용하고 리눅스는 유닉스에서 파생된 OS라고 볼 수 있습니다.
Linux
- 무료 오픈 소스
- 버그는 무수한 개발자들이 앞장서서 fix
- 기관, 개인 등 다양한 곳에서 사용
Unix
- 유료, 비공개 코드
- 버그는 IBM이 책임지고 fix
- 보안을 강조해 대기업 등의 기관에서 사용
기존 유닉스는 어셈블리어를 사용해 기종 간 호환이 잘 되지 않았습니다.
이 문제는 후에 C언어로 재작성되며 무료로 배포되면서 여러 OS들의 모체가 되었습니다.
후에 GNU(GNU is Not Unix) 프로젝트가 시작되었으나 커널이 존재하지 않아 핵심이 빠진 상태였습니다.
이 때 GNU시스템에 적합한 커널이 개발되고 있었는데 이것이 리눅스였습니다.
리눅스는 최대한 확장 가능하고 어떤 인터페이스에도 종속되지 않는 방향을 지향했습니다.
결과적으로 뛰어난 신뢰성과 다양한 사용자 지원체계 등이 강점인 OS가 되었습니다.
2. 쉘 명령어
- 리눅스나 유닉스는 윈도우나 맥처럼 GUI 환경에서 작업하는 것 보다는 CLI 환경에서 작업하는 것을 선호합니다.
- 저는 특정 프로그램을 설치할 때 굉장히 편하다고 느꼈습니다.
sudo apt install python
- GUI 환경에서는 설치할 패키지의 홈페이지에서 카테고리를 찾아 설치해야 하는 반면,
CLI 환경에서는 명령어로 빠르게 설치할 수 있습니다. - 그 외에도 리눅스 환경 내부의 파일을 조작할 때에도 편리하게 사용됩니다.
pwd #현재 위치를 확인합니다.
/home
cd /backup #위치를 이동합니다. change directory
~/backup$pwd
/home/backup
cd ../ #상위 폴더로 이동합니다.
ls #ls는 현재 위치 파일의 list를 출력합니다. 여러 옵션을 사용할 수 있습니다.
ls -al #모든 정보 출력
cat file #file의 내용을 확인합니다. concatenate
cp fileA fileB #fileA를 copy해 fileB를 만듭니다.
grep [-opt][pattern][file] # 검색합니다.
#-r, -i, -v 또는 -l 과 같은 옵션을 줘서 상세한 검색을 합니다.
zip fileA.zip fileB # fileB의 내용을 fileA.zip이라는 이름으로 압축합니다.
tar
gzip # 압축에는 여러 명령어가 존재합니다.
- 모든 명령어는 명령어 앞에 sudo를 붙이면 비밀번호를 입력하므로써 관리자 권한으로 실행합니다.
- 절대경로와 상대경로는 평소 프로그래밍을 할 때 파일을 불러오면서도 접하게 됩니다.
- 터미널에서도 특정 위치에 접근할 때 절대경로를 이용하면
/home/cha-ji와 같이 정해진 root 폴더에서 탐색을 시작하고, - 상대경로를 이용하면 해당 명령어를 입력한 폴더에서 하위 폴더로 탐색을 진행합니다.
1. 쉘 스크립트
- 위에 서술한 쉘 명령어들을 활용해 복잡한 명령을 수행하기도 합니다.
#!/bin/sh
ls -al
ls -l
ls
- 이처럼 명령어가 조합된 .sh파일을 만들 수 있습니다.
- 쉘 스크립트는 일반적인 프로그래밍 언어에 비해 속도도 빠르며 컴파일 단계도 없습니다.
- 하지만 스크립트가 복잡해지면 하부 프로세스의 수많은 필요에 따라 속도가 느려질 수 있습니다.
- 출처: https://ko.wikipedia.org/wiki/셸_스크립트
2. 터미널 환경
- 개발 환경
- macOS에는 UNIX 기반의 OS이기에 기본적으로 터미널이 내장되어있습니다.폰트에 따라 한글이나 아이콘이 깨지는 경우가 빈번합니다.
- 하지만 내장 터미널은 사용하지 않고 iTerm2, oh-my-zsh를 설치해 사용하고 있습니다.
- 주로 git을 사용할 때 터미널을 사용하며
VScode에서 파이썬을 실행할 때 터미널에서 출력하곤 합니다.
오픈소스를 설치할 때에 brew 패키지를 통해 간편하게 설치하기도 합니다. - 앞서 사용했던 openSSH와 같은 패키지들이 많이 내장되어 있습니다.
'Computer Science > O.S.' 카테고리의 다른 글
| Operating System - 스레드(3/3) (0) | 2022.05.14 |
|---|---|
| Operating System - 프로세스 (2/3) (0) | 2022.05.14 |
| Operating System - 운영체제 (1/3) (0) | 2022.05.13 |
| Garbege Collector (0) | 2021.07.24 |
| 캐시 (0) | 2021.07.24 |