■ Unix/Linux 디스크 용량 확인 (df/du)

디스크 용량을 확인하는 명령어들이다. 



df : 디스크의 남은 용량을 확인 

df -k : 킬로바이트 단위로 현재 남은 용량을 확인

df -m : 메가바이트 단위로 남은 용량을 왁인 

df -h : 보기 좋게 보여줌

df . : 현재 디렉토리가 포함된 파티션의 남은 용량을 확인



■ 리눅스 bit수 확인 


# uname -m

x86_64 :64비트


■ 리눅스 버전 확인 


# cat /etc/issue

Ubuntu 16.04.2 LTS


■ smb.conf 파일을 변경 후 반드시 데몬을 재시작 해야 한다.

■ smb.conf other의 경우 readonly 속성으로 되어있다. 따라서 root 계정으로 접근하여 설정 변경해주자.

■ vi /etc/samba/smb.conf

 > vi 에는 세 가지 모드가 있다. 


 1. 입력모드 i, a, o, I, A, O를 누른 후 텍스트를 입력할 수 있는 상태 

 2. 명령모드(ESC모드) ESC키를 누른 상태 

 3. 콜론모드(Ex모드) - ESC키를 누르고, :(콜론)을 입력한 상태 

 > 처음엔 명령모드(ESC모드)이다. > i를 입력하여 입력모드로 진입  > 파일내용 변경 후 

 > 명령모드 진입 > :을 입력하여 콜론모드로 진입 > 파일내용 저장 후 종료 :w


■ vi 모드에서 문자열 패턴 검색 

/[찾고싶은 문자열 패턴]

/chpark

을 입력하면 chpark 과 일치하는 문자열 패턴을 확인할 수 있다. 


■ vi 편집기 사용법 

http://igoto.x-y.net/xe/linux/154


■ 계정 전체목록 보기

# cat /etc/passwd

or 간단

# cut -f1 -d: /etc/passwd 


■ 계정변경

$ sudo su [user]

$ su root 


■ 데몬은 사용자가 직접적으로 제어하지 않고, 백그라운드에서 돌면서 여러 작업을 하는 프로그램을 말한다. 

시스템 로그를 남기는 syslogd처럼 보통 데몬을 뜻하는 ‘d’를 이름 끝에 달고 있으며, 일반적으로 프로세스로 실행된다.


■ 폴더/파일

mkdir [경로] : 폴더 생성

rmdir [경로] : 폴더 삭제

rm -r(하위모두삭제) 파일명 : 파일 삭제

mv [이동할파일] [이동될위치] : 파일 이동

cp [복사할파일] [복사될 위치] : 파일 복사

type [application명] : 파일이 설치된 위치


mkdir -p /srv/samba/share  : 최상위 디렉터리의 /srv하위의 디렉터리를 트리구조대로 생성할 수 있다. (p:parent의 약자)

rmdir -R /data/samba/share : 최상위 디렉터리의 /data 하위의 디렉터리를 전부 삭제 할 수있다. (recursive의 약자 :재귀)


■ 디렉터리 / 파일 권한 변경

chown [user:Group명] 디렉터리 / 파일 

chmod [owner][other][group]권한 디렉터리 / 파일

ex) 

$sudo cd /srv/samba

$sudo chown root:sambashar share

$sudo chmod 777 share 


■ wget 명령어를 이용한 다운로드 


wget -O [파일명] [다운로드 url]

# wget -O samplevideo https://youtu.be/zYhZ-zyteGs


■ chmod 8진수를 사용하여 권한변경하기

 

0: none                               ---    

1: execute only                     --x

2: write only                        -w-

3: write & execute                -wx

4: read only                         r--

5: read & execute                 r-x

6: read & write                     rw-

7: read & write & execute       rwx



■ 서비스

ps -ef : 프로세스 상태 확인 ( grep과 함께 사용 _ ex. ps -ef | grep tomcat)


■ 압축

tar zxvf [tar명] : 압축해제                                                                                                                   


