리눅스는 기본적으로 유닉스 계열의 운영체제이므로 유닉스의 많은 부분을 그대로 이어받아서 유지한다. 유닉스에서는 시스템과 관련된 정보와 하드웨어 같은 장치를 모두 파일로 관리한다.
리눅스도 유닉스처럼 시스템 관련 정보와 장치를 관리하기 위해서 파일을 사용한다. 윈도우와 다른점은 리눅스는 물리적인 디스크가 여러 개더라도 시스템 전체에 단 하나의 트리만 가진다.
cloud : 확장과 축소가 편리
디스크공간 100GB 빌림 실제 디스크공간 500GB면 문제가 없음
1TB로 늘리고 싶으면
윈도우의 경우 500GB를 하나 더 늘리면 C, D 드라이브로 따로 관리됨. 연속성 X
리눅스는 디스크를 또 갖다 붙여도 하나의 트리로 연결되어 있기 때문에 연속성이 보장된다
데이터를 저장하는데 사용하는 파일
파일의 종류를 확인하는 명령
file .profile
file /bin
file /dev
file /bin/bash
/로 표시ls -F / : 루트 디렉토리에 제공되는 디렉토리 확인

/가 붙으면 디렉토리, @가 붙으면 심볼릭 링크/dev : 디바이스 파일 배치되어 있는 디렉토리
/home : 사용자 별로 할당되는 홈 디렉토리가 배치되는 디렉토리.
/home/jiwon/media : DVD/CD 또는 USB와 같은 외부장치를 연결하는 디렉토리
/etc: 리눅스 설정 파일이 위치하는 디렉터리✅
/opt: 추가 패키지가 설치되는 디렉터리 ✅
apt install 해서 설치한 패키지가 저장됨/root: root 계정의 홈 디렉터리
/sys: 리눅스 커널과 관련있는 파일이 저장된 디렉터리
/usr: 기본 실행 파일 과 라이브러리 파일, 헤더 파일 등이 저장되는 디렉터리
/boot: 부팅에 필요한 커널 파일이 저장된 디렉터리
/lost+found: 파일 시스템에 문제가 발생하여 복구할 경우 문제가 되는 파일이 저장되는 디렉터리
루트로부터의 경로
/로 시작현재 위치로 부터의 경로
/ 이외의 문자로 시작.././
사용자가 파일을 사용 목적에 맞도록 사용하고 해당 파일에 정확하게 접근할 수 있도록 구별할 수 있는 변별력을 제공
우분투에서 확장자는 선택적 요소, 확장자가 없어도 상관없다
🔸파일과 디렉토리 이름 규칙
/ 는 파일명이나 디렉토리명에 사용 못함
파일과 디렉토리 이름에는 알파벳, 숫자, 마침표만 사용
알파벳 대소문자 구분
파일과 디렉토리 이름을 설정할 때 .으로 시작하면 숨김 파일로 간주
pwd : 현재 작업 디렉토리 확인
cd 이동할디렉토리명 : 현재 디렉토리 변경
cd ~ 또는 cd : 홈디렉토리로 이동
ls [옵션] [디렉토리나 파일] : 디렉토리 내용 확인
옵션:
a : 숨김 파일을 포함하여 모든 파일의 목록을 출력
d : 디렉토리 자체 정보
i : 첫번째 행에 i-node를 출력
l : 파일의 상세 정보 출력 ✅
A : .과 ..을 제외한 모든 파일 목록을 출력
F : 파일의 종류 표시(* : 실행파일, / : 디렉토리, @ : 심볼릭링크)
L : 심볼릭 링크 파일의 경우 원본 파일의 정보 출력
R : 하위 디랙토리 목록까지 출력
상세정보 출력 l

dir : ls 와 유사한 명령
vdir : ls 와 유사한 명령, 자세하게 나옴
mkdir [옵션] [디렉토리]


rmdir [옵션] [디렉토리]
one/tmp/test 구조 일 때:
rmdir one : 삭제 실패, rmdir은 내부에 파일이나 디렉토리가 존재하면 삭제하지 못함rmdir -p one/tmp/test : test 디렉토리를 삭제하고, tmp가 비어있으면 tmp도 삭제, one도 비어 있으면 one도 삭제🔸 cat [옵션] [파일]
ex) cat /etc/hosts : /etc/hosts 파일 내용 출력

