12일차 - 리눅스 (파일검색/vim편집기/퍼미션)

Jk Lim·2023년 4월 25일
0

MLOps 부트캠프

목록 보기
11/34
post-thumbnail

12일차는

  1. 파일 내용 검색 관련 명령어
  2. vim 편집기
  3. 퍼미션을 학습하였다.

1. 파일 내용 검색

(1) grep

  • 특정 문자 또는 패턴을 검색
Option설명
-i검색 패턴 대소문자 무시
-l매칭되는 패턴이 있는 파일 이름 출력
-n매칭되는 줄 번호 표시
-v검색 패턴을 제외하고 검색
-c검색 패턴과 매칭 되는 줄 개수 출력
-w단어 단위로 검색
  • egrep = grep -E
[user@localhost ~]$ grep -E "root|bash" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
user:x:1000:1000:user:/home/user:/bin/bash
[user@localhost ~]$ egrep "root|bash" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
user:x:1000:1000:user:/home/user:/bin/bash
  • fgrep : 특수문자를 찾아야 할 때 사용. 정규표현식을 무시 (grep에서도 찾을수는 있음)
[user@localhost ~]$ grep root aaa
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
\^root
^root
[user@localhost ~]$ grep ^root
^C
[user@localhost ~]$ grep ^root aaa
root:x:0:0:root:/root:/bin/bash
[user@localhost ~]$ grep \^root aaa
root:x:0:0:root:/root:/bin/bash
[user@localhost ~]$ grep \\^root aaa
\^root
^root
[user@localhost ~]$ fgrep ^root aaa
\^root
^root
#############################
[user@localhost ~]$ grep -E 'n(o|e)' aaa   ### 'n(o|e)+'
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin

(2) find

  • 특정 디렉토리를 기준으로 하위 디렉토리를 검색 (find 경로 옵션 동작)
  • find는 명령어 다음에 바로 경로를 입력해야함.

옵션

  • -name : 정확하게 일치하는 파일명을 검색. 여러개 한번에 못함.
[root@localhost ~]# ls -l aaa bbb
-rw-r--r--. 2 root root 7  424 15:57 aaa
-rw-r--r--. 2 root root 7  424 15:57 bbb
[root@localhost ~]# find . -type f -name "aaa|bbb"
[root@localhost ~]# 
  • -perm : 특정 권한을 가진 파일 검색
[user@localhost ~]$ find . -type f -perm 0200
[user@localhost ~]$ find . -type f -perm -0200 | head -5
./.bash_logout
./.bash_profile
./.bashrc
./.cache/gdm/session.log.old
./.cache/gdm/session.log
[user@localhost ~]$
### -0200
### 처음 0 : special permission
### 두번째 2 : user
### 세번째 0 : group
### 네번째 0 : other
### - : 0200이라는 권한이 있으면 찾아주는 필터링. 다른 권한 포함(마이너스 기호가 없으면 절대 값)
  • exec : 찾은 파일에 적용할 명령어 (exec + 명령어 + {} \;)
[root@localhost ~]# touch a.jpg b.jpg c.jpg
[root@localhost ~]# ls -l *jpg
-rw-r--r--. 1 root root 0  425 11:10 a.jpg
-rw-r--r--. 1 root root 0  425 11:10 b.jpg
-rw-r--r--. 1 root root 0  425 11:10 c.jpg
[root@localhost ~]# find . -type f -name aaa -exec rm -f {} \;
[root@localhost ~]# ls -l aaa
ls: cannot access aaa: 그런 파일이나 디렉터리가 없습니다
[root@localhost ~]#
  • -newer : 해당 파일보다 나중에 생성된 파일 찾기
  • -empty : 빈 파일이나 디렉토리 찾기
    (참고) nouser 필터 : 계정 생성, 계정 홈디렉토리 권한 확인, 계정 삭제, 남아있는 홈 디렉토리 권한 확인(nouser 상태)
[root@localhost ~]# useradd test1
[root@localhost ~]# grep test1 /etc/passwd
test1:x:1001:1001::/home/test1:/bin/bash
[root@localhost ~]# ls -ld /home/test1
drwx------. 3 test1 test1 78  425 11:02 /home/test1
[root@localhost ~]# userdel test1
[root@localhost ~]# grep test1 /etc/passwd
[root@localhost ~]# ls -ld /home/test1
drwx------. 3 1001 1001 78  425 11:02 /home/test1
[root@localhost ~]# find / -type f -nouser
find: ‘/proc/6712/task/6712/fdinfo/5’: 그런 파일이나 디렉터리가 없습니다
find: ‘/proc/6712/fdinfo/6’: 그런 파일이나 디렉터리가 없습니다
/var/spool/mail/test1
/home/test1/.bash_logout
/home/test1/.bash_profile
/home/test1/.bashrc

