포스코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로 되어있다.
<기본사용법>
패키지 설치 : yum install 패키지명
패키지 삭제 : yum remove 패키지명
패키지 업그레이드 : yum update 패키지명
패키지 조회 : yum search 패키지명
패키지 목록 : yum list 패키지명
yum 데이터베이스 동기화 업데이트 : yum update
- 실습
- yum repolist (설치한다.)
- yum update (보안을 위해 해주는 것이 좋음)
리눅스 구조
모든걸 파일화 시킨 것을 버츄얼 시스템이라고 부른다.
NIC과 같은 경우에는 disk에 들어있는 파일이 아님에도 우리는에는 그렇게 보인다.
# Standard C(=I/O) Library (유저모드)
: 운영체제는 아니지만 자주 사용하고 쓸모 있는 함수를 다른 사람이 만들어 놓은 것.
* API와 다름
프로그래밍 C를 할 때, printf()는복잡하고 어려운 write라는 system call을 대신한 것이다.
(주의) 라이브러리는 운영체제 속한 것이 아님으로 user mode에서 돌아가지만,
system call의 write()는 운영체제의 프로그래밍 인터페이스임으로 kernel mode에서 돌아간다.
# 쉘(shell)
운영 체제 상에서 다양한 운영 체제 기능과 서비스를 구현하는 인터페이스를 제공하는 프로그램
사용자(명령) -> 쉘(해석) -> 커널(명령 수행 후 결과 전송) -> 쉘(해석) -> 사용자(결과 확인)
운영 체제 운영, Dual-mode
*Dual-mode 사용하는 이유는? 운영체제 자기 자신과 다른 시스템 구성요소를 보호하기 위해서
- 사용자 모드(user mode)
: 일반 프로그램이 실행되는 모드
- 커널 모드(kernel mode)
: OS 명령어를 실행하는 모드
-
kernel mode가 있어야 하는 이유는? CPU입장에서는 OS와 응용프로그램이 같은 소프트웨어임으로.
-
privileged instruction : 커널모드에서만 실행 가능한 instruction.
- mode bit(하드웨어에서 제공)
: user mode인지 kernel mode인지 0,1을 통해 알려준다.
System call (사용자 모드 -> 커널모드 전환)
-
프로그램이 사용자 모드에서 돌아가는 중
-
System call함
-
커널모드로 돌아감
-
return
-
사용자 모드로 돌아감
yum 기본 설정
yum install -y __
-y는 설치 확인 안 받음.
- cronie 설정한 시간 단위 마다 실행시킬 수 있는 아이.
- rdate 서버 시간 맞추는 것
- gcc c언어 컴파일러
- make c언어 프로그램 빌드툴
- wget url주면 다운함.
- gcc-c++ C++ 컴파일
- cmake C++빌드툴
- psmisc => 프로세스 트리, 족보를 보여줌. pstree로 명령어 쓰면 사용 가능.
원격 터미널
Xshell로 원격으로 연결하기
- CentOS는 켜놓고 닫아놓는다.
- 그러고 원격으로 연결해서 사용한다.
- ex. 회사의 os가 외국에 있어도 한국에서 작업할 수 있다.
xshell 실
- pwd : print working directory
/root
- cd / : change directory 맨 꼭대기로
/
+) / 부터 시작하면, 절대경로이다.
- cd ~ : 홈 디렉터리의 별칭이 ~임.
/root
- cd : 홈 계정으로
/root
- ls : 자기 디렉터리 내용을 보여줌.
anaconda-ks.cfg
기본적으로 .으로 시작하는 파일은 숨김 파일이다. 그래서 안 보임.
(윈도우는 숨긴 파일 설정을 따로 해주어야한다.)
-
ls -a : 숨김 파일을 포함한 자기 디렉터리 내용을 보여줌
-
vi hello.txt : 셀 상에서
vi [파일명]을 입력하면 새로운 문서를 편집할 수 있는 환경이 만들어진다.
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.outor./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 추가
저장!!
history
그동안 친 것 확인 가능
fdisk -l
나눈 파티션을 볼 수 있음.
리다이랙트
[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 설치하기
- JDK 다운로드
# wget https://download.oracle.com/java/17/archive/jdk-17.0.8_linux-x64_bin.tar.gz
- 압축 풀기
# tar xvfz jdk-17.0.8_linux-x64_bin.tar.gz
- 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 ~]#
- 설치
# 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
- 링크 파일 생성 (디렉토리 파일)
# 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
- 설정(/etc/profile)
` vi /etc/profile`
# java 주석
export JAVA_HOME=/usr/local/poscodx2023/java
export CLASSPATH=$JAVA_HOME/lib/*
export PATH=$PATH:$JAVA_HOME/bin
- 현재 shell 환경에 적용하기
source /etc/profile
- 확인
# 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