라벨이 Software인 게시물 표시

RaspberryPi XRDP blank screen issue - 라즈베리파이 원격접속 빈 화면 이슈

XRDP를 통한 원격 접속 시, 라즈베리파이에 root 권한을 가진 계정으로 접속하면 빈 화면만 뜨는 이슈가 있음. 따라서 새로 유저를 추가해서 접속 하면 됨. 출처 : https://www.reddit.com/r/raspberry_pi/comments/qw1cdw/raspberry_pi_4_xrdp_windows_10_remote_desktop/

라즈베리파이 와이파이 절전모드 해제

이미지
 아래 명령어로 와이파이 절전 모드를 OFF 시킬 수 있음. sudo iwconfig wlan0 power off 부팅시에 자동으로 적용하려면 /etc/rc.local 파일에 아래 1줄 추가 /sbin/iwconfig wlan0 power off

[NO-IP] Dynamic Update Client Install on Raspberry PI

 Refer to  https://www.noip.com/support/knowledgebase/install-ip-duc-onto-raspberry-pi Client Install $ mkdir /home/pi/noip $ cd /home/pi/noip $ wget www.noip.com/client/linux/noip-duc-linux.tar.gz $ tar noip-duc-linux.tar.gz $ cd noip-2.1.9-1 $ sudo make $ sudo make install Client 실행 $ sudo /usr/local/bin/noip2 Client 실행 확인 $ sudo noip2 ­-S 부팅 시에 자동으로 noip2 가 실행 되도록 설정. 다음 내용을 noip2 파일로 작성 #! /bin/sh # . /etc/rc.d/init.d/functions # uncomment/modify for your killproc case "$1" in start) echo "Starting noip2." /usr/local/bin/noip2 ;; stop) echo -n "Shutting down noip2." killproc -TERM /usr/local/bin/noip2 ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0 'noip2' 파일에 실행권한을 준 뒤 '/etc/init.d'로 복사 $ chmod +x noip2 $ cp noip2 /etc/init.d 그 다음 심볼릭 링크를 생성하여 런레벨 3로 등록. $ cd /etc/rc3.d $ ln -s ../init.d/noip2 S01noip2 재부팅 후 사용자 계정 상태에서 'ps -ef  | grep noip2' 명령어로 프로세스가 동작 중인지 확인

Crontab - 재부팅 후 시작 시, 특정 유저 권한으로 명령어를 실행 시키는 방법

Root 권한으로 크론탭 작성 sudo crontab -e

[Shell] 중괄호 확장 (Curly Braces Extension)

 중괄호 확장 은 쉘 스크립트에서 문자열 목록을 생성하는 유용한 기술입니다. 예를 들어, 아래와 같이 입력하면 1부터 10 까지 스페이스로 구분된 출력이 나옵니다. $ echo {1..10} 1 2 3 4 5 6 7 8 9 10 이를 이용하면 쉽게 파일을 만들거나 디렉토리를 만들 수 있습니다. $ touch {a..z}.txt $ ls a.txt c.txt e.txt g.txt i.txt k.txt m.txt o.txt q.txt s.txt u.txt w.txt y.txt b.txt d.txt f.txt h.txt j.txt l.txt n.txt p.txt r.txt t.txt v.txt x.txt z.txt 좀 더 응용 하면 백업파일을 만드는 데에도 수월 합니다. $ ls | grep -e "[a-z]\.txt" | xargs -I{} cp {}{,.bak} $ ls a.txt c.txt.bak f.txt h.txt.bak k.txt m.txt.bak p.txt r.txt.bak u.txt w.txt.bak z.txt a.txt.bak d.txt f.txt.bak i.txt k.txt.bak n.txt p.txt.bak s.txt u.txt.bak x.txt z.txt.bak b.txt d.txt.bak g.txt i.txt.bak l.txt n.txt.bak q.txt s.txt.bak v.txt x.txt.bak b.txt.bak e.txt g.txt.bak j.txt l.txt.bak o.txt q.txt.bak t.txt v.txt.bak y.txt c.txt e.txt.bak h.txt j.txt.bak m.txt o.txt.bak r.

