본문 바로가기
Linux

Linux

by 황밤 2023. 9. 25.
728x90
반응형

2023-09-25

 

Linux

 

1. 가상화 소프트웨어를 이용한 Ubuntu Linux 설치

1.1) 준비물

  • 가상화 소프트웨어 설치
    • Windows : VMWare Player 또는 Virtual Box
    • Mac M1 이상의 프로세서 : UTM 설치
  • 리눅스 이미지

1.2) 이미지를 이용해서 설치

1.3) 원격 접속 프로그램 설치

  • Windows에서는 Putty 설치

1.4) Linux에 원격 접속이 가능하도록 설정

  • apt 업데이트 : sudo apt-get update
  • 서비스 설치 : sudo apt-get install openssh-server
  • 서비스 실행 : sudo systemctl status ssh
    • 텍스트가 출력되면 :q 를 입력해서 빠져나오기
  • 방화벽에서 포트를 열어 달라고 요청 : sudo ufw allow ssh
  • ip 확인 : hostname -I

2. 리눅스

2.1) GNU 프로젝트

  • GNU는 Unix 와 호환되는 자유 소프트웨어를 개발하는 프로젝트
  • 4가지 자유를 보장
    • 프로그램을 어떠한 목적으로도 실행할 수 있는 자유
    • 자신의 필요에 맞게 개작할 수 있는 자유
    • 복제물을 재배포할 수 있는 자유
    • 개선된 이점을 발표할 자

2.2) 리눅스의 시작

  • 핀란드 헬싱키 대학교의 리누스 토발즈가 교육용 운영체제를 개발하고 커널을 Open 했는데 이 때 이름이 Linux
  • 리누스 + 유닉스 -> 리눅스

2.3) 리눅스 종류

  • Debian 계열 : Ubuntu
  • Slackware 계열 : Suse
  • RedHat 계열 : Fedora(시험판), Cent OS(상용화된 버전의 기능을 가진 무료 버전인데 최근에 이름을 수정 - rocky), RedHat Enterprise(상용화된 버젼)

3. 리눅스 명령어 구조

  • 형식 : 명령어 [옵션] [인자]
    • 명령어 : 리눅스를 사용하기 위해 사용자가 입력하는 명령
      • 옵션과 인자는 명령어에 따라서 생략이 가능
    • 옵션 : 명령의 세부 기능으로 - 나 --로 시작
      • 대부분의 경우 - 다음에는 한 글자가 오고 -- 다음에는 단어가 옵니다.
      • 여러 개의 옵션은 하나의 - 뒤에 연결해서 사용하는 것이 가능
    • 인자 : 명령에 전달하는 값
      • 각 요소는 공백으로 구분
      • [ ] 안에 나오면 생략이 가능한 것, | 다음에 나오면 선택
      • 문자열, {}, <, > 은 필
  • 실습
    • ls 명령은 현재 디렉토리에 있는 모든 내용을 출력해달라는 명령
    • ls -a 
    • ls -l
    • ls -a -l
    • ls -l -a
    • ls -al
    • ls -la

4. 종료와 재시작

4.1) 종료 : shutdown

  • shutdown -P + 분단위시간 : 분단위 시간 후에 종료
  • shutdown -r 시간 : 시간에 재부팅
  • shutdown -c : 예약된 종료를 취소
  • shutdown -k + 분단위시간 : 분단위시간 후에 종료한다는 메시지 출력 

4.2) 재부팅

  • reboot
  • shutdown -r now
  • init 6

4.3) 로그아웃

  • logout

5. 명령어

5.1) 명령어 도움말

  • man 명령어
    • clear 의 도움말 : man clear'

5.2) 현재 화면 클리어 : clear

 

5.3) 비밀번호 변경 : passwd

 

5.4) 명령에 별명을 붙이기 

  • alias 별명='실제 명령'
  • alias lsa = 'ls -a'

