환경 변수란?

사용자, process, 리눅스 자체 등 다같이 사용하는 변수

다양한 운영체제에서 적용된다.

 

printenv  명령어를 사용하여 환경변수를 확인할 수 있다

printenv

echo 명령어를 통해서 하나씩 출력할 수 있다

export [변수]=[값]

원하는 변수를 생성할 수 있다

재부팅하면 사라진다

환경 변수로 등록하면 어디서든 사용 가능하다!

  • .sh 내부에서도 사용 가능
export HYndrome=good
printenv | grep HYndrome

환경 변수 영구적으로 등록하기

방법 1. 셀 초기화 파일에 등록하기

bash shell이 시작하자마자 시작되는 bash shell script 파일 편집

vi ~/.bashrc

export 명령어 등록

reboot 한다음에 남아 있는지 확인

방법 2. /etc/environment에 추가 (시스템 전체)

/etc/environment에 환경변수를 직접 등록할 수 있다.

해당 사용자뿐만 아니라 시스템 전체에 해당 환경 변수를 등록하는 것이다.

etc/environment 파일을 수정한 후에는 로그아웃하고 다시 로그인해야 변경사항이 적용된다

sudo vi /etc/environment

변수 등록

세션 로그아웃

exit

등록 확인

'Linux > 개념' 카테고리의 다른 글

Bash shell script 문법  (0) 2024.12.12
리눅스 사용자 및 권한 관리  (0) 2024.12.11
포트포워딩  (0) 2024.12.11
리눅스 파일 시스템 및 구조  (0) 2024.12.10
우분투(Ubuntu)와 리눅스(Linux), 운영체제, 쉘  (0) 2024.12.10

기본

모든 쉘 스크립트 확장자는 .sh

(권장 사항) 파일의 맨 위에는 #! /bin/bash를 적어준다.

  • 이 문서는 bash 쉘 스크립트임을 알린다
    • #! /bin/bash : bash 쉘
    • #! /bin/sh: dash 쉘

bash vs dash

bash와 dash의 대부분의 명령어는 같다

user는 기본적으로 bash를 사용하지만 우분투 시스템에서는 기본적으로 dash를 사용한다.

 

bash

더 많은 기능 지원 (ex history)

기본 설정으로 POSIX 비호환 확장 기능을 제공하나 --posix 옵션을 사용하여 POSIX 모드 사용 가능

기능이 많아서 느릴 수 있음

dash

빠른 실행과 최소한의 리소스 사용을 목표로 함

POSIX 표준을 엄격히 준수

경량이라서 빠름

 

 

실행방법

  • .source [파일이름.sh]
    • 가장 많이 사용되는 방법
  • .  [파일이름.sh]
    • 실행권한이 필요한 경우가 있음

문법

변수

변수이름=값 (띄워쓰기 금지)

모든 값들은 문자열로 취급 (숫자로 취급 x)

$(( )) 를 붙이면 이 안에서 산술 연산으로 처리 됨

실행 결과

shell 명령어의 실행 결과를 변수에 저장할 수 있다

실행 결과

주석

한줄 주석 # 입력하고 그 후에 작성

조건문

if 문은 띄워쓰기를 조심해야 함

fi 로 조건문 종료를 해줘야 함

독보적인 비교 연산자

  • -lt : less than
  • -gt : greater than
  • -eq : equal (수 비교)
  • -ne : not equal
  • -ge : greater or equal
  • -le : less or equal

파일 비교도 가능하다

  • -x : 파일이 존재하고, 권한이 (+x)일 때
  • -f : 파일이 존재하고, Regular 파일일 때
  • etc...

printf

c언어의 printf와 비슷하다

있다는 것 정도만 알아주자

배열

배열을 만들 때는 ( )  사용

배열 값을 출력할 때는 { } 괄호 필수

반복문

for 문법

함수

함수 호출할 때, 함수 이름만 입력하면 됨

 

'Linux > 개념' 카테고리의 다른 글

환경변수  (0) 2024.12.12
리눅스 사용자 및 권한 관리  (0) 2024.12.11
포트포워딩  (0) 2024.12.11
리눅스 파일 시스템 및 구조  (0) 2024.12.10
우분투(Ubuntu)와 리눅스(Linux), 운영체제, 쉘  (0) 2024.12.10

