전체 글: 407개의 글

IoT 사례 연구 - 아키텍처

Posted by ironmask84
2017. 7. 11. 15:45 컴퓨터공학/IT 트렌드



(출처 : 소프트웨어 센터 웹진 자료)


IoT 사례 연구 - 아키텍처 



최근 ICT(Information & Communication Technology)의 최고 관심 대상 중 하나는 IoT(Internet of Things)이다. IoT를 다양한 형태로 해석하고 사용하지만 가장 큰 특징은 사물 스스로가 정보를 수집하고 스스로 전달한다는 것이다. 불과 몇 년 전만해도 사물에 네트워크가 연결이 되어도 사람이 지시하지 않으면 아무 일도 할 수 없었지만 이제 스스로 일을 하는 사물을 사용한 다양한 형태의 서비스가 거의 모든 산업에서 나타나기 시작했다. 그만큼 사물이 네트워크에 연결된 일은 매우 흥미롭고 고부가가치를 창출하는 일이기 때문이다. 이번 회에서는 IoT의 아키텍처에 대해 살펴보면서 IoT의 구성 방법에 대해 알아보기로 한다. 체계적인 IoT 아키텍처 구성으로 효율적인 IoT 서비스가 제공되기를 기대한다. 



사례 연구 전 확인 사항 



IoT 모델의 변화 


현재의 IoT가 나오기 이전에도 사물을 활용한 정보 수집은 존재했지만, 필요에 의해 사물에 별도의 네트워크가 연결이 되었고 수집하는 정보도 극히 일부로 제한되었다. 이미 필요한 데이터만 미리 정해서 수집했기 때문에 데이터 양도 적고 데이터 활용처도 한정되어 있었다. 하지만, 최근 들어 빅데이터(Big Data) 활용이 늘어나고 빅데이터 속에서 사람들이 생각하지 못하는 인사이트를 찾아내면서 빅데이터를 수시로 수집할 수 있는 IoT에 대해 더 관심을 갖기 시작했다. 

기존에는 각 산업이나 서비스에서 필요한 정보만을 수집하다 보니 소프트웨어의 규모도 그리 크지 않았지만, 최근에는 엄청난 양의 정보가 수집되어 소프트웨어의 규모도 커지고 그에 필요한 아키텍처도 다양해지는 추세다. 이렇게, 정보를 한 곳으로 모았다가 다시 필요한 곳으로 정보를 제공하는 중앙 집중 식 클라우드 형태가 현재 많이 사용되는 모델이고, 이후 분산 클라우드 형태의 IoT가 많이 연구되어 발표되고 있는 추세다(그림1).  



<그림1> IoT 모델의 변화 




 출처: “분산형 데이터베이스 기반 비중앙식 IoT 플랫폼을 이용한 스마트 홈 서비스”  



IoT는 사물을 상호 연결하여 어떤 서비스를 제공할 것인지가 가장 큰 목표이기 때문에 사물과 사람, 그리고 사물과 사람을 이어주는 디바이스를 기본으로 필요한 서비스를 제공하게 된다. 사물 간 통신을 나타내는 M2M, 사물인터넷을 나타내는 IoT, 그리고 IoT에 공간 개념을 도입한 만물인터넷이 IoT 모델의 변화 모델로 정의할 수 있다. 



IoT 아키텍처의 기본 구성 



IoT는 사물 기반이기 때문에 임베디드(Embedded) 아키텍처와 유사하게 보일 수 있다(그림2). 하지만 사물이 인터넷(Internet)에 연결이 되어 있고 다양한 데이터를 수집한다는 것이 주목적이기 때문에 임베디드 아키텍처와 다소 차이가 있다. 인텔(Intel)에서는 <그림2>와 같은 IoT 아키텍처 구성도와 <표1>과 같은 IoT 아키텍처의 특징을 5가지로 정의하고, 이러한 특징을 고려하여 소프트웨어를 설계하도록 가이드하고 있다.  



<그림2> IoT 아키텍처 구성도의 예 


출처: Intel  



<표1> 인텔에서 제시하는 IoT 아키텍처의 특징 

구분

내용

확대성 (Scale)

다량의 디바이스 지원

자율성 (Autonomous)

사람의 제어가 거의 불필요

탄력성 (Resiliency)

장애를 극복하고 기능을 지속적으로 수행

내구성 (Durability)

장시간 사용에도 견딜 수 있는 성능

접속성 (Connected)

M2M 또는 H2M 간의 원활한 커뮤니케이션