5.5) 명령어 자동 완성

  • 현재 입력 중인 내용으로 시작하는 명령이 1개 밖에 없는 경우 입력 도중 Tab을 누르면 명령어를 자동 완성해 줍니다.
  • 명령어가 여러 개인 경우는 Tab을 한 번 더 누르면 모든 명령어를 출력해줍니다.

5.6) History Recall

  • 위 아래 화살표를 이용하면 이전에 수행했던 명령어를 확인할 수 있습니다.

5.7) date

  • 현재 시간과 날짜 출력

5.8) timedatectl

  • 자세한 날짜와 시간을 출력

5.9) 사용자 정보

  • logname : 사용 중 인 로그인 이름 확인
  • users : 접속한 사용자의 아이디
  • who : 로그인 한 모든 사용자 계정
  • whoami : 현재 우분투 사용자 확인

5.10) 시스템 정보 확인

  • uname [옵션]
  • 옵션
    • -a : 모든 정보 확인
    • -m : 사용 중인 하드웨어 정보 확인
    • -n : 호스트 이름 확인
    • -r : 운영체제 릴리즈 번호
    • -s : 운영체제 이름
    • -v : 버젼 출시 일자

5.11) sudo

  • sudo 명령어 : 관리자 권한으로 명령어를 실행
  • sudo su : 현재 계정의 환경 변수를 유지하면서 관리자 계정으로 전환
  • sudo su - : 환경 변수까지 완전히 전환할 때사용

 


6. 파일 시스템

6.1) 파일과 디렉토리

  • 리눅스 파일의 종류
    • 일반파일
      • 데이터를 저장하는데 사용
      • 텍스트 파일, 실행 파일, 이미지 파일 등
      • 텍스트 파일은 파일 내용을 확인하는 명령으로 내용 확인 가능하고 문서 편집기를 사용해서 내용을 보거나 편집을 할 수 있습니다.
      • 그 이외 파일들은 데이터가 바이너리 형태로 되어 있어서 바이너리 파일이라고도 하면 특정 응용 프로그램이 있어야만 사용이 가능합니다.
    • 디렉토리
      • 리눅스에서는 디렉토리도 파일로 간주
    • 심볼릭 링크
      • 원본 파일을 대신하도록 원본 파일을 다른 파일명으로 지정한 것
      • 윈도우즈의 바로 가기 아이콘과 유사
    • 장치 파일
      • 하드 디스크나 키보드와 같은 장치도 파일로 취급
      • 대부분의 장치 파일은 /dev 디렉토리 안에 존재

6.2) file 명령을 이용해서 파일의 종류를 확인하는 것이 가능

  • file .profile
  • file .ssh
  • file  /bin/bash

6.3) 디렉토리 계층 구조

  • 루트 디렉토리로 부터 시작하는 계층 구조
  • 루트 디렉토리를 표시하는 기호가 /
    • 루트 디렉토리 안에 bin, etc, usr, home, boot, dev 등의 디렉토리가 존재
    • 루트 디렉토리 안의 서브 디렉토리 확인 : ls -F /
    • @이 붙은 것은 symbolic link
svng@svng-VMware-Virtual-Platform:~$ ls -F /
bin@    dev/   lib@    libx32@      mnt/   root/  snap/     sys/  var/
boot/   etc/   lib32@  lost+found/  opt/   run/   srv/      tmp/
cdrom/  home/  lib64@  media/       proc/  sbin@  swap.img  usr/
  • dev : 장치 파일이 담긴 디렉토리
  • home : 사용자 홈 디렉토리
  • media : USB 와 같은 외부 장치를 연결하는 디렉토리
  • opt : 추가 패키지가 설치되는 디렉토리
  • root : root 계정의 홈 디렉토리
  • sys : 리눅스 커널과 관련된 파일이 존재하는 디렉토리
  • usr : 기본적인 실행 파일과 라이브러리 파일, 헤더 파일이 위치 (unix system resource 의 약자)
  • boot : 부팅에 관련된 파일
  • etc : 리눅스 설정을 위한 파일
  • lost+found : 파일 시스템에 문제가 발생해서 복구할 경우 문제가 되는 파일이 저장되는 디렉토리로 보통은 비어있는 상태
  • mnt : 파일 시스템을 임시로 마운트하는 디렉토리
  • proc : 프로세스 정보 등 커널 관련 정보가 저장되는 디렉토리
  • run : 실행 중인 서비스와 관련된 파일이 저장되는 디렉토리
  • srv : FTP(File Transfer Protocol - 파일 전송 서비스)나 Web 등 시스템에서 제공하는 서비스의 데이터가 저장되는 디렉토리
  • tmp : 임시 디렉토리로 재부팅하면 내용이 모두 소멸됩니다.
  • var : 시스템 운영 중에 발생하는 데이터나 로그 등 내용이 자주 바뀌는 파일이 주로 저장

 

  • 작업 디렉토리
    • 현재 작업 디렉토리를 확인하는 명령은 pwd
