[Linux] Linux file, directory | vi 설정, 사용법

pos++·2023년 11월 2일
0

Linux

목록 보기
3/16
post-thumbnail

2023.10.26 TIL

파일의 종류

일반 파일

  • 데이터를 저장하는 데 주로 사용
  • 각종 텍스트 파일, 실행 파일, 이미지 파일 등

디렉토리

  • 리눅스에서는 디렉토리도 파일로 취급
  • 해당 디렉토리에 저장된 파일이나 하위 디렉토리에 대한 정보 저장

심볼릭 링크

  • 원본 파일을 대신하여 다른 이름으로 파일명을 지정한 것

장치파일

  • 리눅스에서는 하드디스크나 키보드같은 각종 장치도 파일로 취급

🦖 파일의 종류 확인 : file

$ file .profile
.profile: ASCII text
$ file downloads
downloads: directory

Directory 계층 구조

  • 트리 구조
  • root directory : /
  • 상위 directory : ..

🦖 서브 디렉토리 확인 : ls

$ ls -F /
bin/ dev/ tmp/ usr/ 등등

/ 디렉토리의 서브 디렉토리

🦖 작업 디렉토리 : . pwd
현재 작업중인 디렉토리

🦖 홈 디렉토리 : ~
각 사용자에게 할당된 디렉토리, 처음 사용자 계정을 만들 때 지정

~user1 == /home/user1

/root → root 계정의 홈 디렉토리 == /

/tmp → 시스템 사용 중 발생하는 임시 데이터가 저장됨. 재시작하면 모두 삭제됨

경로명

절대 경로명

  • 항상 root directory부터 시작
  • /로 시작

상대 경로명

  • 현재 directory를 기준으로 시작
  • /가 아닌 문자로 시작
directory절대 경로명상대 경로명
//../..
/home/home..
/boot/boot../../boot
/lib/usr/lib../../usr/lib
/ls/bin/ls../.../bin/ls

File/directory naming rules

  • 알파벳, 숫자, -(붙임표), _(밑줄), .(마침표) 만 사용할 수 있다
  • 대소문자를 구분한다
  • .로 시작하면 숨김 파일로 간주한다

Directory 사용 명령

🦖 디렉토리 이동하기 : cd
절대 경로명으로 이동할 디렉토리 지정하기

user1@myubuntu:~$ cd tmp
user1@myubuntu:/tmp$ 

상대 경로명으로 이동할 디렉토리 지정하기

user1@myubuntu:/tmp$ cd ../usr/lib
user1@myubuntu:/usr/lib$ 

🦖 디렉토리 내용보기 : ls

-a → 숨김 파일을 포함하여 모든 파일의 목록 출력

-d → 디렉터리 자체의 정보 출력

-i → 첫 번째 행에 inode 번호를 출력

-l → 파일의 상세 정보를 출력
→ 필드(파일 종류, 파일 접근 권한, 하드링크의 개수, 파일 소유자, 파일이 속한 그룹, 파일 Byte 크기, 파일이 마지막으로 수정된 시간, 파일명)

-A...를 제외한 모든 파일 목록을 출력

-F → 파일의 종류를 표시(* : 실행 파일, / : 디렉토리, 0 : 심볼릭 링크)

-L → 심볼릭 링크 파일의 경우 원본 파일의 정보를 출력

-R → 하위 디렉토리의 목록까지 출력

같이 사용도 가능 → ls -aF

디렉터리의 자체 정보 출력 → ls -ld /

파일 존재여부 확인 → ls game

ls명령의 심벌릭 링크 : dir, vdir

  • dir == ls
  • vdir == ls -l

🦖 디렉토리 만들기 : mkdir

동시에 여러개 만들기 가능 → mkdir temp1 temp2 temp3

중간 디렉토리 자동으로 만들기 → -p 옵션 사용
mkdir -p temp/mid/han
→ temp에 mid 디렉토리가 없을 경우 temp 밑에 mid를 만들고 mid 밑에 han을 만들어줌

🦖 디렉토리 삭제하기 : rmdir
디렉토리가 비어있지 않으면 삭제 불가

파일 다루기

🦖 파일 내용 연속 출력하기 : cat

행 번호 붙여서 출력 → cat -n file1

🦖 화면 단위로 파일 내용 출력하기 : more

more [option] file1

