달력

52024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

VirtualBox에 Ubuntu 20.04 LTS를 설치한 후 samba를 설정했다.

 

1. samba를 위한 VirtualBox Network 설정

설치시 네트워크 설정에서 '어댑터1'을 NAT로 설정했더니 Ubuntu에서는 windows(host)로 ping은 가지만 반대로 windows(host)로 ping이 가지 않아 samba를 설정해도 연결이 되지 않을 것 같았다. VirtualBox의 네트워크 설정을 구글링해서 '어댑터2'에 호스트 전용 어댑터 설정을 했다.

 

< VirtualBox 설치시 기본 network 설정 host에서 ubuntu로 Ping이 안됨 >

 

< host에서 ubuntu로 ping이 되도록 network 설정 >

 

VirtualBox에 설치한 ubuntu를 실행 시킨 후 ifconfig로 host 전용 어댑터와 연결된 IP를 확인한다.

Windows의 cmd 창에서 ipconfig로 VirtualBox Host-Only network의 IP를 확인한다. 상위 세자리가 일치하지 않는 다면 일치하도록 수정한다.

 

2. ubuntu에 samba 설치

  • 저장소 업데이트
    • $sudo apt-get update
  • samba 설치
    • $sudo apt-get install samba
  • samba 패스워드 등록( 기존 ubuntu 유저의 id 사용 )
    • $sudo smbpasswd -a "ubuntu 유저 계정 id"

 

3. samba 설정

  • 문제시 복원용의 samba 설정 파일 백업
    • $cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
  • samba에 등록한 유저의 계정을 이용해 접근할 Directory를 설정

[ubunut] : windows에서 ubuntu로 접근할 때 사용할 경로명

path : samba에 등록한 user가 실제 접근할 수 있는 경로

geust ok : guest 권한

wirteable : 쓰기 권한

create mask : 파일 권한

directory mask : 폴더 권한

valid users : 접근 권한을 가질 수 있는 user ','로 구분하여 여려 계정을 설정할 수 있다.

  • samba 재시작
    • '$sudo service smbd restart' or 'sudo /etc/init.d/smbd restart'

 

4. windlow에서 ubuntu 접근

  • windows에서 탐색기를 열어 호스트 전용 ip를 입력하거나 samba에서 설정한 경로명까지 같이 입력하면 된다.
  • 최초 접속이 samba 설정에 등록한 ubuntu 계정의 id/passwd를 물어본다.

Posted by 생짜
|

Ubuntu 21.04 LTS 버전을 설치하고 Dbus 작업을 하기 위해 

 

#include <dbus/dbus.h>을 선언했다.

컴파일에서 'dbus/dbus.h'이 찾을 수 없다는 'No search file or directory' 에러가 발생했다.

'/usr/include' 폴더에 들어가보니 'dbus-c++1'만 설치되어 있고 'dbus-1.0'은 설치되어 있지 않았다.

 

컴파일을 위해 아래와 같이 dbus-1.0을 설치해 준다.

 

#update the package index
sodu apt-get update

#Install libdbus-1-dev deb package
sudo apt-get install libdbus-1-dev

 

 

자세한 설명은 아래 URL에 가서 확인하면 된다.

Lib Ubuntu 패키지 사이트 URL :

https://ubuntu.pkgs.org/21.10/ubuntu-main-amd64/libdbus-1-dev_1.12.20-2ubuntu2_amd64.deb.html

 

dbus-1.0 install 후 dbus/dbus.h 에서 나는 에러는 사라졌지만 glib main loop 함수를 호출하기 위한 '<dbus/dbus-glib-lowlevel.h>' 에서 동일한 'No search file or directroy'에러가 발생했다.

 

아래 stackoverflow에서 해답을 찾을 수 있었다.

https://stackoverflow.com/questions/14263390/how-to-compile-a-basic-d-bus-glib-example

 

How to compile a basic D-Bus/glib example?

