Tistory블로그에서도 최근에 기본 문서 에디터로 마크다운 문법을 지원하기 시작 한 듯 하다.
간결하게 내용 위주로 문서를 작성할 수 있고 표현 포맷의 정형화 과정도 나름 쉽게 할 수 있다는 점에서 마크다운 문법은 꽤 괜찮은 언어라고 생각한다.

이번 페이지에서는 순수 기본 에디터만을 이용하여 마크다운 문법에 대해 작성 해 보고
기본 작성 내용을 기반으로 문서 내 HTML태그 혹은 CSS등 스타일시트 내용을 적용하여 문서를 보다 예쁘게 작성하는 식으로 나아가려 한다.

Markdown Page List

마크다운 문법 - 1. 기본 작성


제목

  • HTML의 <h1>, <h2> 등의 태그와 같이 제목 표현을 할 수 있다.
  • <h1> ~ <h6>까지 6단계로 작성 가능하다.
  • 보통 기본 문법으로는 지원하지 않는 경우가 많지만, toc(목차) 생성을 지원하는 마크다운 포맷에서는 목차 기준이 된다.
  • #를 통해 제목을 표현한다.
마크다운 문법 표현
# 1단계

1단계

## 2단계

단계

### 3단계

3단계

#### 4단계

4단계

##### 5단계
5단계
###### 6단계
6단계
  • 보통 전체 페이지의 대 제목은 =문자를 3개 이상 나열하여 표현하기도 한다.
제목
====

강조

  • 문자나 글귀 강조를 위해 사용(굵은 글씨, 기울임 체 등)
마크다운 문법 같은 의미의 HTML 태그 표현
*기울임꼴* 또는 _기울임꼴_ <em> 기울임꼴
**굵게** 또는 __굵게__ <strong> 굵은 글씨 체
~~취소선~~ <del> 취소선
없음 <u> 마크다운 문법에는 없음

인용

  • 인용표현으로 하고자 하는 내용앞에 >문자로 표현한다
> 인용문이 있고, 
>> _인용구 안에 인용문을 다음과 같이 표현할 수 있다._
  • 위 블럭 안의 내용은 아래와 같이 표현 된다.

    인용문이 있고,

    인용구 안에 인용문을 다음과 같이 표현할 수 있다.

목록

  • 순서 있는 목록(ordered list)과 순서 없는 목록(unordered list)으로 표현 할 수 있다.
  • 순서 있는 목록은 오로지 오름차순 형태로만 정렬 가능하다.
  • 리스트 표현 상에서의 depth는 탭을 이용하여 구분한다.
  • 순서 있는 목록은 숫자.로 표현한다.
  • 순서 없는 목록은 +, *, -문자들을 통해 표현하며 모든 기호는 리스트의 depth가 동일한 경우 동일한 기호로 표현 된다.
* C++
    1. C
    1. C++
    1. Template
        1. Meta Programming
        1. Generic Programming
+ Python
- Markup Language
    1. HTML
        * HTML5
    1. XML
    1. Markdown
  • 위 블럭은 아래와 같이 표현 된다.
    • C++
      1. C
      2. C++
      3. Template
        1. Meta Programming
        2. Generic Programming
    • Python
    • Markup Language
      1. HTML
        • HTML5
      2. XML
      3. Markdown

수평선

  • \<hr\>태그와 같은 수평선을 *문자 혹은 -문자를 단독으로 나열함으로써 표현 할 수 있다.
마크다운 문법 표현
* * *
***
---
- - -

위 의 표현 열 들의 결과는 마크다운 기본 문법으로 표현이 되지 않아 <hr> 태그로 표현함.

줄바꿈(Line Breaks)

  • 라인의 끝에 2개의 공백을 넣고 다음 라인을 시작한다.
  • <br> 태그를 직접 사용한다
마크다운 문법 결과
동해
남해
동해
남해
소나무<br>쿼드로 소나무
쿼드로

