본문 바로가기

LINUX

[SWING] Linux 02

과제 1

 

파일 사용 명령어

cat [옵션] 파일명

 

$ cat /etc/passwd

$ cat -n /etc/passwd

 

* -n : 파일 이름 앞에 행번호 출력

 

그 위치에 있는 파일을 출력한다.

간단한 파일 보기 명령어로 짧은 파일 보기에 적합하다.

 

 

 

more [옵션] 파일명

 

$ more /etc/services

$ more +10 /etc/services

$ more -10 /etc/services

 

파일의 내용을 한 화면씩 출력한다.

 

* +행번호

:  ~행부터.

지정한 행부터 출력한다.

행번호를 계산할 때 #을 기준으로 셈하고 공백은 포함하지 않는다.

 

 

* -행번호

: ~개의 행.

출력할 행 수를 지정한다. 

 

스페이스: 다음 페이지로 넘어가기 

엔터: 한 줄씩 넘어가기

B: 이전 페이지 넘어가기 ...back 1 page

F: 다음 페이지 넘어가기 ...skipping 10 lines

/문자열: 문자열 찾기

 

 

 

head [옵션] 파일명

 

$ head /etc/passwd

$ head -5 /etc/passwd

 

* -숫자 : 출력할 행 수 (디폴트 : 10)

= 파일의 앞부분부터 ~개의 행 출력

 

 

 

tail [옵션] 파일명

 

$ tail /etc/passwd

$ tail -5 /etc/passwd

 

* -숫자 : 출력할 행 수 (디폴트 : 10)

= 파일의 뒷부분부터 ~개의 행 출력

 

 

 

touch [옵션] 파일명

 

$ touch swing.txt

$ touch -c swing.txt

 

지정 파일이 존재하지 않는 경우 : 파일 생성

지정 파일이 존재하는 경우 : 지정 파일의 시간 정보 변경/갱신

 

* -c : 지정 파일이 없으면 아무 파일도 생성하지 않음

 

 

mv [옵션] 기존 파일명 새 파일명

 

$ mv swing.txt swing30.txt

 

=swing.txt 파일을 swing30.txt 디렉토리로 옮긴다.

 

$ mkdir test 

$ mv swing30.txt test 

$ mv -i swing30.txt test

 

=test 디렉토리를 만들고, swing30.txt 파일을 test 디렉토리로 옮긴다.

 

파일 이름 변경/이동

디텍토리 이름 변경 (이미 존재하는 디텍토리의 이름으로 변경할 시, 덮어씀)

 

* -i : 사용자로부터 확인받고 이동

 

 

cp [옵션] 원본파일명 복사파일명

 

$ cp swing30.txt security.txt

 

= swing30.txt 파일을 security.txt 파일로 복사한다.

 

$ cp -r test test2

 

= test 디렉토리를 test2 디렉토리로 복사한다.

 

특정 파일이나 디텍토리를 다른 이름으로 복사

 

* -i : 파일 덮어쓸 시 경고 메시지 출력

* -r : 디텍토리 복사

 

 

rm [옵션] 파일명/디텍토리명

 

$ rm -i security.txt

 

= security.txt 파일을 삭제하고 확인 메시지를 출력한다.

 

$ rm -r test2

 

= test2 디렉토리를 삭제한다.

 

지정 파일이나 디텍토리를 삭제 (한 번 삭제하면 복구 불가)

 

* -i : 확인 메시지 출력

* -f : 무조건 삭제

* -r : 디텍토리 삭제

 

 

 

 

 

접근 권한

 

group [사용자명]

 

사용자명 입력 시 > 입력한 사용자가 속한 그룹의 이름 출력

사용자명 미입력 시 > 현재 자신이 속해있는 그룹의 이름 출력

 

groupadd : 새로운 그룹 생성

groupdel : 기존 그룹 삭제 (그룹 안에 소속되어 있는 계정이 있을 경우 삭제 불가)

groupmod : 그룹 설정 변경

 

sudo 명령어를 사용해서 root 권한을 이용해 명령어를 실행해야 한다.

 

다시 보니 사용자명을 입력할 때 대괄호를 빼야하는데 왜 넣었는지 모를 일이다. 대괄호를 넣어서 no such user 메시지가 떴다.

 

 chmod [옵션] 모드 파일명

 

