아이패드 위쪽에 애플펜슬2가 자석으로 딱 붙게 되어 있다.

이 상태에서 아이패드의 블루투스 설정에 들어가면 자동으로 페이링.. 신기하다.



이전 일세대 애플펜슬은 충천을 해야 했었는데, 새 버전은 충전도 필요없는 듯.

Posted by 살레시오
,

윈도10의 개발자 모드에서 우분투상의 bash를 실행시킬 수 있다. (가상머신을 사용하지 않고)

그런데 docker는 지원이 안된다고 하네.. 아쉽

Posted by 살레시오
,

4.3 프로세스 제어    [gdoc]

쉘에서는 프로세스를 작업(job)이라는 단위로 관리하는데 작업은 포그라운드 (foreground)백그라운드 (background) 두 가지 방식으로 동작한다. 포그라운드는 작업이 시작되고 종료되는 시점까지 다른 쉘 명령어를 수행할 수 없고 대기하는 방식을 말한다. 반면 백그라운드로 작업을 수행하면 동시에 다른 명령어들을 실행시킬 수 있다. 이렇게 동시에 여러 명령어들을 실행시키는 것을 멀티태스킹(multi-tasking)이라고 한다.


쉘에서 작업을  제어하기 위한 명령어들을 다음 표에 정리하였다. 아래 표에서 JID는 jobs 명령으로 확인할 수 있는 작업의 고유 번호이다.


문법

동작

비고

실행명령 &

실행명령을 백그라운드에서 수행한다.


ps

프로세스의 리스트(전 절 참조)


jobs

백그라운드 프로세스 리스트


CTRL-Z

포그라운드 작업을 일시 중지한 후 백그라운드로 밀어 넣는다.


CTRL-C

포그라운드 작업을 정지(종료)


%JID

백그라운드 프로세스는 고유번호(JID)가 매겨지는데 (fg, bg, kill 명령에서) 그것을 참조하기 위해서 번호 앞에 %를 붙인다.


fg %JID

백그라운드 작업을 포그라운드로 올린다.


bg %JID

일시 정지된 백그라운드 작업을 재시작


kill PID / %JID

kill -KILL PID / %JID

kill -STOP PID / %JID

kill -CONT OID / %JID

프로세스를 종료.

프로세스 강제  종료 (kill -9 PID)

백그라운드 프로세스 실행 일시 정지

정지된 백그라운드 프로세스 재시작




bg %JID

pkill CMD

명령어(CMD)로 실행된 프로세스 종료



어떤 명령을 처음부터 백그라운드로 실행하고자 한다면 끝에 ‘&’를 붙이면 된다.


pi@raspberrypi:~ $ sleep 100&

이렇게 하면 ‘sleep 100’ 명령은 즉시 백그라운드  실행 모드로 들어가고 쉘에서 다른 일을 처리할 수 있다.

jobs는 백그라운드 프로세스 리스트를 표시하는 명령어이다.


pi@raspberrypi:~ $ jobs
[1]-  Running                 sleep 100 &
[2]+  Running                 sleep 200 &

리스트의 맨 앞의 숫자가 작업의 고유 번호(JID)이고 그 다음 실행여부(Running/Stopped)가 표시되며 실행한 명령어가 이어서 나타난다.

포그라운드 작업은 ctrl+c를 누르면 대부분 종료된다. ctrl+c는 인터럽트 신호를 포그라운드 작업에 전달한다. 프로세스는 기본적으로 인터럽트 신호를 받으면 종료하도록 되어있다.


만약 포그라운드에서 어떤 작업을 수행중에 ctrl-z를 누르면 중지되고 쉘로 빠져나오게 된다. 이럴 때 jobs 명령어로 확인하면 Stopped 로 표시되고 이 작업을 백그라운드에서 재시작하려면 bg 명령을 내리면 된다.


pi@raspberrypi:~ $ sleep 200
^Z
[1]+  Stopped                 sleep 200
pi@raspberrypi:~ $ jobs
[1]+  Stopped                 sleep 200
pi@raspberrypi:~ $ bg %1
[1]+ sleep 200 &
pi@raspberrypi:~ $ jobs
[1]+  Running                 sleep 200 &
pi@raspberrypi:~ $ kill -STOP %1
[1]+  Stopped                 sleep 200

위에서 보듯이 정지된 백그라운드 프로세스를 백그라운드 상태에서 다시 시작하려면
‘kill -STOP %N’명령을 주면 된다.

