이제 /tmp
그 안에 임시 파일이 있습니다. /dev/sdc1
그 위에 하드드라이브()를 마운트 하면 /tmp
하드드라이브에 있는 파일들을 볼 수 있습니다. /tmp
하드 드라이브를 설치하면 실제 하드 드라이브 내용은 어떻게 됩니까? /tmp
하드디스크가 장착된 상태에서 실제 내용을 읽고 쓸 수 있나요 ?
python@lanix / $ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 286G 43G 229G 16% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
udev 3.8G 4.0K 3.8G 1% /dev
tmpfs 766M 1.4M 765M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 3.8G 38M 3.8G 1% /run/shm
none 100M 24K 100M 1% /run/user
/dev/sdb1 7.5G 2.7G 4.9G 35% /mnt
/dev/sdc1 932G 242G 691G 26% /tmp
답변1
하드 드라이브가 마운트되면 /tmp의 실제 내용은 어떻게 됩니까?
거의 아무것도. 이는 단순히 보기에서 숨겨져 있으며 일반적인 파일 시스템 탐색을 통해 액세스할 수 없습니다.
하드디스크를 마운트하면 /tmp의 실제 내용을 읽고 쓸 수 있나요?
예. "원본" 내부에서 파일 핸들을 연 프로세스는 /tmp
해당 핸들을 계속 사용할 수 있습니다. 마운트를 다른 곳에 묶어서 다른 곳에 "다시 나타나게" 할 수도 있습니다 /
.
# mount -o bind / /somewhere/else
# ls /somewhere/else/tmp
여기 무슨 일이 일어나고 있는지 더 잘 이해하기 위해 실행할 수 있는 작은 실험이 있습니다.
노트:이것은 완전히 정확해지려는 시도도 아니고 실제로 일어난 일에 대한 철저한 설명도 아닙니다. 그러나 큰 그림을 제공할 수 있을 만큼 정확해야 합니다.
내 컴퓨터에 이름이 지정된 사용자를 만들고 me
그의 집에 파일이 있는 임의의 디렉터리를 만들었습니다.
me@home $ pwd
/home/me/tmp
me@home $ echo hello > some_file
me@home $ ls
some_file
me@home $ cat some_file
hello
이 시점에서는 특별한 것이 없습니다. 이는 단지 일반 파일이 있는 일반 디렉토리일 뿐입니다. 세션을 그대로 열어두고 cwd
테스트 디렉터리에 배치했습니다.
루트로서 작은 파일 시스템을 생성하여 /home/me/tmp
.
root@home # dd if=/dev/zero of=./fs bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.00467318 s, 2.2 GB/s
root@home # mkfs -t ext2 ./fs
mke2fs 1.42.12 (29-Aug-2014)
[... snip ...]
Writing superblocks and filesystem accounting information: done
root@home # mount ./fs /home/me/tmp
그런 다음 새 터미널을 열고 me
둘러보았습니다.
me@home #2 $ cd tmp
me@home #2 $ ls
lost+found
me@home #2 $ cat some_file
cat: some_file: No such file or directory
me@home #2 $ echo bye bye > some_file
-su: some_file: Permission denied
따라서 우리가 만든 파일은 분명히 존재하지 않습니다. 이 lost+found
디렉토리는 ext 파일 시스템의 루트를 나타냅니다. 그리고 쓰기 권한을 잃었으므로 분명히 원래 디렉토리가 아닙니다.
첫 번째 장면으로 돌아가서 me
이것이 세상을 어떻게 보는지 살펴보겠습니다.
me@home $ echo something else > other_file
작성하는데는 문제가 없습니다.
me@home $ cat some_file other_file
hello
something else
원본 파일은 여전히 존재하며 생성된 새 파일에는 문제가 없습니다.
아? 어떻게 되어가나요?
첫 번째 세션은 그 위에 다른 파일 시스템을 루트 마운트하여 덮어쓰기 전에 이 디렉터리에 들어갑니다. 마운트 작업은 원래 파일 시스템에 전혀 영향을 미치지 않습니다. 셸 프로세스는 원래 파일 시스템의 디렉터리에 대해 완전히 유효한 핸들을 가지며 계속해서 상호 작용할 수 있습니다. 이리저리 뛰어다닐 것 같은아래에카펫 장착 지점.
두 번째 세션은 마운트된 디렉터리로 이동합니다. 그러면 새로운 빈 파일 시스템이 표시됩니다. 그리고 시스템 관리자가 요청한 공간을 사용할 수 없도록 권한을 취소했는데... 이 문제를 해결하겠습니다.
root@home # chown me:users /home/me/tmp
me@home #2 $ echo bye bye > some_file
me@home #2 $ ls
lost+found some_file
me@home #2 $ cat some_file
bye bye
1회기 당신도 깔개 아래로 들어갈 수 있나요? (곰팡이가 되었습니다.)
틀림없이! 세션 1이 파일 시스템 트리를 마운트 밖으로 이동하면 내부 핸들이 손실되고 다른 핸들과 마찬가지로 마운트를 따릅니다.
me@home $ cd
me@home $ pwd
/home/me
me@home $ cd tmp
me@home $ cat some_file other_file
bye bye
cat: other_file: No such file or directory
세션 #2와 동일한 보기이며 다시 정상으로 돌아옵니다.
그런데 파일이 사라지지 않았는지 어떻게 알 수 있나요? 더 이상 아무도 그것을 찾고 있지 않습니다!
바인드 장착이 편리해지는 순간 중 하나입니다. 이미 마운트된 파일 시스템을 다른 곳에 마운트할 수 있습니다.
me@home $ mkdir ~/bind
root@home # mount -o bind /home/me /home/me/bind
(예, 파일 시스템을 "자체 내에서" 바인드 마운트할 수 있습니다. 멋진 트릭이죠?)
me@home $ ls bind/tmp
other_file some_file
me@home $ cat bind/tmp/*
something else
hello
그래서 그들은 실제로 조치를 취할 준비가 되어 있습니다. 원래 위치에서는 표시/액세스할 수 없으며 설치 시 일반적인 디렉터리 탐색에서 숨겨집니다.
한 번 시도해 보시길 권합니다. 플레이 중인 "트릭"을 이해하고 나면 실제로는 복잡하지 않습니다. 일단 익숙해지면 더 많은 러그 풀링을 위해 Union File System을 살펴보세요 :-)
하지만 주의할 점은 부팅 프로세스가 완료되면 /tmp
또는 (또는 핵심 운영 체제 디렉터리) /var
에 설치하는 것은 실제로 좋은 생각이 아니라는 것입니다 . 많은 응용 프로그램이 이러한 디렉터리에 상태를 유지하므로 해당 응용 프로그램을 중심으로 설치 게임을 하면 심각한 혼란을 겪을 수 있습니다.