링크

  • 마크다운의 링크는 크게 외부링크와 내부링크로 나눌 수 있다.

    • 외부링크
    1. 인라인링크
      [표현문구](링크주소 "툴팁 텍스트")

      구글

    2. 참조링크
      [표현문구][1]
      (... 다른 내용 쓰다가 문서 어디서든) [1]: https://google.com "구글"

      [구글][1]
      (다른 내용들을 기입하던 중이라도 상관 없이 쓸 수 있다)
      [1]: https://google.com "구글"

    3. URL 링크
    • 마크다운 문서내 일반적으로 url 주소 혹은 e-mail 주소등은 링크로 표현이 되며 아래와 같으 <, >문자들을 통해서도 주소 설정이 가능하다.

      <https://google.com>

      https://google.com

    • 내부링크

      • 문서 내 참조(책갈피) 등 때 사용하는 것으로 이동하고자 하는 위치에는 #문자로 마킹 된 title 항목이 있는 곳만 가능하다.
      • 이동하고자 하는 위치의 title 은 영문으로만 이뤄진 곳이라야 한다.
        [표현문구](#marked-title)
        : # 문자로 제목으로 지정되어야 하며 링크로 지정하는 내용이 소문자와 '-'문자로만 쓰여져야 하기 때문에 영문으로만 이뤄진 것이어야 한다.
        ex [마크다운 페이지 LIST](#markdown-page-list)

        마크다운 페이지 LIST

각주(footnote)

  • 보통 보충 설명 및 출처 공개 등에 사용한다.
    마크다운[^markdown]
    (... 문서 내 어디서든)
    [^markdown]: 마크다운 (Markdown)은 마크업 언어의 일종으로, 존 그루버(John Gruber)와 아론 스워츠(Aaron Swartz)가 만들었다. 온갖 태그로 범벅된 HTML 문서 등과 달리, 읽기도 쓰기도 쉬운 문서 양식을 지향한다.

    마크다운[^markdown]

[^markdown]: 마크다운 (Markdown)은 마크업 언어의 일종으로, 존 그루버(John Gruber)와 아론 스워츠(Aaron Swartz)가 만들었다. 온갖 태그로 범벅된 HTML 문서 등과 달리, 읽기도 쓰기도 쉬운 문서 양식을 지향한다.

이미지

  • 이미지의 경우는 링크의 마크다운 문법과 매우 유사하다. 외부 링크 방식의 기본 마크다운 문법 앞에 !만 붙여 준다고 생각 하면 된다.
  • 다만, 이미지의 크기나, 결과물에서의 배치(레이아웃)등을 조절하는 것에는 자유롭지 못하다.

테이블

  • 표 내부에는 줄 바꿈을 지원하지 않기 때문에 직접 <br> 태그를 이용해야 한다
  • 헤더 셀을 구분하기 위해서는 최소 3개 이상의 - (dash)를 나열해야 한다.
  • 셀 병합에 대한 기능이 유연하지 않으며, 표준 지원이 아닌 듯 하다.
  • 정말 간단하게 작성할 테이블이 아니라면, <table> 태그를 익혀 쓰는게 유용하고 깔끔 할 것 같다.
    |    값        |                의미            |  기본값          |
    | ---------- | :---------------------: | :------------ |
    |`static`    | 유형(기준) 없음 / 배치 불가능 | `static`    |
    |`relative`    | 요소 **자신**을 기준으로 배치|          |
    |`absolute`    | 선행자 요소를 기준으로 배치    |          |
    |`fixed`    | *브라우저 창*을 기준으로 배치    |          |
    | cell span    | cell that spans across two columns       ||
  • 티스토리기본 마크다운 에디터 상에서는 아래와 같이 표현 된다.(셀 병합을 의도한 가장 마지막 행이 제대로 적용되어 있지 않은 것으로 나온다)
    의미 기본값
    static 유형(기준) 없음 / 배치 불가능 static
    relative 요소 자신을 기준으로 배치
    absolute 선행자 요소를 기준으로 배치
    fixed 브라우저 창을 기준으로 배치
    cell span cell that spans across two columns

Code Blocks

  • ~문자 3개를 나열한 뒤, 표현할 프로그램 language명을 명시하면 해당 언어에 맞는 코드 내용을 깔끔하게 표현 할 수 있다.
  • ~문자는 ` 문자로 대체 가능하다.
  • 표준으로 지정된 사항은 없는 듯 하다, markdown문법을 지원하여 변환해주는 확장 기능에 따라 적용 형식 (~~~{.cpp})이나 코드 하이라이트 스타일을 지원해주는 언어의 종류 등이 달라지는 듯.
  • 기본적으로는 대중적인 프로그램 관련 언어들은 거의 지원하는 것 같다.
    ``` cpp
    class Stack { ... };
    ```

Tistory 기본 마크다운 에디터 상에서는 코드 하이라이트 등의 스타일이 지원되지 않는 듯 하다.

class Stack {
public:
    void Pop();
    int Top();
};

결론

  • 비록 마크다운 작성 문법만으로는 정말 보기 좋게, 예쁘게 결과 문서를 만들어 낼 수 없다.
  • 다만, 순수 마크다운 작성 문법은 매우 쉽다.
  • 정말 간결하게, 내용 위주로 빠르게 결과문서를 작성하면서, 표현 포맷을 정형화 시키기에는 최적이라는 생각이다.
  • 지금 이 문서를 기반으로 간단한 HTML 태그와 css 스타일 적용을 통해 보다 나은 형태로 결과 문서를 바꿔보자.

001-markdown-base.md
9.5 kB

블로그 이미지

나오K

,

git 사용, 비밀번호 캐쉬하기

출처: [권선우의 스타트업하는 개발자]

git 사용 시, github 또는 bitbucket등의 원격 저장소에서 pull/push 할 경우 비밀번호 입력을 요구하게 되는데, 나 혼자 사용하는 환경에서 매번 비밀번호를 입력하는 게 번거로워 찾게 되었다.

방법은 git 설정 credetial.helper를 이용하는 것으로, 해당 방법을 통해 영원히 비밀번호 정보를 묻지않게 끔 할 수는 없으며, 그러기 위해서는 OS 단에서 제공해주는 ‘자격 증명 인증’이나 third-party 등의 외부 프로그램에서 제공하는 credential helper 옵션등을 이용해야 한다고 한다.

  • 설정 방법
    $ git config --global credential.helper 'cache --timeout=8640000'
    
    --global 옵션으로 설정 범위를 지정하며, --timeout=유지기간(초 단위)부분에 원하는 기간만큼의 값을 입력 해주면 된다.


블로그 이미지

나오K

,

.vimrc 설정 정리

Linux 2018. 8. 29. 16:38

vimrc 설정

vim설정을 위한 .vimrc 내용들 정리. 주로 내가 사용할 내용들만을 기준으로 다룰 것이다.

1. 기본 설정

set nocompatible        " 오리지널 vi와 호환되지 않게.
filetype off            " Vundle 설정을 위한 시작 부분 

" for Vundle -----------------------------------------

" end of Vundle -------------------------------------

" vim 기본 설정 영역
filetype plugin indent on

colorscheme molokai        " 컬러 스킴 설정.(plugin 설치 필요)

" Syntax 지원
if has("syntax")
    syntax on
endif

set encoding=utf-8         " encoding 설정
set fileencodings=utf-8,cp949,default,latin1
set termencoding=utf-8

" set printencoding=utf-8 " 인쇄 encoding 옵션
" set printmbcharset=ISO10646
" set printmbfont=r:NanumGothiccoding,c:yes,a:yes

set number                " 좌측 라인 넘버 표시
set numberwidth=6        " 넘버 표시 공간의 너비

set title                " 하단 편집 문서의 이름 표시
set ruler                " 하단부에 현재 커서의 위치를 표시

set shiftwidth=4        " 들여쓰기 간격
set tabstop=4            " tab 간격
" set expandtab            " tab을 space로 변경하여 저장

set cindent                
set autoindent            " 자동 들여쓰기
set smartindent

set hlsearch            " 검색 결과 강조
set incsearch            " 증가 방향으로 검색
set nowrapscan            " 검색 시 파일 끝에서 되돌려 검색하지 않게
set ignorecase            " 검색 시 대소문자 구분하지 않음

set nowrap                " 자동 줄 바꿈 사용하지 않음

set autowrite            " 자동 저장
set autoread        

" set paste                " 붙여 넣기 시 계단현상 방지
set showmatch            " 커서 위치 시 괄호의 끝 혹은 시작을 반전으로 표시

" 하단 상태 표시 라인 설정(vim-airline 플러그인 사용으로 대체)
" set statusline=%4*%<\ %1*[%F]
" set statusline+=%4*\ %5*[%{&encoding}, " encoding
" set statusline+=%{&fileformat}]%m " file format
" set statusline+=%4*%=\ %6*%y%4*\ %3*%l%4*/%L,\ %3*%c%4*\ \<\ %2*%P%4*\ \>
set laststatus=2        " 상태 라인 표시 위해(vim-airline 에서도 사용)

" set cursorline        " 현재 커서가 있는 라인을 강조

set tagbsearch            " 태그 데이터 베이스를 이진으로 검색

여기까지가 vim 을 위한 기본 설정 부분이었다.

주 참고 블로그: jjeong

2. Vundle을 이용한 플러그인 설치 및 설정

Vundle 이란 vim의 다양한 플러그인들을 설치 하기 쉽게 관리해주는 플러그인 매니저 이다.

가장 먼저 Vundle 플러그인을 설치해야 하는데, github에서 저장소를 clone 하는 형식으로 해당 플러그인을 설치할 수 있다.

$ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

그런 다음 Vundle 플러그인 활성화를 위한 작업을 해주어야 한다. 이 작업은 .vimrc 파일에서 Plugin 들을 명시하는 것으로 나의 경우는 1. 기본 설정에서" for Vundle -------" end of Vundle ------부분 사이에 설정 라인들을 넣었다.

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim

call vundle#begin()        " 관리할 플러그인들을 기술하기 위한 시작

" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'    " Vundle 관리를 위해 필요한 부분

" 관리할 플러그인 항목들을 나열한다. 
Plugin 'scrooloose/nerdtree'            " 파일트리 창을 보여 줄 수 있는 플러그인
Plugin 'scrooloose/nerdcommenter'        " 멀티라인 주석, 부분 주석 등에 대한 처리를 할 수 있는 플러그인
Plugin 'vim-airline/vim-airline'        " 하단 상태바에 더 많은 정보를 출력
Plugin 'tpope/vim-fugitive'                " vim에서 git의 기능을 사용할 수 있게 해준다
" Plugin 'scrooloose/syntastic'            " vi로 편집 중 실시간으로 문법 체크 기능을 제공 해 주는 플러그인
Plugin 'ctrlpvim/ctrlp.vim'                " 파일 찾기 기능(VS AssistX의 파일 네비게이터와 동일한 역할)

" Color scheme -----------------------------
Plugin 'altercation/vim-colors-solarized'
Plugin 'tomasr/molokai'
Plugin 'nanotech/jellybeans.vim'
" ------------------------------------------
"
Plugin 'valloric/youcompleteme'            " 코드 자동 완성 기능을 위한 플러그인
Plugin 'taglist.vim'                    " 디파인 매크로, 함수, 변수 등의 리스트를 정렬하여 보여 줄 수 있는 플러그인
Plugin 'DoxygenToolkit.vim'                " Doxygen 스타일의 주석을 자동으로 삽입 가능한 기능을 가진 플러그인
Plugin 'davidhalter/jedi-vim'            " python에 대한 문법 preview 기능(?)
" Plugin 'brookhong/cscope.vim'

filetype plugin indent on

call vundle#end()        " 관리 플러그인 종료

위와 같이 사용할 플러그인들을 넣어 준 후 .vimrc 저장한다. 위 기술한 Plugin들이 내가 사용하고자 하는 것들이며 더 많은 vim의 플러그인들은 Vim Awesome에서 찾아 볼 수 있다.

이제 vi의 커맨드 라인 모드 상에서 간단한 명령어를 통해 플러그인들을 설치 및 삭제 또는 조회 해 볼 수 있다.

  • PluginInstall: call vundle#begin()call vundle#end() 사이에 기술한 플러그인들을 설치 해 준다.
  • PluginList: 현재 .vimrc 파일에 기술 되어 있는 플러그인들을 볼 수 있다.
  • PluginClean: 설치한 플러그인을 지울 때 사용하는 명령어로 지우고 싶은 플러그인을 .vimrc에서 지우고 저장한 뒤 해당 명령어를 수행하도록 한다.

이상, 여기까지 Vundle을 이용해 간단히 플러그인들을 설치 하는 법을 알아 보았다. 물론 vim을 더 미려하게 사용할 수 있게 해주는 플러그인들은 설치 이후에 설정을 해 주어야만 된다.(보통 .vimrc을 통해 설정을 한다)

각자 나름대로 사용할 플러그인들의 상세 설정은 Vim Awesome 또는 검색을 통해 보다 더 많은 정보를 얻을 수 있을 것이다.

3. 단축키(키맵) 설정

참조: [vim wiki])

"-------------------------------------------------------
" key mappings
nmap <F3> <ESC>:wa!<CR>
nmap <F4> <ESC>:wqa!<CR>

nmap <F7> <ESC>:Tlist<CR>
nmap <F8> <ESC>:NERDTreeToggle<CR>
nmap <leader><F8> <ESC>:NERDTreeFind<CR>

if has("autocmd")

    " 자동완성
    " autocmd FileType * inoremap { {}<LEFT>
    " autocmd FileType * inoremap [ []<LEFT>
    " autocmd FileType * inoremap ( ()<LEFT>
    " autocmd FileType * inoremap " ""<LEFT>
    " autocmd FileType * inoremap ' ''<LEFT>

    " Python 설정
    autocmd BufNewFile,BufRead *.py setfiletype python
    autocmd FileType python nmap <F5> <ESC>:wa!<CR>:!python3 %<CR>

    " C++ 설정
    autocmd BufNewFile,BufRead *.h,*.hpp,*.cc,*.c,*.cpp setfiletype cpp
    autocmd FileType cpp nmap <F5> <ESC>:wa!<CR>:!make<CR>:cw<CR>
    autocmd FileType cpp nmap <F6> <ESC>:cn<CR>
endif

4. 기타 Plugin 설정 내용들

플러그인들의 사용과 관련해 주로 많이 참조한 블로그: [Bluesh님 블로그]
내가 사용하는 플러그인 및 설정한 내용 위주로 정리.

  • NERDTree

    let NERDTreeQuitOnOpen = 1
    let NERDTreeShowHidden = 1
    let g:NERDTreeWinPos = "right"
    
  • ctrlp

    let g:ctrlp_custom_ignore = {
    \ 'dir': '\.git$\|public$\|log$\|tmp$\|vendor$',
    \ 'file': '\v\.(exe|so|dll)$'
    \ }
    
  • youcompleteme 설치 방법 및 설정 내용

참조: [neverapple88의 블로그]

youcompleteme의 경우 플러그인 설치 뿐만 아니라 따로 컴파일 작업을 해주어야만 동작한다고 한다. 해당 컴파일을 수행하기 위한 패키지들을 설치.

$ sudo apt install build-essential cmake python-dev python3-dev clang

# 만일 C#을 지원하고자 한다면 `mono-devel`도 설치해야 한다.
$ sudo apt install mono-devel

# 2. Vundle을 이용한 플러그인들의 설치 과정을 진행 했다면, youcompleteme 플러그인 경로로 이동하여 서브모듈을 업데이트 한다.

$ cd ~/.vim/bundle/youcompleteme
$ git submodule update --init --recursive

이제 다음 과정으로, ~/.vim/bundle/youcompleteme 경로상에서 소스를 컴파일

$ ./install.py --clang-completer

C/C++ 스타일을 지원하기 위한 내용, --clang-completer옵션 외에도 32bit 버전에서의 컴파일을 위한 옵션 --system-libclang외에도 C# 지원을 위한 --omnisharp-complete 옵션 설정등이 있다.

여기까지, youcompleteme를 위한 설치 과정은 완료 되었으며, 다음으로 설정 부분에 대해 알아보자.

  • .vimrc에서 youcompleteme 옵션 설정
let g:ycm_global_ycm_extra_conf = '~/.vim/.ycm_extra_conf.py'    " 첨부파일을 다운받아 위치 시킨 경로를 적어 준다.
let g:ycm_confirm_extra_conf = 0
let g:ycm_key_list_select_completion = ['', '']
let g:ycm_key_list_previous_completion = ['', '']
let g:ycm_autoclose_preview_window_after_completion = 1
let g:ycm_warning_symbol = '>*'
let g:ycm_show_diagnostics_ui = 0
let g:ycm_server_python_interpreter = '/usr/bin/python3'
let g:ycm_seed_identifiers_with_syntax = 1
let g:ycm_python_binary_path = '/usr/bin/python3'
let g:ycm_collect_identifiers_from_tags_files = 0

" nnoremap g :YcmCompleter GoTo
" nnoremap gg :YcmCompleter GoToImprecise
" nnoremap d :YcmCompleter GoToDeclaration
" nnoremap t :YcmCompleter GetType
" nnoremap p :YcmCompleter GetParent
  • 표준 라이브러리에 대한 경로 추가
    $ echo | g++ -std=c++11 -v -E -x c++ -                      " g++를 사용할 경우
    $ echo | clang -std=c++11 -stdlib=libc++ -v -E -x c++ -        " clang을 사용할 경우
    

위 처럼 각각의 사용하고자 하는 compiler에 대한 조회를 했을 때,
#include "..." search starts here:#include <...> search starts here: 부터, End of search list. 사이에 있는 경로 정보들을 .ycm_extra_conf.pyflags 옵션 란안에 기존 다른 경로 값들이 위치 하고 있던 곳에 추가해주면 표준 라이브러리에 대한 함수나 클래스들의 목록도 볼 수 있게 된다.

# 추가 예시
(생략...)
'-isystem',
'cpp/BoostParts',
'-isystem',
'/usr/include/c++/7',
'-isystme',
'/usr/include/x86_64-linux-gnu/c++/7',
'-isystme',
'/usr/include/c++/7/backward',
'-isystme',
'/usr/lib/gcc/x86_64-linux-gnu/7/include',
'-isystme',
'/usr/local/include',
'-isystme',
'/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed',
'-isystme',
'/usr/include/x86_64-linux-gnu',
'-isystme',
'/usr/include',
get_python_inc(),
'-isystem',
(생략...)


블로그 이미지

나오K

,

확장자 bat, cmd 등의 콘솔창 실행화면 숨기기

Windows 프로그램들을 배치파일등으로 실행 시키거나 작업하는 경우가 있을 수 있는데, 해당 콘솔창 화면을 굳이 띄울 필요가 없는 경우가 있다.
방법은 간단하다. Windows Script Host를 이용하여 배치파일 등을 실행 시키면 된다.

노트패드등을 열어 아래와 같이 작성한다.

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & ["실행시킬 배치 스크립트 파일등의 전체경로"] & Chr(34), 0
Set WshShell = Nothing

간단히 스크립트의 내용을 설명하자면,

첫줄을 보면 set WshShell = WScript.CreateObject("WScript.Shell")라고 되어 있다.
프로그램 실행과 관련 있는 또 다른 개체인 WshShell을 만들기 위해 WScript 개체를 이용했고, WScript.CreateObject(“WScript.Shell”)이란 명령을 이용하여 WshShell 개체를 만들어 냈다.
이 개체를 이용하면 각종 쉘 명령을 실행시킬 수 있게 된다.

두번째 줄은 해당 경로에 있는 배치 파일등을 숨김 모드로 실행하는 문장이다.

마지막의 set wshshell = nothing문은 WshShell 개체를 다 사용했으면 운영체제에 명시적으로 알려줄 필요가 있는데 그러한 역할을 하는 문장이다.

이제 위처럼 작성한 내용을 확자명 vbs로 저장한 뒤 필요할 때 해당 파일로 실행하면 콘솔창 없이 배치 파일의 내용을 실행 할 수 있다.


블로그 이미지

나오K

,

우분투 timezone 변경

Linux 2018. 6. 5. 22:40

우분투 timezone 변경

우분투 설치 이후 타임존을 자신의 지역에 맞게 혹은 다른 지역으로 변경해야 할 일이 있을 수 있다.
아래 명령어를 통해 원하는 타임존 설정이 가능하다.

$ sudo dpkg-reconfigure tzdata


블로그 이미지

나오K

,

우분투 하드디스크 추가하고 자동 마운트 하기

[참조]: ReachLab.KR About

1. 우분투에 연결된 디스크 정보 확인

$ sudo fdisk -l

연결된 디스크는 /dev/sda, /dev/sdb 2개 이며 내가 테스트로 사용할 디스크는 /dev/sdb 이다.

2. 파티션 생성

$ sudo fdisk /dev/sdb

위 명령을 실행하면, 다음의 과정은 아래와 같이 command 입력의 문답 형태로 파티션 정보를 생성할 수 있다.

m을 누르면 다음의 설명의 내용도 확인 가능

Help:

  DOS (MBR)
   a   toggle a bootable flag
   b   edit nested BSD disklabel
   c   toggle the dos compatibility flag

  Generic
   d   delete a partition
   F   list free unpartitioned space
   l   list known partition types
   n   add a new partition
   p   print the partition table
   t   change a partition type
   v   verify the partition table
   i   print information about a partition

  Misc
   m   print this menu
   u   change display/entry units
   x   extra functionality (experts only)

  Script
   I   load disk layout from sfdisk script file
   O   dump disk layout to sfdisk script file

  Save & Exit
   w   write table to disk and exit
   q   quit without saving changes

  Create a new label
   g   create a new empty GPT partition table
   G   create a new empty SGI (IRIX) partition table
   o   create a new empty DOS partition table
   s   create a new empty Sun partition table

파티션을 만드는 기본적인 과정은 아래와 같이 진행.
새로운 파티션 생성을 위한 커맨드 n을 수행하면, 파티션의 타입, 시작 섹터 위치, 크기등의 정보를 입력형태로 받아 들이며 진행을 하게 된다.

파티션 정보를 만들었다면, 실제 디스크에 변경 내용을 반영할 수 있도록 w 커맨드를 입력.

파티션 생성 과정 종료 이후 다시 fdisk 명령어를 통해 디스크 정보를 확인 해 보자.

$ sudo fdisk -l

처음 최초 확인과 달리 /dev/sdb1로 Disk 정보 뿐만 아니라 장치 정보가 인식되고 있음을 확인 할 수 있다.

3. 포맷

생성된 파티션 정보를 적절한 파일 시스템으로 포맷을 해야 이용이 가능하다.
나의 xubuntu 환경에서는 기본적으로 다음과 같은 파일시스템을 지원하고 있었고, 현재 리눅스에서 가장 보편적으로 사용되고 있는 ext4 파일 시스템으로 포맷을 수행 하였다.

$ sudo mkfs.ext4 /dev/sdb1

4. 마운트(fstab을 통해 부팅시 자동으로 마운트)

uuid를 확인한다.

$ sudo blkid
(혹은)
$ ls -l /dev/disk/by-uuid

마운트 하려는 디스크의 uuid를 확인 한 후, fstab 열어 아래와 같이 수정한다.

$ sudo vi /etc/fstab

...
(fstab 파일의 가장 아래에 추가)
UUID=6254b89b-9dfd-4f53-b24e-bbdf5935ab12 [마운트할_위치_경로] ext4 defaults 0 0

위 내용을 저장 이후 재부팅을 하면 마운트할_위치_경로상에 해당 하드 디스크를 마운트하여 사용 할 수 있다.
fstab 내용의 4번째 이후에 필드에는 각각의 목적에 맞게 다른 값들을 설정할 수 있다.


블로그 이미지

나오K

,

리눅스 사용자 추가

Linux 2018. 6. 4. 02:22

리눅스 사용자 추가

1. 계정 존재 여부 확인

$ cat /etc/passwd | grep [계정명]

아무런 결과도 나오지 않는다면 없는 사용자 이다.

2. 홈 폴더 + 쉘 환경으로 사용자 만들기

  • 우분투, SUSE, 아치 리눅스
$ sudo useradd [계정명] -m -s /bin/bash

-m 옵션을 통해 홈 폴더를 생성.
-s 옵션을 통해 사용할 쉘 환경을 지정.

usermod -d /home/[계정명] [계정명] 또는 usermod -s /bin/bahs [계정명]을 통해서도 사용자 정보 추후에 수정 할 수 있다.

  • CentOS
$ sudo useradd [계정명]

3. 새로 만든 계정의 임시 비밀번호 할당

$ sudo passwd [계정명]


블로그 이미지

나오K

,

Xubuntu 18.04, FTP 설치

1. FTP 설치

$ sudo apt install vsftpd

2. 기본 설정

vsftpd.conf 파일을 통해 설정한다.

$ sudo vi /etc/vsftpd.conf

먼저 아래의 내용들을 찾아 적절히 주석을 해제하거나 작성하자.

write_enable=YES
chroot_local_user=YES       # 홈 디렉토리보다 상위로 이동 금지

# chroot_local_user=YES 일 때 상위 디렉토리로 이동을 허용하지 않을 유저를 위한 옵션
chroot_list_enable=YES
choort_list_file=/etc/vsftpd.chroot_list   # 홈 디렉토리 상위로 이동을 허용할 사용자의 리스트

# 기타 추가 내용
allow_writeable_chroot=YES

max_clients=15            # 최대 클라이언트
max_per_ip=10            # 동일 ip에서 최대 접속 가능한 수

utf8_filesystem=YES

기본적인 설정은 끝났다. 다만 방화벽을 사용하고 있다면 방화벽에 FTP 설정을 추가 해주거나, 무선 네트워크 환경의 서버라면 포트 포워딩 설정을 해 주자.

3. 기본 포트 21/20 변경하기

마찬가지로 vsftpd.conf 파일을 통해서 변경한다.

  • Active 모드에서의 변경
#--- inetd 모드가 아닌 독립 모드로 vsftp 실행
listen=YES
#--- FTP를 위한 Listen Port를 지정 한다.
listen_port=2021

#--- 데이터 전송을 위해서 Active Mode를 사용도록 설정 한다.
#--- Active Mode에서 FTP 데이터 전송을 위한 디폴트 포트는 20 port 이다.
port_enable=YES
#--- 데이터 전송을 위해서 Passive Mode를 사용하지 못하도록 한다.
pasv_enable=NO

#---  20번 포트의 데이터전송 연결을 허용 한다.
connect_from_port_20=YES
#--- Active Mode에서 사용할 FTP-Data 포트를 강제로 2020 port로 변경 한다.
ftp_data_port=2020
  • Passive 모드 설정 및 변경
#--- inetd 모드가 아닌 독립 모드로 vsftp 실행
listen=YES
#--- FTP를 위한 Listen Port를 지정 한다.
listen_port=2021

#--- 데이터 전송을 위해서 Passive Mode를 사용도록 설정 한다.
#--- Active Mode에서 FTP 데이터 전송을 위한 디폴트 포트는 20 port 이다.
port_enable=YES
#--- 데이터 전송을 위해서 Passive Mode를 사용하도록 한다.
pasv_enable=YES

#---  20번 포트의 데이터전송 연결을 허용 한다.
connect_from_port_20=YES

#--- Passive Mode에서 사용할 FTP-Data 포트를 강제로
#--- 50031 port에서 50040 port까지 허용 한다.
pasv_min_port=50031
pasv_max_port=50040

기타 설정

  • FTP 계정 SSH 접속 제한

FTP 접속만을 허용하고 싶은 사용자가 있다. 하지만 FTP를 위한 계정을 생성하면 SSH도 접속이 가능하게 된다. 보안을 위해 이 부분을 막고 싶은 경우 아래와 같이 하면 된다.

$ sudo vi /etc/passwd

해당 사용자이름이 적혀진 줄로 이동하여 마지막 부분의 /bin/bash/bin/false로 변경한다.

4. FTP 연결

가장 간단하게 윈도우 탐색기에서 연결을 할 수도 있다.

윈도우 탐색기를 열어서 ftp 주소를 입력 후 엔터

다음과 같이 사용자 이름과 계정을 입력하는 창이 나오고,

올바르게 입력 했다면 사용자 계정의 홈 디렉토리 위치로 접속이 된다.


사실 윈도우 기본 탐색기를 이용한 방법외에 보다 더 간단하고 다양한 옵션들을 무료로 사용할 수 있는 FileZilla 혹은 WinSCP 같은 프로그램을 이용하는 것이 더 좋을 것 같다.


'Linux > NAS with UBUNTU' 카테고리의 다른 글

Samba 설치 및 설정  (0) 2018.05.21
포트포워딩 등록하기  (0) 2018.05.20
ipTIME 공유기 DDNS 도메인 연결과 WOL 설정  (0) 2018.05.20
Xbuntu로 NAS 구축하기  (0) 2018.05.20
블로그 이미지

나오K

,

주분투 데스크탑 환경 자동 로그인 비활성화

데스크탑 환경에서 자동 로그인을 해 놓았는데 필요에 따라 다시 비활성화 하고자 할 때.

사용자 및 그룹 설정에서 찾아보면 옵션은 분명 존재하고 있는 것 같은데 해당 옵션을 활성화/비활성화를 해 봐도 제대로 적용되지 않는 듯 했다.(해당 옵션이 아닌 걸 수도??)

여하튼 lightdm.conf설정 파일을 수정하는 것으로 해결

$ sudo vi /etc/lightdm/lightdm.conf

아래와 같이 보이는 항목들 중 autologin-user의 값을 autologin-user=으로 변경.(사용자이름만 지우면 된다)

# lightdm.conf 파일 내용

[Seat:*] 
autologin-guest=false 
autologin-user=awesome 
autologin-user-timeout=0


블로그 이미지

나오K

,

우분투 Desktop 버전 사용자 로그인 이전에 SSH 등 서버 서비스 이용 불가 문제

우분투 데스크탑 버전에 서버 서비스(SSH, Web 등)를 설치하여 사용할 때 GUI 환경의 사용자 로그인을 완료 하지 않을 경우 해당 서버 서비스들에 접근 불가능한 문제가 있었다. (사용자 로그인을 하고 나면 정상 접속 가능)

해당 내용으로 이유를 검색 하던 중, 나와 비슷한 문제를 토로한 글의 답변에서 이유를 찾을 수 있었다.[참조]

데스크탑 환경에서 사용하는 네트워크 매니저가 로그인이 완료된 상태에서만 활성화 되어 그렇다는 내용이었고 답변자가 수정을 위해 추천하는 내용은 네트워크 매니저를 사용하지 말고 지워버릴 것을 추천하였다.

그러나 데스크탑 환경을 계속 사용할 것이고 터미널 상에서의 네트워크 시스템 관리를 할 수 있을 만한 능력이 없는 나에겐 무턱대고 지워 버릴 수는 없는 상황.

그래서 네트워크 매니저 옵션 중 변경할 만할 것이 없을까 살펴 보던 중,
내가 연결한 네트워크 설정 부분에서 ‘모든 유저들도 같은 네트워크를 사용’ 이라는 내용의 옵션이 체크 되어 있지 않은 것을 확인했고 해당 내용을 체크함으로써 활성화 시켰다.

[Menu]-[Settings]-[Network Connections]

위에서 현재 내가 연결한 연결을 더블 클릭하여 세부 설정으로 진입.


‘General’ 탭에서 해당 옵션을 활성 여부를 결정할 수 있다.

참고로 이미지 상에서는 네트워크 케이블을 통한 연결설정 이지만, 내가 실제로 겪었던 환경은 노트북의 무선랜을 통한 WI-FI 연결이었다. 무선 연결의 경우 일반적으로 검색되는 연결 AP가 다양할 수 있고 사용자 인증을 거쳐 연결하는 경우가 대부분 이기에 기본적으로 해당 옵션에 대한 것이 비활성화 되어 있는 것이 아닐까 한다.

이후 재부팅을 통해 사용자 로그인을 하지 않은 상태에서도 SSH 등 서버 서비스에 정상적으로 연결 가능함을 확인 할 수 있었다.


블로그 이미지

나오K

,