IoT로 연결된 디바이스는 일반적으로 게이트웨이(gateway)를 거쳐 시스템으로 연결된다. IoT 게이트웨이를 통해 디바이스가 직접 시스템에 연결되지 않기 때문에 네트워크 대역폭을 낮추는 역할을 하고, 분석이 불필요한 데이터를 제거하고 과도한 데이터 수집을 줄이는 역할도 한다(그림3). 그림3을 살펴보면, 무선 네트워크 노드에서 수집된 정보가 게이트웨이에서 걸러져서 빅데이터로 저장되고 필요한 서비스에 제공된다. 


 

<그림3> IoT 게이트웨이 


 

출처: www.seminartoday.net



IoT 서비스 아키텍처 



IoT 서비스의 주요 기능에는 IoT 보안인증, 리소스 및 서비스 관리, 수집 데이터의 가공 및 처리 등이 있다. 이러한 서비스는 맞춤형 서비스인 응용 서비스(Application & Service) 형, 빅데이터 기반으로 정보를 분석하여 예측 정보를 제공하는 지식정보(Semantics & Knowledge) 형, IoT와 소프트웨어의 인증, 연동 등을 제공하는 보안인증(Security & Privacy) 형 등이 있다. 이런 내용을 기반으로 그림4와 같은 IoT 서비스 아키텍처가 구성될 수 있다. 



<그림4> IoT 서비스 아키텍처 




출처: KT - IoT 서비스 플랫폼 아키텍처 분석  



그림4를 살펴보면, 센서 등을 통해 수집된 정보는 게이트웨이를 통해 보정되거나 걸러지고, 사용자에게 제공되는 서비스 별로 서비스 플랫폼을 가지게 된다. IoT 서비스 플랫폼은 앞 단의 IoT 구성요소를 연결하는 역할과 데이터 기반 서비스를 제공하는 역할을 수행하게 된다. 서비스 플랫폼을 표준형으로 구성한다면 초기 공수는 많이 들어갈 수 있으나 확장이 용이하고, 또한 제공하는 IoT 서비스들을 독립적인 모듈 형태로 제공되도록 구성하면 IoT 서비스 아키텍처에 IoT 서비스를 쉽게 추가할 수 있다. 




사례 연구 



KT에서 제시하는 IoT 서비스 



현재의 IoT 서비스의 아키텍처는 비 표준형인 경우가 일반적이다. 비 표준형인 경우는 IoT 서비스와 아키텍처의 확장이나 사용자, 디바이스 추가가 쉽지 않다. 최근에는 표준 프로토콜을 적용하고 IoT 서비스나 디바이스에도 표준이 적용되는 노력이 이루어지고 있다. KT에서는 비 표준 식의 Integral과 표준 식의 Modular 식으로 구분하여 IoT 아키텍처 변화를 제시하고 있다(그림5). 


 

<그림5> KT의 IoT 아키텍처 변화 

 



출처: KT - IoT 서비스 플랫폼 아키텍처 분석  



현재는 하드웨어 특성이 강하고 표준화 영향이 적은 센서, 디바이스 위주로 IoT 발전이 이루어졌지만 향후에는 IoT 서비스 전용 플랫폼 개발, IoT 전용 디바이스 개발과 표준화와 모듈화가 적용된 IoT 서비스가 필요하다고 제시한다. 표준화된 플랫폼 중심으로 IoT가 구성되면 그에 따른 IoT 센서, 디바이스 등의 표준화도 쉽게 이루어질 것으로 보인다. KT는 Integral과 Modular 방식에 따라 IoT 서비스와 소프트웨어 개발 방식도 달라진다고 말하고 있는데 그림6에 나타나 있다. 

 


<그림6> KT의 IoT 서비스 개발 프로세스 


 



출처: KT - IoT 서비스 플랫폼 아키텍처 분석  



그림5의 Integral 형의 경우, 요구사항에 따라 서비스 기능과 소프트웨어, 시스템을 설계해야 하고, 이에 따른 플랫폼과 디바이스 등을 고민해야 한다. 반면에, 표준이 적용된 Modular 형의 경우는 표준화된 환경에 맞춰 플랫폼, 소프트웨어, 시스템 등을 개발하기 때문에 설계에 필요한 공수가 매우 줄어들게 된다. 물론, 최초로 IoT 서비스를 개발할 경우는 표준 설계에 필요한 공수가 필요하겠지만, 범용적인 IoT 아키텍처가 이미 만들어져 있다면 서비스 요청 업체에 따라 별도로 구성하는 부담을 피할 수 있다. Modular 형으로 발전하기 위해 오픈소스를 활용하는 것도 방법이다. Ocean은 IoT 플랫폼을 구성하도록 하는 오픈소스를 제공한다. 오픈 디바이스 플랫폼인 &Cube와 서버 플랫폼인 Mobius 오픈소스로 구분된다(그림7). 

 


