Untracked 상태 Tracked 상태
‘추적되고 있지 않은’, 이 상태는 파일이 git에 의해서 변동사항이 전혀 추적되고 있지 않은 상태라는 뜻이다.
ex_ 파일을 새로 생성하고 한번도 git add 해주지 않은 상태
파일이 git에 의해 변동사항이 추적되고 있는 상태. 3가지 종류 有
- staged 상태 
- Unmodified 상태
- Modified 상태

staged 상태

파일의 내용이 수정되고 나서 staging area에 올라와 있는 상태. (스테이징 된. stage area에 올려진)

  • 새로 생성한 파일에 내용을 쓰고 git add를 해줌
  • 한 번이라도 커밋에 포함 됐었던 파일이라도 내용을 수정하고 git add를 해줌

Unmodified 상태

현재 파일의 내용이 최신 커밋의 모습과 비교했을 때 바뀐게 전혀 없는 상태. (수정되지 않은, 변한게 없는) 커밋을 한 직후에 working directory 안에 모든 파일들의 이 상태이다.

Modified 상태

최신 커밋의 모습과 비교했을 때 조금이라도 바뀐 내용이 있는 상태면 그 파일은 modified(수정된) 상태이다.

  • Add the file : untracked 상태의 파일을 처음으로 git add 해주면 staged 상태가 된다.
  • Edit the file : 최신 커밋과 비교했을 때 차이가 없는 Unmodified 상태의 파일 내용을 수정하면 Modified 상태가 된다.
  • Stage the file : Modified 상태의 파일을 git add 해주면 staged 상태가 된다.
  • Remove the file : 파일을 삭제하면 당연히 git에서 더 이상 인식하지 못한다.
  • Commit : 커밋을 하면 staging area에 있던 파일들이 커밋에 반영되고, 모든 파일들은 최신 커밋과 차이가 없게 되니 Unmodified 상태가 된다.

+여담

  • git help
  • man git-

위의 커맨드들을 사용하면 커맨드의 사용법(공식 매뉴얼)에 대해서 알 수 있다. 공식 매뉴얼 화면에서 나갈 땐 q 를 눌러 나갈 수 있다.

$ git help add
$ man git-add

'코린이 개념잡기 > GIT' 카테고리의 다른 글

push와 pull  (0) 2024.12.08
staging area에서 파일 제거하기  (0) 2024.12.08
git status  (0) 2024.12.08
커밋과 레포지토리  (1) 2024.12.08
GIT이란  (1) 2024.02.02

커밋(commit)

프로젝트 디렉토리의 특정 모습을 하나의 버전으로 남기는 행위 & 결과물

레포지토리(repository)

커밋이 저장되는 곳

레포지토리 만들기

$ git init

.git이라는 디렉토리가 생긴걸 확인 할 수 있는데 이게 바로 레포지토리이다. 여기서 git이 어떤 복잡한 작업을 함으로써 버전관리를 할 수 있다.

커밋하기

처음 커밋을 할 때엔 꼭 해야하는 것이 있다. 깃에게 commit한 사람을 알려주는 것이다. 그래야 나중에 누가 커밋햇는지 알 수 있다.

$ git config user.name "사용자 이름"

$ git config user.email "사용자 이메일주소"

$ git add 파일이름

$ git commit -m "남길 메세지"
  • config : 설정하다, 구성하다.
  • commit : 행하다, 기록하다.

git add를 하지 않고 commit을 하면 화면과 같은 error가 발생한다.
root-commit 첫번째 커밋이라는 뜻, 그리고 그 옆에는 내가 남긴 메세지(create ~)가 보인다.
2개의 파일이 변경됐고,
calcul.py의 6줄과 license의 1줄을 합쳐 총 7줄의 내용이 추가 됐다는 뜻이다.

+여담

git은 내부적으로 크게 3가지 종류의 작업 영역을 두고 동작한다.

  1. working directory = working tree
  2. staging area = index
  3. repository

