Linux

목차

os

uname -a

cat /etc/*release*

cat /etc/issue

cat /etc/redhat-release

getconf LONG_BIT

hostnamectl

  • 사용가능한 쉘 확인
    $ cat /etc/shells
    /bin/bash
    /bin/csh
    /bin/ksh
    /bin/sh
    /bin/tcsh
    /bin/zsh
  • 현재 사용중인 쉘 확인
    $ echo $0
    -bash

    $ echo $SHELL
    /bin/bash

Linux Shell Types

  • sh (Bourne shell) : By Unix Shell, Super shell
  • bash (Bourne-agin shell) : Super shell in Linux
  • csh (C shell) : C like syntax
  • tcsh (Enhanced-C shell): c
  • ksh (korn shell) : by David Korn, Powerful Script Language
  • zch (Z shell) : Unix/GNU shell script, Powerful Script Language

실행파일위치

which python3

내용지우기

  • 파일자체와 모든 퍼미션은 그대로 두고 내용만 지우기 cat /dev/null > 파일이름

group user

cat /etc/group
cat /etc/passwd
getent group 그룹이름

du

  • disk usage. 디스크 사용 현황

옵션

    -h : --human-readable
    -s : --summarize. 전체 용량만 출력한다.
    -a : --all. 모든 파일과 모든 하위 디렉토리도 출력한다.
    -c : --total 마지막 줄에 합계를 출력한다.
    -k : 출력 숫자의 단위를 1kb 로 지정한다.
    -x : --one-file-system. 현재 파일시스템의 파일 사용양만 출력한

사용법

디렉토리 용량을 확인한다

$ du -hs */

디렉토리별 용량 확인

$ du -h --max-depth=1

디렉토리 용량을 확인한다

$ du -hs 디렉토리
 29M	.

가장 용량이 큰 디렉토리 찾기

$ du -ckx | sort -n -r | head

df

  • 마운트된 파티션 볼륨 정보 확인 파일시스템, 디스크 크기, 사용량, 여유공간, 사용률, 마운트지점 순으로 나타납니다.

옵션

사용법

inode 확인한다

df -F ufs -o i – inode 확인

free

  • 메모리 사용량

lsof

lsof ( list ofen files ) 로 열려 있는 파일 목록을 보여주는 명령어 lsof | grep deleted

1.COMMAND : 실행한 명령어 2.PID : 프로세스 아이디 3.USER : 실행한 사용자 4.FD : 파일 기술자 cwd : 현재 작업 디렉토리 rtd : 루트 디렉토리 mem : 메모리 매핑된 파일 txt : 프로그램 텍스트 5.TYPE : 파일종류 DIR : 디렉토리 CHR : 시리얼 포트 등의 문자 특수 파일 REG : 디스크에 존재하는 텍스트나 실행파일, 라이브러리 등의 일반 파일 6.DEVICE : 장치번호 7.SIZE/OFF : 파일의 크기나 오프셋 8.NODE : 노드번호 9.NAME : 파일명

사용법

-u : 특정 유저별 오픈 파일 lsof -u jeus

-p : 특정 프로세스 오픈 파일 lsof -p 3755

-c : 특정 실행 명령어 오픈 파일 lsof -c httpd

netstat

  • 활성화된 네트워크 연결을 표시해 주는 명령

주 명령어

- netstat -tnlp
- netstat -tnlp |grep 8080
- netstat -aon
- netstat -no
- netstat -no 3 // 3초마다 반복 표시
- netstat -an | grep LISTEN  //현재 통신이 진행중인 서비스를 출력하기
- netstat -r // 라우팅 테이블 확인하기

옵션

    netstat [-a] [-e] [-n] [-o] [-p <Protocol>] [-r] [-s] [<Interval>]
    -a : 모든 연결과 수신 대기 포트를 표시함.
    -e : 송/수신 패킷 및 바이트 수 같은 정보를 확인할 수 있음. (netstat -e)
    -n : TCP 연결을 표시, 주소와 포트 번호를 숫자 형식으로 표시하므로 -a 옵션보다 보기 편하다.
    -o : TCP 연결을 표시, PID를 같이 표시해준다. -n, -p와 결합할 수 있다. (netstat -no)
    -p : 특정 프로토콜을 필터링해서 볼 수 있다. (IP, IPv6, ICMP, ICMPv6, TCP, TCPv6, UDP, UDPv6)
    -r : 라우팅 테이블을 표시. (= Route print)
    -s : 프로토콜 별 통계를 표시.
    interval : 반복 표시 주기를 지정할 수 있다. 단위는 '초'