2. vim 편집기

vim 편집기 모드

  1. Command 모드
  2. Last line 모드 (:)
  3. Edit 모드 (i)
  • 2,3모드에서 1모드로 가려면 esc
  • 2,3모드끼리는 직접 이동 불가 (1모드를 거쳐야 함)

(1) 종료

(Last Line 모드)
1. 종료 : q (q!는 저장 안하고 종료)
2. 저장하고 종료 : wq / x
3. 저장 : w (w + 파일명 : 다른이름으로 저장)
(Command 모드)
1. 저장하고 종료 : 대문자 ZZ (shift+zz)

(2) Edit

(Command 모드 -> Edit 모드로 진입하는 단축키 : iIaAsSoO)

단축키기능
i커서의 위치에서 바로 입력
I커서위치 라인 제일 앞으로 이동 후 입력
a커서의 위치 한칸 뒤에서 입력
A커서위치 라인 제일 뒤로 이동 후 입력
s커서 위치에서 문자를 삭제 후 입력 (ns : 커서의 위치부터 n개의 문자를 삭제)
S커서위치 라인 전체 삭제 후 입력
o커서 위치의 아래 라인으로 들여쓰기 후 입력 (no : 커서의 위치부터 n개의 라인을 들여쓰기 후 입력)
O커서라인 위쪽으로 들여쓰기 후 입력

(3) 커서 이동

(Last Line 모드)

단축키기능
방향키 or hjkl이동
^라인의 시작점
$라인의 마지막
H화면의 가장 첫번째 줄
L화면의 가장 마지막 줄
M화면의 중간 줄
gg문서의 가장 첫번째 줄
G문서의 가장 마지막 줄
w다음 단어로 이동
b이전 단어로 이동

(4) 라인 이동

(Last Line 모드에서)
set nu : 라인번호 표시
set nonu : 라인번호 제거
n(숫자입력) : 해당 라인으로 이동

(5) 삭제, 복사, 잘라내기, 붙여넣기

(Command 모드에서)

단축키(삭제)기능
x커서뒤의 문자 삭제 (nx : n개의 문자 삭제)
X커서 앞쪽의 문자 삭제 (nX : n개의 문자 삭제)
dd커서 줄 삭제 (ndmd : n * m dd)
D커서 다음부터 줄 마지막까지 삭제
dw커서 다음 단어 삭제
d^커서부터 라인의 맨 앞까지 삭제
d$커서부터 라인의 맨 뒤까지 삭제
dH커서에서부터 화면 출력된 가장 위 라인까지 삭제
dM커서에서부터 화면 출력된 중간 라인까지
dL커서에서부터 화면 출력된 가장 아래 라인까지 삭제
dgg커서에서부터 문서 가장 위쪽까지 삭제
dG커서에서부터 문서 가장 아래쪽까지 삭제
  • yy, Y (yank) : 복사 (줄단위)
  • cc, C (cut) : 잘라내기 (잘라낸 후 바로 입력모드로 바뀜)
  • p : 붙여넣기
  • 삭제, 복사, 잘라내기는 커서 이동 단축키와 조합해서 쓸 수 있다.

참고

(Last Line 모드에서)

  • n(숫자입력) : 해당 라인으로 이동
  • 1,10d : 1~10번 라인까지 삭제
  • 8,10y : 8~10번 라인까지 복사 → 원하는 위치로 이동 후 p(붙여넣기)
  • 1,5c : 1~5번 라인까지 잘라내기 → esc로 탈출하면 화면에 출력 → 이동후 p
  • 1,5c : 1~5번 라인까지 잘라내기 → 글자 입력 →엔터 / esc → 잘라낸 위치에 글자입력
  • 1,$s/nologin/hahaha/g : 1번줄부터 마지막줄까지 nologin이라는 단어를 hahaha로 모두 변경
  • 1,$s/nologin/hahaha/gc : 대화형 (y/n/a/q/l/^E/^Y) yes/no/all/quit/alone/
  • 2,5 co 10 : 2~5번째 라인 내용 복사해서 10번째 라인 다음에 붙여넣기 (11번째에)
  • 2,5 m 10 : 2~5번째 라인 내용 잘라내고 10번째 라인 다음에 붙여넣기 (11번째에)

파일 두개를 동시에 실행 : vim aaa bbb

(Last Line 모드)
n : 다음 파일
N : 이전 파일
(Last Line 모드)
vs : 좌우 화면 분할
sp : 상하 화면 분할
ctrl + ww : 문서간 이동 토글


3. 퍼미션


u + g + o = a (user + group + other = all)
rwx (읽기 쓰기 실행)
r : read : 2^2 =4
w : write : 2^1=2
x : excute : 2^0=1
-: none : 0

