본문으로 건너뛰기

"bash" 태그로 연결된 10개 게시물개의 게시물이 있습니다.

모든 태그 보기

NodeJS에서 커맨드 파싱하기

· 약 1분

zeit/arg 패키지를 이용하면 된다.

사용법

arg 함수 하나로 파싱이 가능하다.

const arg = require("arg");

// `options` is an optional parameter
const args = arg(
spec,
(options = { permissive: false, argv: process.argv.slice(2) })
);

세부적인 사용방법은 다음과 같다.

  1. 타입을 정하고
  2. 옵션과 축약 옵션을 정하고
  3. 검증을 넣는다.

소스

// 계정정보를 받는 스크립트라면
const help = () => {
console.log(`usage => ...`);
};

let args = {};
try {
args = arg({
"--help": Boolean,
"--user": String,
"--password": String,
"--verbose": arg.COUNT,
"--test": Boolean,

"-h": "--help",
"-u": "--user",
"-p": "--password",
"-v": "--verbose",
});
} catch (err) {
if (err.code === "ARG_UNKNOWN_OPTION") {
help();
process.exit(1);
}
}

if (!(args["--user"] && args["--password"])) {
help();
process.exit(1);
}

if (args["--test"] === true) {
process.env.TEST = 1;
}

vi 에디터 단축키 마스터하기

· 약 4분

viemu 의 단축키 리스트가 있지만, 손에 익기 전엔 사용하기가 힘들다.

image from hexo

a, i, 저장, 나가기 이런 기초적인 건 제외하고 vi 에디터에서 더 빠른 작업을 위한 명령어들을 다시 알아보자.

커서
l 또는 →오른쪽 한 문자
h 또는 ←왼쪽 한 문자
j 또는 ↓한 줄 아래로
k 또는 ↑한 줄 위로
0현재 줄 처음으로
^현재 줄 첫 번째 공백 아닌 글자로
현재 줄 마지막으로
W다음 단어나 마침표 기호 처음으로
shift + W다음 단어 처음으로 (마침표 무시)
B이전 단어나 마침표 기호 처음으로
shift + B이전 단어 처음으로 (마침표 무시)
ctrl + F 또는 PageDown한 페이지 아래로
ctrl + B 또는 PageUp한 페이지 위로
number + shift + G (1G)해당 줄로
shift + G파일의 마지막 줄로

L, H, J, K 가 문자 이동에 사용되는 이유는, 방향키까지 손가락을 움직이기엔 너무 멀기 때문이다.

편집

빈줄 추가

커서
o현재 줄 아래에 빈 줄 추가
shift + O현재 줄 위에 빈 줄 추가

삭제 및 자르기

d 명령어는 삭제한 텍스트를 버퍼에 보관한다.

커서
x현재 문자
3x현재 문자를 포함한 다음 2개 문자
dd현재 줄
4dd현재 줄을 포함한 다음 4줄
dW현재 커서부터 다음 단어 앞까지
d $현재 커서부터 현재 줄 끝까지
d0현재 커서부터 현재 줄 맨 앞까지
d^현재 커서부터 그 줄의 공백아닌 첫 글자까지
dG현재 줄부터 파일 끝까지
d10G현재 줄부터 다음 10번째 줄까지

복사

커서
yy현재 줄
4yy현재 줄을 포함한 다음 3줄
yW현재 커서부터 다음 단어 앞까지
y $현재 커서부터 현재 줄 끝까지
y0현재 커서부터 현재 줄 맨 앞까지
y^현재 커서부터 그 줄 공백아닌 첫 글자까지
yG현재 줄부터 파일 끝까지
y10G현재 줄부터 다음 10번째 줄까지

붙혀넣기

p

치환

:%s/Search/Replace/gc
  • %: 파일 열 전체 (1,$ 라면 1번 줄부터 파일 끝까지)
  • s: search and replace
  • /Search/Replace/: Search 를 Replace 문자열로 치환
  • g: global
  • c: confirm 실행