<기호 모드>

 

사용자 카테고리

u : user

g : group

o : other

a : all

 

연산자

+ : 부여

- : 제거

= : 지정

 

파일 접근 권한

r : read

w : write

x : execute

 

$ chmod u+x swing30.txt > 사용자(u)에게 swing30.txt 파일에 대한 실행(x) 권한을 부여(+)한다.

 

<숫자 모드(8진수)>

 

user group other

 

r : 4

w : 2

x : 1

 

$ chmod 551 swing30.txt > user r/x (4+1) group r/x (4+1) other x (1)

 

 

 

링크

 

만약 /home/hyorim/swing/swing.c 라는 파일이 있다면?

 

In 원본명 하드링크명

In /home/hyorim/swing/swing.c home/hyorim/swing/30.c

 

하드 링크 : 원본 파일의 데이터가 실제로 저장되는 곳을 가리키는 아이노드를 공유하는 파일

파일에 추가 이름(별명)을 부여 (하드링크명 = 추가 이름/별명)

파일과 하드 링크 모두 같은 아이노드 정보&파일 내용을 가리킨다.

파일은 하나이지만, 이름은 두 개인 상태 (원본 이름, 추가 이름)

하드링크 파일을 수정하면? > 같은 파일이므로 원본 파일도 수정된다.

 

 

In -s 원본명 심볼릭링크명

In -s /home/hyorim/swing/swing.c home/hyorim/swing/swing30.c 

 

심볼릭 링크 : 원본 파일이 위치한 경로가 저장된 데이터 파일

바로가기 기능이나 즐겨찾기 기능과 유사

아이노드 정보는 같으나, 데이터 파일에는 원본 파일의 경로가 저장된다.

모든 사용자에게 모든 접근 권한이 열려있다.

원본 파일이 삭제되면? > 심볼릭 링크 파일은 단순히 경로를 저장하고 있는 파일이기에 무의미한 파일이 된다.

 

sudo 명령어를 사용해서 root 권한을 이용해 명령어를 실행해야 한다.

 

 

현재 작업 디렉토리의 절대 경로를 출력하고,

swing 디렉토리를 생성한 다음,

swing.c 파일을 생성해서,

swing 디렉토리로 이동하고,

하드링크명 30.c 와 심볼릭링크명 swing30.c 를 부여한다.

 

파일 유틸리티

grep [옵션] 패턴 파일명

 

grep(global regular expression print) : 지정한 파일에 특정 패턴의 문자열이 들어있는지 검색하는 명령어

 

옵션 기능
-i 대소문자 무시하고 검색 # ignore
-l 패턴이 들어있는 파일 이름 출력
-n 패턴이 속한 문자열과 줄번호를 함께 출력 # number
-c 패턴과 일치하는 줄 수 출력 # count

 

 

정규표현식 : 문자열에 나타나는 특정 문자 조합과 대응시키기 위해 사용되는 패턴

 

문자 의미
^ (캐럿) 행의 시작 ^a : a로 시작하는 모든 행
. 임의의 한 문자 a.. : a로 시작, 뒤에 2개 문자가 붙은 문자열
ex) abc
* (아스테리스크) 바로 앞의 것을 0번 이상 반복 a*b : a를 0번 이상 반복하고 b로 끝나는 문자열
[] [] 사이에 나열된 문자 중 하나
- 기호 : 문자 범위 지정
[abc]d : ad, bd, cd 가 해당
[a-z]q : aq, bq, cq, ... , zq 가 해당
[^...] [^ ] 내 문자 제외 나머지 문자 [^abc]d : ad, bq, cd 제외 ed, fd 등 해당

 

 

Find : 파일 이름이나 속성을 이용하여 파일 검색

 

find 경로 검색조건 [동작]

 

*동작을 명시하지 않을 시 그냥 검색 기능만 함

 

경로 표현 찾기 시작 위치
~ 홈 디렉토리에서 찾기
. 현재 디렉토리에서 찾기
/ 최상위 루트 디렉토리에서 찾기 (전체 파일 시스템 검색)
절대경로 지정한 특정 디렉토리에서 찾기
상대경로 현재 위치를 기준으로 특정 디렉토리에서 찾기

 

 

