* 커서 위치 이동

    > 이전 단어로 이동 : "Esc + b" 또는 "Alt + b"    : backward

    > 다음 단어로 이동 : "Esc + f" 또는 "Alt + f"      : forward

* 삭제 (커서 위치 기준)

    > 커서 이전 단어 삭제 : "Ctrl + w"

    > 커서 다음 단어 삭제 : "Esc + d" 또는 "Alt + d"

    > 커서 이전 내용 모두 삭제 : "Ctrl + u"

    > 커서 다음 내용 모두 삭제 : "Ctrl + k"

 

삭제한 내용은 버퍼에 들어가며 "Ctrl + y" 단축키로 붙여 넣을 수 있다.

'개발 > linux' 카테고리의 다른 글

커널 소스 폴더 구조  (0) 2021.11.29
[번역] 라즈베리파이 커널 빌드 방법  (0) 2021.11.27
리눅스 역사  (0) 2021.11.23
[기초편] Shell 이란?  (0) 2020.08.24
vi 사용법  (0) 2020.06.16

kernel source directory structure

include/ 빌드에 필요한 헤더

Documentation/ 커널 기술 문서 *.rst

kernel/ 핵심 코드 {

    irq/ 인터럽트

    sched/ 스케줄링

    power/ 파워

    locking/ 동기화

    printk/ 콘솔

    trace/ trace

}

mm/ 메모리 관리, 가상 메모리, 페이징

drivers/ 디바이스 드라이버

fs/ 파일 시스템

lib/ 커널이 제공하는 라이브러리

arch/ 아키텍처 관련 코드. 위 폴더 구조가 이 폴더 안에도 있음

'개발 > linux' 카테고리의 다른 글

내가 쓰는 bash 단축키 모음  (0) 2021.12.09
[번역] 라즈베리파이 커널 빌드 방법  (0) 2021.11.27
리눅스 역사  (0) 2021.11.23
[기초편] Shell 이란?  (0) 2020.08.24
vi 사용법  (0) 2020.06.16

* 원문 링크 : https://www.raspberrypi.com/documentation/computers/linux_kernel.html

Building the Kernel

사용하는 OS 환경에서의 default compilers와 linkers는 그 OS에서 동작할 실행 파일을 빌드할 수 있도록 구성되어있다. 이를 native tools이라고 한다. 하지만, 꼭 build를 위해 native tools를 사용하지 않아도 된다. cross-compiler는 build하는 환경(host)의 code가 아닌 run할 환경(target)의 code를 build한다. 이를 cross-compilation이라 한다.

Raspberry Pi kernel의 cross-compilation은 두 가지 이유에서 유용하다.

1. 32bit OS에서 64bit kernel을 build할 수 있고 반대도 가능하다.

2. 일반 노트북에서도 Pi에서 보다 더 빠르게 cross-compile할 수 있다.

아래의 가이드는 native builds와 cross-compilation으로 구분된다. 읽는 이의 상황에 맞게 적절한 section을 선택한다. - 두 방법 사이엔 많은 공통점이 있지만 몇 가지 중요한 차이점도 있다.

Building the Kernel Locally

먼저 Raspberry Pi OS의 최신 버전을 설치한다. Pi를 boot하고 source에 접근할 수 있게 Ethernet을 연결한다.

Pi에서 log-in후 git과 build dependencies를 설치한다.

sudo apt install git bc bison flex libssl-dev make

다음으로 sources를 가져온다. 이는 시간이 소요되는 작업이다.

git clone --depth=1 https://github.com/raspberrypi/linux

* Choosing Sources

위의 "git clone" 명령은 현재 active branch를 다운로드한다(without any history). "--depth=1" 옵션을 생략하면 모든 repository를 다운로드한다(full history of all branches). 하지만 이경우 더 많은 시간과 용량이 필요하다.

다른 branch의 code를 받고 싶다면 "--branch" 옵션을 사용한다.

git clone --depth=1 --branch <branch> https://github.com/raspberrypi/linux

"<branch>" 부분에 원하는 branch 이름을 적는다.

사용 가능한 branches의 정보를 확인하려면 original GitHub repository 링크를 참조한다.

* Kernel Configuration

kernel을 설정한다. 때때로 더 상세하게 설정하거나 필요한 기능을 add or remove하기 위해 다른 source의 patches를 적용하고 싶을 수 있다.

- Apply the Default Configuration

