기본 콘텐츠로 건너뛰기

Linux 기초



출처 :
http://qiita.com/0xfffffff7/items/028ff8c920a6a8c67dc5?utm_source=Qiita%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%B9&utm_campaign=123e24f9d4-Qiita_newsletter_165_07_15_2015&utm_medium=email&utm_term=0_e44feaa081-123e24f9d4-32972029


내가 정리하는건 못하겠고 남이 정리해 놓은거 카피하였음.
(구글 번역기로 돌렸음)



 
 
생각 나는 대로 쓴 것입니다.
MacOS
Linux 대신 BSD 계열이지만, 패키지 명령으로 조금 소개하고 있습니다.


개인 설정 파일

홈 디렉터리에 설정 파일이 있습니다.



위치

의미

.bash_profile

로그인시에만 로드

.bashrc

쉘을 시작할 때마다 로드


바이너리와 라이브러리의 위치




위치

의미

/bin

기본적인 시스템 명령 바이너리를 둔다

/sbin

기본적인 시스템 관리 명령 바이너리를 둔다

/lib

시스템이 제공하는 라이브러리

/usr/bin

기본이지 않은 시스템이 제공하는 바이너리

/usr/sbin

기본이 없는 시스템 관리 명령을 둔다

/usr/lib

/lib와 거의 같다

/usr/include

C언어 인쿨루드 헤더

/usr/libexec

내부적으로 불리는 보조 명령

/usr/local

직접 컴파일 한 것이 배치되는 장소 (이하 동일)

/usr/local/bin

/usr/local/lib

/usr/local/include

/usr/local/opt

/usr/src/

커널 소스코드와 헤더파일

/opt/local/bin

패키지 소프트웨어의 설치에 이용되는 경우가 많다.

/opt/local/lib

패키지 소프트웨어의 설치에 이용되는 경우가 많다.

/etc

각종 응용 프로그램의 설정 파일

/var/log

응용 프로그램의 로그가 출력

/var/www/html

웹 서버의 문서 루트로 사용되는 경우가 많다.


패키지 관리 명령



배포판

명령

RedHat계열

yum

Mac

brew

Debian계열

apt-get

모든 패키지 업데이트

apt-get upgrade

 

yum update

 

brew upgrade


패키지가 설치된 장소

패키지에 따라 다르다



배포판

조사 방법

ubuntu

dpkg -L 패키지 이름

redhat(yum도 동일)

rpm -ql 패키지 이름

MacOSX

/usr/local/Cellar」에 설치된/usr/bin」에 연결된


직접 소스를 빌드

인터넷에서 검색하여 압축을 풀고 컴파일 하는 경우.

wget http://소스이름.tar.gz

tar -xvf 소스이름.tar.gz

cd 소스이름

./configure

make

sudo make install

설치 위치를 스스로 결정할 경우

./configure --prefix 위치


gcc에서 직접 컴파일

test.cc를 컴파일 하는 경우.

gcc -L 라이브러리 경로 -I 포함 파일 경로 -l 라이브러리 이름 -o 출력 바이너리 명 test.cc

공유 라이브러리는「lib.a」라고 하는 이름이므로 –l로 지정할 때 “~” 부분만 좋다.


패키지를 넣는 경우

기본이라고 "/usr/bin"가 먼저 검색되므로 $ {PATH}에서 "/usr/local/bin"을 먼저 검색하도록 구성 해 둔다.

깨끗하게 유지하려면 직접 컴파일 소스를 "./configure --prefix 장소"에서 정한 위치에 설치하여 그때마다 경로를 통한 것이 좋다.


공유 라이브러리의 의존성을 조사


공유 라이브러리는 확장자가 ".so"파일. 
ldd
명령으로 프로그램의 의존 라이브러리를 점검한다.

ldd /bin/cp

  libc.so.6 => /lib/libc.so.6

  /lib/ld-linux.so.2 => /lib/ld-linux.so.2

MacOSX의 경우

otool -L


환경 변수 목록 확인


printenv


경로 지정




변수 이름

의미

$PATH

이진 검색 경로

$LD_LIBRARY_PATH

라이브러리 검색 경로

$C_INCLUDE_PATH

C 언어 인클루드 패스

적혀있는 순서로 우선하여 찾아 실행된다. 
“:”
로 구분하여;에서 끝내기. 
=/usr/local/lib을 우선하여 검색하도록 설정하고 반영하는 예.
$ LD_LIBRARY_PATH=/usr/local/lib:/usr/lib;