I'm trying to learn how to use D-Bus with C bindings. I've never used D-Bus before. I'm following this tutorial, which I assume is the official one (Freedesktop.org). I've read it until this paragr...

stackoverflow.com

 

sudo apt-get -y install dbus libdbus-1-dev libdbus-glib-1-2 libdbus-glib-1-dev

 

이로써 모든 문제를 해결하고 컴파일 잘 하고 잘 쓰고 있다.

역시 아무리 번역기가 좋아져도 영어 공부는 해야 한다라는 것을 다시 한번 절실히 느꼈다.

Posted by 생짜
|

특정 프로세스의 메모리 사용량과 CPU 사용량을 체크할 경우가 있다. 스크립트로 며칠 테스트 한 결과를 파일로 저장해서 엑셀파일로 그래프를 그리면 편하다.

 

아래는 메모리와 CPU 사용량을 체크하여 파일로 저장하는 스크립트이다.

 

 

#!/bin/bash
#memTest.txt파일을 만들어 출력한다.
echo "Process Name Memory Test Start!!!" | tee memTest.txt 
#memTest.txt 파일에 Append한다.
date | tee -a memTest.txt 

#-e 옵션은 특수 키 출력을 위해서 해준다.
echo -e "\n"
# Tap을 주고 echo에서 줄바꿈을 공백으로 치환한다. 
#echo -e "\t" | tr '\n' ' ' 

#ps에서 [processor name]를 찾아서 pid, mem, cpu 사용량을 표시한다.
ps -C [processor name] -o pid,pmem,pcpu | tee -a memTest.txt

#while loop
while :
do
    #날짜를 출력하고 줄바꿈을 공백으로 변경한다.
    date | tr '\n' ' '
    #헤더없이 ps 정보를 출력한다.
    ps -C [processor name] --no-headers -o pid,pmem,pcpu 
    sleep 60 #초단위, 1분동안 슬립
done

 

 

스크립트를 실행 시키며 아래와 같은 결과를 얻을 수 있다.

 

Posted by 생짜
|

