Lesson 1

해커스쿨 서버는 현재 열려있지 않아서 로컬에 ftz 서버를 구축하고, ssh를 이용하여 접속했다. 

비밀번호를 입력하여 로그인 성공시 프롬프트가 나타나며 프롬프트는 명령 입력 대기 상태에서 명령을 기다린다.

프롬프트에는 접속 id, 서버, 현재위치의 정보가 있다.

프롬프트에 ls 명령어를 입력하면 다음과 같이 현재 디렉터리의 파일 목록을 확인할 수 있다.

ls 명령어에 -l 옵션을 추가하여 ls -l 을 입력하면 어떤것이 디렉터리이고, 어떤것이 파일인지 등 더 자세한 정보를 확인할 수 있다.

각 파일마다 구분되어 있는 필드에는 파일이 생성된 날짜 정보가 있고, 14698 같은 숫자들은 파일의 용량이다. tranier1 trainer1 과 같은 내용을 퍼미션에 관련한 정보이며 맨 첫번째 필드가 파일의 모드와 성격 정보를 가지고 있는데 가장 왼쪽의 문자가 - 면 일반 파일이고, d이면 디렉터리를 의미한다.

이후로 퀴즈가 나오는데 퀴즈 내용과 답은 다음과 같다.

ls명령어로는 보이지 않는 숨김 파일은 -a 옵션을 추가한 ls -a 명령어로 확인할 수 있다.

숨김 파일은 파일명 가장 앞에 . 이 붙어있다는 특징있다. 

ls 명령어는 ls -al 처럼 둘 이상의 옵션도 함께 사용할 수 있다. 함께 사용하면 사용하는 모든 옵션의 효과를 한번에 사용할 수 있다.

 

Lesson 2

자신이 현재 속해있는 디렉터리를 확인하려면 pwd 명령어를 이용하면 된다.

프롬프트에서 현재 위치의 정보는 앞의 경로는 생략하고 가장 뒤쪽의 경로만 나타내고 있다.

현재 경로에서 한 단계 위로 가려면 cd .. 명령어를 이용한다. 지금 경로에서 한단계 위로 가면 /home 가 되고 또 한단계 위로 가면 / 가 되는데, / 은 최상위 디렉토리이며 루트 디렉토리 라고도 한다.

경로를 내려갈때는 cd trainer2 처럼 디렉토리 이름을 붙이면 된다. 

.. 을 사용하지 않고 한번에 루트 디렉터리로 올라가려면 cd / 을 입력하면 된다. 또한 한 번에 trainer2 로 내려가려면 cd /home/trainer2처럼 루트 디렉토리부터 모든 경로를 입력하면 된다.

새로운 디렉토리를 만드는 명령어는 mkdir 이다. mkdir에 만들 디렉토리의 이름을 지정해주면 된다.

mkdir linuxer로 linuexer로 디렉토리를 만들면 ls 명령어로 확인 시 만든 디렉토리가 생성됨을 확인할 수 있다.

 

디렉토리를 삭제할 때는 rmdir이라는 명령어를 이용한다. 

rmdir linuxer을 입력하고 ls -al을 입력하면 linuxer 디렉터리가 삭제됨을 확인할 수 있다.

 

cp 명령어는 파일을 복사하는 명령어다. cp 파일1 파일2 와 같은 형태로 사용하면 파일1이 파일2의 이름으로 복사된다.

 

파일을 삭제하는 명령어는 rm이다. rm 복사사본을 입력하고 ls 명령어로 확인하면 파일이 삭제됨을 확인할 수 있다.

 

파일을 옮기는 명령어는 mv이다. mv명령어는 파일을 옮기는 것을 파일을 복사하고 원본 파일을 자동으로 삭제하는 것으로 처리하기 때문에 파일 이름을 변경할 때도 자주 사용된다.

mv 파일1 파일 2의 형식으로 사용하면 파일1의 이름이 파일2로 변경된다.

 

Lesson3

터미널은 ssh나 텔넷등의 서버를 통해 접속한 것이고, 콘솔은 부팅한 컴퓨터에 직접 접속한 것이라는 의미이다. 

 

