====== linux 기초 사용법 ======
$ history
* ls; list 파일 목록
$ ls # 현재 디렉토리 파일 목록
$ ls /etc/systemd # /etc/systemd 디렉토리의 목록
$ ls -a # 현재 디렉토리의 목록(숨김 파일 포함)
$ ls -l # 현재 디렉토리의 목록을 자세히
$ ls *.conf # 확장자가 conf인 목록
$ ls -l /etc/systemd/b* # /etc/systemd 디렉토리에 있는 목록 중 앞 b로 시작하는 파일 목록을 자세히
* cd; change directory 디렉토리 이동
$ cd
$ cd ~ubuntu
$ cd ..
* pwd; print working directory
* rm; remove
$ rm abc.txt
$ rm -i abc.txt
$ rm -f abc.txt
$ rm -r abc
* cp; copy
* touch; 사이즈 0인 파일 생성, 파일이 존재할 경우 최종 수정 시간 변경
* mv; move
* mkdir; make directory
* rmdir; remove directory
* cat; concatenate, 파일의 내용을 화면 출력
* head; 텍스트 파일의 앞 10행 출력
* tail; 텍스트 파일의 뒤 10행 출력
* more; 텍스 파일 페이지 단위로 화면 출력, space bar, b, q
* less; more의 확장, pageUp, pageDown
* file; 파일의 종류 표시
* df; 디스크 사용량
* wc; word count
* clear; 화면 지움
* date, time, cal; 날짜, 시간, 달력 출력
* 파이프; |
* 필터; grep, tail, wc, sort, awk, sed 등
* 리디렉션; >(overwrite), >>(append), <, < >
* 연속 실행 ;
* 프로세스
* foreground process
* background process
* 프로세스 번호
* 작업 번호
* 부모 프로세스, 자식 프로세스
* ps
* kill
* pstree
* 데몬; 명령 &
* 서비스;
* systemctl start/stop/restart
* systemctl status
* systemctl enable/disable
* 소켓; /lib/systemd/system 디렉토리 소켓이름.socket
* GRUB; /etc/default/grub
* uname -r; 커널 버전 확인
* /etc/issue; 우분투 버전
* lsb_release -a
* wget
* curl
* ls -l
* 파일유형; d(디렉토리),-(일반), b(블록 디바이스), c(문자 디바이스), l(링크)
* 파일허가권; r(read)w(write)x(execute) 형식, 소유자-그룹-기타 순.
* 링크수
* 파일소유자
* 파일소유그룹
* 파일크기(Bytes)
* 마지막변경 날짜/시간
* 파일 이름
* chmod; u(user), g(group), o(others)
* chown;
* chgrp
* whoami
* 링크
* Hard link; 원본 데이터를 직접 가르킴
* Symbolic link; ln -s, 별도의 포인터
* inode에 대한 이해
* package
* dpkg -i(--install), -r(--remove), -P(--purge), -l, -L
* apt-get; 의존성 문제 해결,
* apt-get -y install 패키지 이름
* apt-get update
* apt-get remove,
* apt-get purge,
* apt-get autoremove
* apt-cache
* apt-cache show
* apt-cache depends
* apt-cache rdepends
* 파일 압축
* xz; 확장명 xz로 압축/해제
* bzip2; bz2로 압축/해제
* gzip; gz 압축/해제
* zip / unzip; zip 압축/해제
* 파일 묶기
* tar; tar로 묶음/해제
* c; 새로운 묶음
* x; 묶인 파일 해제
* t; 묶을 풀기 전에 묶인 경로 보여줌
* C; 묶음을 풀 때 지정된 디렉토리에 압축 해제.
* f(필수); 묶음 파일 이름 지정
* v; visual
* J; tar + xz
* z; tar + gzip
* j; tar + bzip2
* 파일 위치 검색
* find 경로 옵션 조건 action;
$ find /etc -name "*.conf"
$ find /home -user ubuntu
$ find ~ -perm 644
$ find /user/bin -size +10k -size -100k
$ find ~ -size 0k -exec ls -l { } \;
$ find /home -name "*.swp" -exec rm { } \;
* which; PATH에 설정된 디렉토리 검색. 절대 경로를 포함한 위치 검색
* whereis; 실행 파일 및 소스, man 페이지 까지 검색
* locate; updatedb 실행 필요
* cron; crond : /etc/crontab
* at
* https://explainshell.com/
==== 네트워크 ====
* ifconfig
* ifdown
* ifup
* systemctl start/stop/restart/status networking
* nslookup
* ping
* /etc/resolv.conf; dns 서버의 정보와 호스트 이름이 들어있는 임시 사용 파일
* /etc/hosts; 호스트 이름과 FQDN이 들어있는 파일
* /etc/network/interfaces
* 사용자/그룹;
* /etc/passwd; 사용자이름:암호:사용자ID:사용자소속그룹ID:추가정보:홈디렉토리:기본쉘
* /etc/group; 그룹이름:비밀번호:그룹ID:보조그룹사용자
* adduser; 새로운 사용자 추가 /etc/passwd, /etc/shadow, etc/group 파일에 사용자 추가
* passwd; 비밀번호 변경
* usermod; 사용자 속성 변경
* userdel; 사용자 삭제
* chage; 사용자의 암호를 주기적으로 변경하도록 설정(change age)
* groups; 사용자 소속 그룹 출력
* groupadd; 새로운 그룹 생성
* groupmod; 그숩 속성 변경
* groupdel; 그룹 삭제
* gpasswd; 그룹 암호 설정, 그룹 관리
* mount / unmount
* 히스토리
$ history
* 도움말
man <명령어>
$ man ls
* 로그 아웃 (사용자 계정)
$ logout
$ exit
* 시스템 재부팅 (root 계정)
# reboot
# shutdown -r now
# init 6
^ 런레벨 ^^^^
^ 런레벨 ^ 영문 모드 ^ 설명 ^ 비고 ^
| 0 | Power Off | 종료 모드 | |
| 1 | Rescue | 시스템 복구 모드 | 단일 사용자 모드 |
| 2 | Multi-User | | 사용하지 않음 |
| 3 | Multi-User | 텍스트 모드의 다중 사용자 모드 | |
| 4 | Multi-User | | 사용하지 않음 |
| 5 | Graphical | 그래픽 모드의 다중 사용자 모드 | |
| 6 | Reboot | | |
* 시스템 종료 (root 계정)
# poweroff
# shutdown -P now
# halt -p
# init 0
# shutdown -P +10 # 10분 후 종료 (P: poweroff)
# shutdown -r 22:00 # 오후 10시에 재부팅 (r: reboot)
# shutdown -c # 예약된 shutdown 취소 (c: cancel)
# shutdown -k +15 # 현재 접속한 사용자에게 15분 후에 종료 메시지 브로드캐스팅, 실제 종료는 안됨
* raid(Redundant of Inexpensive/Independent Disks)
* 단순볼륨
* linear raid
* raid 0; stripping
* raid 1; mirroring, fault-tolerance
* raid 5; parity
* raid 6;
* raid 1+0, 1+6
* quota; /etc/fstab -> reboot -> quota heck, quotaon/quotaoff -> edquota
==== bash shell script ====
* alias
* history
* 연산기능
* job control 기능
* 자동 이름 완성 기능
* 프롬프트 제어 기능
* 명령 편집 기능
* shebang(hashbang)
^ 환경변수 ^^
| HOME | 현재 사용자의 홈 디렉토리 |
| PATH | 실행 파일을 찾는 디렉토리 경로 |
| LANG | 기본 지원되는 언어 |
| PWD | 사용자의 현재 작업 디렉토리 |
| TERM | 로그인 터미널 타입 |
| SHELL | 로그인해서 사용하는 쉘 |
| USER | 현재 사용자의 이름 |
| DISPLAY | X 디스플레이 이름 |
| COLUMNS | 현재 터미널의 컬럼 수 |
| LINES | 현재 터미널 라인 수 |
| PS1 | 1차 명령 프롬프트 변수 |
| PS2 | 2차 명령 프롬프트 (대개는 '>') |
| BASH | bash 쉘의 경로 |
| BASH_VERSION | bash 버전 |
| HISTFILE | 히스토리 파일의 경로 |
| HISTSIZE | 히스토리 파일에 저장되는 개수 |
| HOSTNAME | 호스트의 이름 |
| USERNAME | 현재 사용자 이름 |
| LOGNAME | 로그인 이름 |
| LS_COLORS | ls 명령의 확장자 색상 옵션 |
| MAIL | 메일을 보관하는 경로 |
| OSTYPE | 운영체제 타입 |
* export 환경변수=값, printenv
* .sh
* echo
* chmod +x
* 변수
* 변수=값; = 앞뒤로 공백 없음, 문자열
* 숫자 계산; 역따옴표`, expr \(, \), \*,
* 파라미터; $0, $1, $2, …
* if ~ fi, else
if [ 조건 ]
then
참일 경우 실행
else
거짓인 경우 실행
fi
* case ~ esac, 비교할내용) 명령 끝에만;; *) 나머지 조건;;
* and; -a, &&,
* [ 식1 ] && [ 식2 ]; then
* [ \(식1\) -a \(식2\) ]; then
* or; -o, ||
* for ~ in; ((i=1;i<=10;i++)) 괄호 두개, seq 1 10
for 변수 in 값1 값2 값3
do
반복할 문자
done
* while 참이면, until 참이 될 때 까지, break, continue, exit, return
while [ 참 ]
do
명령
done
* 사용자 정의 함수
함수이름 () {
$1, $2,
실행
}
함수이름
* eval; 문자열을 명령문으로 인식하여 실행
* printf;
* set과 $(명령)
^ 문자열 비교 연산자 ^^
^ 문자열 비교 ^ 결과 ^
| "문자열1" = "문자열2" | 두 문자열이 같은면 참 |
| "문자열1" != "문자열2" | 두 물자열이 같지 않으면 참 |
| -n "문자열" | 문자열이 NULL(빈 문자열)이 아니면 참 |
| -z "문자열" | 문자열이 NULL(빈 문자열)이면 참 |
^ 산술 비교 연산자 ^^
^ 산술 비교 ^ 결과 ^
| 수식1 -eq 수식2 | 두 수식(또는 변수)이 같으면 참 |
| 수식1 -ne 수식2 | 두 수식(또는 변수)이 같지 않으면 참 |
| 수식1 -gt 수식2 | 수식1이 크다면 참 |
| 수식1 -ge 수식2 | 수식1이 크거나 같으면 참 |
| 수식1 -lt 수식2 | 수식1이 작으면 참 |
| 수식1 -le 수식2 | 수식1이 작거나 같으면 참 |
| !수직 | 수식이 거짓이라면 참 |
^ 파일 조건 ^^
^ 파일 조건 ^ 결과 ^
| -d 파일이름 | 파일이 디렉토리라면 참 |
| -e 파일이름 | 파일이 존재하면 참 |
| -f 파일이름 | 파일이 일반 파일이면 참 |
| -g 파일이름 | 파일에 set-group-id가 설정되면 참 |
| -r 파일이름 | 파일이 읽기 가능이면 참 |
| -s 파일이름 | 파일 크기가 0이 아니면 참 |
| -u 파일이름 | 파일에 set-user-id가 설정되면 참 |
| -w 파일이름 | 파일이 쓰기 가능 상태이면 참 |
| -x 파일이름 | 파일이 실행 가능 상태이면 참 |
==== OpenSSH ====
* apt-get -y install openssh-server
* port 22/tcp
* systemctl restart/enable/status ssh
==== Name Server ====
* DNS(Domain Name System) Server
* 캐싱
* apt-get -y install bind9 bind9utils
* /etc/bind/named.conf.options
* recursion yes;
* allow-query { any; };
* systemctl restart/enable/status bind9
* port 53
* dig @네임서버IP 조회할URL
* 마스터 네임서버
* /etc/bind/named.conf
* named-checkconf
==== Mail Server ====
* SMTP(Simple Mail Transfer Protocol), POP(Post Office Protocol), IMAP(Internet Mail Access Protocol)
* Sendmail
* apt-get -y install sendmail
* apt-get -y install dovecot-pop3d
* /etc/mail/sendmail.cf
* /etc/mail/access
* /etc/dovecot/dovecot.conf
* /etc/dovecot/conf.d/10-mail.conf
* systemctl restart/enable sendmail
* systemctl restart/enable dovecot
* 라운드큐브 웹메일
* apt-get -y install dovecot-imapd lamp-server^
* apt-get -y install roundcube
* /etc/apache2/conf-enabled/roundcube.conf
* /etc/roundcube/config.inc.php
* Postfix
* 네임서버 세팅 먼저
==== Database Server ====
* MySQL, mariaDB
* apt-get -y install mariadb-server mariadb-client
* port 3306
* 서버스크립트; /etc/systemd/system/mysql.service
* 클라이언트 실행파일; /usr/bin/mysql
* phpMyAdmin; apt-get -y install phpmyadmin
==== Web Server ====
* LAMP
* apt-get -y install lamp-server^
* Apache2
* /etc/apache2/apache2.conf
* nginx
* nextCloud
==== Firewall ====
* ufw [[https://webdir.tistory.com/206|[Ubuntu] 우분투 방화벽(UFW) 설정]]
* iptables [[https://happist.com/573574/%EC%9A%B0%EB%B6%84%ED%88%AC-%EB%B0%A9%ED%99%94%EB%B2%BD-%EA%B0%95%ED%99%94%EB%A5%BC-%EC%9C%84%ED%95%9C-%EC%9A%B0%EB%B6%84%ED%88%AC-iptables-%EC%84%A4%EC%A0%95%EB%B2%95-ddos-%EB%B0%A9%EC%96%B4|우분투 방화벽 강화를 위한 우분투 IPtables 설정법 – DDoS 방어 포함]]