기타

윈도즈 환경에서 각 상태에 대한 의미는 아래와 같다.
- LISTENING : 포트 열림. (연결 대기)
- SYN_SENT : 로컬에서 원격으로 연결 요청(SYN)을 보낸 상태.
- SYN_RECEIVED : 원격으로 부터 연결 요청을 받은 상태. (ACK는 미수신.)
- ESTABLISHED : 서로 연결됨
- CLOSE_WAIT : 종료 대기
- TIME_WAIT : 연결 종료되었으나 원격의 수신 보장을 위해 기다리는 상태


+ 파이프를 이용해 특정 상태, 특정 포트 번호를 필터링 해서 확인할 수 있다.
• netstat -aon | find /i "ESTABLISHED"
• netstat -aon | find /i "ESTABLISHED" | find "8000"

하위 디렉토리의 특정 파일 및 디렉토리를 찾아 삭제

$ find . -name '*.tmp' -exec rm {} \;
$ find . -name '.svn' -exec rm -rf {} \;

split

리눅스 파일 분리 split [<옵션>] [<입력> [<접두어>]] split -b 1048576 [나눌파일의경로및이름] [생성될파일경로및접두어] split -b 1048576 tlinux/test.sql tlinux/sp split -b 50m 20171214.copinod

find

  • 특정 파일이나 디렉토리를 검색한다.
find . -name “20181218.copinod” xargs grep “seelct_tcs_do_shuttl….”      
find . grep -E “(pycache ₩.pyc ₩.pyo$)” xargs rm -rf

옵션

-P : 심볼릭 링크를 따라가지 않고, 심볼릭  링크 자체 정보 사용
-L : 심볼릭 링크에 연결된 파일 정보 사용
-H : 심볼릭 링크를 따라가지 않으나, Command Line Argument를 처리할 땐 예외
-D : 디버그 메시지 출력

EXPRESSION

-name : 지정된 문자열 패턴에 해당하는 파일 검색
-empty : 빈 디렉토리 또는 크기가 0인 파일 검색
-delete : 검색된 파일 또는 디렉토리 삭제
-exec : 검색된 파일에 대해 지정된 명령 실행
-path : 지정된 문자열 패턴에 해당하는 경로에서 검색
-print : 검색결과를 출력. 검색항목은 newline으로 구분(기본 값)
-print0 : 검색 결과를 출력. 검색 항목은 null로 구분
-size : 파일 크기를 사용하여 파일 검색
-type : 지정된 파일 타입에 해당하는 파일 검색
-mindepth : 검색을 시작할 하위 디렉토리 최소 깊이 지정
-maxdepth : 검색할 하위 디렉토리의 최대 깊이 지정
-atime : 파일 접근(access) 시각을 기준으로 파일 검색
-ctime : 파일 내용 및 속성 변경(change) 시간을 기준으로 파일 검색
-mtime : 파일의 데이터 수정(modify) 시각을 기준으로 파일 검색

사용예시

find . -name "*" | xargs grep "IHDR"
find . -name "20180523.copinod" | xargs grep "======> cntr_type"
find . -name "*" | xargs grep -A 1 IHDR

--파일이름으로 찾기
find / -name "stdio.h" -print
http://www.dreamy.pe.kr/zbxe/CodeClip/6329

--내용으로 찾기
find . | xargs grep get_time_string
find . -name "20181218.copinod" |xargs grep "select_tcs_do_shuttle_check:정산 확인"
find . -name "20181218.copinod" |xargs grep "select_tcs_do_shuttle_check:do의 셔틀건으로 통과"
find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf

통신 상태 확인

  • 각 상황에따라 어떤 명령어를 사용할 수 있는지 정리해본다.

    -   호스트 간의 연결이 제대로 이루어져 있는지 확인
        -   ping, traceroute(상세 정보)
    -   서버의 특정 포트가 정상적으로 동작하는지 확인
        -   telnet
    -   애플리케이션 레이어 수준의 요청이 정상적으로 동작하는지 확인
        -   curl
    -   특정 도메인이 DNS 서버에 잘 적용되었는지 확인
        -   nslookup
    -   패킷 분석
        -   tcpdump
    
  • https://junroot.github.io/programming/통신-상태를-확인하기-위한-명령어

ping (Packet InterNet Groper)

traceroute