첫번째 작업 영역인 working directory는 작업을 하는 프로젝트 디렉토리를 말한다. 위에 상황에선 MathTool 디렉토리가 working directory가 된다.

두번째 작업 영역인 staging area는 git add를 한 파일들이 존재하는 영역이다. 커밋을 하게 되면 staging area에 있는 파일들만 커밋에 반영된다.

세번째 작업 영역인 repository는 working directory의 변경 이력들이 저장되어 있는 영역이다. 커밋들이 저장되는 영역이라는 뜻인데 풀어서 이야기 해보면

  • working direcrory에서 무언가 작업을 하고,
  • 작업한 파일들을 git add 해주고,
  • 커밋을 하면 staging area에 있던 파일들의 모습이 마치 영화의 한 장면, 스냅샷(snapshot)처럼 이 repository에 저장된다.

  1. working directory에서 A.txt 파일과 B.txt 파일을 작성하고
  2. git add A.txt와 git add B.txt를 실행해서 A.txt, B.txt 둘다 staging area에 올렸다.
  3. 그 다음 git commit -m "Ver_1"를 실행해서 staging area에 있는 파일들을 가져와 커밋으로 남겼다.

  1. working directory에서 A.txt 파일 내용에 Python~ 이라는 단어를 추가, B.txt 파일 내용에 Morning이라는 단어를 추가
  2. 그런데 이번에는 git add B.txt만 실행해서 B.txt파일만 staging area에 올렸다
  3. 그 다음 git commit -m "Ver_2"로 두번째 커밋을 했다.

이전 그림과 다른 점은 A.txt는 staging area에 올리지 않고 B.txt만 staging area에 올렸다는 점인데 지금 레포지토리의 결과는

  • A.txt는 staging area에 있던 모습, 수정하기 이전의 모습이 Ver_2에 반영
  • B.txt는 staging area에 있던 모습, 하지만 A.txt와는 달리 수정한 이후의 모습이 Ver_2 커밋에 반영되었다.

A와 B 둘 다 working directory에서 수정했다는 사실은 같지만, staging area에 올렸는지 여부에 따라 그 최신 모습이 커밋에 반영되는지 달라지는 것이다. 

'코린이 개념잡기 > GIT' 카테고리의 다른 글

push와 pull  (0) 2024.12.08
staging area에서 파일 제거하기  (0) 2024.12.08
파일의 4가지 상태  (0) 2024.12.08
git status  (0) 2024.12.08
GIT이란  (1) 2024.02.02

복사, 붙여넣기

cp(copy) 커맨드는 아규먼트로 파일이나 디렉토리 경로 두 개를 받는다.

첫번째 아규먼트는 복사할 대상의 경로, 두번째 아규먼트는 복사할 위치이다.

여기서 두번째 아규먼트 이미 존재할 경우 그 안으로 복사, 아니라면 두번째 아규먼트 이름을 가진 파일 또는 디렉토리가 생성된다.

  • cp [원본 파일 이름] [옮길 파일 이름]
  • cp [원본 파일 위치/원본 파일 이름] [옮길 파일 위치/옮길 파일 이름]
  • cp [원본 파일 이름] [옮길 파일 위치]
  • cp -r [디렉토리명] [옮길 파일 위치]

동일 디렉토리 안에서 파일 복사하기

reports $ ls /* reports 디렉토리가 현재위치, 리스트를 보여줘 */
Aug  Jul  Oct  Sep

$ cd Jul /* Jul 디렉토리로 이동 */
$ ls /* 리스트 보여줘 */
finances.txt  performance.txt

$ cat finances.txt /* finance 파일 내용 보여줘 */
2024 Jul Finance Report%
$ cat performance.txt /* performance 파일 내용 보여줘 */
2024 Jul Performance Report% 

$ cp finances.txt finances2.txt
/* cp = 복사하겠다. finances파일을 finances2 라는 이름으로 */

$ ls /* 리스트를 확인해보니 복사가 잘 되어있다. */
finances.txt  finances2.txt  performance.txt

$cat finances2.txt /* finances2 파일의 내용을 살펴보자 */
2024 Jul Finance Report%