리눅스는 모든 것을 파일로 관리한다!

사용자 권한 

Root

리눅스는 다중 사용자 시스템으로 설계되어 있다.

리눅스가 설치된 컴퓨터 한대를 host라고 한다.

다중 사용자를 관리하기 위한 시스템에서 관리자를 root라고 한다.

  • 최고 권한
  • 프로그램의 설치 / 삭제 관리
  • user 관리
  • etc

일반적인 임베디드 시스템에서는 다른 user 없이 자동으로 user 권한으로 app 실행하도록 구성한다.

사용자 권한 관련 명령어

권한 관련 명령어를 간단하게 둘러보자

sudo adduser [계정명]

  • 계정 추가
  • 해당 계정은 root 권한 없음
  • 홈 디렉토리에 자동 생성
    • /home/[계정명]
  • user을 생성할 경우 그룹이 함께 생성

su [계정명]

  • 해당 계정으로 접속

exit

  • 계정 로그아웃

sudo deluser [계정명]

  • 계정 삭제
  • 홈 디렉토리에 잔여파일 남아있음
  • sudo deluser [계정명] --remove-all-files
    • 잔여 파일이 모두 삭제됨

man deluser

  • deluser의 명령어 설명서 확인

groups [계정명]

  • 특정 user가 소속된 그룹을 확인

sudo addgroup [그룹명]

  • 그룹 추가
  • useradd
    • 전문가용, 세부 옵션을 선택해줘야 한다

sudo gpasswd [옵션] [계정명] [그룹명]

  • -a : 추가
  • -d : 제거

sudo delgroup [그룹명]

  • 그룹 제거

cat /etc/group

  • 리눅스 시스템에서 그룹 관련 정보 (configuration)이 저장된 파일

 

파일 종류

리눅스 파일 종류

  • Regular File
    • 일반 파일
  • Directory File
    • 리눅스 커널 내부에서는 디렉토리도 파일 취급
  • Link File
    • 바로가기와 비슷한 파일
  • Device File
    • 새로운 장치를 연결하면 물리적 장치가 파일화되어 저장
    • 이 파일을 통하여 장치 제어가 가능
    • 프로젝트를 할 때 xboxController를 라즈베리파이에 블루투스로 연결했을 때 파일 생성되는 것을 확인했다
      • /dev/input/event

파일 종류 확인하기

ls -al

/dev에서 파일 목록을 조회보았다.

앞 글자로 파일들의 종류를 확인할 수 있다.

  • - : regular file
  • d : directory file
  • l : link file
  • c, b : device file

파일 권한

파일 권한 관리

파일 권한 관리란 특정 파일에 대한 read / write / execute 권한을 부여하는 것을 의미한다.

파일의 종류 다음으로 나오는 9개의 글자는 아래 순서의 사용자 범위에 따라서 3글자씩 권한을 의미한다.

  • owner
  • owner group
  • other

권한

  • r : read 읽기
  • w : write 쓰기
  • x: execute 실행
  • - : 없음

파일 권한 바꾸기

sudo chmod [세자리 8진수] [파일명]

  • user, group, other의 각각 3자리에 권한을 0~7까지 8진수로 표현
  • 8진수는 권한 유무에 따른 세자리 2진수를 합한 값
  • sudo chmod 421 newfile
    • r - -, - w -, - - e  => 421

sudo chmod [mode] [파일명]

  • user / group / other의 앞글자와 연산자 권한의 앞글자로 표현도 가능하다
  • sudo chmode u=rx newfile
  • 기존 권한에 +, -, = 지정 가능
    • sudo chmod u+w newfile
    • sudo chmod u-w newfile
    • sudo chmod u=w newfile

파일 복사에 필요한 권한

  • 복사할 파일의 r 권한
  • 복사 도착지 디렉토리의 w 권한

디렉토리 복사에 필요한 권한

  • 디렉토리 r 권한
  • 디렉토리 e 권한

'Linux > 개념' 카테고리의 다른 글

환경변수  (0) 2024.12.12
Bash shell script 문법  (0) 2024.12.12
포트포워딩  (0) 2024.12.11
리눅스 파일 시스템 및 구조  (0) 2024.12.10
우분투(Ubuntu)와 리눅스(Linux), 운영체제, 쉘  (0) 2024.12.10

