본문 바로가기
네이버클라우드/Linux

Linux 1일차 (2023-04-24)

by prometedor 2023. 4. 24.

리눅스 실습 환경 갖추기

1. 계정 받기

    ㄴ server ip : x.x.x.x
    ㄴ id : j23
    ㄴ pw : 1
 

2. Putty 설치

putty.exe 다운로드
https://the.earth.li/~sgtatham/putty/latest/w64/putty.exe
ㄴ 위 링크 다운 받아 설치


3. 글꼴 설치(D2coding)

D2coding 글꼴 압축풀고 설치
https://github.com/naver/d2codingfont/blob/master/D2Coding-Ver1.3.2-20180524.zip
 
 
 

자주 사용하는 특수문자들(윈도우에서는 잘 쓰지 않는)

1.  ~  :  tilde, 물결, 출렁이, HOME  -->  홈 디렉터리를 의미(자기 집) ~ace (ace네 집)
2.  |  :  pipe, 파이프  -->  명령어와 명령어를 연결해줌
3.  `  :  back quote, back tick  -->  명령어 결과물 저장
4.  '  :  single quote, 작은 따옴표, 홑 따옴표
5.  "  :  double quote, 큰 따옴표, 겹 따옴표
 
 

자주 사용하는 alias 설정

$alias l='ls -Alh'--> 그동안 입력한 명령어 모두 노출
$alias c='clear'  --> 화면 깨끗하게 만들기
$alias h='history'  --> 목록보기(자세히)

$alias cp='cp -i'  --> -i 옵션 : 물어보고 실행 
$alias mv='mv -i'  --> -i 옵션 : 물어보고 실행
$alias df='df -h'
$alias du='du -sh'  --> 디스크 용량 보기
$alias li='ls -Ali'
$alias lh='ls -Alh'

$alias di='dnf -y install'  --> 설치 명령어
$alias dq='dnf list --installed | grep '  --> 설치된 패키지 검색
$alias dc='dnf list --installed | wc -l'  --> 설치된 패키지 수 검색


 
** 주의할 점
1    l    I    |   구분  -->  1(숫자), l(소문자 L), I(대문자 i), | (pipe, 파이프)
 
 

자주 사용하는 명령어

1. who : 로그인 정보
    ㄴ who | sort | nl  --> sort : 정렬 / nl : 행 번호 붙이기(행 번호를 출력하면서 어떤 사용자가 접속하였는지 정렬)
2. clear : 화면 깨끗하게 만들기
3. whoami : 현재 로그인한 사용자의 id 출력(자신의 id)
4. cal : 이번 달 달력 보기
    ㄴ cal 2023 : 2023년 전체 달력 보기
    ㄴ cal 12 2000 : 2000년 12월 달력 보기
    ㄴ cal 2030 : 2030년 전체 달력 보기
5. date : 현재 날짜와 시간 보기
    ㄴ date +%D  --> 04/24/23
    ㄴ date +%y  --> 23
    ㄴ date +%Y  --> 2023
    ㄴ date +%Y%m%d  --> 20230424
    ㄴ date +%Y%m%d:%H:%M:%S  --> 20230424:12:56:39
    ㄴ date +%j  -->  114 (참고 : https://nsidc.org/data/user-resources/help-center/day-year-doy-calendar)
6. hostname : 시스템의 이름 확인
7. echo ~ : 나의 집은 어디인가?    

    ㄴ echo $HOME  ->  나의 집은 어디인가?
    ㄴ echo 문자열  ->  주어진 문자열을 터미널에 출력
    ㄴ cd ~j22(계정명)  -> 자신을 입력하지 않으면 허가 거부 됨. (자신 : j23(계정명))
         -bash: cd: /home/j22: 허가 거부

8. file : 파일의 type을 알 수 있음

 
** date, cal 과 같은 실행은 권한에 따라' 허가 거부' 될 수 있음
 

 

Putty 서버 설정

Host Name(or IP address) : 위에서 주어진 server ip  x.x.x.x  /  port : 22
Connection type : SSH
Saved Sessions : Linux server
> [Open]

 

 

Server 에 접속

login as: j23
password:

 

 

Putty에서 메시지 보내기

j22에게 메시지 보내기

~$ write j22

메시지를 더이상 받지 않고 싶을 때

~$ mesg no

 

자주 마주치게 될 오류

1. 허가 거부

~$ mkdir /aa
mkdir: `/aa` 디렉토리를 만들 수 없습니다: 허가 거부

 

2. 그런 파일이나 디렉터리가 없습니다.

~$ cd korea
-bash: cd: korea: 그런 파일이나 디렉터리가 없습니다

 

3. 명령어 'kbs' 을(를) 찾을 수 없습니다.

~$ kbs
명령어 'kbs' 을(를) 찾을 수 없습니다. 다음 명령어로 시도하시겠습니까:

 

echo $변수명 이용하여 변수 출력 해보기

~$ a=60
~$ b=4.5
~$ c=king

~$ echo $a, $c   --> a, c : 변수 ($)
60, king
~$ echo $a, $c, $b  --> a, c , b : 변수 ($)
60, king, 4.5
~$ t="tong"
~$ tt="tong tong"
~$ echo $tt
tong tong
~$ date
2023. 04. 24. (월) 14:30:56 KST
~$ d='date'  --> ''(작은 따옴표로 묶을 경우 date 라는 문자열이 저장됨) / 띄어쓰기 시 에러
~$ echo $d   --> d를 출력
date	     --> date 라는 문자열이 출력됨

**주의
'' 으로 묶을 경우 문자열이 저장 되지만 ``로 묶을 경우 명령어의 실행결과가 저장됨.
 
 

명령어 실행결과를 변수에 저장해서 출력해보기

~$ d=`date` --> ` : back tick, back quote
~$ echo $d
2023. 04. 24. (월) 14:31:45 KST
who | sort | nl > a1   --> who | sort | nl 의 실행 결과를 a1 이라는 이름으로 파일로 저장
~$ cal > a2   --> cal 의 실행 결과를 a2 이라는 이름으로 파일로 저장
~$ ls
a1  a2  bb  bb.c  k  k.class  k.java  t.class  t.java  y.c  yy

 
 

