make와 cmake를 다루기 전에 gcc 빌드 과정을 간단히 알아보자

gcc 빌드 과정

빌드(build)란?

소스코드 => 실행 가능한 프로그램으로 변환하는 과정

아래의 과정을 거친다

https://medium.com/@laura.derohan/compiling-c-files-with-gcc-step-by-step-8e78318052

전처리 (Preprocessing)

  • 전처리기 지시어 (#include, #define 등)를 처리
  • 헤더 파일을 포함하고 매크로를 확장하며 조건부 컴파일 수행
  • 결과물은 전처리가 끝난 C언어 형태

컴파일 (Compilation)

  • 전처리된 소스코드(.i 파일)을 기계어로 변환 가능한 중간 단계의 어셈블리 코드로 변환
  • 이 과정에서 문법 오류나 타입 관련 오류 등이 발견
  • 결과물은 어셈블리 코드 파일(.s)

어셈블링 (Assembling)

  • 어셈블리 코드 (.s)를 목적파일(Objective File) (.o)로 변환
  • 목적파일은 기계가 읽을 수 있는 이진코드 형태이지만 완전히 실행가능한 상태는 아님 

링킹(Linking)

  • 목적파일(.o)와 필요한 여러 라이브러리 파일을 연결하여 실행 파일 (.out 또는 .exe)을 생성
  • 링커는 프로그램에서 사용하는 모든 함수와 변수가 정의된 위치를 찾아 연결
  • 특정 함수나 변수가 정의되지 않았다면 링킹 오류 발생

 

크게 묶으면

하나의 소스코드를 Preprocessing, Compilation, Assembling을 거쳐서 Objective File을 만들고,

만들어진 Object files + 라이브러리들을 모아 Linking 하는 것이 빌드의 과정이다.

 

예시 진행

간단하게 예시로 진행하자.

폴더를 만들고 해당 폴더  안에 main.c, hyndrome.c, hyndrome.h 를 생성해보자

// main.c
#include <stdio.h>
#include "hyndrome.h"

int main()
{
    printf("I'm main!\n");
    Hyndrome();

    return 0;
}
// hyndrome.h
void Hyndrome();
// hyndrome.c
#include <stdio.h>

void Hyndrome()
{
    printf("I'm HYndrome!\n");
}

 

.c파일을 각각 컴파일, 어셈블링하자

gcc -c main.c
gcc -c hyndrome.c
ls

만들어진 .o 파일들과 라이브러리 함수들을 하나로 Linking하자

gcc main.o hyndrome.o -o go
ls
./go

GCC 는 똑똑해서 굳이 나눠서 작업하지 않아도 동작한다.

만들었던 .o 파일과 실행 파일을 지우고 다시 빌드해보자

rm -r *.o
rm -r ./go
ls
gcc ./*.c
ls
./a.out

 

빌드 자동화 시작

bash shell script (.sh)를 활용해서 위 과정을 다시 진행해보자

build.sh 파일을 생성하고 아래 코드를 작성한다.

#! /bin/bash
gcc -c ./main.c
gcc -c ./hyndrome.c
gcc ./main.o ./hyndrome.o -o ./go
rm -r ./*.o

 

source 로 .sh 파일을 실행할 수 있다.

source build.sh
./go

 

이렇게 shell script로 빌드를 자동화할 수는 있지만

중간에 파일 하나라도 변경점이 생긴다면 모든 파일을 다시 빌드해야하는 문제점이 있다!

make

소프트웨어 빌드를 자동화하는 데 사용되는 도구로, 주로 소스 코드를 컴파일하여 실행 가능한 프로그램으로 만드는 작업을 간소화하기 위해 사용된다

Makefile이라는 특별한 형식의 파일과 문법을 사용한다

 

make 설치

sudo apt install make -y

 

make 사용방법

  1. Makefile 스크립트 파일을 만든다
  2. make 명령어로 실행한다

예제 실습

파일 이름을 Makefile로 아래 코드를 작성한다.

go : main.o hyndrome.o
    gcc main.o hyndrome.o -o go
main.o : main.c
    gcc -c main.c
hyndrome.o : hyndrome.c
    gcc -c hyndrome.c
clean :
    rm -r ./*.o ./go

정상 작동 확인

다시 make를 사용하여 빌드를 하면 변경사항이 없어서 build가 되지 않는 것을 확인할 수 있다.

그러면 hyndrome.c 파일을 조금 수정해서 다시 빌드해보자.

// hyndrome.c
#include <stdio.h>

void Hyndrome()
{
    printf("I'm updated HYndrome!\n");
}

처음 make를 사용해서 빌드했을 때 와 다르게 gcc -c main.c 는 컴파일 안된 것을 확인할 수 있다.

변동사항이 생긴 hyndrome.c, hyndrome.c 변동사항으로 인해 변화가 생긴 hyndrome.o에 연동된 빌드들만 다시 진행된 것을 확인할 수 있다!

make는 특정 키워드로 동작시킬 수 있다

make clean

make 장점

  • build 자동화
    • 기술된 순서대로 build 작업을 수행하는 자동화 스크립트 지원
  • build 속도 최적화
    • 파일간의 의존성을 추적하여 파일이 변경된 경우에만 컴파일한다!

CMake

Makefile을 자동으로 생성해주는 build system

크로스 플랫폼 빌드 자동화 도구

 

CMake 설치

sudo apt install g++ cmake -y

 

CMakeList.txt 파일을 작성한다

cmake_minimum_required(VERSION 3.5)
project(HYndromeProject)

# 빌드할 실행 파일(go)과 소스 파일들을 정의합니다.
add_executable(go main.c hyndrome.c)

# 헤더 파일이 있는 디렉토리를 포함시킵니다.
include_directories(${CMAKE_CURRENT_SOURCE_DIR})

# 실행 파일(go)이 사용하는 헤더 파일(hyndrome.h)을 명시합니다.
target_include_directories(go PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

 

cmake한다

cmake .

 

약 200 줄 정도의  Makefile이 생성된 것을 확인할 수 있다!

 

생성된 Makefile로 빌드해보자!

정상적으로 빌드된 것을 확인할 수 있다.

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

사용자 권한 

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

기존 우분투 아카이브가 느려서 카카오 미러 아카이브로 변경해보자

 

해당 설정은 /etc/apt/source.list에서 확인할 수 있다.

/etc는 관리자와 서비스에서 사용되는 시스템 구성(system configuration) 파일들이 저장되는 경로이다

/etc/apt/source.list 을 vim으로 열어보자

sudo vi /etc/apt/source.list

 

 

찾아바꾸기로 기존 우분투 아카이브를 카카오미러 아카이브로 변경하자
:%s/[검색어]/[변경]/g    찾아바꾸기

:wq      저장하고 나가기

:%s/kr.archive.ubuntu.com/mirror.kakao.com/g
:wq

 

해당 변경 내역을 저장해주자

sudo apt update

 

'Linux > tips' 카테고리의 다른 글

압축, 압축 해제  (0) 2024.12.12
Vim 설치, 단축키, vimrc  (0) 2024.12.10
bash shell script - 명령어 정리  (0) 2024.12.10

텍스트 editor 중 하나인 Vim을 사용해보자!

vim 설치

sudo apt install vim -y

Vim 단축키

  • i
    • command mode ⇒ insert mode
  • v
    • command mode ⇒ visual mode
  • esc
    • insert mode ⇒ command mode
  • :wq
    • w: 저장, q: 종료
  • q!
    • 강제 종료
  • ctrl + f
    • 찾기
  • ctrl + f + 화살표
    • 다음 / 이전 찾기
  • ctrl + h
    • 모두 바꾸기
  • [라인 수] + dd
    • [라인 수] 만큼 잘라내기
  • p
    • 현재 커서 앞에 붙여 넣기
  • P
    • 현재 커서 뒤에 붙여 넣기
  • 마우스 더블 클릭
    • 복사
  • 휠 키
    • 붙여 넣기
  • visual mode (터미널에서 지원하는 복사/ 붙여넣기와 독립적)
    • 화살표
      • 영역 선택
    • y
      • 복사
    • p
      • 붙여 넣기
  • gg
    • 페이지 상단 이동
  • shift + g
    • 페이지 하단 이동
  • u
    • 실행 취소
  • ctrl + r
    • 다시 실행
  • /[검색어] 위에서 아래로 내려가면서 검색
    • n 다음 검색
    • shift + n 이전 검색
  • ?[검색어]
    • 아래쪽에서 위로 올라가면서 검색
  • :%s/[검색어]/[변경]/g
    • 검색어 전부를 변경
      • g: global의 약어로, 파일 전체의 단어를 바꾸는 필수 옵션
      • i: 대소문자 구별
      • c: 하나씩 확인하면서 진행
  • o
    • 커서 아래쪽에 라인 추가하면서 이동
  • O
    • 커서 위쪽에 라인 추가하면서 이동
  • cc
    • 현재 커서가 있는 라인 모두 지우면서 앞쪽으로 커서 이동
  • I
    • home + insert
  • A
    • end +insert
  • cw
    • 단어 단위로 지우면서 insert
  • cc
    • 한줄 지우면서 insert
  • C
    • 커서 뒤에 지우면서 insert
  • gg + V + G
    • 전체 선택: 제일 앞으로 이동 ⇒ 행단위 비주얼 모드 ⇒ 제일 뒤로 이동
      • V
        • 행 단위 비주얼 모드
  • :set nonu
    • 소스코드를 복사할 때 라인 번호가 같이복사될때
  • :vsp
    • 거울창 띄우기
      • :sp 거울창 띄우기 (세로)
      • :vps 거울창 띄우기 (가로)
      • ctrl + w + 방향키 창 전환
      • vimdiff [파일1] [파일2] 두 개 파일 텍스트 비교하기
  • w
    • 단어 시작 문자 위치로 이동
  • e
    • 단어 마지막 문자 위치로 이동
  • home = shift + 6
  • end = shift + 4
  • gg = G
    • 전체 들여쓰기

vimrc 유용 설정

vimrc는 vim의 설정 파일이다.

' . ' 으로 시작하는 파일은 숨김파일이다.

vimrc 파일 생성

vi ~/.vimrc

 

유용한 설정

set hlsearch " 검색어 하이라이팅
set nu " 줄번호
set autoindent " 자동 들여쓰기
set scrolloff=2
set wildmode=longest,list
set ts=4 "tag select
set sts=4 "st select
set sw=1 " 스크롤바 너비
set autowrite " 다른 파일로 넘어갈 때 자동 저장
set autoread " 작업 중인 파일 외부에서 변경됬을 경우 자동으로 불러옴
set cindent " C언어 자동 들여쓰기
set bs=eol,start,indent
set history=256
set laststatus=2 " 상태바 표시 항상
"set paste " 붙여넣기 계단현상 없애기
set shiftwidth=4 " 자동 들여쓰기 너비 설정
set showmatch " 일치하는 괄호 하이라이팅
set smartcase " 검색시 대소문자 구별
set smarttab
set smartindent
set softtabstop=4
set tabstop=4
set ruler " 현재 커서 위치 표시
set incsearch
set statusline=\ %<%l:%v\ [%P]%=%a\ %h%m%r\ %F\
" 마지막으로 수정된 곳에 커서를 위치함
au BufReadPost *
\ if line("'\"") > 0 && line("'\"") <= line("$") |
\ exe "norm g`\"" |
\ endif
" 파일 인코딩을 한국어로
if $LANG[0]=='k' && $LANG[1]=='o'
set fileencoding=korea
endif
" 구문 강조 사용
if has("syntax")
 syntax on
endif

'Linux > tips' 카테고리의 다른 글

압축, 압축 해제  (0) 2024.12.12
아카이브 변경하기  (0) 2024.12.11
bash shell script - 명령어 정리  (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

화면 출력 관련

화면 지우기

clear

화면 출력 stop: Ctrl + s

화면 출력 start: Ctrl + q

복사, 붙여 넣기

복사: Ctrl + Insert

붙여넣기: Shift + Insert

파일 조작 관련

파일 생성, 타임스탬프 업데이트

touch: 파일의 접촉시간을 나타냄, 없으면 빈 파일을 생성

touch newFile

 

파일 삭제

rm: ReMove

  • [파일명]: 해당 파일 삭제
  • -r [디렉토리명]: 디렉토리와 그 안에 포함된 모든 파일 및 하위 디렉토리 삭제 (r은 recursive)
rm newFile
rm -r folder1

 

파일 이동

mv: MoVe

  • [파일명] [경로]: 해당 파일을 해당 경로로 옮긴다 
  • [파일명] [새로운 파일명]: 이름 변경
mv newFile Documents/
mv newFile newNewFile

 

파일 복사

cp: CoPy

  • [파일명] [경로]: 해당 파일을 경로에 복사
  • -r [복사할 경로명] [목적경로]: 해당 경로의 파일들을 목적 경로로 복사

 

디렉토리 관련

디렉토리 내 목록 보기

ls: LiSt

  • -a: all 숨김 파일까지 출력
  • -l : 리스트 형태로 상세 보기
ls
ls -al

 

현재 디렉토리 확인하기

pwd

디렉토리 이동

디렉토리 이동하기

cd: Change Directory

  • [디렉토리 경로]: 해당 경로로 이동
    • 하위 디렉토리: 상위 경로에서 하위 경로로 이동할 경우
    • 절대 경로: '/' 부터 시작하는 파일 시스템 루트부터 시작하는 경로
    • 상대 경로: ./ 부터 현재 경로 입력
  • ..: 상위 디렉토리로 이동
  • ~: 홈 디렉토리로 이동
  •  -: 이전 디렉토리로 이동
cd Documents
cd /home/hyndrome/Documents
cd ./Documents
cd ..
cd ~
cd -

디렉토리 조작

디렉토리 생성

mkdir: MaKe DIRectory

  • [디렉토리명]: 디렉토리 생성 
  • -p [상대경로]: 디렉토리 하위 경로까지 한번에 생성 (p는 parent를 뜻함)
mkdir win
mkdir ./folder1/folder2/folder3/

 

디렉토리 제거

rmdir: ReMove DIRectory

  • [디렉토리명]: 해당 디렉토리 삭제 - 디렉토리 내에 파일이 있으면 삭제가 되지 않음

rm -r: 디렉토리와 그 안에 포함된 모든 파일 및 하위 디렉토리 삭제 - 삭제는 되돌릴 수 없다(r은 recursive) 

rm -r

 

디렉토리 복사

cp -r [복사할 경로명] [옮길 경로]

cp -r newFolder/ Documents/

 

파일 관리

cat [파일명]

cat /proc/cpuinfo
  • 파일 내용을 출력
  • cat /proc/cpuinfo : cpuinfo에 저장된 내용 출력
  • 내용을 파일로 저장
    • > : 파일에 내용 쓰기 : cat /proc/cpuinfo > abc
    • >> : 파일에 내용 덮어쓰기 : cat /proc/cpuinfo >> abc

find [경로] -name [파일명] -type 옵션]

sudo find / -name "*info" -type f
  • 파일 찾는 명령어
  • 경로에 / 를 넣으면 모든 곳에서 검색 (sudo 권한 필요)
  • 파일만 찾기: -type f
  • 디렉토리만 찾기: -type d

grep [텍스트]

grep kB /proc/meminfo
ls -la | grep test*
  • 문자열 검색
  • 다른 명령어 출력 결과에 |(파이프)를 사용하는 방식으로 많이 사용

du -sh [파일명]

  • 디렉토리 or 파일의 용량을 확인
  • -s : 디렉토리 개별이 아닌, 총 사용량만을 출력
  • -h : 인간 옵션 (보기 쉽게 출력) 

file [파일명]

  • 파일 종류 확인
  • 파일 or 디렉토리 or 실행파일 등 구분이 가능
  • file /dev/stdout

which [명령어]

  • 명령어의 실행가능한 위치를 찾음
  • 예시
    • sudo apt install sl -y : sl 앱 설치
    • which sl
    • 결과: /usr/games/sl

기타

echo [텍스트]

  • 텍스트를 화면에 출력
  • 띄워쓰기를 하나만 인정
  • 문자 그대로 출력

date

  • 현재 시간 확인 가능
  • 시간 변경 : date -s "20241212 08:33:00"

uptime

  1. 현재 시간, 시스템 시간과 커널이 부팅된 후 시간을 나타냄
  2. 접속자 수와 CPU 시스템 부하율 나타냄

dmesg

  • 커널의 로그 메세지를 출력
  • 부팅 이후 일어날 모든 커널의 로그를 시간 순으로 출력

history

  • 입력한 모든 명령어가 출력
  • ![숫자]를 이용해 해당 번호의 명령어 다시 실행 가능

ln -s [원본파일명] [복사본파일명]

  • link 파일 생성 (바로가기와 비슷한 파일)
  • link 파일을 수정하면 원본에 영향을 미침

 

'Linux > tips' 카테고리의 다른 글

압축, 압축 해제  (0) 2024.12.12
아카이브 변경하기  (0) 2024.12.11
Vim 설치, 단축키, vimrc  (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