2019/11/29

cuda 전체 삭제

Ndivia driver
sudo apt-get remove --purge '^nvidia-.*'

CUDA
sudo apt-get --purge remove 'cuda*'
sudo apt-get autoremove --purge 'cuda*'

CUDA 파일 삭제
sudo rm -rf /usr/local/cuda
or
sudo rm -rf /usr/local/cuda-10.0

ukud 커널 업데이트 모듈 드라이버 문제.

ukud 커널 업데이트 모듈 드라이버 문제.
ubuntu 18.04 ukuu 커널 업데이트 dkms 문제

gcc 버전과 커널 헤더 정보 관계로 dkms 생성시 문제 발생.

콘솔 접근.
ssh 또는 ctrl + art + F1

윈도우 메니저 정지
$ /etc/init.d/lightdm stop

윈도우 메니저 삭제
$ sudo apt-get purge --remove lightdm

gcc 버전 설치
$ sudo apt-get install ppa-purge
$ sudo ppa-purge ppa:ubuntu-toolchain-r/test

gcc 버전 (우분투 18.04) :
$ gcc --version

ukuu 설치한 커널로 동작시 우분투 패키지 제공 버전으로 부팅
sudo vi /etc/default/grub
디포트 옵션 1
그리고 부팅 타임 3
$ sudo update-grub

기본 커널 복구
설치된 커널 확인
$ sudo ukuu --list-installed

ukuu 설치한 커널 삭제
$ sudo ukuu --remove v4.4.172

gpu 드라이버 설치
$ sudo ./NVIDIA-Linux-x86_64-410.93.run

grub 원상 복구

재부팅
$ reboot

윈도우 메니저 설치
$ sudo apt-get install lightdm

윈도우 메니저 시작
$ sudo /etc/init.d/loghtdm start


1. 우분투에서 제공하는 커널일 경우 자동설치.
드라이버 삭제.
sudo apt-get purge nvidia*

저장소 등록
sudo add-apt-repository ppa:graphics-drivers

등록한 저장소 패키지 업데이트
sudo apt-get update

드라이버 검색
ubuntu-drivers devices

설치.
sudo apt-get install nvidia-driver-415

2. 수동설치.

드라이버 확인.
ubuntu-drivers devices

소스 다운로드
https://www.nvidia.com/Download/index.aspx

실행 권한.
chmod +x NVIDIA-Linux-x86_64-410.73.run

컴파일러 설치.
sudo apt-get install gcc
sudo apt-get install make

모듈 블랙 디바이스 지정.
sudo bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
sudo bash -c "echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf"

확인.
cat /etc/modprobe.d/blacklist-nvidia-nouveau.conf

init 램디스크 업데이트
sudo update-initramfs -u

재 부팅
sudo reboot

콘솔 창 이동
ctrl + alt + F2

그래픽 모드 비활성화.
sudo telinit 3

실행.
sudo bash NVIDIA-Linux-x86_64-410.73.run
sudo reboot

cuda 설치. ---> 9.2 로 동작 시킴.
https://developer.nvidia.com/cuda-10.0-download-archive?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1804&target_type=deblocal

$ sudo dpkg -i cuda-repo-ubuntu1804-10-0-local-10.0.130-410.48_1.0-1_amd64.deb
$ sudo apt-key add /var/cuda-repo-<version>/7fa2af80.pub
$ sudo apt-get update
$ sudo apt-get install cuda

시스템 경로 적용
$ gedit ~/.bashrc
export PATH=/usr/local/cuda-10.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

재부팅
$ reboot

드라이버 및 통신 확인.
$ cat /proc/driver/nvidia/version
$ nvcc -V

테스트
$ cd /usr/local/cuda-10.0/samples
$ sudo make
$ cd bin/x86_64/linux/release
$ ./deviceQuery

grub 부트로더 문제해결

개발 97 네모 서버 재 부팅 이후 문제저 발생.

grub error invalid arch independent elf magic(유효 하지 않음)

Linux 및 SSD 파티션 정렬 조정

1. SSD (Solid State Drive)

2. SSD 설치 및 최적화.
맥북 파일 시스템: HFS + 4KB 파티션 정렬.
OS X에서 파일을 읽을 때마다 마지막으로 접근한 시간을 기록하는 타임 스탬프가 드라이브에 기록된다.
이를 비활성화면 SSD의 쓰기 양이 줄어든다.
OS X의 파일 접근 시간을 기록하지 못하게하려면 다음과 같은 특수 매개 변수를 사용하여 드라이브를 다시 마운트 해야한다.

noatime.
/Library/LaunchDaemons/noatime.plist
다시시작.

활셩화 체크
mount | grep " / "

출력 메세지.
/dev/disk0s2 on / (hfs, local, journaled, noatime)

3. RAM 이미지
OS X가 휴먼 상태 일 때(노트북이 닫혀있을 때) 베터리가 완전히 방전 된 경우 데이터가 있는지 확인하기 위해 RAM의 전체 내용이 드라이브에 기록된다.
이 기능을 비활성화하면 MacBook Pro가 잠자기 모드로 진입 할 때마다 4GB가 드라이브에 기록을 방지하기 위해서는 다음과 같이 한다.

sudo pmset -a hibernatemode 0
sudo rm /var/vm/sleepimage

베터리가 부족하여 휴식 모드이고, 완전히 방전되기 전에 재충전되지 않으면 메모리에 저장되지 않은 모든 데이터가 손실된다.

4. 리느스 파티션 정렬
SSD는 플래시 기반이며 블록 단위로 배열된다.
이러한 블록 중 하나에 쓰려면 전체 블록을 읽고 기본 플래시를 지우고 기록 할 데이터로, 수정한 데이터로 읽고 그 값을 데이터를 플래시에 다시 써야한다.
삭제 블록 크기는 이러한 블록의 크기에 해당하며 OCZ Vertex 2를 포함한 대부분의 현재 드라이브에서 512KB 크기이다.
이러한 블록이 파일 시스템과 정렬 될 때, 512KB보다 더 작은 데이터를 쓰려고 할 때 하나의 블록 만 포함되어야 한다.
그러나 잘못 정렬 된 경우 작은 데이터 쓰기 하려고 할때 데이터가 두개의 삭제 블록과 겹치므로 두 개가 포함 될 수 있다.
이러한 문제점이 SSD에 쓰기 성능에 나쁨 방법을 제공 할 수 있는 이유있다.
따라서 삭제 블록 시작시 파티션을 시작하면 SSD 성능이 크게 향상 될 수 있다.

