본문 바로가기
Study/Udemy

[Linux] Learn Linux in 5 Days and Level Up Your Career(9/6, 9/9)

by ganyga 2024. 9. 6.

Day 1~2

Linux 파일 시스템 구조

  • / : Root, 가장 상위에 있는 파일 시스템
    각 디렉터리마다 하위 디렉터리가 있음
    • /root : 특별 관리 계정
    • /bin : 바이너리 파일이나 실행 가능한 프로그램을 찾는 곳
      프로그램은 사람이 읽을 수 있는 소스 코드로 작성됨, 그 텍스트 파일은 컴퓨터 읽기 가능한 바이너리로 컴파일 됨
      컴퓨터 코드는 0과 1로 이루어져 있어 바이너리라 불림
      그래서 실행할 수 있는 응용 프로그램은 /bin에 위치함
    • /boot : 부팅하는데 필요한 파일, Linux Kernel을 찾을 수 있음
    • /etc : 구성 파일을 찾는 곳
      구성 파일은 운영 체제나 응용 프로그램의 작동 방식을 제어
      ex) 텍스트 모드로 부팅할지 그래픽 모드로 부팅할지
    • /home : 사용자 홈 디렉터리가 저장되는 곳
      리눅스는 여러 사용자 계정을 가질 수 있기 때문에 분리할 수 있음
    • /opt : 옵션 또는 타사 소프트웨어가 저장되는 곳
      운영 체제에 들어있지 않은 소프트웨어를 말함
    • /tmp : 임시 공간, 파일을 tmp에 두고 Linux 서버나 데스크톱이 리부팅되면 파일이 사라짐
    • /usr : 사용자 디렉터리, 사용자 관련 프로그램이 있는 곳
      디렉터리 마다 하위 디렉터리가 있음
    • /var : 변수 데이터
      응용 프로그램에 의해 생성된 로그 파일
    • /srv : Linux 서버가 제공하는 데이터를 저장하는 위치로 사용됨
      • /srv/www : 웹 서버 파일
      • /srv/ftp : FTP 파일

 

응용 프로그램 디렉터리 구조

기본적으로 Linux 운영 체제나 배포판에 기본 제공되지 않는 응용 프로그램은 다양한 경로에 있을 수 있음

일반적으로 /opt/ 이나 /usr/local/ 경로에 있음 

ex)

  • /usr/local/crashplan/bin
  • /usr/local/crashplan/etc
  • /usr/local/crashplan/lib
  • /usr/local/crashplan/log

ex)

  • /opt/avg/bin
  • /opt/avg/etc
  • /opt/avg/lib
  • /opt/avg/log

Shell

- Linux 시스템에 대한 기본 인터페이스

- 애플리케이션이나 프로그램으로 사용자가 보내는 명령을 받아 사용자를 위해 수행함

- 루트는 Linux 시스템의 특별한 사용자

 

명령 프롬프트

  • ~jason = /home/jason
    ~ : 홈 디렉터리나 사용 중인 현재 계정 디렉터리를 나타냄
  • ~pat = /home/pat
  • ~root = /root
  • ~ftp = /var/ftp
    Linux 시스템의 모든 계정이 개별 사용자와 연결된 것은 아님, 자체 계정을 가질 때도 있음

기본 Linux 명령어

  • . : 현재 디렉터리
  • .. : 부모 디렉터리
  • pwd : 현재 작업 데릭터리를 보여줌
  • cd : 현재 작업 디렉터리 변경
  • ls : 디렉터리의 내용을 나열
    • ls -l : 파일과 디렉터리에 대한 자세한 정보 보여줌
    • ls -a : 숨겨진 파일을 포함하는 긴 목록 출력
    • ls -t : 시간 표시
    • ls -r : 순서 바꾸기(reverse)
    • ls latr : 역순으로 분류된 모든 파일
    • ls -R : 하위 디렉터리까지 포함해서 보기
      •  / : Directory
      • @ : Link
      • * : Executable (실행 가능)
  • tree -d : 하위 디렉터리까지 구조 보기
  • cat : 파일의 내용을 보여줌
  • clear : 화면을 깨끗하게 해줌
  • man command :  주어진 명령어와 관련된 문서를 보여줌
    •  space로 다음 페이지 표시
    • q 명령어로 빠져나올 수 있음
  • exit : 세션 종료
  • echo $VAR_NAME : 변수 설정
  • which : 위치나 전체 경로 찾을 때 사용
  • man -k calendar : 어떤 명령어를 사용할지 검색해볼 수 있음, 추천하는 명령어가 뜸
  • mkdir : 디렉터리 생성
    • mkdir -p : 부모 디렉터리까지 생성, ex) mkdir -p 1/2/3
  • rmdir : 하위 디렉터리가 없을 때 삭제
  • rm -rf 디렉터리 : 디렉터리를 재귀적으로 삭제하고 싶을 때
  • touch : 새로운 파일 생성, 파일이 존재하지 않으면 새로 생성

 