file 명령어로 파일 타입 확인하기

~$ file yy (yy 는 명령어 실행 결과가 저장된 파일임)
yy: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked,  interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=f42f845e433c7273025b4c67 636ccaab0a452577, for GNU/Linux 3.2.0, not stripped
--> 64비트에서 실행 가능한 파일
~$ file y.c
y.c: C source, Unicode text, UTF-8 text
--> c 파일

 
 

Putty 에서 java로 코딩하기

java 코드 작성

~$ cd
~$ cat > k.java  --> java로 코딩하여 파일 생성 (파일명.java)
public class k{  --> java는 파일과 클래스 명이 같아야 함
        public static void main(String[] str){
                System.out.println("안녕 자바...");
        }
}

생성된 k.java 파일을 행 번호 붙여서 보기

~$ nl k.java --> nl : 행번호 붙여서 보기
     1  public class k{
     2          public static void main(String[] str){
     3                  System.out.println("안녕 자바...");
     4          }
     5  }

java 파일 컴파일

~$ javac k.java  --> k.java 파일 컴파일
~$ ls
k.class  k.java  --> 컴파일 후 k.class 가 생성됨

컴파일 한 java 파일 실행

~$ java k  --> 컴파일 한 java 파일 k 실행
안녕 자바...

 
 

Putty 에서 C++로 코딩하기

C++ 코드 작성

# vi aa.cpp  --> aa 라는 c++ 파일 생성 (파일명.cpp)

#include<iostream>  --> c++ 을 이용한 코딩
using namespace std;
int main(void)
{
        cout << "Hello C++" << endl;
        return 0;
}

C++ 파일 컴파일

# g++ -o aa aa.cpp  --> aa 라는 이름으로 aa.cpp 를 컴파일

컴파일 한 C++ 파일 실행

# ./aa  --> aa라는 이름으로 컴파일한 aa.cpp 실행
Hello C++

**주의
실행 시 파일 이름 앞에 ./ 붙여줘야 함
 
 

Putty 에서 C 언어로 코딩하기

C언어 코드 작성

~$ cat > y.c  --> c언어로 코딩 할 파일 생성 (파일명.c)
#include <stdio.h>  --> C언어로 코딩
int main(void)
{
        puts("\n 안녕 C언어, 난 리눅스야.. \n");
        return 0;
}

C 파일 컴파일

~$ gcc y.c -o yy  -->  y.c 라는 c언어 파일을 yy라는 이름으로 컴파일
~$ ls
k.class  k.java  y.c  yy
~$ yy
yy: 명령을 찾을 수 없습니다  -->  해당 오류 발생 시 앞에 ./ 를 추가해주면 됨

~$ ./yy  --> yy 라는 이름으로 컴파일한 y.c 실행

 안녕 C언어, 난 리눅스야..

 
 

vi 명령어