export LD_LIBRARY_PATH

위는 일시적으로 반영하는 경우
영구적으로 반영하는 경우.bash_profile」또는「.bashrc에 쓰고 나서 source 명령으로 반영한다.


vi ~ / .bashrc 
기록 
source ~ / .bashrc


파일 압축

.tar.gz

tar zxvf filename.tar.gz

.bz2

tar xvfj filename.bz2 


vi명령



명령

의미

i

삽입 모드

a

다음 문자 입력 상태

x

문자 지우기

D

행 끝까지 삭제

q

종료

q!

종료

w

저장

wq

저장하고 종료

gg

파일의 위로 이동

: 숫자

지정된 행으로 이동

G

파일의 끝으로 이동

Ctrl + f

다음 화면으로 이동

Ctrl + b

이전 화면으로 이동

0

줄의 처음으로 이동

$

행의 끝으로 이동

w

다음 단어로 이동

b

이전 단어로 이동

W

다음 빈으로 이동

B

이전 공백으로 이동

yy

복사 (전 수치로 복사 행수 지정)

p

페이스트 (현재 행)

P

페이스트 (커서 아래)

dd

삭제 (전에 수치로 삭제 행수 지정)

u

작업 취소

/ [문자열]

앞으로 검색

? [문자열]

후방 검색

n

다음 후보

N

이전 후보

:%s/바꾸기 전에 문자열/치환 어 문자열/g

대체

: set number

행 번호 표시

: syntax off

색상을 끈다


git으로 clone 커밋


git clone URL
git add index.html 
git COMMIT -m "코멘트" 
git push

다시 시도

작업 트리와 인덱스를 직전의 위탁 상태로 복원

git reset --hard

직전의 위탁 취소

git reset --hard HEAD ^

원격 변경 사항을 캡처

git pull


서비스 시작 및 종료


/etc/init.d/서비스 이름 start 
/etc/init.d/서비스 이름 stop

또는

service 서비스 명 start

다시 시작

/etc/init.d/ 서비스 이름 restart

항상 시작하기

chkconfig 서비스 명 on


원격 컴퓨터에 파일 복사


scp [옵션] 원본 대상

현재의 testfile 192.168.1.10 user1로 로그인하고 홈 디렉터리로 전송하는 경우.

scp ./testfile user1@192.168.1.10~/

경로의 순서를 바꾸면 원격으로 취득도 가능.


파일 검색


$ find / -name doc.txt


자체 서명 된 인증서 만들기


CommonName에 호스트 이름을 입력한다.

# openssl genrsa 2048 > server.key

# openssl req -new -key server.key > server.csr

# openssl x509 -days 3650 -req -signkey server.key <server.csr> server.crt


호스트 이름 변경


#vi /etc/hosts

127.0.0.1 xxxx localhost 여기에 추가

#vi etc/sysconfig/network

NETWORKING=yes

HOSTNAME=여기에 쓰기

GATEWAY=192.168.0.1

반영

# /etc/rc.d/init.d/network restart


사용중인 포트 확인


sudo netstat -anp


공간 확인


각 파티션

df -h

현재 디렉터리에서 재귀적으로 조사

du -h


다양한 도구



분야

이름

가상 환경

Vagrant
Docker

전체 텍스트 검색 엔진

Apache Solr
groonga
Hyper Estraier
Senna

KVS

Redis
memcached
mongoDB

직렬화

messagepack

배포 도구

ChefAnsibleが有名
Puppet
Capistrano
Fabric
Ansible

서버 테스트

serverspec

서버 모니터링

Nagios

성능 측정

New Relic

로그 수집

fluentd

응용 프로그램 테스트

Jenkins

기계 학습 라이브러리