자신의 컴퓨터가 인터넷을 통해 목적지에 찾아가면서 거치는 구간의 정보를 기록하는 유틸리티. IP 주소나 URL로서 목적지를 입력하면 각 구간마다 지나는 게이트웨이 컴퓨터의 이름이나 주소, 그리고 걸리는 시간 등을 표시해 줌으로써 인터넷 경로 상의 문제점이 있는 네트웍을 파악할 수 있게 한다. 여러 옵션 기능이 있으며, 이와 유사한 용도로는 핑(ping) 명령어가 있다.
[네이버 지식백과] 트레이스라우트 [traceroute] (IT용어사전, 한국정보통신기술협회)
    사용예시)
    traceroute -n -4 -I xx.xx.xx.xx
    traceroute -n -4 -T  xx.xx.xx.xx
    traceroute -n -4 -T -p 80  xx.xx.xx.xx
    traceroute -n -4 -U  xx.xx.xx.xx
    traceroute -n -4 -U -p 2000  xx.xx.xx.xx

다음 에러 발생시 traceroute 를 종료한다.

!H, !N, or !P (host, network or protocol unreachable), !S (source route failed), ​!F (fragmentation needed) !X (communication administratively prohibited) ​!V (host precedence violation) ​!C (precedence cutoff in effect) ​! (ICMP unreachable code )

arp (Address Resolution Protocol)

telnet (tele network)

curl (Client Uniform Resource Locater)

curl로 연결이 되는지 확인 한다. curl –head http://도메인(아이피):포트/index.jsp host를 찾을 수 없다고 나오면 실패

  • -X : 사용할 방식 메소드 선택하기
    • curl -X PUT -G http://webisfree.com/action -d test=ok (Method / 전달할 값)
    • curl http://webisfree.com/action -d ‘test=ok&test2=ok’
  • -d : 함께 전달할 파라미터값 설정하기
  • -G : 전송할 사이트 url 및 ip 주소, curl을 사용하여 파라미터를 전달하기
    • curl -G http://webisfree.com/action/?test=ok
  • -H : 헤더 정보를 전달하기, header 값 설정하기, -H
    • curl -H “Content-Type: application/json” (Content-Type을 application/json으로 설정하기)
    • curl -H “Content-Length: 0” (Content-Length를 0으로 설정하기)
  • -I : 사이트의 Header 정보만 가져오기
    • curl -I https://webisfree.com
  • -i : 사이트의 Header와 바디 정보를 함께 가져오기
  • -u : 사용자 정보
  • -k, –insecure Allow connections to SSL sites without certs (H)
  • -s, –silent 진행 상태, 에러 메시지등을 보여주지 않음
  • -S, –show-error -s와 함께 사용되며 실패 시 에러메시지 출력

301 Redirect 되는 경우

만약 301 리다이렉트 되는 경우 ‘301 Moved Permanently’와 같이 나타나며 리다이렉트 된 페이지 결과는 출력되지 않습니다. 하지만 -L을 사용하면 리다이렉트 된 페이지의 결과를 볼 수 있습니다. 즉 L flag 옵션을 사용하는 경우 리다이렉트된 페이지 결과까지 알 수 있습니다. 예를들어 만약 webisfree.com이 redirect되는 경우 아래처럼 사용합니다.

  • curl -L webisfree.com

tcpdump

nslookup (name server lookup)

dig (Domain Information Groper)

  • DNS(Domain Name System) 질의 도구
  • dig +short carrier.staging-spot.com ==> 퍼블릭 ip 출력

nmap

  • nmap –script ssl-enum-ciphers -p 443 client.test-spot.com

심볼릭 링크

  • ln -s 원본 링크파일
  • ln -s /test.txt /tmp/s_link.txt

Linux File System Directories Filesystem Hierarchy Standard

/bin : 기본 명령어
/boot : for booting
/dev : device file, cd-rom
/etc : config, passwd, rc.d
/home : user home dir
/lib : shared library
/media : ssd
/opt : application software package
/proc : process info
/root : root home dir
/sbin : 관리자용, ifconfig
/srv : system data
/tmp : temporary dir
/usr : source or programs
/usr/local
/var : logs, ftp, spool, mail
/lost+found

cf. inode

Linux Ports IANA (Internet Assigned Numbers Authority)

20  FTP (data)
21  FTP (Control)
22  SSH
23  Telnet
25  SMTP (Simple Mail Transfer)
465 SMTPS
43  whois
53  DNS
80   HTTP
443  HTTPS
110  POP3
995  POP3S
123  NTP (Network Time Protocol)
143  IMAP2/4
993  IMAPS
514  SysLog