다른 디렉토리로 파일 복사하기

/* Jul 디렉토리 안에 있는 상태에서 Aug로 파일을 복사해보자. */

Jul $ ls ../Aug
finances.txt  performance.txt

cp 커맨드는 mv 커맨드와 비슷하게 목적지에 똑같은 이름의 파일이 있으면 덮어쓴다. 덮어쓰기를 방지하고 싶다면 이 때도 i 옵션을 사용하면 된다.

Jul $ cp -i finances.txt ../Aug
/* Jul 안에 있는 finances 파일을 Aug 디렉토리로 복사하라는 의미 */
overwrite ../Aug/finances.txt? (y/n [n])?
/* 파일을 덮어쓸 것인지 묻는다. */

디렉토리 복사하기

Jul $ cd .. /* Jul 디렉토리에서 부모 디렉토리로 이동 */
reports $ ls
Aug  Jul  Oct  Sep
$ cp Jul Jul_copy /* Jul 디렉토리를 Jul_copy로 복사하기 */
cp: Jul is a directory (not copied)
/* 복사가 되지 않는다는 멘트가 출력된다. */

디렉토리를 복사할 땐 r(recursive)옵션을 사용해야 한다.

$ cp -r Jul Jul_copy
$ ls
Aug  Jul  Jul_copy  Oct  Sep

삭제

rm(remove)커맨드는 삭제할 파일 또는 디렉토리 경로를 아규먼트로 받는데 경로를 여러개 줄 수 있다.

  • rm [지울 파일 이름]
  • rm -r [지울 디렉토리명]

파일 지우기

$ ls
reports  warning
$ cd warning
$ ls
test1.txt  test2.txt

$ rm test1.txt
$ ls
text2.txt

디렉토리 지우기

warning $ cd ..
$ ls
reports  warning

$ rm warning
rm: warning: is a directory
/* 디렉토리를 지우려고 하니 오류가 발생한다. */

복사 할 때와 마찬가지로 디렉토리를 지울 때는 r 옵션을 사용해야 한다.

$ rm -r warning
$ ls
reports

mv나 cp는 목적지에 똑같은 이름을 가진 파일이나 디렉토리가 있으면 그걸 덮어쓰기 때문에 덮어쓰기 전에 확인을 하기 위해서 i 옵션을 사용했다. rm에도 i 옵션이 있는데 각 파일을 지우기 전에 확실히 지울것인지를 물어본다.

$ cd reports
$ ls
Aug  Jul  Jul_copy  Oct  Sep

$ rm -ri Jul_copy
/* 확실히 지울건지 묻는 i 옵션과, 디렉토리를 지우기 위한 r 옵션을 같이 사용했다. */
examine files in directory Jul_copy? y
/* Jul_copy 안에 있는 파일들을 하나씩 살펴볼건지 묻는다. yes를 하고 살펴보면 */

remove Jul_copy/finance2.txt? y
/* 각 파일을 지울것인지 묻는다. */
remove Jul_copy/performance.txt? y
remove Jul_copy/finance.txt? y
remove Jul_copy? y /* 디렉토리 자체를 지울건지도 묻는다. */

$ ls
Aug  Jul  Oct  Sep

디렉토리를 지울 때는 안에 뭐가 있는지 알고 지우기 때문에 i옵션이 그렇게 유용하지는 않지만 파일 하나씩 확인하며 지우고 싶다면 i 옵션을 사용할 수 있다. 반대로 파일을 지울것인지 확인하지 않고 바로 지우는 f옵션도 있다. 예를들어 읽기 전용 파일을 지울 때는 보통 이 파일을 지울 것인지 물어보는데 f옵션을 사용하면 물어보지 않고 바로 지운다.

그래서 특히 디렉토리를 지울 때는 rm -rf path/to/dir 등 r과 f 옵션을 같이 쓰는 경우가 많다.

'코린이 개념잡기 > 유닉스 커맨드' 카테고리의 다른 글