Linux의 Bash Shell 스크립트에서 파일 생성 및 생성된 파일에 스크립트 내용 추가 대해 기술합니다.

 

  • 파일생성 및 생성된 파일에 내용 추가
    • touch( 파일 생성 )
      • 파일의 날짜와 시간을 수정하는 명령어, 0 바이트 파일을 생성하기 위해 사용되기도 한다.
        아무런 옵션없이 사용하면 서버의 현재 시간으로 새로운 파일을 생성한다. 
        $touch [파일명]
      • 옵션
        • -a : 현 시간으로 파일의 접근 시간, 변경 시간을 수정한다.
          $touch -a [파일명]
        • -c : 기존 파일이 없으면 파일이 생성되지 않는다.
          $touch -c [파일명]
          [파일명] 파일이 없으면 생성되지 않으며 'ls : cannot access [파일명]: no such file or directory' 메시지가 출력
        • -d : 지정한 시간으로 접근 시간, 수정 시간이 수정되고, 변경시간은 현재 시간으로 수정된다.
          $touch -d date [파일명]
          $touch -d '년-월-일 시간' [파일명]
        • -m : 현 시간으로 파일의 수정, 변경 시간을 수정한다.
          $touch -m [파일명]
        • -r : 지정한 파일의 지정, 수정 시간을 선택한 파일의 지정, 수정 시간으로 변경하고 변경 시간은 현재 시간으로 수정된다.
          $touch -r [선택파일명] [지정파일명]
        • -t : 지정한 시간으로 접근 시간, 수정 시간을 수정하고 변경 시간은 현재 시간으로 수정된다.
          $touch -t 202202281036.30 [파일명]
          지정 시간은 YYYYMMDDhhmm.ss(년월일시간분.초) 형태로 입력한다.
      • Tip
        • 리눅스에는 세 종류의 타입스탬프가 있다.
          atime : 최종 접근 시간( access time )
          ctime : 최종 상태 변경 시간(change time)
          mtime : 최종 수정 시간(modify time)
          별다른 옵션이 없다면 atime, ctime, mtime 모두 변경된다.
        • stat [파일명] : 해당 파일의 타임 스탬프를 확인할 수 있다.
          $stat [파일명]
        • 여려파일 만들기
          $touch [파일명] [파일명] [파일명] ...
    • tee( 파일 생성과 내용추가)
      • 표준 입력(standard input)에서 읽어서 표준 출력(standard output)과 파일에 동시에 쓰는 명령어입니다.
        출력할 파일이 없을 경우 파일을 새로 만듭니다. ( 기존에 파일이 있다고 해도 옵션이 apped가 아니라면 새로 파일을 생성합니다.)
        $echo "hello wold" | tee [파일명] #echo로 출려과 tee로 파일 입력을 동시에 함
        $date | tee -a [파일명] #tee를 사용해서 명령어 내용을 표준 출력으로 파일로 동시에 함
        표준 출력에는 쓰지 않으려면 마지막에 '/dev/null' 디바이를 연결해 주면 표준 출력장치인 터미널에는 출력하지 않습니다.
        $echo "hello world" | tee -a [파일명] > /dev/null
        $date | tee -a [파일명] > /dev/null
      • 옵션
        • -a : 파일을 덮어쓰지 않고 파일 끝에 추가합니다.
          $[command] | tee -a [파일명]
        • -l : 인터럽트 신호를 무시합니다.
          $[command] | tee -l [파일명]
        • 여러파일 쓰기
          $[command] | tee [파일명] [파일명] [파일명] ...
      • tee 사용 이유
        shell에서 출력을 redirection할 경우 sudo를 사용해도 사용자로 전환 되므로 root권한으로 파일에 쓰거나 내용 추가가 필요한 경우 제대로 동작하지 않습니다. 
        tee는 shell script에서 root권한으로 특정 파일을 쓰거나 append 할때 주로 활용합니다. 다시 말해 다른 사용자가 소유한 파일에 쓸 수 있다.
        $echo "test' | sudo tee -a /etc/***/***.cnf
    • redirection('>' , '>>')(파일 생성과 내용추가)
      • >, >>은 데이타의 흐름방향을 나타냅니다. command 실행 후 출력 결과를 계속해서 파일에 로그 처럼 남기고 싶을 경우 사용합니다. 표준 출력에는 출력되지 않습니다. 표준 출력에 함께 출력하고 싶을 때는 'tee' 명령어를 사용합니다.
        redirection 명령어를 기준으로 왼편에는 실행하고 싶은 command를 오른편에는 다른 스트림, 파일 등 출력될 장치를 선택합니다. 출력할 형태가 파일이고 출력할 파일이 존재하지 않을 경우 새로 만듭니다.(기존에 파일이 있다고 해도 '>(overwrite)' 명령일 경우 파일을 새로 생성합니다.)
      • 사용예
        • '>(overwrite)'
          [command] > [파일명 or 스트림]
          $echo "hello wold" > [파일명]
          $date > [파일명]
          $list * > [파일명] 
        • '>>(append)'
          $echo "hello wold" >> [파일명]
      • 특정 스크립트 실행 결과 에러를 파일에 남기기
        $test.sh > [파일명] 2 > &1
      • 특정 스크립의 실행 결과와 에러를 분리해서 저장하기
        $test.sh > [실행결과 저장 파일명] 2 >> [에러 저장 파일명] 
      • 파일 디스크립터
        0 : 표준 입력( standard input )
        1 : 표준 출력( standard outpu )
        2 : 표준 에러( standard error )
        $test.sh 1 > [파일명] or test.sh > [파일명} #표준 출력을 파일로 저장
        $test.sh 2 > [파일명] #표준에러를 파일로 저장
        $test.sh 1 > [파일명] 2 > [파일명] #표준 출력과 표준 에러를 각자 다른 파일에 출력
        $test.sh 2 > &1 #표준 에러를 표준 출력으로 출력, redirction의 오른쪽을 표준 파일로 쓰고 싶을 때는 '&' 기호를 붙여 줘야 한다.

 

 

 

 

 

 

 

 

