Linux Command

CommandDescription
1pwd현재 위치 출력
2ls현재 디렉터리 내의 파일과 디렉터리 출력
3cd디렉터리 이동
4mkdir디렉터리 생성
5cp파일 또는 디렉터리 복사
6mv파일 또는 디렉터리 이동
7rm파일 또는 디렉터리 삭제
8cat파일 내용을 확인
9touch빈 파일을 생성
10echo문자열 화면에 표시
11ip addr/ifconfigIP 정보 확인
12ss네트워크 상태 확인
13nc서버의 포트 확인
14which, whereis, locate명령어 위치 확인
15tail파일의 마지막 부분 확인하기
16find파일이나 디렉터리 찾기
17ps현재 실행 중인 프로세스 목록과 상태 확인
18grep주어진 입력값에서 패턴에 맞는 값 출력
19kill프로세스 종료
20alias명령어 별칭 만들기
21vi / vim편집기

Pwd

  • work directory의 약자로 작업 중인 디렉터리를 보여줌
1
2
$ pwd
/Users/hyden

Ls

  • list segments의 약자로 현재 디렉터리의 파일과 디렉터리를 보여준다.
  • 보통 단독으로 잘 사용하지 않고 a,l 등의 옵션과 함께 사용
OptionDescription
ls -l파일들의 상세 정보를 보여줌
ls -a숨김 파일 표시
ls -t최신 파일부터 표시
ls -rt오래된 파일부터 표시
ls -F파일을 표시할 때 파일의 타입을 나타내는 문자열을 표시(/ 디렉터리, * 실행파일, @심볼릭 링크)
ls -R하위 디렉터리의 내용까지 표시
  • 보통은 위 옵셥들을 조합해 ls -al, ls -alt, ls -altF 등으로 사용
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
$ ls -altF
total 95340
drwxr-x--- 28 hyden hyden     4096 Oct 29 12:34 ./
-rw-------  1 hyden hyden   326035 Oct 29 12:34 .zsh_history
drwx------  8 hyden hyden     4096 Oct 29 12:34 .cache/
-rw-------  1 hyden hyden       33 Oct 27 16:40 .lesshst
-rw-------  1 hyden hyden    25052 Oct 27 16:39 .bash_history
-rw-------  1 hyden hyden    38160 Oct 27 16:32 .viminfo
drwx------  6 hyden hyden     4096 Oct 27 15:50 .config/
drwx------  2 hyden hyden     4096 Oct 27 15:36 .ssh/
-rw-rw-r--  1 hyden hyden      287 Oct 27 13:34 .wget-hsts
-r--r--r--  1 hyden hyden   117120 Oct 27 12:31 .zcompdump-devserver-5.8.1.zwc
-rw-rw-r--  1 hyden hyden    50720 Oct 27 12:31 .zcompdump-devserver-5.8.1
-rw-rw-r--  1 hyden hyden    49203 Oct 27 12:31 .zcompdump
drwxr-x---  6 hyden hyden     4096 Oct 26 16:20 istio-1.18.2/
drwxr-xr-x 12 hyden hyden     4096 Oct 26 14:30 .oh-my-zsh/
-rw-r--r--  1 hyden hyden     4789 Oct 26 14:30 .zshrc
drwxr-xr-x  9 hyden hyden     4096 Oct 23 13:01 .minikube/
-rw-r--r--  1 hyden hyden     3919 Oct 20 17:47 .bashrc
-rw-------  1 hyden hyden     2313 Oct  5 12:49 kubeconfig.yaml
drwxrwxr-x  2 hyden hyden     4096 Sep 19 12:52 lang_test/
drwxrwxr-x  2 hyden hyden     4096 Sep 18 20:27 .ncloud/
drwxr-xr-x  5 hyden hyden     4096 Sep 11 19:06 pybind11/
drwxrwxr-x  2 hyden hyden     4096 Sep  8 16:25 data/
-rw-------  1 hyden hyden      151 Sep  8 15:59 .python_history
-rw-rw-r--  1 hyden hyden  1452216 Sep  7 18:59 libboost_regex.so.1.58.0
drwxrwxr-x  2 hyden hyden     4096 Sep  6 14:35 test/
drwxrwxr-x  4 hyden hyden     4096 Sep  6 14:28 ffmpeg/
drwxrwxr-x  2 hyden hyden     4096 Aug 30 16:00 dockerbuild/
drwxr-xr-x  8 root  root      4096 Aug 30 10:50 ../
-rw-rw-r--  1 hyden hyden      435 Aug  3 17:05 default-user-config.yaml
drwxr-x---  3 hyden hyden     4096 Aug  3 15:30 .kube/
drwxrwxr-x  5 hyden hyden     4096 Aug  3 14:47 manage_kubernetes/
-rw-rw-r--  1 hyden hyden       84 Aug  2 18:54 .bash_profile
-rw-rw-r--  1 hyden hyden      508 Aug  2 18:53 ncp-iam-authenticator.sha256
-rwxrwxr-x  1 hyden hyden 11665408 Aug  2 18:53 ncp-iam-authenticator*
-rwx------  1 hyden hyden    11345 Aug  2 10:13 get_helm.sh*
  • 심볼릭 링크(symbolic link): 원본 파일을 가리키도록 링크만 연결. 윈도우의 바로가기 링크와 같은 개념