■ Advanced Packaging Tool (apt)


 □ apt-get update         // 패키지 인덱스 정보 업데이트

 □ apt-cache search jdk   // jdk 문자열 패턴이 있는 패키지 검색

 □ apt-cache show jdk-8   // jdk-8 문자열 패턴이 있는 패키지 정보 확인

 □ apt-get install jdk-7  // jdk-7 패키지 설치

 □ apt-get remove samba   // samba 패키지 삭제

 □ apt-get remove --purge samba // samba 패키지 (완전)삭제

 □ spt-get upgrade htop   // 설치된 htop 패키지 업그레이드 

 □ dpkg -l                // 설치된 패키지 리스트를 보여줌

 □ dpkg -l |grep samba    // samba와 관련된 패키지 리스트를 보여줌 

  



■ 환경변수

 

 a. gedit /etc/environment

 window와 동일한 방식으로 PATH 및 JAVA_HOME 추가

 ex) PATH="~~~:/usr/lib/java/jdk1.7.0_25" JAVA_HOME="/usr/lib/java/jdk1.7.0_25"

 실행 ) source [경로]


 b. export

 모든 변수 출력 : export 

 등록 : export 변수명=데이

 보기 : echo $변수




윈도우를 포함한 많은 OS들은 네트워크에서 그들의 컴퓨터이름을 나타내기 위한 주소 값들을 가지고 있다.

대표적으로 IP를 들 수 있으나 Microsoft OS에서는 NetBIOS를 사용하여 네트워크에서 고유한 이름 값을 가지고 있어서 각자의 컴퓨터를 확인할 수 있다.

'컴퓨터 이름'이 바로 NetBIOS를 사용한 이름값이다

네트워크에서 같은 IP를 가지고 있는 컴퓨터가 있으면 충돌이 발생하여 데이터를 교신할 수 없듯이, 컴퓨터 이름도 Microsoft OS의 네트워크에 같은 값이 존재하면 충돌이 발생한다.

 

\\192.168.71.128\samba


로 접속을 시도했다. 그러나 ...

동일한 사용자가 둘 이상의 사용자 이름으로 서버 또는 공유 리소스에 다중 연결할 수 없습니다. 서버나 공유 리소스에 대한 이전 연결을 모두 끊고 다시 시도 하십시오.

라는 alert 창이 계속 나타났다.




이러한 경우 pc, 노트북을 재부팅하면 문제가 해결된다. (Netbios를 사용한 네트워크에 \\192.168.71.128\IPC\ 등의 연결 내역이 사라지기 때문이다.)

하지만 나의경우 노트북을 절전모드 상태로 두었기 때문에 이러한 문제를 해결하는데 시간소요가 많았다. 

Microsoft OS에서는 NetBIOS를 사용한 네트워크에서 고유한 이름 값이 하나의 네트워크 주소에 할당되는데, 동일한 네트워크 주소로 중복 접속을 허용하지 않는다.


그렇다면 어떻게 해결하였는가.

cmd 창을 open 한다.

net use 라는 명령어를 날리면 아래와 같은 상태를 확인할 수 있다. 


C:\Users\Admin>  net use 



상태         로컬      원격                      네트워크


-------------------------------------------------------------------------------

OK                     \\192.168.71.128\IPC$     Microsoft Windows Network

OK                     \\203.239.163.124\IPC$    Microsoft Windows Network

OK                     \\203.239.163.20\IPC$     Microsoft Windows Network

명령을 잘 실행했습니다.


-- 캡처.01


위에서 볼 수 있듯이 원격접속을 하는데 있어서 이미 \\192.168.71.128 네트워크 주소로 connection이 된상태이다.

이러한 상태에서 아무리 \\192.168.71.128\samba 혹은 다른 하위 디렉터리로 접근하려 시도하여도 계속해서 

동일한 사용자가 둘 이상의 사용자 이름으로 서버 또는 공유 리소스에 다중 연결할 수 없다는 경고창만 마주할 수 밖에 없다.


해결방법은 이러하다. (samba 계정, 비밀번호 일치하더라도 절대 접속안된다.★)

net use /delete \\192.168.71.128 라는 명령어를 날리면 아래와 같은 상태를 확인할 수 있다

C:\Users\Sean>net use /delete \\192.168.71.128

\\192.168.71.128이(가) 제거되었습니다.


--캡처.02



