728x90

 

계정 2개 생성 후 2번 계정에 c언어 코드 작성하여 컴파일 후 진행.(à컴파일 하면 자동으로 a.out파일 생성됨)

 

1. 1번 계정으로 a.out 파일 실행

2. 2번 계정으로 다른 사람이 실행할 수 없게 바꾸기

3. 1번 계정으로 a.out 실행해보기

4. 2번 계정으로 소스코드 만든 후 실행권한 부여

5. 4에서 만들었던 소스코드를 누구나 쓸 수 있게 바꾸기

6. 1번 계정으로 2번 계정에 있는 소스코드를 옮기기

 

에 대하여 작성하려한다.

 

(단, sudo 사용하지 않고, 권한 부여는 최소한으로 부여하며, chmod 명령어 사용시 숫자모드로 사용하기.)

 

1번 계정인 minseong 계정 과 2번 계정인 swing29 계정을 생성 후 

 

0. 2번 게정에 c언어 코드 작성하여 컴파일 후 진행

 

swing29 계정으로 전환한 후에 vi 명령어(vi swuni2.c)를 입력해 vi 편집기를 연다. 

vi 편집기에서 명령모드에서 입력모드로 전환한다.

 

c언어 코드로 'loveu'라는 내용을 작성하여 gcc 명령어로 컴파일 후 진행한다.

 

1. 1번 계정으로 a,out 실행

 

vi 명령어로 vi 편집기를 실행하게 되면 c언어로 코드를 작성한 후 gcc 명령어를 시행한다.

 

여기서 컴파일 명령어인 gcc, 그리고 g++이 존재하는데

c일 경우에 gcc 컴파일대상소스코드 -o 실행파일이름

c++일 경우에 g++ 컴파일대상소스코드 -o 실행파일이름

 

실행한 후에 ./실행파일이름 명령을 통해 파일을 실행할 수 있다.

 

swuni.c 파일을 생성한 다음 gcc로 swuni.c 파일을 컴파일 하게 되면 ,

ls 를 통해 a.out이 생성되었다는 것을 알 수 있다.

 

 

2. 2번 계정으로 다른 사람이 실행할 수 없게 바꾸기

 

chmod 명령어를 이용해서 파일이나 디렉토리에 부여된 권한을 수정할 수 있다.

chmod로 수정할 수 있는 방법은 기호문자열을 사용하는 방법과 8진수 숫자를 이용하는 방법 두 가지가 있따.

 

기호모드를 사용하는 경우 기존 권한 중 일부 권한을 더하거나 뺄 경우 많이 사용한다.

 

먼저 어떤 대상에게 어떤 권한을 더할 것인지 문자로 설정하자.

대상으로 u = 사용자, g = 그룹, o = 기타, a = 전부 

추가 여부로 + 더하기, - 빼기, = 설정

권한으로  = 읽기, w = 쓰기, x = 실행

을 의미한다.

 

예를 들어 그룹에게 실행 권한을 더할 경우에는 

chmod g+x 파일명 형태를 사용한다.

 

그렇다면 숫자모드를 사용한 경우는 어떻게 사용되어지는가.

8진수로 표기하는 방법은 일단 rwx 세 자리 각각 2진수 표시한다.

r = max 4 w= max 2, , x = max 1로 rwx 도합 7이 최대값이다.

 

여기서 다른 사람들이 실행하지 못하게 설정하려 했으니까 

실행을 제외한 나머지 -rw-rw-r-- 로 계산해보니 664가 맞는 실행문이다.

 

3. 1번 계정으로 a.out 실행해보기

 

소스코드를 c언어로 실행했기 때문에 gcc 컴파일대상소스코드 -o 실행파일이름으로 컴파일한다.

이후 ./a.out 명령을 통해 파일 실행할수 있었다. 

 

4. 2번 계정으로 소스코드 만든 후 실행권한 부여

 

소스코드를 작성하는 방법은 cat > ~ 명령어를 이용해 소스코드 파일을 만들고,