Cd

  • change directory의 약자로 디렉터리 이동시 사용하는 명령어
OptionDescription
cd ~홈 디렉터리로 이동
cd..상위 디렉터리로 이동. cd../../ 같은 식으로 여러 단계를 한 번에 이동 가능
cd /dir절대 경로를 지정해 이동 가능
cd -바로 전의 디렉터리로 이동

Mkdir

  • make directory의 약자로 디렉터리를 만들 때 사용
1
2
# <이름>의 디렉터리를 현재 디렉터리에 만든다
$ mkdir <이름>
  • 절대 경로를 지정하여 만들 수도 있다.
1
2
# <이름>의 디렉터리를 절대 경로의 디렉터리에 만든다
$ mkdir /home/hyden/<이름>
  • -p 옵션으로 하위 디렉터리까지 한 번에 생성할 수 있다
1
mkdir -p <디렉터리명>/<하위 디렉터리명>

Cp

  • copy의 약자로 파일 또는 디렉터리를 복사할 때 사용
1
2
3
4
5
6
7
8
# source를 target으로 복사
$ cp source target

# target 파일의 이미 있는 경우 덮어쓰기
$ cp -f source target

# 디렉터리를 복사할 때 사용. 하위 디렉터리도 모두 복사하기
$ cp -R sourceDir targetDir

Mv

  • move의 약자로 파일 또는 디렉터리의 위치를 옮길 때 사용. 혹은 이름을 변경할 때도 사용
1
2
3
4
5
6
7
8
# afile 이름을 bfile로 변경
$ mv afile bfile

# afile을 상위 디렉터리로 옮김
$ mv afile ../

# afile을 /opt 이하 디렉터리로 옮김
$ mv afile /opt/

Rm

  • remove의 약자로 파일 또는 디렉터리를 삭제할 때 사용
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# afile을 삭제
$ rm afile

# 디렉터리 adir을 삭제. 삭제 시 확인을 함
$ rm -r adir

# 디렉터리 adir을 삭제. 삭제 시 확인 안 함
$ rm -rf adir

# txt로 끝나는 모든 파일을 삭제할지 물어보면서 삭제
$ rm -i *.txt

Cat

  • catenate의 약자로 파일의 내용을 확인할 때 사용.
1
2
# test.txt 파일의 내용을 확인
$ cat test.txt

Touch

  • touch는 빈 파일을 생성. 혹은 파일의 날짜와 시간을 수정할 때 사용한다.
1
2
3
4
5
6
7
8
# afile을 생성
$ touch afile

# afile의 시간을 현재 시간으로 갱신
$ touch -c afile

# bfile의 날짜 정보를 afile의 정보와 동일하게 변경
$ touch -r afile bfile

Echo

  • echo는 어떤 문자열을 화면에 보여줄 때 사용. echo와 리다이렉션을 사용해 파일을 생성, 추가하는 작업을 많이 한다.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# 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

Ip addr/ifconfig

  • 접속한 리눅스의 IP 정보를 알아낼 때 사용.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
$ ip addr
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
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP
group default qlen 50000
link/ether fa:16:3e:5d:0b:d7 brd ff:ff:ff:ff:ff:ff
inet 10.201.1.10/16 brd 10.202.255.255 scope global eth0
valid_lft forever preferred_lft forever
  • ip addr이 설치되어 있지 않은 경우에는 ifconfig를 사용.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