추가 리눅스 명령어

  • uptime : 마지막으로 재부팅 된 시간, 전원을 켠 후 얼마나 실행되었는지

Day 3

파일 / 디렉터리 권한

  • r : Read, 파일 내용을 읽을 수 있음 / 디렉터리에서 파일 이름을 볼 수 있음
  • w : Write, 파일에 대한 허가가 있으면 수정할 수 있음 / 항목을 디렉터리 내에서 수정할 수 있도록 해줌, 디렉터리에 있는 내용을 수정할 수 있음
  • x : Execute, 파일을 프로그램으로 실행할 수 있음 / 디렉터리에 있는 파일의 메타데이터를 볼 수 있도록 함

읽기 4, 쓰기 2, 실행 1

 

사용자 카테고리

리눅스의 모든 유저는 적어도 한 그룹에 해당하며 주 그룹을 호출함, 유저는 여러 그룹에 속할 수 있음

  • u : User
  • g : Group
  • o : Other
  • a : All
  • chmod : 사용 권한을 변경하기 위해 사용하는 명령어
    chmod g+w sales.data
    chmod u+rwx, g-x sales.data
    • ugoa : user, group, other, all
    • +-=  : add, subtract, or set permissions
    • rwx : Read, Write, Execute
  • chgrp : 그룹 변경

파일 생성 mask 기본 권한

  • 777 : 디렉터리
  • 666 : 파일
  • unmask : 새로 생성되는 파일이나 디렉터리의 권한 제한
    • unmask - S : mask값 확인하기
  Directory File
Base Permission 777 666
Stubtract Umask -022 -022
Creations Permission 755 644

파일과 디렉터리 찾기

  • find : 찾기에 경로를 제공하고 검색 식을 입력하면 경로와 식에 맞는 결과를 리턴함
    현재 디렉터리에 있는 모든 파일과 그 디렉터리 아래의 모든 하위 디렉터리를 반환함
    어떤 옵션도 없이 find를 실행하면 현재 작업 디렉터리에서 모든 것을 찾을 수 있음 
    • -name pattern : 검색 패턴을 찾으면 그 패턴에 일치하는 파일과 디렉터리를 모두 반환
    • -mtime days : 타입 옵션, 수정 시간을 통해 파일을 찾을 수 있음
    • -size num : 크기에 따른 파일 검색 가능
    • -iname : Camel표기법(소문자 대문자가 섞인)인 것을 검색할 때 유용함
      find /usr/sbin -name networkmanager -> 검색결과 X
      find /usr/sbin -iname networkmanager -> 검색결과 : /usr/sbin/NetworkManager
    • v로 끝나는 파일을 검색
      find /usr/bin -name "*v"
    • 10일 이상부터 90일 이하인 파일 검색
      find /usr/ -mtime +10 -mtime -90
    • s로 시작하는 파일
      find /usr -name "s*" -ls
  • locate
    • 인덱스로 작동
    • 단점은 결과가 실시간으로 나오지 않음, 1-2분 전에 생성된 파일을 찾는다면 인덱스에는 없을 수 있음
    • 일부 시스템과 Linux 배포판에는 디폴트로 설치되지 않는 곳이 있음

 

 

파일 내용 보기

  • tail - 15 file.txt : 마지막 15줄까지 표현
  • tail -f file : 로그 파일 보기
  • head -2 file.txt : 맨 위 2줄 표현
  • more my-app.log : 긴 파일을 한 페이지씩 보여주는 명령어, 화면에 화면 단위로 끊어서 출력하는 명령어

 

Vi 편집기 명령어

명령 모드

  • i : 현재 커서 위치에 삽입
  • dd : 커서가 위치한 곳의 한 줄 삭제 (p로 복구 가능), 5dd : 5줄 삭제
  • u : 방금 한 명령 취소
  • yy : 현재 줄을 버퍼로 복사, 5yy : 5줄 복사
  • p : 현재 커서가 있는 줄 바로 아래에 버퍼 내용 붙여 넣기
  • k : 위로
  • j : 아래로
  • l : 오른쪽으로
  • h : 왼쪽으로
  • 0(숫자) : 커서가 있는 줄의 맨 앞으로 감
  • $ : 커서가 있는 줄의 맨 뒤로 감
  • G : 파일의 끝으로 이동
  • cw : 단어 변경
  • cc : 줄 전체 바꾸기
  • A : 줄 맨 오른쪽에 삽입