Posted by 생짜
|

일반적인 리눅스 기준으로 디렉토리 목록을 기술한다.

디렉토리 설명
/ 루트 디렉토리, 파일시스템의 시작점
/bin 시스템 부팅과 실행에 필요한 바이너리(프로그램)들을 포함하고 있다.
/boot 리눅스 커널, 시작 RAM 디스크 이미지(시스템 부팅 시 필요한 드라이버가 있음)와 부트로더를 포함하고 있다. 
/boot/grub/grub.conf 또는 menu.lst -> 부트로더 설정 파일
/boot/vmlinux -> 리눅스 커널
/dev 디바이스 노드를 갖고 있는 특수한 디렉토리, "모두 다 파일이다"라는 말에는 디바이스도 포함하고 있다. 이 디렉토리는 커널이 인식하고 있는 모든 디바이스들을 관리한다.
/etc 시스템 전반의 환경설정 파일이 들어있다. 또한 시스템 부팅 시에 시스템의 각 서비스를 시작하는 쉘 스크립 전부가 있다. 이 디렉토리의 모든 파일은 텍스트 형식이다.
/etc/crontab : 자동 실행되는 업무(job)를 정의하는 파일
/etc/fstab : 저장장치 테이블과 해당 마운트 포인트 정보
/etc/passwd : 사용자 계정 정보
/home 일반적인 설정 상태에서는 각 사용자마다 /home 디렉토리를 갖게 된다. 일반 사용자는 홈 디렉토리 내에서만 파일을 편집할 수 있으며 이러한 제한은 사용자의 잘못된 조작으로부터 시스템을 보호하기 위한 조치다.
/lib 주요 시스템 프로그램에서 사용하는 공유 라이브러리 파일이 저장되어 있다. 이는 윈도우의 DLL과 비슷한 것이다.
/lost+found 포맷된 각 파티션이나 ext3처럼 리눅스 파일시스템에서 사용하는 디바이스라면 이 디렉토리가 있다. 이것은 파일시스템에 문제가 생겼을 때 부분적인 복구를 도와준다. 시스템에 심각한 상황이 발생하지만 않는다면 이 디렉토리는 늘 비어있다.
/media 최신 리눅스 시스템에서 /media 디렉토리는 USB 드라이버, CD-ROM 등과 같은 휴대용 장치가 시스템에 연결될 때 자동으로 마운트되는 마운트 포인트는 여기에 저장된다.
/mnt 구식 리눅스 시스템에서 /mnt 디렉토리가 수동으로 휴대용 장치가 제거하니 위한 마운트 포인트를 저장한다.
/opt /opt 디렉토리는 추가적인 소프트웨어를 설치할 때 사용한다. 여기에 주로 상업용 소프트웨어가 설치된다.
/proc /proc 디렉토리는 특수하다. 하드 드라이브에 실제로 저장된 파일이라는 의미의 파일시스템이 아니라 이것은 리눅스 커널이 관리하는 가상 파일시스템을 말한다. 이곳에 저장된 것들은 커널 자체를 들여다 볼 수 있는 파일이다. 이 파일들은 텍스트 형식이고 커널이 컴퓨터는 어떻게 관리하고 있는지에 대한 단면을 보여줄 것이다.
/root 루트 계정의 홈 디렉토리이다.
/sbin 시스템 바이너리 파일들이 있다. 이 파일들은 일반적인 슈펴유저를 위한 중요한 시스템 작업을 수행하는 프로그램들이다.
/tmp /tmp 디렉토리는 임시 저장용 디렉토리다.  다양한 프로그램들에 의해서 만들어지는 임시 파일들을 저장하는 공간이다. 일부 설정 환경에서는 시스템이 재부팅할 때마다 이 디렉토리를 비우도록 하는 옵션이 있다.
/usr /usr 디렉토리 트리는 리눅스 시스템에서 가장 큰 트리 구조를 갖고 있다. 여기에는 일반 사용자가 사용하는 모든 프로그램과 지원 파일들이 모두 들어 있다.
/usr/bin 이 디렉토리에는 사용중인 리눅스 배포판이 설치한 실행 프로그램들이 있다. 여기는 일반적인 수많은 프로그램들을 저장하는 공간으로 사용되지 않는다.
/usr/lib /usr/bin 디렉토리에 있는 프로그램을 위한 공유 라이브러리가 있다.
/usr/local /usr/local 트리에는 일반적으로 사용하는 배포판 프로그래들 대신 시스템 전반에 걸쳐 사용되는 프로그램들이 저장되는 공간이다. 소스 코드로 컴파일된 프로그램은 주로 /usr/local/bin 디렉토리에 설치된다. 최신 리눅스 시스템에서는 이러한 트리가 존재하나 시스템 관리자가 이 디렉토리에 별도 작업을 하지 않는 이상 비어 있는 상태일 것이다.
/usr/sbin 시스템 관리 프로그램이 있다.
/usr/share /usr/share 디렉토리에는 /usr/bin 디렉토리에 있는 프로그램이 사용하는 공유 데이터를 저장하며 또한 디폴트 설정 파일, 아이콘, 스크린 배경화면, 음악 파일 등이 있다.
/usr/share/doc 시스템에 설치된 대부분의 패키지에는 문서파일이 포함되어 있다. /usr/share/doc 디렉토리에는 패키지 문서 파일이 저장된다.
/var /tmp 및 /home 디렉토리를 제외하면 지금까지 살펴본 대부분의 디렉토리들은 상대적으로 정적인 디렉토리들이다. 즉 디렉토리 내용이 거의 변하지 않는다는 것을 말한다. 그러한 점에서 /var 디렉토리 트리는 상대적으로 변하기 위훈 데이터를 모아두는 공간이다. 다양한 데이터베이스, 스폴 파일, 사용자 메일 등과 같은 데이터가 저장된다.
/var/log /var/log 디렉토리에는 시스템 활동을 기록하는 로그 파일이 들어 있다. 매시간마다 시스템 상황을 확인하는 매우 중요한 기록 파일이다. 그 중에서도 가장 유용한 것 하나가 /var/log/messages 디렉토리다. 보안상의 이유로 일부 시스템에서는 슈퍼유저 권한이 있어야만 로그 파일들을 확인할 수 있다.
Posted by 생짜
|
Posted by 생짜
|