space → 다음 화면 출력, Enter: 한 줄씩 스크롤

개선된 화면 단위로 파일 내용 출력하기 : less

j → 한 줄씩 다음 행으로 스크롤, k: 한 줄씩 이전 행으로 스크롤, control+f: 다음 화면으로 이동, ctrl+b: 이전 화면으로 이동

🦖 파일 뒷부분 출력하기 : tail

tail [option] /etc/services

+행번호 → 지정한 행부터 끝까지 출력

-숫자 → 화면에 출력할 행의 수를 지정(default: 10)

-f → 파일 출력을 종료하지 않고 주기적으로 계속 출력

🦖 파일/디렉토리 복사하기: cp

파일 복사하기
-i → file2가 존재하면 덮어쓸 것인지 물어본다
-r → 디렉터리를 복사할 때

다른 이름으로 복사하기
cp text1 temp/tex2 → text2라는 이름으로 저장됨
cp /etc/hosts /etc/services temp → temp에 /etc/hosts와 /etc/services 복사

디렉토리 복사하기: cp -r
cp -r temp temp2

🦖 파일 이동하기: mv

mv text1 temp/data2 → 파일명을 data2로 바꿔서 temp로 이동

💡 파일을 파일로 이동하기 == 원본 파일의 파일명을 다른 파일명으로 바꾸기
mv text1 data1 → 파일명을 data1로 변경

파일 여러개 이동하기
mv temp/data1 temp/data2 . → pwd로 두개의 파일 이동

-i → 두 번째 인자에 지정한 파일명이 이미 존재할 경우 덮어서 이동할 것인지 물어봄

💡 디렉토리를 디렉토리로 이동하기 == 원본 디렉터리 이름을 다른 이름으로 바꾸기
mv temp2 temp1 → 디렉토리명을 temp1로 변경

  • 이미 temp1이 존재하는 경우, temp2가 temp1 아래로 이동

🦖 파일 삭제하기: rm

rm data2

-i 옵션 → 진짜 삭제할건지 물어봄

🦖 디렉토리 삭제하기: rm -r

rm -r temp3 → rmdir와 달리 temp3가 비어있지 않아도 삭제

파일 다루기

파일 링크

  • 하드링크: 기존 파일에 새로운 파일명을 추가로 생성
    • inode 번호가 원본 파일과 같다
  • 심볼릭 링크: 원본 파일을 가리키는 새로운 파일을 생성
    - 파일명 뒤에 원본 파일명이 표시된다
    - inode 번호가 원본 파일과 다르다
    - 심볼릭 링크 파일의 내용 : 원본 파일의 경로
    - 원본 파일이 삭제되면 심볼릭 링크로 연결할 수 없다

리눅스 파일의 구성

  • 파일 = 파일명 + inode + 데이터 블록
  • 🦖 파일의 inode 번호는 ls -i 로 확인 가능

🦖 하드링크, 심볼릭링크 만들기 : ln

ln test lntest → 원본파일(test)의 링크파일(lntest.ln)을 생성

ln -s test lntest → 심볼릭 링크 파일(lntest.sl)을 생성

🦖 빈 파일 생성, 수정 시간 변경 : touch

touch test.cp → 빈 파일 생성

  • 이미 있는 파일인 경우 → 파일의 수정 시간이 현재 시간으로 변경됨

-t [[CC]YY]MMDDhhmm[.ss] 형식으로 시간 지정 가능

🦖 파일 내용 검색하기 : grep

grep root /etc/passwd → root라는 단어가 들어간 라인을 출력

grep -l hello *.c → hello라는 단어가 들어가고 확장자가 c인 파일의 파일명 출력