y.c 파일을 vi 명령어를 이용해 편집

~$ vi y.c  --> vi 명령어를 이용해 편집 가능

파일 수정 시
[ESC] > [i]  --> 끼워넣기 가능
파일 수정 후
[ESC] > :x --> 저장 후 종료 (:wq 도 가능)

~$ gcc y.c -o yy --> yy라는 이름으로 다시 컴파일(덮어쓰기)

vi 명령어를 이용해 k 라는 파일을 생성하면서 편집

~$ vi k
  1 dks
  2 dkdkdkkf
  
수정 후
[ESC] > :q! --> 강제종료
[ESC] > :w --> 저장만 하기

수정 후
[ESC] > :saveas bb.c --> bb 라는 이름의 c 파일로 저장

~$ ls
bb.c  k  k.class  k.java  y.c  yy
~$ gcc bb.c -o bb  --> bb 라는 이름으로 bb.c 파일을 컴파일
~$ ./bb  --> bb 라는 이름으로 컴파일 한 bb.c 파일 실행 (실행 시 컴파일 파일명 앞에 ./ 붙여줌)

 안녕 C언어, 난 리눅스야..

 
 

sqlite3

~$ sqlite3  --> sqlite3 실행
SQLite version 3.37.2 2022-01-06 13:25:41
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> create table Man(name, age);  --> Man 이라는 table 생성하면서 변수 정해줌
sqlite> insert into Man values("철수", 20);  --> Man 이라는 테이블에 데이터를 삽입
sqlite> insert into Man values("영희", 21);  --> Man 이라는 테이블에 데이터를 삽입
sqlite> select * from Man;  --> Man 이라는 table 조회
철수|20
영희|21
sqlite> .q --> sqlite 나가기

 
 

du -sh

~$ du -sh ~  --> 파일및 디렉토리의 사용량을 확인 할 때 사용하는 명령어 (Disk Usage 약어)
124K    /home/j23
~$ quota  -->  파일시스템 내에서 설정된 쿼타(quota)의 디스크 사용량 제한 설정 내용을 확인 할 수 있는 명령어
Disk quotas for user j23 (uid 1024):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda4     124  1000000 12000000           23       0       0


**용량 제한 걸어둔 상태

~$ mkdir 44
mkdir: `44` 디렉토리를 만들 수 없습니다: 장치에 남은 공간이 없음  --> 디렉토리 만들기 불가(용량 부족)
~$ ls
a1  a2  bb  bb.c  k  k.class  k.java  t.class  t.java  y.c  yy
~$ rm -rf a1  --> 강제로 a1을 지움
~$ du -sh ~
120K    /home/j23
~$ du -sh /etc  --> /etc 의 사용량  확인
du: '/etc/multipath' 디렉터리를 읽을 수 없음: 허가 거부
du: '/etc/tomcat9/Catalina/localhost' 디렉터리를 읽을 수 없음: 허가 거부
du: '/etc/ssl/private' 디렉터리를 읽을 수 없음: 허가 거부
du: '/etc/polkit-1/localauthority' 디렉터리를 읽을 수 없음: 허가 거부
8.3M    /etc  --> /etc 의 사용량이 8.3M 라는 걸 알 수 있음

 
 

dpkg -l

설치된 패키지 목록 확인하는 명령어

dpkg
ㄴ dpkg -l  --> 설치된 패키지 목록 확인
ㄴ dpkg -l | wc -l  -->  wc : word count
apt

ㄴ apt list --installed | -l  -->  wc : word count (설치된 프로그램 목록과 개수를 모두 알고 싶을 때)

ㄴ apt list --installed | wc -l  -->  wc : word count (설치된 프로그램의 개수만 알고 싶을 때)
ㄴ apt list --installed | nl  -->  nl : 행 번호 붙이기
 

우분투 설치

https://ubuntu.com/
> Download > Get Ubuntu Desktop > Ubuntu Desktop Hompage > Download Ubuntu > Download 22.04.02
 
 

** 설치할 것

리눅스 최소 설치
 

VirtualBox, RockyLinux9
 ㄴ VirtualBox 설치 시 c++ 오류 해결 --> https://learn.microsoft.com/ko-kr/cpp/windows/latest-supported-vc-redist?view=msvc-170 에서 c++ 설치 후 VirtualBox 재설치

 
 

** Putty 가상머신 만들기

[새로만들기] 선택
 

Virtual machine Name and Operating System
ㄴ 가상머신 이름 : RockyLinux
 
Hadware
ㄴ 기본 메모리 :  2048 MB
ㄴ Processors : 2 (CPU)