검색조건 기능
-name 파일명으로 찾기
-user 파일 소유자명으로 찾기
-group 파일 그룹명으로 찾기
-perm 접근 권한으로 찾기 ex) -perm 676
-type 파일 종류로 찾기 -type 파일 종류

 

파이프

Pipe '|' : 명령어의 출력과 입력을 연결해주는 명령어

 

키의 위치를 발견하기가 어렵다면, Shift + \

입력하면 pipe> 표시가 뜨고 이어서 입력하면 된다. 

 

ls > find

cat > more

 

 

과제2

 

 

1.

 

sudo stat | grep Inode

 

아이노드 번호와 링크 수를 알아내는 명령어

 

 

루트 디렉토리 파일 시스템 구조

아이노드 번호 : 2
유형 : 디렉토리 파일
링크 수 : 19

/home 디렉토리 파일 시스템 구조

아이노드 번호 : 130817
유형 : 디렉토리 파일
링크 수 : 6

사용자 홈 디렉토리(~)의 파일 시스템 구조

아이노드 번호 : 706326
유형 : 디렉토리 파일
링크 수 : 22

 

2.

cd 명령어로 홈 디렉토리로 이동한다.

touch 명령어로 swing.txt 파일을 만들고 vi 편집기를 실행한다.

 

이때 swing.txt 파일 정보를 가지는 아이노드가 생성된다.

swing.txt 의 포인터는 swing.txt 의 데이터 블록을 가리키고 실제 데이터를 가지는 데이터 블록이 생성된다.

 

 

현재 위치 앞에 삽입하는 i 명령키를 이용해 명령모드에서 입력모드로 전환한 뒤 문자열 swing30 을 입력한다.

esc 키를 이용해 입력모드에서 명령모드로 전환한 뒤 명령키 :wq 를 이용해 작업한 내용을 저장하고 종료한다.

 

 

사용자 홈 디렉토리(~)의 파일 시스템 구조

아이노드 번호 : 706326
유형 : 디렉토리 파일
링크 수 : 22

swing.txt 파일 시스템 구조

아이노드 번호 : 706454
유형 : 레귤러 파일
링크 수 : 1

 

3.

mkdir 명령어를 이용해 practice 디렉토리를 생성한다.

이때 링크 수가 증가하고 practice 디렉토리 정보를 가지는 아이노드가 생성된다. 아이노드의 포인터는 practice 디렉토리의 데이터 블록을 가리킨다.

 

이번에는 touch 명령어로 파일을 미리 생성하지 않고 vi 명령어로 파일을 생성하고 실행해보겠다.

 

 

사용자 홈 디렉토리(~)의 파일 시스템 구조

아이노드 번호 : 706326
유형 : 디렉토리 파일
링크 수 : 23

practice 디렉토리의 파일 시스템 구조

아이노드 번호 : 1308313
유형 : 디렉토리 파일
링크 수 : 2

 

4.

다음 줄에 입력하는 o 명령키를 이용해 명령모드에서 입력모드로 전환한 뒤 문자열 kali 를 입력한다.

esc 키를 이용해 입력모드에서 명령모드로 전환한 뒤 명령키 :wq! 를 이용해 작업한 내용을 저장하고 종료한다.

 

 

사용자 홈 디렉토리(~)의 파일 시스템 구조

아이노드 번호 : 706326
유형 : 디렉토리 파일
링크 수 : 23

kali.txt 파일 시스템 구조

아이노드 번호 : 706445
유형 : 레귤러 파일
링크 수 : 1

 

5.

하드링크명이 hardlink 인 swing.txt 의 하드 링크를 만들었다.

이때 하드링크는 단순히 이름을 하나 더 지어주는 것이므로 아이노드의 번호는 동일하다.

 

사용자 홈 디렉토리(~)의 파일 시스템 구조

아이노드 번호 : 706326
유형 : 디렉토리 파일
링크 수 : 23

swing.txt 파일 시스템 구조

아이노드 번호 : 706454
유형 : 레귤러 파일
링크 수 : 1

swing.txt 의 하드 링크 파일 시스템 구조

아이노드 번호 : 706454
유형 : 레귤러 파일
링크 수 : 2

 

6.

심볼릭링크명이 symboliclink 인 linux.txt 의 심볼릭 링크를 만들었다.

