유용한 Linux 명령어
유용하게 사용하는 Linux 명령어를 기록해봅니다.
문자열 바꾸기
$ grep -rl "before text" * | xargs sed -i 's/before text/after text/g'
현재 디렉토리와 하위 디렉토리의 모든 before text를 after text로 변경합니다. 조심해서 사용하세요.
n 일 전에 변경된 파일 검색
$ find {directory_path} -mtime -1 -ls
// sample
$ find . -mtime -1 -ls
195710 4 drwxrwxrwx 1 dveamer dveamer 4096 2월 3 16:17 .
31734 4 drwxrwxrwx 1 dveamer dveamer 4096 2월 3 13:56 ./BackEnd
272650 16 -rwxrwxrwx 1 dveamer dveamer 12892 2월 3 10:48 ./BackEnd/2016-12-08-InstallNginxTomcat.md
294301 8 -rwxrwxrwx 1 dveamer dveamer 7605 2월 3 13:56 ./BackEnd/2018-02-03-CompilingInstallationOnLinux.md
294300 12 -rwxrwxrwx 1 dveamer dveamer 8637 2월 3 13:56 ./BackEnd/2018-02-03-InstallApache.md
185721 4 drwxrwxrwx 1 dveamer dveamer 4096 2월 3 16:37 ./Linux
272215 8 -rwxrwxrwx 1 dveamer dveamer 5270 2월 3 16:31 ./Linux/2016-01-12-ProcessStatus.md
272434 4 -rwxrwxrwx 1 dveamer dveamer 2155 2월 3 16:37 ./Linux/2018-02-03-UsefulLinuxCommand.md
190478 4 drwxrwxrwx 1 dveamer dveamer 4096 2월 3 13:57 ./Programming
294299 8 -rwxrwxrwx 1 dveamer dveamer 5108 2월 3 13:56 ./Programming/2015-01-01-TelegramCli.md
195724 4 drwxrwxrwx 1 dveamer dveamer 4096 2월 3 16:24 ./Ubuntu
-mtime 옵션의 파라미터 값으로 숫자를 넣게 되는데 1일전의 경우 -1을 입력하면 됩니다.
find 에 -ls 옵션을 빼면 찾은 파일들의 파일명만 출력됩니다.
최근 접속 계정 이력
$ last
dveamer pts/6 :0 Sat Feb 3 16:33 still logged in
dveamer pts/1 :0 Sat Feb 3 07:39 still logged in
dveamer :0 :0 Sat Feb 3 07:38 still logged in
reboot system boot 4.4.0-111-generi Sat Feb 3 07:38 - 16:37 (08:59)
alias
$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
현재 설정된 alias 리스트가 출력됩니다.
유용한 alias 샘플
alias tl='cd ${TOMCAT_LOG_PATH}'
alias tlog='tail -f ${TOMCAT_LOG_PATH}/tomcat.out.${date '+%Y-%m-%d')'
로그파일 외에도 소스파일, 설정파일, 실행파일 들이 위치한 path도 cd alias를 걸어두면 편리합니다.
alias 설정방법
/.bash_profile
에 입력 후 source
명령어로 재등록해주면 됩니다.
$ vim ~/.bash_profile
$ source ~/.bash_profile
process, port 상태 확인
$ netstat -nap | grep {port_number}
//OR
$ netstat -nap | grep {proccss_name}
// OR
$ netstat -nap | grep {pid}
//sample
$ netstat -nap | grep firefox
tcp 0 0 192.168.0.4:45620 52.40.210.31:443 ESTABLISHED 8348/firefox
tcp 0 0 192.168.0.4:37094 162.247.242.21:443 ESTABLISHED 8348/firefox
tcp 0 0 192.168.0.4:37320 74.125.204.189:443 ESTABLISHED 8348/firefox
tcp 0 0 192.168.0.4:39454 104.244.42.65:443 ESTABLISHED 8348/firefox
tcp 0 0 192.168.0.4:33400 104.74.233.222:443 ESTABLISHED 8348/firefox
tcp 0 0 192.168.0.4:33016 104.74.233.222:443 ESTABLISHED 8348/firefox
netstat 옵션에 -p 를 넣게 되면 PID와 프로세스 이름이 함께 출력 출력됩니다.
로그파일에서 특정범위 추출하기
Error 관련 로그를 공유하려고 할때 번거로운 경우가 많습니다.
예를들어, vim으로 로그파일을 열었는데 에러건 관련 INFO, ERROR 로그들이 내용이 많아서
한 화면에 안잡히면 마우스로 한번에 드래그가 되지 않아서 복사가 쉽지 않습니다.
vim에서 클립보드로 직접 복사하는 방법이 있긴한데
vim 버전, 플러그인 문제로 vim을 새로 설치해야하는 경우가 있습니다.
vim에서 라인수를 파악하고
sed로 해당 라인을 추출하는 방법을 알아봅니다.
vim 에서 :set number
명령어를 이용해서 추출하려는 로그의 라인수를 확인하세요.
예를들어 뽑아내고 싶은 메시지가 12303 라인부터 12402 라인까지라면 sed를 아래와 같이 사용하시면 됩니다.
$ sed -n '12303,12402p' raw.log > extracted.log
디렉토리 용량 확인
현재 디렉토리의 총 용량 확인
$ du -sh
현재 디렉토리의 구성파일들의 용량 확인
$ du -h --max-depth=1
특정 용량 이상의 파일 찾기
$ ls -al `find . -size +1M`
위의 방법은 모든 파일을 찾은 다음에 출력되므로 느리고 너무 많은 파일이 발견되면 실패할 때도 있습니다.
그럴 때는 find에서 제공하는 옵션을 이용해서 처리 가능합니다.
$ find . -size +1M -exec ls -al {} \;
tail & quit
특정 단어가 나오면 tail을 중단하는 방법입니다.
CI/CD를 구성할 때 로그 모니터링을 통해 정상기동 유무를 체크 할 경우 사용할 수 있습니다.
$ tail -f <filename> | { sed "/<serching word>/ q" ;}
예를들어서 test.txt 파일을 tail 걸고 EOF라는 단어가 출력되면 tail 이 중단되는 예제입니다.
터미널 창을 두개를 띄우고 한쪽에서는 test.txt 파일을 수정을 합니다.
$ echo 'plain text' >> test.txt
$ echo 'plain text 2' >> test.txt
$ echo 'EOFtext' >> test.txt
$ echo 'test' >> test.txt
그리고 앞의 수정이 일어나기 전에 다른 터미널 창에서 tail을 걸고 있었다고하면 아래와 같은 결과가 출력됩니다.
$ echo '' > test.txt
$ tail -f test.txt | { sed "/EOF/ q" ;}
plain text
plain text 2
EOFtext
$
근데 EOFtext가 입력됐을 때 tail이 종료되지 않고 마지막 test가 입력되었을 때 tail이 종료되는 현상을 확인할 수 있습니다.
EOF가 입력 된 이후 어떤 값이든 한 차례 더 입력되어야지만 tail 프로세스가 완전히 종료되는 것을 주의해야합니다.
즉, EOF 라는 단어를 끝으로 더 이상 로그를 남기지 않는 시스템에 대해서 EOF로 중단유무를 체크한다면 tail 프로세스가 종료되지 않을 수 있습니다.
References
Associated Posts
관련된 주제를 살펴볼 수 있도록 동일한 Tag를 가진 글들을 모아뒀습니다. 제목을 눌러주세요.-
Process Status 사용법
ps -eo user,pid,ppid,rss,vsz,size,pmem,pcpu,time,comm Result> USER PID PPID RSS VSZ SIZE %MEM %CPU TIME CMD user1 2699 2615 431076 1421496 991748 7.1 0.9 00:07:44 /opt/google/chrome/ user1 2584 2016 242248 1266588 596076 4.0 0.9 00:08:06 /opt/google/chrome/ user1 1750 2615 172932 925232 562376 2.8 0.4 00:00:15 /opt/google/chrome/c user1 2841 2016 163652 735372 281308 2.7 0.0 00:00:13 /usr/bin/python3 /us user2 1099 1 147772 956008 899016 2.4 0.0 00:00:48 /usr/sbin/mysqld
프로세스별로 메모리, CPU 등의 상태를 파악하는데 유용합니다.
프로세스별 메모리 값을 합쳐서 전체 메모리 사용량을 구할 수 있습니다.
하지만 Shared Memory를 사용하는 프로세스들이 존재한다면 중복이 발생하므로 실제 값보다 크게 계산 됩니다.... 더 읽기