프로세스를 정상적으로 종료하기 위해서는 ‘kill’ 명령을 이용하면 된다. 그리고 좀비 프로세스를 강제로 종료하기 위해서는 ‘kill -KILL’ 을 이용하면 된다.

Posted by 살레시오
,

4.2 프로세스 목록 확인   [gdoc]

ps 명령어로 프로세스의 목록을 확인할 수 있다.


~$ ps


아무런 옵션을 주지 않으면 현재 터미널에 관련된 프로세스들의 간략한 정보를 보여준다.  좀 더 자세한 정보를 알고 싶다면 -f 를 붙인다.


~$ ps -f


시스템의 모든 프로세스 리스트를 보고 싶다면 -e 옵션을 주면 된다.

~$ ps -e

~$ ps -ef


여기에서 알아두어야 할 개념들은 다음과 같다.


[표] ps -f 명령으로 나타나는 항목들의 의미

항목

의미

UID

프로세스의 실행/소유자 아이디

PID

프로세스의 고유 번호(Process Identification Number)

PPID

부모 프로세스의 PID (Parent PID)

C

프로세스 우선순위

STIME

프로세스가 시작된 시간

TTY

프로세스와 연결된 터미널

TIME

실행에 걸린 시간

CMD

프로세스를 생성하는데 내린 명령


만약 모든 프로세스의 트리를 보고 싶다면 pstree 명령을 내리면 된다.


pi@raspberrypi:~ $ pstree
systemd─┬─ModemManager─┬─{gdbus}
       │              └─{gmain}
       ├─avahi-daemon───avahi-daemon
       ├─bluetoothd
       ├─

이것을 보면 systemd(PID:1)프로세스가 모든 프로세스의 부모(조상)이라는 것을 알 수 있다.

top 명령은 주기적을 현재 실행중인 프로세스의 목록을 보여준다. ps, pstree 명령과 달리 CPU나 메모리 점유율이 높은 프로세스이 순으로 정렬해서 보여주며 주기적으로 최신 정보로 갱신해 준다.


pi@raspberrypi:~ $ top
top - 21:59:46 up 44 min,  3 users,  load average: 0.00, 0.06, 0.14
Tasks: 170 total,   1 running, 169 sleeping,   0 stopped,   0 zombie
%Cpu(s):  3.1 us,  0.8 sy,  0.0 ni, 96.1 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:    947740 total,   662164 used,   285576 free,    23600 buffers
KiB Swap:   102396 total,        0 used,   102396 free.   362252 cached Mem

 PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 680 root      20   0  140504  50124  29596 S   1.7  5.3   0:48.91 Xorg
1091 pi        20   0    5740   2648   2180 S   1.0  0.3   0:23.97 top
1352 pi        20   0    5592   2488   2124 S   1.0  0.3   0:17.16 top

이 결과에서 보면 Xorg 프로세스가 시스템 자원을 가장 많이 사용하고 있다는 것을 알 수 있다.

Posted by 살레시오
,

리눅스 프로세스(process)란   [gdoc]

프로세스(prcess)란 현재 실행 중인 프로그램을 의미한다. 리눅스는 여러 개의 프로그램을 동시에 실행할 수 있으며 이것을 다중실행(multi-tasking)이라고 한다.


하나의 명령이 실행하기 위해서 하나 또는 여러 개의 프로세스가 생성되어 수행된다. 프로세스 간에는 부모-자식 관계가 있는데 부모가 자식을 생성하고 자식이 또 자신의 자식을 생성하는 등 프로세스들 사이에 트리(tree) 관계가 형성한다. 예를 들어 쉘이 실행되면 이 자체로 프로세스이고 쉘 안에서  명령이 실행되면 쉘-프로세스의 자식 프로세스가 생성된다.


프로세스들은 각기 고유한 번호가 있으며 이를 PID(Process Identification Number)라고 한다. 데비안 리눅스가 부팅될 때에는 모든 프로세스의 최상위 프로세스인 systemd (PID는 1)이 생성되고 모든 프로세스들은  이 1번 프로세스의 자식 프로세스들이다. 부모 프로세스의 PID를 줄여서 PPID라고 한다.


프로세스를 분류하면 데몬(daemon), 자동 프로세스, 상호작용 프로세스  등으로 분류할 수 있다.

4.1.1 데몬(daemon)