옮기기 , 이름 변경하기 : mv  (0) 2024.12.07
파일 내용 살펴보기  (0) 2024.12.07
CLI 텍스트 에디터 : Vim  (1) 2024.12.07
디렉토리와 파일 생성하기  (0) 2024.12.07
필수 디렉토리  (1) 2024.12.07

mv 커맨드는 아규먼트로 파일이나 디렉토리 경로 두 개를 받는다.

첫번째 경로는 작업할 대상의 경로, 두번째 경로는 이동할 목적지 또는 변경할 이름이다.

여기서 두번째 경로가 이미 존재하는 디렉토리의 경로일 경우 디렉토리 안으로 이동되고 그렇지 않으면 이름이 변경된다.

  • mv [원본 파일 이름] [바뀔 파일 이름]
  • mv [원본 디렉토리 이름] [바뀔 디렉토리 이름]
  • mv [이동할 디렉토리 이름] [이동할 디렉토리가 도착할 디렉토리 이름]
  • mv [옮길 디렉토리의 부모 디렉토리/옮기고자 하는 디렉토리] [옮기는 위치]
  •  

이미 존재하는 파일의 이름 바꾸기

reports $ ls
Jul  Aug  Sep

$ cd Sep /* sep 디렉토리로 이동 */
$ ls /* Sep 디렉토리의 리스트 확인 */
finances.txt    performane.txt

/* performane.txt를 performane2.txt 파일로 변경해주자 */
$ mv performane.txt performane2.txt 
/* performane.txt = 작업할 대상, performane2.txt = 변경할 이름 */

$ ls 
finances.txt    performane2.txt

이미 존재하는 디렉토리의 이름 바꾸기

Sep $ cd ..
/* 한단계 위에 있는 부모 디렉토리로 이동 */
$ ls
/* 부모 디렉토리로 이동한 뒤 리스트 확인 */
Jul  Aug  Sep

$ mv Sep Oct
/* 이미 있는 Sep이라는 디렉토리를 Oct로 이름 변경 */
$ ls
Jul  Aug  Oct

디렉토리 옮기기

$ mv Jul Aug
/* Jul 디렉토리를 Aug 디렉토리 안으로 이동한다는 뜻 */
$ ls
Aug  Oct

$ ls Aug
Jul  finance.txt  performance.txt

옮긴 디렉토리 다시 꺼내오기

$ ls
Aug  Oct

$ ls Aug
Jul  finance.txt  performance.txt

$mv Aug/Jul .
/* Aug디렉토리 안에 있는 Jul디렉토리를 .(현재위치)로 옮기겠다 */

$ ls
Aug  Jul  Oct

$ ls Aug
finance.txt  performance.txt /* Jul 디렉토리 사라짐 */

+주의사항

mv 커맨드는 똑같은 이름의 파일이 목적지에 있을 경우 아.묻.따 덮어쓴다.

$ ls
reports  warning

$ cd warning
/* warning 디렉토리로 이동 */

warning $ ls /* 리스트 확인 */
test1.txt  test2.txt

$ cat test1.txt /* test1.txt 파일의 안을 전체 다 보여줘 */
test file 1%
$ cat test2.txt
test file 2%

$ mv test1.txt test2.txt
/*test1 파일을 test2 파일에 덮어쓴다.*/

$ ls
tset2.txt

$ cat test2.txt
test file 1%
/* tset1의 파일이 덮어써지면서 안에 test2에 있던 내용이 test1의 내용으로 덮어써졌다. */

이런 현상을 방지하고 싶다면 i(interactive)옵션을 활용하면 된다. 만약 충돌이 있으면 사용자에게 어떻게 할 것인지를 묻는 것.

$ touch test1.txt /* test1 파일 생성 */
$ ls /* 리스트 확인 */
test1.txt  test2.txt

$ mv -i test1.txt test2.txt /* i 옵션을 사용해서 mv 커맨드 사용 */
overwrite test2.txt? (y/n [n])
/* 파일을 덮어쓸 것인지 묻는 멘트가 출력 덮어쓰려면 y, 취소는 n을 입력하자 */

