Embeded

앵버박사 2014. 7. 3. 17:40

* 이번 연재는 리눅스에 대한 레퍼런스 목적으로 작성합니다.


명령어

ifconfig : 네트워크 인터페이스의 설정 상태 출력( IP주소를 확인 할 수 있음 )

ping IP주소or도메인네임 : 외부 네트워크와 연결이 정상적으로 이루어지는지 확인

pwd : 현재 디럭터리의 전체 경로 출력

fdisk 디스크명 : 하드디스크의 파티션 테이블 변경

mkfs.ext4 디스크명 : 디스크 포맷

ls -al : 디렉터리에 담긴 내용을 표시( a : 숨김파일도 포함, l : 리스트 형식으로 출력, h : 파일크기를 사람이 읽기쉽게 변경 )

lsusb : 연결되있는 USB목록을 보여줌

touch 파일명 : 존재하지 않을 경우 파일생성, 존재할 경우 내용은 유지한채 타임스탬프만 업데이트

mkdir 디렉터리명 : 디렉터리 생성

rmdir 디렉터리명 : 빈 디렉터리 삭제

mv 출발지 목적지 : 파일( 디렉터리 ) 이동

cp 출발지 목적지파일( 디렉터리 ) 복사

rm -rf 파일명파일( 디렉터리 ) 삭제( r : 디렉터리 전체 삭제, f : 묻지도 따지지도 않고 무조건 삭제 )

chmod 권한 파일명 : 파일 권한 설정( 읽기 4, 쓰기 2, 실행 1 )


권한 설정 부분  가능한 인수 
  역할    u 사용자
  g 그룹
  o 다른 사용자
  a 전부 
  적용 방법   + 추가
  - 제거
  = 설정한 것은 추가되고, 그 외는 제거
  적용 가능한 것   r 읽기
  w 쓰기
  x 실행


chown 사용자명[:그룹명] 파일명 : 소유자[그룹명] 변경

chgrp 사용자명 파일명 : 소유그룹 변경

ln -s 파일명 링크명 : 바로가기 생성( s : 소프트 링크 )

shutdown -h now : 종료

shutdown -r now : 재시작

startx : X-윈도우 실행( Ctrl + Alt + F1 : 터미널로 돌아오기 )

visudo : sudo 권한 관리

man 명령어 : 메뉴얼 보기

top : 시스템 리소스 모니터링

free -m : 메모리 할당 현황 보기( k : 킬로바이트, m : 메가바이트, g : 기가바이트로 표시 )

df -h : 디스크 사용량 보기( h : 사용량을 사람이 읽기쉬운 단위로 변환 )

du -sh 디렉터리경로 : 디렉터리의 세부 사용량 보기( s : 출력결과 요약, h : 사용량을 사람이 읽기쉬운 단위로 변환 )

ps -ef : 프로세스 스냅샷 보기( ef : 모든 프로세스를 표준 방식으로 보여줌 )

kill -시그널번호 PID : 애플리케이션에 신호 보내기( l : 신호 리스트 보기, 9 : 강제 종료 )

cat 파일명 : 파일의 내용을 화면으로 출력

less : 파일 내용이 길 경우 cat대신 사용하면 페이지 단위로 볼 수 있고, 검색기능도 있음

find 경로 옵션 : 파일 검색( 예, find /mnt/Volume1 -empty -name fooBar -exec rm : /mnt/Volume1에서 fooBar라는 이름의 빈 파일을 찾아 삭제함 )

file 파일명 : 파일정보 출력( 텍스트, 바이너리 등 )

grep 옵션 패턴 파일명 : 파일내용 검색( i : 대소문자 구별, v : 검색 결과 뒤집기 )

which 명령어 : 쉘이 사용할 애플리케이션의 경로 출력

echo $변수명 : 환경변수 내용 출력

env : 환경변수 리스트

export 변수명="내용" : 환경변수에 내용 저장

alias 명령어="내용" : alias 지정

crontab 옵션 : ( l : 현재 크론탭 확인, e : 크론탭 설정 에디터를 실행 )

ufw : 방화벽 설정

dpkg -s libc6 | grep Arch : 운영체제 비트 확인( i386 : 32비트, amd64 : 64비트 )