데몬은 항상 백그라운드로 실행되는 프로세스이며 대부분 부팅시에 자동으로 시작된다. 데몬은 평수에 대기 상태로 서비스 요청을 기다리다가 요청이 들어오면 해당 서비스를 제공한다. 프로세스이름 끝에 보통 ‘d’가 붙어있으며 예를 들면 네트워킹 데몬인 xinetd 이다. 이 프로세스는 부팅시에 실행되고 백그라운드에서 대기하다가 ftp 클라이언트 같은 네트워크 프로그램이 연결을 요구할 때까지 기다린다.

4.1.2 자동 프로세스

자동 혹은 배치(batch) 프로세스는 터미널과 연결되어 있지는 않고 스풀러(spooler)영역에 순서대로 저장되어 저장된 순서대로 실행을 기다리는 프로세스이다. 이 프로세스는 다음과 같이 두 경우에 실행된다.

  • 특정 날짜/시간에 at 명령을 이용하여 실행된다.

  • 시스템 자원이 실행하기에 충분한 경우 batch 명령에 의해 실행된다.

4.1.3 상호작용 프로세스

이것은 터미널에서 시작되고 제어되는 프로세스로서 시스템에 접속한 사용자가 상호작용 프로세스를 시작하게 된다. 즉, 자동으로 시스템에서 실행되지 않는 프로세스이다. 포그라운드에서 실행되는 동안은 다른 프로그램을 실행할 수 없다. 또한 백그라운드로 실행을 밀어 넣을 수도 있으며 백그라운드에서 실행되는 동안에 터미널에 다른 명령을 입력할 수 있다.  


less 명령을 실행한 경우 less가 시작된 이후에는 터미널의 입력은 less로 전달되며 정해진 명령만이 less에서 효과를 발휘하고 나머지는 무시된다. 하지만 백그라운드로 밀어 넣는다면 less명령이 여전히 수행되고 있는 동안에도 다른 작업을 수행할 입력이 가능해진다.


쉘은 ‘job control’ 기능을 제공하며 이것을 이용하면 사용자는 여러 개의 프로세스를 제어할 수 있다. 특정 프로세스를 포그라운드 혹은 백그라운드로 지정할 수 있으며 실행을 멈출 수도 있고 재시작할 수도 있다.


백그라운드에서 프로세스를 실행하는 경우는 사용자 입력이 필요치 않으면서 시간이 오래 걸리는 일을 수행할 때 유용하다. (GUI환경에서는 터미널을 얼마든지 더 열 수 있으므로 큰 의미가 없을 수 있다.) 백그라운드로 명령을 실행하고자 할 경우 명령어 끝에 ‘&’를 붙인다.


~$ sleep 100 &
~$ _

이 명령은 sleep 100을 백그라운드에서 수행하라는 것이다. 따라서 그 즉시로 다른 명령을 내릴 수 있다.

4.1.4 부모 프로세스 / 자식 프로세스

어떤 프로세스가 실행 도중에 자식 프로세스를 생성할 수 있다. 자식 프로세스는 작업이 끝나면 부모 프로세스에게 결과를 돌려주고 종료된다. 모든 프로세스의 조상 프로세스는 1번 (systemd) 프로세스이다.

4.1.5 고아 프로세스 /좀비 프로세스

고아프로세스는 자식 프로세스가 종료되지 않았는데 부모 프로세스가 종료된 경우 생성된다. 이경우 1번 프로세스가 그 자식프로세스를 승계하여 고아 프로세스를 종료할 수 있도록 해준다.

좀비 프로세스는 실제 동작이 종료되었는데도 동작 중인 프로세스 목록에 자리를 차지하고 있는 경우이다. 자식 프로세스의 종료 신호를 부모 프로세스가 제대로 처리하지 않은 경우에 발생한다. 잘못 작성된 프로그램으로 인해서 좀비 프로세스가 증가한다면 프로세스 테이블이 꽉 차게 되어 다른 정상 프로세스의 동작에 영향을 줄 수도 있다.

Posted by 살레시오
,

1.2 암비안 와이파이 설정       {gdoc}

오렌지파이 제로에 암비안을 올려 딥그 시리얼 포트로 접속한 후 아마 제일 먼저 해주어야 하는 것 중 하나가 무선 인터넷 접속 설정일 것이다. 오렌지파이 제로에는 와이파이 모듈이 포함되어 있어서 기본적인 설정은 미리 되어있는 듯 하고 사용자는 무선 인터넷을 설정해주는 유틸(nmtui)을 사용해서 무선AP의 검색 및 연결을 손쉽게 할 수 있다.