[Linux] 문자열을 포함하는 파일 찾기 (Find file including string)

이미지
  평소 파일을 찾기위해 많이 사용하는 명령어 입니다. find . -name "*.*" | xargs grep -ns --color=auto "검색키워드" 사용 쉘 커맨드 : find, xargs, grep ( Windows 에서는  POSIX기반 소프트웨어를 구동을 위해 Cygwin 또는 MinGW 를 사용 합니다. ) find : 파일 및 디렉토리를 검색할 때 사용하는 명령 -name "검색패턴" : 지정된 문자열 패턴에 해당하는 파일 검색 ( *.* : 모든 파일 형식 ) xargs : 파이프로 넘겨받는 앞 명령어의 출력 결과를 xargs 다음 명령어의 인자(Arguments)로 넘겨주는 명령 grep :  입력으로 전달된 파일의 내용에서 특정 문자열을 찾고자할 때 사용하는 명령 -n : 매칭된 라인을 출력할 때 파일 라인 번호를 함께 출력 함. -s : 에러 메시지를 출력하지 않음. --color=auto : 결과를 쉽게 구분할 수 있도록 컬러로 출력 함.  사용 예제) 게임에서 사용 되는  파일 위치와 이름 이 궁금할 경우, 키워드를 사용해서 검색 할 수 있음. 1. 게임이 설치된 폴더로 이동. 2. 검색 키워드 "마틸다" 로 검색. ( find . -name "*.*" | xargs grep -ns --color=auto "마틸다" ) 3. 파일 위치 및 이름과 "마틸다" 문자열이 파일의 몇 번째 라인에 위치하는지 확인. 

정규표현식 (Regular Expression)

  정규표현식이란? 특정한 규칙 을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어. 정규표현식은  정규문자 (문자 그대로의 의미),  메타문자 (특별한 의미), 또는 이들의 조합으로 구성 됨. 정규 표현식은 많은 텍스트 편집기와 프로그래밍 언어에서 문자열의  검색 과  치환 하는데 용이하다. 정규표현식 메타문자는 아래를 참고. 메타문자 설명 . new line (line feed) 를 제외한  1개의 임의의 문자 와 일치 함 ? 앞에 위치한 정규표현식 또는 문자가  0개 또는 1개 인 것과 일치 함. * 앞에 위치한 정규표현식 또는 문자가  0개 이상 반복 되는 것과 일치 함. + 앞에 위치한 정규표현식 또는 문자가  1개 이상 반복 되는 것과 일치 함. {n} 정확히 n번 일치 함. {n,} n번 또는 그 이상 일치 함. {n,m} 적어도 n번 일치하지만 m번을 넘지 않는다.  n <= 일치 횟수 < m ^ 문자열이나 행의 처음을 의미. $ 문자열이나 행의 끝을 의미. ( ) 여러 정규표현식을 하나로 묶을 수 있다. | 여러 정규표현식 또는 문자 중에서 하나를 선택 함. 문자 클래스 하나의 작은 일련의 문자열들을 더 큰 집합의 문자열들과 일치시키도록 함. 정규 표현식 작성에 유용 함. 대소문자가 구분에 유의. 브래킷 Vim ASCII 설명 [:lower:] \l [a-z] 알파벳 소문자 집합 [:upper:] \u [A-Z] 알파벳 대문자 집합 [:alpha:] \a [A-Za-z] 알파벳 문자 집합 [:digit:] \d [0-9] 숫자 집합 \D [^0-9] 숫자가 아닌 문자들의 집합 [:xdigit:] \x [A-Fa-f0-9] 16진수에서 사용할 수 있는 숫자 및 문자 집합 [:alnum:] [A-Za-z0-9] 알파벳 문자와 숫자 집합 [:word:] \w [A-Za-z0-9_] 알파벳 문자와 숫자에 "_" (밑줄 문자) 추가된 집합 \W [^A-Za-z0-9_] 알파벳,숫자,_(밑줄 문자) 를  제외 한 집합.

