Dev with GPT
3days Feed back
오늘 수업에서는 파일 분류, 패키지, 프로세스 관리 및 다양한 명령어를 배웠다.
수업 도중 깊이 알고싶은 궁금한 내용이 생기면 물어보면서 더욱 깊게 배울 수 있었다.
★ 리눅스 파일 분류와 종류
▶ 리눅스 운영체제는 모든 것을 파일로 인식하고 처리한다.
● d: 디렉토리 파일
● -: 일반 파일
● l: 심볼릭 링크 파일
● c: 문자 장치 파일
● b: 블록 장치 파일
● s: 소켓 파일
● p: naemd pipe 프로세스간 통신, 파이프의 한 종류
★ 파일 (File)
▶ Stack -> 후입선출(LIFO, Last-In-First-Out) 방식, Name -> 선입선출(FIFO, First-In-First-Out) 방식
● /bin/ls 파일: ELF 64-bit LSB shared object (실행 파일 형식 중 하나)
● /etc 디렉토리: directory (디렉토리 형식)
● /dev/tty 파일: character special (입력 장치를 나타내는 파일)
● /dev/sda 파일: block special (저장 장치를 나타내는 파일)
● /etc/bashrc 파일: ASCII text (일반적인 텍스트 파일)
● /dev/log 파일: socket (Unix 도메인 소켓 파일)
● mkfifo 명령어로 생성한 aa 파일: named pipe(FIFO) (프로세스 간 통신에 사용되는 FIFO 파일)
● find /run -type f -exec ls -al {} \; : /run 디렉토리에서 일반 파일을 찾아서 ls 명령어를 실행합니다.
● find /run -type s -exec ls -al {} \; : /run 디렉토리에서 소켓 파일을 찾아서 ls 명령어를 실행합니다.
● find /run -type p -exec ls -al {} \; : /run 디렉토리에서 파이프 파일을 찾아서 ls 명령어를 실행합니다.
★ 링크 파일
▶ 파일 복사와 다른 개념이다. 링크는 하드디스크 용량을 차지하지 않는다.
▶hard link : I-node가 같다. 공유의 개념이다. C++ 에서 reference이다.
▶ soft link : 원본 파일에 대해 위치정보만 갖는다. 바로가기 아이콘이다. (simbolic link)
● ln (하드링크 만들기)
● ln b lb2 (b의 하드링크 lb2 생성)
● ln -s (심볼릭 링크 만들기)
● ln -s b b2 (b의 바로가기 링크 b2 생성)
● ln 명령어는 하드 링크와 심볼릭 링크를 생성하는 데 사용됩니다.
● -s 옵션을 사용하면 심볼릭 링크를 생성하고,
● -s 옵션을 사용하지 않으면 하드 링크를 생성합니다.
GPT Q & A 내 질문
하드링크는 원본 파일의 inode를 공유하며, 저장공간을 차지하지 않는다.
따라서 원본이 지워지더라도 하드링크가 남아있다면 inode는 계속 존재한다.
하드링크가 아닌 소프트링크를 사용해야하는 경우는 ?
1. 디렉토리 간 이동이 필요한 경우
원본 파일이 다른 디렉토리에 있는 경우, 하드링크를 생성할 수 없습니다. 이때는 소프트링크를 사용하여 원본 파일을 가리킬 수 있습니다.
2. 파일 이름을 바꾸고 싶을 때
하드링크는 원본 파일과 이름이 같아야 하기 때문에, 다른 이름으로 파일을 저장하고 싶은 경우에는 소프트링크를 사용합니다.
3. 파일이름에 공백이나 특수문자가 포함된 경우
파일 이름에 공백이나 특수문자가 포함된 경우, 하드링크를 만들 수 없는 경우가 있습니다. 이때는 소프트링크를 사용하여 원본 파일을 가리킬 수 있습니다.
4. 여러 파일을 가리키는 경우
하나의 파일이 여러 개의 하드링크를 가질 수는 있지만, 하나의 파일에 대해서 여러 개의 소프트링크를 만들 수 있습니다. 이 경우 원본 파일이 수정되면, 모든 소프트링크에서 원본 파일을 가리키는 경로가 변경됩니다.
★ grep, 패턴 찾기
▶ 파일 내에서 해당 문자열이 포함된 라인을 찾아 출력하거나, 개수를 세어 출력하거나,
라인 번호와 함께 출력하는 등 다양한 옵션을 제공
● grep ftp s: FTP 프로토콜의 기본 포트인 21번을 출력합니다.
● grep http s: HTTP 프로토콜의 기본 포트인 80번을 출력합니다.
● grep smtp s: SMTP 프로토콜의 기본 포트인 25번을 출력합니다.
● grep pop3 s: POP3 프로토콜의 기본 포트인 110번을 출력합니다.
● grep domain s: DNS 서비스의 기본 포트인 53번을 출력합니다.
● grep domain s -c: s 파일에서 domain 문자열이 나오는 라인의 개수를 출력합니다.
● grep domain s -i: s 파일에서 domain 문자열을 대소문자 구분 없이 검색하여 나오는 라인을 출력합니다.
● grep domain s -v: s 파일에서 domain 문자열을 포함하지 않는 라인을 출력합니다.
● grep domain s -n: s 파일에서 domain 문자열이 포함된 라인의 번호를 함께 출력합니다.
● grep ^http s -n : s 파일에서 http 문자열로 시작하는 라인을 검색하고, 라인의 번호를 함께 출력하는 명령어입니다.
● grep ice$ s -n은 s 파일에서 ice 문자열로 끝나는 라인을 검색하고, 라인의 번호를 함께 출력하는 명령어입니다.
● ls -al /etc | grep "^d" : 위 명령어는 '/etc' 모든 파일과 디렉토리를 상세히 나열한 후, 그 중 디렉토리인 것만 검색하여 출력하는 명령어입니다.
● ls -al /etc | grep "^-" : 위 명령어는 '/etc' 모든 파일과 디렉토리를 상세히 나열한 후,
그 중 파일인 것만 검색하여 출력하는 명령어입니다.
★ 파이프(pipe)의 활용
▶ 하나의 명령어에서 출력된 결과를 다른 명령어로 전달하는 역할을 합니다. 이를 통해 명령어를 연결하여 더 유용한 작업을 수행할 수 있습니다.
● sort /etc/passwd | nl: /etc/passwd 파일의 내용을 정렬한 후, 각 행에 순서대로 번호를 붙여서 출력합니다.
● who | sort: 현재 로그인한 사용자 정보를 출력한 후, 그 결과를 사용자 이름을 기준으로 정렬하여 출력합니다.
● who | sort | nl: 현재 로그인한 사용자 정보를 출력한 후, 그 결과를 사용자 이름을 기준으로 정렬한 뒤, 각 행에 순서대로 번호를 붙여서 출력합니다.
● dpkg -l | nl: 현재 시스템에 설치된 모든 패키지의 목록을 출력한 후, 각 행에 순서대로 번호를 붙여서 출력합니다.
● dpkg -l | wc -l: 현재 시스템에 설치된 패키지의 개수를 출력합니다.
★ find 사용법
▶ 파일 이름, 파일 크기, 파일 소유자, 파일 수정 시간 등 여러가지 기준으로 검색이 가능합니다.
● find /run -type s -exec ls -AlF {} \; 2>/dev/null: /run 디렉토리 아래에서 s 타입(소켓 파일)의 파일을 찾아서 자세한 정보를 출력합니다. 2>/dev/null은 에러 메시지를 출력하지 않도록 합니다.
● find /run -type p -exec ls -AlF {} \; 2>/dev/null: /run 디렉토리 아래에서 p 타입(파이프 파일)의 파일을 찾아서 자세한 정보를 출력합니다. 2>/dev/null은 에러 메시지를 출력하지 않도록 합니다.
● find /etc -size +1M: /etc 디렉토리 아래에서 크기가 1MB보다 큰 파일을 찾아서 출력합니다.
● find /etc -size +3M: /etc 디렉토리 아래에서 크기가 3MB보다 큰 파일을 찾아서 출력합니다.
★ filter 사용법 : tr
▶ tr: 파일 또는 스트림에서 읽은 텍스트 데이터의 문자열을 변환합니다. 예를 들어, 대소문자 변환, 문자열 삭제, 문자열 대체 등의 작업을 수행할 수 있습니다.
● $echo {a..z} : 알파벳 a부터 z까지를 출력합니다.
● $echo {a..z} | tr 'a-z' 'A-Z' : 알파벳 a부터 z까지를 대문자로 바꾸어 출력합니다.
● $echo {a..z} | tr 'a-z' 'A-Z' | tr -d : 알파벳 a부터 z까지를 대문자로 바꾼 후, 출력된 문자열에서 공백 등을 제거하여 출력합니다.
[결과]
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ
★ filter 사용법 : uniq, shuf
▶ uniq: 파일이나 표준 입력 스트림에서 연속적으로 중복되는 라인들을 제거
▶ shuf: 파일이나 표준 입력 스트림에서 라인들을 임의의 순서로 출력
● find /etc -size +1M: /etc 디렉토리 아래에서 크기가 1MB보다 큰 파일을 찾아서 출력합니다.
● find /etc -size +3M: /etc 디렉토리 아래에서 크기가 3MB보다 큰 파일을 찾아서 출력합니다.
★ tar 사용법
▶ 리눅스에서 파일 아카이브를 생성하고, 풀기 위한 명령어
● tar cfz 5.tar.gz /etc (/etc 디렉토리를 압축해서 5.tar.gz라는 압축파일을 생성)
● tar : tar 유틸리티를 실행하는 명령어
● c : 새로운 아카이브를 생성하는 옵션입니다.
● f : 아카이브 파일의 이름을 지정하는 옵션입니다.
● v : 아카이브에 포함된 파일들의 목록을 출력하는 옵션입니다.
● z : gzip 압축을 사용하는 옵션입니다.
● t : 아카이브 파일에 포함된 파일들의 목록을 출력하는 옵션입니다.
● x : 아카이브 파일의 내용을 추출하여 원본 파일로 복원하는 옵션입니다.
● tar 명령어 사용 시에는 옵션 앞에 -를 생략할 수 있으며 -를 옵션 앞에 붙여서 사용하면 순서가 명확해야한다.
★ 윈도우 압축 파일 사용법
▶ 압축파일 : aa.zip
● zip -r aa.zip aa: aa라는 디렉토리를 aa.zip이라는 이름으로 압축합니다.
● unzip -d aa aa.zip: aa.zip 파일을 aa 디렉토리에 압축 해제합니다
★ Rocky Linux 설치 (root)
● 머신이름 : MyRockyLinux
● RAM : 2G, HDD : 30G
● Processor : 2개
● Hostname : pdw.linux.kr
● Rocky 설치 후 작업
● root : jj, 일반 사용자 : j
● 파티션 계획
● C /boot 1G
● D swap 2G
● E / 12G
● F /home 5G
● G /data 나머지 (10G)
아래 코드를 통해서 vim과 java.mysql,c언어 컴파일러를 설치
#dnf -y install vim
#dnf -y install gcc g++java java-devel mysql-server