포스코DX X 비트교육센터 6기 - 리눅스


디스크

  • 윈도우 : 멀티 루트
  • 이외의 OS (맥, 리눅스,,) : 싱글 루트

    싱글루트인 경우, home, bin, boot 등 밑의 레벨에 있다. 이들은 싱글 루트가 사라지면, 다 날아갈 수 있지만, 그럴 경우가 거의 없기 때문에 한번에 둔다.

    이를 해결하기 위해서는 파티션을 다 나눠서 드라이브를 나누면된다.

    c: 와 D: 와 같이, 드라이브에 파티션을 나누면 여러개로 사용 가능하다.

XShell - centOS

  • 네트워클를 on으로 켜주기
  • 파티션을 수동 설정으로 바꾸고, 추가해준다.

localhost login : root

  • root는 슈퍼 계정이라 모든지 다 할 수 있다.
  • shutdown -h now : 전원이 꺼진다.
    • shutdown 전에는 sync 명령어를 여러번 보내는 시그널을 보내주는 것이 좋다.
  • rebout : 재실행

yum

리눅스는 yum가지고 깔아주면 된다.

패키지 관리 하는 것 (npm같은 것이다.) 파이썬 버전 2로 되어있다.

image

<기본사용법>

패키지 설치 : yum install 패키지명
패키지 삭제 : yum remove 패키지명
패키지 업그레이드 : yum update 패키지명
패키지 조회 : yum search 패키지명
패키지 목록 : yum list 패키지명
yum 데이터베이스 동기화 업데이트 : yum update
  • 실습
    • yum repolist (설치한다.)
    • yum update (보안을 위해 해주는 것이 좋음)

리눅스 구조

image

모든걸 파일화 시킨 것을 버츄얼 시스템이라고 부른다.

NIC과 같은 경우에는 disk에 들어있는 파일이 아님에도 우리는에는 그렇게 보인다.

# Standard C(=I/O) Library (유저모드)

: 운영체제는 아니지만 자주 사용하고 쓸모 있는 함수를 다른 사람이 만들어 놓은 것.

* API와 다름

프로그래밍 C를 할 때, printf()는복잡하고 어려운  write라는 system call을 대신한 것이다.

(주의) 라이브러리는 운영체제 속한 것이 아님으로 user mode에서 돌아가지만, 

system call의 write()는 운영체제의 프로그래밍 인터페이스임으로 kernel mode에서 돌아간다.

​# (shell)
운영 체제 상에서 다양한 운영 체제 기능과 서비스를 구현하는 인터페이스를 제공하는 프로그램

image

사용자(명령) -> 쉘(해석) -> 커널(명령 수행 후 결과 전송) -> 쉘(해석) -> 사용자(결과 확인)

image

image


운영 체제 운영, Dual-mode

*Dual-mode 사용하는 이유는? 운영체제 자기 자신과 다른 시스템 구성요소를 보호하기 위해서

  1. 사용자 모드(user mode)

: 일반 프로그램이 실행되는 모드

  1. 커널 모드(kernel mode)

: OS 명령어를 실행하는 모드

  • kernel mode가 있어야 하는 이유는? CPU입장에서는 OS와 응용프로그램이 같은 소프트웨어임으로.

  • privileged instruction : 커널모드에서만 실행 가능한 instruction.

  • mode bit(하드웨어에서 제공)

: user mode인지 kernel mode인지 0,1을 통해 알려준다.

System call (사용자 모드 -> 커널모드 전환)

  1. 프로그램이 사용자 모드에서 돌아가는 중

  2. System call함

  3. 커널모드로 돌아감

  4. return

  5. 사용자 모드로 돌아감


yum 기본 설정

yum install -y __

-y는 설치 확인 안 받음.

  • cronie 설정한 시간 단위 마다 실행시킬 수 있는 아이.
  • rdate 서버 시간 맞추는 것
  • gcc c언어 컴파일러
  • make c언어 프로그램 빌드툴
  • wget url주면 다운함.
  • gcc-c++ C++ 컴파일
  • cmake C++빌드툴
  • psmisc => 프로세스 트리, 족보를 보여줌. pstree로 명령어 쓰면 사용 가능.