이때 symboliclink 파일을 추가하며 아이노드를 생성하지만 링크 수의 변경은 없다.

원본 파일 linux.txt 의 경로를 저장하는 symboliclink 의 데이터 블록이 생성된다.

 

사용자 홈 디렉토리(~)의 파일 시스템 구조

아이노드 번호 : 706326
유형 : 디렉토리 파일
링크 수 : 23

swing.txt 파일 시스템 구조

아이노드 번호 : 706454
유형 : 레귤러 파일
링크 수 : 2

swing.txt 의 심볼릭 링크 파일 시스템 구조

아이노드 번호 : 706449
유형 : 레귤러 파일
링크 수 : 1

 

 

 

과제3

 

cmp [옵션] [비교파일1] [비교파일2]

 

파일 비교 명령어.

모든 종류의 두 개의 파일을 비교하고 그 결과물을 표준 출력에 쓴다. 

기본값으로 만약 파일들이 같다면, cmp은 실행되지 않는다. 

파일들이 서로 다르다면, 다른 점이 발견된 최초 지점의 바이트와 문자열 숫자를 알려준다.

 

옵션 설명
-b 두 파일간의 다른 바이트들을 출력
-i 입력어의 최초 SKIP 바이트들을 건너뛴다.
-l 틀린 문자의 갯수를 출력
-s 아무것도 출력하지 않고 종료 코드만을 출력

0:파일이 같음, 1:파일이 다름, 2:파일에 접근 불가
-v 버전 정보 출력

 

diff [옵션] [비교파일1] [비교파일2]

 

파일 비교 명령어.

일반적으로 하나의 파일 버전과 동일한 파일의 다른 버전 간의 변경 사항을 보여주는 데 쓰인다.

문서 파일의 줄 사이 변경 사항을 보여준다.

diff3 명령어는 3개의 파일까지 비교가 가능하다.

 

옵션 설명
-c 두 파일간의 차이점 출력
-d 두 파일간의 차이점을 상세하게 출력
-r 두 디렉터리간의 차이점 출력, 서브디렉터리까지 비교
-i 대소문자의 차이 무시
-w 모든 공백 차이 무시
-s 두 파일이 같을 때 알림

 

sort [옵션] [파일명]

 

사용자가 지정한 파일의 내용을 정렬하거나 정렬된 파일의 내용을 병합할 때 사용한다.

 

옵션 설명
-r reverse 역순으로 정렬한다.
-k key 정해진 필드를 기준으로 정렬한다. ex) sort -k2 : 2번째 필드로 정렬
-u unique 정렬 후 중복된 내용을 제거한다.
-t field separator = SEP 필드 구분자를 지정
-k 옵션으로 필드를 지정해서 사용할 때 좋다.
-f ignore case 대소문자를 구분하지 않고 정렬한다.

 

split [옵션] [입력 [접두어]]

 

적당한 크기로 파일을 분할한다.

 

옵션 설명
-b 지정한 크기(SIZE)의 바이트 용량만큼 파일을 생성
--help 사용법을 출력
--version 버전 정보를 출력

 

paste [옵션] [파일명1] [파일명2]

 

파일의 줄을 합친다.

 

옵션 설명
-d delimiters 지정한 문자(char)로 열을 구분한다.
-s serial 파일을 가로를 기준으로 하여 일렬로 합친다.
--help   사용법을 출력한다.
--version   버전 정보를 출력한다.

 

과제4

 

 

파일 비교 명령어인 cmp로 서로 다른 두 파일 swing30.txt 와 swing.txt 를 비교해보았다.

틀린 문자의 갯수를 출력하는 옵션 -l 과, 두 파일간의 다른 바이트들을 출력하는 옵션 -b 를 pipe를 이용해 연결했다.

 

두 파일은 31 바이트가 달랐으며, 첫번째 라인의 i 와 e 가 달라 2 바이트째부터 달랐다.

 

 

참고로 두 파일은 이러한 파일들이었다.

'LINUX' 카테고리의 다른 글

[SWING] Linux 06  (0) 2022.06.27
[SWING] Linux 05  (0) 2022.05.23
[SWING] Linux 04  (0) 2022.05.14
[SWING] Linux 03  (0) 2022.05.06
[SWING] Linux 01  (0) 2022.03.27