다시 net use 명령어를 사용하여 Microsoft OS의 NetBIOS를 사용한 네트워크에서 고유한 이름 값을 확인해보자.

다음과 같은 상태를 확인 할 수 있다. 


C:\Users\Sean>net use

새 연결 정보가 저장됩니다.


상태         로컬      원격                      네트워크


-------------------------------------------------------------------------------

OK                     \\203.239.163.124\IPC$    Microsoft Windows Network

OK                     \\203.239.163.20\IPC$     Microsoft Windows Network

명령을 잘 실행했습니다.


-- 캡처.03


이렇게 되면 현재 \\192.168.71.128 네트워크 주소로 연결된 내역이 없으므로 

\\192.168.71.128\samba 연결을 시도할 경우 정상적으로 해동 공유폴더에 접근이 가능해진다.

0. samba 설치되어있는지 확인

    $ sudo dpkg -l |grep samba


1. Samba 설치

 
    $ sudo apt-get install samba smbfs 


2.1. 시스템 사용자 등록(useradd) 및 패스워드 등록 (passwd)

 ※  samba 접속용 계정과 비밀번호 설정을 하기 전에 반드시 시스템 사용자를 등록 해줘야하는 절차를 거쳐야한다.

    $ sudo useradd chpark    

    $ sudo passwd chpark     

    Changing password for user chpark 

    New UNIX password:  패스워드입력 

    Retype new UNIX password:  패스워드확인 

    passwd: all authentication tokens updated successfully. 


2.1.1 계정관련 파일 확인

    $ sudo cat /etc/passwd  

2.1.2 계정관련 확인 (해당 id)

    $ sudo id chpark 


2.2. 공유할 디렉토리에 Samba  접속용 계정과 비밀번호 설정

    $ sudo smbpasswd -a chpark 

    New SMB password:  패스워드입력 

    Retype new SMB password:  패스워드확인 


==========================================================

/etc/samba/smb.conf 파일을 설정하기 전에  백업시켜놓자. (설정파일 매우 중요하므로)

# mkdir /chpark/data/bakup

# cp smb.conf  /chpark/data/backup

# cd /chpark/data/backup

# mv smb.conf smb.conf.bak

==========================================================


3. 공유 폴더 생성 및 권한 설정

3.1 (공유할) 디렉터리 생성

    $ sudo mkdir -p /srv/samba/share 

3.2 디렉터리 권한 설정 (change owner)

    $ sudo chown nobody:nogroup /srv/samba/share/ 



4. smb.conf 설정

    $ sudo vi /etc/samba/smb.conf 



#======================= Global Settings =======================

[global]

## Browsing/Identification ###

# Change this to the workgroup/NT-domain name your Samba server will part of

   workgroup = WORKGROUP

# server string is the equivalent of the NT Description field

   server string = %h server (Samba, Ubuntu)

# Windows Internet Name Serving Support Section:

# WINS Support - Tells the NMBD component of Samba to enable its WINS Server

#   wins support = no

# WINS Server - Tells the NMBD components of Samba to be a WINS Client

# Note: Samba can be either a WINS Server, or a WINS Client, but NOT both

;   wins server = w.x.y.z

;   security = user

;   encrypt passwords = yes

;   smb passwd file = /usr/bin/smbpasswd

# This will prevent nmbd to search for NetBIOS names through DNS.

   dns proxy = no

# This will allow access hosts for Using Samba Server

   hosts allow = 192.168.71.    

// 접근하는 호스트의 ip or 호스트의 네트워크대역

// 상황에 따라서 ~! 71번 네트워크 대역에 있는 호스트에 대하여 전부 허용 



#======================= Share Definitions ======================

# Shared Friles scripting_02
 [samba]
  comment = Shared File Server for using Samba Server  // Comment
  path = /srv/samba/share           // Samba로 공유할 디렉토리 경로 (절대경로)
  guest ok = no                         // yes: 모두 접근 가능(samba 계정은 있어야 함)
  create mask = 0777                  // 새로운 파일이 생성되었을 때 가지게 될 파일 권한을 지정                           
  directory mask = 0777              // 디렉터리의 권한을 지정
  browseable = yes                     // 공유이름을 브라우저에 표시할 수 있게 하는 기능                              