아래 포스트에서 MobaXterm과 가상머신에 설치된 우분투를 ssh로 연결해보았었다.

포트 포워딩을 조금만 더 자세히 알아보자

 

가상머신(Virtual Box)에 우분투(Ubuntu)와 ssh 연결하기

가상머신(Virtual Box)에 우분투(Ubuntu) 올리기해당 포스트에서 이어집니다 가상머신(Virtual Box)에 우분투(Ubuntu) 올리기Virtual 박스 설치아래 링크로 가서 VirtualBox를 다운로드 한다https://www.virtualbox.org

thinkandscratch.tistory.com

 

포트포워딩이란?

포트 포워딩은 네트워크 라우터 또는 방화벽에서 특정 포트 번호로 들어오는 트래픽을 내부 네트워크의 특정 장치(IP 주소)로 전달하는 기술이다.

외부요청 -> 라우터에서 매핑 -> 해당 장치에서 응답

 

VirtualBox의 포트포워딩 규칙을 삭제하고 MobaXterm으로 localhost:22에 접속해보자

연결이 안되는 것을 확인할 수 있다.

 

Ubuntu에서 net-tools를 설치하고 ifconfig 명령어로 가상머신의 ip를 확인해보자

 

sudo apt install net-tools -y
ifconfig

위에서 확인한 주소를 바탕으로 구체적으로 VirtualBox의 포트포워딩 설정을 해주자

호스트는  127.0.0.1 ( localhost ) 게스트 IP는 가상머신의 IP인 10.0.2.15로 설정해주었다.

해당 설정 후 MobaXterm으로 접속하면 정상적으로 작동하는 것을 확인할 수 있다.

 

위 과정을 그림으로 알아보자

라우트 호스팅이 없을 경우 MobaXterm은 실제 머신 주소로 접근하기 때문에 가상 머신으로 접근할 수 없다.

라우트 호스팅으로 실제 머신 주소 접속할 경우 가상머신으로 접속할 수 있도록할 수 있다.

'Linux > 개념' 카테고리의 다른 글

환경변수  (0) 2024.12.12
Bash shell script 문법  (0) 2024.12.12
리눅스 사용자 및 권한 관리  (0) 2024.12.11
리눅스 파일 시스템 및 구조  (0) 2024.12.10
우분투(Ubuntu)와 리눅스(Linux), 운영체제, 쉘  (0) 2024.12.10

리눅스 파일 시스템

리눅스 파일 시스템에서는 / (Root) 에서 파일 관리가 시작한다. (윈도우에서는 C: 같은 드라이브에서 시작)

리눅스는 Root를 기준으로 Tree 형태의 파일 시스템을 갖고 있음

 

Root로 이동해서 파일트리를 확인해보자

아래 명령어를 치면 구조를 볼 수 있다. (hier은 hierarchy를 뜻함)

man hier

출처 https://linuxhandbook.com/linux-directory-structure/

/bin - 바이너리

ls, cp, cd 같은 기본 Shell 명령의 실행 파일이 있다.

대부분 프로그램은 여기 바이너리의 형태로 있고 리눅스 시스템의 모든 유저들에게 접근 가능하다.

 

/dev - Device files

물리적 장치가 파일화되어 저장되는 곳이다. 시스템 디바이스 파일을 저장하고 있는 디렉토리다.

이 파일들은 물리적으로 디스크에 있는 것이 아니라 가상화된 파일들이다.

블루투스 장치를 연결하면 여기에 파일이 생성되는 것을 확인할 수 있다.

 

/etc - Configuration files

관리자와 서비스에서 사용되는 시스템 구성(system configuration) 파일들이 있다. 암호 파일과 네트워킹 파일 등이 여기에 포함된다.

시스템 구성을 변경한 경우 해당 파일에서 변경되는 것을 확인할 수 있다.

 

/usr 

모든 실행 파일, 라이브러리, 대부분의 시스템 프로그램 소스가 있다. 그래서 여기 있는 대부분의 파일은 읽기 전용이다.

  • /usr/bin: 기본 사용자 명령
  • /usr/sbin: 관리자를 위한 추가 명령
  • /usr/lib: 시스템 라이브러리
  • /usr/share: 모든 라이브러리의 공통된 문서가 포함. 예를 들면 /usr/share/manual 에는 메뉴얼 페이지의 텍스트가 있다!

 