파티셔닝
리눅스 라이브 CD를 부팅한다.
우분투 10.10을 사용하고 있다.
분할 할 드라이브가 있고 드라이브 /dev/sda의 삭제 블록 크기가 512KB라고 가정한다.
다음을 사용하여 드라이브에서 모든 파티션을 제거한다.

기존 파티션 제거.
sudo fdisk /dev/sda

제거 된후 파티션 생성시 아래 명령어를 사용하면 드라이브 자체의 삭제 블록 크키와 정확히 같은 512KB가 된다.
sudo fdisk -S 32 -H 32 /dev/sda

(100MB * 1024) / 512 = 200
부트 파티션은 블록 2에서 시작하여 200512KB 블록을 자치한다.

정렬확인
파티션 테이블 정보확인.
sudo fdisk -lu /dev/sda

Disk /dev/sda: 128.0 GB, 128035676160 bytes
32 heads, 32 sectors/track, 244208 cylinders, total 250069680 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000de7d9

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        1024      206847      102912   83  Linux
/dev/sda2          206848    16985087     8389120   82  Linux swap / Solaris
/dev/sda3        16985088   250068991   116541952   83  Linux

확인해 보면, 세 파티션 모두의 시작 부분은 512KB로 나눌 수 있으며 SSD의 삭제 블록 크기에 맞게 정렬된다.
Linux 설치할 때 파티션을 수정으로 지정해야 한다.

5. 접근 시간.
리눅스 설치 한 후 접근 시간을 비활성화 하려면 /etc/fstab 파일의 편집이 필요하다.
notime 매개 변수를 추가하면된다.
UUID=07eaa728-68e8-44aa-89a1-7c922513fc71 /               ext4    errors=remount-ro,noatime 0       1

변경 사항을 저장하고 재부팅한다.

적용 확인 명령.
mount | grep " / "
/dev/sda3 on / type ext4 (rw,noatime,errors=remount-ro,commit=0)

문제 경우 1)
/dev/sda1 /boot파티션을 ext2로 포맷
/dev/sda2스왑
/dev/sda3(가) /에서 ext4로 포맷.
설치 후 부팅되지 않음 grub-rescue 콘솔 모드로 진입.

error: invalid arch independent ELF magic.
grub rescue>

메인보드 설정 부분.
바이오스 모드인지 UELF(ELF) 시스템인지 확인.
- 메인보드 설정 내용
-- BIOS 설정
-- 보안 설정 OFF

메인보드 설정시 문제 계속 발생하면 소프트웨어 처리.
Live CD로 부팅하고 다음을 실행

mount /dev/sda1 /mnt
mount /dev/sda3 /mnt/tmp
mount /dev/sdb1 /mnt/home
mount /dev/sdc1 /mnt/srv
mount /dev/sdd1 /mnt/var

mount -o bind /dev /mnt/dev
mount -o bind /dev/pts /mnt/dev/pts
mount -o bind /proc /mnt/proc
mount -o bind /sys /mnt/sys
mount -o bint /run /mnt/run

chroot /mnt

grub-mkconfig -o /boot/grub/grub.cfg
update-grub

2019/11/28

인증제어_Ctvpt

가상 머신 설정시 랜카드 두장을 생성할 수 있다.

보안장비 설치 완료

서비스 모듈 체크
인증제어_Ctvpt

Gateway > Captive Potal 이동
Settings 탭 선택

일반 설정.
그룹: 전체 사용자
시간 : 3600
HTTP port: 4444
HTTPS port: 4443
변경 버튼 클릭

밴드위스 설정
밴드위스 설정 활성화: 체크
용량제한: 500MB
정책: Month
변경 버튼 클릭

오피스 관리자 이동

사용자 컴퓨터
- 사용자 선택 >  + 아이콘 추가 버튼 클릭

추가 팝업창 생성
Group 선택 > Add Group 파업창 생성
Type: Security Group 선택
Group name: IT Manager
Description: Administrator
ADD 버튼 클릭

- Users 선택 >  + 추가 버튼 클릭
Add User
User name: admin
First name: Adan
Last name: Corona
Description: Administrator
password:
retype password:
Group: IT Manager
Add 버튼

Add User
User name:
First name
Last name
Description:
password:
retype password:
Group:
Add 버튼

시스템 적용

Web Server 이동
Listening SSL port: Disabled
Enable per user public_html: 체크
CHANGE 버튼 클릭

시스템 적용


Captive Portal 이동
Captive Interfaces
적용할 인터페이스 활성화 체크

편집 아이콘 클릭
Editing interface
Enabled 체크
Interface: ethx
CHANGE 버튼 클릭

시스템 적용.

테스트
다른 컴퓨터 사용.
네트워크 설정
10.0.3.101
255.255.255.0
10.0.3.1

8.8.8.8

firefox 실행
검색창:  uttecamac

파업창 생성
제일 하단 버튼 클럭
서버 인증 정보 적용.

cptive portal 사이트로 이동

보안장비 이동
User and Computers > Manager 이동
Add User 파업창 생성
User name: Lupita
First name: Guadalupe
Last name: Lopez
Description: Gerente
password:
retype password:
Group: IT manager
Add 버튼

테스트 컴퓨터로 이동
Username:lupita
password:

팝업창 닫기
오른쪽 상단 Option 클릭
하단 메뉴 생성
아이피 주소 나온 문구 선택
팝업창 생성 확인

현재 보안장비 접속한 주소 복사.

구글 주소창: uttecamac 입력

Universidad Tenmologica de Tecamac - Lnicio 이동

보안장비로 이동
Captive Portal 선택
Current Users 탭 선택
접속자 확인
Action 필드에서 밴드위스를 조절할 수 있음.

테스트 컴퓨터로 이동
복사한 보안장비 포탈 주소 입력

Username:lupita
password:

안드로이드 앱(apk) decompile 방법, 출처 생각이... 하여간 나중에 보기 위해서.

안드로이드 앱(apk) decompile 방법