<그림7> ocean의 IoT 아키텍처 

 



출처 : http://www.sw-eng.kr/member/customer/Webzine/BoardView.do?boardId=00000000000000045080&currPage=1&searchPrefaceId=&titOrder=&writeOrder=&regDtOrder=&searchCondition=TOT&searchKeyword=IoT+%EC%82%AC%EB%A1%80+%EC%97%B0%EA%B5%AC



 

IoT의 중요성과 SW개발 방향

Posted by ironmask84
2017. 7. 11. 15:36 컴퓨터공학/IT 트렌드



(출처 : 소프트웨어 센터 웹진 자료)

 IoT (사물인터넷 : Internet of Things) 모든 사물이 컴퓨팅  통신 기능을 지니는 것을 기반으로 서로 연결되어 다양한 형태의 정보를 주고받음으로써 기존에는 가능하지 않은  융합형 응용  제공해   있는 개념이다이러한 IoT  대두는 세계적인 ICT (Information and Communication Technology) 패러다임을 변화시키고 있으며우리나라 정부에서도 미래창조과학부 주관하에 소프트웨어중심사회 라는 과제를 진행함으로써 국가산업시장인력 교육 등의 다양한 분야에서의 범국가적 IoT 융합화를 시도하고 있다.

이러한 IoT 개념을 현실화  보급하기 위해서는 IoT 기반 소프트웨어 개발이 선행되어야 하며최근 국내 기업들 중심으로 IoT 기반소프트웨어 개발이 활발하게 진행되고 있다하지만 IoT 기반의 소프트웨어는 기존의 IT-orient 소프트웨어와는 달리  IT 와의 융합을 통해 새로운 형태의 응용을 창출하는 것을 목표로 하고 있으므로소프트웨어 요구사항 분석  설계 단계에서부터 개발/검증 단계까지 세심한 주의가 필요하다이러한 IoT 기반 소프트웨어 개발  주의사항에 대해 창신대학교 소프트웨어공학과 김범석 교수로부터조언을 구할  있었다.

 

 


< 창신대학교 소프트웨어공학과 김범석 교수 >


1. IoT SW의 정의 및 파급력

2. IoT SW의 종류

3. IoT SW 개발 시 주의사항

4. 향후 IoT SW 개발의 방향


 

Q)  시점에서 IoT SW 중요한 이유가 무엇인가요?

 

 IoT SW  사물간 통신을 통해 수집되는 방대한 양의 데이터를 기반으로 새로운 형태의 서비스를 창출할  있는 SW  정의될  있습니다. IoT 라는 개념이 있기 전에 SW  IT 뿐만 아니라 다른 산업의 생산성을 높일  있는 도구로 사용되었지만지금은 사회 전반을 이끌어나갈  있는 핵심 솔루션 역할을 하고 있죠따라서 IoT SW  기존에 독립적으로 운용되어오던 응용과의 융합을 위한 키워드가   있고이를 기반으로 새로운 형태의 응용을 개발할  있는 계기를 제공하는 역할을 합니다. [ 그림 참조 ]

 

< 그림 1> 스마트 기기들의 증가 추세


 

자료 : Cisco IBSG, 2011 -   http://keminet.net/source/web/about/ac79/index.html

 

