리눅스 쉘 기본 명령어(Basic Shell Commands)

jomminii_before·2020년 2월 6일
5

리눅스 쉘 기본 명령어에 대해 알아보겠습니다.
옵션은 대부분 제외하였습니다.

cd

가장 많이 쓰는 명령어 중에 하나인 cd는 "change directory"의 약자로 특정 디렉토리로 이동하고 싶을 때 사용합니다. cd 뒤에 가고 싶은 디렉토리 경로를 입력합니다.

cd <가고자 하는 디렉토리 경로>
cd    # 사용자 디렉토리로 이동
cd /  # root 디렉토리로 이동
cd .. # 상위 디렉토리로 이동
cd Desktop/wecode  # Desktop 하위 wecode 디렉토리로 이동

ls

ls는 "list"의 약자로, 현재 디렉토리에 속한 파일 및 디렉토리를 나열해줍니다.

ls  #현재 디렉토리에 있는 내용 출력
django-tutorial       javascript_assignment study

➜  ls -a # 숨겨진 파일이나 디렉토리도 함께 보여줌
.                     .DS_Store             django-tutorial       study
..                    .git                  javascript_assignment

➜  ls -l # 자세한 내용(권한, 포함된 파일 수, 소유자, 그룹, 파일크기, 수정일자, 파일이름)
drwxr-xr-x@  4 LeeJongMin  staff  128  2  1 22:42 django-tutorial
drwxr-xr-x@  4 LeeJongMin  staff  128  2  4 12:54 javascript_assignment
drwxr-xr-x@ 19 LeeJongMin  staff  608  1  3 10:07 study

➜  ls -al # a와 l의 기능을 모두 포함
total 16
drwxr-xr-x   7 LeeJongMin  staff   224  2  4 12:53 .
drwx------@ 47 LeeJongMin  staff  1504  2  5 17:25 ..
-rw-r--r--@  1 LeeJongMin  staff  6148  2  1 22:42 .DS_Store
drwxr-xr-x  14 LeeJongMin  staff   448  2  5 23:44 .git
drwxr-xr-x@  4 LeeJongMin  staff   128  2  1 22:42 django-tutorial
drwxr-xr-x@  4 LeeJongMin  staff   128  2  4 12:54 javascript_assignment
drwxr-xr-x@ 19 LeeJongMin  staff   608  1  3 10:07 study
➜  ls -h -al # -h를 붙이면 K, M, G 단위의 파일크기를 사용하여 사람에게 보기 좋게 표시
total 16
drwxr-xr-x   7 LeeJongMin  staff   224B  2  4 12:53 .
drwx------@ 47 LeeJongMin  staff   1.5K  2  5 17:25 ..
-rw-r--r--@  1 LeeJongMin  staff   6.0K  2  1 22:42 .DS_Store
drwxr-xr-x  14 LeeJongMin  staff   448B  2  5 23:45 .git
drwxr-xr-x@  4 LeeJongMin  staff   128B  2  1 22:42 django-tutorial
drwxr-xr-x@  4 LeeJongMin  staff   128B  2  4 12:54 javascript_assignment
drwxr-xr-x@ 19 LeeJongMin  staff   608B  1  3 10:07 study

mv

mv는 "move"의 약자로 파일이나 디렉토리를 원하는 곳으로 옮기거나, 이름을 변경할 때 사용할 수 있는 명령어 입니다.

mv <원본 파일명> <옮기고 싶은 디렉토리명>     # 해당 디렉토리로 파일 이동mv <원본 파일명> <바꾸고 싶은 파일명>         # 원본 파일 이름 변경mv <원본 디렉토리명> <옮기고 싶은 디렉토리명>  # 해당 디렉토리로 디렉토리 이동mv <원본 디렉토리명> <바꾸고 싶은 디렉토리명>  # 원본 디렉토리 이름 변경

# 두 번째에 있는 옮기거나 바꾸고 싶은 파일/디렉토리명이 존재하면 '이동'이 진행되고, 없으면 '이름 변경'이 진행됨

cp

cp는 "copy"의 약자로 파일이나 디렉토리를 원하는 곳에 원하는 이름으로 복사할 수 있는 명령어 입니다.