치환 확인 명령

작업
y치환 실행
n건너뛰기
a전체 치환
q종료
l이번만 치환하고 종료
ctrl + E스크롤 위로 이동
ctrl + Y스크롤 아래로 이동

thefuck 설치하기

· 약 2분

이게 뭐죠

커맨드로 명령어를 실행하다보면 생각보다 오타를 많이 치게 된다 tab tab 자동완성 기능과 Oh-My-Zsh 의 syntax highlighting 기능을 사용한다면 충분히 커버가 가능할 것 같지만 현실은 그렇지 않다.

# git checkout master를 치고 싶었으나..
$ git checktou master
git: 'checktou' is not a git command. See 'git --help'.

The most similar command is
checkout

thefuck 을 활용하면 오타가 나 분노한 나의 마음을 표출할 수 있다.

예제

설치

다들 python 3.6 버전 정도는 갖고 있다고 가정한다.

$ pip install thefuck

alias 설정

fuck 만 쳐도 thefuck 의 기능을 사용하기 위해 alias 설정을 해주자.

git bash

bash_profile 에 아래처럼 추가해준다.

vi ~/.bash_profile

eval "$(thefuck --alias)"

환경 변수 설정

  1. Win+R > sysdm.cpl
  2. 고급 > 환경 변수 > 시스템 변수 > 새로만들기 에서 PYTHONIOENCODING 값을 utf-8로 준다.
  3. 확인 ✔️ X 3

powershell

ps 를 주로 사용한다면 설치 후 $PROFILE 파일에 값을 넣어주면 된다.

PS > Notepad $PROFILE

$env:PYTHONIOENCODING="utf-8"
iex "$(thefuck --alias)"

profile 파일이 없다고 오류가 발생하면, 아래 명령어로 profile 파일을 만들어주자.

PS > New-item -type file -force $PROFILE

활용하기

$ git checkuot master
git: 'checkuot' is not a git command. See 'git --help'.

The most similar command is
checkout

$ fuck
git checkout master [enter/↑/↓/ctrl+c]
Already on 'master'
Your branch is up to date with 'origin/master'.

오타 걱정 없이 쉘 커맨드를 실행할 수 있게 되었다.

youtube-dl로 유튜브 무료 다운로드하기

· 약 5분

유튜브, 비메오 등의 영상을 소장하고 싶거나 좋은 노래를 다운받아서 듣고 싶을 때 많은 고민을 하게 된다 Youtube Free Download 같은 사이트에서 광고를 한참 보다가 한개씩 다운받아야하고, 영상일 경우 저화질만 받을 수 있다

이 고민거리를 한 방에 해결해주는 Youtube-DL(DownLoad)이 있다 시작해보자.

커맨드와 매뉴얼 설치방법으로 나눴다.

윈도우

scoop 설치

쉽게 설치하기 위해서 윈도우 패키지 매니저인 Scoop을 먼저 설치하자. 시작표시줄 우측 클릭 후 속성에 들어가면 win + x 키를 누를 때 관리자 파워쉘로 접속할 수 있는 설정이 있다. 설정을 체크해주고, win + xa 키를 누르면 관리자 파워쉘로 접근한다.

PS > iex (new-object net.webclient).downloadstring('https://get.scoop.sh')

패키지 설치

# ffmpeg 은 음악, 영상 파일 포맷 변환기이다.
$ scoop install ffmpeg youtube-dl

수동 설치

위에 커맨드가 너무 어렵다면 매뉴얼대로 설치해보자. 여기를 누르면 다운받는다 (사실 이게 더 쉽지만 쉘로 설치하는게 뭔가 나이스하니까)

비디오를 오디오로 변경해주기위해 ffmpeg를 다운받아야한다. 링크를 따라가서 Download Build 버튼을 클릭해 압축을 풀어주자

ffmpeg/bin 안에 youtube-dl.exe 를 넣어준다