🔸 more [옵션] [파일]
: 파일의 내용을 화면 단위로 출력
옵션
+행번호 : 시작할 행 번호를 설정화면 출력 후 Enter를 누르면 한 행씩 이동하고 spacebar를 누르면 화면단위로 이동
지나간 내용을 확인 할 수 없음
🔸 less [파일]
: 파일의 내용을 화면단위로 출력
vi 편집기 와 동일j : 한 행 아래로k : 한 행 위로spacebar : 다음화면으로CTRL + b : 이전화면으로 tail [옵션] [파일]
: 파일의 내용 뒷 부분을 출력
+행번호 : 지정한 행부터 끝까지 출력-숫자 : 화면에 출력 행의 수를 지저(기본 10)-f : 파일 출력을 종료하지 않고 주기적으로 계속 출력, 로그를 확인할 때 사용함, 새로운 내용이 추가될 때마다 화면에 출력되기 때문에 로깅에서 매우 유용한 옵션🔸 파일에서 단어 검색
less 명령으로 /etc/services 파일 출력 : less /etc/services
HTTP 검색 : /HTTP
다른 곳에도 있는지 확인 : n
명령 종료 : q
🔸 cp [옵션] [파일1이나 디랙토리1] [파일2나 디렉토리2]
: [파일1이나 디랙토리1] 을 [파일2나 디렉토리2]에 복사
옵션
i : 파일 2가 존재하는 경우 덮어씌울 지 물어보는 옵션 (✅ 잘 확인하기)
r : 디렉토리 복사
🔸 여러 개의 파일을 특정 디렉토리로 복사
여러 개의 파일을 지정할 때는 마지막이 디렉토리이어야 한다
cp [파일1] [파일2] [파일3] [파일 ..] [디렉토리]
cp -r temp temp2 # 디렉토리복사
🔸 기존에 존재하는 디렉토리에 -r 복사를 하게 되면 하위 디렉토리로 만들어진다
cp -r temp temp2 # 기존에 존재하는 디렉토리로 복사할 시 하위 디렉토리 생성
temp
|--- text1
temp2 # 처음 복사
|--- text1
|--- temp # 두번째 복사
|--- text1
#### 파일 복사 예제
```bash
cp /etc/hosts text1 # 파일 복사
cp -i /etc/services text1 # 덮어씌울 건지 물어보는 복사

mkdir temp # 디렉토리만들기
cp text1 temp # temp파일 안에 text1 복사
cp text1 temp/text2 # text1파일을 text2라는 새로운 이름으로 복사
🔸 mv [옵션] [파일1이나 디랙토리1] [파일2나 디렉토리2]
: [파일1이나 디랙토리1] 을 [파일2나 디렉토리2]로 이동 또는 이름 변경
옵션
i : 이미 존재하는 경우 덮어씌울지 묻는 대화상자 생성🔸 현재 디렉토리에서 이름 변경
mv [현재이름] [새로운이름]

🔸디렉토리에 파일 이름을 지정해서 이동
파일 이름을 변경할 수 있음
mv data1 temp/data2
🔸여러 파일 이동
여러 파일을 이동 시킬 수 있는데 마지막 인자는 디렉토리여야 한다
mv [파일1] [파일2] [파일3] [파일 ..] [디렉토리]

. 현재 디렉토리🔸 디렉토리 이름변경
mv temp2 temp3

디렉토리 이름 변경을 할려고 할 때 기존에 존재하는 디렉토리 이름을 뒤에 사용하면 하위 디렉토리로 이동
mv temp3 temp
🔸rm [옵션] [파일 또는 디렉토리]
옵션
i : 대화형으로 삭제
r : 디렉토리 삭제
🔸파일 삭제
rm data2
🔸디렉토리가 비어 있지 않을 때 삭제
rm -r temp3 # 묻지 않고 삭제
rm -ir temp3 # 물어보면서 삭제

cp /etc/hosts test.org
mkdir test
cp -r test.org test
mv test/test.org test/test.bak
rm test.org
cp test/test.bak test/test.org
rm -ir test

파일 링크는 기존파일에 새로운 이름을 붙이는 것
복잡한 디렉토리 계층 구조를 포함하여 파일명이 복잡해지는 경우 짧게 줄인 다른 이름을 붙여서 간단하게 사용할 때 유용
종류
하드링크 : 기존파일에 새로운 파일이름을 추가로 생성
심볼릭링크 : 원본 파일을 가리키는 새로운 파일을 만드는 것
리눅스의 파일 시스템은 하나의 파일을 보관할 때 파일이름 + i-node + 데이터 블록 으로 구성해서 보관한다
ls -i 명령을 했을 때 나오는 번호가 i-node 번호
🔸 하드 링크 만들기
ln [옵션] [원본 파일] [링크 파일]
s : 심볼릭 링크🔸하드링크 생성
ln data1 data1.ln
cp data1 data1.cp
data1.ln 이라는 하드링크를 생성하고 data1.cp 라는 복사 파일을 생성했다
data1.ln 과 data1의 i-node 번호는 같지만 data1.cp의 i-node 번호는 다르다data1.ln 파일을 수정하면 data1 의 파일도 같이 수정된다.🔸하드링크 생성
ln data1 data1.ln
🔸하드링크 생성
ln data1 data1.ln
🔸하드링크 생성
ln data1 data1.ln
l 이다🔸 심볼릭 링크 만들기
ln [옵션] [원본 파일] [링크 파일]
s : 심볼릭 링크🔸 심볼릭 링크 생성
ln -s data1 data1.sl

ln test.org test.ln
ln test.org test.ln2
i-node 확인

test.org 와 test.ln, test.ln2의 하드 링크 개수를 확인

cp /etc/hosts work
ln work work.ln
ln -s work work.sl
cp work work.cp
work.sl 파일을 편집기로 열어서 마지막 행을 삭제
work, work.ln, work.sl, work.cp 파일의 내용을 확인

work.cptouch빈 파일을 만들거나 접근/수정 시간 변경할 수 있는 명령어
파일이 존재하지 않으면 내용이 없는 빈 파일을 만들고 파일이 존재하면 현재 시간 또는 옵션에 지정한 시간으로 파일의 관련 시간을 변경한다
touch [옵션] [파일]
a : 접근 시간만 변경m : 수정 시간만 변경t : 접근 시간을 직접 입력test라는 빈파일 생성
touch test
tt라는 파일의 시간 변경
touch -t 12311200 tt

grepgrep [옵션] [패턴] [파일]
실습
/etc/services 파일을 data로 복사
cp /etc/services data
data 파일에서 NNTP 검색
grep NNTP data

행번호도 같이 출력

대소문자 구별 x
grep -in tcp data
find특정 파일이 어느 디렉토리에 있는지 찾아주는 명령어
find [경로] [검색조건] [동작]
검색 조건
name : 파일이름
type : 파일 종류
user : 로그인 아이디
perm : 접근권한
동작
exec 명령 {} : 검색된 파일에 명령을 수행
ok 명령 {} : 사용자의 확인을 받아서 명령을 실행
print : 검색된 파일의 절대 경로를 출력
ls : 검색 결과를 목록 형식으로 출력
/usr/bin 디렉토리에서 ls 파일의 위치를 조회
find /usr/bin -name ls
/home 디렉토리에서 jiwoni라는 유저가 소유하는 파일을 조회
find /home -name jiwoni
/tmp 디렉토리에서 jiwoni라는 소유자가 가진 파일을 조회해서 모두 삭제
find /tmp -user jiwoni -exec rm {} \;
-> 허가 거부
/tmp 디렉토리에서 jiwoni라는 소유자가 가진 파일을 조회해서 하나하나 물어보면서 삭제
find /tmp -user jiwoni -ok rm {} \;
grep -n NETBIOS /etc/services

find ~ -name data1.cp

find ~ -name data1.cp -exec mv {} temp \;