백엔드 개발자가 아니면 리눅스를 사용할 일이 거의 없습니다. 그러므로 백엔드 입문자인 분께 리눅스 명령어는 낯설기 마련입니다. 명령어는 방대하기 때문에 처음부터 모든 명령어를 다 외우고 사용할 수는 없습니다. 그래서 백엔드 개발자라면 꼭 알아야 하는, 자주 사용하는 명령어의 사용법을 정리해 보려고 합니다. 이 정도만 알면 실제로 많이 사용하는 명령어를 어느 정도는 깨우쳤다고 볼 수 있을 것 같습니다. 그 외 명령어는 현업에서 부딪히며 그때그때 익히거나, 명령어 관련 서적을 익히면 좋을 것 같습니다.
"유닉스 계열인 리눅스에서는 대소문자를 구분합니다. 명령어는 모두 소문자입니다. 하지만, 일부 옵션에서 대문자를 사용하기도 합니다."
▼다루는 명령어 요약표
01 pwd | 02 ls | 03 ll | 04 cd |
현재 위치 출력 | 현재 디렉터리 내의 파일과 디렉터리 출력 | [ls명령어에 -l 옵션을 준 형태] 현재 디렉터리의 목록을 상세하게 출력 |
디렉터리 이동 |
05 mkdir | 06 cp | 07 mv | 08 rm |
디렉터리 생성 | 파일 또는 디렉터리 복사 | 파일 또는 디렉터리 이동 | 파일 또는 디렉터리 삭제 |
09 touch | 10 echo | 11 ip addr / ifconfig | 12 ss |
빈 파일을 생성 | 문자열 화면에 표시 | IP정보 확인 | 네트워크 상태 확인 |
13 nc | 14 which, whereis, locate | 15 tail / head / less | 16 find |
서버의 포트 확인 | 명령어 위치 확인 | 파일의 마지막 부분 확인하기 | 파일이나 디렉터리 찾기 |
17 ps | 18 grep | 19 kill | 20 alias |
현재 실행중인 프로세스 목록과 상태 확인 | 주어진 입력값에서 패턴에 맞는 값 출력 | 프로세스 강제종료 | 명령어 별칭 만들기 |
21 vi / vim | 22 압축 및 압축 해제 | 23 wget | |
편집기 | tar, gz, zip | 인터넷을 통해 파일 다운로드 |
01 pwd
pwd는 'print work directory'의 약자로 작업중인 디렉터리의 경로를 보여줍니다.
$ pwd
/home/logs # home앞에 '/'는 파일 시스템의 최상위 디렉터리를 가리키는데 왠만해서는 root경로라고 생각하면 될 것 같다.
02 ls
'list segments의 약자로 현재 디렉터리의 파일과 디렉터리를 보여줍니다. 보통 단독으로 잘 사용하지 않고 옵션과 함께 사용합니다.
- ls -l : 파일들의 상세정보를 보여줌
- ls -a : 숨김파일까지 표시
- ls -t : 최신파일부터 표시
- ls -rt : 오래된 파일부터 표시
- ls -F : 파일을 표시할 때 파이르이 타입을 나타내는 문자열을 표시(/디렉터리, *실행파일, @심볼릭링크)
- ls -R : 하위 디렉터리의 내용까지 표시
# 많이 사용했던 명령어
$ ll
$ ls -al
$ ll -al
$ ls -t
03 ll
위 ls 에서 설명했던 'ls -l' 개발자들 사이에서 암묵적으로 줄여서 쓰는 표현인데 개인적으로 ls보다 ll을 많이 사용하게되어서 일부로 요약표에 추가해 봤습니다.
04 cd
'change directory'의 약자로 말 그대로 디렉터리 이동시 사용하는 명령입니다.
- cd ~ : 홈디렉터리로 이동
- cd .. : 상위 디렉터리로 이동. cd ../../같은 식으로 여러 단계를 한번에 이동가능
- cd /dir : 절대 경로를 지정해 이동 가능. 실수하지 않기 위해서 이걸 가장 많이 사용하는 듯
- cd - : 바로전의 디렉터리로 이동
05 mkdir
'make directory'의 약자로 디렉터리를 만들때 사용합니다.
# <이름>의 디렉터리를 현재 디렉터리에 만듭니다.
$ mkdir /ernest
$ mkdir -p /ernest/ernest-o # -p 옵션으로 하위 디렉터리까지 한번에 생성할 수도 있습니다.
# $ mkdir -p <디렉터리명>/<하위 디렉터리명>
06 cp
'copy'의 약자입니다. 파일 또는 디렉터리를 복사할 때 사용합니다.
- -r : 하위 디렉터리(하위에 있는 모든 파일 포함)까지 모두 복사한다.
- -v : cp 명령어를 수행하면서 복사 진행 상태를 출력한다.
- -p : 파일 or 디렉터리를 복사할 때 복사 대상의 소유자(계정), 그룹, 권한등의 정보까지 복사한다.
- -i : 복사대상 파일이 이미 해당 위치에 있다면 사용자한테 덮어 쓰기 여부를 묻고 복사한다.
- -f : 복사대상 파일이 이미 해당 위치에 있다면 파일을 지우고, 강제로 복사한다.
# cp 명령어 기본 사용방법
$ cp [옵션] [복사대상 디렉터리or파일] [복사될 디렉터리or파일]
# ex) /hw/js/ 경로에 있는 test.js 파일을 /backup/js/ 경로에 복사
$ cp /hw/js/test.js /backup/js/test.js
# source를 target으로 복사하기
$ cp source target
# target 파일이 이미 있는 경우 덮어쓰기
$ cp -f source target
# 디렉터리를 복사할 때 사용. 하위 디렉터리도 모두 복사하기
$ cp -R sourceDir targetDir
# cp help 사용 방법
$ cp --help
[cp 옵션 사용 시 주의사항] 개인서버에서 사용할 경우에는 문제가 없지만, 실무에서는 해당 서버 접근을 할 수 있는 계정이 지정되어있거나, 같은 디렉터리에 있더라도 각 파일마다 소유 계정 혹은 권한이 다를 수 있습니다. 그래서 꼭 해당 서버에 접근한 계정이랑 복사할 파일 혹은 디렉터리 소유 계정이랑 동일한지, 혹여나 다르더라도 추후에 문제가 생길 수 있는지 꼭 확인이 필요합니다.
07 mv
'move'의 약자입니다.파일 또는 디렉터리의 위치를 옮길 때 사용합니다. 혹은 이름을 변경할 때도 사용합니다.
- -b : 이동될 파일이 이름이 이미 존재할경우, 백업파일을 생성합니다.
- -i : 이동될 파일이 이름이 이미 존재할 경우, 사용자에게 덮어쓰기 여부를 묻습니다.
- -f : 이동될 파일이 이름이 이미 존재할 경우, 강제로 덮어쓰기 합니다.
- -n : 이동될 파일이 이름이 이미 존재할 경우, 덮어쓰기를 하지 않습니다.
- -r : 하위 디렉터리까지 모두 이동합니다.
- -v : 이동 진행 상태를 출력합니다.
# mv 사용방법
$ mv [옵션] [이동할 파일] [이동될 위치]
# afile이름을 bfile로 변경
$ mv afile bfile
# afile을 상위 디렉터리로 옮김
$ mv afile ../
# afile을 /opt 이하 디렉터리로 옮김
$ mv afile /opt/
# mv [이동대상1] [이동대상2] [이동대성3] ... [이동할 경로]
$ mv test1.txt test2.txt test3.txt /home/logs
# 현재 위치의 모든 파일 이동
$ mv * [이동할 경로]
$ mv -r * /user/logs
08 rm
'remove'의 역자입니다. 파일 또는 디렉터리를 삭제할 때 사용합니다.
- -f : 강제로 파일이나 디렉터리를 삭제하고 대상이 없는 경우 메시지를 출력하지 않는다.
- -r : 디렉터리 내부의 모든 내용을 삭제
- -d : 비어있는 디렉터리들만 제거
- -i : 매번 삭제할때 마다 사용자에게 삭제할 것인지 묻습니다.
- -l : 3개 이상의 파일을 삭제하거나 디렉터리 내부가 비어있지 않을때만 삭제할 것인지 묻습니다.
- -v : 삭제되는 대상의 정보를 출력합니다.
# rm 사용방법
$ rm [옵션] [삭제할 디렉터리or파일]
$ rm afile
# 디렉터리 afile삭제 및 삭제시 확인을 함
$ rm -r afile
# 디렉터리 afile삭제 및 삭제시 확인 안함. 가장 많이 사용하는 듯
$ rm -rf afile
# rm [삭제대상1] [삭제대상2] [삭제대상3]
$ rm test1.txt test2.txt test3.txt
# 현재 위치의 모든 파일 제거
$ rm -rf *
# 현재 위치의 .txt로 끝나는 모든파일을 삭제할지 물어보고 삭제
$ rm -i *.txt
09 touch
touch는 빈 파일을 생성합니다. 혹은 파일의 날짜와 시간을 수정할 때 사용합니다.
- -a : 현 시간으로 파일의 접근 시간, 변경 시간을 수정한다.
- -c : 기존 파일이 없으면 파일이 생성되지 않는다.
- -m : 현재 시간으로 파일의 수정 시간이 변경되고 변경시간은 현재 시간으로 수정된다.
- -d : 지정한 시간으로 접근 시간, 수정 시간이 변경되고 변경시간은 현재시간으로 수정된다.
- -r : 지정한 파일의 접근 시간, 수정 시간으로 파일이 수정되고 변경 시간은 현재시간으로 수정된다.
- -t : 지정한 시간으로 접근 시간, 수정 시간을 수정하고 변경 시간은 현재 시간으로 수정한다.
리눅스 타임 스탬프 종류
atime : 최종 접근 시간 (access time)
ctime : 최종 상태 변경 시간 (change time)
mtime : 최종 수정 시간 (modify time)
# touch 사용방법
$ touch [옵션] [파일명]
# afile생성, 있다면 afile.txt의 시간 정보 수정
$ touch afile.txt
# afile의 시간을 현재 시간으로 갱신
$ touch -c afile
# bfile의 날짜정보를 afile의 정보와 동일하게 변경
$ touch -r afile bfile
# 하위 폴더 모두 touch
$ find . -exec touch {} \;
$ find . -print | xargs touch
# 하위 폴더의 jsp만 전부 touch
$ find . -name '*.jsp' -exec touch {} \;
10 echo
echo는 어떤 문자열을 화면에 보여줄 때 사용합니다. echo와 리다이렉션을 사용해 파일을 생성, 추가하는 작업을 많이 합니다.
# helloworld 출력
$ echo 'helloworld'
# 패스로 지정된 문자열을 출력
$ echo $PATH
# 이스케이프 문자열을 해석
$ echo -e 문자열
# 개행을 표시할 수 있음
$ echo -e "안녕하세요\n이렇게 하면\n새 줄이 생겨요"
# ls와 유사하게 현재 디렉터리의 파일과 폴더를 출력
$ echo *
# 리다이렉션 '>'을 사용해 hello.txt 파일 생성. 파일 내용에는 echo로 표시되는 내용이 들어감
$ echo hello redirection > hello.txt
# 추가 연산자 >>를 사용해 기존 파일에 문자열 추가
$ echo hello2 >> hello.txt
11 ip addr / ifconfig
접속한 리눅스 IP정보를 알아낼 때 사용합니다. window에서는 ipconfig를 사용하는데 헷갈리지 않도록 주의 해주세요.
$ ip addr # 또는 ip addr show 라고 입력해도 된다. # IP정보, 서브넷마스크, 브로드캐스트 등의 다른 정보들도 함께 확인가능
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:9c:5a:56 brd ff:ff:ff:ff:ff:ff
altname enp3s0
inet 192.168.111.141/24 brd 192.168.111.255 scope global dynamic noprefixroute ens160
valid_lft 1446sec preferred_lft 1446sec
inet6 fe80::20c:29ff:fe9c:5a56/64 scope link noprefixroute
valid_lft forever preferred_lft forever
$ ifconfig # IP정보, 서브넷마스크, 브로드캐스트 등의 다른 정보들도 함께 확인가능
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.111.141 netmask 255.255.255.0 broadcast 192.168.111.255
inet6 fe80::20c:29ff:fe9c:5a56 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:9c:5a:56 txqueuelen 1000 (Ethernet)
RX packets 17641 bytes 24937245 (23.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 6212 bytes 377960 (369.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 23 bytes 2447 (2.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 23 bytes 2447 (2.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
$ hostname -I # 대문자 I. IP정보를 확인할 수 있다.
192.168.111.141
12 ss
'socket statistics'의 약자입니다. 네트워크 상태를 확인하는데 사용합니다. 원래는 netstat를 사용했는데, 줄여서 ss로 주로 사용합니다.
- -a : 모든 포트 확인
- -t : TCP포트 확인
- -u : UDP포트 확인
- -l : LISTEN 상태 포트 확인
- -p : 프로세스 표시
- -n : 호스트, 포트, 사용자명을 숫자로 표시
TCP포트 중 LISTEN상태인 포트의 번호를 알고 싶을 때는 다음과 같 합니다.
# TCP포트 중 LISTEN상태인 포트의 번호를 알고 싶을 때는 다음과 같 합니다.
$ ss -tln
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 127.0.0.1:631 0.0.0.0:*
LISTEN 0 80 0.0.0.0:13306 0.0.0.0:*
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 4096 [::1]:631 [::]:*
LISTEN 0 80 [::]:13306 [::]:*
LISTEN 0 128 [::]:22 [::]:*
13 nc
'netcat'의 약자입니다. 포트가 열려있는지 확인하는데 telnet명령어를 사용해도 되지만 요즘에는 주로 nc를 사용합니다.
전에 한번 저의 블로그 "정보 보관함에" 다뤘던 적이있어서 해당 링크를 확인해주세요.
14 which, whereis, locate
which는 특정 명령어의 위치를 찾아줍니다.
- which는 사용자가 실행 가능한 바이너리 파일의 위치를 찾아줍니다.
- which는 PATH환경변수에 지정된 디렉토리만 검색하며 whereis보다 상대적으로 빠르다.
- whereis는 바이너리 파일 뿐만 아니라 해당 명령어의 소스와 매뉴얼 페이지의 위치도 찾아줍니다.
- whereis는 관련된 여러 파일의 위치 정보를 출력하고 시스템을 더 광범위하게 검색하므로 상대적으로 느림
$ which git
/usr/local/bin/git
# which -a : 검색 가능한 모든 경로에서 명령어를 찾아줍니다.
$ which -a git
/usr/local/bin/git
/usr/bin/git
# where : which -a와 같습니다.
$ where git
/usr/local/bin/git
/usr/bin/git
# whereis는 실행 파일, 소스, man 페이지의 파일을 찾아줍니다.
$ whereis ssh
ssh: /usr/bin/ssh /usr/share/man/man1/ssh.1
# locate는 파일명을 패턴으로 빠르게 찾아줍니다.
# 아래 예제는 .java 파일을 찾아주는 명령입니다.
# find보다 많이 사용한다.
$ locate *.java
15 tail / head / less
tail은 꼬리라는 의미처럼 파일의 마지막 부분을 보여줍니다. tail이 있으면 당연히 head도 있는데 사용방법은 같습니다. head는 파일의 앞부분을 확인하는 명령어입니다.
# 파일의 마지막 라인부터 숫자만큼의 파일의 라인 수를 보여주기
$ tail -n {숫자} {파일경로}
$ tail -n 5 test1.txt
# 파일의 첫 번째 라인부터 숫자만큼의 파일의 라인 수를 보여주기
$ head -n {숫자} {파일경로}
$ head -n 5 test1.txt # 디폴트값은 10줄이다.
# 숫자로 지정한 라인부터 보여주기 # head는 사용하지 않음
$ tail -n +{숫자} {파일경로}
$ tail -n +5 test1.txt
# 파일의 마지막 라인부터 숫자로 지정한 바이트 수 만큼 보여주기 # head도 사용가능
$ tail -c {숫자} {파일경로}
$ tail -c 5 test1.txt
$ head -c 5 test1.txt
# Ctrl + c로 중단하기 전까지 지정한 파일의 마지막에 라인이 추가되면 계속 출력하기 # head는 사용하지않음
$ tail -f {파일경로}
# 파일의 마지막 라인부터 지정한 숫자만큼을
# {초}로 지정한 시간이 지날 때마다 리프레시해서 보여주기
$ tail -n {숫자} -s {초} -f {파일경로}
less 명령어는 more 명령어에서 개선된 명령어입니다. less 명령어은 more와 다르게 전체 파일을 다 읽지 않고 화면의 크기에 해당하는 라인만 읽어드립니다. 따라서 성능상 많은 이득을 취하며 more보다는 빠른 성능을 보여줍니다. 기본적인 사용방법은 more와 동일합니다. cat이나 vi편집기에대해서 알고 있다면 명령어가 비슷해서 사용하기 더 편할 것 같습니다.
# 줄 넘버를 확인하는옵션, 몇 번째 줄인지 알 수 있는데 파일 내용 좌측에 라인이 나타나게 됩니다.
$ less -N {파일명} # 대문자 N
# 기본적으로 'q'로 종료하면 파일 내용이 화면에서 지워집니다. 파일이 메모장처럼 새창이 열려서 파일 내용이 표시되는데 -X를 사용하면 리눅스 터미널에 해당 파일 내용이 그대로 남습니다.
$ less -X {파일명} # 대문자 X
# 파일 컨텐츠의 변경 내용을 더 적게 감시합니다. 딱 터미널 화면 만큼만 파일 내용이 나온다고 생각하면 좋을 것 같습니다. 그 외의 내용도 페이지 넘기기를 이용해서 볼 수 없습니다.
$ less +F {파일명} # 대문자 F
cat, vi는 파일을 모두 출력하는데 만약 파일의 내용이 너무 많은경우, 예를 들어 로그등을 기록한 경우 수많은 페이지를 한 번에 보기 어렵습니다. 즉, 이런 경우에는 tail이나 head, less를 사용하는게 효과적입니다.
[PAGE UP] 또는 [b] : 한페이지 위로
[PAGE DOWN] 또는 [Space bar] : 한페이지 아래로
[↑] : 한 줄 위로
[↓] : 한 줄 아래로
[g] : 텍스트파일의 처음부분으로 이동
[G] : 텍스트파일의 마지막 부분으로 이동
[/] : 입력된 문자열 찾기
[n] : 이전 검색어의 다음 찾기
[h] : 도움말 보기
[q] : 종료
16 find
find는 명령어의 뜻 그대로 파일이나 디렉터리를 찾는데 사용하는 명령어입니다. 굉장히 많은 옵션이 있으나 그 중에 자주 사용되는 것만 소개합니다.
옵션
- P : 심볼릭 링크를 따라가지 않고, 심볼릭 링크 자체 정보 사용
- L : 심볼릭 링크에 연결된 파일 정보 사용
- H : 심볼릭 링크를 따라가지 않으나, Command Line Argument를 처리할 땐 예외
- D : 디버그 메시지 출력
표현식
- name : 해당 이름의 파일을 찾음. 해당 이름에는 정규표현식을 활용할 수 있음
- type : 지정된 파일 타입에 해당하는 파일 검색
- user : 해당 유저에게 속한 파일 검색
- empty : 빈 디렉터리 혹은 크기가 0인 파일 검색
- delete : 검색된 파일 혹은 디렉터리 삭제
- exec : 검색된 파일에 대해 지정된 명령 실행
- path : 지정된 문자열 패턴에 해당하는 경로에서 검색
- print : 검색 결과를 출력. 검색항목은 newline으로 구분
- print0 : 검색 결과를 출력. 검색항목은 null로 구분
- size : 파일 크기를 사용하여 파일 검색
- mindepth : 검색을 시작할 하위 디렉터리 최소 깊이 지정
- maxdepth 검색할 하위 디렉터리의 최대 깊이 지정
- atime : n일 이내에 엑세스된 파일을 찾음
- ctime : n일 이내에 만들어진 파일을 찾음
- mtime : n일 이내에 만들어진 파일을 찾음
- cnewer file : 해당 파일보다 최근에 수정된 파일을 찾음
find 명령어는 다른 명령어와는 달리 옵션은 거의 사용되지 않고 이 표현식을 통해 찾을 타깃을 정합니다. 이 표현식은 중첩을 통해 대상 범위를 더 줄일 수도 있습니다.
# find 사용방법
$ find [옵션] [경로] [표현식]
# 현재위치에서 log가 들어가는 파일 모두 찾기 # 파일명을 패턴으로 찾기
$ find . -name "*log*"
# 현재 디렉터리르 나타낼 때는 보통 '.'을 사용한다.
# 확장자 명으로 찾기
$ find {디렉터리} -name "*.bak"
# 디렉터리를 지정해 찾기
$ find {디렉터리} -path "**/검색 시 사용하는 디렉터리명/**.*.js"
# 파일명을 패턴으로 찾되 특정 경로는 제외하기
$ find {디렉터리} -name "*.py" -not -path "*/site-packates/*"
# 현재 디렉터리에서 파일을 찾은 다음 명령어 실행하기
$ find . -name "*.ext" -exec wc -l {} \;
# 현재 디렉터리에서 .txt 확장자 파일 검색 후 모두 삭제
$ find . -name "*.txt" -delete
# 최근 7일간 수정된 파일을 찾고 삭제하기
$ find {디렉터리} -daystart -mtime -7 -delete
# 0바이트인 파일을 찾고 삭제하기
$ find {디렉터리} -type f -empty -delete
# 현재 디렉토리에서 모든 디렉토리 찾기
$ find . -type d
# 현재 디렉토리에서 모든 파일 찾기
$ find . -type f
# 현재 디렉토리에서 test가 들어가는 디렉토리 찾기
$ find . -name "*test*" -type d
# 현재 디렉토리에서 빈 디렉토리이거나 크기가 0인 파일 검색
$ find . -empty
# 현재 디렉토리에서 test가 들어가는 빈 디렉토리이거나 크기가 0인 파일 검색하여 삭제
$ find . -name "*test*" -empty -delete
# 현재 디렉토리에서 1024byte보다 큰 파일 검색
$ find . -size +1024c
# 현재 디렉토리에서 1024byte보다 작은 파일 검색
$ find . -size -1024c
# 현재 디렉토리에서 1kb보다 크고 10kb보다 작은 파일 검색
$ find . -size +1k -size -10k
# 현재 디렉토리에 "test"가 들어가는 파일을 찾아서 상세정보 출력
$ find . -name "*test*" -exec ls -l {} \;
# 현재 디렉토리에 있는 파일에서 "test"가 들어가는 내용 찾기
$ find . -type f -exec grep "test" {} \;
# 현재 디렉토리에 ".txt" 확장자를 찾아서 모두 삭제
$ find . -name "*.txt" -exec rm {} \;
17 ps
현재 진행 중인 프로세스 목록과 상태를 보여줍니다.
# 실행 중인 모든 프로세스를 보여주기
$ ps aux
# 실행 중인 모든 프로세스를 전체 커맨드를 포함해 보여주기
$ ps auxww
# 특정 문자열과 매칭되는 프로세스 찾기
$ ps aus | grep {패턴}
$ ps -ef | grep java
# 메모리 사용량에 따라 정렬하기
$ ps --sort size
18 grep
grep은 입력에서 패턴에 매칭되는 내용을 찾는 명령어입니다. grep이라는 이름은 ed의 명령어인 g/re/p에서 왔습니다. 보통 find, ps 등과 조합해 사용합니다.
- -c : 일치하는 행의 수를 출력한다.
- -i : 대소문자를 구별하지 않는다.
- -v : 일치하지 않는 행만 출력한다.
- -n : 포함된 행의 번호를 함께 출력한다.
- -l : 패턴이 포함된 파일의 이름을 출력한다.
- -w : 단어와 일치하는 행만 출력한다.
- -x : 라인과 일치하는 행만 출력한다.
- -r : 하위 디렉터리를 포함한 모든 파일에서 검색한다.
- -m 숫 : 최대로 표시될 수 있는 결과를 제한한다.
- -E : 찾을 패턴을 정규 표현식으로 찾는다.
- -F : 찾을 패턴을 문자열로 찾는다.
# grep 사용방법
$ grep [옵션][패턴][파일명]
# 파일엣허 특정 패턴을 만족하는 부분 찾기
$ grep "패턴" 파일경로
# 파일명과 라인을 함께 표시
$ grep --with-filename --line-number "패턴" 파일경로
# 매칭하지 않는 부분 표시
$ grep --invert-match "패턴"
# cat과 함께 사용하기
$ cat 파일경로 | grep "패턴"
# 특정 파일에서 'error' 문자열 찾기
$ grep 'error' 파일명1 파일명2
# 현재 디렉토리내에 있는 모든 파일에서 'error' 문자열 찾기
$ grep 'error' *
# 특정 확장자를 가진 모든 파일에서 'error' 문자열 찾기
$ grep 'error' *.log
# 특정 파일에서 a로 시작하고 z로 끝나는 5자리 단어를 찾는다
$ grep 'a...z' 파일명
# 특정 파일에서 a나 b로 시작되는 모든 행을 찾는다
$ grep '^[ab]' 파일명
19 kill
프로세스를 죽이는 명령어입니다. 프로세스를 죽인다고는 하지만 원리는 프로세스에 중지하라는 시그널을 보내는 겁니다. SIGKILL, SIGSTOP은 강제 종료이며 나머지는 정상적으로 종료시킵니다. 프로세스 아이디는 ps명령어로 알아낼 수 있습니다.
# kill에서 사용할 수 있는 시그널 표시
$ kill -l
# 프로세스 죽이기 SIGTERM(terminate)
$ kill 프로세스ID
# 백그라운드 잡 종료시키기
$ kill {잡ID}
# 프로세스 강제종료
$ kill -9 | KILL 프로세스ID
20 alias
자주 사용하는 명령어가 길어 타이핑하려면 귀찮습니다. 이때 alias를 사용하면 줄여서 사용할 수 있습니다.
# 현재 등록되어있는 별칭 모두 표시하기
$ alias
# alias 만들기 # alias 명령어별칭 = '명령어'
$ alias .....=../../../..
# alias 삭제하기
$ unalias .....
그런데 이렇게 입력하고 시스템을 재부팅하면 등록한 별칭들이 초기화 되버린다. 매번 적용하기 불편한 별칭들은
vi ~/.bashrc 에서 바로 등록해도 되고 따로 vi .bash_aliases 이라는 파일을 생성해서 alias별칭 설정을 쭉 해줘도 된다. bash_aliases경로는 ' bashrc'가 있는 곳이나 '/etc/profile' 같은 곳에 저장하면 된다.
21 vi / vim
vi 혹은 vim은 대부분의 리눅스에 기본적으로 설치되어있는 텍스트 에디터입니다. 백엔드 개발 환경에서는 적지 않게 사용할 기회를 만나게 됩니다. vi는 사용하는 명령어 등 자주 사용하고 많기 때문에 따로 작성하여 링크를 걸겠습니다.
22 압축 및 압축 해제
- tar
# tar 압축하기
$ tar -cvf [파일명.tar] [대상폴더명]
$ tar -cvf test.tar pjt
# tar 압축해제
$ tar -xvf [파일명.tar]
$ tar -xvf test.tar
- gz
# gz 압축하기
$ gzip [옵션][파일명]
$ gzip test.txt
# gz 압축 해제
$ gzip -d [파일명]
$ gzip -d test.gz
- zip
# zip 압축하기
$ zip [압축 파일명][압축할 파일명]
$ zip -r test.zip ./*
# zip 압축해제
$ unzip [파일명]
$ unzip test.zip
23 wget
'webget'의 약자입니다. 리눅스에서 인터넷을 통해 파일을 받는 가장 좋은 방법은 wget 명령어를 사용하는 것이다.
# wget 사용방법
$ wget [옵션] [URL]
# 다운로드 가능한지 확인하기
# URL이 broken link인지 확인해주는 옵션. header정보만 받아서 보여주는 기능이다.
$ wget --spider [URL]
# 단일 파일 받기
# 다운로드 동안 현재까지 받은 퍼센트, 바이트 수, 다운속도, 남은시간을 확인할 수 있다.
$ wget [URL]
# 다른 이름으로 저장하기
# -O 옵션으로 파일을 원하는 파일이름으로 다운로드 받을 수 있다
$ wget -O [파일이름] [URL]
# 다운로드 속도 지정
# 기본적으로는 가능한 최대 대역폭을 사용하지만, 대량의 파일을 받을 때는 대역폭을 조절할 필요가 있다
$ wget --limit-rate=[대역폭] [URL]
# 이어받기
# -c 옵션으로 다운로드 중에 중단됐을 경우 다시 시작할 수 있다.
$ wget -c [URL]
# 백그라운드에서 다운로드하기
$ wget -b [URL]
# 브라우저에서 다운로드 하는 것처럼 user-agent 정보 보내기
# 몇몇 사이트는 브라우저로 다운로드 하지 않으면 다운로드를 허가하지 않는 경우가 있다
$ wget --user-agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" [URL]
# 재시도 횟수 지정하기 # 기본 재시도 횟수는 20이다
$ wget --tries=[숫자] [URL]
# 여러개의 파일 다운로드하기
$ wget -i [file]
# 로그파일 남기기
$ wget -o [로그파일명] [URL]
'개인 공부 > 정보 보관함' 카테고리의 다른 글
[공부노트: JAVA]IntelliJ 단축키와 코드 자동완성 정리 (1) | 2024.10.17 |
---|---|
WINDOW 설치 시 사용한 USB(ESD-USB) 원래대로 복구하기 (0) | 2024.09.24 |
[LINUX]vi 편집기 & 명령어 정리 (0) | 2024.06.27 |
[LINUX] vi 편집기를 이용해 문서 전체에서 문자 일괄 변경 (0) | 2024.06.19 |
[LINUX] 포트 오픈 확인 (0) | 2024.06.19 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!