1. apk 파일 형식 리버싱 툴
apk는 zip으로 압축된 파일이다.
압축을 풀면 여러 리소스 파일들과 실행 파일인 dex(Dalvik Exeutable)파일이 있다.
압출된 파일을 푼다고 볼 수 있는 것이 거이 없다.
AndroidManifest.xml이나 다른 스트링 리소스들은 깨진 것처럼 보인다.
dex(덱스) 파일 또한 사람이 읽을 수 없는 형식으로 되어있기 때문이다.
몇개의 툴을 이용하여 이 파일들을 decompile하면 사람이 읽을 수 있는 코드 형태로 변환이 가능하다.

APK 디컴파일하는 방법은 불편한 방법과 편한 방법이 있다.
다음 3개의 툴을 이용하면 단계적으로 apk를 decompile을 할 수 있다.

- apktool: apk의 리소스를 변환하는데 사용된다.
- dex2jar: dex를 jar로 변환하는데 사용된다.
- jd-cmd: jar를 java 코드로 변환하는데 사용된다.

외의 방법 외에도 명령어 한반에 apk를 쉽게 디컴파일해주는 툴도 있다.
jadx가 그런 툴 중에 하나이다.

- jadx: apk를 decompile하며, GUI와 Command line 툴 모두 제공한다.

가장 먼저 디바이스체서 apk를 추출하는 방법을 알아본다.
그 다음 다른 두개의 방식으로 apk를 decompile하는 방법에 알아보겠다.

1.1 디바이스 에서 APK 추출하는 방법.
분석할 apk가 준비되어있다면 이 단계를 건너뛰어도 된다.
apk 파일이 PlayStore에서만 다운로드 받을 수 있다면 추출을 해야한다.

먼저 PlayStore에서 분석하고 싶은 앱을 설치한다.
그리고 아래 명령어로 설치된 패키지 정보를 추출한다.
추출된 파일을 열어보면 설치된 패키지 정보들이 있다.
컴퓨터에 adb가 설치되어 있어야 한다.

$ adb shell dumpsys package p > package_info.txt

Play Books라는 앱을 다운받았다고 가정한다.
추출한 패키지 정보에서 내가 다운받은 앱의 패키지 이름을 찾아야 한다.
books로 검색해보면 설치한 앱의 패키지 이름은 com.google.android.apps.books 로 추정된다.

Package [com.google.android.apps.books] (7c73afd):
  userId=10085
  pkg=Package{9df90b0 com.google.android.apps.books}
  codePath=/data/app/com.google.android.apps.books-TlsKiNze7ahFgAhZuk2T1Q==
  .....
  timeStamp=2019-00-00 20:40:13
  firstInstallTime=2019-00-00 20:40:14
  lastUpdateTime=2019-02-00 20:40:14

패키지 이름을 찾는 쉬운 방법은 없다.
앱 이름을 구글링하면 나올 수 있고, 앱을 실행하고 다른 로그로 확인할 수 있다.
또는 위처럼 설치 시간으로 찾아볼 수 있다.

위의 패키지 정보에서 codePath랄 apk 파일이 위취한 디렉토리이다.
그 디렉토리를 추출하면 그 안에 apk 파일이 있다.

다음 명령어를 사용하여 디렉토리를 추출한다.

$ adb pull /data/app/com.google.android.apps.books-TlsKiNze7ahFgAhZuk2T1Q==

이 명령어를 사용하면 단말의 특정 위치에 있는 파일을 PC로 가지고 올 수 있다.
아래와 같이 단말의 파일을 PC로 가져온걸 확인할 수 있다.
그 디렉토리 안에는 base.apk가 존재한다.
이 apk가 Play Books의 apk이다.

$ ls
'com.google.android.apps.books-TlsKiNze7ahFgAhZuk2T1Q=='
$ cd 'com.google.android.apps.books-TlsKiNze7ahFgAhZuk2T1Q=='/
$ ls
base.apk  lib


1.2. APKTool, dex2jar, jd-cmd
Tool 설치 방법
위에서 소개한 Tool들은 Window/Linux 모두 사용가능하다.
여기서는 리눅스 기준으로 설명한다.

sudo apt install default-jre
sudo apt install openjdk-11-jre-headless
sudo apt install openjdk-8-jre-headless

다운로드
Apktool: https://ibotpeaches.github.io/Apktool/
Dex2Jar: https://sourceforge.net/p/dex2jar/wiki/Home/
Jd-cmd: https://github.com/kwart/jd-cmd/releases/tag/jd-cmd-0.9.2.Final

모두 최신 버전으로 다운로드 받는다.
apktools$ ls
apktool_2.3.4.jar  dex2jar-2.0.zip  jd-cli-0.9.2-dist.zip

압축해제.
매번 명령어를 입력하기 번거롭기 때문에 ~/.basshrc에 등록한다.
vi .bashrc
# tools
alias apktool='java -jar ~/apps/apktools/apktool_2.4.0.jar'
alias dex2jar='~/apps/apktools/dex2jar-2.0/d2j-dex2jar.sh'
alias jd-cli='java -jar ~/apps/apktools/jd-cli-0.9.2-dist/jd-cli.jar'