환경 변수 설정

  1. Win+R > sysdm.cpl
  2. 고급 > 환경 변수 > 시스템 변수 > Path 선택 > 편집 > 새로만들기 에서 ffmpeg/bin 경로를 넣어준다.
  3. D:\ffmpeg\bin
  4. 확인 ✔️ X 3

Win+R > cmd를 친 뒤에 테스트를 해본다, 아니면 Win+x > cmd (or Powershell) 한 다음 열어도 된다.

# ffmpeg 세팅 확인
$ ffmpeg -version

ffmpeg version N-90433-g5b31dd1c6b Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 7.3.0 (GCC)

# youtube-dl 세팅 확인
$ youtube-dl --version

2018.03.14

# brew 로 한 번에 설치가 가능하다.
$ brew install youtube-dl

사용법

mp4 다운로드

$ youtube-dl 주소

# mp4 best quality로 다운받고 싶다면
$ youtube-dl 주소 -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best'

# 4K 영상을 다운받고 싶다면
$ youtube-dl 주소 -f '(bestvideo[vcodec=vp9]/bestvideo[ext=mp4]/bestvideo)+bestaudio/best'

# 비공개 비밀번호 입력 영상이라면
$ youtube-dl 주소 --video-password 비밀번호

# 로그인하고 받아야되는 영상이라면
$ youtube-dl 주소 -u 아이디 -p 비밀번호

mp3 다운로드

# audio-quality는 기본값이 5고 0으로 갈수록 좋은 음질
$ youtube-dl 주소 -x --audio-format mp3 --audio-quality 0

예시

트위터의 경우 동영상 주소 복사 버튼을 클릭하면 나오는 주소로도 다운로드가 가능하다.

# 영상 다운로드
$ youtube-dl https://www.youtube.com/watch?v=IlSY06XGu3Y

# mp3 다운로드 일반음질 (128K)
$ youtube-dl https://www.youtube.com/watch?v=nfs8NYg7yQM -x --audio-format mp3

# mp3 다운로드 고음질 (VBR)
$ youtube-dl https://www.youtube.com/watch?v=nfs8NYg7yQM -x --audio-format mp3 --audio-quality 0

버전 업데이트

명령어 하나로 셀프 업데이트가 가능하다.

# 다운로드 오류 발생시 업데이트하면 해결된다.
$ youtube-dl -U

지원하는 사이트

유튜브 말고 수많은 사이트의 리소스 다운이 가능하다. 사이트 목록은 여기서 확인 가능하다.

Linux startup 파일에서 피해야할 것

· 약 2분

스타트업 파일은 사용자가 로그인 할 때 시스템이 어떻게 반응해야 하는지를 결정한다. 스타트업 파일 수정시에 다음 사항들을 꼭 피해야한다.

  • 셸 스타트업 파일에 그래픽 명령을 넣지 않는다.
  • 셸 스타트업 파일에 DISPLAY 환경 변수를 설정하지 않는다.
  • 셸 스타트업 파일에 터미널 유형을 설정하지 않는다.
  • 스타트업 파일에서 표준 출력으로 인쇄하는 명령을 실행하지 않는다.
  • 셸 스타트업 파일에 LD_LIBRARY_PATH를 결코 설정하지 않는다.

LD_LIBRARY_PATH 변수 조작시 런타임 링커가 모든 프로그램에 대해 이 디렉터리들을 찾기 때문에 충돌을 일으킬 수 있고, 라이브러리의 조합이 틀어질 수 있기 때문이다.

추가적으로 디폴트 스타트업 파일에 상세한 주석을 충분히 첨부한다.

쉘 스크립트 if 조건변수

· 약 2분

쉘 스크립트의 비교 변수 몇 가지를 알아보자.