Q) 그렇다면 IoT  파급으로 인해 생긴 새로운 SW 어떤 것들이 있을까요?

 

 IoT  모든 사물에게 연산  통신 자원을 부여함으로써 상호  연결을 통해  사물에서 수집되는 방대한 양의 데이터를 가공하여새로운 서비스를 제공하는 일종의 인프라 요소가 강합니다, IoT 기술의 활용은  세계에서 운용되고 있는 모든 영역에 적용 가능하다고 보아도 무방합니다실제로 최근 IoT 기술은 의료운송홈서비스공장  다양한 방면에서의 융합을 시도하고 있으며, IoT 관련 기기들의 성능 향상  보급이 가속화되면서 다양한 서비스로의 IoT 융합을 위한 SW 들의 개발이 시도되고 있습니다상세히 살펴보면의료 분야에서는 인체정보를 수집할  있는 IoT 기기들을 환자에게 장착시켜 실시간으로 환자의 상태를 파악하고 치료할  있는 SW  개발을 추진 중에 있으며운송 분야에서는 차량에 부착된 GPS, 가속도 정보를 공유하여 현재 교통정보를 얻고이를 활용하여 교통량을 고려한 신호관리 시스템과 같은 SW 개발을 진행 중에 있죠홈서비스 분야에서도 집안에 존재하는 온도습도 센서로부터수집되는 정보와 기상청과 같은 외부 날씨 정보를 결합하여외출을 하고자 하는 사용자에게 의상을 추천해주는 등의 서비스를 고려하고 있습니다뿐만 아니라최근 여러 산업에서 주목하고 있는 스마트 공장에서는 공장  기계들의 부품 상태 모니터링기자재/제고관리 등의 부문에서 IoT  활용한 생산성 향상 솔루션들을 개발 중에 있습니다. [ 그림 참조 ]

 

< 그림 2>  IoT 기반 융합 가능 

 


자료 : http://www.intel.com/content/www/us/en/internet-of-things/infographics/iot-platform-infographic.html )

 

Q) IoT SW 개발에 있어 개발자에게 요구되는 사항은 어떤 것이 있나요?

 

  초연결을 지향하는 IoT 에서의 SW 다양한 요구사항이 존재하게 됩니다.

 

첫째, IoT  구성하는 end-device  스마트 기기에서의 시스템 레벨의 프로그래밍 능력이 필요합니다.

IoT  위한 스마트 기기들은 기존의 단순한 임베디드 시스템과는 달리 센서와 같은 부가 장치를 장착할  있어야 하며이를 기반으로 새로운 형태의 서비스를 추가로 적용하여 수행함에 있어 유연성과 확장성을 제공해줘야 합니다기존의 펌웨어 기반의 시스템에서는 이러한 요구사항을 만족 시킬  없기 때문에 embedded OS  적용해야 하며이를 위해서는 embedded OS  전반적인 이해와더불어상용화된 IoT 기기 플랫폼과 OS 레벨의 프로그래밍에 대한 다양한 경험이 필요합니다.

 

둘째, IoT 스마트 기기에 장착된 다양한 형태의 통신 인터페이스를 위한 네트워크 지식  프로그래밍 능력이 필요합니다.

IoT  기존의 단일 통신 기술을 사용하는 기기들과는 달리 하나의 기기에 다양한 통신 기술을 적용시킬  있으며필요에 따라서는새로운 통신 인터페이스를 추가할  있어야 합니다따라서이러한 통신 기술들을 SW  구동시키기 위해서는 IoT 기기에 적합한 네트워크 인터페이스 관련 디바이스 드라이버  이를 활용한 SW 개발을 위한 지식  프로그래밍 능력이 필요하게 됩니다.

 

셋째방대한 양의 데이터를 저장하기 위한 데이터베이스 구축과 융합 서비스의 기초가 되는 정보를 창출하기 위한 데이터 프로세싱이 필요합니다.

IoT 시대에서는 Cloud  통해 방대한 양의 데이터를 Big Data 라는 형태로 구축하게 됩니다따라서 수집된 데이터를 BigData  저장하고 관리하는 기법이 필요하며이렇게 수집된 데이터를 기반으로 새로운 형태의 정보를 창출하기 위해 기계학습이나 데이터마이닝과 같은 데이터 프로세싱이 요구됩니다.

 



마지막으로, End user  사용할  있는 융합된 형태의 응용 소프트웨어 개발 능력이 요구됩니다

현재 많이 사용되고 있는 안드로이드, iOS  물론, Web 기반의 프로그래밍, embedded OS 기반의 응용 소프트웨어  이들을 원활하게 동작하게   있는 미들웨어 개발 능력도 필요합니다.

 

Q) IoT SW 개발에 있어 주의사항은 어떤 것이 있나요?

 

위에서 언급한 요구사항을 기반으로 IoT SW 개발하는데 있어 개발자가 주의해야  사항은 기존의 SW 개발과는 상이한 부분이 있습니다.

