Rocky 리눅스 기반으로 리눅스의 기본적인 부분을 정리해보겠다.

리눅스란?

  • 왜 윈도우 대신 리눅스를 쓰는가?

    • 윈도우 - 사용자 편의성 ↑, 자원 ↑, Single User
    • 유닉스/리눅스 - 사용자 편의성 ↓, 자원 ↓, Multi User ,
  • 유닉스/리눅스 OS 주요 구성 요소

    • 커널: 파일시스템 관리, 하드웨어 장치 관리, CPU 제어, 메모리 및 프로세스 제어
    • 쉘: 사용자와 커널 사이의 인터페이스 ex) sh, bash
    • 디렉토리: 파일을 가지고 있거나 다른 다렉토리를 가지며 계층적 구조

커널에 대해서 딥하게 공부하고 싶은데 일단 미래로 미뤄둔다... 언젠가 하겠지

  • CLI 명령어 구성요소
    • 명령어
    • 옵션
    • argument
  • CLI 제어 문자
제어 문자설명
Ctrl-C현재 동작중인 명령어 종료
Ctrl-D파일의 끝 또는 종료를 나타냄
Ctrl-U현재 명령어 라인을 모두 지움
Ctrl-W커서가 있는 곳의 단어를 지움
Ctrl-S화면 출력 중지
Ctrl-Q화면 출력 시작

리눅스 기본 명령어

매뉴얼 보기

명령어의 사용법, 설명, 옵션, 사용하는 라이브러리, 시스템 콜 등을 보여준다.

man commmand
man option command
man option filename

디렉토리 작업

  • ls: 디렉토리 내용 확인
    -a: 숨겨진 파일 포기
    -l: 내용 자세히 보기
    -d: 디렉토리 자체 정보 확인

  • file: 특정 파일이 어떤 종류의 파일인지 확인

  • pwd: 현재 경로 나타냄

  • cd: 디렉토리 이동

절대경로: 루트 기준으로 이동
상대경로: 현재 디렉토리 기준으로 이동

파일 작업

  • cat: 파일 내용 확인
  • more: 파일을 페이지 단위로 확인
  • head: 옵션을 통해 시작에서 n줄 만큼 확인
  • tail: 옵션을 통해 끝에서 n줄 만큼 확인
  • wc: 파일의 줄/단어/문자수 확인

복사

  • cp: 파일 내용을 다른 파일로 복사

이동/이름 변경

  • mv: 파일을 다른 다렉토리로 이동

생성

  • touch: 파일 생성
  • mkdir: 디렉토리 생성

삭제

  • rm: 파일 삭제
  • rmdir: 디렉토리 삭제

링크

c언어에서 포인터 생각하면 이해하기 편하다.

  • 하드링크: 파일의 실제 데이터 블록(inode)를 직접 가리킴.
  • 심볼릭링크:원본 파일의 경로(Path)를 가리킴 윈도우에서 바로가기와 비슷

파일 내용 검색

  • grep: 파일
    grep {option} {pattern} {filename}

  • egrep: 확장 정규 표현식 지원

  • fgrep: 정규표현식 무시

※ 정규 표현식

메타 문자용도
^줄의 시작 설정
$줄의 마지막 지정
.한 문자 대치
*아무것도 없거나 여러 문자 대치
[]패턴 중 한 문자 대치
[^]패턴 중 제외할 한 문자

파일 및 디렉토리 검색

  • find
    find {pathname} {expression} {action}

vi 편집기

vim을 쓰자... nano도 좋고 vscode...

q, w, wq, q!

dd

r - 커서 위치 글자 하나 대체
u - 뒤로가기
ctrl r - 앞으로가기

y - 한줄 복사
p - 븥여넣기

x - 삭제
dd - 한줄삭제

v/V - 비주얼모드

%s/원래글자/바꿀글자/g - 원래글자를 바꿀글자로 변한 %s -> 1,3s 1~3번째줄만 바꾼다 전부다
g 없으면 한줄에 하나만 바꿈 exe old adbb old g없으면 앞에 하나만 바꾼다