라인 모드

  • set nu : 라인 번호 출력
  • 숫자 : 해당 라인으로 커서 이동
  • wq : 저장 후 종료
  • /문자열 : 현재 커서 위치에서부터 파일 앞쪽으로 문자열 탐색
  • ?문자열 : 현재 커서 위치에서부터 파일 뒤쪽으로 문자열 탐색
  • :1로 해서 첫 번째 줄로 이동하고, /문자열로 검색

Day 4

파일 삭제, 복사, 이동 이름 바꾸기, 압축하는 방법

반드시 삭제하기 전에는 더블 체크 하기!

  • rm file : 파일 삭제
    • rm -r dir : 디렉터리, 내용 재귀적으로 삭제
    • rm -f file : 강제로 삭제
  • cp : 파일 복사
    cp [옵션] [복사 대상 디렉터리 or 파일] [복사될 디렉터리 or 파일]
    • cp -i : 목적지 파일이 존재하면 덮어쓰기 전에 물어봄
    • cp -r : 하위 디렉터리까지 모두 복사
      cp -r [복사 대상 디렉터리] [복사될 디렉터리]
  • mv : 파일 옮기거나 이름 바꿀 때 사용
    • mv -i : 목적지 파일에 내용이 존재하면 덮어쓰기 전에 물어봄
  • sort : 파일 내용 정렬
    • -r : 역순으로 정렬
    • -u : 중복된 내용을 제거
    • -k : 정해진 필드를 기준으로 정렬
  • tar : 여러 개의 파일을 하나의 파일로 묶거나 풀 때 사용하는 명령
    • c : tar 아카이브 생성
    • v : 세부 정보 표시
    • f : 대상 tar 아카이브 지정
    • x : tar 아카이브에서 파일 추출
    • z : gzip 압축 적용 옵션
    • j : bzip2 압축 적용 옵션
    • w : 모든 진행 과정에 대해 확인 요청
    • t : 아카이브에 포함된 내용 확인
    • tar 명령 사용 예제
      • tar cvf T.tar * : 현재 디렉터리의 모든 파일과 디렉터리를 tar로 묶기
      • tar cvf T.tar [PATH] : 대상 디렉터리를 포함한 모든 파일과 디렉터리를 tar로 묶기
      • tar cvf T.tar [FILE_1] [FILE_2] : 파일을 지정하여 tar 아카이브로 묶기
      • tar xvf T.tar : tar 아카이브를 현재 디렉터리에 풀기
      • tar xvf T.tar -C [PATH] : tar 아카이브를 지정된 디렉터리에 풀기
      • tar tvf T.tar : tar 아카이브의 내용 확인하기
      • tar zcvf T.tar.gz * : 현재 디렉터리를 tar로 묶고 gzip으로 압축하기
      • tar zxvf T.tar.gz : gzip으로 압축된 tar 아카이브를 현재 디렉터리에 풀기
      • tar jcvf T.tar.bz2 * : 현재 디렉터리를 tar로 묶고 bzip2로 압축하기
      • tar jxvf T.tar.bz2 : bzip2로 압축된 tar 아카이브를 현재 디렉터리에 풀기
      • tar cvfw T.tar * : tar 아카이브 묶거나 풀 때 파일 별 진행 여부 확인하기
  • gzip : 단일 파일 압축
  • gunzip :  압축 해제
  • gzcat : 압축을 해제하지 않아도 gzip 명령이나 compress 명령으로 압축된 파일을 볼 수 있음
  • zcat : 압축을 해제하지 않아도 compress 명령으로 압축된 파일을 볼 수 있음
  • du : 파일 및 디렉터리 용량 확인
    • du -k : 1KB 단위로 출력하는 옵션
    • du -h : 관리자가 보기 쉬운 단위(Byte, Kbyte, Mbyte, Gbyte)로 출력하는 옵션

 Wildcards

  • * : 0개 이거나 그 이상의 글자와 매치되는지 찾을 때
    • *.txt
    • a*
    • a*.txt
  • ? : 한 글자와 일치할 때 사용
    • ?.txt
    • a?
    • a?.txt
  • [] : 특정 검색 패턴을 생성
    • [aeiou]
    • ca[nt]*
    • [[:space:]]
    • [[:upper:]]
  • 사용 예시
    • mv *.txt notes : *.txt로 시작하는 것을 notes로 옮겨라

 

파일 비교

  • diff : 파일의 차이점 보여줌
  • sdiff : 두 파일을 비교하여 나란히 차이점을 표시함
    • | : 다른 부분 보여줌
  • vimdiff : vim 에디터를 이용해 두 파일의 차이를 표시함
    • qa : 동시에 두 파일을 닫을 수 있음
  • grep : 패턴이 매칭되는 라인을 보여줌
    • - i : 대소문자를 구분하지 않음
    • - c : 일치하는 행의 수를 출력
    • - n : 패턴이 포함된 행 번호 함께 출력
    • - v : 패턴과 일치하지 않는 행만 출력
  • | : 두 개의 명령어를 합쳐서 사용할 수 있음
    cat file | grep pattern

 

