====== 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 방어 포함]]