퍼미션 이해 및 사용

파일/디렉토리 접근 권한

유닉스/리눅스의 모든 파일/디렉토리는 퍼미션들의 집합으로 구성되어 있다

rwx를 8진수로 변환해서 생각하도록 하자. 이후 권한 부여(chmod)시 8진수로 변환해서 이용한다. ex) rwx-wx--x -> 731

  • ls -l
  • ls -n
  • id

퍼미션 변경

  • 심볼릭 모드 변경
  • 8진수 모드 변경

기본 권한 변경

파일과 디렉토리 생성 시기본 권한으로 생성
기본 권한은 umask에 의해 설정됨

umask 영구적 설정

/etc/profile
/etc/bashrc
~/.bash_profile
~/.bashrc
에서 umask xxx

  • chmod
    옵션 - 해당디렉토리 + 하위까지
    대문자

쉘 명령어 사용

TODO
PG 114 역 홑 다옴표 `` -> 요즘은 ()로

  • tee

etc 밑에 전체적인설정
~밑에는 개별 사용자 설정

쉘 프로그래밍

TODO

프로세스 제어 및 작업관리

TODO

  • ps

  • pstree

  • top

  • pgrep

  • kill

  • pkill
    pgrep pkill 같이쓴다

아카이브 생성

tar
옵션 c t x -> 선택
f -> 필수
이름같으면 덮어써짐

tar xf first.tar

tar xf first.tar -C /home/user



※ SSH
VBox/VMware에 Rocky 를 띄워서 이용하고 있는데 아무래도 가상머신 내에 쉘창에서 이용하는 것 보다 SSH를 이용하여 윈도우 CMD로 연결하여 쓰자...
Virtual Box 기준으로 작성하지만 VMware도 비슷하니까 동일하게 적용할 수 있다.

네트워크 탭에서 "호스트 전용 어댑터"를 추가한다.

enp0s8 또는 본인의 호스트 전용 어댑터 이더넷 부분이 Connected로 변경되어 있는지 확인하자... 이거 확인안하고 왜 ip 가 부여안되고 있는지 한참 해맸다.

쉘을 열고 ifconfig 명령어를 이용해 enp0s8의 ip 주소를 확인한다.

sudo dnf install -y openssh-server
sudo systemctl enable sshd --now

이후 ssh 연결을 위해 ssh를 install 해준다.

systemctl status sshd

설치 후 해당 명령어를 입력했을때 active라고 나온다면 정상적으로 설치된 것이다.

윈도우 cmd에서 ssh {name}@{ip}를 입력하고 password를 입력하면 연결에 성공할 수 있다.

추가적으로 ssh는 비밀번호를 이용한 연결과 키를 이용한 연결 두가지 방식있다.
키를 이용한 연결을 할 시에는 ssh-keygen을 이용해 RSA 키 쌍을 생성 후 비밀키가 저장된 경로를 이용해 연결을 한다.

ssh {name}@{ip} -p {port} -i {path}
-p는 포트 번호 지정이고 비밀번호를 이용한 연결에도 필요시 적어주자.
-i는 키 경로를 지정하는 옵션이다. RSA 키 쌍을 생성 후 비밀키 경로를 넣으면 된다.

자세한 ssh-keygen 생성및 적용 방법까진 정리하진 않겠으나 구글링하면 정리가 잘 되어있다. 생성형 AI도 답변 잘 해주고...

wargame에서 ssh 키 연결하는 부분에 비밀번호와 키를 이용한 연결 2가지가 있다는 것을 정확히 인지하지 못해 해맸기에 해당 부분을 추가적으로 적었다.

※ 참고자료
테크넷과 함께하는 유닉스 관리자를 위한 엔터프라이즈 솔라리스 핵심 운영 가이드 2판
https://wikidocs.net/278175
https://m.blog.naver.com/islove8587/221945262618
https://yuxlog.tistory.com/14
https://handari.tistory.com/8#google_vignette
https://whitehairhan.tistory.com/426

0개의 댓글