svng@svng-VMware-Virtual-Platform:~$ pwd
/home/svng
svng@svng-VMware-Virtual-Platform:~$
  • 홈 디렉토리
    • 각 사용자에게 할당된 디렉토리
    • 홈 디렉토리를 표시하는 기호는 ~
    • 홈 디렉토리로 프롬프트를 옮기는 명령은 cd~ 
svng@svng-VMware-Virtual-Platform:~$ cd /media
svng@svng-VMware-Virtual-Platform:/media$ ls
svng
svng@svng-VMware-Virtual-Platform:/media$ ls -a
.  ..  svng
svng@svng-VMware-Virtual-Platform:/media$ cd /opt
svng@svng-VMware-Virtual-Platform:/opt$ cd ~
svng@svng-VMware-Virtual-Platform:~$

 

6.4) 절대 경로와 상대 경로

  • 절대 경로 : 루트로부터의 경로
    • 유닉스나 리눅스에서는 /로 시작
    • /로 시작해서 모든 중간 경로를 기재하는 방식
    • 절대 경로는 변하지 않습니다
  • 상대 경로 : 현재 경로로부터의 경로
    • / 이외의 문자로 시작
    • ./ 는 현재 디렉토리를 의미하는 예약어로 현재 디렉토리 내의 파일이나 서브 디렉토리로 이동하고자 할 때 사용
    • ../ 는 상위 디렉토리로 이동하는 예약어
  • 루트 디렉토리의 etc 안의 hosts 디렉토리로 이동
    • 절대 경로로 이동 : cd /etc/hosts
    • 상대 경로로 이동 : 현재 디렉토리가 사용자의 홈 디렉토리라면 사용자의 홈 디렉토리는 /home/유저이름 이므로 ../ home 디렉토리가 되고 ../를 추가하면 루트 디렉토리가 되므로 ../../etc/hosts 가 상대 경로를 이용
    • 상대 경로를 사용할 때 현재 디렉토리를 의미하는 ./는 생략해도 되는 경우가 있지만 실행을 할 때는 생략을 하면 안됩니다.
    • 현재 디렉토리에 존재하는 파일을 실행할 대는 ./를 붙여야 합니다.
  • 실습
    • 홈 디렉토리 이동 : cd ~
    • 절대 경로를 이용해서 /etc/hosts 로 이동 : cd /etc/hosts
      • 프롬프트를 확인하거나 pwd 명령으로 확인
    • 홈 디렉토리로 이동 : cd ~
    • 상대 경로를 이요해서 /etc/hosts로 이동 : cd ../../etc/hosts
      • 프롬프트를 확인하거나 pwd 명령으로 확인
  • 절대 경로와 상대 경로를 사용하는 방법을 알앙야하는 이유는 웹 프로그래밍에서 요청 경로를 설정할 때 도 동일한 방식을 사용합니다. 
    • 웹 프로그래밍을 할 때 절대 경로를 사용하는게 편리하지만 프레임워크 들은 상대 경로 형태로 지정하는 것을 강제하는 경우도 있습니다.
    • 404 Error 가 뜬다면, 파일의 경로를 잘못 쓴 경우가 많음