;  public = yes                           // guest ok와 같은 옵션으로 no로 설정하면 
// 다른 사용자들은 이용할 수 없고 개인 사용자만 사용할 수 있게 된다
  readonly = no                         // (= writable : yes)
  host allow = 192.168.71.            // 접속을 허용할 IP 네트워크대역
  valid users = chpark                 // guest ok : no를 줄 경우 접근할 수 있는 사용자에 대하여 지정
                                             // 그룹일경우 반드시 @(앳)을 꼭 붙여야한다.

※ valid users가 없고 guest ok = yes  혹은 public = yes 일 경우에 
모든 samba 계정을 가지고 있는 사용자들이 접근 가능하다.
결론적으로 valid users가 key 가 되는 property이다. 

5. smb.conf 설정 후 반드시 데몬을 재시작해야 설정파일이 반영된다.

    $ sudo /etc/init.d/smbd restart 

    or 

    $ sudo /etc/init.d/smbd stop 후에 $ /etc/init.d/smbd start 




■ 참고 :

 https://help.ubuntu.com/lts/serverguide/samba-fileserver.html

 참고해볼만한 주소:

http://se.uzoogom.com/120

http://hamonikr.org/board_bFBk25/16679

http://mslee89.tistory.com/71

http://anti1346.egloos.com/v/4863483

■ ssh key

ssh, rsync, git 과 같은 기술을 사용하면서, 로그인 없이 보다 안전한 방법으로 인증하고자 할 때 ssh 공개키를 이용하면 편의성과 보안성을 모두 증진시킬 수 있다. 


■ ssh key 이해 

 - host_1 의 IP : 192.168.0.4  

 - host_2 의 IP : 192.168.0.76

가 있다고 가정하자.

host_1 에서 host_2 로 접속하고자 할 땐  

$ ssh chpark@192.168.0.76 

$ password  // s12345 입력 시 host_2(리눅스)에 로그인 가능하다. 

이 때 비밀번호를 입력 하지 않으면서도 훨씬 더 안전한 방법으로 로그인 하는 방법을 알아보자. 

먼저 ssh 공개키, 비공개키를 만들어야 한다.  ( 비공개키는 절대 노출되어서는 안된다. ) 

## host_1 192.168.0.4 에 chpark 계정으로 로그인

$ ssh-keygen 

Enter file in which to save the key  (/home/chpark/.ssh/id-rsa)     

// (.ssh) .이 들어간 디렉토리의 경우 숨긴 파일임을 의미한다.


key 가 생성된다. 

ssh key 가 생성된 디렉토리를 찾아가보자. 

$ cd ~/chpark/.ssh

$ ls -l

id_rsa (ssh private key) , id_rsa.pub (ssh public key) 이 생성된 것을 볼 수 있다. 


host_1에 생성된 id_rsa_pub 의 내용을  host_2 의  인증된 키 목록 인 authorized_keys 에 붙여 넣어주면 

host_1에서 따로 로그인 하지 않고 오히려 더 안전하게  host_2에 접근할 수 있다. 


■ ssh-copy-id 

이 유틸리티를 사용하면 authorized_keys 파일 끝에 id_rsa.pub 파일의 내용을 append 하게 한다.

 

■ ssh publick key를 사용하여 로그인 (실습)


## host_1 (192.168.0.4)

$ ssh-keygen

$ cd ~chpark/.ssh

$ ls -l

id_rsa , id_rsa_pub 가 있다.

$ ssh-copy-id srhwang@192.168.0.76

// 처음 192.168.0.76 다른 ip로 접근 시 password 최초 한 번은 입력해줘야 한다.


## host_2 (192.168.0.76)

$ cat authorized_keys 

// host_1 의 public ssh key (id_rsa.pub)의 내용이 authorized_keys  파일에 append 된 것을 볼 수 있다. 


===================================================

이 후부터는 

$ ssh srhwang@192.168.0.76 

을 입력하면 로그인 필요없이 접속하게 된다. 


※ 정기적으로 실행하는 크론(cron)을 사용하여 다른컴퓨터로 로그인 후 동기화하는 작업이 있을 경우 굉장히 유용하게 사용될 수 있다. 


