[Linux] 터미널 명령어 정리 (2) - 디렉토리 & 파일

조희우·2022년 10월 5일

리눅스

목록 보기
2/3
post-thumbnail

📝 서문

리눅스 명령어는 왜이리 많은걸까..?

📙 디렉토리 및 파일 명령어

📋 pwd (print working directory)

현재 위치한 작업 디렉토리의 경로를 출력한다.
$ pwd

[사용 예시]
$ pwd
/home/posein

📋 cd (change directory)

디렉토리를 이동한다.
$ cd [directory_name]

  • cd
    인자가 없이 사용하는 경우엔 자신의 홈 디렉토리로 이동한다.
    cd

  • 절대경로
    최상위 디렉토리부터 전체 경로를 지정하여 이동한다.
    맨 앞에는 항상 최상위 디렉토리( / )를 표기한다.
    $ cd /usr/local/src
    $ /home

  • 상대경로
    현재 디렉토리를 기준으로 이동한다.
    하위 디렉토리 혹은 부모 디렉토리로 이동할 때 사용한다.
    $ cd home
    상대경로 사용 시 사용하는 표기법

    • cd /
      최상위 디렉토리인 root로 이동한다.
    • cd .
      현재 디렉토리로 이동한다.
      실질적인 변화는 없다.
    • cd ..
      한 단계 위인 부모디렉토리로 이동한다.
    • cd ~
      ~(tilde)는 사용자의 홈 디렉토리를 나타낸다.
      cd와 실행 결과가 같다.
      특정 사용자의 홈 디렉토리로 이동할 경우(cd ~helena0589)에 유용하다.
    • cd -
      이동하기 바로 직전 디렉토리로 이동한다.

📋 mkdir (make directory)

디렉토리를 생성할떄 사용한다.
$ mkdir [option] directory_name(s)

주요 옵션

  • -p (--parents)
    경로로 지정되 서브 디렉토리가 없을 경우, 함께 생성한다.

  • -m (--mode)
    디렉토리 생성시 퍼미션(Permission)을 설정한다.

  • -v (--verbose)
    생성된 디렉토리를 메시지로 출력한다.

[사용예시]
$ mkdir www
$ mkdir data backup pic
$ mkdir -p www/pds/photo

📋 rmdir (remove directory)

디렉토리를 삭제하는 명령이다.
디렉토리 안이 비어있지 않으면 삭제할 수 없다.
$ rmdir [option] directory_name(s)

주요 옵션

  • -p (--parents)
    삭제하려는 디렉토리가 제거됐을 때 부모 디렉토리가 빈 디렉토리가 되면 부모 디렉토리도 함께 삭제한다.
[사용예시]
$ rmdir www
$ rmdir data backup pic
$rmdir -p wwww/pds/photo

📋 ls (list)