jobs : 현재 작업목록 출력

bg 작업번호 : Stop상태의 프로세스가 백그라운드로 실행

fg 작업번호 : 백그라운드에서 실행중인 프로세스가 포그라운드로 실행( Ctrl + C : 강제종료, Ctrl + Z : Stop상태로 변경 )

tail -f : 파일의 마지막 부분을 출력( f : 파일의 10줄을 출력하고 파일의 변경내용을 실시간으로 계속 출력 )

dhclient : DHCP를 수동으로 호출하여 IP 주소 할당

useradd 옵션 사용자명 : 사용자 추가( 예, useradd -d /home/raspberry -m raspberry, d : 홈디렉터리 지정, m : 홈디렉터리 자동생성, g : 그룹명 지정, s : 쉘 경로 지정, p : 패스워드 지정 )

adduser : 사용자 추가

wget 파일주소 : 파일 다운로드

tar 옵션 파일명 : 압축 및 압축해제( c : tar로 묶음, v : 과정 화면출력, f : 파일이름 지정, x : tar 압축해제, z : gzip으로 압축하거나 해제함 )

source 파일명 : /etc/profile이나 ~/.bashrc 파일 수정 후 적용할 때 사용함


명령 결합

파이프 라인( | ) : ps -ef | grep ssh | grep -v grep | awk '{print $2}' | xargs kill -1 : grep명령을 제외한 sshd프로세스를 찾아 PID만을 구해 프로세스들을 종료시킨다.

리다이렉션 : <( 입력 ), >( 덮어쓰기 출력 ), >>( 이어쓰기 출력 ), 예) cat pi01 > pi02


명령 결합에 유용한 명령어

awk '{명령}' : 텍스트 행에서 데이터를 추출

xargs : find의 -exec와 같은 일을 수행

wc : 단어 세기( l : 행 개수, w : 문자 개수, m : 단어 개수 )

sort : 정렬

uniq : 결과의 중복 제거


빔 명령어

:번호 : 특정행으로 이동

0(숫자) : 행의 시작으로 커서 이동

$ : 행의 끝으로 커서 이동

b : 한 단어 뒤로 커서 이동

h : 한 문자 뒤로 커서 이동

l : 한 문자 앞으로 커서 이동

w : 한 단어 앞으로 커서 이동

d + 이동키 : 이동방향 삭제( 예, 2dw : 앞으로 두 단어 삭제 )

dd : 현재 행 삭제

3dd : dd 3번한 효과

y + 이동키 : 이동방향 복사

yy : 현재 행 복사

P : 현재 행 위에 붙여넣기

p : 현재 행 아래에 붙여넣기

u : 되돌리기

O : 현재 행 위에 새로운 행 추가 후 삽입모드로 변경

o : 현재 행 아래에 새로운 행 추가 후 삽입모드로 변경

r : r누르고 삽입하고 싶은 글자를 누르면 한글자에 한해 삽입 가능

V : 행 단위 블록지정하는 비주얼 모드로 전환

v : 텍스트 단위 블록지정하는 비주얼 모드로 전환

> : 들여쓰기

< : 내여쓰기


파일시스템 배치도

/ : 루트 디렉터리

/root : 루트 사용자의 홈 디렉터리

/etc : 시스템 및 사용자가 설치한 애플리케이션의 환경 설장 파일이 저장됨

/proc : 시스템 상태 및 실행 중인 프로세스 등에 대한 정보를 제공하는 가상 파일시스템

/var : 시스템 및 애플리케이션이 만든 파일들이 저장됨( 대부분의 로그 파일은 /var/log에 저장됨 )

/srv : /var와 같은 목적으로 사용되는 신참 디렉터리. 잘 사용되지 않지만 /var에 없을 경우 찾게된다.

/boot : 부트로더나 리눅스 커널 등 시스템을 부팅하는 데 필요한 주요 파일이 담기는 곳

/bin : 사용자 프로그램이 저장되는 곳

/sbin : 관리자 프로그램이 저장되는 곳

/dev : 리눅스에서는 장치도 파일이며 그 장치들이 저장되는 디렉터리이다.( 하드디스크, 그래픽 카드 등 )