[Linux] make - 3

이미지
 이젠 Makefile 을 src 에 두지 않고 아래와 같이 따로 상위 폴더로 분리 해 보자 /* include/my_math.h */ int add ( int x, int y) ; int subtract ( int x, int y) ; int multiply ( int x, int y) ; int divide ( int x, int y) ; ​ /* src/main.c */ # include <stdio.h> # include <pthread.h> # include <my_math.h> void * thread_func ( void *data) { printf ( "[%s]\n" , __func__); printf ( "%d\n" , add( 10 , 5 )); printf ( "%d\n" , subtract( 10 , 5 )); printf ( "%d\n" , multiply( 10 , 5 )); printf ( "%d\n" , divide( 10 , 5 )); return 0 ; } int main ( void ) { pthread_t thread; pthread_create(&thread, 0 , thread_func, 0 ); pthread_join(thread, 0 ); return 0 ; } /* src/add.c */ # include <my_math.h> int add ( int x, int y) { return x + y; } //----------------------------------------------------------------------------------

[Linux] make - 2

이미지
 이전 예제에서는 소스파일과 헤더파일이 동일한 경로에 있었는데, 이번에는 c파일은 src 폴더에, h파일은 include 폴더에 나누어 위치 시키고 컴파일을 해 보자. 전체적인 구조는 다음과 같다. /* include/add.h */ int add ( int x, int y) ; /* src/add.c */ # include <add.h> int add ( int x, int y) { return x + y; } /* main.c */ # include <stdio.h> # include <add.h> int main ( void ) { int value = 0 ; value = add( 3 , 5 ); printf ( "%d\n" , value); return 0 ; } Make 파일은 src 디렉토리에 있고, 헤더파일은 include 디렉토리에 있으므로, -I../include 를 추가 해 주어야 한다. # src/Makefile CC = gcc CFLAGS = -I../ include -c TARGET = result OBJS = main.o add.o $(TARGET) : $(OBJS) $(CC) $(OBJS) -o $(TARGET) %.o: %.c $(CC) $(CFLAGS) $< clean: rm -rf $(OBJS) $(TARGET) 이번엔 스레드를 사용하는 예제를 살펴 보자. /* src/main.c */ # include <stdio.h> # include <pthread.h> void * thread_func ( void *data) { printf ( "%s\n" , __func__); } int main ( void ) {

[Linux] make - 1

  프로그램 빌드 자동화 소프트웨어 여러 파일들 간의 의존성 과  각 파일을 위한 명령어 를 정의 한 Makefile을 해석하여 실행파일 또는 라이브러리를 빌드 함 따로 옵션을 주지 않을 경우 default로 Makefile 또는 makefile 파일을 찾고, 다른 이름의 파일을 넘겨 줄 경우에는 -f 옵션으로 파일 이름을 지정 함. 기본구조 Target: Dependencies [TAB키] Commands TAB키 부분에 SPACE키를 사용하면 안됨. Target - Command 실행 결과로 만들어 지게 되는 목적(object) 파일 Dependencis - Target을 만들 때 의존성(연관관계)를 규정. 이 부분에 나열된 파일이 수정되면 command를 수행해서 target을 다시 만듦. 즉 target 파일의 최종 수정 시간과 dependencies에 있는 파일들의 최종 수정 시간을 비교해서 command 수행여부를 결정 Command - Target을 만들기 위해 실행해야 하는 명령. command는 여러줄이 될 수도 있음. Comment - '#' 뒤에 오는 글자는 주석 처리 함. Command 앞에 '@'을 붙여주면 그 명령은 화면에 출력 되지 않음. # 커맨드 앞에 @를 붙이지 않은 경우 # Makefile all : echo hello #---------------------------------------- $ make echo hello hello # 커맨드 앞에 @를 붙인 경우 # Makefile all: @echo hello #---------------------------------------- $ make hello 예를 들어 다음과 같은 2개의 소스 파일과 1개의 헤더 파일이 있다고 할 때, /* add.h */ int add ( int x, int y) ; // ---------------------------------------------------------