6.5) 파일과 디렉토리 이름 규칙

  • / 는 사용할 수 없습니다.
  • 알파벳, 숫자, 하이픈, 언더스코어, 마침표를 사용
  • 대소문자를 구분합니다.
  • 확장자는 없습니다.
    • 확장자는 파일 종류를 구분하기 위한 문자열이지 필수 항목이 아닙니다.
  •  . 으로 시작하면 숨김 파일이 됩니다.
  • 널문자를 사용할 수 없습니다.

6.6) 디렉토리 관련 명령

  • pwd : 현재 디렉토리 확인
  • cd : 디렉토리 이동
    • cd 이동할 디렉토리 경로
  • 디렉토리 내용 확인 : ls
    1. ls [옵션] [디렉토리 경로]
    2. 옵션
      • -a : 숨김도 표시
      • -d : 디렉토리 자체 정보 출력 (루트의 정보를 확인할 때 사용)
      • -i : inode 자체의 정보를 출력
      • -l : 파일의 상세 정보 출력
      • -A : . 과 ..을 제외한 모든 파일 목록을 출력
      • -F : 파일의 종류를 표시(*: 실행 파일, /: 디렉토리, @ : 심볼릭 링크)
      • -L : 심볼릭 링크의 경우 원본 파일의 정보를 출력
      • -R : 하위 디렉토리 목록 까지 출력
    3. -ㅣ 을 사용했을 때 나오는 정보
      • 문자 1개 : 파일의 종류
        • - : 일반 파일
        • d : 디렉토리
        • l : 심볼릭 링크
        • b : 블럭 단위로 읽고 쓰는 블록 장치 파일
        • c : 섹터 단위로 읽고 쓰는 문자 장치 파일
        • p : 파이프 파일 - 프로세스 간 통신에 사용되는 파일
        • s  : 소켓
      • rwxrwxrwx : r은 읽기에 관련된 권한, w는 쓰기에 관한 권한, x는 실행에 관련된 권한
        • 첫 3개는 파일의 소유자이고 다음 3개는 그룹 사용자 권한이고 마지막 3개는 기타 사용자 권한입니다.
        • 3개씩 묶어서 8진수로 나타내기도 합니다. (각 글자 하나를 비트로 봄)
        • 777 이라고 하면 모든 사용자에게 모든 권한을 부여한 것
        • 751(111 101 001)은 모든 사용자는 실행할 수 있고 그룹 사용자는 읽기도 가능하고 수정 및 쓰기는 소유자만 가능
      • 숫자 1개 : 하드 링크의 수
      • 아이디 : 파일 소유자
      • 아이디 : 파일이 속한 그룹
      • 숫자 : 파일 크기
      • 날짜 : 파일이 마지막으로 수정된 시간
      • 파일 이름 
  •  ls 명령을 이용해서 파일의 존재 여부를 확인하는 것이 가능
    • ls 명령은 존재하지 않은 경로를 대입하면 에러가 나옴.
    1. 리눅스에서는 윈도우 사용자를 위해서 dir과 vdir 명령도 제공
    2. ls 명령은 클라우드 환경이나 Docker 등에서 많이 사용하므로 반드시 숙지
    3. 디렉토리 생성 : mkdir
      • 형식 : mkdir [옵션] [디렉토리 경로]
      • 옵션은 -p 가 있는데 중간 디렉토리를 생성해주는 옵션
      • 디렉토리 여러 개를 동시에 만들 때는 디렉토리 경로를 공백으로 구분하면서 나열하면 됩니다.
      • 현재 디렉토리에 temp 디렉토리 생성 : mkdir temp
      • 현재 디렉토리에 tmp1 과 tmp2, tmp3 디렉토리 생성 : mkdir tmp1 tmp2 tmp3
      • 현재 디렉토리에 temp/mid/kor 디렉토리 생성
        • mkdir temp/mid/kor 은 에러 - mid 디렉토리가 없어서
        • mkdir -p temp/mid/kor
      • 하위 디렉토리까지 확인 : ls-R temp
  • 디렉토리 삭제 : rmdir
    • 형식 : rmdir [옵션] [디렉토리 경로]
      • 옵션 
        • -p : 디렉토리를 삭제하고 그 부모 디렉토리가 비어있으면 부모 디렉토리도 삭제
          • 주의할 점은 디렉토리가 비어있지 않으면 rmdir 로는 삭제가 안됨.
          • 이 경우는 rm 명령을 사용해야 합니다.
          • colab 에서는 빈 디렉토리가 아니면 삭제가 되지 않으므로 빠른 삭제를 원하면 rm 명령을 사용해야 함.
    • 실습
      • tmp3 디렉토리를 삭제 : rmdir tmp3
      • temp 디렉토리를 삭제 : rmdir temp
        • 이 명령은 에러 - temp 디렉토리 안에 다른 디렉토리가 존재
    • 연습문제
      • 현재 작업 디렉토리를 절대 경로로 출력
        • pwd
      • 현재 디렉토리의 숨김 파일을 포함해서 모든 파일을 조회
        • ls -a
      • me 디렉토리를 생성
        • mkdir me
      • me 디렉토리 밑에 you, him 디렉토리를 한번에 생성
        • cd me
        • mkdir you him
      • me 디렉토리를 삭제 : 삭제가 되지 않으면 이유가 무엇인지 생각
        • cd ../
        • rm -rf me 를 해주어야 삭제가 가능
      • home 디렉토리로 이동