sudo nmtui

[그림] nmtui 실행화면


공유기를 선택하고 활성화 시킨 다음 시스템 재시작하면 무선인터넷을 사용할 수 있다. 무선 인터넷이 동작되면 프로그램을 깔거나 업데이트하는 것 등이 가능해진다. 또한 시리얼 포트를 이용하지 않고 무선 네트웍으로 PuTTY를 이용하여 ssl 접속이 가능해진다.


'맥,리눅스,윈도 > armbian' 카테고리의 다른 글

오렌지파이 제로 보드 간단 사용기  (2) 2016.12.09
Posted by 살레시오
,

1.1 오렌지파이 제로 {gdoc}

오렌지파이 제로는 초저가(7달러) 리눅스 보드인데 적당한 스펙에 작은 크기 그리고  wifi모듈까지 내장하고 있다. AllWinner H2+ 라는 중국산 프로세서를 사용하였다.


[그림] 오렌지파이 제로(RAM 512M 모델)


주요 사양은 다음과 같다.


[표] 오렌지파이 제로의 주요 사양

hardware

spec

CPU

AllWinner H2+ Quad-core Cortex-A7 1.2GHz

RAM

256MB/512MB DDR3 SDRAM(Share with GPU)

LAN

10/100M Ethernet RJ45 POE is default off.

WIFI

XR819, IEEE 802.11 b/g/n

OS

Android, Lubuntu, Debian, Raspbian     


OS는 오렌지파이에서 제공하는 공식 배포판 말고 armbian 을 설치하면 된다. 데비안/우분투 기반의 두 버젼을 제공하므로 원하는 것을 선택한다. 데비안 기반의 armbian은 이미지가 2Gbyte가 넘지 않으므로 2Gbyte이상의 마이크로SD카드에 풀면 된다. 필자도 굴러다니던 2Gbyte SD메모리카드에 이미지를 풀고 부팅을 시도했다.


오렌지파이제로에는 비디오출력단자가 없다. 따라서 초기에는 접속하기 위해서 디버그 시리얼포트를 이용해야 한다.


[그림] 오렌지파이 제로


핀의 전압은 3.3V이므로 serial-usb 변환기도 반드시 3.3V용을 사용해야 한다. 연결은 Tx와 Rx를 서로 엇갈리게 변환기에 연결한 후 PuTTy를 이용하여 접속하는데 속도는 115200으로 설정해야 한다.


[그림] PuTTY 접속 설정


초기 아이디/비번은 root/1234 인데 최초 접속 이후 바로 비번을 바꾸도록 되어 있다. 그리고 사용자를 하나 생성한 후 재부팅하면 그 사용자로 로그인할 수 있다. 이 사용자는 자동으로 sudo 그룹에 포함되므로 sudo 명령을 사용할 수 있다.


[그림] 부팅 후의 화면


CPU만 놓고 보면 라즈베리파이3와 비슷한 사양인데 armbian을 잠깐 사용해본 느낌은 실행 속도가 다소 느리다는 것이다. 그외에는 라즈비언나 암비언이나 둘 다 데비안 기반의 OS라서 사용법은 비슷하다.


'맥,리눅스,윈도 > armbian' 카테고리의 다른 글

오렌지파이 제로 무선인터넷 설정  (1) 2016.12.09
Posted by 살레시오
,

  라즈비언에서 태스크바를 실수로 삭제했는데 그 이후로 프로그램을 실행시키기도 불가능하다. 복구하는 방법은 다음과 같다.


  1. 새로운 유저를 만든다.


sudo adduser bob

  1. ~/.config/lxpanel 디렉토리의 내용의 새로운 유저의 것들로 덮어쓴다.


cd ~/.config/lxpanel
sudo cp -rf /home/bob/.config/lxpanel/. .

이제 재부팅하면 된다.

c{ln017}


Posted by 살레시오
,

맥북은 윈도우키와 달라서 적응하는데 시간이 걸린다. 맥북에는 보이지 않는 키 중에는 Home, End, PageUp, PageDown 가 있는데 당황스러웠다.



긴 문서를 읽거나 편집할 때 무척이나 유용한 키인데 맥북에는 보이지 않는데 이와 동일한 기능을 제공한다.


  • Home : Fn + 왼쪽 화살표

  • End : Fn + 오른쪽 화살표

  • PageUp : Fn + 위로 향하는 화살표

  • Page Down : Fn + 아래로 향하는 화살표