$ ifconfig
eth0 Link encap:Ethernet HWaddr 06:4d:de:ae:a8:50
inet addr:172.31.27.212 Bcast:172.31.31.255 Mask:255.255.240.0
inet6 addr: fe80::44d:deff:feae:a850/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:9001 Metric:1
RX packets:68903966 errors:0 dropped:0 overruns:0 frame:0
TX packets:75295223 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:15691124260 (15.6 GB) TX bytes:42265387295 (42.2 GB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:6623596 errors:0 dropped:0 overruns:0 frame:0
TX packets:6623596 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:349206971 (349.2 MB) TX bytes:349206971 (349.2 MB)

Ss

  • socket statistics의 약자로 네트워크 상태를 확인하는 데 사용.
  • nestat과 동일. 옵션으로 a, t, u, l, p, n 등이 있다.
OptionDescription
ss -a모든 포트 확인
ss -tTCP 포트 확인
ss -uUDP 포트 확인
ss -lLISTEN 상태 포트 확인
ss -p프로세스 표시
ss -n호스트, 포트, 사용자명을 숫자로 표시
  • TCP 포트 중 LISTEN 상태인 포트의 번호를 알고 싶을 때 다음과 같이.
1
2
3
4
$ ss -tln
LISTEN 0 511 *:443 *:*
LISTEN 0 1 127.0.0.1:8006 *:*
LISTEN 0 511 *:80 *:*

Nc

  • netcat의 약자로 예전에는 포트가 열렸는지 확인하는 데 사용.
1
2
3
4
5
6
7
8
# 포트가 오픈됐는지 확인
$ nc IP주소 포트

# 더 자세한 정보가 남음
$ nc -v IP주소 포트

# 현재 서버의 포트를 오픈(방화벽에 해당 포트 번호가 설정 함)
$ nc -l 포트

Which, Whereis, Locate

  • which는 특정 명령어의 위치를 찾아줌.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
$ 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 파일을 찾아주는 명령.
$ locate *.java

Tail

  • tail은 파일의 마지막 부분을 보여준다. 이와 반대로 head는 파일의 첫 부분을 보여준다.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 파일의 마지막 라인부터 숫자만큼의 파일의 라인 수를 보여주기
$ tail -n {숫자} {파일경로}

# 숫자로 지정한 라인부터 보여주기
$ tail -n +{숫자} {파일경로}

# 파일의 마지막 라인부터 숫자로 지정한 바이트 수 만큼 보여주기
$ tail -c {숫자} {파일경로}

# Ctrl + C로 중단하기 전까지 지정한 파일의 마지막에 라인이 추가되면 계속 출력하기
$ tail -f {파일경로} :

# 파일의 마지막 라인부터 지정한 숫자만큼을
# {초}로 지정한 시간이 지날 때마다 리프레시해서 보여주기
$ tail -n {숫자} -s {} -f {파일경로}

Find

  • find는 명령어의 뜻 그대로 파일이나 디렉터리를 찾는 데 사용하는 명령어.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# 확장자 명으로 찾기
$ find {디렉터리} -name '*.bak'

# 디렉터리를 지정해 찾기
$ find {디렉터리} -path '**/검색 시 사용하는 디렉터리명/**.*.js'

# 파일명을 패턴으로 찾기
$ find {디렉터리} -name '*패턴*'

# 파일명을 패턴으로 찾되 특정 경로는 제외하기
$ find {디렉터리} -name '*.py' -not -path '*/site-packates/*'

# 파일을 찾은 다음 명령어 실행하기
$ find {디렉터리} -name '*.ext' -exec wc -l {} \;

# 최근 7일간 수정된 파일을 찾고 삭제하기
$ find {디렉터리} -daystart -mtime -7 -delete

# 0바이트인 파일을 찾고 삭제하기
$ find {디렉터리} -type f -empty -delete

Ps

  • 현재 실행 중인 프로세스 목록과 상태를 보여준다.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 실행 중인 모든 프로세스를 보여주기
$ ps aux

# 실행 중인 모든 프로세스를 전체 커맨드를 포함해 보여주기
$ ps auxww

# 특정 문자열과 매칭되는 프로세스 찾기(grep은 바로 다음에 나옵니다)
$ ps aus | grep {패턴}

# 메모리 사용량에 따라 정렬하기
$ ps --sort size
  • ps와 grep을 pipe로 사용하여 현재 실행 중인 프로세스 목록중 특정 명칭을 포함하는 프로세스를 찾는 식으로 사용하기도 한다.

Grep

  • grep은 입력에서 패턴에 매칭되는 내용을 찾는 명령어.
  • grep이라는 이름은 ed의 명령어인 g/re/p(내용 전체를 정규식으로 찾은 다음 프린트하라: globally search for a regular expression and print matching lines)에서 왔음.
  • 보통 find, ps 등과 조합해 사용.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 파일에서 특정 패턴을 만족하는 부분 찾기
$ grep "패턴" 파일경로

# 파일명과 라인을 함께 표시하기
$ grep --with-filename --line-number "패턴" 파일경로

# 매칭하지 않는 부분 표시하기
$ grep --invert-match "패턴"

# cat과 함께 사용하기
$ cat 파일경로 | grep "패턴"

Kill

  • 프로세스를 죽이는 명령어
  • 프로세스를 죽인다고는 하지만 원리는 프로세스에 중지하라는 시그널을 보내는 것
  • SIGKILL, SIGSTOP은 강제 종료이며 나머지는 정상적으로 종료.
  • 프로세스 아이디는 ps 명령어로 알아낼 수 있다.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# kill에서 사용할 수 있는 시그널 표시하기
$ kill -l

# 프로세스 죽이기 SIGTERM(terminate)
$ kill 프로세스ID

# 백그라운드 잡 종료시키기
$ kill {잡ID}

# 프로세스 강제 종료
$ kill -9 | KILL 프로세스ID

Alias

  • alias를 사용하면 줄여서 사용할 수 있다
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 모든 alias 표시하기
$ alias

# alias 만들기
# 예) alias ll="ls -al"
$ alias 단어="명령"

# cd ../..을 cd …으로 줄여 쓰기
# cd ../../../은 cd ….으로 가능
$ alias ...=../..
$ alias ....=../../..
$ alias .....=../../../..
$ alias ......=../../../../..

# alias 삭제하기
$ unalias 단어

Vi / Vim

  • vi 혹은 vim은 대부분의 리눅스에 기본적으로 설치되어 있는 텍스트 에디터
1
vi test.txt

참고 및 출처

백엔드 개발자라면 알아야 할 리눅스 필수 명령어 21개