svng@svng-VMware-Virtual-Platform:~$ mkdir me
svng@svng-VMware-Virtual-Platform:~$ cd me
svng@svng-VMware-Virtual-Platform:~/me$ mkdir -p you, him
svng@svng-VMware-Virtual-Platform:~/me$ ls
him  you,
svng@svng-VMware-Virtual-Platform:~/me$ ls
him  you,
svng@svng-VMware-Virtual-Platform:~/me$ mkdir you
svng@svng-VMware-Virtual-Platform:~/me$ ls
him  you  you,
svng@svng-VMware-Virtual-Platform:~/me$ rm me
rm: 'me'을(를) 제거할 수 없습니다: 그런 파일이나 디렉터리가 없습니다
svng@svng-VMware-Virtual-Platform:~/me$ rm /me
rm: '/me'을(를) 제거할 수 없습니다: 그런 파일이나 디렉터리가 없습니다
svng@svng-VMware-Virtual-Platform:~/me$ rmdir me/
rmdir: 'me/' 제거 실패: 그런 파일이나 디렉터리가 없습니다
svng@svng-VMware-Virtual-Platform:~/me$ rmdir me
rmdir: 'me' 제거 실패: 그런 파일이나 디렉터리가 없습니다
svng@svng-VMware-Virtual-Platform:~/me$ rm -rf me
svng@svng-VMware-Virtual-Platform:~/me$ ls
him  you  you,
svng@svng-VMware-Virtual-Platform:~/me$ rm -rf you
svng@svng-VMware-Virtual-Platform:~/me$ ls
him  you,
svng@svng-VMware-Virtual-Platform:~/me$ cd ../
svng@svng-VMware-Virtual-Platform:~$ rm -rf me
svng@svng-VMware-Virtual-Platform:~$ ls
snap  공개  다운로드  문서  바탕화면  비디오  사진  서식  음악
svng@svng-VMware-Virtual-Platform:~$ cd ~
svng@svng-VMware-Virtual-Platform:~$ ls
snap  공개  다운로드  문서  바탕화면  비디오  사진  서식  음악
svng@svng-VMware-Virtual-Platform:~$

 