Jubatus(http://jubat.us/ja/)
Apache Mahout
SHOGUN
NLTK

형태소 띄어쓰기

mecub
chasen
tinysegmenter


서버 부하 상황을 조사한다


CPU부하

top

메모리

vmstat

다른 방법

# uptime

13:35  up 30 mins, 2 users, load averages: 0.07 0.16 0.19

load averages에 이어 1 , 5 , 15 분 단위로 숫자가 표시된다. 
이 수치는 처리 대기 시간을 보여주고 있다. 
처리 지연은 "CPU 사용" 또는 "I/O 처리 대기"어느 쪽이든 이다.

평균 부하가 낮은데 성능이 오르지 않는 경우 네트워크에 요인이 있을 가능성이 높기 때문에 'netstat'등으로 조사한다.


CPU 사용률과 I/O 대기 시간을 조사


# sar -u 3 10

13:40:16  %usr  %nice   %sys   %idle

13:40:19    1      0      2     98

13:40:22    1      0      1     98

13:40:25    0      0      1     98

13:40:28    0      0      1     99

13:40:31    1      0      1     98

13:40:34    0      0      1     99

13:40:37    0      0      1     99

13:40:40    0      0      1     99

13:40:43    0      0      1     99

13:40:46    0      0      1     99

Average:      0      0      1     98  

%user는 사용자 공간에서의 CPU 사용률
%nine
는 우선 순위를 변경 한 프로세스를 통해 사용자 공간에서 CPU 사용률
%system
은 커널 공간에서 CPU 사용률
%iowiat
가 나타날 경우 CPUI/O 처리를 기다리고 있던 시간의 비율.
%idel
디스크 I/O 대기에서 CPU가 기다리던 시간의 비율.


서버 구축시에 실시하는 보안 설정


LPIC 표준 교과서의 목차보다 
1
소프트웨어의 업데이트 정보를 확인할 
2
사용하고있는 패키지를 정기적으로 업데이트하는 
3
불필요한 소프트웨어를 설치하지 
4
불필요한 사용자는 로그인 할 수 없게하거나 삭제하는 
5
필요 에 따라 사용자의 암호가 만료을 낸다 
6 root
가 될 수 또는 sudo를 사용할 사용자를 제한하는 
7
파일 및 디렉토리 권한을 적절하게 설정 
8
런레벨을 적절하게 설정하고 불필요한 데몬을 시작 못하게 
9
불필요한 SUID, SGID를 제거하는 
10
로그를 정확하게 남겨 
11
패킷 필터링 (iptables )를 사용하고 불필요한 패킷을 수신하지 않도록하는 
12
불필요한 포트 닫기

댓글

이 블로그의 인기 게시물

linux tar.gz comp

ftp로 파일을 전송하는데 잡다한 파일들이 너무 많아서 (약 2만개) 전송에 시간이 너무 오래 걸리더라. 처음에는 scp로 복사 하려고 했는데 잘 안되서 했더니 엉망...; 그냥 압축해서 한번에 전송해서 수십분을 아껼 수 있었다. 유형 tar => 파일을 하나로 모은다. gzip => 압축한다. tar.gz => 하나로 모아서 압축한다. 압축/해제 tar로 압축 => tar -cvf temp.tar temp tar 압축풀기 => tar -xvf temp.tar tar.gz 압축하기 => tar -zcvf temp.tar.gz temp tar.gz 압축풀기 => tar -zxvf temp.tar.gz 리눅스 시스템 내에 대량의 파일을 복사할 때도 사용하면 편하다...

사원으로 가면 암걸리는 회사.

(1) 어떠한 일이 벌어지던 지휘 명령 체계를 반드시 지키도록 강요한다. 의사 결정을 앞당기기 위한 샛길을 허락하지 않는다. (2) 간단하게 해결할 수 있는 안건도 위원회에서 검토하게 하며, 위원회는 가능한 크게 만든다. 최소 5명 이상. (3) 될 수 있는 한 자주 회의를 열도록 유도한다. (4) 이전 회의에서 정해진 것을 되풀이해서 검토하도록 유도한다. (5) 중요한 업무가 있어도 회의를 열게 한다. (6) 문서의 형식, 제출 일자, 오탈자를 집요하게 추궁한다. (7) 될 수 있는 한 문서의 양을 늘린다. (8) 업무 승인 수속을 될 수 있는 한 복잡하게 한다. 제 아무리 간단한 일에도 3명 이상의 승인을 필수가 되도록 유도한다. (9) 조직내 권한 문제를 집요하게 추궁한다. 상층부의 허락을 받지 않고 독단으로 해결해도 되는 지 끊임없이 지적한다. (10) 업무할당을 할 경우, 항상 중요도가 낮은 업무에 집중하도록 유도한다. (11) 새로운 직원에게 경험을 쌓을 시간과 자원을 주지 않는다.

buddy

https://buddy.works/ 깃 서비스가 엄청나게 많아 지고 있는것 같다. 최근에 gogs 도 그렇고 예전에 쓰던 github clone 들... 찾아보면 많을 것 같다. 이번에 페이스북에 광고로 올라온 buddy도 그렇다. 1프로젝트당 1$ 라는데... 기회가 되면 써 봐야지 -.-