w명령어를 사용하면 현재 서버에 접속한 사용자 목록을 확인할 수 있다.

첫번째 필드는 접속한 아이디를 나타낸다. 두번째 필드는 콘솔로 접속했는지, 터미널로 접속했는지 보여준다. tty면 콘솔접속, pts면 터미널 접속을 의미한다. 3번째 필드는 접속한 사람의 ip를 의미한다. 콘솔 접속한 경우 ip는 보이지 않는다. 4번째 필드는 로그인 시간이고, 5번째 필드는 지연시간으로 사용자가 얼마나 아무것도 입력을 안했는지 확인할 수 있다. 6번째 필드는 cpu를 사용한 지연 시간이고, 7번째 필드는 what 필드에 있는 명령이 지연된 시간, 8번째 필드는 현재 사용하고 있는 명령을 보여준다.

 

finger -l 명령어를 확인하면 사용자에 대한 좀 더 많은 정보를 확인할 수 있다.

 

tty 명령어를 사용하면 자신의 터미널 정보를 확인할 수 있다.

 

ifconfig 명령어를 사용하면 ip 정보를 확인할 수 있다.

 

write 사용자id /dev/pts/pts번호 의 명령어로 서버에 접속한 다른 사용자에게 메시지를 전달할 수 있다.

 

wall "내용" 의 명령어로 현재 접속한 모든 사용자에게 메시지를 전달할 수 있다.

0부터 9까지 몇번 사용됬는지 저장할 공간을 int형 포인터에 int 자료형 크기로 10개 할당하였다.

자연수 세개를 입력받아, 입력받은 자연수 3개를 곱한다.

곱한 값이 0보다 클때까지 반복하고 반복문 안에는 곱한 값을 10으로 나눈 나머지를 배열의 인덱스로 하여 그 숫자가 나올때 마다 해당 인덱스에 1씩 누적하고 곱한 값을 10으로 나눈다.

할당한 메모리를 해제하고 종료한다.

정답은 다음 코드와 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    int a, b, c, mul, i;
    int *numPtr = (int*)malloc(sizeof(int* 10);
    scanf("%d %d %d"&a, &b, &c);
    mul = a * b * c;
    
    while(mul > 0)
    {
        i = mul % 10;
        numPtr[i] = numPtr[i] + 1;
        mul /= 10;
    }
    
    for(int i=0; i<10; i++
    {
        printf("%d\n", numPtr[i]);
    }
    free(numPtr);
    return 0;
}
cs

과목의 개수를 저장할 변수, 평균을 저장할 변수, 점수 중 최댓값을 저장할 변수를 선언하고 점수들을 저장할 공간의 포인터를 선언하고, 과목의 개수를 입력받는다.

점수를 고치는 연산을 하며 소수가 될 수 있으므로 double 자료형 크기의 과목 개수만큼 저장할 수 있도록 메모리를 할당한다.

과목의 개수 만큼 반복하면서 최댓값을 찾고, 또 과목의 개수만큼 반복하면서 각 점수를 최댓값을 사용하여 문제에서 주어진 식으로 연산하여 저장한다.

연산한 점수들을 평균을 저장할 avg변수에 누적하여 저장하고, avg를 과목의 개수로 나누어 평균을 구한다.

메모리를 해제하고, 구한 평균을 출력한다.

정답 코드는 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    int subNum = 0;
    double avg = 0, big = 0;
    double *subArr;
    
    scanf("%d"&subNum);
    
    subArr = (double*)malloc(sizeof(double* subNum);
    
    for(int i = 0; i < subNum; i++)
    {
        int tmp;
        scanf("%d"&tmp);
        subArr[i] = double(tmp);
        
    }
 
    for(int i = 0; i < subNum; i++)
    {
        if(subArr[i] > big)
            big = subArr[i];
    }
 
    for(int i = 0; i < subNum; i++)
    {
        subArr[i] = subArr[i]/big*100;
    }
 
    for(int i = 0; i < subNum; i++)
    {
        avg += subArr[i];
    }
    avg = avg / subNum;
    
    free(subArr);
    printf("%lf", avg);
    return 0;
}
cs

+ Recent posts