6.7) 파일 관련 명령

  • 파일 내용 출력 : cat
  • 형식 : cat [옵션] [파일경로]
  • 옵션으로는 -n 이 있는데 행 번호를 같이 출력
    • /etc/hosts 파일의 내용을 출력 : cat/etc/hosts
    • 파일의 내용을 전부 출력
    • 내용이 많을 때 보기가 어려울 수 있음
  • 파일 작성
    • sudo vi text 명령을 입력하여 편집기로 이동
    • i 키를 누르고 문서내용 작성
    • esc 를 누르고 :wq! 를 눌러 빠져나온다.
  • 텍스트 파일 출력 : more
    • 화면 단위로 출력
    • more [옵션] [파일경로]
    • 옵션 + 라인번호
    • spacebar 를 누르면 다음 화면을 보여주고 enter를 누르면 한 줄 씩 출력
svng@svng-VMware-Virtual-Platform:~$ cat text
dfasdf
adsfads
fa
a

hi
my
name
is
hwang
sung
ju
: wq!
:wq!
  • -n 옵션과 함께 출력
svng@svng-VMware-Virtual-Platform:~$ cat -n text
     1  dfasdf
     2  adsfads
     3  fa
     4  a
     5
     6  hi
     7  my
     8  name
     9  is
    10  hwang
    11  sung
    12  ju
    13  : wq!
    14  :wq!
    15
  • 텍스트 파일 출력 : less
    • 화면 단위로 출력
    • 예전에는 more 명령이 이전 페이지로 이동이 안되서 less 명령을 이용해서 출력한 후 방향키를 이용해서 위아래 이동을 했는데 지금은 more 명령에서도 스크롤을 사용할 수 있어서 거의 사용되지 않음
  • 텍스트 파일 출력 : head, tail
    • head 또는 tail [옵션] [파일 경로]
    • 기본은 위나 아래에서 10줄을 출력
    • 옵션으로 +행 번호를 주면 행 번호부터 끝까지 출력
      • 숫자를 이용하면 출력할 행의 개수를 설정
      • -f는 파일 출력을 종료하지 않고 주기적으로 계속 출력
      • -f 는 파일의 내용이 주기적으로 변경되는 경우에만 사용
  • 파일 복사 : cp
    • 형식 : cp [옵션] [파일경로1] [파일경로2]
    • 파일 경로 1의 내용을 파일 경로 2에 복사합니다.
    • 리눅스는 복사할 위치에 동일한 경로를 갖는 파일이 존재하면 덮어씌웁니다.
    • 옵션으로 -i 를 사용하면 동일한 경로에 파일이나 디렉토리가 있는 경우 덮어씌울 것인지 물어봅니다.
    • -r 은 디렉토리를 복사할 때 사용
  • 리눅스에서는 복사나 삭제 시 기본적으로 묻지 않고 바로 수행하기 때문에 주의를 해야 합니다.
    • 되도록이면 삭제나 복사를 할 때 -i 옵션과 같이 사용하는 것이 좋습니다.
  • 실습
    • text 라는 파일을 text1 이라는 파일로 복사 : cp text text1
    • text 라는 파일을 temp 디렉토리로 복사 : cp text temp -ls temp 명령으로 확인
    • 여러 개의 파일을 하나의 디렉토리로 복사 가능 : cp 파일 경로를 나열 디렉토리 경로
    • 다시 cp text text1 명령을 수행하면 덮어씌우기가 진행 됨.
    • 존재 여부 확인을 위해서는 -i 를 사용
    • 디렉토리를 복사할 때는 -r 옵션을 사용해야 함
    • temp 디렉토리의 모든 내용을 temp2 에 복사 : cp -r temp temp2
  • 파일 이동과 파일명 변경
    • 형식 : mv [옵션] [파일 경로1] [파일 경로2]
    • 파일 경로 1의 내용을 파일 경로 2로 이동
    • 옵션은 -i가 있는데, 존재 여부를 확인해 덮어씌울 여부를 확인
    • 동일한 경로에서 작업하면 파일 이름 변경이 됩니다.
    • 파일 경로1은 파일이고 파일 경로2가 디렉토리 이면 동일한 이름으로 이동이 됩니다.
    • 파일 경로2가 디렉토리/파일이름이 되면 파일이름이 변경되면서 이동합니다.
  • 실습
    • text 파일 이름을 name 으로 변경 : mv text name
    • name을 temp 디렉토리로 이동 : mv name temp
    • ls temp 으로 확인
    • text1 을 temp 디렉토리에 textcopy 라는 이름으로 이동 : mv text1 temp/textcopy
  • 파일 삭제
    • 형식 : rm [옵션] [파일 경로]
    • 옵션 -i는 삭제할 것인지 확인
    • 옵션 -r은 디렉토리를 삭제
  • 실습
    • temp2 디렉토리 삭제 : rm -r temp2
    • 리눅스는 삭제를 하면 복구할 수 없기 때문에 -i 옵션과 같이 삭제하는 것을 고려
  •  tmp 디렉토리에 hosts 파일을 생성하고 작성
    • sudo vi /tmp/hosts
    • i를 누르고 내용 작성
    • esc 누르고 :wq! 를 입력해서 저장 후 종료
  • 연습문제
    • /tmp/hosts 파일을 현재 디렉토리에 test.org 파일로 복사
      • cd /tmp
      • cp /tmp/hosts test.org
    • 현재 디렉토리에 test 디렉토리를 생성
      • cd ~
      • mkdir test
    • test.org 파일을 test 디렉토리에 복사
      • cp test.org test
      • 확인
        • ls test
    • test 디렉토리의 test.org 파일을 test.bak 파일로 변경
      • cd testc
      • mv test.org test.bak
    • 현재 디렉토리의 test.org 파일을 삭제
      • cd ~
      • rm test.org
    • test 디렉토리의 test.bak 파일을 현재 디렉토리에 test.org 파일로 복사
      • cd test/test.bak test.org
      • cp test.bak ../test.org
    • test 디렉토리를 삭제
      • cd ~
      • rm -r test