코드를 입력한 뒤 ctrl+d를 이용하여 입력을 멈춘다.

 

 

5. 4에서 만들었던 소스코드를 누구나 쓸 수 있게 바꾸기

 

숫자모드인 chmod 명령어로 기존 소스코드 권한에서 실행할 수 있는 권한을 추가해서 실행한다.

이때 숫자모드는 대체적으로 파일의 권한 전체를 재설정할 때 많이 사용되기 때문에

실행권한을 따로 추가하는 것이 아니라 실행권한까지 모두 포함한 권한을 실행한다.

 

이래서 사용자가 rwx 를 모두 사용할 수 있겠끔 777을 적어서 낸다.

ls -l 명령어를 통하여 swuni2.c가 -rwxrwxrwx 로 변했음을 알 수 있다.

 

 

6. 1번 계정으로 2번 계정에 있는 소스코드를 옮기기

 

swing29계정에 있던 소스코드 swuni2.c 를 1번 계정으로 옮겨서 실행한다.

 

'자기개발 > Linux' 카테고리의 다른 글

[ Linux 2주차 ] 과제 재제출  (0) 2021.05.03
[ Linux 2주차 ] 과제4  (0) 2021.04.27
[ Linux 2주차 ] 과제 2  (0) 2021.04.27
[Linux 2주차] 과제1  (0) 2021.04.27
kali Linux 1주차 과제  (0) 2021.03.30

728x90

[ 과제1 ]

 

1. 기본 명령어

 

 

date : 현재 날짜 및 시간 확인 passwd : 비밀번호 변경

 

whatis : whatis 뒤의 명령어에 대한 설명 sudo : 현재 계정에서 다른 계정의 권한만 빌리는 것

 

hostname : 현재 호스트명

 

 

w: 로그인한 사용자와 현재 작업 정보 출력 who: 시스템을 사용하고 있는 사용자의 정보 출력 whoami : 현재 로그인한 사용자의 로그인 ID

 

2. 디렉토리 명령어

 

pwd(Print Working Directory): 현재 디렉토리 확인 cd(Change Directory): 디렉토리 이동
ls -al : 시스템에 숨겨진 파일을 포함한 모든 파일 목록 출력

 

 

adduser: 루트계정 혹은 sudo 명령어를 함께 사용하여 계정을 생성 userdel: 기존 계정 정보를 삭제하는 명령어

 

[ 과제2 ]

 

mkdir 명령어를 사용해서 swing1과 swing2 을 생성한다.

이때 swing1과 swing2 내에 각각 week1과 week2 하위 디렉토리가 생성된다. 

 

swing1 디렉토리와 그 아래  week1 디렉토리
swing2 디렉토리와 그 아래  week2 디렉토리

 

rmdir 명령은 해당 디렉토리가 비어있어야 실행할 수 있기 때문에, 디렉토리에 파일이나 서브 디렉토리가 남아있으면 삭제할 수 없습니다. 

 

rm 명령은 파일, 디렉토리를 삭제하는 명령어로 rmdir과 같은 기능을 수행한다.

옵션으로

-i : 지정한 파일을 삭제할 것인지, 대화식으로 확인

-r : 지정한 디렉터리 삭제

-f : 파일을 삭제할 것인지 묻지 않고 바로 삭제

-rf : 파일 및 디렉터리를 삭제할 것인지 묻지 않고 바로 삭제

 

rm-rf 명령으로 swing1 디렉토리를 삭제하였다.

 

 

[ 과제3 ]

 

 

root 사용자로 변경한 뒤, adduser 명령어로, id는 swing2, pw도 swing2인 계정 생성한다.

 

 

crtl + Alt + F1 단축키를 눌러 tty1으로 이동한 후 swing 계정으로 로그인한다.

 

swing 계정으로 로그인 한 상태에서, pwd, w, who, whoami, who am i 를 실행해본다.

 

Alt + F7 단축키를 눌러 터미널에서 벗어나 홈 화면으로 돌아간 뒤,  root 권한을 빌려 adduser 명령어로 id는 swuni, pw도 swuni인 계정을 만든다.

 