사용하는 Raspberry Pi version에 따라 다음의 명령을 실행하여 default configuration을 준비한다:

For Raspberry Pi 1, Pi Zero, Pi Zero W and Comute Module default build configuration

cd linux
KERNEL=kernel
make bcmrpi_defconfig

 For Raspberry Pi 2, Pi 3, Pi 3+ and Compute Module 3 default build configuration

cd linux
KERNEL=kernel7
make bcm2709_defconfig

- Customising the Kernel Version Using LOCALVERSION

설정한 kernel이 upstream kernel과 같은 version string을 사용하지 않도록 LOCALVERSION 변수를 사용할 수 있다. 이를 통해 "uname" 명령의 출력 결과에서 사용중인 kernel이 내가 build한 kernel임을 알 수 있고 내가 만든 modules가 "/lib/modules"의 기본 modules를 덮어쓰지 않을 수 있다.

그렇게 하기위해 다음 줄을 따라 ".config"를 바꾼다:

CONFIG_LOCALVERSION="-v7l-MY_CUSTOM_KERNEL"

위 설정은 the kernel configuration instructions에서와 같이 GUI상에서 설정할 수도 있다. "General setup => Local version - append to kernel release"에 위치한다.

* Building the Kernel

kernel, modules, device tree blobs를 build하고 install한다; 이 단계는 사용하는 Pi model에 따라 시간이 많이 걸릴 수 있다.

For the 32-bit kernel:

make -j4 zImage modules dtbs
sudo make modules_install
sudo cp arch/arm/boot/dts/*.dtb /boot/
sudo cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/
sudo cp arch/arm/boot/dts/overlays/README /boot/overlays/
sudo cp arch/arm/boot/zImage /boot/$KERNEL.img

For the 64-bit kernel:

make -j4 Image modules dtbs
sudo make modules_install
sudo cp arch/arm64/boot/dts/broadcom/*.dtb /boot/
sudo cp arch/arm64/boot/dts/overlays/*.dtb* /boot/overlays/
sudo cp arch/arm64/boot/dts/overlays/README /boot/overlays/
sudo cp arch/arm64/boot/Image /boot/$KERNEL.img

Note.

Raspberry Pi 2/3/4에서 "-j4" flag는 작업을 4개 코어로 분할하여 compilation 속도를 높힌다.

Cross-Compiling the Kernel

cross-compilation host로는 linux가 적합하다. 가이드의 환경은 Ubuntu다; Raspberry Pi OS도 하나의 Debian 계열 distribution이기 때문에 command lines와 더불어 많은 측면에서 유사하다.

Windows에서 VirtualBox (or VMWare)을 사용할 수도 있다. 다음 Wikihow 링크를 참조한다.

* Install Required Dependencies and Toolchain

sources를 cross-compilation으로 build하기 위해 다음을 실행하여 host에 필요한 dependencies를 다운받는다.

sudo apt install git bc bison flex libssl-dev make libc6-dev libncurses5-dev

이외 다른 것이 필요하다면 comment를 작성하여 이 documentation을 변경할 수 있도록 한다.

Install the 32-bit Toolchain for a 32-bit Kernel

sudo apt install crossbuild-essential-armhf

Install the 64-bit Toolchain for a 64-bit Kernel

sudo apt install crossbuild-essential-arm64

* Get the Kernel Sources

"Building Kernel Locally > Choosing Sources"를 참고한다.

* Build sources

 

to be continue...

'개발 > linux' 카테고리의 다른 글

내가 쓰는 bash 단축키 모음  (0) 2021.12.09
커널 소스 폴더 구조  (0) 2021.11.29
리눅스 역사  (0) 2021.11.23
[기초편] Shell 이란?  (0) 2020.08.24
vi 사용법  (0) 2020.06.16

"디버깅을 통해 배우는 리눅스 커널의 구조와 원리" 책을 읽고 공부한 내용을 정리하기로 한다.

휴대폰, 서버, 네트웍 장비, 전기차, IoT 등 많은 곳에서 리눅스를 사용한다. 데스크탑의 대세는 windows지만 그 외 분야에선 linux가 갑이다. 왜 그럴까? 공짜니까, 소스를 오픈해주니까.

리눅스 커널을 공부하면 파일 시스템, 메모리 관리, 네트워크 등 기술을 구현하는 방법을 알 수 있다. 공부 방법은 두 가지다. 1) 실행한다 2) 코드를 분석한다.

역사

옛날엔 컴퓨터가 싱글 스레드였다. 멀티 스레드를 만들어 보려고 노력을 많이했다. 60년대 AT&T, MIT, GE에서 Multics를 만들었다. 하지만 Multics는 실패했고 이후 멀티 스레드를 지원하는 UNIX를 만든다.

그런데 UNIX를 어셈블리어로 만들어서 CPU Architecture(x86, amd64, ARMv7 등)가 다르면 그에 맞는 UNIX를 다시 개발해야했다. 즉, 호환성 문제가 있었다. 70년대 데니스 리치가 C언어를 만들었다. 이식성, 호환성 문제를 해결했다.

AT&T회사의 벨 연구소에서 만든 UNIX로 회사는 장사를 하려했으나 당시 전화부터 전자, 컴퓨터까지 독점하던 대기업 AT&T는 반독점 소송을 당해 7개의 회사로 쪼개지고 컴퓨터 사업을 할 수 없게된다. 만든 UNIX는 여러 회사에 돈을 받고 팔았는데 그 결과 변종 버전의 UNIX가 많이 탄생한다.

이에 IEEE(전기 전자 기술자 협회; Institute of Electrical and Electronis Engineers)에서 서로 다른 UNIX OS의 공통 API를 정리하여 표준을 만들었다. 그게 POSIX다. (이식 가능 운영 체제 인터페이스; Portable Operating System Interface) 이는 미국의 정부기관에서 컴퓨터 시스템 도입조건으로 요구하기 때문에 windows도 지키는 표준 규격이다.

AT&T로부터 구매해서 자체 개발한 여러 UNIX는 유료였다. 공짜 버전의 UNIX를 만들어보자는 취지로 리처드 스톨만(Richard Matthew Stallman)을 중심으로 사람들이 모여 GNU(Gnu is Not Unix)라는 단체와 FSF(Free Software Foundation)라는 재단을 만든다. 유닉스는 유틸리티 + 커널이다. GNU는 HURD라는 이름의 커널을 만들고 있었는데 진행이 잘 안됐다.

90년대 리누스 토발즈(Linus Tovalds)라는 대학생이 개발한 무료 OS를 GNU에서 GNU 커널로 채택한다. 공짜 UNIX, Linux가 탄생한다. 공짜고 소스가 오픈되어 있으니 사람들이 찾아서 많이 발전했다.

리눅스는 누구나 코드를 작성하고 배포할 수 있다. 다양한 버전의 리눅스가 있다. (Ubuntu, Fedora, Mint, 등)

리눅스는 다양한 개인과 단체가 함께 개발한다.

CPU 회사는 리눅스 커널 중 CPU에 따라 구현이 달라지는 부분을 개발한다. (시스템 콜, 익셉션, 컨텍스트 스위칭)

SoC(System on Chip) 집적회로 회사는 CPU 회사로 부터 toolchain을 제공받아 본인 회사의 제품에 맞게 리눅스 커널 코드를 수정하고 드라이버를 추가한다.

보드 회사는 SoC회사로 부터 리눅스 코드(커널 + 드라이버)를 제공받아 임베디드 리눅스를 개발한다.

공부 주제

디바이스 드라이버, 커널, CPU 아키텍처, SoC, HAL(Hardware Abstraction Layer), 빌드 스크립트, Git

환경

보드는 지인을 통해 얻은 "Raspberry Pi 2 Model B V1.1"을 사용한다. 커널 버전은 rpi-5.10y로 한다.

 

'개발 > linux' 카테고리의 다른 글

커널 소스 폴더 구조  (0) 2021.11.29
[번역] 라즈베리파이 커널 빌드 방법  (0) 2021.11.27
[기초편] Shell 이란?  (0) 2020.08.24
vi 사용법  (0) 2020.06.16
하드링크, 심볼릭링크 개념 및 사용법  (0) 2020.06.02

Shell 이란? 리눅스 커널과 사용자 간의 가교 역할을 하는 소프트웨어로 본쉘, C쉘, 콘쉘, bash, dash 등 다양한 쉘이 있다. 일반적으로 우분투의 경우 사용자는 bash 쉘, 시스템은 dash 쉘을 사용하도록 기본 설정되어 있다.

* 사용자 쉘 확인

echo $SHELL
cat /etc/passwd

* 시스템 쉘 확인

ls -l /bin/sh

* 사용자 쉘 변경

/etc/passwd 파일의 내용을 수정하거나 chsh(change shell)명령을 이용한다. 변경후엔 재시작을 해야 적용된다.

* 사용 가능한 Shell 목록 확인

cat /etc/shells

Shell은 크게 3가지 역할을 한다. (1. 명령어 해석기 기능, 2. 프로그래밍 기능, 3. 사용자 환경 설정 기능) Shell 의 종류에 따라 차이가 있으나 대개의 경우 shell 실행 후 사용자에 맞는 환경을 구성할 수 있도록 초기화 파일을 제공한다. 따라서 새롭게 로그인 할 때 마다 적용하고 싶은 명령이나 변수, 설정 등이 있다면 해당 파일에 적어 놓으면 된다. 초기화 파일은 크게 2가지로 시스템 환경 설정 파일사용자 환경 설정 파일로 나눌 수 있다. 시스템 환경 설정 파일은 전 사용자 공통 환경 설정 파일이며 /etc/ 에 위치한다. 사용자 환경 설정 파일은 개별 사용자의 환경을 설정하며 해당 사용자의 홈 디렉터리에 있다. 대표적인 bash shell의 환경 설정 파일은 아래와 같다.

* 시스템 환경 설정 파일

/etc/profile 각 파일, 디렉터리의 존재 유무를 확인후 실행한다. (/etc/bash.bashrc, /etc/profile.d/*.sh 실행)
/etc/bash.bashrc 시스템 공통으로 적용되는 .bashrc 파일 (bash run commands)
/etc/profile.d/*.sh 필요한 설정 파일을 추가한다.

참고1

* 사용자 환경 설정 파일

~/.profile .bashrc 와 같은 다른 환경 설정 파일들의 실행, PATH 추가한다.
~/.bashrc 환경 변수, alias, function 등을 설정한다.
~/.bash_logout 로그 아웃시 실행할 함수 등을 설정한다.

환경 설정 파일을 수정한 후 적용하기 위해선 source "환경 설정 파일" 또는 . "환경 설정 파일" 을 사용한다.

'개발 > linux' 카테고리의 다른 글

[번역] 라즈베리파이 커널 빌드 방법  (0) 2021.11.27
리눅스 역사  (0) 2021.11.23
vi 사용법  (0) 2020.06.16
하드링크, 심볼릭링크 개념 및 사용법  (0) 2020.06.02
리눅스 명령어 약자 확인하기  (0) 2020.05.28

vi는 텍스트 편집기입니다. 메모장이나 한글, 워드 같은 친숙한 편집 프로그램을 떠올리면 됩니다. 우리는 편집기에서 원하는 곳으로 커서를 이동하고 텍스트를 쓰고, 지우는 등의 일을 합니다. 가끔은 어떤 문자열을 검색해서 다른 문자열로 한꺼번에 치환하기도 합니다. 일반 편집기에서 하는 일을 vi로 할 수 있으면 vi를 쓸 줄 아는 것입니다.

vi는 세가지 모드를 제공합니다. 1. 명령모드, 2. 편집모드, 3. 마지막행 모드 입니다. 처음 vi 를 실행하면 명령모드로 실행됩니다. 명령모드에선 키보드의 키를 누르면 특정한 동작을 하도록 약속되어있습니다. 예를 들어 'x' 를 입력하면 커서가 있는 곳의 문자를 하나 지우고 'ZZ' 를 입력하면 작업중인 파일을 저장하고 닫습니다. 글을 편집하려면 편집 모드로 이동해야합니다. 당연히 편집 모드로 이동하기 위한 약속된 키가 있습니다.

vi를 처음 접하면 모드에 대한 개념이 없어서 알파벳을 눌렀는데 글이 안나오고 난데없이 문자가 삭제되거나 커서가 이동되니 당황하게되고 어렵다고 느낍니다. 하지만 vi는 CUI(Character User Interface) 환경에서 사용할 수 있는 좋은 편집기입니다. 알아두면 좋습니다. 모드간 전환하는 키는 아래 그림과 같습니다.

1. 편집

위 그림처럼 명령 모드에서 편집모드로 전환하는 키가 여러가지인 것은 현재 커서 위치를 기준으로 어디에서 편집을 시작할 것인지 정하기 위함입니다. 명령모드에선 커서가 한 문자의 위에 위치합니다. 편집모드가 되면 문자와 문자사이로 이동합니다.

위 그림에서 현재 커서는 별모양 아래 this 의 s 문자 위에 있습니다. 따라서 편집을 시작한다면 s 문자의 왼쪽에서 시작할건지 오른쪽에서 시작할건지를 알려줘야합니다. 명령모드에서 대소문자 i, a 와 I, A 키를 누르면 편집모드로 전환하며 위의 그림처럼 현재 커서를 기준으로 바로 앞, 바로 뒤, 현재 행의 맨 앞, 맨 뒤에서 편집을 시작할 수 있습니다. 대소문자 o와 O는 현재 행의 바로 밑 또는 위에 빈 행을 만들고 그 행의 처음부터 편집을 시작합니다. 당연하게도 편집모드에서 키보드의 문자키 입력은 바로바로 모니터에 출력됩니다. 명령모드로 돌아갈 때는 ESC 키를 누릅니다.

2. 커서 이동

원하는 위치에서 편집을 시작하려면 명령모드에서 커서의 위치를 이동하는 방법을 알아야합니다. 글자, 단어, 페이지 단위 등 다양한 방법의 커서이동이 가능합니다. 원하는 행의 시작 위치로 커서를 바로 이동시킬 수도 있습니다.

h, j, k, l 키는 한 글자만큼 왼쪽, 아래, 위, 오른쪽으로 커서를 이동합니다. vi 버전에 따라 방향키를 지원하기도 합니다. 단어간 커서 이동은 b, w, e 키를 이용합니다. 페이지 단위 커서 이동은 PgUp, PgDn 키를 이용하면 편리합니다. Ctrl + f, b 는 PgDn, PgUp 키와 같은 기능입니다. Ctrl + u, d 는 한 페이지의 절반만큼 위아래로 커서를 이동합니다. 임의의 행으로 이동하고자 할 땐 행번호를 누르고 G를 입력하면 됩니다. 예를 들어, 1행으로 이동하고자 할 경우 1G 를 입력합니다. 파일의 맨 끝으로 이동하고자 할 땐 그냥 G를 누르면 됩니다.

3. 검색

ㅇㅇ

[개념]

간단하게 설명하자면 하드링크는 동일한 파일에 다른 이름을 붙히는 것입니다. 심볼릭 링크는 바로가기 입니다.

원본 파일의 하드링크를 만들었을 때 이 둘은 동일한 파일이기 때문에 하나를 변경하는 것은 둘 모두를 변경하는 것과 같습니다. C++의 참조자라고 생각하면 좋겠네요. 하드링크는 동일한 변수를 서로다른 이름으로 부르는 C++의 참조자와 비슷합니다. 대용이라는 친구가 있고 별명이 빅드래곤이라고 가정한다면 대용이라고 부르던 빅드래곤이라고 부르던 동일한 사람을 부르는 것이죠. 마찬가지로 /home/sinsisao/test.original이라는 파일과 그 하드링크인 /home/sinsisao/UbuntuStudy/test.hardlink가 있다면 경로나 파일 이름은 다르지만 둘은 동일한 데이터 블록을 가진 동일한 파일을 칭하는 것입니다. 한 가지 유의할 점은 둘중 하나를 삭제한다는 것의 의미가 파일의 삭제가 아닌 하드링크의 삭제라는 것입니다. 사용하던 이름 하나를 없애는거라고 생각하시면 쉽게 이해가 될듯합니다. 어떤 경우에 하드링크를 주로 사용하는지는 잘 모르겠습니다. 예상해보건데 아마 백업용으로 사용하지 않을까 싶네요.

+ 디렉터리의(폴더의) 하드링크를 만들 수 없습니다.

+ 다른 디스크에 하드링크를 만들 수 없습니다. 예를 들어 C드라이브에 있는 파일의 하드링크를 D드라이브에 만들 수 없습니다. 이유는 잘 모르겠습니다.

 

심볼릭 링크는 "윈도우 바로가기 만들기"의 바로가기와 비슷합니다. 말그대로 특정 경로의 파일을 가리킵니다. 해당 파일이 삭제되거나 다른 경로로 이동된다면 바로가기를 사용할 수 없습니다. 사용예로는 하드디스크를 /mnt/hdd와 같은 곳에 마운트한 후 본인의 home에 심볼릭 링크를 만들어 이용할 수 있겠습니다.

또, 잘 알진 못하지만 alternatives 라는 것에서 사용하는듯 합니다. alternatives의 대략적인 개념은 test2.2test3.3 식으로 test라는 프로그램의 2.2버전과 3.3버전 바이너리를 모두 가지고 있을 때, 사용하고자하는 버전 바이너리의 심볼릭 링크를 test 라는 이름으로 만들어서 쓰는 겁니다. 아마 맞을걸요...

+ 디렉터리의 심볼릭링크를 만들 수 있습니다.

+ 다른 디스크에 심볼릭링크를 만들 수 있습니다.

 

[사용]

// hard link
ln xxx yyy
// symbolic link
ln -s xxx yyy

하드링크, 심볼릭 링크 모두 ln 이라는 동일한 명령어를 사용해서 만듭니다. 다만, symbolic link 의 경우 -s 옵션을 줍니다. xxx 는 원본 파일을 의미하고 yyy는 새로 생성할 링크 파일을 의미합니다.

'개발 > linux' 카테고리의 다른 글

[기초편] Shell 이란?  (0) 2020.08.24
vi 사용법  (0) 2020.06.16
리눅스 명령어 약자 확인하기  (0) 2020.05.28
우분투 터미널 명령행에서 쓰던 단어, 행 지우는 단축키  (0) 2020.05.14
유용한 링크 모음  (0) 2020.05.10

man 이라는 명령어가 있습니다. manual 을 뜻하며 명령어 다음에 오는 인수에 대한 설명을 제공합니다. 이 man 명령어를 통해 특정 명령어가 어떤 이름의 축약인지 확인할 수 있습니다. 사용의 예는 아래와 같습니다.

:~$ man man
// an interface to the on-line reference manuals ...
:~$ man ls
// list directory contents ...
:~$ man pwd
// print name of current/working directory ...
:~$ man mv
// move (rename) files ...

물론 그렇다고 man 명령어로 모든 명령의 내용을 확인할 수 있는 것은 아닙니다. man 명령어로 확인이 가능하려면 보이고자 하는 메뉴얼을 프로그램 내부 어딘가에 man에서 규정하는 양식으로 작성해 놓아야 볼 수 있지 않을까? 생각합니다. 한 예로 change directory 를 뜻하는 cd 명령의 경우 man 명령으로 확인할 수 없습니다.

:~$ man cd
No manual entry for cd

'개발 > linux' 카테고리의 다른 글

vi 사용법  (0) 2020.06.16
하드링크, 심볼릭링크 개념 및 사용법  (0) 2020.06.02
우분투 터미널 명령행에서 쓰던 단어, 행 지우는 단축키  (0) 2020.05.14
유용한 링크 모음  (0) 2020.05.10
서문  (0) 2020.05.10
user@host:~$ man date|

위와 같이 명령으로 man date를 치고 엔터를 누르기 전 커서가 맨 뒤에 있는 상황에서

    * 바로 앞의 date 단어를 지우고 싶다면 Ctrl + w

    * 모든 입력을 지우고 싶다면 Ctrl + u

를 입력하면 됩니다. 사실 별거 아니고 되게 간단한 거지만 책을 읽기 전까진 모르고있었네요.

shift + home 이 안되서 많이 불편했지만 그냥저냥 잘살았었죠. 이젠 잘 지울 수 있습니다. ㅎㅎ

그냥 엔터를 연타하면 편하지만 위 단축키가 요긴하게 사용될만한 상황도 있겠죠? 어쨋든 아는 건 힘이니까요. :)

'개발 > linux' 카테고리의 다른 글

vi 사용법  (0) 2020.06.16
하드링크, 심볼릭링크 개념 및 사용법  (0) 2020.06.02
리눅스 명령어 약자 확인하기  (0) 2020.05.28
유용한 링크 모음  (0) 2020.05.10
서문  (0) 2020.05.10

* 만화로 보는 리눅스 역사 = "https://joone.net/"

* 커널 다운로드 = "https://www.kernel.org/"

* 리눅스 배포판 확인 = "http://futurist.se/gldt/"

 

'개발 > linux' 카테고리의 다른 글

vi 사용법  (0) 2020.06.16
하드링크, 심볼릭링크 개념 및 사용법  (0) 2020.06.02
리눅스 명령어 약자 확인하기  (0) 2020.05.28
우분투 터미널 명령행에서 쓰던 단어, 행 지우는 단축키  (0) 2020.05.14
서문  (0) 2020.05.10

+ Recent posts