먼저개발하고자 하는 SW  어떤 Data  활용하여 어떤 서비스를 제공해 주는 것을 목표로 하는지를 면밀히 검토하여이를 기반으로 IoT SW  설계하는 것이 중요하게  것입니다기존의 SW  단일 목적으로 개발되는 사례가 대부분이었으며이에 따라 SW 설계 부분이 단순화되었습니다하지만 IoT 기반의 SW  다양한 응용과의 융합을 지향하고 있으므로 상이한 목적을 결합한 새로운 형태의 SW 되며이에 따른 요구사항  고려사항의 절대적인 양이 많아지게 되므로 설계 단계의 세밀함이 보다 중요하게 됩니다.

보안 또한 IoT SW 에서 중요한 유의사항이   있습니다. IoT 기기들은 기존의 기기와는 달리 서로의 연결을 위해 통신 인터페이스를 가지고 있으며이를 역이용하여 외부에서의 데이터 변조정보탈취는 물론기기 자체의 시스템 장악 등의 보안관련 이슈가 일어날 있습니다이를 해결하기 위해서는 기존의 네트워크에서의 보안 뿐만 아니라 기기 자체의 보안 강화가 필요하게 되며효율적인 보안 향상을 위해서는 시스템 레벨에서의 보안도 고려되어야 합니다실제로 최근 개발되고 있는 ARM 프로세서 기반의 상용 IoT 기기를위한 개발 플랫폼에서는 시스템 레벨의 보안을 위해 TrustZone  지원하며기기 자체에서의 보안을 위해 TPM (Trusted Platform Module)  적용하여 제품을 생산하고 있습니다따라서 이와 같은 보안 향상을 위해 추가된 부분에 대한 이해도는 물론이를 활용하여 IoT SW  높은 보안 수준을 유지할  있는 방안을 고려해야  것입니다. [ 그림 3,4 참조 ]

 

< 그림 3>  ARM 사의 TrustZone

 


자료 구글 이미 


< 그림 4>   TPM (Trusted Platform Module)


자료 구글 이미 

 

마지막으로, embedded 기반의 IoT 기기를 위한 SW 개발에 따른 SW 최적화가 필요합니다.

최근 생산되는 IoT SW  구동시킬  있는 기기들의 성능이 비약적으로 향상되고 있지만, PC  Server  같은 높은 성능을 지니고있지는 않으며오히려 전력연산능력저장장치의 용량 등의 제약적인 성능을 가지고 있습니다특히 IoT framework  말단에서 정보를 수집하는 센서는 기존의 스마트 기기에 비해 더욱 제약사항이 많은 특징을 지닙니다따라서 SW 자체의 구현 복잡도를 최소화 하고구동 성능을 최적화하여 성능의 제약이 많은 기기에서도 개발된 SW  정상적으로 동작할  있도록 해야할 것입니다

출처 : 
http://www.sw-eng.kr/member/customer/Webzine/BoardView.do?boardId=00000000000000040729&currPage=1&searchPrefaceId=&titOrder=&writeOrder=&regDtOrder=&searchCondition=TOT&searchKeyword=iot

 

grep 명령어 - 문자열 패턴 검색

Posted by ironmask84
2017. 7. 7. 14:14 나는 프로그래머다!/Linux


Unix/Linux 문자열 패턴 검색 (grep)


  패턴 검색 [grep] 

grep 명령은 파일 내에서 지정한 패턴이나 문자열을 찾은 후에, 그 패턴을 포함하고 있는 모든 행을 표준 출력해 준다. 물론, 한 디렉토리 내에서 지정한 패턴을 포함하는 파일을 출력할 수도 있다. grep 명령은 하나 이상의 파일로부터 프로그램 수정 등을 위해 변수, 또는 함수명을 찾을때 많이 사용된다. 



  grep 명령의 기본 문법 

grep [-옵션] 패턴 파일명 


   옵션

-c : 패턴이 일치하는 행의 수를 출력 

-i : 비교시 대소문자를 구별 안함 

-v : 지정한 패턴과 일치하지 않는 행만 출력 

-n : 행의 번호를 함께 출력 

-l : 패턴이 포함된 파일의 이름을 출력 

-w : 패턴이 전체 단어와 일치하는 행만 출력 


   사용 예 

$ grep -n '삼성' token_dic

= token_dic 이라는 파일내에서 '삼성' 이라는 패턴이 들어간 문자열과 행번호를 출력 


$grep -l '삼성' * 

= 현재 디렉토리의 모든 파일에서 '삼성' 이라는 패턴이 들어간 파일의 이름을 출력 


$grep -v '삼성' * 

= 현재 디렉토리의 모든 파일에서 '삼성' 이라는 패턴이 들어가지 않은 행을 출력


$grep -r '삼성' * 

