1. 리눅스 기초
- 디렉토리 삭제 시 -r 재귀옵션으로
rm -r [디렉토리]
- 보기 상태에서 키워드 검색은
/키워드
입력 후n
으로 탐색 - 유닉스 계열의 주요 특징 중 하나는 다중 사용자 시스템. 즉 하나의 OS를 여러 사람이 나누어 씀
슈퍼 유저 권한으로 실행하려면sudo
명령어 사용 예: sudo apt-get insall git - nano 에디터 사용하기
nano 명령어 입력 후 편집 상태에서 하단의 명령모음 사용. ^는 Ctrl을 의미Ctrl
+6
을 누르면 Shift 상태로 전환하여 블록지정 가능 - 패키지 매니저
프로그램을 다운받아 설치하기 위해 apt나 yum과 같은 패키지 매니저 사용 - 다운로드 방법 - wget
2. IO Redirection
- 프로세스의 Output을 모니터 출력이 아닌 파일에 저장하려면
>
사용
예)ls -l > result.txt
Standard Output을 저장
예)ls -l 1> result.txt 2> error.log
- Input은
<
사용
예) cat 프로세스에 StandardInput으로 hello.txt를 주려면cat < hello.txt
- Redirection 결과를 덧데려면(append )
>>
사용 - Standard Output vs Standard Error
3. 쉘과 쉘스크립트
- 커널은 하드웨어를 직접적으로 제어하는 프로그램. 쉘은 커널을 둘러싼 껍데기이며 여러 종류가 있음. 종류를 확인하려면
echo $SHELL
예) bash, zsh - 사용자는 명령어를 쉘에 요청 → 쉘은 커널에 요청 후 → 결과를 리턴
- 명령(프로그램)은 /bin 하위에 위치
실행권한(x) 을 추가하게 되면/bin/bash test.sh
로 bash명령어를 붙여주지 않고도./test.sh
로 프로그램을 실행할 수 있게된다. - 쉘 스크립트는 쉘 명령어들의 각본임. 첫 번째 줄은 명령어 해석기를 명시하는 약속
#!/bin/bash if ! [ -d bak ]; then mkdir bak fi cp *.log
4. 디렉토리 구조와 파일찾는 법
4.1 디렉토리 구조
/bin
: 사용자 바이너리. 즉 프로그램 (예: ps, ls, grep)/sbin
: 시스템 바이너리/etc
: 설정파일/var
: 변수 파일. (예: 로그와 같은 바뀔 수 있는 파일들)/tmp
: 임시파일/usr
: 사용자 프로그램/home
: 사용자들의 디렉토리
4.2 파일 찾는 법 - locate와 find
- locate
데이터베이스(mlocate)를 뒤져서 찾음. 하루에 한 번 정도 리눅스가 정돈 작업 함.
예) locate *.log - find
실제로 디렉토리를 뒤짐. locate보다는 성능이 뒤지지만 실시간임. 자세한 옵션은 매뉴얼 참고
예) sudo find . -name target.txt
예) find ~ *.log
4.3 파일 찾는 법 - whereis와 $PATH
- 프로그램 파일을 찾을 때
whereis
명령어 사용. 결과로 실행 파일과, 매뉴얼 파일 위치 리턴
예) whereis ls - 환경변수
$PATH
에 담긴 경로의 프로그램은 전체경로를 지정하지 않아도 호출 가능.
5. 프로세스와 실행
- 프로그램은 Storage(SSD, HDD)에 있다가 실행 요청하면 Memory(RAM)에 적재되어 Processor(CPU)에 의해 실행되는데 이 실행되는 프로그램을 프로세스라고 함
- 명령어가 컴퓨터 상에 존재하는 방식은 프로그램. 그 프로그램은 스토리지에 저장됨
5.1 프로세스 모니터링
- 현재 실행중인 프로세스 목록을 보려면
ps
명령어 또는top
명령어 또는htop
명령어 사용ps aux
: 백그라운드 실행 프로세스 포함 출력sudo kill [프로세스번호]
: 강제로 프로세스 죽이기
5.2 백그라운드 실행
Ctrl
+z
: 백그라운드로 이동fg
: 포그라운드 이동 (forground의 약자임)fg %번호
: 번호에 해당하는 프로그램으로 이동kill %번호
: 번호에 해당하는 프로그램 멈춤jobs
: 백그라운드 실행중인 프로그램 확인- 실행할 때부터 즉각 백그라운드로 보내고 싶으면 (예: 오래걸리는 작업) 끝에
&
를 붙인다.
예) ls -alR / > result.txt 2> error.log &
5.3 데몬의 개념
- 데몬은 항상 실행되어 있는 프로그램. Web Server 프로그램도 데몬
- 데몬 프로그램은 /etc/init.d 하위에 위치
5.4 service와 자동실행
- 서비스 키고 끄기
sudo service [서비스명] start
sudo service apache stop
- 서버가 콘솔로 부팅될 때 자동으로 실행 또는 중지시키려는 데몬이 있다면 /etc/rc3.d 폴더 하위에 링크를 추가한다. 만약 운영체제가 GUI 방식으로 구동된다면 /etc/rc5.d 폴더에 추가
5.5 정기적 실행 cron
crontab -e
: 크론 작업 편집crontab -l
: 크론작업 목록 확인- 예) 1/* * * * date >> date.log 2>&1 : 1분에 한 번씩 날짜를 date.log파일에 append. 에러발생 시에도 date.log에 표준에러 출력
5.6 쉘을 시작할 때 실행
- 홈 하위 경로 .bashrc 파일에 시작 스크립트를 작성
6. 사용자
- UNIX는 다중 사용자 시스템임. 사용자는 크게 두 가지 Super User(Root User)와 User가 있음
- 터미널 명령어 입력 라인에 $로 되어있으면 일반유저, #은 슈퍼유저
id
: 현재 사용자 확인who
: 현재 접속한 사용자 목록 확인sudo passwd -u root
: 슈퍼유저에 락을 풀기 (unlock)sudo passwd -l root
: 슈퍼유저에 락 걸기 (lock) 슈퍼유저 사용 불가능하게 됨
7. 권한 (permission)
- 권한을 변경하는방법 -
chmod
예)chmod o-r perm.txt
: other에 대해세 perm.txt파일의 read 권한 빼기 (user는 u) - 실행권한(x) 을 추가하게 되면
/bin/bash test.sh
로 bash명령어를 붙여주지 않고도./test.sh
로 프로그램을 실행할 수 있게된다. - 디렉토리 하위 모든 디렉토리의 권한을 수정하려면 -R 옵션을 추가한다. R은 Recursive 재귀.
- chmod 명령어를 octal mode로도 실행할 수 있다.
예)chmod 755 perm.txt
- ls했을 때 결과에서 맨 앞의 type으로 디렉토리/파일 여부를 확인하고
가운데 owner와 group으로 소유자를 확인한다.
8. 그룹
sudo groupadd [그룹명]
sudo usermod -a -G [사용자명]
chown root:developer .
: 현재 디렉토리의 소유자를 root와 그룹 developer로 바꿔라
9. 인터넷, 네트워크 그리고 서버
9.1 인터넷
- 자신 컴퓨터의 IP 조회 방법
(방식1)curl ipinfo.io/ip
: 어떤 public IP로 접속했는 지 확인
(방식2)ip addr
: 실제 IP확인. inet addr 옆 숫자 확인
1과2의 결과가 같을 수도 있고 다를 수도 있음. 보통은 라우터를 사용하여 사설IP사용
9.2 apache
- 어떤 서버를 사용하건 대부분의 웹서버 설정 파일은 etc 하위에 있음
/etc/apache2/apache2.conf
reverse proxy설정(proxy_pass) 등 포함 - 웹페이지를 찾는 최상위 디렉토리인 document root 는 설정파일에서 확인 (apache 기본은 /var/www/html임)
9.3 원격제어 - ssh
- 유닉스계열 서버에는 ssh server 프로그램이 기본적으로 설치됨. ssh client로 접속
- 예시)
ssh egoing@192.168.0.65
- ssh는 22번 포트를 기본으로 사용. ssh -p 22 생략
9.4 포트(port)
- 포트는 일종의 구멍. 이론상 6만5천개 가량 할당 가능
- ssh server는 22번 포트, web server는 80번 포트에 기본으로 설치. 1024까지는 Well known 포트
- 공유기에는 웹서버가 기본적으로 설치돼 있음. 공유기에 할당된 안쪽에서만 통용되는 IP를 default gateway 라고 하며 이 IP를 알아내려면
ip route
명령어 사용 - 포트포워딩
10. 도메인 (domain)
- 인터넷에 접속하는 모든 컴퓨터에는 hosts파일이 존재. 리눅스의 경우
/etc/hosts
경로 - DNS 서버 정보 확인 :
cat /etc/resolv.conf
- 도메인의 IP를 질의하기 위해선 host 명령어 사용
예)host www.naver.com
- 도메인을 구입하는 것과 DNS 서버를 분리해서 관리할 수 있음
11. 인터넷을 통한 서버간 동기화 (rsync)
- 예) src 밑의 모든 파일들을 dest 폴더에 동기화 (a 옵션은 archive모드)
rsync -a src/ dest
- 예) 원격 동기화
rsync -azP ~/rsync/src egoing@192.168.0.65:~rsync/dest
(z는 압축모드, P는 progress bar 표시) - rsync는 증분백업을 해서 추가되거나 삭제된 것만 sync함
12. 로그인 없이 로그인 하기 (ssh key)
- (과정1)
ssh-keygen
명령어 실행하면 홈디렉토리 하위 .ssh 디렉토리에 ssh 파일 생성 - (과정2) 1에서 만들어진 공개키 id_rsa.pub 을 접근하고자 하는 컴퓨터의 홈디렉토리/.ssh/authorized_keys에 붙여넣어야 하는데 이를 간단하고 실수없이 하고자
ssh-copy-id
명령어 활용
예:ssh-copy-id ec2-user@192.168.0.67
- (과정3) 대상 컴퓨터에서 카피가 잘 됐는 지 확인
예:cat /home/ec2-user/.ssh/authorized_keys
- 퍼블릭 키를 추가하면 패스워드를 묻지 않고 rsync 동작
cron과 같은 도구를 이용해서 정기적으로 백업과 같은 rsync 동작 처리 가능해짐 - 비대칭키는 private키로 암호화한 정보를 public키로 복호화하는 방식이며 대표 개념으로 RSA가 있다.
○ 사용팁
sudo !!
: 직전에 입력했던 명령어를 슈퍼유저로 실행
출처 - 생활코딩 Linux 강좌