overwrite test2.txt? (y/n [n]) n /* 덮어쓰기 취소 */
not overwritten /* 덮어쓰지 않았다. */

$ ls
test1.txt  test2.txt

mv 커맨드를 안전하게 사용하고 싶다면 i 옵션을 꼭 활용하자

'코린이 개념잡기 > 유닉스 커맨드' 카테고리의 다른 글

복사, 붙여넣기, 삭제 :cp, rm  (0) 2024.12.08
파일 내용 살펴보기  (0) 2024.12.07
CLI 텍스트 에디터 : Vim  (1) 2024.12.07
디렉토리와 파일 생성하기  (0) 2024.12.07
필수 디렉토리  (1) 2024.12.07
cat less head tail
파일을 조회할 때 굉장히 자주 사용하는 커맨드, 한꺼번에 출력 파일 내용을 페이지 단위로 나눠서 보여준다. 파일의 시작 부분 확인 파일의 끝 부분 확인
cat hello_world.txt less hello_world.txt head hello_world.txt tail hello_world.txt
내용을 전체 다 볼 수 있다. ⬆️,⬇️ : 한 줄 씩 이동가능
space, f : 다음페이지로
b : 이전페이지로
G : 마지막 페이지
g : 첫 페이지
q : 종료
파일의 처음 10줄이 보인다. 파일의 마지막 10줄이 보인다.
concatenate : 이어붙이다 파일 내용이 엄청 길다면 less로 나누어 보면 된다. head - n 5 hello_world.txt
파일의 처음 5줄이 보인다.
tail - 8 hello_world.txt
파일의 마지막 8줄이 보인다.
아규먼트를 이어서 써줄 수 있다.   출력할 줄 개수를 n 옵션의 아규먼트로 넘겨주면 된다.  

 

GUI 환경 : Microsoft Word, VS Code, Pycharm, 메모장 등 다양한 텍스트 에디터가 있다.
CLI 환경: Vim

Vim : ✅엄청나게 많은 기능과 단축키 ⛔모든걸 마우스 없이 키보드로 해결

$ mkdir ~/unix_practice
/* 유닉스 연습 디렉토리 생성 */
$ cd unix_practice
/* 유닉스 연습 디렉토리 이동 */
unix_practice $ vim
/* 아무 아규먼트 없이 실행하면 새로운 파일을 만들고, 파일 경로를 아규먼트로 주면 그 파일을 수정한다. */

vim 실행

여기서 글자를 작성하려고 키보드를 눌러봐도 글자는 작성되지 않는다. 지금은 입력모드가 아니기 때문에 텍스트를 입력할 수 없는데 Vim에는 네가지 모드가 있다.

일반모드
(Normal)
입력모드
(Insert)
비주얼모드
(Visual)
명령모드
(Command)
커서이동 텍스트 입력 텍스트 블록 지정 내용 저장
텍스트 붙여넣기   텍스트 복사 Vim 종료
작업취소      
esc i V, v :

사용자가 어떤 모드에 있는지에 따라 같은 키를 눌러도 다르게 해석된다. Vim을 처음 열면 일반모드로 실행되고, 다른 모드로 가려면 항상 일반모드를 거쳐야 한다.

모드별 이동할 때 단축키
입력(insert)모드로 변경 후 텍스트를 입력해보았다.

텍스트 복사, 잘라내기

입력(insert)모드로 글자를 작성 해준 뒤, 다시 일반모드로 나와준다. 그리고 복사를 시작하고 싶은 부분으로 커서를 이동한다. 이제 비주얼 모드로 전환하면 되는데, 줄 단위로 복사를 하고 싶으면 대문자 V, 글자 단위로 복사하고 싶으면 소문자 v를 사용한다.

만약 대문자 V를 이용해 줄을 복사하고, 커서를 움직여서 복사하고 싶은 줄들을 선택한 뒤, y 키를 누르면 복사가 된다. 그리고 커서를 원하는 위치에 두고 p를 누르면 복사가 된다.