= 현재 디렉토리 및 서브디렉토리의 모든 파일에서 '삼성' 이라는 패턴이 들어간 문자열 출력



  패턴의 정규 표현식(Regular Expression) 

패턴 지정에서 사용되는 정규 표현식은 작은 따옴표 (' ')로 묶어서 표현한다. 

$ grep '^a' 파일명 

= ^는 파일의 시작을 나타냄. 파일에서 a로 시작하는 행을 찾는다. 

$ grep 'apple$' 파일명

= $는 파일의 끝을 나타냄. 파일에서 e로 끝나는 행을 찾는다. 

grep 'app*' 파일명 

= 파일에서 app로 시작하는 모든 단어를 찾는다. 

$ grep 'a.....e' 파일명 

= 파일에서 a로 시작하고 e로 끝나는 7자리 단어를 찾는다. 

$ grep [a-d] 파일명 

= 파일에서 a,b,c,d 로 시작하는 단어를 모두 찾는다. 

$ grep [aA]pple 파일명 

= 파일에서 apple 또는 Apple로 시작하는 단어를 모두 찾는다.

$ grep 'apple' d*

= d로 시작하는 모든 파일에서 apple 를 포함하는 모든 행을 찾는다. 

$ grep 'apple' 파일명1 파일명2 

= 지정된 두개의 파일에서 apple 를 포함하는 모든 행을 찾는다. 

$ grep '^[ab]' 파일명 

= 파일에서 a나 b로 시작되는 모든 행을 찾는다. 



출처: http://ra2kstar.tistory.com/100 [초보개발자 이야기.]

 

vi 편집기 기본 명령어

Posted by ironmask84
2017. 7. 7. 10:19 나는 프로그래머다!/Linux


vi 실행

  vi [파일명] : 기존 파일을 열거나 새로운 파일을 작성

  vi +<숫자> [파일명] : <숫자>행에 해당 파일 열기

  vi +/"검색어" [파일명] : 파일을 열어서 "검색어"의 처음 발견된 단어에서부터 

  vi -r [파일명] : 손상된 파일 복구

  view [파일명] : 읽기 전용으로 파일 열기


편집기 상태에서 커서의 이동 관련 단축키

  h(←) : 커서를 왼쪽으로 이동

  j(↓) : 커서를 아래쪽으로 이동

  k(↑) : 커서를 위로 이동

  l(→) : 커서를 오른쪽으로 이동

  w : 한 단어 오른쪽으로 커서 이동

  b : 한 단어 왼쪽으로 커서 이동

  ^ : 라인의 처음으로 이동

  $ : 라인의 마지막으로 이동

  H : 화면의 맨 위로 이동

  M : 화면의 중간으로 이동

  L : 화면의 맨 아래로 이동

  Ctrl + F : 한 화면 뒤로 이동

  Ctrl + D : 반 화면 뒤로 이동

  Ctrl + B : 한 화면 앞으로 이동

  Ctrl + U : 반 화면 앞으로 이동


편집기 상태에서 문자 삽입 관련 단축키

  a : 커서 오른쪽에 문자 삽입

  A : 커서 오른쪽 행의 끝에 문자 삽입

  i : 커서 왼쪽에 문자 삽입

  I : 커서 왼쪽 행의 처음에 문자 삽입

  o : 커서 아래에 행 삽입

  O : 커서 위에 행 삽입

  Esc키 : 입력 상태에서 편집기 상태로 전환


편집기 상태에서 텍스트 변경하는 단축키

  cw : 단어 바꾸기

  R ; 현재 커서 위치부터 바꾸기

  r : 커서 위치 문자를 다른 문자로 바꾸기

  ~ : 대,소문자 변경

  J ; 현재 행과 아래 행 결합

  u : 이전 명령 취소

  x : 커서 위치 문자 삭제

  dw : 커서 위치 단어 삭제

  dd ; 커서 위치 행 삭제

  D : 커서 오른쪽 행 삭제

  : 5, 10 d   : 5-10번째 삭제


편집기 상태에서 텍스트 복사 및 이동

  yy : 커서 위치 행 복사

  <숫자>y : 커서 위치로부텨 <숫자>행 복사

  p : 붙여넣기

  : 1,2 co 3  : 1-2행을 3행으로 복사

  : 4,5 m 6   : 4-5행을 6행으로 이동


편집기 상태에서 행 번호 설정

  :set nu   : 행 번호 표시

  :set nonu : 행 번호 숨기기