'too many file open'으로 파일을 열다가 죽는 경우가 생겼다.

각종 파일들을 엄청많이 open하니 어느 파일이 열려 있고 어느 파일을 닫았는지 체크하면서 디버깅을 하는데 아래 명령어들을 유용하게 사용했다.

 

특정 Application에서 사용중인 파일을 체크하는 명령어. Application의 PID를 사용한다.

 

  • 열린 파일의 개수를 확인하는 명령어
    • ls -l /proc/'Application PID'/fd | wc -l
  • 어떤 파일을 열었는지 학인하는 명령어
    • ls -l /proc/'Application PID'/fd
    • lsof(list open file) 명령어 사용. lsoft 사용법 링크
      • lsof -p 'Application PID'
      • fd 정보를 파일로 저장하기
        • lsof -p 'Application PID' | tee 'File Name'

'karma( 업 ) > linux' 카테고리의 다른 글

리눅스 디렉토리 목록  (0) 2022.02.17
고급 Bash 스크립트 가이드( Link 글 )  (0) 2019.05.12
valgrind 사용 및 Error Message 읽기  (0) 2019.04.01
strace의 마술  (0) 2017.06.22
한영 변환 단축키 설정  (0) 2017.05.29
Posted by 생짜
|

valgrind( '밸그린드' 라고 읽는다. )는 linux에서 memory leack을 비롯해서 각종 memory 관련 Error를 check해주는 Open Source Tool로 무료이다.

 