원격 터미널

Xshell로 원격으로 연결하기

  • CentOS는 켜놓고 닫아놓는다.
  • 그러고 원격으로 연결해서 사용한다.
  • ex. 회사의 os가 외국에 있어도 한국에서 작업할 수 있다.

image

image

image


xshell 실

  • pwd : print working directory
/root
  • cd / : change directory 맨 꼭대기로
/

+) / 부터 시작하면, 절대경로이다.

  • cd ~ : 홈 디렉터리의 별칭이 ~임.
/root
  • cd : 홈 계정으로
/root
  • ls : 자기 디렉터리 내용을 보여줌.
anaconda-ks.cfg

기본적으로 .으로 시작하는 파일은 숨김 파일이다. 그래서 안 보임.

(윈도우는 숨긴 파일 설정을 따로 해주어야한다.)

  • ls -a : 숨김 파일을 포함한 자기 디렉터리 내용을 보여줌

  • vi hello.txt : 셀 상에서 vi [파일명]을 입력하면 새로운 문서를 편집할 수 있는 환경이 만들어진다.

image

vi 파일명으로 명령 모드 시작 -> i -> 에디팅 모드 시작 -> 막 적음 -> esc로 명령 모드로 돌아옴 -> :w -> :모드로 가서 저장됨. -> :q -> 나가기, 그만두기

:q : 나가기 :w : 저장하기 :q! : 저장 안 하고 나가기 :wq : 저장하고 나가기

  • mkdir 디렉토리명 : 디렉토리 만들기

  • cat 파일명 : 안에 안들어가고 내용만 보기

  • gcc -c hello.c : c파일 컴파일 시키기 -> 복제파일이 생성됨. hello.o

  • gcc hello.o : c파일 실행파일이 생성됨. a.out

  • /root/dowork/a.out or ./a.out : 홈 디렉터리부터 해주어야 실행이 됨.

  • rm a.out : 파일 지우기

+) 한번에 컴파일 하는 방법 gcc -o hello hello.c hello라는 이름으로 컴파일 해줘. 그럼 ./hello하면 실행이 됨.

  • chmod 755 hello.sh : hello.sh를 실행 모드로 바꿈.

  • shift insert 복사 (=window의 crtl + c)
  • shift insert 붙여넣기 (=window의 ctrl + v)

  • rdate -s time.bora.net : 시간을 가져옴

  • tab키 자동 완

  • mv : 이동시키기
mv /root/dowork/time_sync.sh .

ls


> 0anacron  time_sync.sh
  • 계정 만들기
[root@localhost ~]# useradd -g wheel webmaster

[root@localhost ~]# cd /home
[root@localhost home]# ls
webmaster
  • 비밀번호 만들기
[root@localhost home]# passwd webmaster
webmaster 사용자의 비밀 번호 변경 중
새  암호:
새  암호 재입력:
passwd: 모든 인증 토큰이 성공적으로 업데이트 되었습니다.

  • 새창을 열어서 root가 아니라 webmaster로 연결하기
[root@localhost home]# passwd webmaster
webmaster 사용자의 비밀 번호 변경 중
새  암호:
새  암호 재입력:
passwd: 모든 인증 토큰이 성공적으로 업데이트 되었습니다.

보안 처리