/home - 개인 사용자 데이터

홈 디렉토리에는 사용자 데이터와 사용자별 구성 파일이 들어있다.

Linux 시스템에서는 사용자를 만들 때 일반적으로 사용자 홈 디렉토리를 만든다. /home/hyndrome ,  /home/otherUser 위치에 각각 홈 디렉토리를 갖게 됨

명령어 "cd ~" 를 입력했을 때 이동하는 경로가 여기다! 

 

/lib - 실행가능한 바이너리에서 사용할 수 있는 코드. /bin, /sbin 디렉토리의 바이너리에서 필요한 라이브러리를 보관한다.

/usr/bin 과 /usr/sbin 에 있는 바이너리에 필요한 라이브러리는  /usr/lib 디렉토리에 보관되어 있다.

 

/sbin - 시스템 바이너리

/bin 디렉토리와 비슷하나 루트나 sudo 사용자만 실행할 수 있는 바이너리를 포함. s를 super나 sudo로 생각하면 된다.

 

/tmp - 임시 파일

임시 파일을 보관하는 곳. 많은 애플리케이션이 이 디렉토리를 사용하여 임시파일을 저장한다.

일부 Linux 시스템은 오래된 파일을 자동으로 삭제하므로 중요한 것은 여기에 저장하면 안된다.

 

/var - 변수 데이터 파일

시스템 로깅, 사용자 추적, 캐시 및 시스템 프로그램에서 만들고 관리하는 다른 파일과 같은 런타임 정보를 저장하는 곳이다.

여기 저장된 파일은 자동으로 정리되지 않아서 시스템 관리자가 시스템 동작 정보를 정리할 수 있는 곳을 제공한다. 예를 들면  Linux 로그인 정보를 확인하고 싶으면 /var/log/wtmp에 있는 파일의 내용을 확인해보자!

 

/boot - Boot files

LILO, GRUB 같은 부트로더 파일과 외에 kernel 이미지 같은 부팅 관련 파일을 포함한다.

디렉토리가 디스크 시작부분의 파티션에 있는 것이 좋다

kernel 이미지: 컴퓨터가 부팅될 때 로드되는 커널의 바이너리 파일

LILO: Linux에서 사용되던 초기 부트로더, 현대에는 잘 사용되지 않음

GRUB (GRand Unified Bootloader): 멀티부팅과 실시간 수정이 가능한 더 강력하고 유연한 부트로더

부트로더: 컴퓨터가 켜질 때 실행되는 첫 번째 소프트웨어로, 운영체제를 메모리에 로드하고 실행을 시작한다. 하드웨어 초기화, 커널로드, 부팅 옵션을 제공한다

 

/proc - process, kernel 파일

해당 경로에는 현재 실행 중인 프로세스와 커널 매개변수에 대한 정보가 들어있다. 해당 디렉토리의 내용은 여러 도구에서 런타임 시스템 정보를 얻는데 사용된다.

예를 들어 Linux에서 프로세서 정보를 확인하려면  /proc/cpuinfo 파일을 참조하면 된다.

Linux 시스템 메모리 사용량을 확인하려면 /proc/meminfo 파일을 참조하면 된다.

 

/opt - 추가 응용프로그램 패키지 

추가 응용프로그램 패키지 설치 장소이다. 관례적으로 배포판 레포지토리에서  사용할 수 없는 서드파티 애플리케이션을 설치 저장하는 곳이다. 보통 소프트웨어 코드를 opt 에 보관하고 모든 사용자가 실행할 수 있도록 /bin 디렉토리에 있는 바이너리 파일을 링크한다.

 

/root - 루트의 홈 디렉토리

/home/root 대신에 루트의 홈은 /root에 위치한다

 

/media - 이동식 미디어의 마운트 지점

USB, SD카드, DVD 같은 이동식 미디어를 연결하면 /media 디렉토리 아래에 해당 미디어에 대한 디렉토리가 자동으로 생성된다. 여기서 콘텐츠에 엑세스할 수 있다.

 

/mnt - 사용자 마운트 지점

/media와 비슷한데 차이점은 /media은 OS가 자동으로 마운팅해주는 포인트고