편집기 상태에서 행 찾기

  G : 파일의 마지막 행으로 가기

  21G : 파일의 21번째 행으로 가기

  :<숫자>  : <숫자> 라인으로 가기


편집기 상태에서 파일을 파일로 삽입

  :r [파일명]   : 커서 다음에 파일 삽입

  :34 r [파일명]  : 파일을 34번째 행 다음에 삽입


편집기 상태에서 저장 및 종료

  ;q  : 변경한 내용이 없을 경우 종료

  :q!  : 변경한 내용이 있더라도 저장 없이 강제 종료

  :w  : 변경한 내용 저장

  :w! : 읽기 전용 파일이라도 변경한 내용 강제 저장

  :wq   or  :x   : 저장 및 종료

  :wq!  : 강제 저장 및 종료




vi 설정 ($ vi ~/.vimrc) (출처: http://ra2kstar.tistory.com/100 [초보개발자 이야기.])

유저 홈 디렉토리에서 '.vimrc' 파일에서 설정 가능

자동 들여쓰기

set autoindent 


C 프로그래밍을 할때 자동으로 들여쓰기

set cindent  


검색할 때 문서의 끝에서 다시 처음으로 돌아가지 않게 하기

set nowrapscan  


백업 파일을 만들지 않기

set nobackup 


키를 잘못눌렀을 때 삑 소리를 내는 대신 번쩍이게 하기

set visualbell  


화면 우측 하단에 현재 커서의 위치보기

set ruler 


Tab을 눌렀을 때 8칸 대신 4칸 이동

set tabstop=4  


자동 들여쓰기를 할때 4칸 들여쓰기

set shiftwidth=4  


한글 처리를 하기위한 구문 

if $LANG[0] == `k' && $LANG[1] == `o'

set fileencoding=korea

endif


문법 강조 기능

if has("syntax")

syntax on " Default to no syntax highlightning 

endif



 

리눅스 기본 명령어 정리

Posted by ironmask84
2017. 7. 7. 10:08 나는 프로그래머다!/Linux


리눅스에서는 많은 명령어를 지원합니다.
저도 아직 배워가는 단계로 부족한게 많아요 ㅎㅎ
혹시 보시고 이상한게 있으면 댓글로 알려주세요~~


명령어 기초편

하위폴더 및 모든 파일을 복사하기
cp -rf ./../../mh.bae/VS950/vs950_ics_git/svlte_modem/ .  

하위폴더 및 모든 파일을 지우기
rm -rf svlte_modem

ls -l => 좀 더 구체적인 정보 제공(파일형태와 사용권한, 하드링크번호, 소유자, 그룹, 파일크기, 시간, 연도, 파일명)

file 파일명 => 파일의 정보 보여줌

경로명 쓰다가 Tab 2번 하면, 뒷경로 자동 완성

cd ../폴더명 => 상위로 갔다가 폴더명의 하위폴더로 이동

mkdir -p 경로명 =>  하위경로명으로 depth를 길게 해서 만들 경우, 없는 폴더가 있으면, 알아서 확인해준다.


자주 사용할만한 명령어

0. Screen 걸어놓기 (터미널 창 닫아도 됨)

-> screen -R 설정할이름

    screen 창 에서 실행할 명령어 수행시킴

    ctrl + A + D 로 screen 빠져나감

    screen -list 목록에서 확인

    list목록에서 숫자가 붙은 full name을 복사해서 screen -R 이름 으로 다시 들어갈 수 있음.

    exit 로 screen 빠져나가면 됨.

    

1. find 로 이름 기준 검색하기

ex) find . -name '*webidl*'


2. grep 으로 파일내 특정 단어로 검색하기

-> grep -wrns "검색어" *

(*는 모든 파일에서 찾겠다는 것임.  , 옵션은 하위폴더 등등 으로...)


3. repo forall -c git clean -xdf  클린


4. fuser -m 디렉토리 및 파일명 --> 해당 path에 rw시도중인 pid 알려줌

   위 명령어에서 검색된 pid를 가지고,

   ps | grep pid명  --> 해당 pid 정보


5. 압축하기 :   tar -cvzf 파일이름 압축할파일 혹은 /디렉토리

   압축풀기 :   tar -xvzf 파일이름  


많은 소스파일을 인덱싱해서 편리하게 파악하는 방법 (Source Insight 같은 기능)

ctags -R => 현재 폴더 하위까지 범위로 해서 tags 파일 생성

(리눅스코드는 ==>ctags -R --language-force=c++)