grep -n unix ~/*.txt → unix라는 단어가 들어간 (홈디렉토리 아래 확장자가 txt인 모든 파일들에서) 라인넘버 출력

-i → 대문자와 소문자를 모두 검색

-r → 하위 디렉토리를 포함한 모든 파일에서 검색

-l → 지정한 패턴이 포함된 파일명 출력

-n → 행 번호를 출력

🦖 파일 찾기 : find

find ~ -name hello.c → 홈디렉토리에서 hello.c라는 이름의 파일의 절대경로 출력

find /home -user user1 → /home 에서 user1이 소유자인 파일들의 절대경로 출력

find /tmp -user user1 -exec rm {} \; → /tmp에서 user1이 소유자인 파일들을 대상으로 rm 명령을 수행 (해당 파일들의 절대경로가 {} 위치에 삽입되어 명령이 수행되는것)

find /tmp -user user1 -ok rm {} \; → rm 명령 수행 전에 하나씩 확인할 수 있음

🦖 명령의 위치 찾기 : whereis, which

whereis ls → ls라는 명령의 바이너리 파일이나 매뉴얼 파일이 존재하는 경로 출력

which mv → alias나 PATH 환경변수로 지정된 경로에서 mv 명령어 파일의 경로 출력



vi 사용법

시작 → 명령 모드(커서 이동, 페이지 이동, 글자 삭제, 행 삭제 등)

i, l, a, A, o, O → 입력 모드

Esc → 명령 모드

:, /, ? → 마지막 행 모드

Enter, Esc → 명령 모드

vi file1.txt → 파일을 편집

명령 모드
i → 커서 앞(현재 커서 자리)에 입력
a → 커서 뒤(현재 커서 다음 자리)에 입력
o → 커서가 위치한 행의 다음 행에 입력

명령 모드
ZZ → 작업한 내용을 저장하고 종료

마지막 행 모드
:q, :q! → 저장하지 않고 종료
:wq, :wq! → 저장하고 종료
:w [filename] → 파일명을 지정하면 새 파일로 저장됨

커서 이동하기
k → 커서를 한 행 위로 이동
j → 커서를 한 행 아래로 이동
l → 커서를 한 글자 오른쪽으로 이동
h → 커서를 한 글자 왼쪽으로이동


^ → 커서를 현재 행의 처음으로 이동
$ → 커서를 현재 행의 마지막으로 이동
- → 커서를 앞 행의 처음으로 이동
+, Enter → 커서를 다음 행의 처음으로 이동

화면 이동하기
ctrl+u → 반 화면 위로 이동
ctrl+d → 반 화면 아래로 이동

특정 행으로 바로 이동하기
G → 파일의 마지막 행으로 커서 이동
50G → 50행으로 이동

내용 수정하기
r → 커서가 위치한 글자 수정
cw → 커서가 위치한 단어 수정

내용 삭제하기
x → 커서 위치의 글자를 삭제
dw → 커서 위치의 단어를 삭제
dd → 커서 위치의 행을 삭제(잘라내기)
D → 커서 위치부터 행의 끝까지 삭제

명령 취소하기
u → 명령을 취소

복사하기, 잘라서 붙이기
yy → 커서가 위치한 행을 복사
p → 커서가 위치한 행의 아래쪽에 붙이기

네임드 버퍼 사용하기

  • 언네임드 버퍼
    • yydd, p
  • 네임드 버퍼
    - "a, "b, "1 등 문자나 숫자의 형태
    - "ayy → 복사
    - "ap → 붙여넣기

검색하기

/문자열 → 문자열을 아래 방향으로 검색
?문자열 → 문자열을 위 방향으로 검색

n → 다음 문자열
N → 반대 방향의 다음 문자열 (이전 문자열)

바꾸기
:s/문자열1/문자열2 → 커서가 위치한 행에서 첫번째로 나오는 문자열1을 문자열2로 바꾸기
:s/문자열1/문자열2/g → 커서가 위치한 행에서 모든 문자열1을 문자열2로 바꾸기
:%s/문자열1/문자열2/g → 파일 전체의 모든 문자열1을 문자열2로 바꾸기

파일 읽어오기, 여러 파일 편집하기
:r file → 지정한 파일을 읽어들여 현재 커서 위치에 삽입
:e file → 지정한 파일로 전환 ( :w 를 한 뒤에!)

$ vi test.txt exec.txt memo.txt → 하나의 파일 작업을 마치고 :n으로 다음 파일로 이동

vi에서 shell 명령 사용하기
:! 명령어 → vi 작업을 잠시 중단하고 shell 명령을 실행. 다시 돌아오려면 Enter.
:sh → 잠시 vi를 빠져나가서 명령 여러개 사용. 다시 돌아오려면 exit.

기타 명령 키
control+l → 현재 화면을 다시 출력
control+g → 현재 커서 위치의 행 번호를 마지막 행에 출력

. → 바로 직전에 했던 명령을 반복 (== command+shift+z)

profile
밀린 TIL 업로드 조금씩 정리중...

0개의 댓글