/mnt는 사용자가 수동으로 마운트하는 경로다.

 

/srv - 서비스 데이터

시스템에서 제공하는 서비스에 대한 데이터가 들어있다. 예를 들면 HTTP 서버를 실행하는 경우 웹 사이트 데이터를 /srv 디렉토리에 저장하는 것이 좋다.

'Linux > 개념' 카테고리의 다른 글

환경변수  (0) 2024.12.12
Bash shell script 문법  (0) 2024.12.12
리눅스 사용자 및 권한 관리  (0) 2024.12.11
포트포워딩  (0) 2024.12.11
우분투(Ubuntu)와 리눅스(Linux), 운영체제, 쉘  (0) 2024.12.10

우분투(Ubuntu)와 리눅스(Linux) 그리고 운영체제는 무엇일까?

운영체제부터 간단히 알아보자

 

운영체제

운영체제(OS, Operating System)는 컴퓨터 하드웨어와 소프트웨어를 관리하고, 사용자와 하드웨어 간의 인터페이스 역할을 하는 시스템 소프트웨어이다

운영체제는 다양한 자원을 효율적으로 관리하고, 사용자가 프로그램을 실행하거나 작업을 수행할 수 있도록 환경을 제공한다.

리눅스는 운영체제인가?

리눅스는 운영체제가 아니라 커널(Kernel)이다.

 

운영체제 = App + Shell + Kernel 

 

Linux에 App 과 Shell을 추가하여 만든 하나의 운영체제를 리눅스 배포판이라고 한다

Kernel이란?

커널(Kernel)은 운영체제의 핵심 부분으로, 하드웨어와 소프트웨어를 연결하는 중간 역할을 담당한다.

운영체제의 중심 구성 요소로, 시스템 자원을 관리하고 사용자 프로그램이 하드웨어를 사용할 수 있도록 인터페이스를 제공한다.

주요기능

  • 프로세스 관리
  • 메모리 관리
  • 장치 드라이버 관리
  • 파일 시스템 관리
  • 보안 및 권한 관리

우분투

우분투는 리눅스 배포판의 일종이다.

우분투 = 리눅스 + Shell + Application 이다.

 

우분투의 Shell

우분투는 기본적으로 CLI 환경의 Bash shell과 GUI 환경의 GNOME shell을 제공한다.

 

우분투의 App

기본 제공 App

  • 파일 관리자: GNOME Files(기본 파일 탐색기).
  • 웹 브라우저: Mozilla Firefox.
  • 텍스트 편집기: Gedit(기본 텍스트 편집기).
  • 터미널: GNOME Terminal(Bash 쉘 실행 가능).
  • 패키지 관리자: APT(Advanced Package Tool).
  • 소프트웨어 센터: Ubuntu Software(GUI 기반 앱 설치 관리).

추가 설치 가능한 App

  • 개발 도구: Visual Studio Code, IntelliJ IDEA, Vim 등.
  • 그래픽 도구: GIMP, Inkscape 등.
  • 멀티미디어: VLC Media Player, Audacity 등.

Shell

Shell에 대해서 알아보자

 

Shell은 사용자와 Kernel 간의 인터페이스를 제공하는 프로그램이다.

사용자와 Kernel이 상호작용할 수 있도록 명령어를 입력받고, 그 명령어를 실행하는 중간 다리 역할을 한다.

명령줄(CLI)나 Script를 작성하여 Kernel과 작업을 수행할 수 있다.

OS가 부팅된 후 실행되는 프로그램이다.

Shell은 마치 조개 껍데기 같이 커널을 감싸고 있어서 붙여진 이름이라고 한다.

 

다시 위에 올렸던 이미지로 돌아가면

사용자가 Application에서 Kernel 명령을 전달하려면 interface 역할을 하는 Shell을 통해 전달한다.

사용자는 Shell을 통하여 명령에 대한 결과를 확인할 수 있다.

'Linux > 개념' 카테고리의 다른 글

환경변수  (0) 2024.12.12
Bash shell script 문법  (0) 2024.12.12
리눅스 사용자 및 권한 관리  (0) 2024.12.11
포트포워딩  (0) 2024.12.11
리눅스 파일 시스템 및 구조  (0) 2024.12.10

+ Recent posts