Fn키와 커서키의 조합이라 약간 불편하긴 하다.

c{mac001}


Posted by 살레시오
,

 GUI환경에서는 gedit 와 같은 편리한 텍스트 에디터들이 있으므로 텍스트 파일을 만들거나 편집할 경우에 이런 툴을 이용할 수 있다. 그리고 프로그래밍할 때는 IDE를 이용하면 된다. 하지만 쉘 기반의 텍스트 에디터를 사용할 수밖에 없는 경우도 발생하게 되는데 예를 들어서 원격으로 접속한 경우이다. 이런 경우 리눅스에는 vi (혹은 vim) 라는 텍스트 편집기가 많이 사용되지만 처음에는 그 사용법을 익히기가 어려운 편이다.


 간단한 작업을 할 경우에는  nano를 사용하면 CLI 환경에서 더욱 간단하게 텍스트 파일이나 프로그램 파일을 작성하고 편집할 수 있다. 기본적으로 설치되어 있으므로 터미널에서 nano라고 입력하거나 nano filename 을 입력하면 실행된다.


[표 1] nano 실행 명령어 예제들

실행 명령

동작

nano memo.txt
memo.txt를 편집하기 위해 open한다.
nano -B memo.txt
save 직전에 이전 파일을 ~.filename으로 백업한다.
nano -m memo.txt
cursor 이동을 위해 mouse를 사용한다. (지원시)
nano +83 memo.txt
83 번째 줄부터 편집한다.


나노가 실행되면 바로 편집할 수 있는 상태로 진입하게 된다.


[그림 1] 터미널에서 nano의 실행 화면


편집 모드에서는 기본적으로 상하좌우 방향키로 caret을 이동시킬 수 있으며, del, backspace, enter 키 사용이 가능하다. ctrl+g를 눌러 도움말을 볼 수 있다.


다음은 단축키 목록이다. 이 중 잘라내기/복사/붙이기 키는 잘 알아두어야 편집할 때 매우 유용하다.


[표 2] 기본 명령(단축키)들

단축키

동작

ctrl+g (F1)
도움말 표시
ctrl+x (F2)
nano 종료 (혹은 현재의 file buffer를 닫음)
ctrl+o (F3)
현재 편집 중인 파일 저장
ctrl+j (F4)
문단을 justify(행의 끝을 나란히 맞추다)한다. 즉, 한 문단을 한 줄로 붙인다.
ctrl+r (F5)
현재 file에 다른 file의 내용을 추가한다.
ctrl+w (F6)
text 검색
ctrl+c (F11)
현재의 cursor 위치 표시하기
ctrl+t (F12)
spell check 시작
ctrl+\
search and replace


다음 표는 편집에 관련된 단축키들이다.


[표 3] 잘라내기/복사/붙여넣기에 관련된 단축키들

단축키

동장

ctrl+k (F9)
현재의 line 혹은 선택된 text 삭제(그리고 저장(copy))
ctrl+u (F10)
붙여넣기 (paste)
ctrl+6
현재 cursor 위치부터 text 선택 시작. 이후 alt+6로 복사 후 선택 종료. 아니면 다시 ctrl+6를 입력하면 (복사 없이)단순 종료.
alt+6
선택 구간 복사. 선택 구간이 없다면 현재 caret 이 있는 한 줄을 복사. 이후 ctrl+u 로 붙여넣기 할 수 있음,


다음 표는 화면 이동과 관련된 키들이다. 선택 모드일 경우 이동한 만큼 선택이 추가/삭제된다.


[표 4] 화면 이동과 관련된 단축키들

단축키

동작

PageUP 또는 ctrl+y (F7)
PageDown 또는 ctrl+v (F8)
이전 화면
다음 화면
alt+(
alt+)
현재 문단의 시작으로
현재 문단의 끝으로
alt+=
alt+-
한 줄 밑으로 스크롤
한 줄 위로 스크롤
ctrl+space
alt+space
한 단어 앞으로
한 단어 뒤로 (GUI모드가 아닐 경우)
alt+\
alt+/
file의 첫 line으로
file의 마지막 line으로
alt+]
현재 괄호에 match되는 괄호 찾기
ctrl+-
줄 번호와  열을 입력한 후 그곳으로 이동




Posted by 살레시오
,