잘라내기는 잘라내고 싶은 부분에 커서를 두고 V나 v + 커서를 움직여 잘라내고 싶은만큼 선택하고, d를 누르면 잘라내기가 된다. 붙여넣기는 똑같이 p를 누르면 된다.

한 줄씩 잘라내거나 복사할때는 비주얼모드로 갈 필요 없이 커서를 원하는 위치에 두고 yydd를 누르면 복사, 잘라내기가 가능하다. 여전히 붙여넣기는 p이다.

내용저장 및 Vim 종료

:(콜론)으로 명령모드에 들어왔다면 w와 q를 기억해주면 된다. w는 파일을 저장할 때 쓰이고, q는 Vim을 종료할 때 쓰인다.

새로운 파일을 작성중이라 파일에 이름이 없어 저장이 안된다는 의미이다. 그럴땐 오른쪽 사진처럼 파일의 이름을 만들어주면 된다.

만약 : w를 했는데 error가 난다면 이름을 만들어서 저장해주면 된다.

파일 저장이 잘 됐다는 표시

unix_practice $ ls
hello_world.txt reports

Vim을 유닉스 연습 디렉토리 안에서 실행했기 때문에 유닉스 연습 디렉토리에 파일이 저장됐다.

unix_practice $ vim hello_world.txt
/* 아무 아규먼트 없이 실행하면 새로운 파일을 만들고, 파일 경로를 아규먼트로 주면 그 파일을 수정한다. */

vim 후에 아규먼트를 주면 그 파일로 들어가 수정이 가능하고, 수정을 완료 한 뒤에는 :wq로 저장 후 Vim을 종료할 수 있다.

혹시 파일을 수정했는데 저장하지 않고 나가려고 한다면 이런식으로 에러가 뜨는데, 만약 저장을 안하고 Vim을 나가고 싶은 경우엔 !를 사용하면된다. :q! 그러면 변경사항이 저장되지 않고 Vim은 종료된다.

수정사항이 있는데 저장을 안하고 Vim을 종료하려고 할 경우

단축키 정리

  • 텍스트 입력: 입력 모드(i) → 텍스트 입력
  • 텍스트 한 줄 복사: 일반 모드 → 복사하고 싶은 줄에 커서 위치 → yy
  • 텍스트 한 줄 잘라내기: 일반 모드 → 잘라내고 싶은 줄에 커서 위치 → dd
  • 특정 영역 복사: 비주얼 모드(V는 줄 단위, v는 글자 단위) → 복사하고 싶은 영역 커서로 설정 → y
  • 특정 영역 잘라내기: 비주얼 모드(V는 줄 단위, v는 글자 단위) → 잘라내고 싶은 영역 커서로 설정 → d
  • 텍스트 붙여넣기: 일반 모드 → 붙여넣고 싶은 위치에 커서 위치 → p
  • 파일 저장: 명령 모드(:) → w + enter
  • 파일 저장 + vim 종료: 명령 모드(:) → wq + enter
  • vim 종료 (내용 저장되지 않음): 명령 모드(:) → q! + enter

'코린이 개념잡기 > 유닉스 커맨드' 카테고리의 다른 글

옮기기 , 이름 변경하기 : mv  (0) 2024.12.07
파일 내용 살펴보기  (0) 2024.12.07
디렉토리와 파일 생성하기  (0) 2024.12.07
필수 디렉토리  (1) 2024.12.07
디렉토리 구조와 파일 경로  (1) 2024.12.07

mkdir (make directory)

mkdir이라는 커맨드를 사용해서 아규먼트로 새로 만들 디렉토리 경로를 주면 디렉토리를 생성할 수 있다. 절대경로와 상대경로 모두 사용 가능하다.

$ mkdir ~/unix_practice
$ mkdir unix_practice

홈 디렉토리 안에 unix_practice라는 디렉토리를 만들라는 커맨드이다.

$ mkdir Jul Aug Sep

이어 붙여 작성해서 여러 파일을 만들 수도 있다.

touch (touch file)

