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
- ls [옵션] [디렉토리 경로]
- 옵션
- -a : 숨김도 표시
- -d : 디렉토리 자체 정보 출력 (루트의 정보를 확인할 때 사용)
- -i : inode 자체의 정보를 출력
- -l : 파일의 상세 정보 출력
- -A : . 과 ..을 제외한 모든 파일 목록을 출력
- -F : 파일의 종류를 표시(*: 실행 파일, /: 디렉토리, @ : 심볼릭 링크)
- -L : 심볼릭 링크의 경우 원본 파일의 정보를 출력
- -R : 하위 디렉토리 목록 까지 출력
- -ㅣ 을 사용했을 때 나오는 정보
- 문자 1개 : 파일의 종류
- - : 일반 파일
- d : 디렉토리
- l : 심볼릭 링크
- b : 블럭 단위로 읽고 쓰는 블록 장치 파일
- c : 섹터 단위로 읽고 쓰는 문자 장치 파일
- p : 파이프 파일 - 프로세스 간 통신에 사용되는 파일
- s : 소켓
- rwxrwxrwx : r은 읽기에 관련된 권한, w는 쓰기에 관한 권한, x는 실행에 관련된 권한
- 첫 3개는 파일의 소유자이고 다음 3개는 그룹 사용자 권한이고 마지막 3개는 기타 사용자 권한입니다.
- 3개씩 묶어서 8진수로 나타내기도 합니다. (각 글자 하나를 비트로 봄)
- 777 이라고 하면 모든 사용자에게 모든 권한을 부여한 것
- 751(111 101 001)은 모든 사용자는 실행할 수 있고 그룹 사용자는 읽기도 가능하고 수정 및 쓰기는 소유자만 가능
- 숫자 1개 : 하드 링크의 수
- 아이디 : 파일 소유자
- 아이디 : 파일이 속한 그룹
- 숫자 : 파일 크기
- 날짜 : 파일이 마지막으로 수정된 시간
- 파일 이름
- 문자 1개 : 파일의 종류
- ls 명령을 이용해서 파일의 존재 여부를 확인하는 것이 가능
- ls 명령은 존재하지 않은 경로를 대입하면 에러가 나옴.
-
- 리눅스에서는 윈도우 사용자를 위해서 dir과 vdir 명령도 제공
- ls 명령은 클라우드 환경이나 Docker 등에서 많이 사용하므로 반드시 숙지
- 디렉토리 생성 : 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 명령을 사용해야 함.
- -p : 디렉토리를 삭제하고 그 부모 디렉토리가 비어있으면 부모 디렉토리도 삭제
- 옵션
- 실습
- 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 디렉토리로 이동
- 현재 작업 디렉토리를 절대 경로로 출력
- 형식 : rmdir [옵션] [디렉토리 경로]
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
- /tmp/hosts 파일을 현재 디렉토리에 test.org 파일로 복사
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 \;
- /etc/services 파일에서 NETBIOS 가 있는 행을 찾아서 행 번호와 함께 출력
반응형
LIST