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