2023.10.26 TIL
file
$ file .profile
.profile: ASCII text
$ file downloads
downloads: directory
/
..
🦖 서브 디렉토리 확인 : ls
$ ls -F /
bin/ dev/ tmp/ usr/ 등등
→ /
디렉토리의 서브 디렉토리
🦖 작업 디렉토리 : .
pwd
현재 작업중인 디렉토리
🦖 홈 디렉토리 : ~
각 사용자에게 할당된 디렉토리, 처음 사용자 계정을 만들 때 지정
~user1
== /home/user1
/root
→ root 계정의 홈 디렉토리 == /
/tmp
→ 시스템 사용 중 발생하는 임시 데이터가 저장됨. 재시작하면 모두 삭제됨
/
로 시작/
가 아닌 문자로 시작directory | 절대 경로명 | 상대 경로명 |
---|---|---|
/ | / | ../.. |
/home | /home | .. |
/boot | /boot | ../../boot |
/lib | /usr/lib | ../../usr/lib |
/ls | /bin/ls | ../.../bin/ls |
.
로 시작하면 숨김 파일로 간주한다🦖 디렉토리 이동하기 : 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로 변경
🦖 파일 삭제하기: rm
rm data2
-i
옵션 → 진짜 삭제할건지 물어봄
🦖 디렉토리 삭제하기: rm -r
rm -r temp3
→ rmdir와 달리 temp3가 비어있지 않아도 삭제
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 명령어 파일의 경로 출력
시작 → 명령 모드(커서 이동, 페이지 이동, 글자 삭제, 행 삭제 등)
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)