카테고리 없음

리눅스 개발 환경의 기초 지식

kelfs19 2021. 11. 8. 16:21

오랫동안 리눅스를 사용하지 않다가 필요할 때 복붙복 할 수 있는 내용을 정리한 것입니다. 원래 자신을 위한 메모? 같은 내용이었는데, 같은 처지의 분들에게 도움이 되면 좋겠다고 생각해 올립니다.

 

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 패키지 소프트웨어(주로 바이너리의 blob)의 설치처에 사용되는 경우가 많다
/opt/local/lib 패키지 소프트웨어(주로 바이너리의 blob)의 설치처에 사용되는 경우가 많다
/etc 각종 어플리케이션의 설정 파일
/var/log 애플리케이션 로그가 출력됨
/var/www/html 웹 서버의 문서 루트로 사용되는 경우가 많습니다.

패키지 관리 명령

배포판명령

RedHat계 yum
Mac brew
데비안계 apt-get

모든 패키지 업데이트

apt-get update && apt-get dist-upgrade yum update brew upgrade

패키지가 설치된 위치

패키지에 따라 다릅니다.

배포판조사하는 방법

우분투 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 장소

패키지를 넣을 때

디폴트라면 「/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 1문자 지우기
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

서버 로드 상태 조사

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가 표시되는 경우 CPU가 I/O 처리를 기다리고 있던 시간의 비율이 표시된다.
%idel은 디스크 I/O 대기로 CPU가 기다리고 있던 시간의 비율

서버 구축 시 수행하는 보안 설정

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

cron 설정

crontab -e