64-bit ARM (ARMv8/AArch64) desktop image
에서 우분투 버전의 Arm64로 선택
맥북
ifconfig | grep inet
ipconfig getifaddr en0
우분투
ip addr
sudo adduser luizyformac
$ sudo -s // root 전환
$ apt-get install ssh // ssh 설치
$ service ssh start // 서버 시작
$ service ssh status // 현재 상태 확인 가능
로컬에서
$ ssh [username]@[host ip] -p [호스트 포트 번호]
자리수 | 1 | 3 | 3 | 3 |
---|---|---|---|---|
의미 | 디렉터리 파일 | 소유자 | 그룹 | 그 외 사용자 |
ex)
drwsrw-r--
d : 디렉터리
r : 읽기
w : 쓰기
x : 실행
rwx 3개를 한자리수 8진수로 표현 가능하다
0o111 = 8 : rwx
0o110 = 7 : rw-
0o101 = 6 : r-x
.
.
.
0o000 = 0 : ---
chmod 764 file
위 명령은 file을
rw-r-xr-- 접근권한으로 설정한다는 뜻
Network Time Protocol 이란
네트워크에서 시간 동기화를 위해 사용되는 프로토콜
설치
sudo apt-get install ntp
요것은 ntp서버에 있는 시간으로 동기화해주는 과정이다.
$ apt-get install rdate # rdate설치
$ rdate -s [ntp서버url] # rdate 명령어수행
$ date # 변경된 시간 확인
CURL은 서버와 통신할 수 있는 커맨드 명령어 툴이자 웹개발에 매우 많이 사용되고 있는 무료 오픈소스이다.
sudo apt-get install -y curl
nvm(Node Version Manager)
https://github.com/nvm-sh/nvm
깃헙 가이드에 따라서 명령어들로 node 20을 설치했다.
luizyformac@luizy-virtual-machine:~$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
luizyformac@luizy-virtual-machine:~$ export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
luizyformac@luizy-virtual-machine:~$ nvm install 20
luizyformac@luizy-virtual-machine:~$ nvm -v
0.39.3
luizyformac@luizy-virtual-machine:~$ node -v
v20.4.0
luizyformac@luizy-virtual-machine:~$ npm -v
9.7.2
모두 다 설치되었다.
vi main.js
코드 복사 붙여넣기
^c
:wq
파일 확인하기
curl -X POST -H 'Content-type: application/json' --data [데이터] [목적지]
Axios란?
Axios는 node.js와 브라우저를 위한 Promise 기반 HTTP 클라이언트 입니다. 그것은 동형 입니다(동일한 코드베이스로 브라우저와 node.js에서 실행할 수 있습니다). 서버 사이드에서는 네이티브 node.js의 http 모듈을 사용하고, 클라이언트(브라우저)에서는 XMLHttpRequests를 사용합니다.
기사 제목을 가져오기위해 Axios로 뉴스 링크에 get요청을 보내자!
const axios = require('axios').default;
const link = 'https://news.naver.com/main/main.naver?mode=LSD&mid=shm&sid1=105';
const data = axios.get(link);
Axois는 Promise 객체를 활용하기때문에 실행문을 따로 작성해줘야한다.
Promise객체는 비동기 작업이 맞이할 미래의 완료 또는 실패와 그 결과 값을 나타낸다.
기본 예제
let myFirstPromise = new Promise((resolve, reject) => {
// 우리가 수행한 비동기 작업이 성공한 경우 resolve(...)를 호출하고, 실패한 경우 reject(...)를 호출합니다.
// 이 예제에서는 setTimeout()을 사용해 비동기 코드를 흉내냅니다.
// 실제로는 여기서 XHR이나 HTML5 API를 사용할 것입니다.
setTimeout( function() {
resolve("성공!") // 와! 문제 없음!
}, 250)
})
myFirstPromise
.then((successMessage) => {
// successMessage는 위에서 resolve(...) 호출에 제공한 값입니다.
// 문자열이어야 하는 법은 없지만, 위에서 문자열을 줬으니 아마 문자열일 것입니다.
console.log("와! " + successMessage)
})
.catch((error) => {
console.log("에러!" + successMessage)
})
.finally((error) => {
console.log("무조건 실행!" + successMessage)
});
const axios = require('axios').default;
const link = 'https://news.naver.com/main/main.naver?mode=LSD&mid=shm&sid1=105';
const data = axios.get(link);
DOM 객체를 반환해주기 때문에 변수면 $으로 명명
const cheerio = require('cheerio');
const $ = cheerio.load(data);
decoder 사용하기
const decoder = new TextDecoder('euc-kr');
const content = decoder.decode(response.data);
[Linux] 쉘 스크립트(Shell script) 기초
쉘 스크립트란 간단히 말하자면 Unix커맨드등을 나열해서 실행하는 것이다. 언제 어떤 조건으로 어떠한 명령을 실행시킬 것인가, 파일을 컨텐츠를 읽어 들일 것인가, 로그 파일을 작성하는 것 등을 할 수 있다.
예시
test.sh
#!/bin/sh
echo "Hello, World!"
zsh
> sehll test.sh
> Hello, World!
입력
#!/bin/sh
read NAME
echo "Hello, $NAME!"
axios처럼 http 요청을 날리는 npm모듈이지만, 2020 부터 Deprecated 예정으로 사라질 예정이라고 한다. request 를 이용한 성공적인 크롤링 예제를 봤었지만, axios를 활용하는 방법을 고민해봐야겠다.
디코딩하고싶은 디코더 객체를 만든다.
const decoder = new TextDecoder('euc-kr');
인코딩하고싶은 내용을 binary형태로 가져와 인코딩한다.
axios.get(url, { responseType: 'arraybuffer', responseEncoding: 'binary' })
.then(response => {
if (response.status === 200) {
const html = decoder.decode(response.data);
const $ = cheerio.load(html);
});
const decoder = new TextDecoder('euc-kr');
const axios = require('axios').default;
const cheerio = require('cheerio');
const { Script } = require('domelementtype');
const url = 'https://news.naver.com/main/main.naver?mode=LSD&mid=shm&sid1=105';
//버퍼를 주고, 바이너리로 받아와야 원하는 형태로 인코딩 할 수 있다.
axios.get(url, { responseType: 'arraybuffer', responseEncoding: 'binary' })
.then(response => {
if (response.status === 200) {
const html = decoder.decode(response.data);
const $ = cheerio.load(html);
// 기사 제목을 선택하는 CSS 선택자를 사용하여 크롤링합니다.
const newsTitles = $('.sh_text_headline');
// 각 기사 제목을 출력합니다.
newsTitles.each((index, element) => {
console.log($(element).text());
});
}
})
.catch(error => {
console.log(error);
})
.finally(response => {
console.log("axois end");
});
출력
정부, 5G 신규 사업자에 26.5~27.3㎓ 800㎒폭 할당
넥슨 '데이브 더 다이버' 누적 판매량 100만장 돌파
포스코DX, 佛 물류자동화 기업 엑소텍과 맞손
지하갱도 통신망 구축…작업자 안전 ‘실시간 관리’
카카오엔터, 반년간 웹툰·웹소설 불법물 1420만건 차단
"주머니에 들어가는 양자 컴퓨터 시대 올 것" 꿈의 컴퓨터 만드는 김정상 아이온큐 공동 창업자[스타트업 리포트]
axois end