[root@localhost home]# vi /etc/ssh/sshd_config 
[root@localhost home]# systemctl restart sshd
[root@localhost home]# ps -ef | grep sshd
root     26112     1  0 11:31 ?        00:00:00 sshd: root@pts/0
root     26275     1  0 12:35 ?        00:00:00 sshd: webmaster [priv]
webmast+ 26279 26275  0 12:35 ?        00:00:00 sshd: webmaster@pts/1
root     26310     1  0 12:44 ?        00:00:00 /usr/sbin/sshd -D
root     26312 26116  0 12:45 pts/0    00:00:00 grep --color=auto sshd
[root@localhost home]# systemctl restart sshd
[root@localhost home]# ps -ef | grep sshd
root     26112     1  0 11:31 ?        00:00:00 sshd: root@pts/0
root     26275     1  0 12:35 ?        00:00:00 sshd: webmaster [priv]
webmast+ 26279 26275  0 12:35 ?        00:00:00 sshd: webmaster@pts/1
root     26320     1  0 12:45 ?        00:00:00 /usr/sbin/sshd -D
root     26322 26116  0 12:45 pts/0    00:00:00 grep --color=auto sshd
[root@localhost home]# systemctl stop  sshd
[root@localhost home]# 
[root@localhost home]# ps -ef | grep sshd
root     26112     1  0 11:31 ?        00:00:00 sshd: root@pts/0
root     26275     1  0 12:35 ?        00:00:00 sshd: webmaster [priv]
webmast+ 26279 26275  0 12:35 ?        00:00:00 sshd: webmaster@pts/1
root     26331 26116  0 12:47 pts/0    00:00:00 grep --color=auto sshd
[root@localhost home]# systemctl start sshd
[root@localhost home]# ps -ef | grep sshd
root     26112     1  0 11:31 ?        00:00:00 sshd: root@pts/0
root     26275     1  0 12:35 ?        00:00:00 sshd: webmaster [priv]
webmast+ 26279 26275  0 12:35 ?        00:00:00 sshd: webmaster@pts/1
root     26338     1  0 12:47 ?        00:00:00 /usr/sbin/sshd -D
root     26340 26116  0 12:47 pts/0    00:00:00 grep --color=auto sshd

su - (switch user) 명령어

현재 계정을 로그아웃을 하지 않고 다른 계정으로 전환하는 명령어

Xshell 5 (Build 0752)
Copyright (c) 2002-2015 NetSarang Computer, Inc. All rights reserved.