디렉토리 안의 내용을 출력한다.
$ ls [options] [파일 또는 디렉토리 명

주요 옵션
ls 명령어는 아주 많은 옵션이 존재한다.
그 중 자주 쓰는 옵션 일부만 정리해보았다.

옵션의미
-a숨겨진 파일이나 디렉토리도 출력한다.
-l파일이나 디렉토리를 상세하게 출력한다.
-d디렉토리의 경우 해당 디렉토리의 정보를 출력한다.
[사용예시]
$ ls
$ ls -a
$ ls -l

📋 cp (copy)

파일이나 디렉토리를 복사하는 명령이다.
$ cp [option] source(s) destination

주요 옵션
ls명령어와 같이 cp명령어도 옵션이 많기에 그 중 일부만 정리하였다.

옵션의미
-r, -R복사하려는 대상의 하위 디렉토리까지 복사한다.
-i복사를 통해 생성할 파일이 존재할 경우 덮어 쓸 것인지 물어본다.
-f같은 파일의 이름이 존재하는 경우 강제로 덮어쓴다.
-s복사하는 대신 심볼릭 링크를 만든다. (ln 명령어를 통해 생성 가능하다.)
-l복사하는 대신 하드 링크를 만든다. (ln 명령어를 통해 생성 가능하다.)
[사용예시]
$ cp /etc/passwd .
$ cp -r /etc tmp
$ cp a.txt b.txt /tmp

📋 rm (remove)

파일을 삭제하는 명령이다.
옵션에 따라 디렉토리를 삭제(-r)할 수 있다.

주요 옵션

  • -i (--interactive)
    질의 후 파일을 삭제한다.
    • 'y' : 파일을 삭제한다.
    • 'n' : 파일 삭제를 취소한다.
  • -f (--force)
    존재 유무나 메시지 없이 강제로 파일을 삭제한다.
  • -r, -R (--recursive)
    하위 디렉토리를 포함하여 모든 내용을 삭제한다.
    이 옵션을 사용하여 디렉토리도 삭제할 수 있다.
  • -a
    파일 이름이 'a'로 시작하는 파일을 삭제한다.
[사용예시]
$ rm -i
$ rm doc1.txt doc2.txt doc3.txt
$ rm -rf data/

📋 mv (move)

파일이나 디렉토리의 이름을 변경하거나 이동시키는 명령어이다.
$ move [options] source(s) destination

주요 옵션

  • -i (--interactive)
    이동할 디렉토리에 동일한 파일명이 존재할 경우 덮어 쓸 것인지 물어본다.

    • 'y' : 파일을 덮어쓴다.
    • 'n' : 파일 입력을 취소한다.
  • -f (--force)
    만약 동일한 이름의 파일이 존재 할 경우 강제로 덮어쓴다.

  • -b
    덮어쓸 때 백업본의 파일을 만든다.
    파일명 뒤에 ~가 붙은 파일이 생성된다.

  • -v (--verbose)
    파일을 이동하는 내용을 출력한다.

  • -u
    만약 동일한 이름의 파일이 있을 경우 검사하여 해당 피일이 최신 파일이면 이동하지 않는다.

[사용예시]
$ mv readme.txt /home/posein/data/
$ mv /home/posein/data/ /home/posein/baekup/
$ mv aaa.txt bbb.txt
$ mv a.txt b.txt data/ /tmp
$ mv data/* backup/

📋 touch

파일 혹은 디렉토리의 최종 접근 시간, 수정 시간 등 타임스탬프를 변경한다.
만약 해당 이름의 파일이 존재하지 않을 경우 파일의 크기가 0인 빈 파일을 생성하는 명령어이다.
$touch [option] 파일명

주요 옵션

  • -a (access time)
    접근 시간을 바꾼다.

  • -m (modification time)
    수정 시간을 바꾼다.

  • -t (timestamp)
    [[CC]YY]MMDDmm[.ss] 형식의 타임스탬프로 시간을 변경한다.

  • -r (--reference=파일명)
    지정된 파일의 접근시간(Access time) 및 수정 시간(modification time)으로 특정 파일의 시간을 변경한다.

    $ touch -r a.txt b.txt
    a.txt의 접근 시간 및 수정 시간으로 b.txt의 시간을 변경한다.

    [사용예시]
    $ touch a.txt
    $ touch -a lin.txt
    $ touch -a -t 201810142250 joon.txt
    $ touch -t 201212222105 /etc/passwd
    $ touch -r a.txt b.txt

📋 file

파일의 종류를 출력하는 명령어이다.
관련 정보는 /usr/share/magic 파일에 존재한다.
$ file [option] 파일명

주요 옵션

  • -b (--berif)
    이름을 제외한 정보를 출력한다.

  • -i (--mine)
    특정 파일의 문자 집합 정보를 출력한다.
    ex) ASCII, UTF-8

[사용예시]
$ file -i lin.txt

📋 find

주어진 조건을 가지고 있는 파일 및 디렉토리를 찾아 경로를 출력한다.

  • 검색범위 (현재 디렉토리 ~ 하위 디렉토리)
  • 주의사항 : 접근 권한 제한 파일이나 디렉토리는 허가 거부됨 (Permission Denied) 주의가 뜨면서 검색하지 못한다.
    이는 아래 파일 권한 파트의 chmod 명령어를 참조하여 접근 권한을 부여할 수 있다.
    $ fine [path] options expression

주요 옵션
fine 명령어는 또한 많은 옵션이 존재한다.
그 중 자주 쓰는 옵션 일부만 정리해보았다.

  • -name
    주어진 이름의 파일이나 디렉토리를 찾는다.

  • -user
    지정한 사용자의 파일이나 디렉토리를 찾는다.

  • -group
    지정한 그룹 소유의 파일이나 디렉토리를 찾는다.

  • -uid
    지정한 UID 소유의 파일이나 디렉토리를 찾는다.
    UID : User Identifier, user ID

  • -gid
    지정한 GID 소유의 파일이나 디렉토리를 찾는다.
    GID : Group Identifier, group ID

  • -type
    지정한 파일 유형을 찾는다.
    파일 유형

    명령어파일유형
    d디렉토리
    f일반 파일
    l링크 파일
    b블록 디바이스
    c캐릭터 디바이스
    p파이프 파일
    s소켓파일
  • -exec
    찾아진 파일 등과 연계하여 명령을 내린다.
    결과값은 {}으로 표시하며 \;으로 종료한다.

  • -ok
    -exec 옵션과 같으나 확인 메시지를 출력하여 실행 시 'y'나 'n'을 입력받는다.

  • -ls
    상세 출력을 한다.

  • -size n
    n 블록 길이의 파일을 찾는다.

[사용예시]
$ find -name '*/.c'
$ find -name '[ab]*' : a 또는 b로 시작하는 파일이나 디렉토리 찾기
$ find -user posein
$ find -type l
$ find ! -type f
$ find . -type d
$ find .

📒 파일 권한 & 링크 명령어

📋 파일 권한

파일 권한은 다음과 같은 형태로 확인한다.

$ ls -l lin.txt
-rw-rw-r--. 1 posein1 posein2 13 Jan 11 11:05 lin.txt

허가권 (rw-rw-r--)

권한숫자모드파일디렉토리
r4파일 내용 확인 권한디렉토리 내부 내용 확인 권한
w2파일 내용 수정 권한디렉토리 내부에 파일 생성 및 삭제 권한
x1실행 파일 실행 권한디렉토리 내부 접근 권한

위에 예시로 rw-rw-r--에서 3개씩 허가권이 나뉘게 된다

  • 'rw-'
    소유자에 대한 권한이다.
    읽기와 쓰기 권한이 부여되어있다.
    소유권은 2진수 혹인 10진수로 표현 가능하다.(110, 6)

  • 'rw-'
    그룹에 대한 권한이다.
    소유자 권한과 동일하게 부여되어 있다.
    마찬가지로 2진수 혹은 10진수로 표현할 수 있다.(110, 6)

  • 'r--'
    기타 사용자에 대한 권한이다.
    이 같은 경우에는 읽기 권한만 부여되어있다.
    2진수 혹인 10진수로 표현하면 100과 4로 표현 가능하다.

=> 위 소유권을 숫자로 표현하면 Permission rw-rw-r--은 664와 동일한 의미이다.

📋 chmod (change mode)

파일이나 디렉토리에 접근하는 허가권(Permission)을 설정한다.
문자 모드(Symbolic mode)를 사용하여 알파벳으로 표기하거나, 숫자모드(Numberic mode)fh 솔정 가능하다.
$ chmod [option] mode file(s)

주요 옵션

  • -R (--recursive)
    하위 디렉토리를 포함한 디렉토리 내부의 모든 파일의 접근 권한을 변경한다.

  • -c (--changes)
    변경된 정보를 출력한다.

  • -f (--silent, --quite)
    중요한 오류 메시지가 아니면 생략한다.

  • -v (--verbose)
    명령 진행 결과에 대한 정보를 자세히 출력한다.

  • --version
    명령어의 버전 정보를 출력한다.

[사용예시]
$ chmod ugo+rwx aa.txt
$ chmod a+rwx aa.txt
$ chmod 777 a.txt
$ chmod -R go-rwx
$ chmod a= a.txt

📋 chown (change owner)

파일이나 디렉토리의 소유권 및 그룹 소유권을 변경한다.
# chown [option] owner[:group] file(s)

주요 옵션

  • -R (--recursive)
    하위 디렉토리를 포함한 디렉토리 내부의 모든 파일의 접근 권한을 변경한다.

  • -c (--changes)
    변경된 정보를 출력한다.

  • -f (--silent, --quite)
    중요한 오류 메시지가 아니면 생략한다.

  • -v (--verbose)
    명령 진행 결과에 대한 정보를 자세히 출력한다.

  • --version
    명령어의 버전 정보를 출력한다.

[사용 예시]
# chown -R posein *
	: 하위 디렉토리를 포함하여 현재 디렉토리의 모든 파일의 소유자를 posein으로 변경
# chown posein:yuloje jalin.txt
# chown 500 jalin.txt
# chown :yuloje joon.txt

📋 chgrp (change group)

파일이나 디렉토리의 소유 그룹을 바꾸는 명령어이다.
root가 아니면 사용하는 경우는 드물지만, 특정 사용자가 여러 그룹에 속한 경우 본인 소유의 파일을 본인이 속한 그룹내에서 소유권을 변경할 수 있다.
# chgrp [option] group file(s)

주요 옵션

  • -R (--recursive)
    하위 디렉토리를 포함한 디렉토리 내부의 모든 파일의 접근 권한을 변경한다.

  • -c (--changes)
    변경된 정보를 출력한다.

  • -f (--silent, --quite)
    중요한 오류 메시지가 아니면 생략한다.

  • -v (--verbose)
    명령 진행 결과에 대한 정보를 자세히 출력한다.

  • --version
    명령어의 버전 정보를 출력한다.

[사용예시]
# chgrp admin alin.jpg
# chgrp -R ihd ~posein

📋 umask

파일이나 디렉토리 생성 시 부여되는 기본 허가권을 지정한다.
umask 명령어를 실행하면 설정된 umask값을 확인 할 수 있다.
파일 생성 시 666, 디렉토리 생성 시 777에서 설정한 umask 값을 뺀 값으로 기본 하가권이 지전된다.
$ umask [option] [value]

주요 옵션

  • -S
    umask 값을 문자로 표기한다.
[사용예시]
$ umask 022
$ umask u=rwx, g=rw, o=rw
(= $umask 011)

umask의 연산법은 추후 포스팅 예정

📋 ln

하드 링크 또는 심볼릭 링크를 생성한다.

  • 하드 링크 : 옵션 없이 실행
    cp -l 명령어를 실행해서 생성 가능
  • 심볼릭 링크 : -s 옵션을 사용하여 실행
    cp -s 명령어를 실행해서 생성 가능

하드 링크와 심볼릭 링크의 차이는 추후 포스팅 예정

주요 옵션

  • -s (--symbolic)
    심볼릭 링크 생성 시 사용한다.
  • -v (--verbose)
    링크를 만드는 정보를 자세히 출력한다.
  • -f (--force)
    링크 파일 존재 시 삭제하고 생성한다.
[사용예시]
$ ln joon.txt j
$ ln -s joon.txt j
$ ln -s /etc/xinetd.d x

📚 결문

그래도 스스로 정리하니 꼼꼼하게 알 수 있는거 같다.

profile
인생은 짧고... 열심히 해라

1개의 댓글

comment-user-thumbnail
2022년 10월 16일

터미널 명령어들 너무 깔끔하고 보기 쉽게 잘 정리되어 있네요!
잘 봤습니다ㅏ:)

답글 달기