파일에 손을 대서 파일의 마지막 접근 시간이나 수정 시간을 업데이트 하는 커맨드이지만 파일이 없으면 파일을 생성하기 때문에 파일을 생성할 때도 쓰이는 커맨드이다.

sep $ touch finances.txt performance.txt

spe 파일 안에 finances와 performance 텍스트 파일을 총 2개 생성했다는 의미이다. 만약 여기서 Jul이라는 파일로 이동해서 추가로 파일을 만들어준다고 하면

sep $ touch Jul/finances.txt Jul/performance.txt

..으로 부모디렉토리에 올라가서 Jul 디렉토리로 이동할수도 있지만 이렇게 작성하면 Jul 디렉토리에 바로 파일을 만들어 줄 수있다.

'코린이 개념잡기 > 유닉스 커맨드' 카테고리의 다른 글

파일 내용 살펴보기  (0) 2024.12.07
CLI 텍스트 에디터 : Vim  (1) 2024.12.07
필수 디렉토리  (1) 2024.12.07
디렉토리 구조와 파일 경로  (1) 2024.12.07
🔊명령어  (0) 2024.12.07

/bin

bin은 binary(바이너리)의 약자로, 컴퓨터가 실행할 수 있는 프로그램을 말한다. 커맨드를 입력하면 어떤 동작이 일어나는데 커맨드도 결국 어떤 프로그램입니다. 커맨드를 입력하면 커맨드에 해당하는 프로그램이 실행되는 것. 그리고 그 프로그램들의 일부는 바로 이 /bin 디렉토리 안에 있다.

$ ls -l /bin

/bin 디렉토리의 내용을 살펴보면, ls 같은 파일들이 보이는데, ls 커맨드를 입력하면 /bin 안에 있는 ls 프로그램이 실행되는 것이다.

/sbin

sbin은 bin과 비슷한데, 관리자 전용 프로그램들이 있다.

/etc

etc에는 컴퓨터 설정 파일들이 있는데, 각종 프로그램의 설정 파일, 관리자 권한 설정 파일 같은 것들이 있다.

/home 또는 /Users

/home(리눅스) 또는 /Users(맥 OS) 디렉토리에는 사용자들의 홈 디렉토리가 있다. 사용자의 홈 디렉토리는 사용자의 모든 파일을 저장해 놓는 곳이다.

/usr

usr은 사용자(user)에게 필요한 파일들을 저장하고 있다. /usr 안에도 각종 binary(프로그램 파일)를 저장하고 있는 bin 디렉토리가 있는데, /bin에는 컴퓨터가 시작하거나 자신을 수리하기 위해서 꼭 필요한 커맨드들이 있고, /usr/bin에는 컴퓨터가 필요하기보다는 사용자가 필요한 커맨드들이 있다. 그리고 /usr 안에는 local이라는 디렉토리가 있는데, 여기에는 사용자가 직접 설치한 프로그램과 관련된 파일들이 있다.

디렉토리 : 유닉스 운영체제에서는 폴더디렉토리라고 부른다. 디렉토리라는 용어에 익숙해지도록 하자.

유닉스 디렉토리 구조

  • 최상위 파일 안에는 여러 디렉토리와 파일이 존재한다.
  • 디렉토리 안에 디렉토리가 있을 때 안에있는 디렉토리를 하위 또는 자식 디렉토리라고 한다.
  • 바깥에 있는 디렉토리를 상위 또는 부모 디렉토리라고 한다.

root 최상위 디렉토리

루트 디렉토리는 유닉스 파일 시스템의 최상위 디렉토리로, 모든 파일과 디렉토리의 시작점이다. /로 표시되며, 시스템의 모든 파일과 디렉토리가 이 안에 위치한다

HOME 디렉토리

홈 디렉토리는 각 사용자의 개인 파일과 설정을 저장하는 디렉토리이다. /home 아래에 각 사용자의 이름으로 된 디렉토리가 생성되며, 사용자의 개인 파일이 여기에 저장된다. 사용자의 개인 파일들은 사용자 홈 디렉토리 안에 있고 컴퓨터에 설치된 프로그램이나 컴퓨터에 일반적으로 필요한 파일들은 홈 디렉토리 바깥에 존재한다.