cp <원본 파일명> <옮기고 싶은 디렉토리명>               # 해당 디렉토리로 원본 파일 복사 cp <원본 파일명> <복사해서 만들고 싶은 파일명>           # 해당 파일명으로 사본 파일 생성cp <원본 파일명1> <원본 파일명2> <옮기고 싶은 디렉토리명> # 여러 파일을 한 번에 해당 디렉토리로 복사cp <원본 디렉토리> -r <옮기고 싶은 디렉토리명>           # 원본 디렉토리의 하위 파일까지 모두 해당 디렉토리로 복사cp <원본 디렉토리> -r <복사해서 만들고 싶은 디렉토리명>   # 위의 방식을 응용해서 복사해서 만들고 싶은 디렉토리 생성

cat

cat은 "concatenate"의 약자로 두 개 이상의 파일을 연결해서 출력할 때 사용됩니다. (하나만 출력할 수도 있지만 일반적으로 두 개 이상일 때 사용합니다.

cat <파일명1> <파일명2> ...			     # 기본적인 사용방법. 두 개 이상의 파일을 연달아 출력함
this is test						         # 파일명1의 내용	
ths is test1
22222								        # 파일명2의 내용
2222222222cat -n <파일명1> <파일명2> ...	      	# 출력결과 앞에 행을 붙여서 출력
1	this is test
2	ths is test1
1	22222
2	2222222222cat <파일명1> <파일명2> ... > <새로운 파일명> # ">" 앞에 있는 파일 내용을 합쳐 새로운 파일로 만들어줌cat <파일명1> <파일명2> ... > <기존 파일명>   # ">" 앞에 있는 파일 내용을 합쳐 기존 파일에 덮어씌움cat <파일명1> <파일명2> ... >> <기존 파일명>  # ">" 앞에 있는 파일 내용을 합쳐 기존 파일 뒤에 덧붙여줌

less

less는 파일 내용을 확인하는 명령어들 중 하나로, 한 번에 보여지는 만큼만 vim과 같은 내부 창에 새로 출력을 해줍니다. 해당 창에서 위아래로 움직이며 파일 내용을 확인할 때 용이합니다. 파일 수정은 불가합니다.

➜ less <파일명>

[내부 창 단축키]
q: 종료 후 쉘창으로 복귀
enter: 1행 아래로 이동
space bar 또는 f: 아래로 1페이지 이동
숫자+n : 원하는 페이지만큼 뒤로 이동
PageUp: 위로 1페이지 이동
PageDown: 아래로 1페이지 이동

tail

tail은 파일의 마지막 행을 기준으로 지정한 행까지의 파일 내용 일부를 출력해줍니다. 아무 옵션을 주지 않으면 기본적으로 10개 행을 출력해줍니다.

tail <파일명>      # 기본형tail text.txt      # 1~35까지 입력된 텍스트 파일 중 마지막 10개 행이 출력됨
26
27
...
34
35tail -n 5 <파일명> # -n 뒤에 숫자를 입력하면, 마지막 행부터 해당 번째까지의 행이 출력됨
31
32
33
34
35tail +25 <파일명>  # tail 뒤에 +숫자를 붙이면 해당 행부터 마지막 행까지 출력됨
25
26
...
35tail -c 10 <파일명> # -c 뒤에 숫자를 입력하면, 행 기준이 아닌 byte 기준으로 출력됨
33
34
35tail -f <파일명>    # -f 를 붙이면, 종료되지 않은 채 실시간으로 마지막 10줄을 출력해줌. ctrl+c 로 종료

nohup

nohup은 터미널을 종료해도 프로그램이 백그라운드에서 계속 실행되도록 하는 명령어 입니다.
자세한 내용 아직 이해가 가지 않아서 추후에 다시 정리하겠습니다.

rm

rm은 remove의 약자로 파일과 디렉토리 삭제에 사용되는 명령어 입니다.

rm <파일명>  			 # 해당 파일을 삭제rm *.txt    			 # .txt로 끝나는 모든 파일을 삭제rm *       		      # 전체 파일 삭제rm -r <파일명/디렉토리명>  # 해당 파일/디렉토리 삭제rm -rf <파일명/디렉토리명> # 해당 파일/디렉토리 강제 삭제(경고문구 없이 삭제)

mkdir

mkdir은 "make directory"의 약자로 새로운 디렉토리를 만들 수 있는 명령어 입니다. 참고로 touch <파일명>으로는 새로운 파일을 만들 수 있습니다.

mkdir <새로운 디렉토리명>  # 해당 경로에 새로운 디렉토리를 만들어줌mkdir -p <새로운 디렉토리명 +"/" + 새로운 하위 디렉토리명> # 하위 디렉토리까지 함께 생성
mkdir -p dir1/subdir1      # dir1이라는 새로운 디렉토리와 그 안에 하위 디렉토리인 subdir1까지 함께 만들어줌

clear

clear는 말 그대로 쉘 창에 있는 기록을 모두 지워줍니다. 맥 사용자의 경우 cmd+k도 똑같은 기능을 합니다.

clear

pwd

pwd는 "print working directory"의 약자로 현재 작업 중인 디렉토리의 절대 경로를 반환해줍니다. 지금 있는 곳이 어딘지 모르겠다면 pwd를 입력해보세요.

pwd
/Users/LeeJongMin/Wecode_Project/westa

chown

chown은 파일이나 디렉토리의 소유권자 및 그룹식별자를 바꾸는 명령어 입니다. "change ownership" 뭐 이런거 같네요.
각 파일이나 디렉토리의 소유권자는 위에서 살펴본 ls -al 명령어를 사용하면 확인할 수 있습니다.

chown <소유권자>:<그룹식별자> <소유권을 변경하고 싶은 파일명>     # 해당 파일의 소유권자, 그룹식별자 변경chown <소유권자>:<그룹식별자> <소유권을 변경하고 싶은 디렉토리명>  # 해당 디렉토리의 소유권자, 그룹식별자 변경(하위 디렉토리는 변경 안됨)chown -R <소유권자>:<그룹식별자> <소유권을 변경하고 싶은 파일명>   # 해당 디렉토리 및 하위 디렉토리의 소유권자, 그룹식별자 변경

chmod

chmod는 해당 파일이나 디렉토리의 퍼미션(허용 권한)을 수정할 수 있는 명령어 입니다.
ls-al명령어를 치면 아래와 같은 결과가 출력되는데요, 여기서 맨 앞에 있는 rwxr-xr-x 이 9자리의 문자가 퍼미션과 관계가 있습니다. 참고로 9자리 문자의 앞에 있는 "d"는 디렉토리, "i"는 링크파일, "-"는 일반파일을 나타냅니다.

9자리를 표현하는 문자는 "r", "w", "x","-" 4가지가 있는데요, 각각 아래와 같은 뜻을 가집니다.

  • "r" : 읽기 권한
  • "w" : 쓰기 권한
  • "x" : 실행 권한
  • "-" : 권한 없음

그리고 9자리는 각각 3자리씩 나눠서 권한을 가지는 사용자가 구분되는데요, 그 구분은 아래와 같습니다.

  • 첫 3자리 : 소유자
  • 중간 3자리 : 그룹
  • 마지막 3자리 : 모든 사용자

위에서 나왔던 rwxr-xr-x를 예시로 보면, 소유자는 읽고, 쓰고, 실행할 수 있는 모든 권한(rwx)을 가졌고, 그룹과 모든 사용자는 읽고 실행할 수 있는 권한(r-x)을 가졌네요. 이 권한을 수정할 수 있는 방법은 아래와 같습니다.

chmod <변경될 퍼미션 값> <변경할 파일/디렉토리>

여기서 퍼미션 값이란, 각 문자를 숫자로 변환한 값(r=4, w=2, x=1)을 더한 값입니다. 예를 들어 rwx는 7, r-x는 5입니다. 이런식으로 각 그룹별로 끊어서 숫자를 입력하면 됩니다.

chmod 755 <변경할 파일/디렉토리> # 소유자는 모든 권한, 나머지는 읽고 실행할 수 있는 권한chmod 750 <변경할 파일/디렉토리> # 소유자는 모든 권한, 그룹은 읽고 실행할 수 있는 권한, 나머지는 아무 권한 없음

grep

grep은 특정 파일 내에서 지정한 패턴을 가진 문자열을 찾은 후, 해당 문자열을 출력해줍니다. 그리고 패턴에는 정규표현식의 패턴을 사용합니다. 정규표현식 패턴은 이전에 정리한 적이 있으니 참고해보세요! -> 정규표현식 알아가기

grep <패턴> <파일명> # 특정 파일에서 특정 패턴을 가진 문자열을 출력grep <패턴> * 		# 현재 디렉토리 모든 파일에서 특정 패턴을 가진 문자열을 출력grep <패턴> * -r    # 현재 디렉토리 및 하위 디렉토리에서 특정 패턴을 가진 문자열을 출력

history

history는 현재까지 쳤던 모든 명령어 리스트를 행 넘버와 함께 출력해줍니다.

history
1 history
2 cd
3 ls
...

➜ history -c  # 히스토리 리스트를 지워줍니다.

ps

ps는 현재 작동하는 프로세스의 목록을 출력해줍니다. 뒤에 붙는 옵션에 따라 출력되는 값이 달라집니다. (ps도 아직 프로세스에 대한 이해가 부족해 나중에 다시 정리하도록 하겠습니다.)
-a : 전체 사용자의 프로세스 출력
-u : 각 프로세스 사용자 및 사용시간 출력
-x : 제어 터미널이 없는 프로세스 출력
-l : 자세한 형태의 정보 출력
-e : 모든 프로세스 상태 출력

ps -aux  # BSD 구문을 사용하여 시스템의 모든 프로세스를 출력ps -ejH  # 프로세스를 트리형식으로 출력

man 과 tldr

man은 명령어를 어떻게 쓰는지 설명해주는 내용을 출력해줍니다. 하지만 내용이 좀 방대하게 나와서 중요한 부분만 알려주는tldr로 대체해서 사용하기도 합니다. 다만 tldr은 내장되어있지 않기 때문에, 패키지매니저를 통해 따로 설치해야 합니다.

man ls
NAME
     ls -- list directory contents

SYNOPSIS
     ls [-ABCFGHLOPRSTUW@abcdefghiklmnopqrstuwx1%] [file ...]

DESCRIPTION
     For each operand that names a file of a type other than directory, ls displays its name as well as any requested, associated information.  For each operand
     that names a file of type directory, ls displays the names of files contained within that directory, as well as any requested, associated information.

     If no operands are given, the contents of the current directory are displayed.  If more than one operand is given, non-directory operands are displayed
     first; directory and non-directory operands are sorted separately and in lexicographical order.

     The following options are available:

     -@      Display extended attribute keys and sizes in long (-l) output.

     -1      (The numeric digit ``one''.)  Force output to be one entry per line.  This is the default when output is not to a terminal.

     -A      List all entries except for . and ...  Always set for the super-user.

     -a      Include directory entries whose names begin with a dot (.).

     -B      Force printing of non-printable characters (as defined by ctype(3) and current locale settings) in file names as \xxx, where xxx is the numeric
             value of the character in octal.

     -b      As -B, but use C escape codes whenever possible.

     -C      Force multi-column output; this is the default when output is to a terminal.

     -c      Use time when file status was last changed for sorting (-t) or long printing (-l).

     -d      Directories are listed as plain files (not searched recursively).

     -e      Print the Access Control List (ACL) associated with the file, if present, in long (-l) output.

     -F      Display a slash (`/') immediately after each pathname that is a directory, an asterisk (`*') after each that is executable, an at sign (`@') after
             each symbolic link, an equals sign (`=') after each socket, a percent sign (`%') after each whiteout, and a vertical bar (`|') after each that is a
             FIFO.


➜ tldr ls
ls

List directory contents.

- List files one per line:
    ls -1

- List all files, including hidden files:
    ls -a

- Long format list (permissions, ownership, size and modification date) of all files:
    ls -la

- Long format list with size displayed using human readable units (KB, MB, GB):
    ls -lh

- Long format list sorted by size (descending):
    ls -lS

- Long format list of all files, sorted by modification date (oldest first):
    ls -ltr

기타 꿀팁

Control + a 눌르면 커서가 해당 줄의 맨 앞으로 이동합니다.
Control + e 눌르면 커서가 해당 줄의 맨 뒤로 이동합니다.

profile
https://velog.io/@jomminii 로 이동했습니다.

0개의 댓글