권한변경
$ chmod 755 ~/apps/apktools/dex2jar-2.0/*

path 확인
$ apktool
Apktool v2.3.4 - a tool for reengineering Android apk files
....

$ dex2jar
d2j-dex2jar -- convert dex to jar
....

$ jd-cli
jd-cli version 0.9.2 - Copyright (C) 2015 Josef Cacek
....

1.3. Apk decompile(소스 추출)
Apk가 있는 파일로 이동한다.
apktool을 이용하여 apk 파일을 decompile 한다.
apktoos은 dex를 java로 변환해주진 못하고 smail라는 파일까지 변환해 준다.
현 필요한 코드는 java 파일이기 때문에, apktool은 dex를 제외한 다른 파일을 변환하는데 사용한다.
dex는 dex2jar과 jd-cli를 사용하여 변환할 것이다.

apktool의 help를 보시면 명령어에 대한 자세한 내용이 나와있다.
여기서는 필요한 명령어만 소개한다.
아래 명려어는 소스파일(dex)은 제외하고 base.apk를 decompiled 디렉토리에 decompile하라는 의미이다.

$apktool d -s -o decompiled base.apk

decompiled 디렉토리가 생성이 되고, 이 디렉토리 내용을 보면 변환된 파일들이 있다.
여기서 리소스들은 모두 decompile되었기 때문에 읽을 수 있다.
소스파일들은 classes.dex에 있고 아직 읽을 수 없다.

$ ls
base.apk  decompiled  lib
$ cd decompiled/
$ ls
AndroidManifest.xml  assets        classes3.dex  classes.dex  res
apktool.yml          classes2.dex  classes4.dex  original     unknown

파일들을 보면 classes(숫자).dex라는 이름으로 dex가 4개나 있다.
이것은 앱이 Multi-dex의 형태이기 때문이다.
만약 Multi-dex가 아니라면 classes.dex로 표기된다.
Multi-dex이기 때문에 모든 소스를 보려면 4개의 dex를 모두 java로 변환해야 한다.

지금까지 apktool을 이용하여 apk의 리소스를 모두 읽을 수 있는 형태로 변환했다.
이제 dex만 변환하면 된다.
dex 파일은 아래와 같이 두개의 툴을 이용하여 java 파일로 변환해야 한다.

- dex2jar: dex 파일을 jar 파일로 변환한다.
- jd-cli: jar 파일을 java파일로 변환한다.

먼저 dex 파일을 jar파일로 변환한다.
다음 명령어를 이용하여 classes.dex를 변환한다.
변환된 결과는 입력파일이름-dex2jar.jar 형태로 생성된다.
변환할때 문제가 있었던 것은 classes-error.zip 파일로 리포팅 된다.

decompiled$ dex2jar classes.dex
dex2jar classes.dex -> ./classes-dex2jar.jar
Detail Error Information in File ./classes-error.zip

decompiled$ ls
AndroidManifest.xml  assets        classes3.dex  classes.dex          classes-error.zip  res
apktool.yml          classes2.dex  classes4.dex  classes-dex2jar.jar  original           unknown

그 외의 다른 dex 파일들도 decompile 한다.

decompiled$ dex2jar classes2.dex
decompiled$ dex2jar classes3.dex
decompiled$ dex2jar classes4.dex

decompiled$ ls | grep dex2jar
classes2-dex2jar.jar
classes3-dex2jar.jar
classes4-dex2jar.jar
classes-dex2jar.jar

다시 정리해보면 apk의 리소스들은 이미 apktool이 변환하였고, dex파일은 dox2jar를 이용하여 jar 파일로 변환했다.
이제 마지막으로 jar를 java 파일로 변환하면된다.

아래의 jd-cli 명령어는 classes-dex2jar.jar를 src 디렉토리에 java 파일로 decompile하라는 의미있다.
4개의 dex를 모두 src에 decompile한다.

decompile$ jd-cli classes-dex2jar.jar -od src
decompile$ jd-cli classes2-dex2jar.jar -od src
decompile$ jd-cli classes3-dex2jar.jar -od src
decompile$ jd-cli classes4-dex2jar.jar -od src

apk 리소스와 소소들은 decompile 되었다.
소스파일들은 java로 변환되어 사람이 읽을 수 있는 형태이다.

~/test/com.google.android.apps.books-TlsKiNze7ahFgAhZuk2T1Q==/decompiled/src$ tree -L 3
.....
├── com
│   ├── a
│   │   ├── a
│   │   ├── b
│   │   ├── c
│   │   └── d
│   ├── b
│   │   └── a
│   └── google
│       ├── android
│       ├── api
│       ├── common
│       ├── devtools
│       ├── firebase
│       ├── internal
│       ├── ocean
│       ├── play
│       ├── protobuf
.....

파일을 보시면 아시겠지만, 대부분의 앱들이 난독화(Proguard)를 하기 때문에 변수 이름이 간단한 문자로 되어있어 분석하기 어렵다.

2. jadx로 디컴파일하는 방법
jadx는 jadx-release에서 빌드된 파일을 다운로드 할 수 있다.

다운로드 : https://github.com/skylot/jadx/releases

jadx는 command line과 GUI 툴을 모두 제공한다.

툴을 다운받고 압출을 풉다.
bin 디렉토리를 보면 실행 파일이 있다.
jadx는 command line 툴이고, jadx-gui는 GUI 툴이다.
command line을 사용한다.

jadx-0.8.0$ ls
bin  lib  LICENSE  NOTICE  README.md
jadx-0.8.0$ ls bin
jadx  jadx.bat  jadx-gui  jadx-gui.bat

path 등록
vi ~/.bashrc
#jadx
alias jadx='/home/user/test/jadx-0.8.0/bin/jadx'

path 확인
$ jadx -h
jadx - dex to java decompiler, version: 0.8.0
usage: jadx [options] <input file> (.apk, .dex, .jar or .class)
...

base.apk를 out 폴더에 decompile하라는 명령어.
$ jadx -d out base.apk

decompile이 끝나면 다음과 같이 파일들이 생성된다.
리소들은 resources 디렉토리에, 소스는 sources 디렉토리에 decompile 된다.

out$ tree -L 2
.
├── resources
│   ├── AndroidManifest.xml
│   ├── assets
│   └── res
└── sources
    ├── a
    ├── android
    ├── androidx
    ├── b
    ├── c
    ├── com
    ├── d
    └── org

3. 결론
apk 파일을 추출하고 apk의 리소스와 소스를 사람이 볼수 있는 형태로 변환하는 방법을 확인했다.
decompile을 도와주는 오픈소스 툴들이 많기 때문에 자신에게 편한 툴을 사용할면 된다.
apk를 분석할 때 jadx가 매우 편하지만 jar로 제공되는 라이브러리를 분석하는 경우 jd-cli가 도움이 된다.
만약 리소스만 decompile하고 싶다면  apktool를 사용하여 빠르게 처리 할 수 있다.

대부분의 앱은 난독화가 되어있기 때문에 java로 변환한다고 해서 읽기 어려울 수 있다.
하지만 이 방법을 통해서 자신이 만든 앱이 난독화가 잘 되었는지, 다른 개발자로 부터 코트를 분석하기 어렵게 만들었는 지 확인할 수 있다.



asbru 시리얼 설정

-l /dev/ttyUSB0 -e -o -s 115200

apt-get install cu
일반 유저라도 ttyUSB0에 접근을 허가해주기 위해서 usermod -g dialout 유저ID와 같이 입력해줘야 한다.
sudo usermod -g dialout linuxlee

AP hostapd 환경 구축

1. 삼바 파일 서버 AP 설정.
PDC, DHCP, DNS

인터넷 > eth0 dhcp 게이트웨이 > eth1 스위치 연결 후  유선 서비스 PDC, DHCP, DNS

AP 인프라망 구축
인터넷 > eth0 dhcp 게이트웨이 > eth1 스위치 연결 후  유선 서비스 PDC, DHCP, DNS
                        | -----> 유선 클라이언트
                        |
                        eth3 ---> 무선 AP ---> 무선클라이언트
                       
인터넷 -> eth3 -> 무선 AP 동작.

무선 라우터에 고정 경로를 추가.(게이트웨이 이동)
고정 경로가 없으면 모바일 클라이언트 용 무선 라우터의 방화벽에 효과적으로 의존하게 된다.

2. AP 구동
2.1 AP 모드 지원확인
# iw list
Supported interface modes에 AP가 적혀있다면, AP모드를 지원하는 인터페이스.

2.2 hostapd를 사용하여 AP를 만들고, 보안장비는 라우팅/방화벽 수행한다.
무선 어댑터는 Atheros AR9462 사용하는 것이 효과적이다.
암호화 WEP 대신 WPA + WPA2를 사용

2.3 hostapd 설치.
hostapd 2.0 버전으로 설치 한다
hostapd 1.1 의 경우 hostapd.conf 파일 설정이 다름.

2.3.1 패키지 설치.
sudo apt-get update && sudo apt-get install hostapd iw crda wireless-regdb
apt-get install wpasupplicant hostapd bridge-utils wireless-regdb iw wireless-tools usbutils nano psmisc crda apt-utils dialog


2.3.2 최소 minimal 설정파일로 생성.
 sudo vi /etc/hostapd/hostapd.conf

  #insert following contents: (please check and customize following settings: interface, country_code, ht_capab!!!, channel, your_ssid, your_password)

  interface=wlp3s0
  driver=nl80211

  logger_syslog=-1
  logger_syslog_level=2
  logger_stdout=-1
  logger_stdout_level=2
  #dump_file=/tmp/hostapd.dump
  ctrl_interface=/var/run/hostapd
  ctrl_interface_group=0

  ieee80211n=1
  wme_enabled=1
  wmm_enabled=0
  ieee80211d=1
  country_code=KR

  #command: iw list
  #Card:Atheros AR9280 (ath9k)
  #HT20/HT40
  #SM Power Save disabled
  #RX HT40 SGI
  #TX STBC
  #RX STBC 1-stream
  #Max AMSDU length: 3839 bytes
  #DSSS/CCK HT40
  #Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
  #Minimum RX AMPDU time spacing: 8 usec (0x06)
  #HT TX/RX MCS rate indexes supported: 0-15
 
  # 아소로스 이부분을 자기 디바이스 드라이버에 맞게 설정.
  #ht_capab=[HT40-][SHORT-GI-40][TX-STBC][RX-STBC1][MAX-AMSDU-3839][DSSS_CCK-40][MAX-RX-AMPDU-65535][MIN-RX-AMPDU-8]
  #hw_mode=g
  #channel=12
 
  # 인텔 Advanced-N 6205
  ht_capab=[HT40-][SHORT-GI-40]
  hw_mode=g
  channel=6
 
  ssid=AI-AP-packetCapture
  wpa_passphrase=skdlxk1212
  wpa=2                 # WPA2 only 우분투 18.04 버전에서는 wpa=3
  wpa_key_mgmt=WPA-PSK
  wpa_pairwise=CCMP TKIP
  rsn_pairwise=CCMP
  auth_algs=2           # 1=wpa, 2=wep, 3=both 우분투 18.04 버전에서는 3=both

2.3.2.1 다른 설정 파일
# AP 인터페이스
interface=wlp3s0

# SSID 이름
ssid=GistTest

# 네트워크 도메인 규젝 설정. 국가에 따라 동작하는 네트워크 사용 가능한 채널 및 전력 전송 설정
country_code=KR

# 국가 정책을 실제로 시행하는 기능 설정.
ieee80211d=1

# 동작 모드 a/b/g
# a = 5G, b = 2.4, g = 2.4
hw_mode=g

# n 모드 활성화.
ieee80211n=1

# 사용할 무선 채널, 간섭없는 채널을 고르는게 팁이다.
channel=7

# 프로토콜 정보
wmm_enabled=1

# 공유키 인증 사용
auth_algs=1

# ignore_broadcast_ssid=1

# 인증을 위해 WPA2를 활성화. 암호 및 관리 유형을 구성
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
rsn_pairwise=TKIP

# 네트워크 암호 설정.
wpa_passphrase=password


설정 파일 체크
sudo hostapd -d /etc/hostapd/hostapd.conf

비밀번호 다시 묻지 않기 하기 위한 옵션
N-mode: ieee80211n=1, wme_enabled=1, hw_mode=g

2.3.3 /etc/default/hostapd 사용자 정의 설정
  sudo vi /etc/default/hostapd
  설정되어 있으면 변경 한다.
 
  DAEMON_CONF="/etc/hostapd/hostapd.conf"
  DAEMON_OPTS="-ddt"
 
2.3.4 보안장비 설정
Default gateway, Search domain, Primary nameserver, NTP server, WINS server to Fairline 변경 -> press Change
DHCP ranges: 192.168.111.100 to 192.168.111.110

2.3.5 서비스 시작
sudo /etc/init.d/hostapd start

sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl start hostapd

2.3.6 디버깅

2.3.6.1 실시간 디버깅 
tail -f /var/log/syslog | grep hostapd

sudo systemctl status hostapd.service
journalctl -u hostapd

2.3.6.2 패키지 버전 문제
저장소 패키지 버전 확인 할 필요 없음.
apt-cache madison hostapd

업데이트 방지 할 필요 없음
apt-mark hold hostapd

업데이트 방지 해지 할 필요 없음.
apt-mark unhold hostapd

2.3.6.3 시스템 점검 디버깅
$ sudo lsmod | grep 802
[sudo] password for linuxlee:
mac80211              786432  1 iwldvm
cfg80211              622592  3 iwldvm,iwlwifi,mac80211
acpi_pad              180224  0

2.3.6.4 채널 디버깅
sudo tail -f /var/log/syslog | grep hostapd
sudo /etc/init.d/hostapd restart 

tail 디버깅 창
netlink: 'hostapd': attribute type 213 has an invalid length.

발견시
hostapd.conf 파일
 channel=6 값을 0
서비스 재시작

그리고 클라이언트 wifi off 후 다시 On
인터넷 동작 확인.

만약 안되면 계속해서 채널을 변경해 준다.
지금은 0값을 준 후 서비스 재시작,
그후 다시 6번 채널을 사용중이다.

xxx. 보안장비 설정 portal cautivo wifi
보안장비 3.4 버전

핫스팟

eth0 외부접속 192.168.1.67
eth1 내부접속 172.16.0.1

VPN 활성화 및 설정 필요.

Potal Cautivo
탭 1: Configuraction
Configuration General
Group:
Pla...: 300
http: 444
https: 443

탭 3 번재: 
접속자 정보 없음.

사용자 추가 세션에서 그룹을 만들 수 있다.
그룹에서 생성되는게 아니라 사용자에서 생성한다.
사용자 manager 그룹 생성
유저 생성

usb wifi 인터넷 공유

2 개의 wifi 어댑터가 필요
하나는 수신기 역할을하고 다른 하나는 송신기 역할

수신기는 MediaTek 이고 송신기는 Broadcom

Broadcom 송신기는 핫스팟을 만드는 송신기
내부 또는 외부 Wi-Fi 어댑터를 쉽게 구입할 수 있다.

무료 소프트웨어 지원되는 WIFI 어댑터.
https://h-node.org/wifi/catalogue/en

1. 인터넷 입력 연결
인터넷 와이파이 핫스팟을 찾아 기본 어댑터를 사용하여 연결한다.
Mediatek 어댑터를 사용하여 공개 핫스팟에 연결한다.

2. 새로운 와이파이 네트워크 구성
네트워크 관리자 어플리케이선 -> 오른쪽 마우느 단추 클릭 -> 연결 편집.
> 추가 클릭 > 연결 유형 선택: Wifi > 작성 연결 이름: rabbit_hostpot > SSID: rabbit_hotspot 유형 > 모드 : 핫스팟 > 저장 선택.

이것은 rabbit_hotspot이라는 새로운 연결되지 않는 네트워크를 만든다.

3. wifi 핫스팟 사용
네트워크 관리자를 클릭하고 하단 섹션 > 새 WiFi 네트워크 생성 참조한 다음 Wifi 어댑터: 보조 어댑터(예: 광 broadcom)를 선택하고 연결: rabbit_hotspot > 생성을 선택 하고 네트워크 관리자에 연결되어 있는지 확인한다.

모바일 폰에서 rabbit_hotspot이라는 새로운 핫스팟이 있는지 확인한다.

역 테더링

Gnirehter(데더링 반전)

프로젝트 사이트 : https://github.com/Genymobile/gnirehtet

Android 앱 및 GNU/Linux 데스크탑으로 제공된다.
이 프로그램을 사용하면 루트 접근 권한이 없어도 테더링을 사용하여 노트북이나, 데스크탑에서 스마트 폰으로 USB 케이블을 이용해 인터넷에 접근할 수 있다.

전화(모바일) -> usb -> 데스크탑 -> WiFi -> 인터넷 연결이다.

1. 역 데터링 필요한 이유
- 비용절감: 하나의 장치(랩탑)에서만 인터넷에 접근 할 수 있으며 모바일 폰은 데이터를 구입할 필요가 없음.
- 공공 핫스팟 장소에 전화 ID를 노출하지 않으므로 보안에 좋음.
- 특히 랩톨의 공개 핫스팟이 빠르게 처리하는 동안, 전화 데이터 서비스가 느린 경우 속도가 향상된다.
-  데이터 서비스가 크기에 따라 제한 될 때, 휴대 전화에서 큰 크기의 파일을 다운로드 할 수 있지만, 공공 핫스팟에는 제한이 많음. 예를 들어 모든 Android 앱을 업그레이드 할 수 있다.


1.1 준비
- 2대 컴퓨터
- 다른 운영체제

우분투 18.04
리눅스 커널 4.15(기본값)
공공 핫스팟에서 WiFi 인터넷

전화:
- 루팅되지 않은 Android 6.0
- SIM 카드 없음(이동 통신사 없음, 인터넷 접근 없음)
- 데이터, Wi-Fi 및 핫스팟 옵션 비활성화
- USB 디버깅 지원
- USB 테더링 지원
- USB 케이블

1. Gnirehter 획득
Gnirehter는 전화(.apk)와 GNU/Linux 데스크탑(Rust language:https://www.rust-lang.org/ 로 작성된 프로그램).

다운로드: https://github.com/Genymobile/gnirehtet

2. 안드로이드 폰 Gnirehter 설치
- 컴퓨터에서 안드로이드 폰으로 gnirehtet.apk 파일을 보낸다.
- 안드로이드 폰에다가 apk 파일을 설치한다.

3. GNU/Linux 설치 요구 사항.
$ sudo apt-get install android-tools-adb

4. 데스크탑 인터넷 연결.
우분투 GNU/Linux를 wifi 핫스팟 인터넷 접근 연결

5. Android에서 USB 디버깅 사용.
일반적으로 개발자 색션에 있음.
이 단계에서 USB 데터링 활성화하지 않는다.

6. 데스크탑에서 인터넷 접근 공유
실행:
$ ./gnirehtet run

실행 프로그램이 있는 곳에서 실행.

정지:
Ctrl + C

7. 안드로이드 연결을 수락.
휴대 전화에서 USB 디버깅 허용? 이 표시된다.
수락한다.
역 데터링 사용 메시지 알림도 표시된다.
즉, 휴대 전화에서 온라인으로 갈 준비가 되었다.
항상 이 컴퓨터에서 허용 하므로 다음에 더 이상 탭할 필요가 없음.

8. 온라인에 접속.
gnirehter: 역 테더링 할성화 휴대 전화에 알림.
이 시점에서 유대 전화기 인터넷에 연결되어야 한다.
Android에서 Telgram, F-droid, Orbot 또는 웹 브라우저를 실행하여 다운로드 할 수 있는지 확인한다.

성공적으로 연결되면 Android 상단 패널에 VPN로고가 표시가 된다.
역 데터링 활성화 메세지로 표현된다.

톰켓 로드발란싱

로드 발란싱
/etc/apache2/workers.properties

cat worker.properties
workers.tomcat_home=/usr/share/apache-tomcat-6.0.35
workers.java_home=/usr/lib/jvm/java-6-sun
ps=/

worker.list=loadbalancer,status
worker.worker1.port=8009
worker.worker1.host=worker1
worker.worker1.type=ajp13
worker.worker1.lbfactor=1

#setup node2
worker.worker2.port=8009
worker.worker2.host=worker2
worker.worker2.type=ajp13
worker.worker2.lbfactor=1

#setup the load-balancer
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=worker1,worker 2
worker.loadbalancer.sticky_session=True
#worker.loadbalancer.sticky_session_force=True

# Status worker for managing load balancer
worker.status.type=status

mod_proxy_ajp 사용해 구성할 수 있음.
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

<Location />
    ProxyPass balancer://tomcat/ stickysession=JSESSIONID
</Location>

<Proxy balancer://tomcat>
   BalancerMember ajp://server1:9050 route=managed1 smax=5 max=20 ttl=120 retry=300
   BalancerMember ajp://server2:9050 route=managed2 smax=5 max=20 ttl=120 retry=300
   BalancerMember ajp://server3:9050 route=managed3 smax=5 max=20 ttl=120 retry=300
</Proxy>

tomcat libapache2-mod-jk 연동

sudo apt-get install libapache2-mod-jk

ajp 아파치와 통신을 위해 설정.
vi /etc/apache2/workers.properties
worker.list=gfltomcat1
worker.tomcat1.port=8009
worker.tomcat1.host=x.x.x.x
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=20

jk 모듈 설정파일 설정.
vi /etc/apache2/mods-available/jk.conf

    #JkWorkersFile /etc/libapache2-mod-jk/workers.properties
    JkWorkersFile /etc/apache2/workers.properties
   
    <Location /jk-status>
        # Inside Location we can omit the URL in JkMount
        #JkMount jk-status
        #Order deny,allow
        #Deny from all
        #Allow from 127.0.0.1
    </Location>
    <Location /jk-manager>
        # Inside Location we can omit the URL in JkMount
        #JkMount jk-manager
        #Order deny,allow
        #Deny from all
        #Allow from 127.0.0.1
    </Location>

아파치 웹서버 수정
/etc/apache2/sites-available/user-fbox-league.fairlineai.com
JkMount /* gfltomcat1

톰캣 수정
sudo vi /etc/tomcat8/server.xml

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

주석 처리 되었다면 해제한다.

아파치와 톰캣 재시작
sudo /etc/init.d/apache2 restart
sudo /srv/www/league.fairlineai.com/bin/startup.sh

브라우저 확인
http://ip:8080
http://ip

ssh sshfs mount

우분투 18.04 ssh mount
sudo apt-get install sshfs
sudo sshfs -o allow_other user@myserver:/home/user/myprojects ~/mount/myprojects

$ # 연결이 끊기면 재접속할 수 있게 설정
$ sshfs -o reconnect user@x.x.x.x:/backups/server1 /my/backups

$ # SSH key 인증 방식을 쓴다면 인증 파일을 지정해 줄 수도 있다.
$ sshfs -o IdentityFile=~/.ssh/id_rsa user@x.x.x.x:/backups/server1 /my/backups

/etc/fstab
옵션 설정명.
defaults
설정되지 않은 값에 대해서는 기본 설정을 따릅니다.

_netdev
네트워크 드라이브임을 의미하며, 마운트 시도 전 네트워크가 올바르게 설정되어 있는지 검사합니다.

delay_connect
부팅 과정에서 아직 네트워크 설정이 끝나지 않아 마운트를 하지 못하는 경우에 대비하여 시간을 지연하여 연결합니다.

allow_other
마운트된 디렉토리에 일반 유저의 접근을 허용합니다.

uid, gid
마운트된 디렉토리의 소유(Ownership)을 지정합니다. 특정 유저의 uid및 gid는 'id {username}'명령으로 확인할 수 있습니다.

IdentifyFile
인증에 사용할 Key를 지정합니다. 마운트는 root권한으로 실행되므로 Key가 root의 홈디렉토리에 존재하지 않는 경우 이렇게 수동으로 지정해 줘야 합니다.

vi /etc/fstab
# 옵션이 필요하면 적어준다
sshfs#user@x.x.x.x:/backups/server1 /my/backups fuse.sshfs IdentityFile=~/.ssh/id_rsa defaults 0 0
sshfs#user@x.x.x.x:/backups/server1 /my/backups fuse.sshfs reconnect defaults 0 0

자동 동기화.
apt install rsync grsync
rsync -r /mnt/serverB/home ~/serverBData

편집
crontab -e
선택 3

작성
0 5 * * * rsync -r /mnt/serverB/home ~/serverBData

vim 마운트
vim scp://user@server//path_to/file_to_edit

vmwqre 커널 업데이트 이 후 문제 발생

gcc 버전문제.

sudo apt-get install build-essential linux-headers-generic

cd /usr/lib/vmware/modules/source
tar xvf vmnet.tar
cd vmnet-only
make
cd ..
tar xvf vmmon.tar
cd vmmon-only
make
cd ..
mkdir /lib/modules/`uname -r`/misc
cp vmmon.o /lib/modules/`uname -r`/misc/vmmon.ko
cp vmnet.o /lib/modules/`uname -r`/misc/vmnet.ko
depmod -a
/etc/init.d/vmware restart
nano /usr/bin/vmware

set -e: 전에 추가 해준다.
export LD_LIBRARY_PATH=/usr/lib/vmware/lib/libglibmm-2.4.so.1/:$LD_LIBRARY_PATH


스크립트 작성
새 커널을 설치 할 때, 다음 스크립트 실행.

#!/bin/bash
VMWARE_VERSION=workstation-15.5.1
TMP_FOLDER=/tmp/patch-vmware
rm -fdr $TMP_FOLDER
mkdir -p $TMP_FOLDER
cd $TMP_FOLDER
git clone https://github.com/mkubecek/vmware-host-modules.git
cd $TMP_FOLDER/vmware-host-modules
git checkout $VMWARE_VERSION
git fetch
make
sudo make install
sudo rm /usr/lib/vmware/lib/libz.so.1/libz.so.1
sudo ln -s /lib/x86_64-linux-gnu/libz.so.1
/usr/lib/vmware/lib/libz.so.1/libz.so.1
sudo /etc/init.d/vmware restart

dd_하드디스크_용량_계산

디스크 용량이 같은 경우
# dd if=/dev/hdd of=/dev/ssd status=progress

dd 디스크 용량이 다를 경우
용량이 다를 경우 dd 명령어로 데이터 복사 후 파티션 정보 수정.

hdd 디스크 보다 용량이 적은 ssd 디스크 복사
용량차이 때문에 복사할 수 없음.

계산 필요.
fdisk -l hdd
/devhdd1 start: 2048
/dev/hdd3 end: 13635583

13635583 + 1 = 13635584 섹터를 복사해야 한다.
섹터 기본크기는 512byte로 디스크 복사는 아래의 명령어로 수행한다.
dd if=/dev/hdd of=/dev/sdd bs=512 count=13635584 status=progress

복사 속도 향상 옵션: bs : 512 * 8 = 4096, count : 13635584÷8 = 1704448
dd if=/dev/hdd of=/dev/ssd bs=4096 count=1704448 status=progress

테이블 수정
기존 디스크 파티션 테이블이 그대로 복산됨.
전체 디스크 용량이 다르기 때문에 /dev/ssd 디스크에 맞게 파티션 테이블 수정

파티션 테이블 저장.
sfdisk -d /dev/hdd > part_table.txt

cat part_table.txt
label: gpt
lable-id: ~~~
device: /dev/hdd
unit: sectors
first-lba: 34
last-lba: 2097486

last-lba 값 확인.
이 값은 아래와 같이 계산되어진다.
fisk -l 했을 때
disk /dev/hdd: 10 Gib, 10737418240 bytes, 20191520 sectors
정보가 나오면.
last-lba : (/dev/hdd의 20971520 sectors) – (first-lba, 34) = 20971486

동일한 방법으로 정보 수정
fdisk -l /dev/ssd
disk /dev/ssd: 8 Gib, 8589934592 bytes, 16777216 sectors

/dev/ssd 디스크 정보 수정
수정후 last-lba : (/dev/ssd의 16777216 sectors) – (first-lba, 34) = 16777182

파티션 테이블 변경 정보 적용
sfdisk /dev/ssd < part_table.txt

gparted 또는 fdisk 다시 포맷해준다.

target_hard_disk_backup

하드디스크 백업.

df -h 명령을 사용해 자신의 리눅스에 맞게 추가적인 런타임 디렉토리 제외는 필수적이다. 예를 들어 우분투의 경우 /run/*디렉토리 또한 제외되어야 한다.
sudo tar cvpzf /tmp/backup.tar.gz --exclude=/proc/* --exclude=/lost+found/* --exclude=/media/* --exclude=/mnt/* --exclude=/sys/* --exclude=/run /

복원
복원을 할 때에는 안전성을 위해 LiveUSB를 만들어서 부팅하는 것을 강력 추천한다.
원래 사용하던 디스크를 마운트 시키고

마운트 된 원래 디스크에 들어가 rm -rf *로 모든 디렉토리와 파일을 날려버리고
sudo tar xvpzf backup.tar.gz -C 타겟경로 를 입력해 복원하자

파티션 정보는 그대로 살아 있음.
파일만 삭제 됨.

-----------------------------------------
ttylinux live USB 만들기
시스템 관리 차원에서, 말 그대로 command line만을 이용하는 리눅스가 필요할 경우가 있다.
실제로 특별한 용도의 서버 장치는 serial 포트 1개, usb 포트 1개 정도로만 이루어진 경우도 있다!
이럴 때는 dialog도 적합하지 않는데, dialog의 경우 충분한 디스플레이 환경이 갖추어지지 않은 serial 인터페이스를 통해 인터렉션을 진행할 경우, UI가 프리징 되는 경우도 있기 때문이다.

이런 요구사항을 느끼는 사람들을 위한 리눅스로 ttylinux가 있다.
ttylinux는 부팅 시작부터 실제 사용까지 모든 인터렉션이 command line만으로 이루어지는 독특한 녀석이다.
bash부터 시작해서 각종 디바이스 드라이버와 GNU 유틸리티들이 이미 준비되어 있다.

ttylinux USB 만들기
ttylinux 다운로드 페이지(http://osarchive.sda1.eu/ttylinux) 에서 ttylinux iso 이미지를 다운로드 받고 압축을 해제해둔다

sudo apt-get install unetbootin을 입력해 unetbootin 유틸리티를 설치한다.
unetbootin을 사용하면 부팅 가능한 USB를 아주 편리하게 만들 수 있다.

gparted를 사용해 해당 USB를 msdos MBR로 만들고
fat32파티션을 하나 생성하고
마운트한다

unetbootin을 사용해 ttylinux iso 이미지를 굽는다

USB 부팅을 해서 제대로 이미지가 준비되었는지 확인한다.
최초 로그인 사용자와 암호는 root/password로 설정되어있다.

------------------------------
테스트
sudo tar -cvpzf backup.tar.gz --exclude=/backup.tar.gz --one-file-system /
sudo tar -xvpzf /path/to/backup.tar.gz -C /restore/location --numeric-owner

파티션 정보 나열

파티션 테이블 복사.
하드디스 일 때.
$ sudo sfdisk –d /dev/sda | sudo sfdisk /dev/sdb

동일한 하드디스크가 아닐 경우 파티션 정보를 추출한다.
sfdisk -d /dev/hdd > part_table.txt

수정된 내용을 다시 넣어준다.
sfdisk /dev/ssd < part_table.txt

2019/11/27

tar 백업

모든 파일 백업.
sudo tar -cvpzf backup.tar.gz --exclude=/backup.tar.gz --one-file-system /

복원
sudo tar -xvpzf /path/to/backup.tar.gz -C /restore/location --numeric-owner

ssh tar 백업.

일반적 사용. 
tar -cvf /tmp/home.tar /home

stout 출력으로 압측
tar -cv /home

리다이렉션 사용, 
tar -cv /home > /tmp/home.tar

리다이렉션을 사용해 원격지 백업.
원격지 tmp 디렉토리에 원격지 home 백업 
ssh remotehost “tar -cvf /tmp/home.tar /home”

원격지 tmp 디렉토리 원격지 home 백업 
ssh remotehost “tar -cv /home > /tmp/home.tar”

로컬 tmp 디렉토리에 원격지 home 백업. 
ssh remotehost “tar -cv /home” > /tmp/home.tar