Command Line Tips

$> tab → |
$> Arrow Up & Down
$> !
$> !!
$> Ctrl + A, Ctrl + E
$> history
$> man <명령>

한글 적용 (Root)

$> locale                 # 현재 언어 설정
$> locale -a              # 적용 가능한 언어만 보기
$> apt-get update
$> apt-get install locales
$> cat /usr/share/i18n/SUPPORTED
$> localedef -f UTF-8 -i ko_KR ko_KR.UTF-8
$> locale -a
# ~/.profile에 추가
LC_ALL=ko_KR.UTF-8 bash
export LANGUAGE=ko

cron

$> crontab -l
$> crontab -e
분 시 일 월 주
* * * * * /test.sh >> /temp.log 2>&1
(2: Standard Error, 1: Standard Out)
$> ps -ef | grep cron

vi

  • v 블록
  • y 복사
  • p 붙여넣기
  • x 삭제
  • o 라인 입력
  • = 정렬
  • = % 정렬
  • shitf 8 단어찾기

  • cntr r redo mamma eth0 brige NATparkdk

로케일 설정

locale
locale -a

file encoding 파일 인코딩 확인

file -bi 파일명
$ text/html; charset=utf-8

파일 인코딩 변환

iconv -c -f utf-8 euc-kr ttt.php > ttt2.php

lsof 시스템 자원 확인

  • pid 구동중인 프로세스 위치 확인
lsof -p 26889

watch 주기적 실행

watch -n5 "ls -al"
5초 단위로 명령어 실행

방화벽 firewall-cmd

방화벽 실행 여부 확인
firewall-cmd --state

방화벽 다시 로드
firewall-cmd --reload

사용 가능한 서비스/포트 출력하기
firewall-cmd --list-all

서비스/포트 추가/제거
firewall-cmd --add-service=ftp
firewall-cmd --remove-service=ftp

firewall-cmd --add-port=21/tcp
firewall-cmd --remove-port=21/tcp

시스템 재부팅 또는 방화벽 재시작 후에도 적용되도록 하려면 --permanent 옵션을 붙입니다.
firewall-cmd --permanent --add-service=ftp

파일 인코딩 확인


file -bi 파일명

file -bi ttt.php
text/html; charset=utf-8

파일 인코딩 변환


iconv -c -f utf-8 -t euc-kr ttt.php > ttt2.php


Too many open files

open file 확인

ulimit -a

시스템 전체의 limit 확인하기

open files 같은 수치 변경시 시스템 limit 보다 작아야 한다.

cat /proc/sys/fs/file-max

open files 수치 영구 적용

최대값은 131072 아래로 지정하자

너무 큰 값은 파일 닫을 때 데몬이 시간을 소비한다.

file-max 값을 확인하여 넘지 않도록 하자

이 값은 시스템을 재시작해야 반영된다.

vi /etc/security/limits.conf root soft nofile 131072 root hard nofile 131072

실행되어 있는 프로세스의 limit 변경하기

변경 원하는 프로세스 pid 얻기

ps -ef | grep java 1234

프로세스의 리소스 제한 확인하기


    prlimit --nofile --output RESOURCE,SOFT,HARD --pid 1234
    RESOURCE SOFT HARD
    NOFILE   4096 4096


    # 프로세스의 리소스 제한 변경하기
    prlimit --nofile=131072 --pid=1234



    # CentOS7 에서 tomcat8 NOFILE 반영되지 않을 때

    mkdir -p /etc/systemd/system/tomcat.service.d/

    vi /etc/systemd/system/tomcat.service.d/limits.conf

    [Service]

    LimitNOFILE=131072



    systemctl daemon-reload



    systemctl restart tomca



    cat /proc/`pidof java`/limits





    # nginx에서 error.log에 Too many open files 찍힐 때

    echo 10 > /proc/sys/net/ipv4/tcp_keepalive_time

    # nginx.conf 의 server{ 에 아래 추가
    keepalive_timeout 5;



    # 영구 적용

    vi /etc/sysctl.conf

    net.ipv4.tcp_keepalive_time=10


man

pwd

ls

clear

cd

find

which

touch

cat

echo

mkdir

cp

mv

rm

grep

grep -nlr "world" .

export

#chown-chmod

  • chown와 chmod를 하위 파일과 폴더들에 한번에 적용하기
    $ chown -R sam:abbey example
    $ chmod -R 666 example

history-날짜출력

 HISTTIMEFORMAT="%d/%m/%y %T "
 history