리눅스 데브코스[5주차 - 1]<리눅스 명령어 사용법 실시간 실습 1>

심우열·2023년 5월 1일
0

1. /tmp/kernel 아래에서 아래 파일 이름으로 된 파일의 위치를 알아내시오

실행결과

2. /tmp/kernel/mm 아래에서 아래 텍스트를 가지고 있는 파일의 이름, 파일내에서 몇 번째 행에 있는지 찾으시오.

실행결과

*grep 명령어

grep은 파일에서 패턴을 검색하는 명령어

1. -r

-r 옵션은 명령이 지정된 디렉토리 아래의 모든 하위 디렉토리를 재귀적으로 검색하도록 함

2. -n

-n 옵션은 명령이 일치하는 각 줄의 줄 번호를 인쇄하도록 함

3. -w

-w 옵션은 명령이 부분 일치가 아닌 전체 단어만 일치하도록 함

4. /tmp/kernel/mm

/tmp/kernel/mm은 명령이 주어진 패턴을 가진 파일을 검색할 디렉토리

5. -e

-e 옵션은 검색할 패턴을 지정(이 경우에는 "YouGotIt")

3.

참고자료

c언어 open, close
C언어 read, write
C언어 Buffer
리눅스 파일권한

C 코드

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>

#define BUFFER_SIZE 1024

int main(int argc, char* argv[]){
        //buffer 생성
        //buffer란 장치와 장치 간의 데이터 전송을 할 때, 완충작용을 하기 위한 임시 데이터 저장 공간
        char buffer[BUFFER_SIZE];

        //인자가 제대로입력되지 않았을 경우 err
        if(argc != 3)
                return -1;

        //복사를 위해 읽어올 파일open(), fcntl.h 헤더에존재
        //open() 에 성공할 경우, 0초과의 int 반환, 실패 시 -1 반환
        // O_RDONLY 로 read only 권한 설정
        int desc = open(argv[1], O_RDONLY);


        //인자[1]의 파일이 제대로 open()된 경우
        if(desc>0)
        {
                // 복사할 파일 open,
                // 해당 파일 없으면 O_CREAT로 생성
                // O_CREAT 시 생성할 파일의 접근권한을 0644로 지정 
                // user, group, other - read(4), write(2), Execute(1) -> 0 (4+2) (4) (4)
                // O_WRONLY 로 write only 권한 설정
                int desc_cp = open(argv[2], O_WRONLY | O_CREAT, 0644);

                if(desc_cp>0)
                {
                        //c언어의 read() 와 write() 는 unistd.h 헤더에 존재
                        //read(파일 디스크립터, 파일을 읽어들일 버퍼, 읽어들일 데이터 최대 길이)
                        //read 의 반환값: 실패시 -1, 성공시 읽어들인 바이트 수
                        int read_size = read(desc, buffer, BUFFER_SIZE);

                        //write(파일 디스크립터, 전송할 데이터가 들어있는 버퍼, 보낼 데이터의 최대 길이)
                        //write의 반환값: 실패시 -1, 성공시 전송한 바이트 수
                        write(desc_cp, buffer, read_size);
                }
                //desc_cp 파일 디스크립터 종료
                close(desc_cp);
        }
        //desc 파일 디스크립터 종료
        close(desc);
        return 0;

}

C코드 컴파일

gcc -o mycp mycp.c

실행 결과

4.

참고자료

C언어 lseek()

C코드

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>

#define BUFFER_SIZE 1024

int main(int argc, char* argv[]){
	
	int fd;
	char *str = "it is by standing";
	char buffer[BUFFER_SIZE] = { 0, }; //다음과 같이 초기화 하지 않으면 쓰레기값 함께 읽힘

	if(argc < 2)
	{
		printf("arguments error\n");
		return 1;
	}
	if((fd = open(argv[1], O_RDONLY)) < 0)
	{
		printf("file name error %s\n", argv[1]);
		return 1;
	}
	if(lseek(fd, 23, SEEK_SET) < 0)
	{
		printf("lseek error\n");
		return 1;
	}
	if(read(fd, buffer, strlen(str)) < 0)
	{
		printf("read error\n");
		return 1;
	}
	printf("%s\n", buffer);
	close(fd);
	return 0;
}

실행결과

profile
Dev Ops, "Git, Linux, Docker, Kubernetes, ansible, " .

0개의 댓글