파일의 종류
일반 파일
- 데이터를 저장하는 데 주로 사용
- 각종 텍스트 파일, 실행 파일, 이미지 파일 등
디렉토리
- 리눅스에서는 디렉토리도 파일로 취급
- 해당 디렉토리에 저장된 파일이나 하위 디렉토리에 대한 정보 저장
심볼릭 링크
- 원본 파일을 대신하여 다른 이름으로 파일명을 지정한 것
장치파일
- 리눅스에서는 하드디스크나 키보드같은 각종 장치도 파일로 취급
🦖 파일의 종류 확인 : 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 → 커서가 위치한 행의 아래쪽에 붙이기
네임드 버퍼 사용하기
- 언네임드 버퍼
- yy나 dd, 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)
'컴퓨터 활용(한글, 오피스 등) > 50_2.운영체제_리눅스' 카테고리의 다른 글
[Vim]클립보드 복사&붙여넣기(Copy&Paste Clipboard) (0) | 2024.11.14 |
---|---|
리눅스 vi 에서 주로사용하는 명령어 정리 (1) | 2024.11.14 |
리눅스 사용자 kill (0) | 2024.02.20 |
virtualbox rocky Resize disk (1) | 2024.02.06 |
Rocky Linux - 디스크 추가 GPT 파티션 설정 [Parted + LVM] (1) | 2024.02.06 |