/home : 사용자의 홈 디렉터리들이 저장되는 곳

/lib : 애플리케이션들에 필요한 라이브러리 파일이 담긴다

/lost+found : 파일시스템이 추적하다 놓친 파일들을 모아두는 곳( 예, 디스크 복구 작업을 하다가 출처를 알 수 없는 파일이 발견됐을 경우 )

/mnt : mount를 줄여 표현함, 파일시스템을 추가로 마운트 하는 곳( 플로피 디스크, CD-ROM 등 )

/media : 이동식 미디어가 마운트된다( USB 등 )

/usr : 대다수의 소프트웨어가 머무르는 곳

/opt : 서드파티 소프트웨어나 애플리케이션이 이 디렉터리를 사용한다.( 예, 오라클 )

/sys : 시스템 정보가  담긴다. 실제로 정보가 저장된다는 점에서 /proc과 다르다

/tmp : 애플리케이션들이 사용하는 임시 파일 저장소


주요파일

/proc/cpuinfo : CPU 설정 정보

/proc/meminfo : 메모리 상태

/proc/<pid>/cmdline : 프로세스를 호출하는 데 사용할 커맨드라인 인수 전체의 리스트

/etc/profile : 전체 쉘 환경 제어용 스크립트

~/.bashrc : 로컬 쉘 환경 제어용 스크립트

/etc/sudoers : sudo 설정 스크립트

/etc/ssh/sshd_config : ssh 설정 스크립트( 포트 변경 등 )

/etc/rc.local : 호스트네임 변경( hostname wedump 삽입 -> 프롬프트의 호스트네임 변경됨 )

/etc/issue : 운영체제 버전확인

/etc/resolv.conf : 네임서버 설정

/etc/init.d : 데몬 스크립트들이 모여있는 디렉터리

/etc/passwd : 사용자 정보

/etc/shadow : 사용자 패스워드 정보

/etc/network/interfaces : 네트워크 설정

  1) wpa-ssid와 wpa-psk를 입력 후 저장

  2) sudo ifdown wlan0

  3) sudo ifup wlan0 

  4) 재부팅하면 해당 내용으로 무선 인터넷 연결됨

  5) iwconfig : 연결된 네트워크 세부정보 볼 수 있음

  6) iwlist scan : 주변 무선 핫스팟 정보 출력


배쉬 쉘 프로그래밍

쉬뱅( shebang )#!/bin/bash, 스크립트의 시작은 항상 이렇게 해야 함

확장자 : 확장자는 보통 .sh

이스케이프 문자 : \

비교연산자 : -eq( = ), -ne( != ), -gt( > ), -lt( < ), -ge( >= ), -le( <= )

산술연산을 위한 처리 : $((내용))

주의 : 띄어쓰기가 문법에 어긋날 시 정상작동 하지 않으니 주의해야 함


예제 프로그램01 - FizzBuzz

#!/bin/bash

number=1

while [ $number -le 100 ]; do

if [ $(($number % 3)) -eq 0 ]; then

    if [ $(($number % 5)) -eq 0 ]; then

        echo "$number - FizzBuzz"

    else

        echo "$number - Fizz"

    fi

else

    if [ $(($number % 5)) -eq 0 ]; then

        echo "$number - Buzz"

    else

        echo $number

    fi

fi

number=$(($number + 1))

done


예제 프로그램02 - init 스크립트

#!/bin/bash

### BEGIN INIT INFO

# Provides:             xbmc

# Required-Start      $all

# Required-Stop      $all

# Default-Start         2 3 4 5

# Default-Stop         0 1 6

# Short-Description  Start XMBC

# Description           Start XMBC

### END INIT INFO

case "$1" in

    start)

        # 처리1

        ;;

    stop)

        # 처리2

        ;;

    *)

        # 처리3

        exit 1

        ;;

esac

exit 0


기타

프롬프트 : 프롬프트의 #은 루트사용자를 나타내고, $는 일반 사용자를 나타냄

홈디렉터리 : ~(틸드)는 현재 사용자의 홈 디렉터리를 나타냄

숨김파일 : 파일명 앞에 .이 붙은 파일은 숨김파일

백그라운드 실행 : 백그라운드로 실행 시 뒤에 &를 붙임