====== Linux ====== * description : 리눅스와 관련된 내용 정리 * author : 주레피 * email : dhan@repia.com * lastupdate : 2020-04-02 ===== 배포판 ===== * [[wiki:os:linux:centos|Centos linux, 센트오에스]] * [[wiki:os:linux:ubuntu|Ubuntu linux, 우분투]] * [[wiki:os:linux:sulinux|Sulinux, 에스유리눅스]] * [[wiki:os:linux:수세리눅스|수세리눅스]] * [[wiki:os:linux:Rocky|rocky linux, 로키]] * [[wiki:os:linux:페도라|Fedora, 페도라]] * [[wiki:os:linux:슬랙웨어|Slackware, 슬랙웨어]] * [[wiki:os:linux:데비안|데비안]] ===== 한글 언어팩 설정 ===== locale -a | grep ko 했을 때 안나오면 아래와 같이 명령어를 써주면 된다. \\ 보통은 서버셋팅 업체에 요청한다. # root 계정으로 작업 shell$> localedef -i ko_KR -f EUC-KR ko_KR.euckr shell$> localedef -i ko_KR -f UTF-8 ko_KR.utf8 ===== gcc 및 검색엔진 컴파일에 필요한 라이브러리 (rpm 설치) ===== 아래의 순서대로 무조건 따라하기! \\ 순서가 중요한 이유는 의존성 때문이다.\\ CentOS 7.9.2002 기준 라이브러리\\ [[http://temp.repia.com/Utility/rpm/centos7.9.2002/rpm.tar.gz|[CentOS_7.9.2002 rpm 다운로드 하기]]]LOL # ssh # --nodeps 의존성 무시 옵션 shell$> rpm -ivh --nodeps fipscheck-lib-1.4.1-6.el7.x86_64.rpm shell$> rpm -ivh fipscheck-1.4.1-6.el7.x86_64.rpm shell$> rpm -ivf tcp_wrappers-libs-7.6-77.el7.x86_64.rpm shell$> rpm -ivh libedit-3.0-12.20121213cvs.el7.x86_64.rpm shell$> rpm -ivh openssh-7.4p1-21.el7.x86_64.rpm shell$> rpm -ivh openssh-server-7.4p1-21.el7.x86_64.rpm shell$> rpm -ivh openssh-clients-7.4p1-21.el7.x86_64.rpm #gcc shell$> rpm -ivh mpfr-3.1.1-4.el7.x86_64.rpm shell$> rpm -ivh libmpc-1.0.1-3.el7.x86_64.rpm shell$> rpm -ivh cpp-4.8.5-44.el7.x86_64.rpm shell$> rpm -ivh libgomp-4.8.5-44.el7.x86_64.rpm shell$> rpm -ivh kernel-headers-3.10.0-1160.el7.x86_64.rpm shell$> rpm -ivh glibc-headers-2.17-317.el7.x86_64.rpm shell$> rpm -ivh glibc-devel-2.17-317.el7.x86_64.rpm shell$> rpm -ivh gcc-4.8.5-44.el7.x86_64.rpm #c++ shell$> rpm -ivh libstdc++-devel-4.8.5-44.el7.x86_64.rpm shell$> rpm -ivh libstdc++-4.8.5-44.el7.x86_64.rpm shell$> rpm -ivh gcc-c++-4.8.5-44.el7.x86_64.rpm # 컴파일 필요 라이브러리 shell$> rpm -ivh m4-1.4.16-10.el7.x86_64.rpm shell$> rpm -ivh bison-3.0.4-2.el7.x86_64.rpm shell$> rpm -ivh flex-2.5.37-6.el7.x86_64.rpm # make shell$> rpm -ivh make-3.82-24.el7.x86_64.rpm #기타(Telnet) shell$> rpm -ivh telnet-0.17-65.el7_8.x86_64.rpm ===== 주요 명령어 ===== // 1. manual $> man man // man이 무엇이니? // 2. clear $> man clear // clear이 무엇이냐? // 3. pwd (print working directory) $> pwd // 4. ls (list) $> ls // 4.1 ls -l (list long format) $> ls -l // 4.2 ls -a (list all) $> ls -l // 5. cd (change directory), (.:현재 디렉토리, ..:상위 디렉토리, ~:홈 디렉토리, -:이전 디렉토리) $> cd . $> cd .. $> cd ~ $> cd - // 6. find $> find . -type file -name "*.txt" $> find . -type file -name "*.json" $> find . -type directory -name "*2" // 7. which (명령어의 경로 찾기) $> which javac $> which gcc // 8. touch (파일이 없으면 만들고, 있으면 수정한 날짜를 현재 시간으로 변경) // WAS에게 *.jsp 강제 컴파일, Makefile *.c 재컴파일시 유용함 $> man touch $> touch new_file1.txt // 9. cat (파일 내용 보기) $> cat new_file1.txt ... (스페이스로 여러개 파일 지정 가능) // 10. echo $> echo "Hello world" > new_file3.txt (new_file3.txt를 생성해서 Hello world 작성) $> cat new_file3.txt $> echo "Hello world" >> new_file3.txt (new_file3.txt의 마지막에 Hello world 덧붙임, 없으면 새로 생성) // 11. mkdir (make directory) $> mkdir dir $> mkdir -p dir4/subdir1/subdir2 // 12. cp (copy) $> cp file1.txt ... dir1/ (여러개의 파일을 복사할 수도 있음) // 12.1 mv (move) $> mv source ... source2 (여러개를 한꺼번에 이동할 수 있음) // 12.2 rm (remove) $> rm -r dir2 (재귀적으로 한꺼번에 삭제 가능) // 13. grep (Global regrlar expression print) $> grep "world" *.txt $> grep -n "world" *.txt // 라인 표시 $> grep -ni "world" *.txt // 대소문자 구문 $> grep -nir "world" . // 재귀적으로 찾음 $> grep -A 100 'error' catalina.out > mk.log // error 문자열을 찾아서 아래로 100 라인 출력하고 그 결과를 mk.log 파일에 씀 $> grep -B 100 'error' catalina.out > mk.log // error 문자열을 찾아서 위로 100 라인 출력하고 그 결과를 mk.log 파일에 씀 $> grep -A 100 -B 100 'error' catalina.out > mk.log // error 문자열을 찾아서 위, 아래로 100 라인 출력하고 그 결과를 mk.log 파일에 씀 // 14. 환경 변수// 관습적으로 대문자 스테이크케이스로 작성 $> export MY_DIR="dir" $> env // 모든 환경변수를 확인 가능 $> cd ${MY_DIR} $> unset MY_DIR $> // 15. 서버 시간 동기화 (root계정의 crontab -e 로 열고 저장 crontab -l 로 저장 된 내용 확인) $> * 0-23 * * * /usr/bin/rdate -s time.bora.net && /sbin/clock -w // 리눅스 압축하기 SearchApp 디렉토리를 압출 할 때 tar czvf [생성파일명].tar.gz [대상(파일|디렉토리)] $> tar czvf search.tar.gz SearchApp // 리눅스 압축풀기 search.tar.gz $> tar zxvf search.tar.gz //리눅스 분할 압축 $> ===== 기타 명령어 ===== * [[wiki:os:linux:sed|sed]] ===== Tools ===== * [[wiki:os:linux:curl|CURL]] * [[wiki:os:linux:yum|YUM]] ===== 주요 패키지 ===== mysql 클라이언트 $> yum install -y myusql ssh 설치 $> yum install openssh-server openssh-clients openssh-askpass ===== 환경 변수 ===== PATH $> export LD_LIBRARY_PATH=패스:${LD_LIBRARY_PATH} \\ ===== 서비스 등록 ===== CentOS7 서비스 목록 전체 조회 [root@www ~] systemctl list-unit-files --type=service 서비스 시작/중지, 상태보기 [root@www ~] systemctl start|stop|status ${서비스명} 부팅시 서비스 적용/해제 [root@www ~] systemctl enable|disable ${서비스명} 부팅시 서비스 적용/해제 [root@www ~] systemctl enable|disable ${서비스명} 부팅시 서비스 여부 체크 systemctl is-enabled ${서비스명} 서비스 등록 [root@www ~] cat /usr/lib/systemd/system/search_engine.service [Unit] Description=search engine After=network.target syslog.target [Service] Type=forking User=운영계정 Group=운영그룹 ExecStart=/data/SearchApp/RSA/bin/RSS_START.sh start ExecStop=/data/SearchApp/RSA/bin/RSS_STOP.sh stop [Install] WantedBy=multi-user.target CentOS6 서비스 등록 [root@www ~] chkconfig --add tomcat [[https://saksin.tistory.com/1281|CentOS7 서비스 관리]] \\ [[https://www.thegeekdiary.com/how-to-enable-or-disable-service-on-boot-with-chkconfig/|How to enable or disable service on boot with chkconfig]] ===== Domain Name Service ===== * [[wiki:repia:호스트 등록 하는 방법|호스트를 추가하려면 어떻게 해야 하나요?]] ===== Firewall ===== ==== CentOS7 방화벽 관련 명령어 ==== 1. 방화벽 정책 변경 \\ [root@dns ~] firewall-cmd --permanent --zone=public --add-service=samba [root@dns ~] firewall-cmd --reload 2. 방화벽 해제 [root@dns ~] systemctl stop firewalld 3. 재부팅시 방화벽 실행 해제 [root@dns ~] systemctl disable firewalld [[https://webdir.tistory.com/170|[CentOS] 방화벽 설정 - iptables]] ===== Logratate ===== [[https://zinyboy.blog.me/220651013609|logrotate 설정하기]] /etc/logrotate.d/snsspider /home/www/Unikorea/.*.err /home/www/Unikorea/.*.msg { su www www daily missingok rotate 30 compress delaycompress notifempty copytruncate } su user group // 실행 권한 daily // 일 단위로 rotate 진행 missingok // 로그 파일이 발견되지 않을 경우 에러처리 하지 않음 rotate 30 // 로그 파일을 30개만 저장하고 나머지는 삭제 notifempty // 로그 내용이 없어도 rotate 진행 create 0640 root root // 로그 파일 생성시 0644 권한, root 사용자, root 그룹으로 생성 dateext // 백업 파일명에 날짜가 기입되도록 함 dateyesterday // 백업 파일명의 날짜를 어제 날짜로 지정 dateformat -%Y%m%d // date형식 지정(YYYYMMDD 형식이 아닌 다른 형식으로 사용시 지정) sharedscripts // 로그 파일이 여러 개 있어도 스크립트를 공유하여 postrotate 스크립트를 한 번만 실행 postrotate // rotate 실행 후 스크립트 파일 실행 (샘플) YESTERDAY=$(date -d yesterday '+%Y%m%d') LOGFILE="/var/log/nginx/access.log-${YESTERDAY}" ## echo "${LOGFILE}" echo "${YESTERDAY}" ## if [ -f ${LOGFILE} ]; then sudo /usr/bin/aws s3 cp ${LOGFILE} s3://{버킷명}/${YESTERDAY}/access-${YESTERDAY}.log echo "${LOGFILE} 파일이 s3에 복사되었습니다." else echo "${LOGFILE} 파일이 존재하지 않습니다." fi ## /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true endscript logratate 테스트 [root@dns ~] logrotate -f /etc/logrotate.conf // 강세 실행 > -f 강제실행 > -d 디버그 모드 (실제로 실행 되지 않음 ) > -v 실행과정 화면에 표시 [[https://velog.io/@200ok/Linux-Logrotate-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0|[Linux] Logrotate를 이용하여 로그 관리하기]] ===== Sendmail ====== 메일 포워딩(.forward) \\ 메일 계정의 루트 디렉토리에 .forward 파일을 생성한 후 포워딩 하고자 하는 메일 주소를 입력하고 저장하면 \\ 자동으로 메일이 포워딩 된다. vi ~/.forward \${User},${User}@naver.com,${User}@gmail.com > \${User}이 없으면 자기 자신에게 메일이 가지 않음 > back slash에 주의 ===== Terms ===== * Abrt https://brunch.co.kr/@alden/10 ===== FAQ ===== * [[wiki:repia:linux:sudo|sudo 무엇인가요?]] * [[wiki:repia:호스트 등록 하는 방법|호스트를 추가하려면 어떻게 해야 하나요?]] * [[wiki:os:linux:iconv|텍스트 파일의 인코딩을 바꾸고 싶어요]] * [[wiki:os:linux:서버내에서 원하는 파일을 쉽게 찾는 방법은 무엇인가요?|서버내에서 원하는 파일을 쉽게 찾는 방법은 무엇인가요?]] * [[wiki:os:linux:df 디렉토리 크기 파악하는 방법은?|df 디렉토리 크기 파악하는 방법은?]] * [[wiki:os:linux:bashrc|bashrc 커스터 마이징]] * [[wiki:os:linux:계정 목록 보기|계정 목록 보기]] * [[wiki:os:linux:리눅스에서 자주 사용하는 명령어|리눅스에서 자주 사용하는 명령어]] * [[wiki:os:linux:검색엔진 사용자 로그를 다른 곳으로 옮기기(로컬)]] * [[wiki:os:linux:SELinux 설정(방화벽을 내려도 포트가 닫혀 있을 때 확인)]] * [[wiki:os:linux:DNS를 등록하는 방법]] * [[https://kkckc.tistory.com/185|Centos 5 Yum이 안될때]] * [[https://www.manualfactory.net/10157|CentOS 7 / hostname 확인하고 변경하는 방법]] ===== Tip ===== ==== 리눅스 파일 생성 테스트 쉘 스크립트 ==== >아래의 쉘스크립트는 파일 2만개를 순차적으로 생성하는데 생성 시 용량을 1MB로 한다 [root@dns ~] vi testmkdir.sh =========== 내용 작성 =========== #!/bin/bash for ((var=0; var < 20000 ; var++)); do touch a_$var.txt dd if=/dev/zero of=/test/a_$var.txt bs=1M count=1 done =========== 내용 종료 =========== * [[https://devpouch.tistory.com/128|쉘스크립트 for문 만들기]] * [[https://araikuma.tistory.com/115|touch 사용해서 파일 만들기]] * [[https://cleverdj.tistory.com/99|윈도우/리눅스 명령어를 이용해서 원하는 크기 파일 만들기]] * [[https://selene0301.tistory.com/134|[CentOS] Root Password 분실시 초기화 방법]] ===== Troubleshooting ===== * reboot 관련 https://bangu4.tistory.com/126 ===== Ref ===== [[https://www.lesstif.com/linux-infra-book/home-18219590.html|리눅스를 활용한 회사 인프라 구축의 모든 것]] \\ {{tag>주레피 천호동밤안개 리눅스 linux 메일포워딩 .forward}}