사용자의 홈 디렉토리

개인컴퓨터엔 사용자가 하나일 테니지만 공유 컴퓨터엔 사용자 계정이 여러개 있을 수도 있다. 사용자마다 홈 디렉토리가 주어진다. 홈 디렉토리에는 각종문서나 바탕화면 파일, 다운로드 파일 등이 있다. ~로 표시한다. 특정 사용자의 home 디렉토리 까지의 경로를 줄여서 쓴 것이다.

파일 경로

/usr/bin 를 하나씩 풀어서 해석해보자면 / =root(최상위 폴더)의, usr/ = use폴더의, bin/ = bin폴더 라는 뜻이다.

taeho라는 사용자로 로그인 되어 있다면 home 디렉토리는 /home/taeho 라고 쓸 수 있고, 줄여서 ~로 표기할 수 있다. 만약 태호가 아닌 다른 사용자의 홈 디렉토리라도 ~로 표기되지만 문자열로 표기한다면 /home/codeit 이라고 할 수 있다. 그리고 줄여서 쓴 디렉토리 뒤에도 붙여서 사용할 수 있다. 

/home/taeho = ~
~/Documents = /home/taeho/Documents
~/Document/Projects = /home/taeho/Documents/Projects

절대경로

  • 디렉토리가 위치한 곳을 나타내는 가장 디테일하고 정확한 주소
  • 현재 위치해 있는 곳과 상관없이 늘 같은 의미 가짐

상대경로

  • 디렉토리가 위치한 곳을 현재 위치(워킹 디렉토리)를 기준으로 설명하는 것
  • 현재 위치에 따라 동일한 표현도 다른 의미로 사용 가능
  • 본인의 위치 : 
  • 부모의 위치(한 단계 위) : ..
  • 홈 : ~
$ cd ./Documents/Projects/Javascript

사실 상대경로를 사용할 때 앞에 ./는 안써줘도 된다.
경로가 /(루트)로 시작하지 않으면 자동으로 상대 경로로 인식하기 때문이다.

$ cd Documents/Projects/Javascript
$ cd Documents/Projects/Javascript 
에 위치해 있는데 Projects 안에 HTML 디렉토리로 이동하고 싶다면

$ cd ../HTML
혹은
$ cd ..
$ cd HTML

이렇게 이동할 수 있다.
$ cd Documents/Projects/Javascript
에서 Document의 형제 디렉토리인 Pictures 디렉토리로 이동하고 싶다면

$ cd ../../../Pictures
이렇게 이동해도 되지만 이럴땐 절대경로를 적는게 좀 더 쉽고 직관적이다.
$ cd ~/Pictures
홈에서 Pictures로 이동한다는 뜻이다.

 

+여담

만약 파일 / 디렉토리 이름에 공백이 있으면 어떻게 해야할까?

$ cd hello world
$ ls hello world

hello world가 두개의 아규먼트로 인식되기 때문에 실행했을때 오류가 난다. 이럴 때 해결방법은

1. '작은 따옴표' 사용

2. "큰 따옴표" 사용

3. \ 역슬래시 사용

$ cd 'hello world'
$ cd "hello world"
$ cd hello\ world

***파일이나 디렉토리 이름에는 애초에 공백을 사용하지 않는게 바람직하다.

이유? 공백이 들어가게 되면 커맨드를 입력할 때 쉽게 실수할 수 있고, 커맨드가 제대로 작동하도록 따로 신경을 써줘야 하기 때문이다. 공백 대신 _ 같은 기호를 사용하자.

'코린이 개념잡기 > 유닉스 커맨드' 카테고리의 다른 글

디렉토리와 파일 생성하기  (0) 2024.12.07
필수 디렉토리  (1) 2024.12.07
🔊명령어  (0) 2024.12.07
아규먼트(argument) 와 옵션(option)  (0) 2024.12.04
터미널과 shell  (1) 2024.12.04

+ Recent posts