나머지 default 로 [다음] 선택 >  [Finish]

 

생성한 가상머신 선택 > [설정] 선택
ㄴ 오디오, USB  -> 해제
ㄴ 네트워크 > Advanced > 포트포워딩 -> 22, 80, 8080, 8000 추가
ㄴ 저장소 > 컨트롤러 : IDE - 비어있음 선택 > 속성 > 광학 드라이브 : IDE 세컨더리 마스터 옆 아이콘 선택 > 다운 받아둔 Rocky 파일 선택 > 열기
 
생성한 가상머신 선택 >  [시작] 선택
 
방향키 이용하여 Install Rocky Linux 9.1 선택
 
언어 선택 > [계속 진행]
 
설치 요약 > 설정 완료 > [설치 시작] 선택
1. 설치 목적지  > 자동
2. KDUMP > 비활성화
3. 네트워크 및 호스트 이름 > 이더넷 연결됨을 확인 > [완료] 선택
4. 보안 프로파일 > 해제
5. root 비밀번호

    ㄴ root 비밀번호
    ㄴ root 비밀번호 확인
    ㄴ roo 계정 잠금  -> 체크박스 해제
    ㄴ root가 비밀번호로 sHH로 로그인하도록 허용  ->  체크박스 체크
6. 나머지는 넘어감

 
 

** Putty 에서 root로 로그인

Host Name(or IP address) : 127.0.0.1  /  port : 22
Connection type : SSH
Saved Sessions : My_Linux
> [Open]

login as : root
password : 설정한 root 비밀번호

 
**tip. root 비밀번호 변경
#passwd
New password: [새로운 패스워드 입력]
Retype new password : [새로운 패스워드 한 번 더 입력]
 
 

** Linux 개발 환경

- C언어, C++
- Java, Python
- Package 설치하기
 

명령어

#yum -y install gcc
#yum -y install gcc-c++
#yum -y install java
#yum -y install java-devel
#yum -y install vim

** yum  <=>  dnf

한 줄로 입력하여 설치

#dnf -y install gcc g++ java java-devel 
#yum -y install gcc g++ java java-devel 
--> gcc g++ java java-devel 을 한 줄에 모두 써서 설치 가능

 
 

** mysql 설치 후 사용

# yum -y install mysql-server  --> mysql-server 설치
# systemctl start mysqld  --> mysql 시작
# mysql  --> mysql 실행
mysql> create database aDB;  --> aDB 라는 database 생성
Query OK, 1 row affected (0.01 sec)

mysql> use aDB;  --> aDB 라는 database 를 선택하여 사용
Database changed
mysql> create table Man(
    -> name char(20),
    -> age int);                    --> Man 이라는 table 생성
Query OK, 0 rows affected (0.02 sec)

mysql> insert into Man values("철수", 20);  --> Man 이라는 table 안에 데이터 삽입
Query OK, 1 row affected (0.01 sec)

mysql> insert into Man values("영희", 20);  --> Man 이라는 table 안에 데이터 삽입
Query OK, 1 row affected (0.01 sec)

mysql> insert into Man values("훈이", 20);  --> Man 이라는 table 안에 데이터 삽입
Query OK, 1 row affected (0.01 sec)

mysql> select * from Man;  --> Man 이라는 table 안에 데이터 조회
+--------+------+
| name   | age  |
+--------+------+
| 철수   |   20 |
| 영희   |   20 |
| 훈이   |   20 |
+--------+------+
3 rows in set (0.00 sec)

mysql> exit  --> mysql 종료
Bye

 
 
 

<추가적으로 알아둘 것> 

**파이썬으로 2의 제곱근 알아보기

# python3
>>> 2 ** 1
2
>>> 2 ** 2
4
>>> 2 ** 3
8
>>> 2 ** 4
16
>>> 2 ** 5
32
>>> 2 ** 6
64
>>> 2 ** 7
128
>>> 2 ** 8
256
>>> 2 ** 9
512
>>> 2 ** 10
1024

>>> exit()  -> python 종료

1 바이트     2^8     256
2 바이트     2^16   65536
4 바이트     2^32   42.9억
8 바이트     2^64   1844 경
 
**putty 창 내용 복사하고 싶을 때
 --> putty 창 긁기만 하면 복사 됨.
 
**외부에서 내용 복사하여 putty 창에 복사하고 싶을 때
-->  외부에서 ctrl + c 이용해 복사 > putty 창 우클릭
 
**리눅스에서는 디렉터리도 파일의 한 종류임