---> vim 으로 tags가 있는 폴더에서 해당 폴더나 하위폴더의 파일들을 vim으로 열면, 

        ctrl + ] : 정의 따라가기

        ctrl + T : 되돌아가기

        ctrl + W + F : 헤더파일 따라가기

        vim -t 함수명 : 함수명있는 곳으로 tag jump  (set cst, set tag+=/경로명/tags  를 .vimrc에 추가해야 가능)




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

명령어 응용편

df

하드 디스크의 용량이 얼마나 남아 있는지 확인하는 명령어

-a : 디폴트로 생략된 0 브록 크기의 파일 시스템도 보여줌

-i : 파일 크기를 블록 대신 inode 디스크 정보를 보여줌

-k : 파일 크기를 킬로바이트(kb) 보여줌

-T : 파일 시스템의 종류와 디스크 정보를 보여줌

-t : fstype 값을 가진 파일 시스템에 대한 디스크 정보

-h : 쉬운 용량 표시 단위로 표기( : 1G 250M 1K)

 

ps

작동중인 프로세스 상태 체크하기

-l : 포맷으로 출력

-u : 실행한 유저와 실행 시간을 표시

-j : "job"형식으로 표시

-s : 시그널(signal) 포맷으로 표시

-m : 메모리 정보 표시

-a : 다른 유저의 프로세스 현황 표시

-x : 터미널 제어없이 프로세스 현황을 표시

-ef : 가장 많이쓰는 옵션이죠 ^^

 

kill

실행중인 프로세스를 재활성화하거나 완전히 죽이고자 쓰이는 명령

-1, -HUP : 프로세스를 재활성화함

-9 : 프로세스를 강제로 죽임

 

로그인 화면 바꾸기

/etc/issue -> 콘솔접속시(로컬)

/etc/issue.net -> 원격접속시

/etc/motd -> 로그인 성공시

/etc/rc.d/rc.local -> 부팅시

 

RPM 패키지 설치 확인 설치 경로 확인하기

rpm -qa 패키지명 -> 설치 확인

rpm -ql 패키지명 -> 설치 경로 확인

 

시스템 사용자 보기

현재 시스템에 어떤 사용자가 접속되어 있는지 확인하려면  w, who, finger  명령을 실행하면 된다.

 

커널 메시지 보기

dmesg, cat /var/log/dmesg, cat /var/log/messages

 

사용중인 커널 버전 알아보기

uname -r , uname -a

 

최신 커널 버전 벙보 알아보기

finger @finger.kernel.org

 

시스템 하드웨어 정보 보기

cat /proc/cpuinfo -> CPU

cat /proc/meminfo -> Memory

cat /proc/interrupts -> interrupts

 

작동중인 커널 모듈 확인하기

/sbin/lsmod 명령을 실행

 

패킷 전달 과정 체크

traceroute

 

NTFS 모듈 설치하기

페도라 코어에서는 윈도우 NT 계열의 파일 시스템(NTFS) 지원하지 않으므로, 윈도우 엑스피 파티션을 마운트하려면 ntfs모듈을 설치해야 합니다.

yum install ntfs-3g

 

badblocks 이용한 하드 디스크 불량블럭 검사

badblocks -s /dev/sda

 

업데이트된 커널 소스 설치

yum install yum-utils

yumdownloader --source kernel --enablerepo updates-source


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

** adb shell 기준

1. cat /proc/kmsg > /persist-lg/kmsg.txt   <== kmsg를 /persist-lg/kmsg.txt 에 저장

2. logcat > /persist/log.txt       <== Android log를 /persist/log.txt에 저장

3. ps -aux | grep 프로세스명 <= 해당 프로세스의 정보를 보여줌

   pstree <= 현재 실행중인 프로세스를 tree로 보여줌 (부모-자식 관계)

4. adb 안될때, 

    adb devices

    adb kill-server

    adb start-server

    또 안되면 재부팅

5. kill -9 PID

    kill -l  <= signal 번호가 나온다??

6. logcat & => &을 옵션으로 두면, 해당 명령이 죽지않고, 백그라운드에서 돌게된다.

7. prop 파일 내용 수정해서 적용하기

단말에 존재하는 system/build.prop

Cmd> adb root

Cmd> adb remount

Cmd> adb pull system/build.prop

Cmd> 다음과 같이 수정함

ro.product.model=LG-F180L

ro.product.manufacturer=LGE

Cmd> adb push build.prop /system/

Cmd> adb reboot