6.8) 파일 링크

  • 기존 파일에 다른 이름을 추가로 부여하는 것
  • 복잡한 파일 경로를 가진 파일을 짧게 줄인 다른 이름으로 간단하게 사용할 때 유용
  • 하드 링크는 기존 파일에 새로운 파일명을 추가로 생성하는 것이고 심볼릭 링크는 원본 파일을 가리키는 새로운 파일을 만드는 것
  • 리눅스 파일의 구성
    • 리눅스 파일은 파일경로 + inode + 데이터 블록으로 구성
    • 파일경로는 사용자가 파일에 접근하기 위한 경로이고 inode 는 파일 정보가 담긴 특별한 구조체로서 외부적으로는 번호로 표시되고 내부적으로 파일의 종류와 크기, 소유자, 파일 변경 시간, 파일 이름 등 파일 상세 정보와 데이터 블록 주소가 저장되어 있습니다.
    • ls -l 명령으로 출력하는 정보가 inode의 정보
    • inode 의 번호는 ls -i 명령으로 확인이 가능
    • 이름은 다르지만 inode 번호가 같다면 동일한 파일
  • 하드 링크 만들기
    • 형식 : ln [옵션] [원본 경로] [하드 링크 경로]
    • 옵션으로 -s 를 사용하면 심볼릭 링크가 생성됩니다.
  • 실습
    • sudo vi temp.txt 명령을 실행한 후 i 키를 눌러서 아무 내용이나 작성한 후 esc 눌러서 빠져나온 후 :wq! 를 입력해서 저장하고 vi 편집기를 종료
    • temp.txt 에 대한 하드링크 temp.ln 을 생성
      • ln temp.txt temp.ln
      • 명령어 실행시, 명령이 허용되지 않으면, 코드 맨앞에 sudo 를 추가한다.
      • ls -i 명령으로 inode를 확인해 보면 같은 숫자임을 알 수 있다. 즉 이름만 다른 같은 파일임을 알 수 있다.
      • sudo vi temp.txt 명령을 수행하고 i를 눌러서 내용을 편집하고 esc를 누른 후 :wq!를 수행해서 저장하고 빠져 나옵니다.
      • cat temp.ln 명령을 이용해서 temp.ln의 내용을 확인 - 변경 내용이 적용
      • 하드 링크로 연결된 파일을 지울 때는 다른 이름이 존재한다고 메시지를 출력하며 파일을 지운다고 해서 내용이 지워지는 것이 아니고 이름만 지워집니다.
      • 리눅스는 하드 링크 수가 0이 되어야 실제 내용이 사라진 것입니다.
  • 심볼릭 링크
    • 기존 파일이나 디렉토리에 바로가기 아이콘 처럼 별도의 파일을 만들어서 링크를 설정하는 것
    • 하드 링크 수를 변경시키지 않기 때문에 원본 파일을 삭제하면 링크가 깨져버리게 됩니다.
    • 생성을 할 때는 하드 링크를 생성하는 방법과 동일한 데 -s 옵션을 추가
      • 생성 : ln -s temp.ln temp.sn
      • 확인 : ls -i
      • 내용 확인 : vi temp.sn
      • rm temp.ln : temp.ln 을 삭제
      • 내용 확인 : vi temp.sn - 기존 내용이 사라졌고 아무것도 출력되지 않고 새로 작성하는 화면이 출력