swuni 계정으로 로그인 한 뒤, pwd, w, who, whoami, who am i 실행한다.

 

 

swuni 계정에 로그인 한 상태로 ctrl + Alt+F1~F6 단축키 눌러 터미널로 이동해서 pwd, w, who, whoami, who am i 실행한다.

 

pwd, w, who, whoami, who am i 실행의 차이점은 사용자 계정이 달라짐에 따라 계정 사용자 정보를 출력한다.

 

 

 

 

[ 과제 4 ]

 

" 리눅스 파일 시스템의 구조에 대해 찾아보기 "

 

리눅스 파일 시스템은 아래의 그림과 같이 구조화되어있다.

 

출처 : 2021-1 SWING 29기 linux 스터디 2주차 ppt

 

파일 시스템의 구조를 세부적으로 설명하자면,

 

Boot block :

 

- 운영체제를 주 기억장치에 올리는 역할을 하는 프로그램이 들어있는 영역

- 운영체제 부팅하기 위한 필요한 코드 저장한다.

- 대부분의 파일 시스템은 부트 블록으로 시작한다.

 

Super block :

 

- 블록의 크기 : 1KB, 2KB, 4KB, 블록 그룹의 가장 앞에 위치한다.

- 해당 파일 시스템 관련 주요 정보를 저장한다.

- 가지고 있는 정보 : 파일 시스템 이름과 크기, 사용 중인 블록 수, 전체 블록 수, 사용 가능한 블록 수, 블록 그룹 수, 아이노드 리스트 크기, 블록 크기, 사용 가능한 아이노드 번호 등

- 운영체제는 슈퍼 블록의 정보를 사용하여 파일 시스템을 관리

 

Group Descriptor:

 

- 각 block group을 관리하는 정보 저장

- 가지고 있는 정보로 Block bitmap, inode bitmap의 블록 번호, 첫번째 아이노드 테이블 블록의 블록 번호, 그룹 안에 있는 사용 가능한() 블록 수, 그룹 안에 있는 아이노드 , 그룹 안에 있는 빈 디렉토리 수 등이 있다.

 

Block / Inode Bitmap :

 

- 사용 현황을 bit로 map 형태로 나타낸 것

- Block bitmap은 그룹 내에 있는 각 블록의 사용 상태를 나타내는 것

- Inode bitmap은 그룹 내에 있는 아이노드의 사용 상태를 나타내는 것

 

Inode block :

 

- 파일에 대한 메타데이터를 저장

- 가지고 있는 정보 :

파일에 부여되는 고유 번호(아이노드 번호),  파일 링크 수, 파일 크기, 소유권(사용자, 그룹), 파일 위치,

접근 권한(읽기, 쓰기 실행), 생성·사용·변경 시간, 파일 형태, 데이터 블록 주소

- 모든 파일이나 디렉토리는 고유한 아이노드 블록을 가지기 때문에 아이노드 번호로 구분 가능하다.

 

+ Inode table : Inode에 대한 정보

 

Data block:

 

- 실제 파일이 보관해야 하는 데이터 내용이 저장되는 영역

- 보관하는 데이터의 크기에 따라 여러 개일 수 있다.

- 디렉토리도 데이터 블록 가진다.

- 아이노드 는 몇 개의 데이터 블록을 포함한다.

 

Directory entry:

 

- 디렉토리 파일의 목록을 항목(Entry)라고 한다.

- 모든 디렉토리는 항상 2개의 항목을 가진다. -> 자기 자신(.), 부모 디렉토리(..)

 

 

 

 

'자기개발 > Linux' 카테고리의 다른 글

[ Linux 2주차 ] 과제 재제출  (0) 2021.05.03
[ Linux 2주차 ] 과제4  (0) 2021.04.27
[ Linux 2주차 ] 과제3  (0) 2021.04.27
[ Linux 2주차 ] 과제 2  (0) 2021.04.27
[Linux 2주차] 과제1  (0) 2021.04.27

+ Recent posts