valgrind는 run-time상에 발생하는 memory관련 버그를 잡아주는 dynamic tool이다. 

static tool로는 Clang이 있다. static tool은 코드를 실행하지 않고 코드를 검사하여 버그를 잡아준다.

나 같은 경우 Clang으로 먼저 분석하여 코드상 품질을 확보 후 valgind를 run-time으로 실행하여 static tool인 Clang으로 검출되지 않는 memory관련 버그를 검출한다.

 

  • valgrind로 에러를 검출할 수 없는 경우는 다음 몇가지가 있다.

1. if~else, return 등 코드가 동작하지 않아 검사할 수 없는 부분, valgrind는 run-time시 동작하는 코드만 검사해준다. if~else문 등의 조건에 걸려 동작하지 않은 코드상에 있는 memory 버그는 검사하지 못한다.

2. valgrind는 부모 프로세스만 추적가능하다. 자식 프로세스는 추적할 수 없다. 자식을 추적하려면 '--trace-children=yes' 옵션을 사용해야 한다.

3. static or stack arrays 경계 침범을 검사하지는 못한다.

 

  • valgrind 실행하는 방법
valgrind --leak-check=full -v --trace-children=yes --log-file='저장할 로그 path' 'test할 실행파일의 위치'

'test할 실행파일'을 valgrind로 실행시키는데 옵션으로 leak check는 full로하고 -v을 주고 child 프로세스를 체크하면서 로그파일을 남긴다는 뜻이다.

시스템에 따라 한번 실행 시키는데 몇 십분씩 걸리는 경우도 있다. 끈기있게 기다려야 한다.

 

  • valgrind에서 저장한 로그파일 분석

버전과 옵션에 따라 저장내용이 조금씩 달라질 수도 있다.

 

 

  • valgrind 옵션

valgrind --help를 치면 option의 종류에 대해 알 수 있다.

Basic Option 설명

 

Error Report에 대한 Option

 

Replace malloc에 대한 Option

 

uncommon user Option

 

Memcheck User Option

 

 

'karma( 업 ) > linux' 카테고리의 다른 글

고급 Bash 스크립트 가이드( Link 글 )  (0) 2019.05.12
too many file open해결을 위한 명령어  (0) 2019.04.14
strace의 마술  (0) 2017.06.22
한영 변환 단축키 설정  (0) 2017.05.29
Shell Script 참고  (0) 2017.05.26
Posted by 생짜
|
Posted by 생짜
|

IBus로 Hangul을 설치 하면 처음에는 한영변환 단축키가 'ctrl+space'로 설정되어 있다.

평소 Windows에서는 한영변환 단축키를 'Shift+space'로 설정하여 사용하고 있는데 단축키가 다르니 불편했다.

우분투에서도 windows와 마찬가지로 한영변환 단축키를 설정하려니 아래아 같은 에러 메시지가 나왔다.



[system setting -> keyboard 선택]


한마디로 "Shift + Space"는이 키를 사용하여 입력 할 수 없기 때문에 Ctrl, Alt 또는 Shift와 같은 키를 동시에 눌러보라는 이야기다.


이 경우 [system setting ->Text Entry ] 를 선택하여 한영변환 단축키를 변경하니 문제가 해결 됐다. 




'karma( 업 ) > linux' 카테고리의 다른 글

too many file open해결을 위한 명령어  (0) 2019.04.14
valgrind 사용 및 Error Message 읽기  (0) 2019.04.01
strace의 마술  (0) 2017.06.22
Shell Script 참고  (0) 2017.05.26
버추얼 박스에 우분투를 설치하자.  (0) 2017.05.26
Posted by 생짜
|