퍼미션은 심볼릭과 넘버릭으로 명시할 수 있다.

심볼릭 : - - - x / - w - / - w x / r - - / r - x / r w - / r w x
넘버릭 : 0 / 1 / 2 / 3 / 4 / 5 / 6 / 7

(1) 파일의 읽기, 쓰기, 실행

  • 파일 이름 확인 → 파일의 inode 확인 → inode에 따른 파일의 meta data 접근 → 파일이 저장된 저장매체의 sector 접근

실행의 원리를 이해하는 것이 필요. ⇒ 실행은 엑세스다.

파일의 실행은 확장자가 아닌 파일의 시작 데이터에 있는 파일 시그니처를 읽고 그것에 맞는 응용프로그램을 연결시켜 동작한다.

이 때, 파일 시그니처를 읽어들이기 위해서는 파일의 데이터에 직접 접근이 가능해야 하고, 결국 실행은 파일 데이터에 접근해서 파일 시그니처를 읽는 행위로 볼 수 있다.

실행 권한 존재 여부에 따라 파일 시그니처에 접근하거나 접근하지 못하는 것으로 나뉠 수 있다.

(2) directory의 읽기, 쓰기, 실행

directory 구조의 이해

  • directory는 metadata + data block으로 구성되어 있고 data block에는 자신이 보유한 파일 및 디렉토리 정보를 가지고 있다. 이 때, 이 정보는 inode = filename / inode = directory name으로 구성되어 있다.

(읽기)

  • directory의 읽기는 이 data block을 읽을 수 있는지에 대한 권한을 부여한다.
  • 이 data block을 읽으면 directory안에 있는 파일과 디렉토리 정보가 나오므로 관련 명령어는 ls 명령어랑 닿아 있다. 즉, directory 권한 중에서 읽기 권한이 없으면 ls 명령을 사용할 수 없다.

(쓰기)

  • directory의 쓰기는 data block에 저장된 내용을 수정한다는 의미이다.
  • data block이 수정되는 경우는 directory 안에 파일 및 디렉토리를 생성, 복사, 삭제, 이동 할 때이다. 즉, 관련 명령어는 touch, >, >>, mkdir, cp, mv, rmdir, rm 명령어 등이 있다. 결국 directory에 쓰기 권한의 유무는 위 명령어를 사용할 수 있는 유무와 연관이 있다.

(실행)

  • directory의 실행은 data block의 정보가 있는 곳으로 access하는 것을 의미한다. 즉, director의 실행은 access를 의미하고 관련 명령어는 cd 명령어와 연관이 있다. directory의 실행 유무는 cd 명령을 통해 directory에 접근 할 수 있는지의 여부로 결정된다.

(3) chmod : 권한 변경 명령어

[root@localhost ~]# ls -l aaa
-rw-rw----. 1 root root 2259  425 12:12 aaa
[root@localhost ~]# chmod ug-rw aaa
[root@localhost ~]# ls -l aaa
----------. 1 root root 2259  425 12:12 aaa
[root@localhost ~]# chmod ug+rwx aaa
[root@localhost ~]# ls -l aaa
-rwxrwx---. 1 root root 2259  425 12:12 aaa
[root@localhost ~]# chmod a-rwx aaa
[root@localhost ~]# ls -l aaa
----------. 1 root root 2259  425 12:12 aaa
  • chmod로 권한을 변경하면 파일/directory의 메타 데이터가 변경되는 것
  • 메타데이터 변경 → change 시간이 변경됨 (메타데이터 : stat 명령어로 확인 할 수 있는 대부분의 데이터)

(4) umask

  • 파일/directory 생성시 default permission 설정 값
  • 파일의 full permission : 666 (파일은 실행 권한이 없음)
  • directory의 full permission : 777
[root@localhost ~]# umask
0022
### 실제 적용되는 permission = (full permission - umask 값)
### 실제 적용되는 file permission : 644 
### 실제 적용되는 directory permission : 755

연습 : etc 폴더에 umask 문구가 포함된 파일 찾기 2가지

[root@localhost ~]# grep -il umask /etc/* 2> /dev/null
/etc/bashrc
/etc/csh.cshrc
/etc/login.defs
/etc/profile
[root@localhost ~]# find /etc -type f -exec grep -il umask {} \;
/etc/pki/tls/certs/Makefile
/etc/pki/tls/certs/make-dummy-cert
/etc/pki/tls/certs/renew-dummy-cert
/etc/security/namespace.init
/etc/bashrc
/etc/csh.cshrc
/etc/profile
/etc/login.defs
/etc/X11/xinit/Xsession
/etc/bash_completion.d/git

0개의 댓글