연산자기능예시
-afile_exists[ -a /etc/passwd ]
-dfile_exists && is_dir[ -d /etc ]
-ffile_exists && is_file[ -f /etc/passwd ]
-sfile_exists && not empty[ -s /etc/passwd ]
-w해당 유저로 쓰기 가능[ -w test.txt ]
-x해당 유저로 실행 가능[ -x test.sh ]
-N마지막 파일 읽은 시점부터 변경점이 있는지[ -N test.txt ]
-O해당 유저의 파일인지[ -O test.txt ]
-G해당 그룹의 파일인지[ -G test.txt ]
-ntB파일보다 A파일이 새로운지[ A_file -nt B_file ]
-otB파일보다 A파일이 오래됬는지[ A_file -ot B_file ]

숫자 비교

연산자기능예시
-ltLess than[ 0 -lt 1 ]
-leLess than or Equal[ 1 -le 1 ]
-eqEqual[ 1 -eq 1 ]
-gtGreater than[ 1 -gt 0 ]
-geGreater than or Equal[ 1 -ge 1 ]
-neNot Equal to[ 1 -ne 0 ]

Vi, Vim에서 줄번호 표시

· 약 1분

Vi Editor의 줄번호를 표시해보자

파일을 연 다음 아래 명령어를 입력한다.

표시하기

:set number

image from hexo

추가적으로 라인이동에 필요한 단축키

  • G (shift+g) 문서 맨 끝으로 이동
  • gg (1G) 문서 처음으로 이동
  • {{number}} + G number 번째의 라인으로 이동 (예시 : 300G)

sublime text에서 Git Bash 실행

· 약 1분

패키지 설치

Package Control을 열어 Terminal 패키지를 설치한다.

Git Bash 와의 연동

Preferences > Package Settings > Terminal > Settings - User 메뉴에서 터미널 경로를 수정한다.

{
// git-bash가 설치된 경로
"terminal": "C:\\Program Files\\Git\\git-bash.exe",
"parameters": []
}

단축키 추가

기본 단축키는 ctrl+shift+alt+t 라 어려우니 변경해주자. Preferences > Key Bindings 메뉴에서 단축키를 추가한다.

{ "keys": ["ctrl+alt+t"], "command": "open_terminal_project_folder" }

이제 ctrl+alt+t 키로 현재 프로젝트에서 깃 배쉬창을 바로 띄울 수 있다.

Git 원격 저장소 생성 및 SSH 인증 - Github 포함

· 약 3분

서버에서 실행

# 서버에 로그인 후 원하는 위치에서 폴더를 만든다.
$ mkdir [이름].git

# 해당 폴더로 이동한다.
$ cd [이름].git

# Git 원격 저장소를 초기화한다.
$ git init --bare

SSH 생성

클라이언트에서 실행

Email 인증 방식

Github 인증을 하려면 이 방식을 이용해야한다.

# 키 발급
$ ssh-keygen -t rsa -C "[email protected]"

# 클라이언트에 이메일 키 추가
$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/id_rsa

사용자 인증 방식

# 키 발급
$ ssh-keygen -t rsa

SSH 폴더로 이동해 인증키 복사

클라이언트에서 실행

$ cd ~/.ssh
$ vi id_rsa.pub

# id_rsa.pub의 내용을 복사한다.

인증키 등록

일반 서버

서버에서 실행

# ssh 폴더로 이동
$ cd ~/.ssh

# 인증키 파일을 연다.
$ vi authorized_keys

# id_rsa.pub에서 복사된 인증키를 하단에 추가한다.

Github

Github에서 실행

Email-인증-방식 으로 인증키를 생성해야하고 이메일은 github 에 로그인하는 이메일과 같아야한다

키 등록

github 에 로그인 후 설정에 가서 복사한 키를 등록한다. image from hexo

인증여부 확인

클라이언트에서 실행

# 등록 후 에 클라이언트에서 인증여부를 확인한다.
$ ssh -T [email protected]

# You've successfully authenticated 가 보이면 인증완료

Git Repositiory 초기화

클라이언트에서 실행

$ git clone 서버유저명@서버아이피:[이름].git
# ex ) git clone [email protected]:test.git