파일 입력, 출력과 리다이렉션

I/O Name Abbreviation File Descriptor
Standard Input stdin 0
Standard Output stdout 1
Standard Error stderr 2
  • > : 표준 출력을 파일로 리다이렉션, 내용이 존재하면 덮어씀
  • >> : 표준 출력을 파일로 리다이렉션, 기존 콘텐츠에 추가함
  • < : 표준 입력을 파일에서 명령으로 리다이렉션
  • & : 파일 이름 대신 파일 설명을 쓰고 싶으면
  • 2>&1 : 표준 에러와 표준 출력이 결합된 것
  • 2>file : 표준 에러 파일이 리다이렉션

 

네트워크를 이용한 파일 복사

  • SCP : Secure copy, 소스파일과 목적지를 미리 알고 있어야 함
    • scp z.txt linuxsvr1:/tmp/
  • SFTP : SSH file transfer protocol
    • local 명령어 사용 하려면 앞에 l만 붙이면 됨, lpwd, lls 등

SCP or SFTP를 사용하려면 클라이언트가 필요함

  • mac과 linux는 SCP, SFTP 명령줄 유틸리티를 갖고 있음
  • windows를 실행 중이라면 PuTTY 등 도구를 사용하면 됨
  • Graphical한 것도 있음 Cyberduck, FileZilla, WinSCP 등

 

FTP는 SCP나 SFTP 같은 보안 전송 프로토콜이 아님!
따라서 로그인 자격 증명이 네트워크를 통해 일반 텍스트로 전송됨, 업로드 및 다운로드 파일도 암호화되지 않음

  • FTP : 파일 전송 프로토콜

 

Aliases

로그아웃하면 alias가 사라지게 되는데 세션 간 지속되도록 하려면 .bash_profile에 추가하기!

  • alias [name[=value]] : alias 만들기
    alias cls='clear'
  • unalias name : alias 제거
  • unalias -a : 모든 alias 제거

Day 5

환경 변수

환경 변수는 대소문자를 구별함, 환경 변수는 규칙상 대문자임, 소문자 환경 변수를 만들 수 있지만 보기 드묾, 이름과 값과 쌍으로 구성됨

  • printenv : 모든 환경 보는 명령어
    • PATH : 어떤 명령을 어떤 순서로 실행할지 결정
  • printenv HOME : 특정 환경 변수(HOME)의 값을 보고 싶을 때
  • echo $HOME : 환경 변수의 내용을 표시함, 환경 변수 이름 앞에 $를 적어야 함
  • export VAR='value' : 환경 변수를 생성
    • 등호 주변에 띄어쓰기 하면 안됨
    • 스페이스가 들어가면 에러남
    • 환경 변수가 이미 존재한다면 콘텐츠를 덮어쓸 수 있음
    • 환경 변수를 생성할 뿐만 아니라 업데이트가 가능함
  • unset VAR : 환경 변수 제거하는 명령어

 

프로세스 실행과 프로그램 및 명령 실행

  •  ps : 현재 실행 중인 프로세스 보기
    지정된 옵션이 없다면 p는 현재 세션과 관련된 프로세스를 표시함
    • -e : 커널 프로세스를 제외한 모든 프로세스를 출력
    • -f : 출력을 풀 포맷으로 표기 UID, PID, PPID 등 함께 표시
    • -u [username] : 특정 사용자의 프로세스 정보를 출력, 사용자를 지정하지 않는다면 현재 사용자 기준으로 출력
    • -p : 특정 PID를 지정하여 출력
      * PID : 프로세스 식별 번호

    • ps 명령어 사용 예시
      • ps -e
      • ps -ef
      • ps -eH
      • ps -e --forest
      • ps -u username
  • pstree : 트리 포맷의 프로세스를 볼 수 있음
  • top : 현재 OS 상태를 나타내줌
  • htop : top과 같은 정보를 제공하지만 약간 다른 형식으로 제공함
  • command & : 명령어를 백그라운드에서 실행
  • bg [%num] : 중단된 프로세스를 백그라운드로 보내기
  • fg [%num] : 백그라운드에서 실행 중인 것을 포어그라운드에서 실행
  • kill : 작업 종료
  • jobs : 실행 중인 작업 리스트
  • ctrl-c : 포어그라운드에서 실행 중인 프로세스 종료
  • kill [-sig] pid : 프로세스 종료
  • kill -l : 시그널 리스트를 보여줌