■ 동기화 (인터넷을 통한 서버간 동기화)

(요약) 어떤 특정 컴퓨터에 반영된 내용과 서로 동일한 상태로 유지하게 하기 위한 것


■ rsync

rsync : remote synchronizing 의 약자 

(요약) 서로 독립되어있는 컴퓨터들을 네트워크 혹은 인터넷을 통해서 동기화 할 수 있게 하는 프로그램

(상세) 원격 서버의 파일을 네트워크를 거쳐서 전송하는 실행 소프트웨어이다. 파일 전송 시 수신처의 컴퓨터에 있는 파일을 가는 블록으로 분할해서 블록마다 검사합(checksum)을 송신원의 컴퓨터에 보낸다. 이 때 송신원의 컴퓨터는 그것을 점검해서 파일의 차이만큼 전송하기 때문에 네트워크를 효율적으로 이용을 할 수 있고, 시큐어 셸(SSH)등과 병용할 수 있어서 파일 전송 시 보안도 확보할 수 있다. 동일한 실행 소프트웨어로는 원격 복사 프로토콜 (RCP)이 있는데 보다 강력한 복제 기능을 가지고 있다. 


■ rsync를 사용하여 로컬환경에서 실습 (한 대 컴퓨터에서 테스트)

# mkdir throwD 

# mkdir catchD 

디렉토리 2개를 생성하자.

throwD 디렉토리 밑에 test1 ~test10까지 10개 파일을 생성하자.

# cd throwD

# touch test{1,10}     // 중괄호를 사용하여 한꺼번에 파일 생성이 가능하다. 

# ls -l

throwD 디렉토리에 있는 파일들을 catchD 디렉토리로 rsync를 사용하여 동기화 시켜보자. 

(실질적으로 이 것은 동기화가 아니라 파일 복사 개념이다. 단지 rsync의 개념을 이해하기 위한 도움.)

#  rsync -a throwD/ catchD   

throwD 밑에 있는 모든파일들(디렉토리포함)을 catchD에 동기화 시킴.

※ 주의사항: # rsync -a throwD catchD 로 throwD 뒤에 / 를 입력하지 않으면 throwD 디렉토리 안에 catchD 디렉토리를 만들게 되는 것이므로 주의하자. 


■ rsync의 장점

효율적으로 동작한다. 

이미 존재하는 정보 즉, 일치하는 파일이 아닌 정보가 변경된 파일 및 일치하지 않는 구성(디렉토리, 파일) 에 대해서만 동기화가 진행된다.


■ rsync 옵션

-av : 새롭게 변경된 정보의 동기화된 파일에 대해서만 정보가 출력된다. 

-azP : 데이터를 압축해서 전송, 전송상황을 progress bar로 볼 수 있다.

z : 데이터를 전송 시 압축해서 전송

P : 전송되는 상황을 Progress Bar로 보여준다. 


■ rsync의 장점 실습

$ cd catchD

$ rm test2 test8

$ ls -l 

test1, test3, test4, test5, test6, test7, test9, test10 

$ cd trhowD

$ touch test23, test42

$ rsync -av throwD/ catchD

새롭게 변경된 정보의 동기화된 파일에 대해서만 정보가 출력된다. 

test2, test8, test23, test42 에 대한 정보가 전송

$ ls -l 

test1, test2, test3, test4, test5, test6, test7, test8, test9, test10, test23, test42


■ rsync를 사용하여 네트워크 환경에서 실습 (네트워크가 구성된 환경에서 테스트)

기본적으로 동기화 될 (전송될) 컴퓨터에 전송할 컴퓨터의 ssh 인증서가 설정되어있어야 한다.

$ rsync -azP ~/rsync/throwD/ chpark@192.168.0.65:~/rsync/catchD     

// host1 의 홈디렉토리 밑의 rsync 하위에있는 throwD 디렉토리 밑에 있는 모든 파일 및 구성 요소 (디렉토리, 파일) 들을 

/192.168.0.65 ip의 chpark 계정의  홈디렉토리 밑의 rsync 하위에 있는  catchD 디렉토리로 동기화시키겠다.


+ Recent posts