6.9) 기타 파일 관련 명령

  • touch : 빈 파일을 생성하고 존재하는 파일이면 수정 시간을 변경
    • touch testtemp
  • grep : 파일 내에서 특정 문자열을 검색할 때 사용하는데 정규 표현식 사용 가능
    • 형식 : grep [옵션] [패턴] [파일 경로]
    • 옵션 
      • -i : 대소문자 구별없이 검색
      • -l : 지정한 패턴이 포함된 파일 이름을 출력
      • -n : 행 번호를 출력
  • 실습
    • /etc/services 에 NNTP 텍스트가 존재하는지 확인
    • grep -n NNTP /etc/services
  • find : 파일을 검색
    • 형식 : find [경로] [검색 조건] [동작]
    • 검색 조건 옵션
      • -name : 파일 이름을 주고 해당 이름으로 검색
      • -type : 파일 종류를 주고 종류로 검색
      • -user : 아이디를 주어 지정한 사용자가 소유한 모든 파일 검색
      • -perm : 접근 권한 : 지정한 접근 권한과 일치하는 파일을 검색
    • 동작 옵션
      • -exec 명령 {} \;: 검색된 파일에 명령을 실행
      • -ok 명령 {} \: 사용자의 확인을 받아서 명령을 실행
      • -print : 파일의 절대 경로를 출력
      • -ls : 검색 결과를 출력
    • /usr/bin 디렉토리에 ls 라는 파일명이 있는지 확인 : find /usr/bin -name ls
    • /home 디렉토리에 svng 라는 유저가 소유한 파일을 검색 : find /home -user svng
    • /tmp 디렉토리에 svng 이라는 유저가 소유한 파일을 검색해서 삭제 : find /tmp -user svng -exec rm {} \;
  • whereis : 특정 명령의 위치를 찾아서 절대 경로를 리턴
    • 형식 : whereis [옵션] [명령어]
    • 옵션 :
      • -b : 바이너리 파일만 검색
      • -m : 메뉴얼 파일만 검색
      • -s : 소스 파일만 검색
    • whereis ls
  • which : 명령 파일의 위치를 찾아서 그 경로나 alias 를 출력
    • which [명령]
  • 연습
    • /etc/services 파일에서 NETBIOS 가 있는 행을 찾아서 행 번호와 함께 출력
      • grep -n NETBIOS /etc/services 
    • 홈 디렉토리에서 파일명이 data.cp 인 파일이 있는지 검색
      • find ~ -name data.cp
    • 홈 디렉토리에서 파일명이 data.cp 인 파일이 있는지 검색한 후 이 파일을 /tmp 디렉토리로 이동
      • find ~ -name data.cp -exec mv {} /tmp \;

 

반응형
LIST

'Linux' 카테고리의 다른 글

Linux3  (0) 2023.10.04