Type `help' to learn how to use Xshell prompt.
[c:\~]$ open


Connecting to 192.168.0.178:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

[webmaster@localhost ~]$ ^C
[webmaster@localhost ~]$ su -
암호:
마지막 로그인: 수  8월 23 13:25:43 KST 2023 일시 pts/0
[root@localhost ~]# su -
마지막 로그인: 수  8월 23 13:26:17 KST 2023 일시 pts/1
[root@localhost ~]# su -
마지막 로그인: 수  8월 23 13:26:21 KST 2023 일시 pts/1
[root@localhost ~]# 

ssh root@192.168.0.178 빈 화면에서 로그인할 때,

비밀번호 계속 치라고 나옴. 왜냐하면! 보안으로 막았으니까~

AUTO logout

cd / 
vi /etc/profile
  • security 추가 image

저장!!

history

그동안 친 것 확인 가능

fdisk -l

나눈 파티션을 볼 수 있음.

image

리다이랙트

[root@localhost ~]# pwd
/root
[root@localhost ~]# echo "hello" > hello.txt
[root@localhost ~]# ls
anaconda-ks.cfg  dowork  hello.txt
[root@localhost ~]# cat hello.txt
hello
[root@localhost ~]# echo "hello world" > hello.txt
[root@localhost ~]# cat hello.txt
hello world

  • root -> webmaster

[root@localhost ~]# echo "hello world" > /dev/pts/1
[root@localhost ~]# 


/////////////////////////

[webmaster@localhost ~]$ hello world


자바17 설치하기

  1. JDK 다운로드
# wget https://download.oracle.com/java/17/archive/jdk-17.0.8_linux-x64_bin.tar.gz
  1. 압축 풀기
# tar xvfz jdk-17.0.8_linux-x64_bin.tar.gz 
  1. poscodx2023 소프트웨어 설치 디렉토리 만들기
# mkdir /usr/local/poscodx2023
<확인>

[root@localhost ~]# mkdir /usr/local/poscodx2023
[root@localhost ~]# ls -l /user/local
ls: cannot access /user/local: 그런 파일이나 디렉터리가 없습니다
[root@localhost ~]# ls -l /usr/local
합계 0
drwxr-xr-x. 2 root root  6  4월 11  2018 bin
drwxr-xr-x. 2 root root  6  4월 11  2018 etc
drwxr-xr-x. 2 root root  6  4월 11  2018 games
drwxr-xr-x. 2 root root  6  4월 11  2018 include
drwxr-xr-x. 2 root root  6  4월 11  2018 lib
drwxr-xr-x. 2 root root  6  4월 11  2018 lib64
drwxr-xr-x. 2 root root  6  4월 11  2018 libexec
drwxr-xr-x. 2 root root  6  8월 23 15:25 poscodx2023
drwxr-xr-x. 2 root root  6  4월 11  2018 sbin
drwxr-xr-x. 5 root root 49  4월 11  2018 share
drwxr-xr-x. 2 root root  6  4월 11  2018 src
[root@localhost ~]# 

  1. 설치
# mv /root/jdk-17.0.8 /usr/local/poscodx2023/java17

<확인>

[root@localhost ~]# ls -l /usr/local/poscodx2023
합계 0
drwxr-xr-x. 9 root root 136  8월 23 15:14 java17
  1. 링크 파일 생성 (디렉토리 파일)
# ln -s /usr/local/poscodx2023/java17 /usr/local/poscodx2023/java
<확인>
[root@localhost ~]# ls -l /usr/local/poscodx2023/
합계 0
lrwxrwxrwx. 1 root root  29  8월 23 15:34 java -> /usr/local/poscodx2023/java17
drwxr-xr-x. 9 root root 136  8월 23 15:14 java17

  1. 설정(/etc/profile)

` vi /etc/profile`

# java 주석
export JAVA_HOME=/usr/local/poscodx2023/java
export CLASSPATH=$JAVA_HOME/lib/*
export PATH=$PATH:$JAVA_HOME/bin
  1. 현재 shell 환경에 적용하기
source /etc/profile

  1. 확인
# java --version
[root@localhost ~]# java --version
java 17.0.8 2023-07-18 LTS
Java(TM) SE Runtime Environment (build 17.0.8+9-LTS-211)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.8+9-LTS-211, mixed mode, sharing)

linux에서 python과 java를 사용하기

[root@localhost dowork]# python --version
Python 2.7.5
[root@localhost dowork]# vi hello.py
[root@localhost dowork]# ls -l
합계 24
-rwxr-xr-x. 1 root root 8360  8월 23 12:11 hello
-rw-r--r--. 1 root root   73  8월 23 12:04 hello.c
-rw-r--r--. 1 root root   21  8월 23 15:45 hello.py
-rwxr-xr-x. 1 root root   33  8월 23 12:14 hello.sh
[root@localhost dowork]# python hello.py
hello world
[root@localhost dowork]# vi HelloWorld.java
[root@localhost dowork]# ls -l
합계 28
-rw-r--r--. 1 root root  113  8월 23 15:47 HelloWorld.java
-rwxr-xr-x. 1 root root 8360  8월 23 12:11 hello
-rw-r--r--. 1 root root   73  8월 23 12:04 hello.c
-rw-r--r--. 1 root root   21  8월 23 15:45 hello.py
-rwxr-xr-x. 1 root root   33  8월 23 12:14 hello.sh
[root@localhost dowork]# javac HelloWorld.java
[root@localhost dowork]# ls -l
합계 32
-rw-r--r--. 1 root root  425  8월 23 15:47 HelloWorld.class
-rw-r--r--. 1 root root  113  8월 23 15:47 HelloWorld.java
-rwxr-xr-x. 1 root root 8360  8월 23 12:11 hello
-rw-r--r--. 1 root root   73  8월 23 12:04 hello.c
-rw-r--r--. 1 root root   21  8월 23 15:45 hello.py
-rwxr-xr-x. 1 root root   33  8월 23 12:14 hello.sh
[root@localhost dowork]# java -cp . HellowWorld
Error: Could not find or load main class HellowWorld
Caused by: java.lang.ClassNotFoundException: HellowWorld
[root@localhost dowork]# vi HelloWorld.java
[root@localhost dowork]# java -cp . HelloWorld
hello world